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闯关记 第三关 [完结撒花]的主要内容,如果未能解决你的问题,请参考以下文章

Cheat Engine(CE)教程

Cheat Engine(CE)教程

Cheat Engine(CE)教程

[Cheat Engine]多级指针查找

Cheat Engine进阶教程:gtutorial-i386闯关记 第三关 [完结撒花]

cheat engine怎么使用?谁能给我做个具体的教程?从使用方法到如何取游戏的基址,希望能够讲的详细点。