mozhongzhou 发表于 2024-9-5 20:26

《吾爱破解培训第一课:破解基础知识之介绍常见工具和壳的特征》全流程(上)

本帖最后由 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+

学的越多,需要学的就越多啊,慢慢来吧...

# 写在最后

**感谢所有无私奉献的坛友**:

- 感谢所有在论坛中无私奉献的朋友们,你们的贡献使得知识得以传播和共享。

**本文只是对吾爱破解教程的流程记录**:

- 本文仅是对吾爱破解教程的流程记录,算是一个比较老的教程了,希望对大家有所帮助。

所有虚拟机、测试工具、测试软件均可在**官网论坛**和"**可能用到的链接**"中下载

mozhongzhou 发表于 2024-9-9 16:51

百度网盘提取码错误的话,请检查跳转的链接是否与实际链接一致?不应出现中文!

dunniu 发表于 2024-9-5 22:20

录制成高清视频就好了!

Mysky6 发表于 2024-9-5 20:53

感谢分享!值得学习!

bgwu666 发表于 2024-9-5 21:19

期待后续更新

Mint_Grass 发表于 2024-9-5 21:46

楼主这教程写的真好。
前排留念,期待后续更新。

{:301_997:}

tianbowen0 发表于 2024-9-5 21:48

跟着学习!

mandarin 发表于 2024-9-5 22:01

mark,有空学习一下

applepv 发表于 2024-9-5 22:20

超级详细,每一步一步都列出,后考虑到可能出现的情况也做了说明,果然是大神

riluoxingchen 发表于 2024-9-5 23:56

感谢楼主分享,一定好好学下,很难找到这么详细的教程了{:301_993:}

kaisen868 发表于 2024-9-6 00:04

感谢分享详细教程。好久没有如此详尽的贴子了。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 《吾爱破解培训第一课:破解基础知识之介绍常见工具和壳的特征》全流程(上)