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

前言

目的

记录踩坑经验,帮助他人避免同样问题。

提示

使用浏览器左侧目录快速导航。

注意

如有错误,请指正。

环境:

虚拟机Windows 10 企业版 LTSC

img

可能用到的软件:

工欲善其事必先利其器

软件名称类别作用
VMware虚拟化软件创建和管理虚拟机,运行多个操作系统实例
Detect It Easy(DIE)文件分析工具识别可执行文件的编译器、打包器和加壳工具
Exeinfo PE文件分析工具分析可执行文件的编译器、打包器和加壳工具
PEiD (Portable Executable Identifier)文件分析工具检测可执行文件的编译器、打包器和加壳工具
x32/64dbg (Debugger)调试工具调试 32 位和 64 位可执行文件
aslr_disabler安全工具禁用地址空间布局随机化(ASLR),便于调试和逆向工程

可能用到的链接

爱盘下载: http://down.52pojie.cn/吾爱破解视频教程/吾爱破解论坛官方入门教学培训第一期/ 百度网盘下载: 链接: https://pan.baidu.com/s/1z9WQeYgUGxcurVD2lKfNeg提取码: e2su

零基础新手破解学习导航帖

【新手教程四】小Z带你学习什么是两次内存镜像法和什么是内存断点 ? – 『脱壳破解区』 – 吾爱破解 – LCG – LSG |安卓破解|病毒分析|www.52pojie.cn

准备工作

虚拟机创建快照备份

在进行任何重要操作之前,建议对虚拟机进行快照备份。快照备份可以保存当前虚拟机的状态,包括操作系统、已安装的软件和配置等。如果在后续操作中出现问题,可以随时恢复到快照备份的状态,确保数据和系统的安全。

img

设置软件默认以管理员方式启动

某些软件需要管理员权限才能正常运行或执行特定操作。为了避免每次手动以管理员身份运行,可以将软件设置为默认以管理员方式启动。

img
img

x32dbg的一些设置

双击x32dbg->选项->选项

img

事件

img

引擎

img

异常

x32dbg/x64dbg运行异常中断解决办法,第一次异常于xxx,第二次异常于xxx https://www.52pojie.cn/thread-1961181-1-1.html (出处: 吾爱破解论坛)

img

反汇编

img

图形界面

img

杂项

img

外观

选项->外观->字体 (随个人喜好)

img

1、”吾爱破解论坛学习脱壳实例_aspack.exe”

1.1、查壳

发现使用 ASPack 加壳。

img

1.2、ASLR修复

吾爱破解论坛学习脱壳实例_aspack.exe 拖入ALSR disbler ,下面出现ASLR on executable is “stripped”则表示已经修复好了,修复的程序是 吾爱破解论坛学习脱壳实例_aspack.exe

而带有org的是原程序的备份。

img
img

1.3、找OEP(Original Entry Point)

右键 吾爱破解论坛学习脱壳实例_aspack.exe ->用x64dbg调试

或者将软件拖入x32dbg,或者拖到x32dbg快捷方式图标上

img

进到x32dbg的主页面,(为什么选的用x64dbg调试,结果打开的却是x32dbg?因为调试的是x32位的exe,x64dbg会自动调用x32dbg来处理)

img

1.3.1、单步跟踪法寻找OEP

思路:根据单步跟踪法(Single Stepping),综合利用步过(F8)、步进(F7)和运行到指定位置(F4),确保只执行向下跳转,避免向上跳转(向上跳转可能是由于反调试技术、代码混淆或循环结构引起的),最终找到一个大跳转位置,到达OEP。

注意:

  • 一般情况遇到的Call可以步过(F8),但如果在Call步进(F8)会直接启动程序,这说明需要进入Call寻找OEP。
  • 如果不小心把程序跑出来了则需要关闭x32dbg重新启动一次,如果不重启x32dbg可能会出现意想不到的错误。

步过(F8)一次到00F23002,此处的call(调用子程序)需要步进(F7)。

img

步进(F7),进入Call

img

步过(F8)直到 ret (return),再按一下步过(F8)会跳转到其他地址

img

跳转到00453008,继续F8,会跳到Call处

