前言
目的
记录踩坑经验,帮助他人避免同样问题。
提示
使用浏览器左侧目录快速导航。
注意
如有错误,请指正。
环境:
虚拟机Windows 10 企业版 LTSC

可能用到的软件:
| 软件名称 | 类别 | 作用 |
|---|---|---|
| Detect It Easy | 文件分析工具 | 识别可执行文件的编译器、打包器和加壳工具 |
| Exeinfo PE | 文件分析工具 | 分析可执行文件的编译器、打包器和加壳工具 |
| PEiD | 文件分析工具 | 检测可执行文件的编译器、打包器和加壳工具 |
| x32/64dbg | 调试工具 | 调试 32 位和 64 位可执行文件 |
| C32Asm | 反汇编工具 | 反汇编和重新汇编二进制代码 |
| Restorator | 资源编辑工具 | 查看和修改可执行文件中的资源 |
| Process Monitor | 系统监视工具 | 实时监视系统文件和注册表活动 |
可能用到的链接
爱盘下载:
http://down.52pojie.cn/吾爱破解视频教程/吾爱破解论坛官方入门教学培训第一期/
百度网盘下载:
链接: https://pan.baidu.com/s/1z9WQeYgUGxcurVD2lKfNeg提取码: e2su
一句话概括给软件去广告、弹窗及主页锁定的思路
通过逆向工程分析软件的代码和行为,找到并移除或屏蔽触发广告、弹窗和主页锁定的相关函数调用或配置。
例1
1、查壳
发现使用 UPX 加壳。

2、ASLR修复
将 exe 拖入 ASLR 修复软件,得到修复后的 吾爱破解培训第二课实例一.exe,原程序备份为 吾爱破解培训第二课实例一-org.exe。

如果出现 “File is a executable” 提示,表示软件无需或已修复,可跳过此步骤。

3、脱壳
3.1、入口断点
仅在 x32dbg 设置“入口断点”。

3.2、启动x32dbg
将 吾爱破解培训第二课实例一.exe 拖入 x32dbg 打开。

3.3、使用ESP定律找OEP
3.3.1、步过 pushad
按 F8 步过 pushad,使用 ESP 定律。

3.3.2 设置断点
在堆栈窗口找到第一行绿色地址,右键选择“断点” -> “硬件断点, 访问” -> “4 字节”。

3.3.3、触发断点
点击断点,切换到断点界面,确保“命中”为 0。

按 F9 运行,命中变为 1。

点击 CPU 切换回来,找到大跳转 OEP。

3.3.4、找到OEP
点击图示位置,按 F4 运行到 JMP OEP。

然后按 F8 步进到达 OEP。

3.4、使用 x32dbg/x64dbg 自带的 Scylla 进行 dump 和 IAT 修复
3.4.1、转存Dump
按 Ctrl+I 调出 Scylla。

点击 Dump 栏里的 Dump,将程序命名为 吾爱破解培训第二课实例一_dump.exe。

3.4.2、IAT修复
在 Scylla 设置高级 IAT 搜索,勾选后点 Accept。


确保 OEP 地址为 00401876,点击 IAT Autosearch,获取起始点 VA 和大小 Size。


点击 Get Imports 获取导入表,删除 Invalid 对象。


点击 Fix Dump,选择 吾爱破解培训第二课实例一_dump.exe,得到 吾爱破解培训第二课实例一_dump_SCY.exe。


3.4.3、验证IAT修复是否成功
双击打开,使用查壳工具验证脱壳成功。


4、去广告
4.1、删除跳转功能
- 将
吾爱破解培训第二课实例一_dump_SCY.exe拖入 C32Asm。 - 选择十六进制模式。

- 按 Ctrl+F 搜索 ANSI 字符串 “http”。

- 定位到
explorer.exe,框选并右键填充 00。

- 按 F3 和 Ctrl+F3 确认删除完成。
4.2、删除启动广告
- 在 C32Asm 中按 Ctrl+F 搜索 Unicode 字符串 “http”。

- 定位到刚才删除位置的下方。

- 框选
http到open,右键填充 00。

