吾爱破解–软件脱壳去广告弹窗初试

破解 AnthonyZhai 8个月前 (03-30) 264次浏览 已收录 0个评论 扫描二维码

最近在吾爱破解www.52pojie.cn)注册了会员,开始正式学习一接触电脑就特别感兴趣的一项,即破解软件。
今天要破解的软件是论坛教程中的作业,它打开时会锁定IE主页到www.52pojie.cn,窗口中间是一个显示其论坛的控件,20秒后会分别调用IE弹出两个论坛广告,在右下角出现类似于QQ弹窗的广告。
软件弹窗广告及主页锁定

工具:Exeinfo PE、OllyDbg吾爱破解版、ImportREC、Restorator(选用)

脱壳

一般软件通过加壳保护软件版权,也有病毒通过加壳躲过安全软件的查杀。现在使用Exeinfo PE检查该软件是否加壳并进行脱壳。
UPX壳
如图,查到软件是UPX壳,并不知道这是什么壳?百度之!

UPX (the Ultimate Packer for eXecutables)是一款先进的可执行程序文件压缩器,压缩过的可执行文件体积缩小50%-70%,这样减少了磁盘占用空间、网络上传下载的时间和其它分布以及存储费用。通过 UPX 压缩过的程序和程序库完全没有功能损失和压缩之前一样可正常地运行,对于支持的大多数格式没有运行时间或内存的不利后果。UPX 支持许多不同的可执行文件格式 包含 Windows 95/98/ME/NT/2000/XP/CE 程序和动态链接库、DOS 程序、Linux 可执行文件和核心。

又查到一般手工脱UPX壳的方法为ESP定律。以下是脱壳过程,并讲述一般步骤。
该程序载入OD中可看到PUSHAD指令,看到这个一般可用ESP定律尝试脱壳。注意观察寄存器窗口中的ESP寄存器的值变化,F8单步步过,可观察到ESP寄存器值变化,若有变化,右键ESP寄存器设置HW break硬件中断
PUSHAD
ESP硬件断点
F9运行,改程序会在设置的硬件中断停止运行。在JMP位置F2(或双击)设置断点(地址变为红色即设置断点成功),F9继续运行
F2中断JMP
待程序运行到JMP断点是,F7单步步入即可到达程序的真正入口地址,即OEP。因为它符合VS2008编译的程序的入口
OEP
选中该入口地址,菜单栏选择插件->OllyDump->脱壳在当前调试的进程,如图出现窗口,若不知道使用哪种方法重建输入表,则都尝试一下。
脱壳
到此脱壳完成。

修复

在上步脱壳完成后,脱壳程序若出现无法正常打开报错时,需要进行此步修复,若无错误则无需修复。

打开ImportREC加壳程序,在REC中选择加壳程序,在左下角填入OEP,但是需要注意的是这里输入的是偏移地址,即用OEP-BASE所得到的地址,在本例中OD中的OEP为005025A6,基址是00400000,所以最后得到OEP为001025A6。之后点击自动搜索IAT(IAT AutoSearch),出现提示框“可能发现原始的IAT地址,尝试点击‘获取输入表’”,此时点击获取输入表(Get Imports),在已找到输入函数(Imported Function Found)窗口中显示出所使用的API,若没有无效函数时,点击修复转存文件(Fix Dump),选择已经脱壳但打开报错的程序修复。

去广告弹窗和主页锁定

广告弹窗原理:一般程序通过调用系统API实现,调用IE打开网址,或创建进程、线程实现弹窗。
注意锁定原理:一般是通过操作注册表实现修改主页及锁定。

例如,ShellExecuteA/W、WinExec、CreateProcessA/W、CreateThread、CreateWindowExA/W、DialogBoxParamA/W、RegCreateKeyExA/W、RegOpenKeyExA/W、RegDeleteKeyExA/W。
因此,这里有两种方法实现寻找广告弹窗和主页锁定的汇编代码的位置:
1、通过在OD中设置上述API的断点;
2、在程序的字符串中搜索窗口中出现的文字和网址等信息确定。

一、先尝试第二种比较简单的方法,通过查找程序中UNICODE或ASCII信息确定程序的广告等位置。