img

F7进入0045300E Call(此处F8会直接跑出程序,需要关闭x32dbg后重新操作一次)

img

到达00453014,F8直到遇到会向上跳转的地方

img

运行到004553059处,用鼠标点击 0045305B 按F4运行到目标处

img

鼠标点击

img

F4

img

F8到0045305D发现又出现向上跳转,同理点选0045305F然后F4运行到那里

img

运行到0045305F

img

此后继续多次F8步过。遇到向上跳转的地方则像刚才利用F4避免向上跳转

核心思想就是向下的让他发生,向上的避免发生

img

0045313B、00453192处同理,点选下一行F4

img

004531C8有一次稍大跳转,F8,继续

img

来到00453243,继续向下

img

0045336E,点选下一行,按F4

img

同理00453384,点选下一行,按F4

img

004533C2,点选下一行,按F4

img

004533FA,点选下一行,按F4

img

继续F8,在00453415发现 popad

这通常意味着我们已经接近或到达了程序的原始入口点(OEP)

popad 指令的意义

  • 全称popad 是 “Pop All Double” 的缩写。
  • 作用popad 指令从堆栈中弹出所有通用寄存器的值,并恢复它们的状态。具体来说,它会依次恢复 EDI、ESI、EBP、ESP(跳过)、EBX、EDX、ECX 和 EAX 寄存器的值。
img

F8几次终于到达关键处00453425 这个ret意为return,F8即将发生一次大跳转,会进入OEP,右侧注释为自己所写

注意当前地址00453425

img

跳转到0041DDAC,这里就是OEP

img

1.3.2、ESP定律寻找OEP

思路:使用x32dbg打开程序后,按F8步过关键指令pushad。在右下角堆栈窗口找到ESP地址,右键选择“断点” -> “硬件断点” -> “访问” -> “2字节”或“4字节”。然后运行程序,命中断点后,跳转到OEP的位置通常就在附近。

打开程序F8步过关键句pushad,注意右上角窗口ESP地址0019FF54,右小角第一行绿色地址0019FF54

img

在右下角堆栈窗口找到ESP地址,右键选择“断点” -> “硬件断点” -> “访问” -> “2字节”或“4字节”

img

点击左上角断点栏切换过来可以看到已经设好了断点,我们按F9运行,会发现断点命中变为1

img

切换回CPU窗口,会发现到达了很眼熟的地址,不远处有ret,F8直到OEP

img

到达OEP

img

1.3.3、一步直达法寻找OEP

思路:通过搜索popad指令来尝试找到UPX和ASPack压缩壳的OEP,其原理如下:

压缩壳的特性:UPX和ASPack等压缩壳在解压缩完成后,通常会恢复寄存器的状态。popad指令用于从堆栈中弹出所有通用寄存器的值,这通常是解压缩完成后恢复寄存器状态的最后一步。

进入程序按Ctrl+F搜索popad

img

得到几个结果,我们从上往下挨个检查,双击进入00453415

img

是不是很眼熟?第一个就是我们要找的,我们又找到了OEP!

img

1.3.4、2次内存镜像法寻找OEP(不建议UPX和ASPack壳用这种方法,第二次断点容易断不下来)

思路以及原理:参考论坛前辈的一篇帖子

【新手教程四】小Z带你学习什么是两次内存镜像法和什么是内存断点 ? – 『脱壳破解区』 – 吾爱破解 – LCG – LSG |安卓破解|病毒分析|www.52pojie.cn

x32dbg启动程序后进入 内存布局界面

img

右键”.rsrc”->内存断点->访问->一次性

img

F9执行一次能够命中第一次断点,由于断点是一次性,所以命中后自动消失

img

再在内存界面右键 “.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

img

打开Scylla后,点击Dump

img

默认命名为 “吾爱破解论坛学习脱壳实例_aspack_dump.exe”,确定

img

发现双击dump后的程序无法运行

img

这可能是因为

IAT未修复:导入地址表(IAT)未正确修复,导致程序在运行时无法找到所需的外部函数。

1.5、IAT修复

