最新博客链接

最近想学习一下 CE,刚好看见游戏库里装了 Kingdom Rush 就拿它来研究吧。这里写的东西,需要一些 Cheat Engine 的基础,可以看看教程。

这里主要是看写的注释,来理解脚本。(如果什么都不想看,可以直接复制粘贴 CE 自动汇编(AA)脚本)

我学习的链接:

你能学会的 Cheat Engine 零基础入门教程

Cheat Engine 基础教程 CE Tutorial | Ganlv’s Blog

CE 教学实例应用-由浅入深学习游戏修改 [全十课]

参考链接:

Cheat Engine 官方 WIKI

x86 汇编指令列表

技术理解

我对一些用到的技术的简单理解:

  • 代码注入:在程序运行时,将自己写的代码,替换掉原有的代码
  • AOB:(Array Of Byte)在内存中搜索特定的一串数据,以决定注入代码的位置
  • 人造指针:单独找个地方,记录变量所在的地址

数据存储结构

数据在内存中的存储结构:

Cheat Engine 相关汇编知识

此脚本用到的 CE 汇编指令

x86 汇编指令列表

命令例子 功能
mov ebx,0000FFFF Move,寄存器直接赋值
mov ebx,eax Move,将右边直接给左边
mov ebx,[eax] Move,将右边所指的值给左边。[ ]代表括号内的是指针,操作时,操作其指向的内存值
cmp ebx,eax Compare,比较两寄存器值,若相等则 ZF 位 置 1(左减右)
je <label> Jump if Equal, ZF = 1 时跳转,可跳转至标记段代码
jne <label> Jump if Not Equal, ZF = 0 时跳转,可跳转至标记段代码
jmp <label> Jump

此脚本用到的 CE 自动汇编函数:(Auto Assembler)

Cheat Engine 官方 WIKI

函数 参数 作用
alloc alloc(SymbolName, Size, AllocateNearThisAddress OPTIONAL) Allocates a memory block of Size bytes and defines the SymbolName in the script, pointing to the beginning of the allocated memory block.
dealloc dealloc(SymbolName) Deallocates a block of memory allocated with alloc.
label label(LabelName) Enables the word ‘LabelName’ to be used as a symbol.
aobScanModule aobScanModule(SymbolName, ModuleName, AOBString) Scans the memory used by the module ModuleName for a specific byte pattern defined by AOBString and sets the resulting address to the symbol SymbolName.
registerSymbol registerSymbol(SymbolName) Adds a symbol to the user-defined symbol list so cheat tables and the memory browser can use that name instead of an address.
unregisterSymbol unregisterSymbol(SymbolName) Removes a symbol from the user-defined symbol list. No error will occur if the symbol doesn’t exist.

此脚本用到的 CE 汇编语言数据类型

类型 占用空间
Bit(整型) 1 位
Byte(整型) 8 位(字节)
2 byte(整型) WORD(字)
4 Bytes(整型) DWORD(双字)
8 Bytes(整型) QWORD(四字)
Float(单浮点) DWORD(双字)
Double(双浮点) QWORD(四字)
String(字符串) 任意长度
Array of bytes(AOB) 任意长度

CE 常用寄存器

The x86 architecture has 8 General-Purpose Registers (GPR)
x86 架构有 8 个通用寄存器(32 位系统)

“E” (for “extended”), 32 bits.

General-Purpose Registers:EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI

Cheat Engine 汇编代码

学过 CE 的,通过注释,应该能看懂

