雪落传承 发表于 2020-1-30 20:42

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

Carrot-Chou 发表于 2020-1-30 21:53

直接“HW break”就行了,可以省下几步


详细的请看视频:https://www.bilibili.com/video/av77649752?p=86


mwy1024 发表于 2020-1-30 21:20

本帖最后由 mwy1024 于 2020-1-30 21:22 编辑

能运行就表示脱壳成功了,为何你一定要走到push ebp呢,不同程序写的入口不一定是这句,

(出栈)代码push ebp 为止确定是出栈?

小可爱~ 发表于 2020-1-30 21:34

本帖最后由 小可爱~ 于 2020-1-30 21:50 编辑

是不是没成功???, 不应该是下硬件断点运行断下来, 再单步步过一直下去直到遇到一个jmp再单步步过跳过去(如果遇到回跳使用F4到回跳的后面), 那里才是OEP么??? 你这个直接停了, 找了下面那个push ebp了, 没找到真正的吧?



topcookie 发表于 2020-1-30 21:40

应该是没脱成功,论坛里有教程看看照着走一遍

Hmily 发表于 2020-1-31 01:21

脱壳大体是对的,但你对oep的了解过少,比如这个是vs2018变异的,入口就不是push ebp,看第一课讲过https://www.52pojie.cn/thread-349073-1-1.html

雪落传承 发表于 2020-1-31 19:38

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 程序界面不一样,程序入口点代码不一致。对比如图:

雪落传承 发表于 2020-1-31 19:39

mwy1024 发表于 2020-1-30 21:20
能运行就表示脱壳成功了,为何你一定要走到push ebp呢,不同程序写的入口不一定是这句,

确定是出栈?

小白正在学习中push 代码 应该是压栈把,但是也不知道是啥意思{:1_925:}

雪落传承 发表于 2020-1-31 19:45

topcookie 发表于 2020-1-30 21:40
应该是没脱成功,论坛里有教程看看照着走一遍

脱壳成功的定义是否如此理解,把脱壳后的程序使用Ollydbg工具调试,看其程序入口点代码是否对应编译语言的固定程序入口点代码,如果一致就说明脱壳成功,另外我脱壳之后程序的区段没发生变化,跟原来未脱壳的区段一样,但是跟对应编译语言的无壳程序区段不一致,这是不是说明程序脱壳还是没有成功(也就是说通过程序区段也是可以验证是否脱壳成功的)

Hmily 发表于 2020-1-31 23:06

雪落传承 发表于 2020-1-31 19:38
感谢回复,纯小白最近才刚开始学习破解,没有编码基础的,这里有个疑问想理解一下,我回顾学习了您发表的 ...

所以你看下我贴的链接,第一课基本都讲解了。
页: [1]
查看完整版本: ESP定律法手脱UPX壳,发帖检验是否成功!