目录

  1. 1. 前言
  2. 2. Flash游戏逆向
    1. 2.1. 步骤
      1. 2.1.1. JPEXS 反编译并修改
  3. 3. CE 逆向 Super Mario XP
    1. 3.1. 步骤
  4. 4. Run!ZombieFoods!
    1. 4.1. 步骤
  5. 5. CS1.6
    1. 5.1. 步骤

LOADING

第一次加载文章图片可能会花费较长时间

要不挂个梯子试试?(x

加载过慢请开启缓存 浏览器默认开启

游戏逆向

2024/12/11 Rev
  |     |   总文章阅读量:

前言

嘎姆,嘎姆~


Flash游戏逆向

步骤

大部分的网页小游戏都是通过 Flash 进行制作的,想要修改网页小游戏的设置,我们就需要找到它的底层代码,所以将网页版本的小游戏下载后,反编译并分析其代码然后更改有关人物数据,进而可以达成“外挂”目的

在浏览器中游玩网页小游戏时,我们可以按 F12 键,找到一个后缀为.swf 的可下载文件,或者在设置中的 Internet 选项,在临时文件中查看 swf 文件,这就是网页小游戏的运行基础。在下载好该文件之后,我们就可以通过反编译得到游戏的运行代码了。

JPEXS 反编译并修改

首先,需要在游戏网页上将小游戏下载下来(swf 后缀的文件即是),通过 JPEXS Free Flash Decompiler 对此 swf 文件进行反编译,我们可以得到该游戏的组成代码、架构等信息

image-20241212002301635

组成该游戏的基础代码都在“脚本”栏目中,其中的 frame 文件存放了关键代码,定位“HP”字节

image-20241212002621071

我们可以查找到需要修改的代码段的具体位置,修改对应的 P 代码资源,对修改后的 .swf 文件进行保存

先修改人物主人公的血量,通过搜索“hp”来查看相关信息

image-20241212003010043

修改这里的 Base_hp 和 Now_hp

image-20241212003318287

修改完成后点击另存为到桌面

image-20241212003422363

重新运行游戏文件会发现游戏内容的数值已经被更改

image-20241212004114526


CE 逆向 Super Mario XP

主要目的为:通过扫描内存地址实现无限子弹和修改游戏数据,包括寻找动态地址、锁定值、修改静态地址等内容。

步骤

打开 cheat engine 加载游戏进程

image-20241212010210915

在启用 CE 时,我们需要锁定的目标数值为 10(即当前的红心数),那么在 CE 窗口中需要输入相对于的数值进行匹配,输入完成后,点击“开始扫描”

image-20241212010331719

在游戏里获取红心,比较前后值的变动发现红心数值内存地址

image-20241212010531502

右键修改value,然后对游戏进行操作一下使得数值进行变换

image-20241212010800580

成功找到生命值对应的地址 001EC578,从而修改生命值/子弹数


Run!ZombieFoods!

步骤

在CE中加载该进程

image-20241212015153532

我们运行游戏后,初始扫描的数值是 0&98

image-20241212015417475

在游戏中等到食物进行消耗后再次扫描新的数值,这会方便我们找到对应的内存地址:

image-20241212015533732

得到有两个地址符合即 1186555C 和 11CA2FD0

我们分别对其进行修改锁定,先对 1186555C 值修改为 2221 并激活锁定

image-20241212015727628

回到游戏发现食物数量锁定在2221不会下降,说明这就是食物的真实内存地址:1186555C

同理,我们可以锁子弹

首先用同样的方式找到子弹的内存地址

image-20241212020240813

依旧是双地址,这次一起改一起锁上,分别是 11865558 和 11CA2FCC

image-20241212020526497

在对 Super Mario XP 的无限子弹和 Run!ZombieFoods! 的无限食物和子弹进行逆向内存地址修改数值后,发现这些数值的内存地址离的很近。发现有时候 Cheat Engine 扫描指定东西的多次变化数值后,仍然可能存在多个地址,这时候可以使用二分法,对一半数值进行修改,若游戏内无变化则内存地址在另一半中;若游戏内有变化则内存地址在这一半当中,多次后即可发现真正的内存地址。最后进行数值修改与锁定,从而达到无限的优势


CS1.6

步骤

启动 CS 游戏开启对局,进程放入 CE 中

观察到手枪子弹数为20,扫描一下,发现有部分内存地址的值会立刻变动,然后再次扫描直到地址数值结果不再变化为止

image-20241212094521629

扫出2000条,现在开一枪,扫描19直到地址数值不再变化

image-20241212094633151

现在是196条,重复操作进行扫描

发现依旧是196条

image-20241212095001818

Ctrl+A 右键选中所有地址结果,然后右键“加入选择的地址到地址清单”

结合二分法,按住 Shift 键选中一半地址内容,右键更改记录数值为 20。

image-20241212095242790

观察子弹数,变成了 20,但是点击射击后变成了 13 而不是 19,说明保存手枪子弹数的地址不在选中的部分,则删除前面选中部分的地址

用二分法重复上面的操作

最后测出来结果是042BBE74

image-20241212095919344

直接锁住子弹数

image-20241212100012051

连续开枪不掉子弹,验证成功