吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10100|回复: 37
上一主题 下一主题
收起左侧

[游戏安全] Cheat Engine教程:对步骤2教程编写一个lua脚本

  [复制链接]
跳转到指定楼层
楼主
whiteb1234 发表于 2023-4-18 11:11 回帖奖励
本帖最后由 whiteb1234 于 2023-4-18 17:09 编辑

前言

  最近玩游戏用到了Cheat Engine工具修改数值,但每次修改都要手工重复输入麻烦死了。所以简单学习了下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)

免费评分

参与人数 13吾爱币 +11 热心值 +11 收起 理由
hailuo233 + 1 + 1 我很赞同!
posheng + 1 + 1 很有用,感谢~
Chenanin + 1 热心回复!
youga777 + 1 我很赞同!
lalicorne + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Dboykey + 1 + 1 用心讨论,共获提升!
twl288 + 1 谢谢@Thanks!
sataniv + 1 + 1 谢谢@Thanks!
amd123 + 1 + 1 我很赞同!
wxn2023 + 1 + 1 谢谢@Thanks!
nevinhappy + 1 + 1 我很赞同!
Szyk + 1 + 1 用心讨论,共获提升!
杨辣子 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
pzx521521 发表于 2024-6-3 01:04
本帖最后由 pzx521521 于 2024-6-3 01:05 编辑

代码有点问题哦
主要是下面的代码:

Scan.firstScan(soExactValue, vtGrouped, rtTruncated, search_num, "", 0, 0x00000001ffffffff, "", fsmNotAligned, "", true, false, false, false);

rtTruncated 填为 rtExtremerounded 更好一点

true, false, false, false 应该为 false, false, false, false

    roundingtype: Defined the way scans for exact value floating points are handled
      rtRounded : Normal rounded scans. If exact value = "3" then it includes 3.0 to 3.49999999. If exact value is "3.0" it includes 3.00 to 3.0499999999
      rtTruncated: Truncated algorithm. If exact value = "3" then it includes 3.0 to 3.99999999. If exact value is "3.0" it includes 3.00 to 3.099999999
      rtExtremerounded: Rounded Extreme. If exact value = "3" then it includes 2.0000001 to 3.99999999. If exact value is "3.0" it includes 2.900000001 to 3.099999999
isHexadecimalInput: When true this will handle the input field as a hexadecimal string else decimal

isHexadecimalInputtrue的话搜的是16进制的数,  理论上来说你应该搜不出来的

参考地址
https://github.com/cheat-engine/cheat-engine/blob/master/Cheat%20Engine/bin/celua.txt

推荐
Hmily 发表于 2023-4-18 14:42
看下这个教程学习下贴图https://www.52pojie.cn/misc.php? ... 29&messageid=36 ,支持markdown模式下贴图,贴图不需要用markdown的图片代码格式,用discuz这个就行。
3#
WSSHH 发表于 2023-4-18 15:09
4#
Daneellee 发表于 2023-4-18 15:19
感谢楼主分享,谢谢!
5#
sqcsl888 发表于 2023-4-18 15:20
我也是闲麻烦,玩的网游,每次重启电脑,基址都会变,要搜索特征码定位。。
6#
sn4il 发表于 2023-4-18 15:52
学习学习
7#
RainYaya 发表于 2023-4-18 17:09
支持支持
8#
 楼主| whiteb1234 发表于 2023-4-18 17:10 |楼主
Hmily 发表于 2023-4-18 14:42
看下这个教程学习下贴图https://www.52pojie.cn/misc.php?mod=faq&action=faq&id=29&messageid=36 ,支持ma ...

好的H大。贴图修改了下
9#
chen696969 发表于 2023-4-18 18:14
谢谢楼主的分析
10#
wan456 发表于 2023-4-18 18:37
界面上的值和实际值不一样,是由数据又转换了一次吧
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 17:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表