前言
嘎姆,嘎姆~
Flash游戏逆向
步骤
大部分的网页小游戏都是通过 Flash 进行制作的,想要修改网页小游戏的设置,我们就需要找到它的底层代码,所以将网页版本的小游戏下载后,反编译并分析其代码然后更改有关人物数据,进而可以达成“外挂”目的
在浏览器中游玩网页小游戏时,我们可以按 F12 键,找到一个后缀为.swf 的可下载文件,或者在设置中的 Internet 选项,在临时文件中查看 swf 文件,这就是网页小游戏的运行基础。在下载好该文件之后,我们就可以通过反编译得到游戏的运行代码了。
JPEXS 反编译并修改
首先,需要在游戏网页上将小游戏下载下来(swf 后缀的文件即是),通过 JPEXS Free Flash Decompiler 对此 swf 文件进行反编译,我们可以得到该游戏的组成代码、架构等信息
组成该游戏的基础代码都在“脚本”栏目中,其中的 frame 文件存放了关键代码,定位“HP”字节
我们可以查找到需要修改的代码段的具体位置,修改对应的 P 代码资源,对修改后的 .swf 文件进行保存
先修改人物主人公的血量,通过搜索“hp”来查看相关信息
修改这里的 Base_hp 和 Now_hp
修改完成后点击另存为到桌面
重新运行游戏文件会发现游戏内容的数值已经被更改
CE 逆向 Super Mario XP
主要目的为:通过扫描内存地址实现无限子弹和修改游戏数据,包括寻找动态地址、锁定值、修改静态地址等内容。
步骤
打开 cheat engine 加载游戏进程
在启用 CE 时,我们需要锁定的目标数值为 10(即当前的红心数),那么在 CE 窗口中需要输入相对于的数值进行匹配,输入完成后,点击“开始扫描”
在游戏里获取红心,比较前后值的变动发现红心数值内存地址
右键修改value,然后对游戏进行操作一下使得数值进行变换
成功找到生命值对应的地址 001EC578,从而修改生命值/子弹数
Run!ZombieFoods!
步骤
在CE中加载该进程
我们运行游戏后,初始扫描的数值是 0&98
在游戏中等到食物进行消耗后再次扫描新的数值,这会方便我们找到对应的内存地址:
得到有两个地址符合即 1186555C 和 11CA2FD0
我们分别对其进行修改锁定,先对 1186555C 值修改为 2221 并激活锁定
回到游戏发现食物数量锁定在2221不会下降,说明这就是食物的真实内存地址:1186555C
同理,我们可以锁子弹
首先用同样的方式找到子弹的内存地址
依旧是双地址,这次一起改一起锁上,分别是 11865558 和 11CA2FCC
在对 Super Mario XP 的无限子弹和 Run!ZombieFoods! 的无限食物和子弹进行逆向内存地址修改数值后,发现这些数值的内存地址离的很近。发现有时候 Cheat Engine 扫描指定东西的多次变化数值后,仍然可能存在多个地址,这时候可以使用二分法,对一半数值进行修改,若游戏内无变化则内存地址在另一半中;若游戏内有变化则内存地址在这一半当中,多次后即可发现真正的内存地址。最后进行数值修改与锁定,从而达到无限的优势
CS1.6
步骤
启动 CS 游戏开启对局,进程放入 CE 中
观察到手枪子弹数为20,扫描一下,发现有部分内存地址的值会立刻变动,然后再次扫描直到地址数值结果不再变化为止
扫出2000条,现在开一枪,扫描19直到地址数值不再变化
现在是196条,重复操作进行扫描
发现依旧是196条
Ctrl+A 右键选中所有地址结果,然后右键“加入选择的地址到地址清单”
结合二分法,按住 Shift 键选中一半地址内容,右键更改记录数值为 20。
观察子弹数,变成了 20,但是点击射击后变成了 13 而不是 19,说明保存手枪子弹数的地址不在选中的部分,则删除前面选中部分的地址
用二分法重复上面的操作
最后测出来结果是042BBE74
直接锁住子弹数
连续开枪不掉子弹,验证成功