前言
目的
记录踩坑经验,帮助他人避免同样问题。
提示
使用浏览器左侧目录快速导航。
注意
如有错误,请指正。
环境:
虚拟机Windows 10 企业版 LTSC
可能用到的软件:
工欲善其事必先利其器
软件名称 |
类别 |
作用 |
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
准备工作
虚拟机创建快照备份
在进行任何重要操作之前,建议对虚拟机进行快照备份。快照备份可以保存当前虚拟机的状态,包括操作系统、已安装的软件和配置等。如果在后续操作中出现问题,可以随时恢复到快照备份的状态,确保数据和系统的安全。
设置软件默认以管理员方式启动
某些软件需要管理员权限才能正常运行或执行特定操作。为了避免每次手动以管理员身份运行,可以将软件设置为默认以管理员方式启动。
x32dbg的一些设置
双击x32dbg->选项->选项
事件
引擎
异常
x32dbg/x64dbg运行异常中断解决办法,第一次异常于xxx,第二次异常于xxx
https://www.52pojie.cn/thread-1961181-1-1.html
(出处: 吾爱破解论坛)
反汇编
图形界面
杂项
外观
选项->外观->字体 (随个人喜好)
1、"吾爱破解论坛学习脱壳实例_aspack.exe"
1.1、查壳
发现使用 ASPack 加壳。
1.2、ASLR修复
将 吾爱破解论坛学习脱壳实例_aspack.exe
拖入ALSR disbler ,下面出现ASLR on executable is “stripped”则表示已经修复好了,修复的程序是 吾爱破解论坛学习脱壳实例_aspack.exe
而带有org的是原程序的备份。
1.3、找OEP(Original Entry Point)
右键 吾爱破解论坛学习脱壳实例_aspack.exe
->用x64dbg调试
或者将软件拖入x32dbg,或者拖到x32dbg快捷方式图标上
进到x32dbg的主页面,(为什么选的用x64dbg调试,结果打开的却是x32dbg?因为调试的是x32位的exe,x64dbg会自动调用x32dbg来处理)
1.3.1、单步跟踪法寻找OEP
思路:根据单步跟踪法(Single Stepping),综合利用步过(F8)、步进(F7)和运行到指定位置(F4),确保只执行向下跳转,避免向上跳转(向上跳转可能是由于反调试技术、代码混淆或循环结构引起的),最终找到一个大跳转位置,到达OEP。
注意:
-
一般情况遇到的Call可以步过(F8),但如果在Call步进(F8)会直接启动程序,这说明需要进入Call寻找OEP。
-
如果不小心把程序跑出来了则需要关闭x32dbg重新启动一次,如果不重启x32dbg可能会出现意想不到的错误。
步过(F8)一次到00F23002,此处的call(调用子程序)需要步进(F7)。
步进(F7),进入Call
步过(F8)直到 ret
(return),再按一下步过(F8)会跳转到其他地址
跳转到00453008,继续F8,会跳到Call处
F7进入0045300E Call(此处F8会直接跑出程序,需要关闭x32dbg后重新操作一次)
到达00453014,F8直到遇到会向上跳转的地方
运行到004553059处,用鼠标点击 0045305B 按F4运行到目标处
鼠标点击
F4
F8到0045305D发现又出现向上跳转,同理点选0045305F然后F4运行到那里
运行到0045305F
此后继续多次F8步过。遇到向上跳转的地方则像刚才利用F4避免向上跳转
核心思想就是向下的让他发生,向上的避免发生
0045313B、00453192处同理,点选下一行F4
004531C8有一次稍大跳转,F8,继续
来到00453243,继续向下
0045336E,点选下一行,按F4
同理00453384,点选下一行,按F4
004533C2,点选下一行,按F4
004533FA,点选下一行,按F4
继续F8,在00453415发现 popad
这通常意味着我们已经接近或到达了程序的原始入口点(OEP)
popad
指令的意义
- 全称:
popad
是 "Pop All Double" 的缩写。
- 作用:
popad
指令从堆栈中弹出所有通用寄存器的值,并恢复它们的状态。具体来说,它会依次恢复 EDI、ESI、EBP、ESP(跳过)、EBX、EDX、ECX 和 EAX 寄存器的值。
F8几次终于到达关键处00453425 这个ret意为return,F8即将发生一次大跳转,会进入OEP,右侧注释为自己所写
注意当前地址00453425
跳转到0041DDAC,这里就是OEP
1.3.2、ESP定律寻找OEP
思路:使用x32dbg打开程序后,按F8步过关键指令pushad
。在右下角堆栈窗口找到ESP地址,右键选择“断点” -> “硬件断点” -> “访问” -> “2字节”或“4字节”。然后运行程序,命中断点后,跳转到OEP的位置通常就在附近。
打开程序F8步过关键句pushad,注意右上角窗口ESP地址0019FF54,右小角第一行绿色地址0019FF54
在右下角堆栈窗口找到ESP地址,右键选择“断点” -> “硬件断点” -> “访问” -> “2字节”或“4字节”
点击左上角断点栏切换过来可以看到已经设好了断点,我们按F9运行,会发现断点命中变为1
切换回CPU窗口,会发现到达了很眼熟的地址,不远处有ret,F8直到OEP
到达OEP
1.3.3、一步直达法寻找OEP
思路:通过搜索popad
指令来尝试找到UPX和ASPack压缩壳的OEP,其原理如下:
压缩壳的特性:UPX和ASPack等压缩壳在解压缩完成后,通常会恢复寄存器的状态。popad
指令用于从堆栈中弹出所有通用寄存器的值,这通常是解压缩完成后恢复寄存器状态的最后一步。
进入程序按Ctrl+F搜索popad
得到几个结果,我们从上往下挨个检查,双击进入00453415
是不是很眼熟?第一个就是我们要找的,我们又找到了OEP!
1.3.4、2次内存镜像法寻找OEP(不建议UPX和ASPack壳用这种方法,第二次断点容易断不下来)
思路以及原理:参考论坛前辈的一篇帖子
【新手教程四】小Z带你学习什么是两次内存镜像法和什么是内存断点 ? - 『脱壳破解区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
x32dbg启动程序后进入 内存布局界面
右键".rsrc"->内存断点->访问->一次性
F9执行一次能够命中第一次断点,由于断点是一次性,所以命中后自动消失
再在内存界面右键 ".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
打开Scylla后,点击Dump
默认命名为 "吾爱破解论坛学习脱壳实例_aspack_dump.exe",确定
发现双击dump后的程序无法运行
这可能是因为
IAT未修复:导入地址表(IAT)未正确修复,导致程序在运行时无法找到所需的外部函数。
1.5、IAT修复
IAT(Import Address Table)修复是脱壳过程中非常重要的一步。IAT是一个表格,存储了程序运行时需要调用的外部函数的地址。加壳程序通常会修改IAT以隐藏真实的函数调用地址,因此在脱壳后需要修复IAT以确保程序能够正确运行
在OEP处打开Scylla->Misc->Option->Use advanced IAT search->Accept
IAT Autosearch -> "是" -> "确定" -> Get Imports -> Show Invalid -> 按键盘delete
Show Invalid 然后delete
然后按Fix Dump,选择刚才Dump得到的exe
得到 "吾爱破解论坛学习脱壳实例_aspack_dump_SCY.exe"
这个就是可以运行的脱壳后的程序
我们将得到的程序"吾爱破解论坛学习脱壳实例_aspack_dump_SCY.exe"进行查壳
发现除了DIE之外的查壳软件均显示壳已脱去
这是因为这三个查壳软件的检测方法和特征库不同,DIE能测到程序脱壳后的残留特征
所以即使已经脱壳,不影响后续操作,它仍然能查到打包工具是ASPack
实例一到此结束
2、"吾爱破解论坛学习脱壳实例_Shielden.exe"
2.1、查壳
发现使用 Shielden
加壳
2.2、ASLR修复
ALSR disabler底部显示 File is a executable. 这代表该软件已经被ASLR修复或者不需要ASLR修复,继续下一步
2.3、找OEP(Original Entry Point)
未完待续,待我学习后回来填坑!
可以在论坛搜索SE脱壳教程
可能有帮助的:
Safengine通用破解补丁 - 『原创发布区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
2.4、Dump和IAT修复
未完待续,待我学习后回来填坑!
3、"吾爱破解论坛学习脱壳实例_Themida.exe"
3.1、查壳
发现用 Themida 加壳
3.2、ASLR修复
程序拖入ALSR disabler修复
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 加壳的
4.2、ASLR修复
ASLR修复成功
4.3、找OEP(Original Entry Point)
4.3.1、ESP定律
进来发现有入栈pushad,可以利用ESP定律,步过关键句后下硬件访问2/4字节断点
F8到pushad下一行,在右下角堆栈窗口右键第一行绿色地址-> 断点 -> 硬件断点 ->访问-> 4字节 -> 运行
容易发现00457355为JMP OEP
F8后到达OEP
4.4、Dump和IAT修复
Ctrl+i调出Scylla,Dump后自动获取导入表,然后删除无效部分,修复dump文件即可!
得到,测试运行成功,查壳已脱
5、"吾爱破解论坛学习脱壳实例_VMProtect.exe"
5.1、查壳
发现是用 VMProtect 2.0+ 加壳
5.2、ASLR修复
修复成功,得到"吾爱破解论坛学习脱壳实例_VMProtect.exe"
5.3、找OEP(Original Entry Point)
未完待续,待我学习后回来填坑!
5.4、Dump和IAT修复
未完待续,待我学习后回来填坑!
遗留问题
Safengine Shielden v2.3.6 、v2.4.0
Themida 2+
VMProtect 2+
学的越多,需要学的就越多啊,慢慢来吧...
写在最后
感谢所有无私奉献的坛友:
- 感谢所有在论坛中无私奉献的朋友们,你们的贡献使得知识得以传播和共享。
本文只是对吾爱破解教程的流程记录:
- 本文仅是对吾爱破解教程的流程记录,算是一个比较老的教程了,希望对大家有所帮助。
所有虚拟机、测试工具、测试软件均可在官网论坛和"可能用到的链接"中下载