关于Arcaea在3.10.0版本加入的反作弊参数的逆向分析


(资料图片仅供参考)

在本文写下的今天,玩家们正在因为Arcaea最近的开挂事件和Guy对于挂的态度吵得沸沸扬扬。Lowiro宣称自己封掉了257个拥有异常游玩记录的账号,而玩家们屡屡报告误封号事件并且普遍认为Lowiro完全没有检测作弊的能力(其中不乏我们耳熟能详的理论玩家和Ranker),更有甚者断言称257个被封禁账号有200个是误封号,而Lowiro也并没有披露足够的技术细节来证明这些玩家有作弊行为。

而Lowiro实际上在Arcaea 版本的时候和LinkPlay一起更新了反作弊参数,这个参数会在玩家打出Pure Memory或以上的成绩的时候随着成绩一起进入提交表单(也就是表单中的&chart=),整个chart因为采用了Lowiro传统艺能的API加密而看上去像是一串没有任何规律的二进制数据。截至目前版本,里面储存了包括不限于UserID,TouchData,PlatformID,ScoreState,ChartInfo多种游玩时产生的数据。

整个$chart=参数会提交最近50首歌曲的游玩数据,并且不会因为游戏重启而重置这些数据(Arcaea本体会在游玩之后把成绩序列化到一个看上去“完全无关”的文件并且加密),即使成绩并没有达到提交反作弊的标准线客户端依然会记录下数据。在加密方面,Lowiro使用了一个两层的加密,第一层加密使用的他们特化版本的API加密(和加密游戏API地址的方法完全一样,经查证是LEA算法的一个魔改变种),第二层加密是较为简单的Xor加密方法,使用了一些游玩中产生的数据来做为密钥来做到混淆的目的。总的来说,算法的目的并不是为了保证数据在传输的过程中安全而是为了保证此参数不被逆向工程之类的手段来分析并且伪造。

截止到本文写下的Arcaea客户端版本(),Lowiro在数据中加入了12种的结构化二进制数据,用一个Byte来表示数据的类型。Lowiro在游戏中硬编码了每一个时间点会储存下来的数据,并且用Timing的形式储存在了每一个歌曲数据的头中。其中,玩家最关心的就是TouchInfo。

TouchInfo二进制结构记录一些了从cocos2d-x引擎中直接采集的Touch事件数据。如下图,PauseCount为点击游戏左边Pause按钮的次数,TotalTouchCount为在游戏开始之后触摸屏幕的次数(或者说是游戏捕捉到的触控事件的总共次数),DeltaCount为滑动的次数(即为屏幕在点击到屏幕后。TouchCount为游戏捕捉到的触控数据的次数,对应着TouchList的容量。而TouchList储存了一些浮点数据,目前推测数据为Pressure(对应了cocos2d::Touch::getCurrentForce())。

目前市面上的大部分外挂都是通过Hook来实现修改直接游戏判定数据的,所以并不会产生在Cocos的事件层产生触控数据。所以如果使用了此类外挂,TotalTouchCount的次数将会远远低于游戏内Tap/ArcTap的次数,而DeltaCount也会显示出和Arc数量对应不上的情况,这个时候Lowiro便可以认定此数据为“异常数据”,进而进一步进行警告封号等一系列操作。而此类数据特征明显,使用批量脚本便可轻易识别,特别是Lowiro还在另外的数据加入了UserID,DeviceID和ScoreState来防止误封或者借用设备的情况发生。

对于模拟触控等原理的外挂来说,我们仍然不知道Lowiro有怎样的操作来识别此类操作。我并没有在数据中找到直接记录触控坐标数据的结构,而支持压力感应的手机也是屈指可数。不排除Lowiro会在未来的版本加入更多的反作弊数据结构来对抗此类外挂。

由此可见,Lowiro拥有比较完善的反作弊机制,可以一定程度上证明封号操作并不是完全的空穴来风,玩家对于Lowiro完全根据舆论的封号的指控也可以说是失实的。我们应该放下对Lowiro的偏见,尝试相信开发者在反作弊这种成本极高的操作上所付出的努力并且等待Lowiro的进一步举证。

Credit to Lost-MSth / Tiger0132

关键词:

编辑: MO
下一篇: 最后一页

相关新闻

精彩推送