小俊 发表于 2018-4-14 13:23

【仙境传说RO】应用层反调试分析

本帖最后由 小俊 于 2018-4-14 13:28 编辑

游戏:仙境传说RO(台服 or 韩服)
工具:PCHunter丶x32dbg丶Cheat Engine丶Process Hacker 2
游戏界面:

用CE附加一下:

发现附加不上
用x32dbg(管理员运行)附加一下试试

没有发现Ragexe.exe这个游戏程序
到这里我以为OpenProcess函数被下钩子了,用PCHunter发现这游戏没有加载驱动,所以这应该是应用层做的反调试了
附加不了那就用调试器直接打开,饶过客户端,这游戏登陆是直接放在游戏里的,所以客户端没啥用

但是游戏做了一些限制,直接运行游戏,会出异常

正常上游戏,发现游戏后面跟了一个参数为"1rag1"

测试发现,运行游戏的时候,加一个参数"1rag1"就能正常打开游戏了,直接饶过客户端
但是坑爹的是,x32dbg好像不支持参数,这一点没OD做的好。
这样的话,只能找到验证参数的地方,直接爆破掉了

00A48B05 | 68 D0 D8 C1 00         | push ragexe.C1D8D0            | C1D8D0:"1rag1" <= 一般是用这个
00A48B0A | 57                              | push edi                              |
00A48B0B | FF D6                           | call esi                                 |
00A48B0D | 83 C4 08                     | add esp,8                              |
00A48B10 | 85 C0                        | test eax,eax                            |
00A48B12 | 0F 85 4C 01 00 00      | jne ragexe.A48C64            | jne 改成 je ,这个函数里任意一个jne都行
00A48B18 | 68 A8 D6 C1 00         | push ragexe.C1D6A8            | C1D6A8:"1sak1"
00A48B1D | 57                              | push edi                              |
00A48B1E | FF D6                           | call esi                                    |
00A48B20 | 83 C4 08                      | add esp,8                               |
00A48B23 | 85 C0                           | test eax,eax                            |
00A48B25 | 0F 85 39 01 00 00      | jne ragexe.A48C64               |
00A48B2B | 68 D8 D8 C1 00         | push ragexe.C1D8D8             | C1D8D8:"1gld1"
00A48B30 | 57                                 | push edi                              |
00A48B31 | FF D6                            | call esi                              |
00A48B33 | 83 C4 08                     | add esp,8                               |
00A48B36 | 85 C0                            | test eax,eax                            |
00A48B38 | 0F 85 26 01 00 00      | jne ragexe.A48C64               |
00A48B3E | 68 E0 D8 C1 00         | push ragexe.C1D8E0            | C1D8E0:"2rag2"
00A48B43 | 57                                 | push edi                              |
00A48B44 | FF D6                        | call esi                              |
00A48B46 | 83 C4 08                     | add esp,8                           |
00A48B49 | 85 C0                         | test eax,eax                        |
00A48B4B | 0F 85 13 01 00 00      | jne ragexe.A48C64          |
00A48B51 | 68 E8 D8 C1 00         | push ragexe.C1D8E8      | C1D8E8:"1eve1"
00A48B56 | 57                              | push edi                           |
00A48B57 | FF D6                         | call esi                              |
00A48B59 | 83 C4 08                     | add esp,8                        |
00A48B5C | 85 C0                         | test eax,eax                        |
00A48B5E | 0F 85 00 01 00 00      | jne ragexe.A48C64          |

分析发现不光"1rag1"可以 "6free6"丶"1sak1"丶"1gld1"丶"2rag2"丶"1eve1".等等都可以
随便找一个jne改成je就能过掉参数验证了,直接饶过客户端运行游戏,这一点对工作室来说是很重要的,节省了上号的时间

经过我的发现,在系统断点的时候OpenProcess能够正常打开程序,但是到了OEP(程序入口点)的时候,OpenProcess就不能正常打开了
错误代码为权限不够,这时候我想到了,应该是TLS或者那个模块加载的时候做了这个事情,但是这个程序没有TLS,那就是模块加载的时候了
设置权限的函数为 SetSecurityInfo ,在这个函数下断点,然后栈回溯

发现CDClient.dll这个模块加载是时候,设置了权限,直接NOP掉发现,CE能够正常附加,调试器也能够正常调试啦

Hmily 发表于 2018-4-18 14:59

以前用x64dbg也遇到不能加参数的问题,最后找了个插件可以支持参数启动,但好像现在新版已经默认添加这个功能了。

zd326379 发表于 2018-4-14 13:31

lm180180 发表于 2018-4-14 13:37


谢谢分享

CarroAro 发表于 2018-4-14 14:15

其實在遊戲保護方面 cd沒啥特別
特別的是他在搞你輔助的時候 那才頭痛

linuxprobe 发表于 2018-4-14 16:21

请问你是用什么工具来分析的?

莫轻舞 发表于 2018-4-14 16:40

游戏好玩吗?看起来不错,准备去试试

smallpox 发表于 2018-4-14 17:05

谢谢分享

小俊 发表于 2018-4-14 17:09

莫轻舞 发表于 2018-4-14 16:40
游戏好玩吗?看起来不错,准备去试试

不好玩,千万别试

小俊 发表于 2018-4-14 17:22

linuxprobe 发表于 2018-4-14 16:21
请问你是用什么工具来分析的?

开头不是说了么

p88880000 发表于 2018-4-14 17:49

新手发现NOP真是太强大了
页: [1] 2 3
查看完整版本: 【仙境传说RO】应用层反调试分析