逆向破解程序脱壳篇-压缩壳

一、普及

What?壳

所谓“壳”就是专门压缩的工具。

   这里的压缩并不是我们平时使用的RAR、ZIP这些工具的压缩,壳的压缩指的是针对exe、com、和dll等程序文件进行压缩,在程序中加入一段如同保护层的代码,使原程序文件代码失去本来面目,从而保护程序不被非法修改和反编译,这段如同保护层的代码,与自然界动植物的壳在功能上有很多相似的地方,所以我们就形象地称之为程序的壳。WHY?

① 对程序专门进行压缩,以减小文件大小,方便传播和储存。

② 我这是一个商业的程序,是用来赚钱的,怎么可以被别人破解呢,那我就是加密保护壳(Safengine、VMprotect、winlicense、Themida)保护程序不被非法修改和反编译。

③ 其他(病毒、木马加壳,Anti-AntiVirus)

DO?

脱壳

就是把保护壳去掉更好的调试和破解能清楚看到代码

OEP

程序的入口点如果我们找到OEP我们就能快速脱壳就类似于找到钥匙就能开门

壳就是一把锁OEP就是锁孔

IAT

IAT就是指针脱壳的话可能要修复指针如果没有指针就相当于人只有一个身体没有灵魂

壳可能会对指针进行处理,修复输入表就是修复IAT

段首和段尾

段首,是上一段的结尾也是下一段的开头一段是以retn开始和retn结尾。我们经常听到在段首下断,所以我们要找的就是retn下面第一个push ,段首是以push开始滴,所以我们不会在retn那里下段而段尾我们是在retn处下断,因为软件的子程序是以retn返回到某一地方所以返回的时候要在retn出下断。

二、准备知识

ESP定律的原理就是“堆栈平衡”原理。

1、在命令行下断hresp-4(此时的ESP就是OD载入后当前显示的值)

2、hrESP(关键标志下一行代码所指示的ESP值(单步通过))

CALL

1.向堆栈中压入下一行程序的地址;

2.JMP到call的子程序地址处。

RETN

与call对应的就是RETN了。对于RETN我们可以这样来理解:

1.将当前的ESP中指向的地址出栈;

2.JMP到这个地址。

三、开始

工具:

①、peid
②、OD
③、DetectItEasy
④、LordPE
⑤、ImportREC

☆ esp定律

1.F8,观察OD右上角寄存器中ESP有没有实现(红色)

2.命令行下 DD ******(当前代码ESP值),回车

3.DD就选中下端地址,断点—硬件访问—DWORD断点,F9运行,到跳转处按F8 到OEP

1、PEID先看程序的壳

1.png

2ASPACK的壳子属于压缩壳的一种

2.png

3、用DetectItEasy V1.0看一下编译器为Delphi看一下delphi的oep

 3.png

4、之后,载入od

 4.png

5、选择是否都可以的

 5.png

这是带壳的.

6、f8单步往下走

 6.png

7、ESP和EIP都变成红色(实现)的时候,在ESP上右键下ESP断点

 7.png

8、下完断点,F9运行程序

 8.png

9、之后F8单步往下走,一直走

 9.png

10、到达OEP,右键-用OD脱壳调试进程

 10.png

 

11、复制红框里面的oep,(9C25C)之后关闭这个框,OD最小化

12、打开loadpe

 11.png

13、选择刚刚的程序进程–修复镜像大小-完全转存

 13.jpg

14、转存后打开会出现这样的结果

 14.png

15、然后再用ImportREC修复

 15.png

16、点选刚刚的进程

17、把之前复制的OEP放到1里面,按序号依次点击

16.png

18、修正转储刚刚导出的那个

18.png

19、脱壳完成…

之后放到原目录下运行即可

四、内存镜像法内存镜像法找oep

1.OD载入软件

2.点选项—调试选项—忽略全部—CTRL+F2重载

3.ALT+N打开内存镜像,找程序第一个.rsrc—F2下断—SHIFT+F9运行到断点,再打开找到程序第一个.rsrc上面的.code处(就是00401000处),F2下断—SHIFT+F9或无异常按F9,到OEP

1、载入DO之后,alt+m

19.png

2、在程序的资源处下内存访问断点

 2222.png

3、返回程序按F9运行程序,也可以用快捷键SHIFT+F9运行程序

界面是这个样子的

 20.png

4、ALT+M返回,在代码段下内存访问断点

 21.png

5、SHIFT+F9运行程序

 22.png

单步跟踪法

1.OD载入,不分析代码。

2.近CALL—F7,远CALL—F8,实现向下的跳转。

3.有回跳处,下一句代码处—F4 (右键—代码断点运行到所选)

4.大的跳转(大跨段,JMP***或JE***或RETN),很快就会到OEP

最后一次异常

1.OD打开—点选项—调试选项—去掉所有异常—CTRL+F2重载.

2.SHIFT+F9.只到程序运行,记下次数M

3.CTRL+F2重载—按SHIFT+F9(次数为M-1次)

4.按CTRL+G—输入OE右下角的SE句柄前的地址.

5.F2下断—SHIFT+F9到断点处.

6.去断按F8,到OEP.

6、直接到达OEP,按照之前的方法脱壳就可以了

7、用OD自带的插件即可脱壳

OEP大全

23.png

24.png

26.png

28.png

30.png

总结:

1、介绍了什么是压缩壳,什么是加密壳

2、脱壳原理

3、脱壳常用的工具

4、4种脱壳方法及修复

5、各种语言OEP特征

6、压缩壳这几种方法几乎够用了,如果出现冷门壳,用这些方法脱不掉,可以用之间说的打补丁的方法。

现在压缩壳都有很多自动脱壳机,但是加密壳呢?学习手工脱壳不是为了单纯去学怎么脱这一种壳,学习的是技巧,以后遇到其他的没有脱壳机的壳要尝试手工去脱,就像一个网站注入点,你可以用sqlmap去注入,如果有waf呢?Sqlmap脚本绕不过去呢?不还得靠手工去试,工具是死的,人是活的.


本文转载自

逆向破解程序脱壳篇-压缩壳 - FreeBuf专栏·i春秋学院

http://www.freebuf.com/column/143114.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值