- 按 Ctrl+S 保存,选择是否备份原文件。
这样就去除了启动广告。
4.3、删除启动弹窗
- 用 x32dbg 调试修改后的
吾爱破解培训第二课实例一_dump_SCY.exe。 - 使用搜索字符串功能,找到 “来试试我的程序啊” 的地址
004014E7。
- 双击跳转到该地址,框选
004014E0到004014ED(包含call和前面的 4个push)。

- 右键选择二进制,用 NOP 填充(或按Ctrl+9)。

- 右键 CPU 选择补丁(或按 Ctrl+P),全选并修补文件,保存为
吾爱破解培训第二课实例一_dump_SCY_试试你的程序.exe。



启动程序后,弹窗已删除。

4.4、删除启动后一段时间的广告(网址被加密过)
- 在 x32dbg 打开
吾爱破解培训第二课实例一_dump_SCY_试试你的程序.exe。
- 在左下角命令窗口输入以下断点命令:
bp ShellExecuteAbp ShellExecuteWbp WinExecbp CreateProcessAbp CreateProcessW
- 按 F9 运行,命中
ShellExecuteW断点,继续按 F9 运行。
- 等待约 20 秒,命中
WinExec断点,右下角堆栈窗口显示广告 URL。
- 双击堆栈窗口第一行,找到
WinExec的call和前面 2 个push,用 NOP 填充。

- 按 Ctrl+P 或右键选择补丁,全选并修补文件,保存新文件。

- 继续按 F9 运行,命中
CreateProcessA断点,双击堆栈界面第一行过去,找到call和前面 10 个push,用 NOP 填充。

- 按 Ctrl+P 或右键选择补丁,全选并修补文件。

最终,得到去除所有广告的软件。

例2
直接启动 吾爱破解培训第二课实例二.exe,Win10 虚拟机出现三次脚本错误,可能与内置广告有关。修改主页功能未实现,可能与虚拟机版本有关,不影响后续操作。FixRES 无法解决脚本错误。



1、查壳
发现使用 ASPack 加壳。

2、ASLR修复
将 吾爱破解培训第二课实例二.exe 拖入 ASLR disabler,显示 “ASLR on executable is stripped” 表示修复成功。得到修复后的 吾爱破解培训第二课实例二.exe,原程序备份为 吾爱破解培训第二课实例二-org.exe。

3、脱壳
用x32dbg启动程序“吾爱破解培训第二课实例二.exe”
3.1、使用ESP定律找OEP
- 用 x32dbg 启动程序
吾爱破解培训第二课实例二.exe。- 按 F8 步过
pushad,来到00409002。- 在堆栈窗口右键绿色地址
0019FF54,选择“断点” -> “硬件断点,访问” -> “2 字节”。- 运行程序,命中断点。
- 按 F8 直到
00409425处,return,跳转到 OEP。- 按 F8 到达 OEP。
f8步过关键句pushad,来到00409002

在堆栈窗口右键绿色地址0019FF54
断点-硬件断点,访问-2字节

运行,发现刚打的断点命中


f8直到00409425处,return,这里会jump到OEP

f8一次便到达OEP

3.2、IAT修复
3.2.1、打开Scylla
在OEP处按ctrl+i调出x32dbg内置scylla

3.2.2、转存
点击dump

3.2.3、根据OEP自动搜索起点VA和大小Size
点击IAT Autosearch – 是


3.2.4、获取导入表
然后点Get Imports

3.2.5、优化导入表
点Show Invalid,没显示对象证明没有Invalid
suspect的对象可以不删,有时删除会造成问题
3.2.6、修复转存
选择Fix Dump-”吾爱破解第二课实例二_dump.exe“-打开

可以看到Scylla的Log里显示导入重建成功

3.3、验证IAT修复是否成功
除去开始说的三个”无效脚本“外,软件没有问题

三软查壳,没有问题

4、去广告
4.1、删除修改主页功能
4.1.1、定位API
将脱壳后的”吾爱破解培训第二课实例二 _dump_SCY.exe“用x32dbg打开

