游戏反外挂方案解析

近年来,游戏市场高速发展,随之而来的还有图谋利益的游戏黑产。在利益吸引下,游戏黑产扩张迅猛,已发展成具有庞大规模的产业链,市面上游戏受其侵扰的案例屡见不鲜。

据《FairGuard游戏安全2022年度报告》数据统计,2022年累计收集外挂样本5826款,同比增长52%;安全对抗更激烈,多项数据呈上涨趋势,全年累计检测游戏安全风险同比增长96%。

2022年FairGuard游戏安全风险分布占比图

2022年FairGuard游戏安全风险分布占比图

因游戏作弊门槛低、游戏安全对抗不对等、黑灰产业链发展完善、法律维权门槛高等因素,游戏安全问题形势愈发严峻,「游戏反外挂」已经成了厂商的必修课。

FairGuard游戏加固基于十余年游戏安全对抗经验,将从外挂实现原理及分类、游戏反外挂方案维度,结合案例进行分析并与大家分享。

游戏外挂分类

常见的游戏外挂攻击方式有:注入、内存修改、变速器、模拟点击、抓包、虚拟环境、破解等。

注入挂案例分析

注入挂,顾名思义是将外挂模块注入到游戏进程空间中,同时执行功能模块的入口函数,多涉及内存操作且功能丰富。

从注入过程上,Android系统一般采用SO注入、ptrace注入、 Zygote注入及感染ELF文件的方式。iOS系统在越狱后可以利用Cydia框架注入dylib实现。

开启外挂并成功注入游戏后,通过外挂界面引导玩家使用功能,随后调用接口函数以HOOK操作来挂钩相应函数、改写参数或者通过调用逻辑,从而实现外挂功能。

Android平台导入表Hook流程图

Android平台导入表Hook流程图

与其他外挂类型相比,注入挂修改游戏代码逻辑的方式更加灵活多样,并且破解者会通过多种手段隐藏注入模块,导致注入挂的排查难度更高、排查周期更久,对游戏造成的负面影响也更加严重。

内存修改挂案例分析

内存修改外挂是最常见的外挂种类,实现原理是通过内存修改器来搜索、定位游戏内存,再对数值模块进行修改。

针对游戏不同类型与玩法,内存修改外挂会造成不同程度的危害,如:修改游戏内角色的攻击力的秒杀挂,修改游戏交易货币数量的无限金币挂、修改游戏关键道具数量等,这类外挂会严重破坏游戏的公平性,引发正常玩家不满。

通过修改商品售价实现无消耗购买道具

通过修改商品售价实现无消耗购买道具

exe模拟器修改挂

exe模拟器修改挂本质上是内存修改,但其以exe程序运行在PC端,而游戏运行在PC模拟器中。这时候,外挂不再读写游戏程序内存,而是读写整个模拟器中的数据,通过反复定位,也可以实现内存修改的效果。

exe模拟器修改挂案例演示

exe模拟器修改挂案例演示

这类外挂有两大检测难点:

● 无需开启Root权限即可搜索内存进行数值篡改,让以往的安全环境检测方案难以排查。

● 游戏在运行过程中,数值会实时变动,进行数值排查需要耗费更久的周期,严重影响对抗效率。

变速挂案例分析

众所周知,游戏在运行中需要以帧为单位播放画面,而计算每帧动画播放所需时间,则需要调用C库函数来获取系统时间。如:

// 获取当前精确时间

gettimeofday;

// 获取系统时间

clock_gettime;

这类变速外挂的实现原理就是通过修改获取到的系统时间,来加快或放慢游戏内的时间流速。此外,部分变速外挂通过调用UnityEngine_Time_set_timeScale,传入想要加速的倍数,来实现全局加速效果。

因游戏玩法不同,变速外挂会造成不同的影响,如音乐类、跑酷类游戏可以通过放慢速度,大幅度降低游戏难度。而涉及到养成的游戏则可以加速材料收集进度,缩短游戏的养成周期。

通过加快速度,缩短游戏养成周期

通过加快速度,缩短游戏养成周期

这类外挂会严重破坏游戏的公平性,引发正常玩家不满,如果不加以制止,会急剧缩短游戏的生命周期。

代码篡改案例分析

部分外挂作者还会使用静态分析与动态调试相结合的形式,通过逆向分析手段直接修改游戏客户端代码逻辑来制作“破解版”。常见的破解版游戏会外置功能菜单,实现控制数值修改、去除广告甚至内购破解。

某游戏破解版附带的外挂功能

某游戏破解版附带的外挂功能

这类破解版游戏会附带一系列吸引玩家的外挂功能,其存在会严重挤压正版空间,对游戏收益造成直接影响。

游戏资源篡改案例分析

当下游戏作弊的角度可谓五花八门,除了常见的作弊手段,外挂作者还会通过各种刁钻的角度进行作弊,如篡改游戏内资源文件。

如FPS游戏中,外挂作者通过篡改游戏中地图资源的材质,将其修改成透明,实现了“透视”外挂功能。

FPS游戏资源篡改

