吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8567|回复: 82
收起左侧

[原创] 关于压缩壳脱壳步骤详解!看这一篇足够。

    [复制链接]
ajun2019 发表于 2022-5-26 16:16
本帖最后由 ajun2019 于 2022-5-26 18:06 编辑



在文末我放置了常见的七种压缩壳,大家可以自己尝试着,用这些方法去脱一脱。分享出你脱壳的心得。期待!!!




什么是壳:

壳是一种概念上的东西,人们为了保护软件不会被轻易的修改或者反编译,希望软件能够获得一种保护,能如同乌龟壳保护乌龟一般,能有一个东西保护自己,于是壳就出现了。


关于壳的作用:



壳的初始作用是保护软件,但后来发展的方向不一就出现了各种各样的壳,大致有压缩壳、加密壳、VM 壳的分类。压缩壳故名思意,主要作用是用于压缩方面,可以有效的减小软件的大小;加密壳,其主要作用是保护软件;VM 壳是一种很特殊的壳,它利用了虚拟机技术,可以很有效的保护指定地址代码,但很大的牺牲了效率,所以一般只在关键代码处使用。





关于压缩壳的简介:

压缩壳的特点就是减小软件体积大小,加密保护不是其重点。
常见的压缩壳
upx、aspack、fsg、Aspack Scrambler、ExeStealth、 n Protector、V2Packer、WWPack32、XComp0.98、 BeRoEXEPacker、dePACK、ExeShield Protector、KByS、NsPacK、tElock、 Nspack  PECompect Petite  winUpack

  


脱壳——寻找 OEP 的 7 中方法:


1、单步跟踪法

单步跟踪法的原理就是通过 OllyDbg 的单步(F8)、单步进入(F7)和运行到(F4)功能,完整走过程序的自脱壳过程(不断使用 F8 向下运行,遇见向上跳转的就用 F4 ,),跳过一些循环恢复代码的片段,并用单步进入确保程序不会略过OEP。这样可以在软件自动脱壳模块运行完毕后,到达OEP,并 dump 程序。



单步跟踪法是最直接的方法,其主要的缺点是单步跟踪时十分枯燥,使用起来所花时间久,还可能出现跑飞的情况,但适用范围广。



主要原理是通过一次次的步过,让壳完成数据的解密等工作后,停止在程序的 OEP 处。






2、ESP定律法 (80%的压缩壳可脱)



ESP 定律法是脱壳的利器,是应用频率最高的脱壳方法之一。ESP 定律的原理在于程序中堆栈平衡的合理利用。由于在程序自解密或者自解压过程中,不少壳会先将当前寄存器内容压栈,如使用 pushad,在解压结束后,会将之前的寄存器值出栈,如使用 popad。因此在寄存器出栈时,往往程序代码被自动恢复,此时硬件断点触发。然后在程序当前位置,只需要少许单步跟踪,就很容易到达正确的 OEP 位置。


具体操作步骤:pushad开头,F8一次以后,8个寄存器只有ESP是红色时候,就可以使用该定律。
右键ESP 选择数据窗口跟随,数据窗口下硬件访问断点,F9运行,此时已经接近OEP。
image.png


之前的大佬,用ESP定律脱壳的演示步骤,感兴趣的可以去看看。
https://www.52pojie.cn/forum.php?mod=viewthread&tid=396184&page=22#pid9791824




3、内存镜像法(二次断点法)



内存镜像法是在加壳程序被加载时,通过 OD 的 ALT+M 快捷键,进入到程序虚拟内存区段。然后通过加两次内存一次性断点,到达程序正确 OEP 的位置。


内存镜像法的原理在于对于程序资源段和代码段下断点,一般程序自解压或者自解密时,会首先访问资源段获取所需资源,然后在自动脱壳完成后,转回程序代码段。这时候下内存一次性断点,程序就会停在OEP处。



加壳程序在运行时,先将 .code 段进行自解密,然后再将其他段进行自解密。


操作步骤:我们需要先在其他任意资源段下一个断点,使得 .code 段已经完成自解密,然后再在 .code 段下断点,使得程序断在执行 OEP 处。

图文教程演示:https://www.52pojie.cn/forum.php ... &page=38#pid9992513



image.png




4、一步到达OEP



所谓的一步到达 OEP 的脱壳方法,是根据所脱壳的特征,寻找其距离 OEP 最近的一处汇编指令,然后下 int3 断点,在程序走到 OEP 的时候 dump 程序。 如一些压缩壳往往 popad 指令距离 OEP 或者大 Jump 特别近,因此使用Ollydbg的搜索功能,可以搜索壳的特征汇编代码,达到一步断点到达OEP的效果。


ctrl+f 查找 popad
ctrl+l 跳转到下一个匹配处
找到匹配处, 确认是壳解压完毕即将跳转到 OEP 部分, 则设下断点运行到该处
只适用于极少数压缩壳




5、最后一次异常法


