目录

  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

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