游戏反私服方案研究

2024-06-07 23:48
文章标签 游戏 方案 私服 研究

本文主要是介绍游戏反私服方案研究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

动态代码下发机制

 

1. 提供两组宏, 一组代码抽离宏,一组代码抽离并且执行一次后删除宏    TQP_START / TQP_END   TQP_CLEAR_START / TQP_CLEAR_END

 

2. 客户端在需要抽离代码的地方头尾加入宏

 

3. 代码抽离工具根据识别到的宏,将所有需要抽离的代码抽离出来保存到文件shellcode.dat中,这个文件最后存储到服务器上,为防止被拿走可以做个简单的加密

 

4. 客户端请求下载shellcode文件的时候,客户端随机生成一个clientkey (这个key是反外挂模块生成和保存的)发送给服务端, 服务端收到指令后随机生成一个serverkey, 然后用这两个key组成一个新key加密压缩shellcode.dat

 

5. 服务器发送serverkey给客户端,然后再发送加密后的shellcode.dat文件给客户端

 

6. 客户端收到加密后的shellcode文件,由反外挂模块根据服务器给的serverkey以及自己存储的clientkey, 解密该shellcode文件,调整代码让客户端正确运行起来

 

7. 客户端解密完成后,clientkey立即清除掉

 

8. 这整个通讯过程发送的数据包由反外挂模块加密生成,收到的数据包由反外挂模块解密处理,这样包里面的serverkey和加密后的shellcode.dat不好被私服作者发现。

 

9. 这个通讯过程只能发生一次,反外挂模块记录判断是否通讯过,如果有的话,不再发生二次通讯,否则直接崩溃客户端

 

作用

 

1. 私服没有加密前的shellcode.dat文件,该文件只存在于官方服务器。

 

1. 即使私服作者拦截到加密后的shellcode文件,但是私服没有解密算法没法解密该文件。。

 

2. 即使私服作者用反外挂模块来解密该文件 <<拦截到的加密文件>>,但是由于每次key是由服务器随机生成的,没有正确的key反外挂模块解密不了,客户端无法正常运行

 

3. 即使私服作者拿到一组serverkey和加密后的shellcode文件,然后直接调用反外挂模块来解密,但是由于clientkey在解密过一次后就清除了,所以无法解密 (而且是堆栈中的临时数据,游戏一退出就不存在了)

 

4. 私服作者多次模拟这个通讯过程的话,则反外挂模块直接崩溃客户端

 

难度

 

1. 代码抽离工具的制作

 

2. 反外挂模块解密shellcode.dat并保证客户端正确运行

 

3. 如何保证被抽离的代码块能够打散的分配的动态内存中,从而让私服作者不好还原到对应的客户端地址

 

4. 能做到抽离的客户端文件只留出一条 call dword ptr [xxx]大小的空间,防止私服作者再次把代码复制原地方(没空间给他复制代码)

 

5. 最好能够实现代码简单的混淆,这样,私服作者不好整到原先的代码,还原代码比较费力,简单的乱序变形代码都是存储于分配内存中,想整理出原始代码难度较大

 

6. 乱序变形操作最好在代码抽离工具生成shellcode.dat就已经完成,客户端下载到的就是乱序变形后的代码 

 

关注微信公众号,获取更多最新文章信息

图片

这篇关于游戏反私服方案研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040655

相关文章

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

Redis 多规则限流和防重复提交方案实现小结

《Redis多规则限流和防重复提交方案实现小结》本文主要介绍了Redis多规则限流和防重复提交方案实现小结,包括使用String结构和Zset结构来记录用户IP的访问次数,具有一定的参考价值,感兴趣... 目录一:使用 String 结构记录固定时间段内某用户 IP 访问某接口的次数二:使用 Zset 进行

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

Java解析JSON的六种方案

《Java解析JSON的六种方案》这篇文章介绍了6种JSON解析方案,包括Jackson、Gson、FastJSON、JsonPath、、手动解析,分别阐述了它们的功能特点、代码示例、高级功能、优缺点... 目录前言1. 使用 Jackson:业界标配功能特点代码示例高级功能优缺点2. 使用 Gson:轻量

Redis KEYS查询大批量数据替代方案

《RedisKEYS查询大批量数据替代方案》在使用Redis时,KEYS命令虽然简单直接,但其全表扫描的特性在处理大规模数据时会导致性能问题,甚至可能阻塞Redis服务,本文将介绍SCAN命令、有序... 目录前言KEYS命令问题背景替代方案1.使用 SCAN 命令2. 使用有序集合(Sorted Set)

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类