《吾爱破解培训第一课:破解基础知识之介绍常见工具和壳的特征》全流程(上)
本帖最后由 mozhongzhou 于 2024-9-9 11:22 编辑# 前言
**目的**
记录踩坑经验,帮助他人避免同样问题。
**提示**
使用浏览器左侧目录快速导航。
**注意**
如有错误,请指正。
# 环境:
虚拟机Windows 10 企业版 LTSC
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-233.png)
# 可能用到的软件:
> 工欲善其事必先利其器
| 软件名称 | 类别 | 作用 |
| ------------------------------------------------------------ | ------------ | -------------------------------------------------- |
| VMware | 虚拟化软件 | 创建和管理虚拟机,运行多个操作系统实例 |
| (https://github.com/horsicq/Detect-It-Easy)(DIE) | 文件分析工具 | 识别可执行文件的编译器、打包器和加壳工具 |
| (https://github.com/ExeinfoASL/Exeinfo) | 文件分析工具 | 分析可执行文件的编译器、打包器和加壳工具 |
| PEiD (Portable Executable Identifier) | 文件分析工具 | 检测可执行文件的编译器、打包器和加壳工具 |
| (https://github.com/x64dbg/x64dbg) (Debugger) | 调试工具 | 调试 32 位和 64 位可执行文件 |
| aslr_disabler | 安全工具 | 禁用地址空间布局随机化(ASLR),便于调试和逆向工程 |
# 可能用到的链接
> **爱盘下载:**
> http://down.52pojie.cn/吾爱破解视频教程/吾爱破解论坛官方入门教学培训第一期/
> **百度网盘下载:**
> 链接: https://pan.baidu.com/s/1z9WQeYgUGxcurVD2lKfNeg,提取码: e2su
>
> [零基础新手破解学习导航帖](https://www.52pojie.cn/thread-582852-1-1.html)
>
> [【新手教程四】小Z带你学习什么是两次内存镜像法和什么是内存断点 ? - 『脱壳破解区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn](https://www.52pojie.cn/thread-396947-1-1.html)
# 准备工作
## 虚拟机创建快照备份
在进行任何重要操作之前,建议对虚拟机进行快照备份。快照备份可以保存当前虚拟机的状态,包括操作系统、已安装的软件和配置等。如果在后续操作中出现问题,可以随时恢复到快照备份的状态,确保数据和系统的安全。
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-283.png)
## 设置软件默认以管理员方式启动
某些软件需要管理员权限才能正常运行或执行特定操作。为了避免每次手动以管理员身份运行,可以将软件设置为默认以管理员方式启动。
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-281.png)
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-285.png)
## x32dbg的一些设置
双击x32dbg->选项->选项
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-289.png)
### 事件
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-290.png)
### 引擎
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-291.png)
### 异常
x32dbg/x64dbg运行异常中断解决办法,第一次异常于xxx,第二次异常于xxx
https://www.52pojie.cn/thread-1961181-1-1.html
(出处: 吾爱破解论坛)
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-293.png)
### 反汇编
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-294.png)
### 图形界面
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-295.png)
### 杂项
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-296.png)
### 外观
选项->外观->字体 (随个人喜好)
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-297.png)
# 1、"吾爱破解论坛学习脱壳实例_aspack.exe"
## 1.1、查壳
发现使用 ASPack 加壳。
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-286.png)
## 1.2、ASLR修复
将 `吾爱破解论坛学习脱壳实例_aspack.exe` 拖入ALSR disbler ,下面出现ASLR on executable is “stripped”则表示已经修复好了,修复的程序是 `吾爱破解论坛学习脱壳实例_aspack.exe`
而带有org的是原程序的备份。
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-299.png)
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-301.png)
## 1.3、找OEP(Original Entry Point)
右键 `吾爱破解论坛学习脱壳实例_aspack.exe` ->用x64dbg调试
或者将软件拖入x32dbg,或者拖到x32dbg快捷方式图标上
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-287.png)
进到x32dbg的主页面,(为什么选的用x64dbg调试,结果打开的却是x32dbg?因为调试的是x32位的exe,x64dbg会自动调用x32dbg来处理)
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-288.png)
### 1.3.1、单步跟踪法寻找OEP
> 思路:根据单步跟踪法(Single Stepping),综合利用步过(F8)、步进(F7)和运行到指定位置(F4),确保只执行向下跳转,避免向上跳转(向上跳转可能是由于反调试技术、代码混淆或循环结构引起的),最终找到一个大跳转位置,到达OEP。
**注意:**
- 一般情况遇到的Call可以步过(F8),但如果在Call步进(F8)会直接启动程序,这说明需要进入Call寻找OEP。
- 如果不小心把程序跑出来了则需要关闭x32dbg重新启动一次,如果不重启x32dbg可能会出现意想不到的错误。
步过(F8)一次到00F23002,此处的call(调用子程序)需要步进(F7)。
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-298.png)
步进(F7),进入Call
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-302.png)
步过(F8)直到 `ret` (return),再按一下步过(F8)会跳转到其他地址
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-303.png)
跳转到00453008,继续F8,会跳到Call处
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-304.png)
F7进入0045300E Call(此处F8会直接跑出程序,需要关闭x32dbg后重新操作一次)
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-306.png)
到达00453014,F8直到遇到会向上跳转的地方
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-307.png)
运行到004553059处,用鼠标点击 0045305B 按F4运行到目标处
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-308.png)
鼠标点击
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-309.png)
F4
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-310.png)
F8到0045305D发现又出现向上跳转,同理点选0045305F然后F4运行到那里
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-311.png)
运行到0045305F
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-312.png)
此后继续多次F8步过。遇到向上跳转的地方则像刚才利用F4避免向上跳转
核心思想就是向下的让他发生,向上的避免发生
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-313.png)
0045313B、00453192处同理,点选下一行F4
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-314.png)
004531C8有一次稍大跳转,F8,继续
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-315.png)
来到00453243,继续向下
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-316.png)
0045336E,点选下一行,按F4
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-317.png)
同理00453384,点选下一行,按F4
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-318.png)
004533C2,点选下一行,按F4
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-319.png)
004533FA,点选下一行,按F4
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-320.png)
继续F8,在00453415发现 `popad`
这通常意味着我们已经接近或到达了程序的原始入口点(OEP)
> `popad` 指令的意义
>
> - **全称**:`popad` 是 "Pop All Double" 的缩写。
> - **作用**:`popad` 指令从堆栈中弹出所有通用寄存器的值,并恢复它们的状态。具体来说,它会依次恢复 EDI、ESI、EBP、ESP(跳过)、EBX、EDX、ECX 和 EAX 寄存器的值。
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-322.png)
F8几次终于到达关键处00453425 这个ret意为return,F8即将发生一次大跳转,会进入OEP,右侧注释为自己所写
注意当前地址00453425
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-321.png)
跳转到0041DDAC,这里就是OEP
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-323.png)
### 1.3.2、ESP定律寻找OEP
思路:使用x32dbg打开程序后,按F8步过关键指令`pushad`。在右下角堆栈窗口找到ESP地址,右键选择“断点” -> “硬件断点” -> “访问” -> “2字节”或“4字节”。然后运行程序,命中断点后,跳转到OEP的位置通常就在附近。
打开程序F8步过关键句pushad,注意右上角窗口ESP地址0019FF54,右小角第一行绿色地址0019FF54
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-324.png)
在右下角堆栈窗口找到ESP地址,右键选择“断点” -> “硬件断点” -> “访问” -> “2字节”或“4字节”
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-325.png)
点击左上角断点栏切换过来可以看到已经设好了断点,我们按F9运行,会发现断点命中变为1
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-326.png)
切换回CPU窗口,会发现到达了很眼熟的地址,不远处有ret,F8直到OEP
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-327.png)
到达OEP
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-328.png)
### 1.3.3、一步直达法寻找OEP
> 思路:通过搜索`popad`指令来尝试找到UPX和ASPack压缩壳的OEP,其原理如下:
>
> **压缩壳的特性**:UPX和ASPack等压缩壳在解压缩完成后,通常会恢复寄存器的状态。`popad`指令用于从堆栈中弹出所有通用寄存器的值,这通常是解压缩完成后恢复寄存器状态的最后一步。
进入程序按Ctrl+F搜索popad
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-329.png)
得到几个结果,我们从上往下挨个检查,双击进入00453415
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-330.png)
是不是很眼熟?第一个就是我们要找的,我们又找到了OEP!
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-331.png)
### 1.3.4、2次内存镜像法寻找OEP(不建议UPX和ASPack壳用这种方法,第二次断点容易断不下来)
思路以及原理:参考论坛前辈的一篇帖子
[【新手教程四】小Z带你学习什么是两次内存镜像法和什么是内存断点 ? - 『脱壳破解区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn](https://www.52pojie.cn/thread-396947-1-1.html)
x32dbg启动程序后进入 内存布局界面
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-332.png)
右键".rsrc"->内存断点->访问->一次性
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-333.png)
F9执行一次能够命中第一次断点,由于断点是一次性,所以命中后自动消失
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-335.png)
再在内存界面右键 ".text"->内存断点->访问->一次性
F9,程序直接出来了,这可能是因为code段解压完毕后立刻JMP到OEP,UPX和ASPack加壳容易出现此问题
故另谋出路。
### 1.3.5、模拟跟踪法寻找OEP
利用tc eip<xxxxxx
在此不再赘述,感兴趣可在论坛搜索
### 1.3.6、SFX法
当程序载入之后,入口点必须是代码段之外才可以用
在此不再赘述,感兴趣可在论坛搜索
## 1.4、在OEP处Dump转储内存
> **转储内存**:在程序暂停时,将内存中的程序代码和数据转储到一个文件中。这通常包括程序的代码段、数据段和其他必要的段。
>
> 先到达OEP处,按Ctrl+i或者点击下图所示位置可以调出x32dbg自带的Scylla,我们使用该工具进行Dump
>
> !(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-337.png)
打开Scylla后,点击Dump
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-339.png)
默认命名为 "吾爱破解论坛学习脱壳实例_aspack_dump.exe",确定
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-340.png)
发现双击dump后的程序无法运行
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-342.png)
这可能是因为
> **IAT未修复**:导入地址表(IAT)未正确修复,导致程序在运行时无法找到所需的外部函数。
## 1.5、IAT修复
> IAT(Import Address Table)修复是脱壳过程中非常重要的一步。IAT是一个表格,存储了程序运行时需要调用的外部函数的地址。加壳程序通常会修改IAT以隐藏真实的函数调用地址,因此在脱壳后需要修复IAT以确保程序能够正确运行
>
> 在OEP处打开Scylla->Misc->Option->Use advanced IAT search->Accept
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-345.png)
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-346.png)
IAT Autosearch -> "是" -> "确定" -> Get Imports -> Show Invalid -> 按键盘delete
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-347.png)
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-348.png)
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-349.png)
Show Invalid 然后delete
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-350.png)
然后按Fix Dump,选择刚才Dump得到的exe
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-351.png)
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-352.png)
得到 "吾爱破解论坛学习脱壳实例_aspack_dump_SCY.exe"
这个就是可以运行的脱壳后的程序
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-353.png)
我们将得到的程序"吾爱破解论坛学习脱壳实例_aspack_dump_SCY.exe"进行查壳
发现除了DIE之外的查壳软件均显示壳已脱去
这是因为这三个查壳软件的检测方法和特征库不同,DIE能测到程序脱壳后的残留特征
所以即使已经脱壳,不影响后续操作,它仍然能查到打包工具是ASPack
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-363.png)
实例一到此结束
# 2、"吾爱破解论坛学习脱壳实例_Shielden.exe"
## 2.1、查壳
发现使用 `Shielden` 加壳
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-356.png)
## 2.2、ASLR修复
ALSR disabler底部显示 File is a executable. 这代表该软件已经被ASLR修复或者不需要ASLR修复,继续下一步
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-357.png)
## 2.3、找OEP(Original Entry Point)
未完待续,待我学习后回来填坑!
可以在论坛搜索SE脱壳教程
可能有帮助的:
(https://www.52pojie.cn/thread-162916-1-1.html)
## 2.4、Dump和IAT修复
未完待续,待我学习后回来填坑!
# 3、"吾爱破解论坛学习脱壳实例_Themida.exe"
## 3.1、查壳
发现用 Themida 加壳
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-360.png)
## 3.2、ASLR修复
程序拖入ALSR disabler修复
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-361.png)
## 3.3、找OEP(Original Entry Point)
未完待续,待我学习后回来填坑!
## 3.4、Dump和IAT修复
未完待续,待我学习后回来填坑!
参考前辈文章
[浅谈Themida 3.0.4.0 x32 IAT修复 - 『脱壳破解区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn](https://www.52pojie.cn/forum.php?mod=viewthread&tid=1344654&highlight=Themida)
# 4、"吾爱破解论坛学习脱壳实例_UPX.exe"
## 4.1、查壳
发现是 UPX 加壳的
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-368.png)
## 4.2、ASLR修复
ASLR修复成功
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-369.png)
## 4.3、找OEP(Original Entry Point)
### 4.3.1、ESP定律
进来发现有入栈pushad,可以利用ESP定律,步过关键句后下硬件访问2/4字节断点
F8到pushad下一行,在右下角堆栈窗口右键第一行绿色地址-> 断点 -> 硬件断点 ->访问-> 4字节 -> 运行
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-370.png)
容易发现00457355为JMP OEP
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-371.png)
F8后到达OEP
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-372.png)
## 4.4、Dump和IAT修复
Ctrl+i调出Scylla,Dump后自动获取导入表,然后删除无效部分,修复dump文件即可!
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-374.png)
得到,测试运行成功,查壳已脱
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-375.png)
# 5、"吾爱破解论坛学习脱壳实例_VMProtect.exe"
## 5.1、查壳
发现是用 VMProtect 2.0+ 加壳
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-376.png)
## 5.2、ASLR修复
修复成功,得到"吾爱破解论坛学习脱壳实例_VMProtect.exe"
!(https://blog.mozhongzhou.cn/wp-content/uploads/2024/09/image-377.png)
## 5.3、找OEP(Original Entry Point)
未完待续,待我学习后回来填坑!
## 5.4、Dump和IAT修复
未完待续,待我学习后回来填坑!
# 遗留问题
Safengine Shielden v2.3.6 、v2.4.0
Themida 2+
VMProtect 2+
学的越多,需要学的就越多啊,慢慢来吧...
# 写在最后
**感谢所有无私奉献的坛友**:
- 感谢所有在论坛中无私奉献的朋友们,你们的贡献使得知识得以传播和共享。
**本文只是对吾爱破解教程的流程记录**:
- 本文仅是对吾爱破解教程的流程记录,算是一个比较老的教程了,希望对大家有所帮助。
所有虚拟机、测试工具、测试软件均可在**官网论坛**和"**可能用到的链接**"中下载 百度网盘提取码错误的话,请检查跳转的链接是否与实际链接一致?不应出现中文! 录制成高清视频就好了! 感谢分享!值得学习! 期待后续更新 楼主这教程写的真好。
前排留念,期待后续更新。
{:301_997:} 跟着学习! mark,有空学习一下 超级详细,每一步一步都列出,后考虑到可能出现的情况也做了说明,果然是大神 感谢楼主分享,一定好好学下,很难找到这么详细的教程了{:301_993:} 感谢分享详细教程。好久没有如此详尽的贴子了。