{ Game   : Kingdom Rush.exeVersion:Date   : 2022-06-19Author : Tsanfer更改金钱、生命、星(使用 AOB 和人造指针)
}[ENABLE]aobscanmodule(INJECT,lua51.dll,8B 29 8B 49 04 89 2C C2) // AOB 匹配入口
alloc(newmem,1024,INJECT) // 分配 1024 字节个内存,用于代码注入
alloc(man_pointer,24) // 动态分配内存,用于存放3个人造指针// 注册全局符号
registersymbol(INJECT)
registersymbol(man_pointer) // 人造指针// 声明标号
label(original_code)
label(return)
label(restore_reg)
label(check_is_gold)
label(check_is_gold_END)
label(check_is_live)
label(check_is_live_END)
label(check_is_star)
label(check_is_star_END)// 数据存储结构:
// 偏移   数据                 变量类型
// 0      具体值               Double
// 8      指向值所属的公共结构 指针
// └─> 0
//     10 此公共结构的名称     字符串// 程序执行顺序:(汇编代码如没有跳转,默认从上往下执行)
// INJECT -> newmem -> check_is_gold -> check_is_live
// -> check_is_star -> reset_reg -> original_code -> return// 注入代码段
newmem:pushfd // 保存所有标志位push eax // eax 压栈保存,为后续操作腾出一个寄存器mov eax,[ecx+08] // 将当前值所属的公共类型所在的地址,给 eax// 判断此值的类型是否为金钱(player_gold)
check_is_gold:cmp dword ptr [eax+10],'play' // 内存双字比较jne check_is_gold_END // 如不匹配,则停止后续比较,跳到此比较的结尾cmp dword ptr [eax+14],'er_g'jne check_is_gold_ENDcmp word ptr [eax+18],'ol' // 内存字比较jne check_is_gold_ENDcmp byte ptr [eax+1A],'d' // 内存字节比较jne check_is_gold_ENDmov [man_pointer],ecx // 匹配成功,将指向此值的指针保存在申请的内存中(制作人造指针)
check_is_gold_END:// 判断此值的类型是否为生命(lives)
check_is_live:cmp dword ptr [eax+10],'live'jne check_is_live_ENDcmp byte ptr [eax+14],'s'jne check_is_gold_ENDmov [man_pointer+8],ecx // 将指针保存在第二个内存位置// (64位系统的指针大小为 64 bit,每个内存地址大小为 8bit,则需要平移8个内存地址,8x8=64)
check_is_live_END:// 判断此值的类型是否为升级用的星(total_stars)
check_is_star:cmp dword ptr [eax+10],'tota'jne check_is_star_ENDcmp dword ptr [eax+14],'l_st'jne check_is_star_ENDcmp word ptr [eax+18],'ar'jne check_is_star_ENDcmp byte ptr [eax+1A],'s'jne check_is_star_ENDmov [man_pointer+10],ecx
check_is_star_END:// 恢复临时使用的寄存器的值
restore_reg:pop eaxpopfd  // 还原所有标志位jmp original_code// 原始代码
original_code:mov ebp,[ecx]mov ecx,[ecx+04]jmp return // 跳到返回// 程序入口
INJECT:jmp newmem
return: // 返回[DISABLE]
// 还原代码
INJECT:db 8B 29 8B 49 04// 注销全局符号
unregistersymbol(INJECT)
unregistersymbol(man_pointer)
// 释放内存
dealloc(newmem)
dealloc(man_pointer){// ORIGINAL CODE - INJECTION POINT: lua51.dll+1BDAlua51.dll+1BBC: 23 48 08     - and ecx,[eax+08]
lua51.dll+1BBF: 6B C9 18     - imul ecx,ecx,18
lua51.dll+1BC2: 03 4D 14     - add ecx,[ebp+14]
lua51.dll+1BC5: 83 79 0C FB  - cmp dword ptr [ecx+0C],-05
lua51.dll+1BC9: 75 3A        - jne lua51.dll+1C05
lua51.dll+1BCB: 39 41 08     - cmp [ecx+08],eax
lua51.dll+1BCE: 75 35        - jne lua51.dll+1C05
lua51.dll+1BD0: 83 79 04 FF  - cmp dword ptr [ecx+04],-01
lua51.dll+1BD4: 74 36        - je lua51.dll+1C0C
lua51.dll+1BD6: 0F B6 46 FD  - movzx eax,byte ptr [esi-03]
// ---------- INJECTING HERE ----------
lua51.dll+1BDA: 8B 29        - mov ebp,[ecx]
lua51.dll+1BDC: 8B 49 04     - mov ecx,[ecx+04]
// ---------- DONE INJECTING  ----------
lua51.dll+1BDF: 89 2C C2     - mov [edx+eax*8],ebp
lua51.dll+1BE2: 89 4C C2 04  - mov [edx+eax*8+04],ecx
lua51.dll+1BE6: 8B 06        - mov eax,[esi]
lua51.dll+1BE8: 0F B6 CC     - movzx ecx,ah
lua51.dll+1BEB: 0F B6 E8     - movzx ebp,al
lua51.dll+1BEE: 83 C6 04     - add esi,04
lua51.dll+1BF1: C1 E8 10     - shr eax,10
lua51.dll+1BF4: FF 24 AB     - jmp dword ptr [ebx+ebp*4]
lua51.dll+1BF7: 0F B6 46 FD  - movzx eax,byte ptr [esi-03]
}

然后再手动添加 3 个人造指针的地址(man_pointer 和 man_pointer+8 和 man_pointer+10),就行了

Cheat Engine 使用界面

本文由Tsanfer’s Blog 发布!

