免责声明:逆向猎龙游戏完全出于学习目的,我反对下面所提供的信息被用于任何类型的恶意目的,并且我所发现的所有漏洞已被送往Aeria游戏或已经被修复。
0×01 概述
在我的博客上收到Hack1209的评论,询问如何bypass猎龙游戏的XIGNCODE3。当我第一次写这个博客的时候,XIGNCODE3还没有启用。(博客地址:http://0xbaadf00dsec.blogspot.com.br/2016/01/reverse-engineering-online-games.html),通常会有一些”heartbeat ”或者”ping”包在服务端和游戏的客户端之间发送来确保反作弊程序在你的电脑上运行。
如果这个包激活了,只要这个游戏开启了反作弊程序,您会从任何游戏中被中断,通常时间在1-5分钟内。在这款游戏,或者任何其他的游戏这个特征通常没有被激活。你可以停止反作弊程序的初始化来做你的分析,防止反作弊程序的干扰。你也可以从我的第一篇博客当中了解更多关于这个反作弊是如何工作的。
本文我展示的方法实现起来非常简单,并且可以适用于使用XIGNCODE3的任何游戏。为了完成这个,使用API函数OpenProcess和WriteProcessMemory,这里我展示如何创建一个基本的DLL并且在进程中修改内存。在网上可以找到各种DLL注入工具。本文不会重复我的第一篇博客的一系列步骤。现在我们开始!
0×02 准备工作
l x86汇编, C/C++, 逆向工程和Win32 APIs的知识
l Aeria游戏帐号 (http://aeriagames.com)
l Dragomon Online (http://dragomonhunter.aeriagames.com/)
l Ollydbg v1.10 (http://www.ollydbg.de/)
l IDA Pro (https://www.hex-rays.com/products/ida/support/download_freeware.shtml)
l IDA Function String Associate Plugin by Sirmabus (http://sourceforge.net/projects/idafunctionstringassociate/)
l DebugView (https://technet.microsoft.com/en-us/sysinternals/debugview.aspx )
0×03 分析
警告:如果在分析一些恶意软件时,和我在下面演示的有所不同。那么你最好在vmware上进行,这样就不会感染你的电脑了。当然,本文中的软件Aeria Games是可信的,所以没有这个必要。
再一次确保你的猎龙游戏是最新版的。
如果没有禁用反作弊程序,将会出现如下界面。
XIGNCODE3的初始化界面就会在屏幕出现。
如果你打开任何类似作弊引擎或者Ollydbg,你将会收到“suspicious program opened”这样的信息,然后游戏就会关闭。
对IDA中的Game.bin文件进行分析。分析之后,IDA将会在IDA的试图窗口中显示Winmain函数的入口。执行IDA的字符串关联插件(ALT+F6)。
这里我们可以看到启动游戏的时候和XIGNCODE3相关联的字符串。
如果我们往下看一点,可以看到这个关键函数。在其他游戏,这个函数可能不会那么容易被找到。我还没见过一个游戏的XIGNCODE3字符串是被加密,因此找到这个函数其他的办法就是引用字符换中查找“xigncode”字符串。
我们看到的这个要修改的函数是包括字符串”ErrorCode %08x!!”。
这里是XIGNCODE3的初始化。字符串“CGHcjbNstNjf”每个游戏都不一样,作为游戏的许可证。这是一个由随即字符组成的字符串,当你找到这个字符串时,你就找到了停止初始化的函数。
这个调用在一个函数加载x3.xem处结束,XIGNCODE3的主模块。
我们返回先前的函数看看如何才能操纵游戏正确加载XIGNCODE3。
为了让函数正确返回,我们需要确保函数返回值EAX非零(或者1就行)。
我们可以通过植入如下代码阻止初始化,在函数顶部地址为0x006f1de0(这个地址在游戏更新时可能会变化)。
mov eax,1
ret
现在我们已经分析出了如何阻止XIGNCODE3的初始化,开始coding我们的DLL。
我习惯使用Visual Studio的IDE编程。你要确认你的配置设置为DLL并且目标扩展名为.dll。
我们还需要include Windows的.h头文件。
接下来我们要创建一个函数,将字节直接写进内存中。
为何我们需要使用VirtualProject?为了能够修改代码我们需要确保我们拥有写访问权。
现在我们要得到正确的操作码来写代码中。
mov eax,1
ret
我记不住每个Intel X86的操作码指令,只记得一些经常使用的。因此这里推荐你一个网址:
你也同样可以使用Ollydbg,修改代码,可以看到Ollydbg写字节。
因此,看起来我们需要写进的代码总共是6个字节。然而,我们需要在结尾添加3个nop指令,因为在函数顶部的前3个字节,我们所修改的代码为9个字节。
现在我们使用WriteBytes函数修改代码。
最后,我们需要DLL的函数入口点(DLL Main)。
编译DLL文件,当游戏启动时注入,可以看到发生什么(源码会在博客下面给出)。
我们的调试字符串显示成功,XIGNCODE3不会被初始化!现在我们可以使用分析工具而不会被检测到了。
0×04 总结
除非你的游戏在反作弊中使用了”heartbeat”包,否则这种简单的方法可以用来击败任何的反作弊工具。这样你就可以着手分析不必担心被其他方法bypass。
上述代码地址:http://pastebin.com/ZqHrc6Z0。
*参考来源:0xbaadf00dsec,FB小编老王隔壁的白帽子翻译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)
不容错过
- 如何在网络中追踪入侵者(二):高阶模式老王隔壁的白帽子2016-05-11
- 关于专业黑客组织「隐秘山猫」的详细报告jobs2013-10-11
- StringBleed:SNMP协议“上帝模式”漏洞影响多种网络设备clouds2017-05-01
- 【已结束】SyScan360国际前瞻信息安全会议图文直播(Live)孙毛毛2016-11-25
0daybank
已有 7 条评论
xingcode3
机器翻译的?
B8 看起来是同一个东西
推荐的网址呢?咋没了
by LoadLibraryA 回几层改改判断,就剥了!最主要的是保护和游戏之间的心跳验证,楼主你是初学者吧?
AU3的概念都没搞清楚还玩这个?HS 和 NP这种鸟方法都可以剥掉,不懂算号,还日个鸟保护?
xingcode 框架和NP差不多,一个字节就可以带着保护和游戏一起调了,你太low了。
@ XGX 大侠您的QQ是多少,诚意合作!!