最后一次异常法的原理是,程序在自解压或自解密过程中,可能会触发无数次的异常。如果能定位到最后一次程序异常的位置,可能就会很接近自动脱壳完成位置。现在最后一次异常法脱壳可以利用Ollydbg的异常计数器插件,先记录异常数目,然后重新载入,自动停在最后一次异常处。


步骤:
1、 保留所有异常,载入程序。按"SHIFT"+“F9”,并开始记数M,直到程序运行。
2、 重新载入程序。按"SHIFT"+“F9"忽略异常M-1次。
3、 查看堆栈窗口中,“SE 句柄"前面的地址。
4、 按"ctrl+g”,打开表达式跟随窗口,输入,在堆栈窗口查到的地址。
5、 F2下断,按"SHIFT”+"F9"来到断点处,去掉断点。
6、 在OD的右下角会出现一个SE句柄,按CTRL+G,输入SE 句柄前的地址。
7、 F2下断,SHIFT+F9来到断点处。
8、 去掉断点,F8走到程序的OEP。

图文演示步骤:https://www.52pojie.cn/forum.php ... &page=38#pid9992482






关于 DUMP 的方法及原理:


工具:PETools(以管理员身份运行)、 importREC(以管理员身份运行)



在其中找到我们所需要进行 dump 的程序,选择完整转存,然后就可以得到转存的文件了,再使用 importREC 进行修复 IAT 。其中 OEP 地址,RVA 需要注意填写的正确,可以通过查询 FF 15 查找 IAT 起始地址,从而得到 RVA 。


IAT RVA:IAT 起始地址 - 程序虚拟起始地址
IAT 大小:IAT 起始地址 - IAT 结尾地址(可以超出,不能小)
————————————————


这七种壳,是最常见的压缩壳,大多数都能用ESP定律去掉。
另外的内存镜像和单步跟踪就能找到OEP,推荐大家尝试下。
就可以突破压缩壳脱壳困境了。

aspack.zip (132.27 KB, 下载次数: 94) fsg[cm2].zip (991.64 KB, 下载次数: 56) PECompact[cm2].zip (845.02 KB, 下载次数: 63) telock[CM].zip (185.05 KB, 下载次数: 37) UPX.zip (124.3 KB, 下载次数: 59) WinUpack【cm2】.zip (801.5 KB, 下载次数: 60) 北斗Nspack【cm2】.zip (800.79 KB, 下载次数: 60)

免费评分

参与人数 21吾爱币 +20 热心值 +21 收起 理由
hellozjx + 1 + 1 谢谢@Thanks!
fangchang819 + 1 + 1 谢谢@Thanks!
lvxingzheying + 1 + 1 谢谢@Thanks!
goodista + 1 + 1 我很赞同!
xzm1008 + 1 + 1 我很赞同!
Tonyha7 + 1 我很赞同!
抱薪风雪雾 + 1 + 1 谢谢@Thanks!
caleb110 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
蒂兰圣雪 + 1 + 1 我很赞同!
唐小样儿 + 1 + 1 我很赞同!
笙若 + 1 + 1 谢谢@Thanks!
Zhengzx + 1 + 1 热心回复!
wshq + 1 + 1 谢谢@Thanks!
HongHu106 + 1 谢谢@Thanks!
bullshit + 1 + 1 谢谢@Thanks!
homehome + 1 + 1 谢谢@Thanks!
kelvar + 1 + 1 谢谢@Thanks!
杨辣子 + 1 + 1 用心讨论,共获提升!
Max.tAop + 1 + 1 用心讨论,共获提升!
某些人 + 1 + 1 谢谢@Thanks!
bjxiaoyao + 2 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

  • · 好帖|主题: 537, 订阅: 84

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
tyz1234 发表于 2022-5-26 16:28
提示: 作者被禁止或删除 内容自动屏蔽
桃白白123 发表于 2022-5-31 09:32
tyz1234 发表于 2022-5-26 16:28
到达OEP处就代表脱壳完成了吧?楼主别介意哈,我是纯小白

到达OEP只是代表你找到了程序的真正入口点,并不代表脱壳完成,找到OEP后使用OD自带的脱壳插件或者用loardpe进行脱壳,脱壳后程序能正常运行表示脱壳成功。
wyangdh 发表于 2022-5-26 16:30
只会用脱壳工具来脱壳的小白路过,学习一下,谢谢分享
 楼主| ajun2019 发表于 2022-5-26 16:34
tyz1234 发表于 2022-5-26 16:28
到达OEP处就代表脱壳完成了吧?楼主别介意哈,我是纯小白

是的脱壳完成!
ZhuanZhuYuIT 发表于 2022-5-26 16:45
膜拜大佬
charm911 发表于 2022-5-26 16:48
非常感谢,mark学习
出征土豆 发表于 2022-5-26 16:54
涨知识了
忘情的城市 发表于 2022-5-26 17:01
没个演示步骤吗,
youngnku 发表于 2022-5-26 17:07
感觉内容很易懂,如果排版再精细一点,估计能上热门。
15028352577 发表于 2022-5-26 17:21
学习一下 有点难
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-20 05:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表