一、esp定律法
进入程序,第行为pushad
单步步过(F8)一下,查看寄存器,当8个寄存器只有esp为红色时,右击红色地址,选择数据窗口中跟随。在左下角的窗口中可以看到,自动跟随到红色地址。
选中若干数据,右击选择断点-硬件访问-(byte,word,dword 任意选择)注:只是访问的字节数不同。
运行(F9)到达断点处,单步步过(F8)几下, 进入到不是不认识的代码地方 ,右键点击分析-从模块中删除分析。
在当前窗口右键选择dollydump脱壳调试进程,分别脱壳两次,不同之处是重建输入表选中和不选中。
程序会因为勾选或者不勾选打不开。
二、单步跟踪法
点击单步步过,直到遇到打开程序的call,就单步步入,当遇到向上跳转的时候可以选中下一条,右键断点-运行到所选位置(F4),直接跳过循环。
以此进行下去,直到看到popad,差不多快到oep了
三、最后一次异常法
在选项-调试设置-异常 将所有勾取消
shift+F9查看按几次程序可以正常打开
重新载入程序,shift+F9执行能够打开程序的前一次
之后在右下角的框中可以看到SE开头的一个字段,右键选择反汇编窗口跟随
在自动选择的那一行下F2断点,再按一次shift+F9会中断下来
之后单步不过当看到popad差不多快到oep了
到达oep后选中第一行,右键ollydump脱壳调试进程 分别选中重建shushu如表和不重建输入表脱壳。
四、SFX自动脱壳法
选项-调试选项-SFX 选择字节方式跟踪真正入口处
直接重载程序,等待即可
五、模拟跟踪法
打开程序 alt+M 可以看到SPX,输入表的地址
在下方command框中输入 tc eip +(spx,输入表的地址)
但是一般不建议直接使用,这里需要结合之前的两次断点法,先接近oep
如果使用两次断点法之后程序跑飞了或者找不到了,可以建议使用此命令。
六、两次断点法
在使用两次断点法时,首先需要设置OD,选择选项-调试设置,在异常栏中将所有勾选。
点击alt+M,在(.rsrc)设置断点(F2),之后忽略异常运行(shift+F9)
之后再alt+M,这次在.test/UPXO区段下断点(F2)
随后F8单步,走到popad,并且有个大跳转
到达oep(程序入口点)
七、出口标志法
一般打开程序是标志是psuhad,出口的标志是popad,那就右键查找-命令输入popad,选取整个块的选中,点击查找,在查找到的popad点击F4,如果程序被打开了那就查找下一个popad,右键查找-下一个,直到当程序F4运行到popad未打开程序时,F8向下,一般可以到达oep
八、8秒到oep法
打开程序,运行程序 右下角窗口拉到最下面向上翻,找到第一个程序名.(地址)右键点击反汇编窗口跟随,之后在程序块中右键分析-删除分析
之后在右下角的窗口再向上翻,找到当前块的第一行,右键点击反汇编窗口跟随,然后在反汇编窗口向上翻找到段首找到oep,然后右键点击数据窗口跟随-选择,再下方数据标红出右键断点-硬件执行
之后重新载入运行。看到oep脱壳就行。一般弱壳就可以了,但是遇到强壳还需要进行如下操作
用将程序放入lordpe右键-纠正镜像大小,然后右键完全转存
之后打开importrec选择程序(程序不能关闭),将程序的oep地址改外正确地址,点击自动查找IAT,再选择获取输入表,点击查找无效函数,右键无效的函数,点击删除指针
最后点击转存到文件
至此强壳脱掉