点击中间靠右的“搜索字符串”,图标是Az
得到下图

注意下图框选的内容,这些内容跟修改主页有关,双击004019E2进入

注意这一大段从004019D0到00401AA9,使用了三种api,每个调用3次,目的是改IE浏览器的主页



4.1.2、分析API
RegCreateKeyW 3参数

RegSetValueExW 6参数

RegCloseKey 1参数

4.1.3、根据API参数情况来NOP
RegCreateKeyW有3个参数,于是框选3个push到Call之间的内容,ctrl+9,enter

RegSetValueExW有6个参数,于是框选6个push到Call之间的内容,ctrl+9,enter

RegCloseKey有1个参数,于是框选1个push到Call之间的内容,ctrl+9,enter

同理

同理

…
成果图




然后ctrl+p,全选,修补文件
命名为”吾爱破解培训第二课实例二_dump_SCY去除主页修改.exe“


启动测试没有问题,至此已经实现删除修改主页的功能

4.2、删除软件内部窗口广告(这个容易不小心把课程说明跳转功能误杀,注意小心谨慎)
即下图所示位置

4.2.1、方法一:使用Restorator.exe(这个方法不推荐)
测试发现win10虚拟机最后导出的软件不能运行,如果你是xp的虚拟机可以试试看

先用Restorator.exe打开没有去除内置广告的一个版本”吾爱破解培训第二课实例二 _dump_SCY.exe“

左侧栏选择对话框-102

点击顶部栏靠右有个编辑模式,点击广告的位置的框,将右侧窗口样式里面”可见“去掉

保存、导出、执行,发现出现错误,可能是虚拟机版本问题

4.2.2、方法二:使用C32Asm,用00去覆盖网址链接
4.2.2.1、使用C32Asm打开软件
用C32Asm打开”吾爱破解培训第二课实例二_dump_SCY去除主页修改.exe“

十六进制模式

进来是这样

4.2.2.2、通过ANSI字符串搜php
ctrl+f


4.2.2.3、通过Unicode搜php
ctrl+f

定位到php!

注意框选h.t.t.p到p.h.p的内容,不要框选到explorer的地方


4.2.2.4、保存并测试
最后别忘了ctrl+s保存,提示你要不要保留备份,我选的否。
重新打开软件”吾爱破解培训第二课实例二 _dump_SCY去除主页修改.exe“发现内置窗口广告没有了
但是右下角的流氓窗口过一会还是会跳出来,所以等会准备搞掉它

4.2.3、方法三:使用x32dbg寻找网址(类似于C32asm)
4.2.3.1、通过x32dbg搜索字符串功能定位网址
我将软件重命名为了”吾爱破解培训第二课实例二 _dump_SCY去除主页修改.exe“
查找字符串,注意00401C4A,他跟内置广告有关
它上面和下面的explorer.exe跟课程说明功能相关,注意不要误杀

双击00401C4A过去

4.2.3.2、注意内存窗口ASCII的网址
双击”push 吾爱破解培训第二.403630“
注意左下角内存窗口的ASCII码

右键内存窗口选择文本-扩展ASCII
这下好看多了


4.2.3.3、清空网址
右键,二进制编辑,填充

输入00

得到下图

ctrl+p,修补文件,命名为“吾爱破解培训第二课实例二 dump_SCY去除主页锁定x32dbg去除内置广告.exe”

OK

4.3、删除软件启动一段时间弹出的窗口
思路:x32dbg+猜测API
在x32dbg左下角命令处打几个断点,猜测程序用这几个API弹出的窗口
- bp CreateWindowExA
- bp CreateWindowExW
- bp DialogBoxParamA
- bp DialogBoxParamW

然后运行,命中一个断点

注意:将76F719A0这个命中了的断点delete掉
再次运行,等待20s左右
发现断到76FA5070

双击断点位置过去查看
观察这一块

查查资料
Sleep调用1参数

DialogBoxParamW调用5个参数

GetModuleHandleW调用1个参数

堆栈这种数据结构是后进先出(LIFO)
所以从上往下看,先干掉Sleep,1个参数,ctrl+9

