starts
这篇其实是对normal11的wp的一个复现,因为学习到了很多没接触过的东西所以想做一个归纳,以后查看的时候也比较方便。wp写的比较简略,只是给了一个大致的思路,需要搞懂还是要手操一遍才会发现自己哪里不会。
多可执行文件的分析处理
首先是关键代码不在main里面,main函数里有很复杂的代码,看起来并不像关键代码。这里可以在start开始下断点然后跟进看会先走哪里。跟着wp查看init(main)函数前调用的函数,点进去看调用了一个可疑函数sub_400976,然后通过问和查资料了解了一下这段代码的意思。
就是从结尾开始读取12936个字节,当作文件运行。也就是这个文件里有两个可执行文件(ELF).可以使用winhex来把第二个ELF文件抠出来,单独分析。把文件拖进winhex里,从ELF头选中整个文件,右击编辑另存为到新的文件里。
SMC自解密与IDApython的使用
重新使用ida查看新生成的文件的关键代码这时候就能看到一个SMC自解密,即为这个encrypt。
上网查了一下什么是SMC自解密。即自修改代码,简而言之就是程序中的部分代码在运行前是被加密成一段数据,不可反编译,通过程序运行后执行相关解码代功能,对加密的代码数据进行解密,让其恢复正常功能。这里使用idapython来进行解密。wp里的idapython指令是ida7.5以前的指令版本,我这里使用的是ida7.6,所以不能使用旧版的指令,顺带学习了一下idapython的使用。
1 | addr = 0xAF0 #encrypt的地址 |
详细了解idapython这些的用法可以看看这一篇
https://www.cnblogs.com/iBinary/p/14642662.html
IDApython run后查看汇编,这里还有一个字节(地址:B14)影响了反编译,把这个字节nop掉。
对encrypt函数按P从当前地址处解析成函数,再按U解析成未定义的内容。就可以成功反编译代码了,就是一个rc4加密,密文和密钥都给清楚了,还是比较容易分析的。但离谱的是wp的脚本竟然是用c写的,这时候一定要用py整个脚本自己写出来。
RC4解密
1 | key = 'hgame!@#' |
flag:hgame{th1s_f4ke_re4l_w0rld}
END
知识在题目里会越来越综合着去使用,每次都要把东西搞清楚记下来捏。
Author: John Doe
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.