在OD中打开00_upx.exe之后,到达的地方是PUSHAD,这个时候下一个断点,直接运行到这里,然后单步步过,再取消掉下好的断点:
此时,在右侧ESP处下一个访问断点:
下面黄色区域是修改堆栈的操作:
而下面的这个jmp就会直接跳转到OEP:
下面是jmp到达的地方:
运行到这里之后直接右键选择dump:
进行dump,取消掉重建输入表:
dump完成之后用专用工具去修复它:
进程选择当前的exe,然后修改OEP,将旁边的两个按钮以此按下:
选中无效的输入表函数,点击无效函数按钮,剪切无效函数:
剪切掉之后转储:
转储的时候选择之前dump的.exe,然后确定,在去文件夹里打开修复的文件,就可以正常运行了!如果不修复就无法运行起来
方法二(用x32dbg来调):
x32dbg会自动选择是32位还是64位,当前eip指向的是系统断点的位置,点击运行,到达程序入口点:
这里是壳的入口点,f8单步一下,选中esp右键-在内存窗口中转到
选中内存区域,右键-设置一个硬件访问断点-断点-读写断点-4字节
然后f9运行,到达跳转到OEP的位置了,通过jmp找到OEP
到达OEP:
到达之后找到插件scylla:
OEP地址会被自动读取出来,进程也是自动的,然后点击IAT Autosearch去查找IAT,原理就是从OEP开始搜索,直到找到IAT的调用函数