爱内涵易语言论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

快捷登录

在线
客服

支付故障请联系客服服务时间: 9:00-24:00

选择下列客服马上在线沟通:

快速
发帖

客服
热线


7*24小时客服服务热线

关注
微信

关注微信二维码
顶部
查看: 1471|回复: 1

分析过掉CF的CRC检测辅助手段

[复制链接]

1766

主题

1852

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

金币
9845
巨币
12233
积分
39555
发表于 2020-6-18 22:31:30 | 显示全部楼层 |阅读模式
FPS 游戏发展至今,阻挡辅助开发者脚步的往往不是数据和功能开发,而是高难度的检测。现如今,游戏的各种检测的手段越来越多,也越来越五花八门。: s! }% f, i% N7 t" F
如:' K$ v: i+ N" k: S3 Y. s
检测参数," {- |/ V6 f7 ?" |) k( i
检测堆栈,( h. D3 p7 I- t/ K. v
检测注入等等。
. p0 c, n) [( q其中 CRC 是众多检测手段中最为常见的,同时在各大新手和老鸟之间也广为津津乐道。那么今天和爱内涵辅助学院的各学员大家一起慢慢揭开“神秘”的 CRC。先来了解一下什么是 CRC,百科给我们的解释是:
/ a# i- \9 Y0 w, \$ gCRC 即循环冗余校验码(Cyclic Redundancy Check):
# R' E# p% u( W1 a8 l, D是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,' b  ?/ q; O) D8 Q3 Y4 Y6 j' ^
并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。那么在游戏领域,咱们还是依照一直以来的通俗易懂的讲下,CRC 其实就是个对比。
" b* A4 Y( q5 J. H; B那么它既然是对比,那么就需要两个值,一个是被修改的地址/代码段的值,一个是用作对比的值。
; q1 U. k( C( {, c& Z9 A; z. `当地址的值 != (不等于)对比的值,那么反作弊系统将通过发包等手段告诉服务器,进行踢下线,封号等操作。
! i  ?( d# s$ @7 A# r  l那么,CRC 一般在内存中都长什么样的呢?我再给各位爱内涵学员举个例子
& [: n+ N; Y2 F6 J某内存代码段中,如果出现以下代码:) y% ~1 W. O1 ~' b4 H: `
===================
$ k  c9 @$ V' L, bmov eax,xxx
5 G0 C' U7 s) i/ K5 ~; x% cCMP eax,1# M- t* K, }0 n. x. |# O
jnz xxxxxxxx
( G3 s% K4 N( }===================
5 e- p1 R3 E( ^: H假设,jnz 这局代码是执行换弹完毕的动作,那么咱们想要零秒换弹的功能,在服务器不做验证的情况下,咱们可以修改 cmp 或者 jnz 为 JMP,在换子弹的时候,强制执行换弹完毕的动作,那么如果改了这个地方,CRC 会如何查呢?大家动脑子想想
5 x1 a9 z/ c* x) [首先我们学过汇编吧都知道下面这些汇编指令对应的4 ]4 O4 Y" n3 A7 n6 O; I7 h
比如:
3 S! ~. R* C2 F* SJNZ xxxxxxxx 二进制的机器码0 g( A  h( K1 Q* K: _
是:; f9 S+ f5 M: v* B/ s$ T
0F 85 xxxxxxxx. O; }2 K+ _# p6 f$ N, g* U
那么,咱们再来看看,JMP 的模样是9 e! ~  H# f- L
E9 xxxxxxxx$ e4 T9 [8 U# P
假如,我将此处改成 CALL?他又会变成什么样?8 i# h6 ]; e) n. ~( W  x. Y
机器码就会变成如下:
; d' V: n( e& Q7 s1 A& ME8 xxxxxxxx- C" p8 m  Y6 V+ F9 O- @
因为 call 指令对应 E8通过对比,相信大家知道哪里发生了变化。原代码, 为 0F 85 但是不管你如何修改,此处都会发生变化,CRC 扫描的即是这个变化的值。所以在游戏里内存区域某个地方,可能就会有这样一串类似下面的效验的代码:
2 H. }  ~& N. e% T( Y& U============================
/ T* Y8 m9 k* j" m! S6 cmov eax,刚刚 JNZ 代码段的值9 [: l: j9 N" M5 k
cmp eax,0f85
; y( ?: j* S& }  G/ ljnz 是否上报异常' s8 b; A8 c6 y* U& j( u
============================) _% b! ~) [! ]6 q+ \! ?
来检查是否被辅助篡改。那么问题来了,我们在此检测代码处,咱们是不是又可以给他修改,是否我们可以不让其执行上报的代码呢?回答是:肯定的同样,在其他地方,也可以查询此处是否被修改。6 ?! u3 U  `  v2 H- r0 u0 y
那么这个时候咱们要伪造几层,处理多少个地方,取决于游戏查了几层,验证了多少地方。通过以上的例子,相信大家对 CRC 有了一个简单的了解,以后我们黑色衬衣啊会随着课程不断更新出版深入下去,而讲解到这方面的知识。9 C0 n5 W$ I! P1 A8 N+ G; G6 N
接下来咱们实际的去游戏中,更深层的揭露它的“面纱”。相信穿越火线(cf)大部分人都知道,一个发展了十多年的老游戏,检测技术已经相
2 s/ N1 l* `) _8 A' Y) ~$ }当成熟,有很多地方值得我们学习和借鉴。今天以该游戏的内存透视为例子(我找出来的基址是: 7B65CC)该地址在未修改的情况下,默认的值为 16777217 即十六进制的 1000001,那么,将 1000001 改为某些值的时候,即可实现透视效果,
) d! |) i, Q& @( y# r那么我们可以在这里可以简单的猜测和了解一下它这透视的实现原理(当然这不是本文主要探讨的内容)——该地址可能与游戏中的某些模型有关,D3D 渲染引擎读取该地址的值,当人为的修改后,即改变了渲染的顺序或者加载不了某些模型实现透视效果。; M. }( b# C5 _9 m/ s
效果图如下:
, V( E( A7 c! i: `) \; M; g8 b& N% w/ z. w, X+ k& O& f1 P
# ~& X* D  z( h9 K1 A% M) ?6 r

7 c4 R' g* o& i( v此时此刻,大家可以看见人物透视实现了,同时也改变了该地址的值,当然这游戏如此关键的位置,肯定是有 CRC 或者其他手段在循环检测,即循环访问该地址,3 n* g) @4 z  d, S
咱们 CE 里可以右键查看访问该地址的代码,如下几图:: X: O: f% n+ ^* P3 V

+ ?7 G9 r: D/ t5 ?/ Y3 M) k7 p7 X& }/ r+ V/ U8 E8 m3 X/ z
经过观察发现,我们前两条代码基本可以忽略,因为检测代码不可能在短短几秒钟内访问上千次(所以可以排除掉)" j+ n& k8 U6 _
我们值得关注的是第三条访问代码,每隔 3 秒钟进行一次访问,是不是和印象中的检测很像呢?" {3 J. }" x2 p. W
该代码究竟起了什么作用,是不是让多数人束手无策的"CRC"?,咱们一步步把它分析出来就清楚了OD 附加后,跳转至该访问代码处:8 T3 n1 f8 m3 T
" |$ n( Y  X, j. [

- N  ]/ [, y. R发现如上,代码段位于 gamerpcs 模块,那么这个时候咱们就要先记一下该地址位于模块中的所处位置,防止游戏奔溃导致数据丢失计算出该地址为 GameRpcs.dll+33D5F。记录好后,在该位置下段,咱们观察一下 EAX 的值:9 \! x2 M  \/ Q8 M* I; r) F

9 R5 b' ]; m3 Z! M/ }9 |2 A# ?! D: d4 L9 x4 b
6 @/ O7 f8 F/ d/ A1 }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

3

帖子

2

积分

程序员

Rank: 1

金币
0
巨币
5
积分
2
发表于 2020-7-20 10:18:28 | 显示全部楼层
分析过掉CF的CRC检测辅助手段分析过掉CF的CRC检测辅助手段分析过掉CF的CRC检测辅助手段分析过掉CF的CRC检测辅助手段分析过掉CF的CRC检测辅助手段
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|小黑屋|爱内涵易语言论坛 ( 浙ICP备19016710号-3 )

GMT+8, 2022-1-18 07:15 , Processed in 0.080030 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表