这本书我半天看完了,写了这篇文章。
我的博客:
i不歪
前言
下文中有“
[联想]”标志的,代表从知识点中的联想。
下文均为知识点提炼,所以不一定是书中原话。不提炼调试工具相关知识点。不提炼有关数据加密的知识点。至于Hook、游戏进程模块信息获取、反调试技术可以直接查书中相应的章节。
知识点
P3. 某飞机类游戏,删除一张敌机子弹资源图片,造成敌机无法发射子弹,从而实现了类似无敌的功能。
P4. 某跑酷游类戏,把简单关卡配置文件覆盖困难关卡配置文件实现游戏场景简单化。
P6. 在Android系统中,根据"/proc/<pid>/maps"文件遍历具有 r 标识的模块,然后通过读写"/proc/<pid>/mem"文件达到和注入式修改一样的效果。
P7. 服务端对接收数据没有处理好就直接转发给另一个客户端,很容易让恶意用户在协议中构造特殊数据,令其他客户端崩溃。
[联想] 我能想到这么一种场景,服务端下发的数据中有其他客户端的IP,在这里将其他客户端称为目标客户端,恶意用户首先篡改发送给服务端的数据包,篡改后的数据包中的数据结构是客户端无法解析的非法数据,然后发送数据包时将发送IP更改为目标客户端的IP,那么服务端就会以为是目标客户端发送过来的请求,然后会将响应的数据发送给目标客户端,目标客户端接收到的数据中有恶意用户构造的非法数据,在解析非法数据时程序崩溃。
P17. 主流游戏加速器针对不同的引擎修改了不同Libc.so的相关函数,例如:gettimeofday、clock_getime。针对Libc.so模块的导出函数可以利用导入表Hook的方式。
P17. 按键精灵类:在Android上可通过Instrumentation接口的sendPointerSync函数实现;也可通过具备Root权限的驱动程序调用Runtime.getRuntime().exec()执行sendevent等命令。
[联想] Getevent,这篇文章介绍了Android自带的getevent工具,该工具可以监控触摸屏的事件,对应的还有一个sendevent工具。
P17~P18. Cocos2D游戏代码逻辑保存在so中;Unity 3D游戏的C#脚本保存在/assets/bin/Data/Managed/Assembly-CSharp.dll中,可以通过ildasm等工具转换为IL代码进行修改操作;iOS平台代码都在App的bin文件中。
P76. MMORPG游戏通常是强服务器逻辑。
P77. FPS类游戏需要实时性很强,不可避免地要把许多逻辑放到本地。
P78~P79. ARPG相对于MMORPG而言更强调实时性,由于对实时性要求更高,ARPG游戏难免会把碰撞检测、血量、伤害等重要逻辑放到本地,以达到“即时”“爽快”的效果。
P79. 卡牌类游戏,不排除制作团队奖逻辑实现于本地客户端的情况。
P80. RTS类游戏对实时性要求不高,但不排除有些团队将其做成强本地逻辑架构。
P80. 消除类游戏逻辑简单,不排除制作方把许多逻辑放在本地。
P81. MOBA类游戏对实时性要求很高,但更重要的是要有公平性。根据这样的要求,游戏务必做成强服务器逻辑,否则无论本地保护做得多好,都有被攻破的风险。
P82. 跑酷类游戏一大特点在于角色与障碍物碰撞,碰撞对实时性的要求很高,碰撞逻辑一般只能放在本地,因此对碰撞的检测需要做一些服务器校验。
P88. 一般游戏PVE模式是弱联网的,PVP模式是强联网的。
P92. FPS游戏中经常遇到的透视外挂,它和渲染引擎的相关性较大。该类型外挂的核心都是关闭引擎的z-buffer,导致在墙壁等阻碍物后面的人物也能被渲染出来,从而实现透视外挂的效果。
P100~P104. 手游风险。
P254. 图16.3,Android "/proc"文件系统的文件信息。
P279. C++游戏的逆向分析方法。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!