CE教程第九关——处理共用代码

本文介绍了一种游戏代码修改技巧,通过分析游戏结构体,区分玩家和敌人单位,实现精准的健康值修改,避免双方无敌的情况。文章详细展示了从查找血量地址到注入自动汇编脚本的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

步骤 9: 注入++: (密码=31337157)

这一步将会解释如何处理游戏中的共用代码, 这种代码是通用在除了自己以外的其他同类型对像上

常常你在修改游戏的时候, 你找到了一个单位的健康, 或是你自己角色的健康, 你会发现一种情况:
如果你把健康相关代码移除的话,其结果是你的角色无敌, 但你的敌人也无敌了。 在这种情况下, 你必须想办法区分自己与敌人。 有时候很简单,
你只要检查最前面的4个字节(函数指针表), 它通常指向一个独一无二的地址, 代表着游戏玩家角色,而有的时候它是一个团体号码,
或者也可能是一个指针, 它指向另一个指针, 该址针又指向下一个指针,搞不好还指向下下一个指针,
最后指向一个玩家名字。总之完全取决于游戏的复杂度, 以及你的运气

最简单的方法是以"找出是什么改写了这个地址"去找出游戏代码,然后使用"分析(新/旧)数据/结构"的功能去比较两种结构。(你的单位和敌人的单位)然后看看是不是可以找到一个区分两者的方法。
当你找到如何区分你和电脑单位的方法后,你可以注入一段自动汇编脚本来检查状态,然后看是要运行游戏的代码还是要做其他的修改。(例如一击必杀)
另外, 你还可以用这个方法去创建一般所说的"字节数组"的字串, 它可以用来搜寻并产生一份所有你的单位或是敌人单位的列表 在这个教程中,
我已经实现了你将会玩到的最惊人的游戏. 这个游戏有4个玩家。2个属于你的阵容, 另外两个属于电脑方。 你的任务是找到改写健康的代码,
并且修改以至于你可以获得胜利,但"绝不能"使用锁定HP的方法. 完成修改以后, 请按 “重新启动游戏并自动执行” 来测试你的修改是否正确

提示1: 健康是一个单浮点数 提示2: 解法不只一种

这关要掌握一种新的分析方法:分析结构体。
在这里插入图片描述
游戏有4个角色,玩家12是我方,34是敌方。双方共用扣血代码,也就是说不能简单地删除扣血的代码,这样双方都无敌。

解法

首先,随便找到一个玩家的血量地址,然后找到扣血的代码,需要注意的是血量存储类型是单浮点,如果不知道这个信息,可以用未知类型,未知初始值,数值减小等选项搜索。

在这里插入图片描述
找到扣血代码后,右键,选择“找出指令访问的地址”

在这里插入图片描述
然后让4个玩家都扣血,这样就会找到4个地址。

在这里插入图片描述
全选,然后选择“打开选中地址的分析数据”,一路确认。

在这里插入图片描述
这样就找到了4名玩家的结构体

在这里插入图片描述
可以看到 +04 是血量,+15 是玩家名,还有其他的信息意义不明。到这里我们可以判断玩家名来区别处理,不过更简单的方法是使用 +10 的偏移数据,不难猜测,这个是队伍编号。只需要让队伍1的玩家不掉血就行了。

回到反汇编窗口,选择自动汇编。

在这里插入图片描述
先选择CT表框架

在这里插入图片描述

然后选择代码注入

在这里插入图片描述在这里插入图片描述
我的改法是如果是队伍1则血量设置为5000,然后原来的代码还是要执行的。最后分配到CT表,启用后发现锁血5000了。成功!

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值