ESP定律法手脱UPX壳,发帖检验是否成功!
本帖最后由 雪落传承 于 2020-1-30 20:47 编辑脱壳程序,在论坛上下载教学视频的相关实例:吾爱破解论坛学习脱壳实例_UPX.exe; 打开界面如图:
脱壳方法:根据ximo 脱壳教程(24集全) 中1、手脱UPX壳教程第二个方法,ESP定律法。
1,点击下一步按钮
2,在寄存器中找到ESP代码右键选择 -- 数据窗口中跟随
3,在数据窗口区选中第一条数值,右键设置断点(断点—硬件访问-Word;每次设置前记得删除之前的断点:菜单栏—调设—硬件断点—删除)
4,点击运行按钮让反汇编窗口代码自动运行
5,再单步跟踪,一直找到(出栈)代码push ebp 为止,如图:
6,选中改代码右键选中【用Ollydump脱壳调试进程,选择脱壳】保存脱壳后程序,最终完成脱壳。
点开脱壳后的程序打开成功,文件大小对比;脱壳前1332K,脱壳后368K。另外,Exeinfo PE工具查看截图如下:
个人学习总结笔记:
关于脱UPX壳,从入口点代码查询,到结束一般都是push ebp 结尾,然后找到该代码进行Ollydump脱壳调试选择脱壳即可。
疑问:此次UPX脱壳有哪些错误,是否是成功的了,如何验证?另外总结部分的理解是否正确?? 谢谢
相关程序文件(百度云分享):链接: https://pan.baidu.com/s/1suU7rO4fI35k2E19kc6fbQ 提取码: cqpc 直接“HW break”就行了,可以省下几步
详细的请看视频:https://www.bilibili.com/video/av77649752?p=86
本帖最后由 mwy1024 于 2020-1-30 21:22 编辑
能运行就表示脱壳成功了,为何你一定要走到push ebp呢,不同程序写的入口不一定是这句,
(出栈)代码push ebp 为止确定是出栈? 本帖最后由 小可爱~ 于 2020-1-30 21:50 编辑
是不是没成功???, 不应该是下硬件断点运行断下来, 再单步步过一直下去直到遇到一个jmp再单步步过跳过去(如果遇到回跳使用F4到回跳的后面), 那里才是OEP么??? 你这个直接停了, 找了下面那个push ebp了, 没找到真正的吧?
应该是没脱成功,论坛里有教程看看照着走一遍 脱壳大体是对的,但你对oep的了解过少,比如这个是vs2018变异的,入口就不是push ebp,看第一课讲过https://www.52pojie.cn/thread-349073-1-1.html Hmily 发表于 2020-1-31 01:21
脱壳大体是对的,但你对oep的了解过少,比如这个是vs2018变异的,入口就不是push ebp,看第一课讲过https:/ ...
感谢回复,纯小白最近才刚开始学习破解,没有编码基础的,这里有个疑问想理解一下,我回顾学习了您发表的帖子,以及查询百科,对oep:(Original Entry Point),程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳。
PUSHAD (压栈) 代表程序的入口点。POPAD (出栈) 代表程序的出口点,与PUSHAD相对应,一般找到这个OEP就在附近啦~
对此有几个疑问想探讨一下:
1,对于无壳程序的oep,如果确定了其编译器语言,是否就可以确定其程序入口点代码,比如说使用VC6编译的程序入口点代码都是push ebp这行代码?所以反推之,对于使用VC6编译的加壳程序,只要找到push ebp这行代码,就可以右键用Ollydump脱壳调试进程进行脱壳。同理,对于VS编译的加壳程序脱壳找到两行CALL+JMP代码即可脱壳。
2,对于验证程序是否加壳,使用Ollydbg工具查看入口点代码是否对应相关编译语言入口点代码,有对应(比如说前两句代码为call+jmp代码则为VS编译的无壳程序)则为对应编译语言的无壳程序;都不对应阿即说明该程序为加壳程序,此时进而查询“程序区段”和“加载模块”的特征。确认其加的是什么壳,以及是什么语言编译。这样理解是否错误有问题呢?
3,对于区段信息的理解,对于VC6无壳程序的区段有固定,为.text、.rdata、.data和.rsrc。 但是我对论坛教程案例(吾爱破解论坛学习脱壳实例_UPX.exe)后的程序区段:想问为什么区段变化了呢?
4,在学习ximo 脱壳教程中,学到第二节(2、手脱ASPACK壳),我用Ollydbg打开QQ个性网名昵称查看器.exe 程序界面不一样,程序入口点代码不一致。对比如图:
mwy1024 发表于 2020-1-30 21:20
能运行就表示脱壳成功了,为何你一定要走到push ebp呢,不同程序写的入口不一定是这句,
确定是出栈?
小白正在学习中push 代码 应该是压栈把,但是也不知道是啥意思{:1_925:} topcookie 发表于 2020-1-30 21:40
应该是没脱成功,论坛里有教程看看照着走一遍
脱壳成功的定义是否如此理解,把脱壳后的程序使用Ollydbg工具调试,看其程序入口点代码是否对应编译语言的固定程序入口点代码,如果一致就说明脱壳成功,另外我脱壳之后程序的区段没发生变化,跟原来未脱壳的区段一样,但是跟对应编译语言的无壳程序区段不一致,这是不是说明程序脱壳还是没有成功(也就是说通过程序区段也是可以验证是否脱壳成功的)
雪落传承 发表于 2020-1-31 19:38
感谢回复,纯小白最近才刚开始学习破解,没有编码基础的,这里有个疑问想理解一下,我回顾学习了您发表的 ...
所以你看下我贴的链接,第一课基本都讲解了。
页:
[1]