文章总结: 本文介绍了一种基于动态代码下发的游戏反私服方案。通过宏将核心代码抽离为shellcode存于服务器,下载时利用反外挂模块生成的随机clientkey与服务器serverkey组合加密传输。反外挂解密执行后立即清除内存密钥并限制单次通讯防重放。该方案大幅提升了私服获取核心代码的门槛,建议结合代码混淆与动态内存打散技术强化防护,实现难点在于抽离工具开发与内存执行安全。 综合评分: 82 文章分类: 逆向分析,安全开发,二进制安全,安全建设
游戏反私服方案研究
哆啦安全
2021年1月4日 23:49
在小说阅读器读本章
去阅读
编者荐语:
10多年游戏行业逆向大佬的经验
以下文章来源于游戏安全攻防 ,作者游戏安全攻防
游戏安全攻防 .
以安全开发、逆向破解、黑客技术、病毒技术、灰黑产攻防为基础,兼论程序研发相关的技术点滴分享。
动态代码下发机制
-
提供两组宏, 一组代码抽离宏,一组代码抽离并且执行一次后删除宏 TQP_START / TQP_END TQP_CLEAR_START / TQP_CLEAR_END
-
客户端在需要抽离代码的地方头尾加入宏
-
代码抽离工具根据识别到的宏,将所有需要抽离的代码抽离出来保存到文件shellcode.dat中,这个文件最后存储到服务器上,为防止被拿走可以做个简单的加密
-
客户端请求下载shellcode文件的时候,客户端随机生成一个clientkey (这个key是反外挂模块生成和保存的)发送给服务端, 服务端收到指令后随机生成一个serverkey, 然后用这两个key组成一个新key加密压缩shellcode.dat
-
服务器发送serverkey给客户端,然后再发送加密后的shellcode.dat文件给客户端
-
客户端收到加密后的shellcode文件,由反外挂模块根据服务器给的serverkey以及自己存储的clientkey, 解密该shellcode文件,调整代码让客户端正确运行起来
-
客户端解密完成后,clientkey立即清除掉
-
这整个通讯过程发送的数据包由反外挂模块加密生成,收到的数据包由反外挂模块解密处理,这样包里面的serverkey和加密后的shellcode.dat不好被私服作者发现。
-
这个通讯过程只能发生一次,反外挂模块记录判断是否通讯过,如果有的话,不再发生二次通讯,否则直接崩溃客户端
作用
-
私服没有加密前的shellcode.dat文件,该文件只存在于官方服务器。
-
即使私服作者拦截到加密后的shellcode文件,但是私服没有解密算法没法解密该文件。。
-
即使私服作者用反外挂模块来解密该文件 <<拦截到的加密文件>>,但是由于每次key是由服务器随机生成的,没有正确的key反外挂模块解密不了,客户端无法正常运行
-
即使私服作者拿到一组serverkey和加密后的shellcode文件,然后直接调用反外挂模块来解密,但是由于clientkey在解密过一次后就清除了,所以无法解密 (而且是堆栈中的临时数据,游戏一退出就不存在了)
-
私服作者多次模拟这个通讯过程的话,则反外挂模块直接崩溃客户端
难度:
-
代码抽离工具的制作
-
反外挂模块解密shellcode.dat并保证客户端正确运行
-
如何保证被抽离的代码块能够打散的分配的动态内存中,从而让私服作者不好还原到对应的客户端地址
-
能做到抽离的客户端文件只留出一条 call dword ptr [xxx]大小的空间,防止私服作者再次把代码复制原地方(没空间给他复制代码)
-
最好能够实现代码简单的混淆,这样,私服作者不好整到原先的代码,还原代码比较费力,简单的乱序变形代码都是存储于分配内存中,想整理出原始代码难度较大
-
乱序变形操作最好在代码抽离工具生成shellcode.dat就已经完成,客户端下载到的就是乱序变形后的代码
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:哆啦安全 《游戏反私服方案研究》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论