Cheat Engine教程:对步骤2教程编写一个lua脚本

演示软件和修改思路

  1. 演示软件:Cheat Engine自带教程步骤2(Tutorial-x86_64.exe)
  2. 修改操作:在这个教程界面中,按提示直接搜值进行修改。这个操作在ce操作中属于最常见的了。

编写脚本

整体编写思路:将ce手动修改步骤一步步转为代码形式。

1.附加程序

在进程列表中找到要修改的程序名称,附加到ce里面。

openProcess ("Tutorial-x86_64.exe")

2.搜索条件设置(群组和内存特征排列)

将要在ce界面上要输入的条件值添加到脚本中。

  搜索过这个健康值时,发现减的值会随机,并且重启后精确搜索方式会失效。所以这里换个思路,用查找内存排列和群组搜索进行定位。

a. 内存排列查找

  先按教程精确搜索,搜索出结果后浏览内存区域。将附近的值复制出来,粘贴到记事本里。关掉程序,重复之前步骤。
将几次值进行文本比对,可以看到下面数值分布十分简单
内存特征分布为:“健康值 0 65024 0 2080 0”

第1次搜索:98 0 65024 0 2080 0 22297674 0 1602 0 2337992 1 0 0 2360120 1 22635808 0
第2次重启搜索:97 0 65024 0 2080 0 21711114 0 1602 0 2337992 1 0 0 2360120 1 22049248 0
第3次重启搜索:95 0 65024 0 2080 0 932826 0 1602 0 2337992 1 0 0 2360120 1 1270960 0

  b. 群组条件转换
经过上面的查找出的内存排列,接下来就是群组条件转换了。
群组:“”4:100 w:12 4:2080″”
注释:”4:表示4字节类型,”w:”表示跳过多少字节(4*3),”100“:第一次启动后界面的健康值100,”2080“:不知道干嘛的为了修改多个值时的场景就加进来了。 

将要在ce界面上要输入的条件值和搜索设置添加到脚本中。

local search_num = string.format(“4:100 w:12 4:2080”)
local Scan = createMemScan();
Scan.OnlyOneResult=true;
Scan.firstScan(soExactValue, vtGrouped, rtTruncated, search_num, “”, 0, 0x00000001ffffffff, “”, fsmNotAligned, “”, true, false, false, false);
Scan.waitTillDone();
a=Scan.getOnlyResult()
if a==nil then print(“未能搜寻到值”) return end

3.将搜索结果加入地址栏

上面有2个值,分别注释为”数字1“ ”数字2“加到地址栏。最后加入Active锁定值

–添加数字1
local addressList = getAddressList()
local a1 = addressList.createMemoryRecord()
a1.setDescription(string.format(“数字1”))
a1.Address = a

–添加数字2
local a1 = addressList.createMemoryRecord()
a1.setDescription(string.format(“数字2”))
a1.Address = a+16

4.修改结果值

将2个值,分别修改为1000和2。

writeInteger(a,1000)

writeInteger(a+16,2)

总结

最后重启教程软件试试脚本效果。打开步骤2界面,运行脚本后界面直接就出现下一步按钮。同时发现这个教程软件十分有趣,界面上的值和实际值不一样,后面有时间再研究一下。

openProcess (“Tutorial-x86_64.exe”)

local search_num = string.format(“4:100 w:12 4:2080”)
local Scan = createMemScan();
Scan.OnlyOneResult=true;
Scan.firstScan(soExactValue, vtGrouped, rtTruncated, search_num, “”, 0, 0x00000001ffffffff, “”, fsmNotAligned, “”, true, false, false, false);
Scan.waitTillDone();
a=Scan.getOnlyResult()

if a==nil then print(“未能搜寻到值”) return end

–添加数字1
local addressList = getAddressList()
local a1 = addressList.createMemoryRecord()
a1.setDescription(string.format(“数字1”))
a1.Address = a

–添加数字2
local a1 = addressList.createMemoryRecord()
a1.setDescription(string.format(“数字2”))
a1.Address = a+16

writeInteger(a,1000)
writeInteger(a+16,1)

 

 

 

给TA打赏
共{{data.count}}人
人已打赏
技术教程

抖音0粉丝开启电脑直播,抓包获取推流地址

2023-3-28 23:17:34

技术教程

申请EU.org免费域名 – 其实这也是顶级域名

2023-5-21 22:26:04

6 条回复 A文章作者 M管理员
  1. 133

    牛逼的

  2. 是你

    dgh

  3. 噢噢噢哦

    666666

  4. 工具箱

    666

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索