考完研第一次完整的参加一次CTF,考也没考上,ida咋用也忘干净了,还让队友掉出了前十。这就滚去学习re和iov。
reverse
randomvm
linux elf,一个利用rand函数跑起来的vm。还有用到syscall、ptrace反调试。
程序把真正的程序逻辑分到了一个个函数里,然后通过rand函数的返回值跳转到另一个函数。输入字符是使用syscall 0x00,中间还有syscall 0x65来调用ptrace(返回0xff..ffff),达到反调试。
vm函数运行结束后回到main,将加密后的输入与一段12bytes的数据进行比对。
部分解密:
1 | flag = '1234567890ab' |
剩下的爆破:
1 | from subprocess import Popen, PIPE, STDOUT |
ezjunk
windows程序,junk code还算简单,一直f8就能找到真正的逻辑。
程序里用了tls callback,IsDebuggerPresent反调试,会修改TEA的key。另外TEA之后还有一个CRC。
爆破crc:
1 | def enc2_inner(x): |
tea解密:
1 | import ctypes |
车联网
flag1
启动容器后,使用adb connect ip:port
来连接车机,使用 pm 来查找和导出apk,发现有一个D3Factory,直接拿出来用jadx逆向即可看到flag。
flag2 & flag3
当时,拿到 flag1 之后并没有仔细再看apk里面的线索,也没有发现tcpdump的提示,然后就没有思路了,然后用 scrypy 看屏幕,也没通过主屏幕联想到需要搞GPS….不过当时确实有想过分析CAN和自己写apk。还是要多参加比赛(