使用 Cheat Engine 修改 Kingdom Rush 中的金钱、生命、星相关推荐

  1. 内存修改 android免root,真正免root的Cheat Engine修改器详细使用教程

    Cheat Engine修改器的功能 开源的内存修改工具 ,它允许你修改游戏或软件内存数据,以达到各种非常规目的,通过ce修改器(Cheat Engine)软件来修改游戏中的内存数据.人物属性.金币数 ...

  2. 教程:用Cheat Engine修改合金装备V幻痛中士兵的能力值、外貌、性别与技能

    此脚本亦可用于线上,因此希望大家自觉健康游戏,不要用来开挂!!!!! 1.游戏版本 就正版保持更新即可,这游戏也不会有实质性的任何更新了. 2.Cheat Engine版本 6.8.3 下载链接如下 ...

  3. 使用Cheat Engine在Cooking Fever中修改金钱和钻石

    软件环境: 1 Cheat Engine 2.Cooking Fever (烹饪发烧友) 修改方法: English,能看懂的基本上都能看懂,看不懂的基本上也看不懂 原方法是直接断开网络连接,这在现实 ...

  4. 【游戏辅助】使用cheat engine 修改《植物大战僵尸》游戏参数

    #1.前言 ##1.1声明 文章中的文字可能存在语法错语以及标点错误,请谅解: 如果在文章中发现代码错误或其它问题请告知,感谢! ##2具体实现过程 ##2.1 准备工具 1.cheat engine ...

  5. 【CE入门教程】使用Cheat Engine(CE)查找“扫雷”中“雷数”、“旗子”、“笑脸”和“计时器”的内存地址以及“初级”、“中级”和“高级”的棋盘内存地址范围

    目录 1.查找"雷数"和旗子的内存地址 2.查找"笑脸"的内存地址 3.查找"计时器"的内存地址 4.查找"初级".&q ...

  6. Cheat Engine 修改器获取内存数据心路历程, THREADSTACK0 C# .NET VB 获取基址 CE修改器

    一.CE 找到地址 根据字符串找到地址. 找到结果,双击此行,会加入下面列表 右键点击选择:对这个地址进行指针扫描. 此处选择10级别指针,其他程序 区别对待. 参考此教程: CE学习资料 经过多次查 ...

  7. 【CE入门教程】使用Cheat Engine(CE)修改游戏“植物大战僵尸”之僵尸篇

    目录 1.寻找僵尸位置基址 2.实现"秒杀"僵尸(修改僵尸血量) 上一期教程中,我们学习了修改植物大战僵尸的单卡片无CD.全卡片无CD.豌豆射手射速修改以及实现豌豆射手发射&quo ...

  8. cheat engine 的tutorial.exe教程体验

    闲的没事点开了些小游戏玩,玩到造梦西游的时候想到了以前用的个cheat engine修改器,就下下来玩了玩,这一玩 发现了不少好东西 主要是发现了在cheat engine里还有个tutorial.e ...

  9. Cheat Engine 小白教程(大白话教学)上篇

    什么是cheat engine? cheat engine是一款电脑游戏修改器(简称:CE修改器),我这个人话不多不跟别的博主一样说一堆没用的! cheat engine修改游戏范围以及游戏列表 列如 ...

  10. 利用cheat engine以及VC编写游戏修改器

    cheat engine的介绍已经完毕了,下面就是怎么使用它的问题,这里写一个稍微有意思一点的,也有实际用途的话题,就是来编写自己的游戏修改器. 这篇文章参考了http://www.pediy.com ...

最新文章

  1. 智源神经元识别挑战赛发布:收获不只是10万元奖金
  2. SLAM:SLAM之VSLAM的简介
  3. word里的多级列表和项目编号是什么区别?
  4. python学习:语句
  5. Mac修改系统用户名好方法(文件无丢失)
  6. 前端学习(2860):简单秒杀系统学习之前端优化
  7. SaaS:新智能背景下重构各个领域的生态系统
  8. 线程创建方式3-实现 callable接口(Java)
  9. 老婆半夜推了我三次,强~!
  10. 网管员不得不关注的九大热门网络技术
  11. WEB安全基础 - - -漏洞扫描器
  12. C++第2周项目2——读取数据到结构体数组
  13. C# 制作一个倒计时器
  14. 换了一把椅子之后才知道,原来人体工学可以这么香。
  15. C#中Winform操作百度地图
  16. 怎么撰写一份优秀的数据分析报告(五)
  17. 大学英语综合教程一 Unit 6 课文内容英译中 中英翻译
  18. 古玩文物字画寄售系统源码/拍卖商城系统源码/竞拍系统源码转拍系统
  19. PyG (PyTorch Geometric) 异质图神经网络HGNN
  20. 文件批量重命名工具Bulk Rename Utility

热门文章

  1. 当我们在聊高可用时,我们其实在聊什么?
  2. 菜哥学知识图谱(通过“基于医疗知识图谱的问答系统”)(三)(代码分析)
  3. 如何获取Mysql的根目录
  4. 新型城镇化提质扩容 打造民村智慧城市
  5. salt returner mysql_saltstack (4) 用mysql存储 salt 返回值
  6. 如何查看IP地址是否被占用
  7. Edge浏览器或使用谷歌chrome内核的浏览器访问网页版高德地图很卡特别慢解决办法
  8. SAP 之定义工厂(Plant)
  9. atomic java_Java中Atomic类的使用分析
  10. 北辰创业笔记:百度引流推广有用吗?百度引流最有效的方法