相比其他外挂,这类资源篡改外挂角度更加刁钻且难以排查,一旦出现这类外挂,会在短时间内扩散,造成非常严重的游戏平衡问题。

模拟点击挂案例分析

常见的模拟点击外挂可通过设置按键位置、按键顺序、按键间隔时间等参数,制作自动化模拟点击脚本。

某软件的模拟点击功能

某软件的模拟点击功能

在特定的游戏环境下,选择模拟点击方案,从而实现自动打怪,自动任务,自动挂机领奖励等功能。这类模拟点击外挂,会对游戏平衡造成极大影响,破坏正常玩家游戏体验。

封包挂案例分析

在游戏运行过程中,我们点击某个按钮或进行某种游戏行为的时候,客户端会按照跟服务器约定好的规则,将游戏行为请求和参数通过网络封包发送给服务器,服务器收到请求后做出解析,将信息处理后反馈回客户端,客户端再将反馈信息进行解析展示给玩家。

FairGuard

正常状态下游戏数据交互

破解者通常会使用抓包工具,获得游戏封包数据。当破解者抓取到了封包数据并破解后,即可随意篡改游戏内上下行的数据,如游戏角色攻击力、生命值、游戏内胜负逻辑、投降判负逻辑等,从而实现一系列外挂功能。

FairGuard

通讯协议破解后的客户端服务器交互

虚拟环境案例

所谓虚拟环境,是指独立于设备原有系统/破坏设备原有系统的环境,如:iOS越狱、Android Root、虚拟机、虚拟框架、云手机等。这类虚拟环境可以为外挂提供更高级别的设备权限,是游戏外挂滋生的温床。

游戏如何应对外挂问题?

面对日益庞大的游戏黑灰产侵扰,游戏厂商亟需一支强大、专业的游戏安全队伍。FairGuard以技术为驱动,研发了多项业界独家技术,搭建了针对不同场景及游戏类型的功能矩阵,可覆盖游戏全场景安全问题。

  • 反外挂功能

针对游戏将面临一系列外挂修改风险,FairGuard研发了行为检测方案,搭配200+维度的智能感知系统,可通杀各类外挂及其变种,做到有效防护。

  • 防破解功能

FairGuard业界独家「无API签名校验技术」,对游戏的引擎与代码进行深度加密,并对游戏包签名和文件完整性进行多重校验,极大地减少被绕过的可能性,防止游戏被植入恶意模块、剔除广告等行为。

  • 主动识别恶意模块机制

区别于市面上其他安全产品,需要获取样本后进行外挂打击,FairGuard独家「主动识别恶意模块机制」可对游戏内可疑模块进行主动识别,搭配在线打击功能做到主动防御,大幅缩短外挂排查周期。

  • 反注入器功能

禁止使用Xposed、Frida等各种外挂模块注入器,防止注入后修改游戏内存等各种恶意行为,一旦发现立即闪退。

  • 反引擎级变速

深入游戏引擎底层,对引擎级的变速进行深度检测,获取具体变速倍数,可实现精准封号打击或闪退处理。

  • 变速无效化

采用FairGuard独家无导入函数SO加壳技术,高强度加壳保护游戏内代码,经大量实机测试,可无视任何变速器及其变种,使其变速功能无效化。

  • 资源加密功能

FairGuard独家资源加密方案,深入游戏引擎底层,结合游戏资源文件结构及加载机理精心构造。

可为游戏提供高强度加密保护,具备高兼容性、运行消耗小、性能无影响的特点,支持Android/iOS/PC三平台、支持资源在线更新。此外,方案进行了特殊优化,无需开发对接与接入,加解密对开发透明。

  • 数据校验功能

FairGuard提供数据校验功能,可精准校验游戏上下行数据,保证游戏通讯协议安全,避免出现封包挂、私服问题。

  • 安全环境检测

采用底层检测手段,精准识别游戏运行环境,如:越狱、ROOT、虚拟机、虚拟框架、云手机等,并提供个性化闪退策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/48206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是CSS中的BFC?

①什么是BFC BFC 全称:Block Formatting Context, 名为 “块级格式化上下文”。 W3C官方解释为:BFC它决定了元素如何对其内容进行定位,以及与其它元素的关系和相互作用,当涉及到可视化布局时,Block Forma…

3.JQuery closest()的用法

closest()是一个非常好用的查找祖先对象的方法,它和parent()和parents()相比,优点是简洁直观,返回0或1个对象,避免了返回很多对象而不知道怎么处理的尴尬&…

【使用Node.js搭建自己的HTTP服务器】

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

CSS中的display属性有哪些值?它们的作用?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS display 属性的不同取值和作用1. block2. inline3. inline-block4. none5. flex6. grid7. table、table-row、table-cell8. list-item9. inline-table、table-caption、table-column 等 ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#x…

车规级半导体分类(汽车芯片介绍)

车规级半导体,也被称为“汽车芯片”,主要应用于车辆控制装置、车载监控系统和车载电子控制装置等领域。这些半导体器件主要分布在车体控制模块上,以及车载信息娱乐系统方面,包括动力传动综合控制系统、主动安全系统和高级辅助驾驶…

