好友
阅读权限25
听众
最后登录1970-1-1
|
罗萨
发表于 2020-3-30 13:10
本帖最后由 罗萨 于 2020-3-30 15:10 编辑
前言
楼主近期分析某游戏辅助时,发现该辅助无壳并使用了VMP SDK加密了代码,同时具有自校验及序列号网络验证.由于楼主有一个真码,这对接下来的分析提供了很大帮助。难度并不大,先看分析,正文在后面.注:该软件使用的VMP SDK很鸡肋,可有可无的东西.
软件下载地址:https://www.lanzouj.com/iashpje
准备工作
使用到的软件有OD、SRSniffer、IDA、VMProtect_Ultimate_v3.3.03
楼主使用的OD:https://www.lanzouj.com/iasngyb
由于软件目录下有一个VMProtectSDK32.dll 文件,推测软件使用了VMPSDK加密了某些代码,关于这个SDK大家可以自行搜索一下相关资料,楼主这里使用VMProtect_Ultimate_v3.3.0打开主程序发现该软件使用了VMProtecBegin函数加密了某些代码,并且该软件没有使用VMP授权系统。
软件原理分析
由于软件是TW软件,打开后会有乱码,启动这个软件后呢,如果序列号是经过了验证呢,左上角0/0/0这里会显示当天的时间。并且启动游戏后会注入DLL到游戏内,如果是真码会正确加载DLL,如果是假码会直接闪退游戏。该过程除了左上角的时间外无任何提示,并且DLL无法单独调试,所以该时间或许会是我们突破的关键点,我们先从这里入手。
程序自校验
1、关于程序自校验有很多种方法,文件MD5、文件时间、关键字代码检测等,我们先随便修改一句代码看看。
2、首先使用OD打开真码软件,楼主将入口点nop掉之后,打开发现注入失败,游戏闪退,那么我们首先要解决掉自校验的问题。
3、这里我使用的是CreateFileA断点,程序断下来之后,右下角堆栈窗口显示调用的 "\\.\PhysicalDrive0",这应该是调用的管道,我们这里用不到,F9几次之后右下角出现了我们的文件名,这时在堆栈窗口光标处右键--反汇编窗口中跟随后就返回到了我们的代码段。
4、上方的WriteCheck,说明这里是使用了VMPSDK保护的代码(之前在VMP软件内可以看到)WriteCheck字符串是加密标志,代码以VMProtecBegin函数开始并以VMProtecEnd为结束.
5、拖到IDA跳转到代码地址,F5之后可以看到该代码段C伪代码.
6、由于代码经过保护了了,我们在OD中在段首下断点重新运行之后,继续单步跟踪,发现程序会读取文件时间,以及一串类似md5码,0402321这里应该就是验证的关键字符串,我们对比未修改程序后发现该字符串果然不一样,将未修改程序的字符串记录下来.
修改之后的程序:ASCII "3c9730ec06ab264ab531ef0a536da1c9"
未修改程序:ASCII "b3384d3b4d7e5189662e64edddab7ee4"
7、我们只要在
00402321 lea edx,dword ptr ss:[esp+0x14]
这一句代码之前将[esp+0x14]指向的数据修改为未修改程序的字符串就可以.随便找到一段空的代码段,我这里用的是0040F630,先将00402321这里的代码复制一下保存下来,并且记录一下一会将要返回的地址:00402326
00402321 lea edx,dword ptr ss:[esp+0x14]
00402325 push edx
将以上代码修改为 JMP 0040F630.跟到0040F630后就开始修改我们的数据了.
ASCII "b3384d3b4d7e5189662e64edddab7ee4",该字符串的HEX为
62 33 33 38
34 64 33 62
34 64 37 65
35 31 38 39
36 36 32 65
36 34 65 64
64 64 61 62
37 65 65 34
修补的代码为:
mov dword ptr ss:[esp+0x14],0x38333362
mov dword ptr ss:[esp+0x18],0x62336434
mov dword ptr ss:[esp+0x1C],0x65376434
mov dword ptr ss:[esp+0x20],0x39383135
mov dword ptr ss:[esp+0x24],0x65323636
mov dword ptr ss:[esp+0x28],0x64653436
mov dword ptr ss:[esp+0x2C],0x62616464
mov dword ptr ss:[esp+0x30],0x34656537
lea edx,dword ptr ss:[esp+0x14]
push edx
jmp unpack1.00402326
要注意的是,使用mov指令向地址写数据时要反着写,并且每次只能写入4字节,自行用计算器算一下指针,即[esp]要相加的值.后面两句是原地址的代码以及要返回的地址. 保存所有修改之后再次打开程序后发现软件可以正常使用了.
楼下更新网络验证.
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|