得到

再是GetModuleHandleW,1个参数,ctrl+9 NOP掉

最后是DialogboxParamW,从下往上数5个push,期间所有内容NOP掉

不能多也不能少,要保证堆栈平衡

最后ctrl+p导出,大功告成

作业1(简洁)
“吾爱破解培训第二课作业一.exe”
1、查壳
发现使用 UPX 加壳。

2、ASLR修复
得到修复后程序即可
3、脱壳
由于是UPX壳,所以直接向下找,定位到OEP

快速dump+IAT修复后查壳

脱壳完毕
4、去广告
运行脱壳后程序发现需要去除功能有四个类型
4.1、去掉改主页的地方
通过字符串定位到

RegCreateKeyW-3参数
RegSetValueExW-6参数
RegCloseKey-1参数
改变后



4.2、内置广告页
通过字符串定位到

双击push 吾爱破解培训第二.551AB8

右键第一行-在内存窗口中转到-选定的地址

实现效果

4.3、删除启动一会儿弹出网页的功能
4.3.1、删除第一次弹出网页
bp ShellExecuteA; bp ShellExecuteW; bp WinExec; bp CreateProcessA; bp CreateProcessW
打了断点后运行,等待20s,中断于WinExeC

双击命中的断点

双击右下角堆栈窗口绿色地址的一行或者双击mov edi,edi

到达后按ctrl+a分析,发现这块显然跟弹网页有关

Sleep-1参数
WinExeC-2个参数
于是Ctrl+9就有了


4.3.2、删除第二次弹出网页
以类似的办法断点定位到CreateProcessA

Sleep-1参数
CreateProcessA-10参数


4.4、删除启动一会儿跳弹框
bp CreateWindowExA;bp CreateWindowExW;bp DialogBoxParamA;bp DialogBoxParamW

命中CreateWindowExW后先不管

删除CreateWindowExW断点后运行,等待20s,命中DialogBoxParamW


DialogBoxParamW-5参数
GerModuleHandleW-1参数
CreateThread-6参数
Sleep-1参数

完成

Q1:如何猜测程序弹广告使用的API是什么?
A:使用Procmon软件,以下是简要介绍
1、根据经验
如果经验丰富,应该不难想到可能调用的API
2、善用搜索
问AI或者使用搜索引擎
举几个例子
”Windows打开软件出现弹窗可能用到什么API?”

“Windows打开软件出现广告网页跳转可能用到什么API?”

3、使用工具
例如ProcMon
以”吾爱破解培训第二课实例二 _dump_SCY.exe“未修改版为例
启动Procmon,长下面这样,准备设置要监视的程序

顶部栏选择Filter过滤器或者ctrl+L

进来后左边选择过滤策略为Process Name,即根据程序名,然后填入程序名

点了右边Add添加再OK确认

然后启动程序,注意别启动错了,监视的谁就启动谁
然后等待一会,让广告弹出来

观察procmon顶部几个栏目,分别是监视程序在不同地方干的事
- 注册表相关

- 文件系统相关

- 网络相关

- 进程和线程活动

- 性能分析事件

示例找API
通过52pojie网址来找
改主页要用到注册表,我们选择注册表相关活动
ctrl+f搜索52pojie,定位到的这个API是否有些眼熟?
简要展示几个调用到的API
- RegSetValue

- RegOpenKey

- RegQueryValue

- RegCreateKey

Q2:如何得知我要将Call跟几个push替换为NOP才能保证堆栈平衡?
A:查资料,了解API要用几个参数,然后替换对应参数个数的push。注意要从上往下看,堆栈遵循后进先出LIFO,后面push压入堆栈的数据会被率先用到。
写在最后
感谢所有无私奉献的坛友:
- 感谢所有在论坛中无私奉献的朋友们,你们的贡献使得知识得以传播和共享。
本文只是对吾爱破解教程的流程记录:
- 本文仅是对吾爱破解教程的流程记录,算是一个比较老的教程了,希望对大家有所帮助。
所有虚拟机、测试工具、测试软件均可在官网论坛和”可能用到的链接”中下载




