【逆向知识】单机游戏去启动广告

前言

很多网站下载出来的游戏很多都在启动游戏添加了广告程序,A广告嵌套B广告,再由B广告启动游戏。广告启动后关掉广告窗口,游戏也会被关掉,还会弹出一个网页广告。并且知道游戏的主要程序名后也无法打开游戏,因为游戏的PE文件被修改了,无法正常打开主游戏文件。

549050-20170405000008472-623828085.png

工具

小生我怕怕版本OD

收集信息

分析广告程序首先要确定出游戏的编程语言,可以利用PEID扫描文件夹的功能扫描文件信息提取特征。通过PEID的信息可以看到原本的游戏是VC++所编写的,而广告程序是被加壳的,壳是Aspack 2.12。而这个壳是没有必要去脱的。

549050-20170405000028941-435964264.png

动态调试

破解之前需要初步清晰动态调试的思路,程序广告程序的流程是A广告调用B广告,B广告调用游戏的主要进程。这些过程中必定会使用windows API 【CreateProcess】。即使知道游戏的主要程序名也无法打开游戏。因为游戏的正常PE文件被修改了,广告文件每次运行前会在内存中把exe修改回原来的内容。

【1】 使用OD的API断点功能,使用快捷键【Ctrl+G】,跳转到【CreateProcess】、【WriteProcessMemory】处进行断点。

【2】从内存中转存出正常的文件。

去启动广告调试过程

打开广告程序后,使用OD附加广告的进程。

549050-20170405000059628-42031104.png

使用快捷键【Ctrl+G】,跳转到【CreateProcess】、【WriteProcessMemory】API函数处。可以选择图形化界面操作OD反汇编界面右键-【转到】-【表达式】。也可以OD反汇编界面右键-【查找】-【当前模块中的名称】,将【CreateProcessA】、【CreateProcessW】的位置下断点。

549050-20170405000125441-20102088.png

549050-20170405000142957-1361435042.png

549050-20170405000200113-1827316697.png

F9运行后,会在断点的位置堆栈窗口中查看到B广告程序的名称。图的OCX文件是对象类别扩充组件(Object Linking and Embedding (OLE) Control Extension),可执行的文件的一种,但不可直接被执行,与 .exe、.dll 同属于PE文件。

549050-20170405000346050-284753638.png

在进入创建进程函数后,可以狂按F8单步步过,在OD菜单栏选择【调试】-【执行到返回】就可以自动跳转到ret指令处。

549050-20170405000450847-1592070389.png

为了调试OCX的文件,我们需要另外启动一个OD进程,依然是选择OD菜单栏的【文件】-【附加】以附加进程调试的方式操作。再重复之前的步骤,使用快捷键【Ctrl+G】,跳转到【CreateProcess】、【WriteProcessMemory】API的位置。

这里有两种方法:

第一:可以选择图形化界面操作OD反汇编界面右键-【转到】-【表达式】。

第二:可以OD反汇编界面右键-【查找】-【当前模块中的名称】,将【CreateProcessA】、【CreateProcessW】、【WriteProcessMemory】的位置下断点。

在【WriteProcessMemory】处下断点是因为B广告程序运行后要在内存中把游戏的主要程序修改回来的话,会调用到这个Windows API。

F9运行后点击B广告的按键让程序执行起来。

549050-20170405000517097-551967038.png

F9把程序运行起来后,可以在OD堆栈窗口中查看到游戏的主要进程名字,且同时注意到进程的当前状态是挂起的。

推测B广告将进程挂起正是为了将exe的正常字节在内存中修复然后在恢复进程的运行,进入【WriteProcessMemory】这个API函数后,使用快捷键【Ctrl+F9】执行到函数结尾处。

为了调试游戏主要程序,还需要另外开启一个OD将游戏的进程附加进行调试(OD菜单栏的【文件】-【附加】以附加进程调试的方式操作。),从内存中转存出正常的文件。

549050-20170405000539050-413178860.png

跳到函数末尾处,F7或F8跳到下一条指令处。

75401E80    C2 1400         retn 0x14

在调试游戏主程序的OD反汇编界面,点击【E】跟随游戏进程跟随入口。

549050-20170405000601238-1884021015.png

在入口点(OEP)处,右键选择【OllyDump脱壳调试进程】

549050-20170405001206269-974711065.png

把入口点的地址填写到输入框中,但是左下方的重建输入表的勾不要去点,因为会导致程序运行不起来再次重新修复一次。点击【脱壳】生成文件,就可以得到游戏的主要程序了。

549050-20170405001239363-1751161825.png

恢复游戏主程序成功!

549050-20170405001330128-1603136127.png

文中涉及的游戏程序

http://pan.baidu.com/s/1kUGVUa7 2xqc

转载于:https://www.cnblogs.com/17bdw/p/6667045.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值