将已脱壳程序载入AD,右键中文搜索引擎->智能搜索,即可得到程序中所有字符串信息,CTRL+F搜索“52pojie.cn”(本例中所有IE网址均含有此字符串,窗口中显示的也是此网址,主页也锁定到该网址),得到需要的信息。
字符串
在Start Page、Default_Page_URL上右键跟随(Follow)可来到同一代码段,其实都知道前面两个字符串表示主页或默认开始网址,即是有关主页锁定的代码已经找到。

004026B0    55              push ebp
004026B1    8BEC            mov ebp,esp
004026B3    83EC 38         sub esp,0x38
004026B6    A1 F41C5700     mov eax,dword ptr ds:[0x571CF4]
004026BB    33C5            xor eax,ebp
004026BD    8945 F8         mov dword ptr ss:[ebp-0x8],eax
004026C0    56              push esi
004026C1    57              push edi
004026C2    C745 C8 7019550>mov dword ptr ss:[ebp-0x38],吾爱破解.005>; SOFTWARE\microsoft\Internet Explorer\Main
004026C9    B9 0B000000     mov ecx,0xB
004026CE    BE 44195500     mov esi,吾爱破解.00551944                ; http://www.52pojie.cn
004026D3    8D7D CC         lea edi,dword ptr ss:[ebp-0x34]
004026D6    F3:A5           rep movs dword ptr es:[edi],dword ptr ds>
004026D8    8D45 FC         lea eax,dword ptr ss:[ebp-0x4]
004026DB    50              push eax
004026DC    8B4D C8         mov ecx,dword ptr ss:[ebp-0x38]
004026DF    51              push ecx
004026E0    68 02000080     push 0x80000002
004026E5    FF15 0C705200   call dword ptr ds:[<&advapi32.RegCreateK>; advapi32.RegCreateKeyW
004026EB    6A 2C           push 0x2C
004026ED    8D55 CC         lea edx,dword ptr ss:[ebp-0x34]
004026F0    52              push edx                                 ; ntdll.KiFastSystemCallRet
004026F1    6A 01           push 0x1
004026F3    6A 00           push 0x0
004026F5    68 C4195500     push 吾爱破解.005519C4                   ; Start Page
004026FA    8B45 FC         mov eax,dword ptr ss:[ebp-0x4]
004026FD    50              push eax
004026FE    FF15 10705200   call dword ptr ds:[<&advapi32.RegSetValu>; advapi32.RegSetValueExW
00402704    8B4D FC         mov ecx,dword ptr ss:[ebp-0x4]
00402707    51              push ecx
00402708    FF15 14705200   call dword ptr ds:[<&advapi32.RegCloseKe>; advapi32.RegCloseKey
0040270E    8D55 FC         lea edx,dword ptr ss:[ebp-0x4]
00402711    52              push edx                                 ; ntdll.KiFastSystemCallRet
00402712    8B45 C8         mov eax,dword ptr ss:[ebp-0x38]
00402715    50              push eax
00402716    68 01000080     push 0x80000001
0040271B    FF15 0C705200   call dword ptr ds:[<&advapi32.RegCreateK>; advapi32.RegCreateKeyW
00402721    6A 2C           push 0x2C
00402723    8D4D CC         lea ecx,dword ptr ss:[ebp-0x34]
00402726    51              push ecx
00402727    6A 01           push 0x1
00402729    6A 00           push 0x0
0040272B    68 DC195500     push 吾爱破解.005519DC                   ; Start Page
00402730    8B55 FC         mov edx,dword ptr ss:[ebp-0x4]
00402733    52              push edx                                 ; ntdll.KiFastSystemCallRet
00402734    FF15 10705200   call dword ptr ds:[<&advapi32.RegSetValu>; advapi32.RegSetValueExW
0040273A    8B45 FC         mov eax,dword ptr ss:[ebp-0x4]
0040273D    50              push eax
0040273E    FF15 14705200   call dword ptr ds:[<&advapi32.RegCloseKe>; advapi32.RegCloseKey
00402744    8D4D FC         lea ecx,dword ptr ss:[ebp-0x4]
00402747    51              push ecx
00402748    8B55 C8         mov edx,dword ptr ss:[ebp-0x38]
0040274B    52              push edx                                 ; ntdll.KiFastSystemCallRet
0040274C    68 01000080     push 0x80000001
00402751    FF15 0C705200   call dword ptr ds:[<&advapi32.RegCreateK>; advapi32.RegCreateKeyW
00402757    6A 2C           push 0x2C
00402759    8D45 CC         lea eax,dword ptr ss:[ebp-0x34]
0040275C    50              push eax
0040275D    6A 01           push 0x1
0040275F    6A 00           push 0x0
00402761    68 F4195500     push 吾爱破解.005519F4                   ; Default_Page_URL
00402766    8B4D FC         mov ecx,dword ptr ss:[ebp-0x4]
00402769    51              push ecx
0040276A    FF15 10705200   call dword ptr ds:[<&advapi32.RegSetValu>; advapi32.RegSetValueExW
00402770    8B55 FC         mov edx,dword ptr ss:[ebp-0x4]
00402773    52              push edx                                 ; ntdll.KiFastSystemCallRet
00402774    FF15 14705200   call dword ptr ds:[<&advapi32.RegCloseKe>; advapi32.RegCloseKey
0040277A    5F              pop edi                                  ; kernel32.7C817067
0040277B    5E              pop esi                                  ; kernel32.7C817067
0040277C    8B4D F8         mov ecx,dword ptr ss:[ebp-0x8]           ; kernel32.7C817070
0040277F    33CD            xor ecx,ebp
00402781    E8 2AFE0F00     call 吾爱破解.005025B0
00402786    8BE5            mov esp,ebp
00402788    5D              pop ebp                                  ; kernel32.7C817067
00402789    C3              retn

上下查看此段代码,可以看到有调用(CALL)诸如RegCreateKeyExA/W、RegOpenKeyExA/W、RegDeleteKeyExA/W等API的操作。在注释中也可以看到有Start Page、Default_Page_UR、SOFTWARE\microsoft\Internet Explorer\Main等注册表目录和项等字样。因此,此段汇编代码就是主页锁定的相关代码。
采用两种方式任一都可以实现去除主页锁定:
1、选中整段代码,右键二进制->用NOP填充
2、双击段首用RETN替换,不执行此段代码直接返回到调用处。
修改完成后,右键复制到可执行文件->选择完成保存。

注意此时用NOP填充要选中整段已修改的代码,用RETN方法选择被替换的那一条,即选择已被更改的代码。

用此方法还可以去掉窗口中的广告。跟随“http://www.52pojie.cn/portal.php”字样来到

00402C99    68 B81A5500     push 吾爱破解.00551AB8       http://www.52pojie.cn/portal.php

单击该项可知,它是数据段(DATA)中保存的信息,复制00551AB8地址,在左下角数据窗口使用快捷键CTRL+G打开表达式跟随窗口,粘贴入刚复制的地址数据回车,便可看到“http://www.52pojie.cn/portal.php”的数据,选中右键二进制->用00填充
DATA
此时,主页锁定和窗口内广告已经解决。还有二个IE广告和右下角弹窗广告没有解决,接下来使用另一种方法实现。

二、使用设置API断点实现去除弹窗广告

汇编窗口使用快捷键CTRL+G调用表达式跟随窗口,分别跟随以下API并相应位置设置断点(F2或双击):
ShellExecuteA/W
WinExec
CreateProcessA/W
CreateWindowExA/w
DialogBoxParamA/W
都设置后F9运行,然后等待程序中断,在右下角堆栈窗口查看中断程序的相关信息,判断是否是要去除的广告。
WinExec中断
由于之前程序打开过此网址,因此可以认定“http://www.52pojie.cn/forum-5-1.html”为需要去除信息,在CALL 到 WinExec 来自 吾爱破解.004029AA处回车即可跟随到相应的汇编代码。
此时用NOP填充法比较合适,那么如何选择填充长度呢?
可以用“PUSH+CALL”来识别,即一般在堆栈窗口中有几个数据,在汇编窗口的代码CALL之前就有几个PUSH指令。
有些稍微复杂的可以逐个点击CALL之前的指令,在汇编窗口下面的信息窗口中查看堆栈及字符串等信息来识别是否与要NOP的信息相关。
PUSH+CALL
这个广告去除完毕,F9继续运行,来到以下这个断点,同样是广告中出现过“http://www.52pojie.cn/forum-68-1.html”网址,因此此处断点也是需要修改的。
CreateProcessA断点
修改依然用NOP填充大法
NOP大法好
到此还差一个弹窗广告没有搞定,接下来讲述这个广告如何去除。接下来到达DialogBoxParamW断点
DialogBoxParaW断点
回车跟随到如下代码段:

00402BF0    55              push ebp
00402BF1    8BEC            mov ebp,esp
00402BF3    6A 00           push 0x0
00402BF5    6A 00           push 0x0
00402BF7    6A 00           push 0x0
00402BF9    68 B0284000     push 吾爱破解.004028B0
00402BFE    6A 00           push 0x0
00402C00    6A 00           push 0x0
00402C02    FF15 2C745200   call dword ptr ds:[<&kernel32.CreateThre>; kernel32.CreateThread
00402C08    6A 00           push 0x0
00402C0A    6A 00           push 0x0
00402C0C    6A 00           push 0x0
00402C0E    68 E0294000     push 吾爱破解.004029E0
00402C13    6A 00           push 0x0
00402C15    6A 00           push 0x0
00402C17    FF15 2C745200   call dword ptr ds:[<&kernel32.CreateThre>; kernel32.CreateThread
00402C1D    68 204E0000     push 0x4E20
00402C22    FF15 24745200   call dword ptr ds:[<&kernel32.Sleep>]    ; kernel32.Sleep
00402C28    6A 00           push 0x0
00402C2A    68 E0274000     push 吾爱破解.004027E0
00402C2F    6A 00           push 0x0
00402C31    68 84000000     push 0x84
00402C36    6A 00           push 0x0
00402C38    FF15 30745200   call dword ptr ds:[<&kernel32.GetModuleH>; kernel32.GetModuleHandleW
00402C3E    50              push eax                                 ; 吾爱破解.00400000
00402C3F    FF15 38785200   call dword ptr ds:[<&user32.DialogBoxPar>; user32.DialogBoxParamW
00402C45    5D              pop ebp                                  ; 吾爱破解.00402C45
00402C46    C3              retn

通过以上代码发现,确实是弹窗广告的代码,因为该弹窗是程序运行20s后才出现,而这里也有Sleep指令来休眠。观察整段代码可以发现改段代码是汇编中子程序的模样,先PUSH保存信息,然后进行创建线程->休眠->获取句柄->弹出对话框,最后POP还原信息,再返回(RETN)。因此为了信息完整应该将PUSH和POP间(包含)的代码NOP填充掉,或者直接在PUSH处RETN即可。
至此,所有广告已经去除,最终只剩一个窗口。
结果
美中不足的是,窗口中广告失效难看,可以使用Restorator软件隐藏那个网页控件。
完美

总结

1、每去除一个广告后,选中修改部分,右键复制到可执行文件->选择保存,然后下一次修改在此基础上继续,这样可以防止一次性全部修改后,若出错还要重新修改发生。
2、硬件断点在菜单调试->硬件断点中查看并删除,F2断点可以在原断点处再次F2(或双击)撤销,在工具栏b按钮中查看或删除。
断点管理界面
3、需要学习常见编译器的OEP,从而在之后去壳的过程中轻易识别出OEP。

文件下载

  文件名称:吾爱破解培训第二课作业一.exe  文件大小:638 KB
  下载声明:本站所有软件和资料均为软件作者提供或网友推荐发布而来,仅供学习和研究使用,不得用于任何商业用途。如本站不慎侵犯你的版权请联系我,我将及时处理,并撤下相关内容!
  下载地址:
1、百度云下载-faeh
2、GitHub下载

吾爱破解教程学习系列文章列表如下:


“最初的梦想”版权所有丨如未注明 , 均为原创丨若有侵权,请邮件联系留言给我
转载请注明原文链接: 吾爱破解–软件脱壳去广告弹窗初试
喜欢 (1)
[使用支付宝或微信扫码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址