作弊引擎高级教程:gtutorial-i386突破3级【撒完花】
作弊引擎gtutorial-i386:第一关。
作弊引擎gtutorial-i386突破2级
作者延续了上一关的变态风格,gtutorial第三关不修改游戏依然无法通过(至少我不能!):左下角的白色小人是玩家,屏幕上的三只刺猬是移动的障碍物,玩家碰到就会死。游戏提示是:将所有红色平台变成绿色开门。
整个游戏有两个难度:难度1。如果不修改游戏,玩家无法从A平台跳到B平台,更别说地上的刺猬了,会影响游戏的!难点二:开门的一瞬间,三只刺猬飞到门口,摆出上门讨债的架势,堵住了门。玩家遇到刺猬就会通关失败,玩家根本进不了门。
现在言归正传,说说怎么过海关。受这篇文章创建一个作弊表-坐标的启发,我的想法是修改玩家的坐标,使其可以到达屏幕上的任何位置。因为有两个难点,本文分为两部分。
先说难度1。如何开门:在整个游戏中,除了玩家可以上下移动(跳跃)之外,玩家和障碍物都可以水平移动,所以定位玩家的Y坐标比X坐标更容易。一开始我在几个较低的平台上来回跳跃,改变和定位玩家的Y坐标,但是由于刺猬的影响,游戏在Y坐标确定之前就结束了。
于是我重新审视了一下这个游戏:作者说所有平台都要绿了才开门。我算了一下,玩家脚下的地面上有12个平台。作者有没有可能在程序中设置一个全局变量来记录绿色平台的数量?让我们试一试。游戏开始时,地面已经变色,所以在CE的数值编辑框中输入1。“扫描类型”选择“精确值”;选择“4字节”作为值类型,然后按“首次扫描”进行首次扫描。然后跳转到平台——扫描,重复几次,立即定位到有颜色变化的平台变量:
定位变量后,就简单了。直接把变量值改成12就行了,屏幕右侧的门会立刻打开,但同时游戏后半段的剧情也会立刻开始(看反派的表情,分明就是WTF):
2.刺猬堵门后,因为没有干扰,搜索玩家的坐标反而变成了马平川。先搜索x坐标,让玩家回到屏幕左下角,在CE上点击“新扫描”,将“扫描类型”设置为“未知初始值”,“值类型”设置为“浮点”,然后点击“首次扫描”。
之后,控制玩家慢慢向右移动。每次移动-暂停时,在CE中将“扫描类型”设置为“增加值”并点击“下一次扫描”,重复几次定位X坐标。最后,读者会发现x坐标在[-1,1]范围内变化:
有了存储X坐标的变量的地址,估计存储Y坐标的变量的地址一定在附近。由于sizeof(float)=4,y坐标可能距离x坐标4个字节。我们需要从Cheat表中复制并粘贴x-coor项两次。第一次将“调整地址依据”的值设置为4(“调整地址依据”是指被复制项的地址相对于源项的偏移量),将CT表中新增项的描述设置为“y-coor(+4)”;第二次将“地址调整依据”的值设置为-4,并将CT表中新添加条目的描述设置为“y-coor(-4)”:
当然,刚刚添加的两个CT项不一定是Y坐标,其正确性需要通过上下跳动来验证。在游戏中按“P”键使游戏暂定。我们在选手起跳时记录原始数据,选手起跳后再次记录数据,落地后第三次记录数据。通过以上步骤,可以求出x坐标的地址+sizeof(float)= y坐标的地址。有了这两个坐标变量,你可以随意改变玩家的位置,比如浮动(要达到浮动的效果,记得冻结X坐标和Y坐标这两个变量),如下图:
在这一点上,通关不是问题。但是,总觉得少了点什么。是的,没有外挂!嗯,这个插件是做什么的?好像整个游戏中定位玩家坐标的过程是最复杂的,那就做个定位插件定位玩家坐标的基址吧~
首先定位访问Y坐标的指令,在ct表中选择y-coor项,右键单击“找出这个地址写的是什么”。
回到游戏中,移动玩家。这时CE的“以下操作码写入”窗口会列出修改Y坐标的指令和存储玩家坐标的结构的基址(在Extra Info?"找到这个地址所需的指针值可能是01905980 "):
“额外信息”窗口显示访问坐标基址的指针存储在edx中。好吧,让我们写一个AA脚本,将edx写入全局可访问的内存。脚本如下:
激活脚本后,您需要在CE的CT表中创建一个coorbase项-点击“手动添加地址”,填写“添加地址”窗口的内容:
Coorbase存储指针,通过这些指针我们最终会分别访问x/y坐标,所以我们要分别添加手头的两个地址,把这些项拖到Step3下面组成一个组。右键单击菜单“组配置”-“取消激活时隐藏子级”第3步:
选择此选项的原因是coorbase是在Step3脚本中创建的。当这个脚本被禁用时,coorbase被释放,从释放的地址读取玩家的坐标是不合理的,所以这样处理。
这是最终CT表中的条目:
当你再次进入这个关卡,应用这个脚本,马上就可以得到玩家的坐标了~
原文链接:/thread-249551.htm
阅读更多信息:
x加密-反调试-DumpDex-修复指令-重新打包
AOSP常见漏洞简介
XCTF攻防世界反萌新坑第三题IgniteMe整理
Node.js原型污染攻击的分析与利用