前言
攻防世界逆向刷题,此题主要学习ESP定律法脱壳,一开始脱壳后程序有点问题,无法运行,不知道是不是后续哪些步骤没有完成,但是不影响反汇编,代码逻辑也没那么复杂,所以不影响做题,看了别人的WP都是动态调试出的结果,问题出在了脱壳时我没有勾选掉重新输入表,虽然不知道为什么。
一、题目分析
查壳发现不知名壳,IDA载入程序什么也看不到,没办法用我的万能脱壳工具,这里学习使用ESP定律法进行手动脱壳。
OD载入程序,f8一次:
在esp寄存器这里右键设置硬件断点,然后f9运行,程序会被断在刚才下的断点的位置:
然后在这个位置利用ollydump插件脱壳,保存:
IDA重新载入程序:
看到main()函数,整体函数的逻辑是很简单的,三个函数都是异或操作,而且与输入无关,唯一比较难理解的就是
这里看了别人的WP,了解到这里是在获取输入,相当于实现了getc,直接写脚本或者动态都可以出结果:
动调的话在调用最后一个拼接函数前下断点,栈里面可以看到:
写脚本的话下面给出示例
二、代码示例
key1 = [0x66,0x6D,0x63,0x64,0x7F