部分壳与脱壳

壳与脱壳

对网上部分壳与脱壳的摘录与总结,仅供参考,侵删
参考链接1

https://www.52pojie.cn/thread-138380-1-1.html

参考链接2

https://www.cnblogs.com/milantgh/p/3869083.html

参考链接3

http://blog.sina.com.cn/s/blog_3e28c8a5010132m6.html


摘自链接3,详情请看链接3
从功能上抽象,软件的壳和自然界中的壳相差无几。无非是保护、隐蔽壳内的东西。而从技术的角度出发,壳是一段执行于原始程序前的代码。原始程序的代码在加壳的过程中可能被压缩、加密……。当加壳后的文件执行时,壳-这段代码先于原始程序运行,他把压缩、加密后的代码还原成原始程序代码,然后再把执行权交还给原始代码。 软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的OEP(入口点,防止被破解)

查壳

查壳原理:查找关键字、匹配特征码等等
利用软件查壳
1.Detect it Easy

https://github.com/horsicq/Detect-It-Easy

2.ExeinfoPe

http://exeinfo.atwebpages.com/
https://github.com/ExeinfoASL/ASL

脱壳方法

一、单步跟踪法
1.OD载入,点 “不分析代码“
2.单步向下跟踪F8,实现向下的跳。也就是说向上的跳转不让其实现(通过F4)
3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4 (或者右健单击代码,选择断点一一>运行到所选)
4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!
5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP
6.在跟踪的时候,如果运行到某个CALL程序就运行的:就在这个CALL中F7进入
7.一般有很大的跳转(大跨段),比如jmp xxxxxx 或者JE xxxxxx或者有RETN的一般很快就会到程序的OEP。

备注:在有些壳无法向下跟踪的时候,我们可以在附近找到没有实现的大跳转,右键–>“跟随”,然后2下断,Shift+F9运行停在“跟随”置,再取消断点,维续F8单步跟踪。一般情况下可以轻松到达OEP。

二、ESP定律法
ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一-下来到程序的OEP了! )

1.开始就点F8,注意观察0D右上角的寄存器中ESP有没突现(变成红色)。(这只是-般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值)
2.在命令行下: dd XXXXXX (指在当前代码中的ESP地址,或者是hr XXXXXXX),按回车!
3.选中下断的地址,断点—>硬件访问—>WORD断点。
4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP。

三、二次内存镜像法
1.用OD打开软件
2.点击选项–>调试选项–>异常,把里面的忽略全部打上,然后CTRL+F2重载下程序
3:按Alt+M,打开内存镜像,找到程序的第一个.rsrc.按F2下断点,然后按SHIFT+F9运行到断点,接着再按Alt+M,打开内存镜象,找到程序的第一个.rsrc.上面的.CODE (也就是00401000处),按F2下断点,然后按SHIFT+F9 (或者是在没异常情况下按F9),直接到达程序OEP

四、一步直达法(Popad法)
1.开始按Ctrl+F,输入:popad(只适合少数壳,包括UPX、ASPACK壳)。按下F2,F9运行到此处
2.来到大跳转,点下F8,到达OEP

五、最后一次异常法
1.用OD打开软件
2.点击选项–>调试选项–>异常,把里面的√全部去掉,CTRL+F2重载下程序
3.开始程序就是一个跳转,在这里我们按SHIFT+F9,直到程序运行,记下从开始按SHIFI+F9到程序运行的次数m
4.CTRL+F2重载程序,按SHIFT+F9 (这次按的次数为程序运行的次数(m-1)次)
5.在D的右下角我们看见有一个 ”SE句柄”,这时我们按CTRL+G,输入SE句柄前的地址
6.按F2下断点!然后按SHIFT+F9来到断点处
7.去掉断点,按F8慢慢向下走
8.到达程序的OEP

五、模拟跟踪法
1:先试运行,跟踪一下程序,看有没有SEH暗桩之类
2:ALT+M打开内存镜像,找到(包含=SFX,imports,relocations)

内存镜像,项目 30
地址=0054B000
大小=00002000 (8192.)
Owner=check 00400000
区段=.aspack
包含=SFX,imports,relocations
类型=Imag 01001002
访问=R
初始访问=RWE

3:地址为0054B000,如是我们在命令行输入tc eip<0054B000,回车,正在跟踪

备注:大家在使用这个方法时,要理解它要在什么样的情况下才可以使用
参考链接:

https://bbs.pediy.com/thread-119676.htm

六、“SFX"法
1.设置OD,忽略所有异常,也就是说异常选项卡里面都打上勾
2.切换到SFX选项卡,选择“字节模式跟踪实际入口(速度非常慢)”,确定。
3:重载程序(如果跳出是否“压缩代码?”选择“否”,OD直接到达OEP )

Btw:这种方法不要滥用得好,锻炼能力为妙。

七、利用软件或者脚本脱壳
如脱壳机等

壳与脱壳

各种常见压缩壳的入口点以及ESP定律脱法 (见链接)

链接:https://blog.51cto.com/yuncx/86330

1.UPX

手动脱壳
1.单步跟踪法
2.ESP定律
3.内存镜像法
4.Popad法
5.模拟跟踪法
6.SFX法

脱壳机
1.UPXShell
2.PEID等
linux下UPX脱壳
upx -d
或者手脱,详见

链接:https://bbs.pediy.com/thread-255519.htm

2.ASPack
手动脱壳
1.单步跟踪法
2.ESP定律
3.内存镜像法
4.模拟跟踪法
5.SFX法
脱壳机
1.PEID(PEID Generic Unpacker)
2.AspackDie
3.UnAspack等

3.FSG
手动脱壳
1.单步法(忽略所有异常)
2.ESP定律(忽略所有异常)
3.模拟跟踪法(忽略所有异常)
4.SFX法
5.内存镜像法
脱壳机
1.PEID
2.UnFSC2. 0(只针对FSG2.有效)等

4.PECompact
手动脱壳
1.单步法(忽略所有异常)
2.ESP定律(忽略所有异常)
3.模拟跟踪法
脱壳机
1.PEID(PEID Generic Unpacker)
2.DePeCompact1. xDeP eCompact2. xDePeCompact3. xDePeCompact2. x-3.x等
5.Armadillo
手动脱壳
穿山甲脱壳总结
脱壳机
穿山甲脱壳机很少,且很难脱干净.
6.Acprotect
手动脱壳
在这里插入图片描述脱壳机
ACKiller
ASProtect
手动脱壳
在这里插入图片描述
在这里插入图片描述

脱壳机
AsProtect Unpack

猜你喜欢

转载自blog.csdn.net/weixin_51732593/article/details/121056085