▒ 目录 ▒
- 🛫 导读
- 需求
- 开发环境
- 1️⃣ 第一关
- 翻译
- 操作
- 总结
- 2️⃣ 第二关(代码共享)
- 翻译
- 操作
- 验证
- 3️⃣ 第三关
- 翻译
- 操作
- 总结
- 🛬 文章小结
- 📖 参考资料
🛫 导读
需求
除了
Tutorial-x86_64.exe
教程外,CE还提供了图形化教程gtutorial-x86_64.exe
。作为强迫症深度患者,自然是要把所有关卡都完成的,今天就按照小编的思路,一起通关图形化作弊教程吧。
开发环境
版本号 | 描述 | |
---|---|---|
文章日期 | 2023-03- | |
操作系统 | Win11 - 21H2 - 22000.1335 | |
Cheat Engine | 7.4 | |
1️⃣ 第一关
翻译
Every 5 shots you have to reload.
after which the target will heal
Try to find a way to destroy the target
(Click to hide)
每 5 次射击,您就会被重新加载目标,之后目标会愈合。
尝试找到一种方法来摧毁目标。
操作
简单的尝试就明白,目标不会被直接摧毁,简单的说,就是第5次执行的时候会被重置。
其实,这个5
是个坑,我们应该做的是,将目标血量清零。
- 定位目标血量
- 1.1 按照下图配置,进行首次扫描
- 1.2 执行一次打击,然后设置扫描类型为
减少的数值
,点击再次扫描
。
- 1.3 将扫描类型设置为
未变动的数值
,点击再次扫描
(不断的回到游戏,可以多次扫描未变动的数值
)。
重复1.2和1.3操作,射击4次后,只剩下22个结果。
- 1.4 我们从结果中,可以看到两个值为4的值。修改该值,目标血量也跟着进行了变化。可以猜测,该值就是我们想要的值。
- 找规律,我们重复攻击目标,会发现,每次血量都会减少
24
点。
那么我们直接将血量改为24,是不是就可以完成任务了。尝试之,的确有效。
不过,这里需要注意的是,不能在最后一次攻击的时候设置24,否则依然会使得血量恢复。而且不能直接设置为0,攻击没有任何效果。
总结
- 搜索技巧:未知初始值、减少的值、不变的值。
- 多观察、多猜测,每次减少24。
- 不断尝试修改,并验证,两个血量就是目标血量,改了后能看到血量变化。
ps: 本关还有很多种解法,之前尝试修改代码,让
血量直接变为0
,也能成功。
游戏本身就是这样,不只有一种解法,缕清思路,不断尝试,总能找到合适的方案。
2️⃣ 第二关(代码共享)
翻译
Step 2:
These two enemies have more health and do more damage to you than you do to them.
Destroy them
Tip/warning: Enemy and player are related
这两个敌人和你相比拥有更多的血量、造成更多的伤害。
消灭他们。
提示/警告:敌人和玩家是相关联的。
操作
跟第一关相同的思路,我们应该做的是,
将目标血量清零
。(盯着自己的血量不被清零比较难实现了)
- 定位敌人血量(参考第一关)
- 在两个敌人地址上执行《找出是什么改写了这个地址
F6
》,分别攻击两个敌人,定位到血量减少的代码,如下图:
- 分析步骤2中的内容,发现减少敌人血量代码的是同一块(减少自己血量的代码也是这里)。
那么直接修改该处代码,当rax分别是0x00000000116F8D00
和0x0000000011927580
时,将其血量清零,是不是就可以了呢?
- 在地址
"gtutorial-x86_64.exe"+400E3
(第2步中截图中的指令地址)处,增加代码注入(参考小编的《【CE】Mac下的CE教程Tutorial》系列文章),生成模板代码如下:
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048,"gtutorial-x86_64.exe"+400E3)
label(returnhere)
label(originalcode)
label(exit)
newmem: //this is allocated memory, you have read,write,execute access
//place your code here
originalcode:
sub [rax+60],edx
ret
add [rax],al
exit:
jmp returnhere
"gtutorial-x86_64.exe"+400E3:
jmp newmem
nop
returnhere:
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"gtutorial-x86_64.exe"+400E3:
sub [rax+60],edx
ret
add [rax],al
//Alt: db 29 50 60 C3 00 00
在
newmem:
下面增加如下代码:
cmp eax, 0000000011927580
je kill
cmp eax, 00000000116F8D00
je kill
jmp originalcode
kill:
mov edx, [rax+60]
sub [rax+60],edx
ret
比较修改前后代码,如下图(包含代码含义):
上面的汇编代码可以有很多种,只要能完成任务即可。
验证
这个操作需要
特别注意
,需要快速攻击两个敌人,时间不能差太多,否则会出现第二个角色回血的现象。
等待敌人被命中,将会弹出成功的对话框。
3️⃣ 第三关
翻译
Step 3:
Mark all platforms green to unlock the door
Beware: Enemies are 1 hit kill(and bad losers)
Have fun!
Hint: There are multiple solutions
e.g: Find collisiton detect with enemies.or teleport, or fly
Or ..
把每个平台标记为绿色可以解锁那扇门。
注意:敌人会将你一击致命(然后就失败了)
玩的愉快!
提示:有很多解决方案。
比如:找到与敌人的碰撞检测,或者 Teleport(传送),或者飞行,或者...
操作
根据提示,首先想到的就是坐标,玩家移动,坐标将被修改。
- 搜索出玩家横坐标地址。
按左右键不断移动玩家,搜索变动的数值
。
一直按左键,游戏边界检测,玩家坐标不会变化,搜索未变动的数值
。
不断重复上面的操作。
(ps:修改0x01631550
的第一个字节,玩家会消失,猜测是玩家是否挂掉的标记)
- 确认纵坐标
在内存窗口中,查看0x01631550
地址。
按空格键,使玩家跳起来,观察到0x01631558
地址的值会变化,确定纵坐标(修改该值为0,玩家会从高处落下!!!)。
- 修改代码,实现玩家飞行
右键0x01631558
地址,选择菜单《找出是什么改写了这个地址F6
》。
按空格键,使玩家跳起来,会发现有两处地址改写了纵坐标
。NOP
掉这两处代码即可。
- 修改
纵坐标
,按左右键移动横坐标,使所有平台标记为绿色
。
- 测出地图中右下角坐标(0.97,0.86),修改玩家坐标,使玩家
瞬移
到右下角。
总结
整体分析过程梳理:
- 确认横坐标:搜索内存,分析出玩家
坐标地址
。- 确认纵坐标。
- 修改代码,实现玩家飞行。(
nop
掉修改用户纵坐标的代码)- 修改玩家纵坐标,按左右键移动横坐标,使
所有平台标记为绿色
。- 测出地图中右下角坐标(0.97,0.86),修改玩家坐标,通关。
🛬 文章小结
本篇文章,小编尝试了很多种可能,最终写的时候,只写了成功的思路。三关都很有意思,尤其是第三关,让人立马想到游戏中的实现,对以后分析游戏有很大的帮助。
对分析过程感兴趣的,可以参考文章《[调试逆向] CE教程:进阶篇 CE Tutorial Games gtutorial https://www.52pojie.cn/thread-915447-1-1.html》,该文章总结了作者的无数猜想和尝试,十分有意义。
总之,不断思考,不断尝试,不断总结,慢慢的就会积累出各种思路。
小编将与你们同在,一起继续分析各种应用。
逆向之旅,永不停歇。
📖 参考资料
- [调试逆向] CE教程:进阶篇 CE Tutorial Games gtutorial https://www.52pojie.cn/thread-915447-1-1.html
ps: 文章中内容仅用于技术交流,请勿用于违规违法行为。