Cheat Engine进阶教程:gtutorial-i386闯关记 第三关 [完结撒花]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cheat Engine进阶教程:gtutorial-i386闯关记 第三关 [完结撒花]相关的知识,希望对你有一定的参考价值。
参考技术A 内容回顾:《Cheat Engine gtutorial-i386闯关记 第一关》
《Cheat Engine gtutorial-i386闯关记 第二关》
作者延续前一关变态作风,gtutorial第三关依然是不修改游戏无法过关(至少我不能!):左下角那个白色小人是玩家,画面上3个刺猬是移动障碍物,玩家触之即死。游戏提示为:将所有红色平台变绿即可开门。
整个游戏有2个难点:难点1,如果不修改游戏,玩家无法从平台A跳上平台B,更何况地面上还有刺猬捣乱,影响发挥!难点2,门开启的瞬间,这3个刺猬飞向门边,摆出副上门讨债的架势把门堵死了,玩家碰到刺猬又会过关失败,所以玩家根本无法进门。
现在进入正题,说说怎么过关,受这篇Creating a cheat table - Coordinates文章的启发,我的想法是修改玩家的坐标,让它可以到达画面的任意位置。由于这关有2个难点,所以本文分两部分介绍。
先说难点1,怎么开门: 在整个游戏中,除了玩家可以上下运动(跳跃),玩家和障碍物都可以横向运动,所以定位玩家的Y坐标要比定位X坐标简单。最开始,我在几个比较低的平台上来回跳跃来改变及定位玩家的Y坐标,但是由于刺猬的影响,Y坐标还没确定游戏就结束了。
所以我重新审视了一下游戏:作者说要让所有平台变绿才能开门,我算了下连同玩家脚下的地面一共有12块平台,作者有没有可能再程序中设置了全局变量记录变绿的平台数?让我们试一试。游戏开始时,地面已经变色,所以,在CE的value编辑框中输入1。"Scan Type"选择"Exact Value";Value Type选择"4 Byte",然后按"first scan"做初次扫描。接着再跳平台-扫描,重复几次,马上能定位存储着变色的平台的变量:
定位变量后就简单了,直接将变量值改为12,画面右边的门马上会开,但同时,游戏的后半部分情节马上开始(看看小人的表情,分明是再说WTF):
2. 刺猬堵门后,由于没有干扰,搜索玩家的坐标反而变得一马平川了。先搜索X坐标,让玩家回到画面左下角,在CE上点击"New Scan","Scan Type"设为"Unknown initial value","Value Type"设为"Float",然后点击"First Scan"。
之后,控制玩家慢慢向右移动,每次移动-暂停时,在CE中设置"Scan Type"为"Increased value"并点击"Next Scan",反复几次即可定位x坐标。最终,读者会发现x坐标在[-1,1]区间内变动:
有了存储x坐标的变量的地址,估摸着存储y坐标的变量的地址肯定在附近。由于sizeof(float)=4,所以y坐标可能距离x坐标4字节。我们需要从Cheat table中复制黏贴2次x-coor项。第一次设置"Adjust address by"的值为4("Adjust address by"意为,复制项的地址距离源项的偏移),并设置该新添加的项在CT表中的Description为"y-coor(+4)";第二次设置"Adjust address by"的值为-4,并设置该新添加的项在CT表中的Description为"y-coor(-4)":
当然刚才添加的两个CT项并不一定就是y坐标,需要通过上下跳跃来验证其正确性。在游戏中按下"p"键即可让游戏暂定,我们在玩家起跳时记录下原始数据,当玩家起跳后再次记录数据,落地后第三次记录数据。通过以上步骤可以找到x坐标的地址+sizeof(float)=y坐标的地址。有了这两个坐标变量就可以随意改变玩家的位置,比如浮空(要达到浮空的效果,记得把x坐标和y坐标两个变量Freeze)如下图:
至此,过关不成问题了。但是,总觉得少了点什么?对,没做外挂!恩,这关的外挂做什么呢?好像整个游戏中定位玩家坐标的过程最为复杂,那就做个定位外挂,用来定位玩家坐标的基址~
首先定位访问y坐标的指令,在CT表中选中y-coor项,右键"Find out what write to this address"。
回到游戏中移动玩家,这时CE的"The following opcodes write to"窗口会列出修改y坐标的指令以及存储玩家坐标的结构体的基址(Extra Info中的 "The value of the pointer needed to find this address is probabyly 01905980"):
"Extra Info"窗口中显示,访问坐标基址的指针存放在edx中,好,那我们就写个AA脚本,将edx的写到全局可被访问的内存中,脚本如下:
激活脚本后,需要在CE的CT表中创建coorbase项-点击"Add address Manually"并填写"Add address"窗口中的内容:
coorbase存放的是指针,我们最终是要通过这个指针分别访问x/y坐标,所以还要分别手头添加2个地址,并把这几项拖到Step3下形成一组。并在Step3项上右键菜单"Group config"-"Hide children when deactived":
选这个选项的原因是coorbase是在Step3脚本中创建的,当disable这个脚本时coorbase被释放,再从被释放的地址去读玩家坐标显得不合理,故如此处理。
这是最终CT表中的表项:
当再次进入这个关卡并应用这个脚本马上能获得玩家的坐标~
原文链接: https://bbs.pediy.com/thread-249551.htm
更多阅读:
X加密-反调试-DumpDex-修复指令-重打包
AOSP常见漏洞简介
XCTF 攻防世界 reverse 萌新入坑 第三题 IgniteMe writeup
Node.js原型污染攻击的分析与利用
Cheat Engine(CE)教程
目录
前言
CE有个自带的教程,包括精确扫描、未知初始值、浮点数、代码查找、指针、代码注入、多级指针、共享代码,本篇记录下
一、简介
Cheat Engine ,简称CE,是逆向工程师常用的几大神器之一,也是游戏汉化、破解以及外挂编写中常用的工具,其功能包括:
- 内存扫描
- 十六进制编辑器
- 调试工具
- 可以进行反汇编调试、断点跟踪、代码注入等诸多高级功能
- 支持 lua 语言,可以实现自己定义的逻辑功能,而不仅仅是简单的锁定数据。也可以在代码注入的同时注入 lua 插件,使游戏进程与 CE 进程进行交互。 CE 的大部分功能都可以通过 lua 来操作
- 它还支持 D3D Hook 功能,可以在游戏中显示十字准星,也可以绘制功能菜单,同时也可以对 D3D 的调用栈进行跟踪调试
- 自带变速功能,通过 Hook 游戏相关函数改变游戏速度
- 自带了一个 Trainer 的功能,可以将自己在 CE 中实现的功能单独生成一个 exe 文件,并可以使用 lua 创建比默认样式更加复杂的窗体或功能
下载:建议到吾爱破解下
二、教程
开始教程
打开进程
1、精确值扫描
简单流程:
- 精确扫描100
- “打我”
- 精确扫描新的数值
- 重复直到只有一个地址并修改值为1000
2、未知初始值
流程:
- 未知搜索
- “打我”
- “减少的数值”
- 重复直到只有一个地址并修改值为5000
3、浮点数
流程:类似精确值扫描,改为浮点数即可
4、代码查找
流程:
- 用上面的办法找到地址
- 右键“找出是什么改写了这个地址”
- 指令改为空
替换为空即可
5、指针
流程:
- 找到地址
- 查看“是什么改写了地址”
- 查看“详细信息”
- 搜索指针地址并修改值为5000
6、代码注入
流程:
- 找到地址
- 找到代码
- 反汇编
- 根据要求修改
几个解释
alloc(newmem,2048) // 申请 2048 字节的内存,newmem 就是这个内存地址
label(returnhere) // 定义用于跳转的标签 returnhere
label(originalcode) // 定义用于跳转的标签 originalcode
label(exit) // 定义用于跳转的标签 exit
修改如下:
7、多级指针
流程:
- 找到地址
- 找到指针
- 不断找指针
- 修改值
注意这里有个偏移量18
然后“是什么访问了地址”
这里提示的地址和上一次提示的地址是一样的
研究下:
mov esi,[esi]
这条指令访问了这个地址- 那么
[esi]
原来是啥?原来的esi
不就是这个我们监视的地址
找到基址了!!
此时,真正的内存地址是
[[[["Tutorial-i386.exe"+2566E0]+0C]+14]+00]+18
到此即可
其实CE自身是有搜索指针的功能的,就不用上面这样一步一步来
8、共享代码
流程:
- 找出4个血量地址
- 查找代码
- 区分敌我
- 修改代码
浏览内存
发现有个队伍编号1和2
区分出敌我,那就简单了
进行代码注入
分析:
- 原始代码是
mov [ebx+04],eax
,意思就是,血量处于ebx+04
的位置 - 再看 Dave 的血量地址和队伍编号地址,两者做个差值(16进制减法,可以用计算器算),应该是
0C
,如果血量是ebx+04
,那么队伍编号就应该是ebx+04+0C
就是ebx+10
了 - 我们需要在运行原来代码之前判断一下 [ebx+10] 是否等于 1
修改如下:
完结撒花!
结语
学会使用CE的基本功能
以上是关于Cheat Engine进阶教程:gtutorial-i386闯关记 第三关 [完结撒花]的主要内容,如果未能解决你的问题,请参考以下文章