目录
问题如下:
脱壳的时候我下了硬件断点:在PUSHAD的下一步查看ESP,OD的左下角goto到esp指向的地址,然后右键下硬件断点。
这样再运行很容易就直接定位到了POPAD,看起来都挺顺利的,很容易找到了OEP的位置。但是内存转储出来的exe打开无效果不运行,在110版本的OD中提示:“has entry point outside the code(as specified in the PE header)”。晚上我和同学讨论了下,他可以正常脱壳,我看到他是直接F8一点点一点点的找,最后找到POPAD的位置,或者CTRL+F直接搜索POPAD然后找到地址,dump。没有下断点,我也用他的电脑试了下,可以。但是我在他的电脑上也设置硬件断点之后,就和我的状况一样了。后来我取消硬件断点,把硬件断点都删除,直接dump,因为OEP的地址一直都是1332。也不行了。
我在这个上面发了求助,里面是我的具体问题:
https://www.52pojie.cn/forum.php?mod=viewthread&tid=1042292&page=1#pid28293988
解决:
解决的帖子:https://zhidao.baidu.com/question/691492835131194084.html
https://www.52pojie.cn/thread-525321-1-1.html
WIN7已经验证可行了,再去我的32位虚拟机看看,顺便给虚拟机都做一次spa(把不用的垃圾都去掉,然后整理一下文件),直接运行程序时出现下面的问题:
解决方法:搜索Microsoft Visual C++ 2010 Redistributable Package ,安装即可。https://www.microsoft.com/zh-CN/download/confirmation.aspx?id=5555
还未解决,参照:解决方法:https://www.cnblogs.com/hrhguanli/p/3886490.html
然后就开始脱壳了。
我知道的并且可行的对于UPX的脱壳找OEP的几种方法:
1.pushad的下一步,找到esp的值,OD左下角goto过去,下硬件断点。然后再运行,直接定位到了popad那一部分。然后转到oep即可(即找到oep的地址),dump即可。
然后下断点:(跳过去选中第一个字节即可)
2.直接ctrl+f搜索popad直接看到oep的位置
3.利用ollybdg的dump插件,里面有一个找oep的选项(但这个偶尔我的不可行。),点击后运行也直接过去了。
4.手动ctrl+f8追踪,f7进入循环查看下断点,f9跳出继续走。直到看到oep。
以下硬件断点为例:
1.载入文件看到如下:
2.F7或者F8单步向下一步:
3.记录下esp的地址,到左下角goto
4.下硬件断点:
5.F9运行,直接来到了POPAD的下面:
6.记录下OEP的地址,或者可以f8一路向下,跳过那些小循环,来到OEP
7.内存转储
8. 不用手动修改EIP了,因为已经跳过去了,注意下面直接勾选修复IAT的选项,虽然好像说UPX不选这个也没事,因为壳比较简单,但选上吧。点击脱壳即可。
9.验证可否运行:
偶尔可以成功。什么鬼。dump了好几个,1是没有F8到OEP看到地址直接dump的,2是下面选择方式1的,3是正常跳过去不用自己修改eip的。三个有时候某一个可以正常执行。
出现的错误如:
指令引用的内存,该内存不能为read :
是不是我一次性dump的太多了,删掉重新来。
10.不知道为什么,发现对于XP系统选择方式1可以成功,方式二就会出现上面的错误
如下:
去找一下方式1和方式2的区别:
https://www.pediy.com/kssd/pediy07/pediy7-659-5.htm
https://max.book118.com/html/2017/0422/101701603.shtm
https://www.docin.com/p-503474373.html
最后看雪:https://bbs.pediy.com/thread-20165.htm
好吧,我其实有点想弄清楚到底区别在哪,现在我不care了?。不选方式就好了!
总结:
1.尽量使用32位系统,win7系统。不要使用win10。
2.对于我等菜鸟,UPX脱壳无需勾选dump的方式1,2,自增烦恼
=====================
额,我又回来了,真是打脸。不选方式一XP系统还是无法执行出现这个错误:
啊!(╯‵□′)╯︵┻━┻
我去写作业了。