【matlab利用shp文件制作mask白化文件】

matlab白化文件 mask文件的作用matlab制作mask文件mask结果 mask文件的作用 地理信息绘图中的 “mask” 通常指的是遮罩或掩膜,用于在地图或图像上隐藏、高亮或标记特定区域。 数据可视化: 地理信息绘图 mask 可以用于突出显示特定地理区域,使…

第 6 章 递归(2)(迷宫问题)

6.6.1 迷宫问题 6.6.2 代码实现 package pers.th.d6_recursion;/*** 递归-迷宫问题*/ public class MiGong {public static void main(String[] args) {//先创建一个二维数组,模拟迷宫//地图int[][] map new int[8][7];//使用1 表示墙//上下全部置为1for (int i …

微服务-Fegin

在之前我们两服务之间调用的时候用的是restTemplate,但是这个方式调用存在很多的问题 String url "http://userservice/user/" order.getUserId(); 代码可读性差,编码体验不统一参数复杂的url难以维护 所以我们大力推出我们今天的主角--Fegin Feign是…

燃尽图、甘特图、鱼骨图

燃尽图、甘特图、鱼骨图 1. 燃尽图 燃尽图(burn down chart)是在项目完成之前,对需要完成的工作的一种可视化表示。燃尽图有一个Y轴(工作)和X轴(时间)。理想情况下,该图表是一个向下…

leetcode 121. 买卖股票的最佳时机

2023.8.20 本题用dp算法做,dp[i]的含义:前 i1天能获得的最大利润。 然后每次循环时需要维护一个最小值min_num :即 i1天中股票的最低价。剩下的步骤都很常规,代码如下: 一维dp: class Solution { public:…

使用 PyTorch 进行高效图像分割:第 2 部分

一、说明 这是由 4 部分组成的系列的第二部分,旨在使用 PyTorch 中的深度学习技术从头开始逐步实现图像分割。本部分将重点介绍如何实现基线图像分割卷积神经网络(CNN)模型。 图 1:使用 CNN 运行图像分割的结果。按从上到下的顺序…

【HCIP】04.VRRP与BFD

VRRP VRRP基本概念 VRRP路由器 运行VRRP协议的路由器,VRRP是配置在路由器的接口上的,而且也是基于接口来工作的。 VRID 一个VRRP组由多台协同工作的路由器(的接口)组成,使用相同的VRID(Virtual Router…

VR数字工厂多元化展现,打造数字企业工厂名片

5G时代,各种营销都在走数字化的路子,VR数字工厂用VR赋能工厂数字升级,将企业环境、工厂生产、产品研发、质检运输等流程,无死角720度的展示在客户面前,不仅可以提升自身企业的实力,还可以提高客户的信任感。…

如何在Java实现TCP方式发送和接收Socket消息(多线程模式)

目录 导言:正文:1. 创建Server端:2. 创建Client端:3. 多线程模式: 代码示例Server端代码示例:Client端代码示例:同步模式发送TCP消息异步模式 结论: 导言: 在Java编程中…

SpringBoot 的 RedisTemplate、Redisson

一、Jedis、Lettuce、Redisson的简介 优先使用Lettuce, 需要分布式锁,分布式集合等分布式的高级特性,添加Redisson结合使用。 对于高并发,1000/s的并发,数据库可能由行锁变成表锁,性能下降会厉害。 1.1、…

再JAVA中如何使用qsort对类进行排序?

目录 结论&#xff1a; 解析&#xff1a; 结论&#xff1a; import java.util.Arrays;class Person implements Comparable<Person>{public String name;public int age;public Person(String name, int age) {this.name name;this.age age;}Overridepublic Stri…

[保研/考研机试] KY11 二叉树遍历 清华大学复试上机题 C++实现

题目链接&#xff1a; 二叉树遍历_牛客题霸_牛客网编一个程序&#xff0c;读入用户输入的一串先序遍历字符串&#xff0c;根据此字符串建立一个二叉树&#xff08;以指针方式存储&#xff09;。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/43719512169254700747…

机器学习笔记之优化算法(十五)Baillon Haddad Theorem简单认识

机器学习笔记之优化算法——Baillon Haddad Theorem简单认识 引言 Baillon Haddad Theorem \text{Baillon Haddad Theorem} Baillon Haddad Theorem简单认识证明过程证明&#xff1a;条件 1 ⇒ 1 \Rightarrow 1⇒ 条件 2 2 2证明&#xff1a;条件 3 ⇒ 3 \Rightarrow 3⇒条件 1…

【MaxKey对接一】对接gitlab的oauth登录

MaxKey的Oauth过程 引导进入 GET http://{{maxKey_host}}/sign/authz/oauth/v20/authorize?client_idYOUR_CLIENT_ID&response_typecode&redirect_uriYOUR_REGISTERED_REDIRECT_URI 登录后回调地址 YOUR_REGISTERED_REDIRECT_URI/?code{{code}} 换取Access Token GET…

「UG/NX」Block UI 曲线收集器CurveCollector

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#