IAT(Import Address Table)修复是脱壳过程中非常重要的一步。IAT是一个表格,存储了程序运行时需要调用的外部函数的地址。加壳程序通常会修改IAT以隐藏真实的函数调用地址,因此在脱壳后需要修复IAT以确保程序能够正确运行

在OEP处打开Scylla->Misc->Option->Use advanced IAT search->Accept

img
img

IAT Autosearch -> “是” -> “确定” -> Get Imports -> Show Invalid -> 按键盘delete

img
img
img

Show Invalid 然后delete

img

然后按Fix Dump,选择刚才Dump得到的exe

img
img

得到 “吾爱破解论坛学习脱壳实例_aspack_dump_SCY.exe”

这个就是可以运行的脱壳后的程序

img

我们将得到的程序”吾爱破解论坛学习脱壳实例_aspack_dump_SCY.exe”进行查壳

发现除了DIE之外的查壳软件均显示壳已脱去

这是因为这三个查壳软件的检测方法和特征库不同,DIE能测到程序脱壳后的残留特征

所以即使已经脱壳,不影响后续操作,它仍然能查到打包工具是ASPack

img

实例一到此结束

2、”吾爱破解论坛学习脱壳实例_Shielden.exe”

2.1、查壳

发现使用 Shielden 加壳

img

2.2、ASLR修复

ALSR disabler底部显示 File is a executable. 这代表该软件已经被ASLR修复或者不需要ASLR修复,继续下一步

img

2.3、找OEP(Original Entry Point)

未完待续,待我学习后回来填坑!

可以在论坛搜索SE脱壳教程

可能有帮助的:

Safengine通用破解补丁 – 『原创发布区』 – 吾爱破解 – LCG – LSG |安卓破解|病毒分析|www.52pojie.cn

2.4、Dump和IAT修复

未完待续,待我学习后回来填坑!

3、”吾爱破解论坛学习脱壳实例_Themida.exe”

3.1、查壳

发现用 Themida 加壳

img

3.2、ASLR修复

程序拖入ALSR disabler修复

img

3.3、找OEP(Original Entry Point)

未完待续,待我学习后回来填坑!

3.4、Dump和IAT修复

未完待续,待我学习后回来填坑!

参考前辈文章

浅谈Themida 3.0.4.0 x32 IAT修复 – 『脱壳破解区』 – 吾爱破解 – LCG – LSG |安卓破解|病毒分析|www.52pojie.cn

4、”吾爱破解论坛学习脱壳实例_UPX.exe”

4.1、查壳

发现是 UPX 加壳的

img

4.2、ASLR修复

ASLR修复成功

img

4.3、找OEP(Original Entry Point)

4.3.1、ESP定律

进来发现有入栈pushad,可以利用ESP定律,步过关键句后下硬件访问2/4字节断点

F8到pushad下一行,在右下角堆栈窗口右键第一行绿色地址-> 断点 -> 硬件断点 ->访问-> 4字节 -> 运行

img

容易发现00457355为JMP OEP

img

F8后到达OEP

img

4.4、Dump和IAT修复

Ctrl+i调出Scylla,Dump后自动获取导入表,然后删除无效部分,修复dump文件即可!

img

得到,测试运行成功,查壳已脱

img

5、”吾爱破解论坛学习脱壳实例_VMProtect.exe”

5.1、查壳

发现是用 VMProtect 2.0+ 加壳

img

5.2、ASLR修复

修复成功,得到”吾爱破解论坛学习脱壳实例_VMProtect.exe”

img

5.3、找OEP(Original Entry Point)

未完待续,待我学习后回来填坑!

5.4、Dump和IAT修复

未完待续,待我学习后回来填坑!

遗留问题

Safengine Shielden v2.3.6 、v2.4.0

Themida 2+

VMProtect 2+

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

写在最后

感谢所有无私奉献的坛友

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

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

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

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

本技术内容仅供学习和交流使用,如有疑问请联系qq2014160588并注明来意。请确保在使用过程中遵守相关法律法规。任何因使用本技术内容而导致的直接或间接损失,作者概不负责。用户需自行承担因使用本技术内容而产生的所有风险和责任。请勿将本技术内容用于任何非法用途。
上一篇
下一篇