免责声明:逆向猎龙游戏完全属于教育目的,我不纵容下面提供的信息被用于任何类型的恶意目的,发现的所有漏洞已被送往 Aeria 游戏或已经被修复。
在我的博客上收到 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 注入工具。本文不会重复我的第一篇博客的一系列步骤。现在我们开始!
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 )
警告:如果分析一些类型的恶意软件,和我在下面演示的过程是不同的并且应在 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 不会被初始化!现在我们可以使用分析工具而不会被检测到了。
除非你的游戏在反作弊中使用”heartbeat”包,这种简单的方法可以用来击败任何的反作弊工具,你可以着手分析不必担心被其他方法 bypass 。
上述代码地址: http://pastebin.com/ZqHrc6Z0 。
*参考来源: 0xbaadf00dsec ,FB小编老王隔壁的白帽子翻译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)