【CE进阶】lua脚本使用
▒ 目录 ▒
- 🛫 导读
- 需求
- 开发环境
- 1️⃣ 脚本窗口
- Lua Script
- Lua Engine
- Auto assemble
- 2️⃣ 全局变量
- 3️⃣ 进程
- 当前打开的进程ID
- 系统的进程列表
- 系统的顶部窗口列表
- 4️⃣ 线程
- 5️⃣ 输入设备
- 6️⃣ 屏幕
- 7️⃣ 剪贴板
- 🛬 文章小结
- 📖 参考资料
🛫 导读
需求
CE作为游戏逆向中的头把交椅,本身含有大量功能,其中脚本就是其特色之一。
CE脚本,基于lua
,所以一定要有lua相关基础,相关知识参考lua官网文档:https://www.lua.org/docs.html
CE脚本在lua
基础上添加了很多额外的东西,用于制作辅助工具,今天我们就是针对这些扩展进行介绍,了解CE所提供的各种功能。
开发环境
版本号 | 描述 | |
---|---|---|
文章日期 | 2023-03- | |
操作系统 | Win11 - 21H2 - 22000.1335 | |
Cheat Engine | 7.4 | |
1️⃣ 脚本窗口
CE提供了三种跟脚本有关的窗口,默认打开的界面如下:
其中Auto assemble
是功能最全,使用频率最高的窗口,可以执行汇编。
Lua Script
和Lua Engine
功能相对简单,就是执行lua,而且区别不是特别大。
Lua Engine
窗口,目前小编只使用它做一些脚本的测试工作Lua Script
窗口,则基本是不使用。
Lua Script
从作弊引擎主窗体菜单
Table
中,选择Show Cheat Table Lua Script
菜单,即可打开Lua Script
窗口。
该窗口输入命令,点击执行,会打开
Lua Engine
窗口,并将打印内存显示在Lua Engine
窗口中。(总觉得这个窗口很鸡肋,执行Lua Engine
窗口)。
Lua Engine
Lua Engine
和Auto assemble
窗口都需要通过Memory Viewer
窗口菜单打开。
而打开Memory Viewer
窗口,需要点击主窗口的Memory View
按钮,如下图所示:
- 在
Memory Viewer
窗口中,通过Tools菜单,选择不同的按钮打开Lua Engine
和Auto assemble
窗口。
- 在
Lua Engine
窗口中,我们编写脚本,点击Execute
,即可在Output
栏目中看到执行的结果。
本节内容,主要就是通过该窗口进行讲解的。
Auto assemble
Auto assemble
窗口的打开方式跟Lua Engine
一样,打开后,在窗口中需要先添加代码{$lua}
,表示之后的代码为lua代码,然后再输入lua脚本,执行后会弹出确认框,print语句的内容会输出到Lua Engine
窗口。
PS:
Auto assemble
功能十分复杂,会在以后讲解。
2️⃣ 全局变量
CE的Lua提供了4个全局变量,我们直接打印查看其内容。
代码及含义如下:
-- 包含当前打开的进程的主模块名称(如果没有打开进程,返回的是空字符串)
print(process)
-- 包含启动作弊引擎的训练师路径(仅在作为训练器启动时设置)
print(TrainerOrigin)
-- 主作弊引擎 gui(跟函数getMainForm()的结果一样的)
print(MainForm)
-- 主作弊引擎 gui 的地址列表
print(AddressList)
3️⃣ 进程
当前打开的进程ID
当前打开的进程ID、当前位于顶部的进程的进程 ID
系统的进程列表
返回包含窗口列表(PID - 进程名)的表
代码及含义如下:
pTable = getProcesslist()
-- print在这里无法直接打印出table对象,所以通过string.format将其格式化为字符串。
print(string.format("pTable[idx] = %s", pTable))for k, v in pairs(pTable) doprint("key: ".. k)print(string.format("v = %s", v))
end
系统的顶部窗口列表
返回包含窗口列表(PID - 窗口标题)的表
代码及含义如下:
pTable = getWindowlist()
-- print在这里无法直接打印出table对象,所以通过string.format将其格式化为字符串。
print(string.format("pTable[idx] = %s", pTable))for k, v in pairs(pTable) doprint("key: ".. k)print(string.format("v = %s", v))
end
4️⃣ 线程
CPU 的数目、当前打开的进程的线程列表、当前代码在主线程内运行
代码及含义如下:
-- CPU 的数目
print(getCPUCount())-- 用当前打开的进程的线程列表填充列表对象
local l = createStringlist()
getThreadlist(l)
for i = 1, l.Count doprint(l[i - 1])break -- 打印一个就退出循环
end-- 如果当前代码在主线程内运行,则返回 true
print(inMainThread() and "true" or "false") --: Returns true if the current code is running inside the main thread (6.4+)
5️⃣ 输入设备
当前是否按下指定的键、设置鼠标坐标、模拟鼠标左键按下松开
代码及含义如下:
-- 如果当前按下指定的键,则返回 true
print(isKeyPressed(VK_LWIN) and "true" or "false")if true then-- 设置鼠标坐标setMousePos(340, 440)-- 模拟鼠标左键按下mouse_event(MOUSEEVENTF_LEFTDOWN)sleep(20)-- 模拟鼠标左键松开mouse_event(MOUSEEVENTF_LEFTUP)
endprint(getMousePos()) -- 返回鼠标的 X 和 Y 坐标
6️⃣ 屏幕
屏幕长宽、坐标RGB颜色
代码及含义如下:
print(getScreenHeight()) -- 主屏幕高
print(getScreenWidth()) -- 主屏幕宽
print(getWorkAreaHeight()) -- 主屏幕高(去除任务栏)
print(getWorkAreaWidth()) -- 主屏幕宽(去除任务栏)print(getScreenCanvas()) -- 可用于写入屏幕的 Canvas 对象
print(getPixel(10, 10)) -- 特定屏幕坐标处像素的 RGB 值
7️⃣ 剪贴板
将给定的文本写入剪贴板、从剪贴板读取文本
代码及含义如下:
print("readFromClipboard() = " .. readFromClipboard())
writeToClipboard("khz... 2023-3-20")
print("readFromClipboard() = " .. readFromClipboard())
🛬 文章小结
- print在
Lua Engine
窗口中无法直接打印出table对象,所以通过string.format将其格式化为字符串。- print无法打印bool类型值,可以通过
and or
形式的三位运算符进行显示。
除了上面的函数,CE还提供了很多其他方法:
- 内存
- 类型转换
- 汇编
- 消息:outputDebugString、showMessage
- 快捷键:shortCutToText、textToShortCut
加速
:speedhack_setSpeed、speedhack_getSpeed
📖 参考资料
- CE官网教程 https://wiki.cheatengine.org/index.php?title=Main_Page
- CE官网教程-lua函数和类 https://wiki.cheatengine.org/index.php?title=Lua
- CE的LUA脚本基础教程 https://www.bilibili.com/video/BV1kK411d7to
**ps:**文章中内容仅用于技术交流,请勿用于违规违法行为。
相关文章:

【CE进阶】lua脚本使用
▒ 目录 ▒🛫 导读需求开发环境1️⃣ 脚本窗口Lua ScriptLua EngineAuto assemble2️⃣ 全局变量3️⃣ 进程当前打开的进程ID系统的进程列表系统的顶部窗口列表4️⃣ 线程5️⃣ 输入设备6️⃣ 屏幕7️⃣ 剪贴板🛬 文章小结📖 参考资料&#x…...

【vue2】近期bug收集与整理02
⭐【前言】 在使用vue2构建页面时候,博主遇到的问题难点以及最终的解决方案。 🥳博主:初映CY的前说(前端领域) 🤘本文核心:博主遇到的问题与解决思路 ⭐数据枚举文件的使用 同后端那边发送请求的时,请求返…...
2. 01背包问题
文章目录QuestionIdeasCodeQuestion 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi ,价值是 wi 。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。 输入…...

【Docker】CAdvisor+InfluxDB+Granfana容器监控
文章目录原生命令 docker stats容器监控3剑客CIGCAdvisorInfluxDBGranfanacompose容器编排,一套带走新建目录新建3件套组合的 docker-compose.yml检查配置,有问题才有输出 docker-compose config -q启动docker-compose文件 docker-compose up -d测试浏览…...

k8s 部署nginx 实现集群统一配置,自动更新nginx.conf配置文件 总结
k8s 部署nginx 实现集群统一配置,自动更新nginx.conf配置文件 总结 大纲 1 nginx镜像选择2 创建configmap保存nginx配置文件3 使用inotify监控配置文件变化4 Dockerfile创建5 调整镜像原地址使用阿里云6 创建deploy部署文件部署nginx7 测试使用nginx配置文件同步&…...

动态内存管理(上)——“C”
各位CSDN的uu们你们好呀,今天,小雅兰的内容是动态内存管理噢,下面,让我们进入动态内存管理的世界吧 为什么存在动态内存分配 动态内存函数的介绍 malloc free calloc realloc 常见的动态内存错误 为什么存在动态内存分配 我们已…...

GPT-4发布,这类人才告急,大厂月薪10W+疯抢
ChatGPT最近彻底火出圈,各行各业都在争相报道,甚至连很多官媒都下场“跟风”。ChatGPT的瓜还没吃完,平地一声雷,GPT-4又重磅发布! 很多小伙伴瑟瑟发抖:“AI会不会跟自己抢饭碗啊?” 关于“如何…...

MySQL数据库实现主主同步
前言 MySQL主主同步实际上是在主从同步的基础上将从数据库也提升成主数据库,让它们可以互相读写数据库,从数据库变成主数据库;主从相互授权连接,读取对方binlog日志并更新到本地数据库的过程,只要对方数据改变,自己就…...
JavaScript传参的6种方式
JavaScript传参的方式1. 传递基本类型参数2. 传递对象类型参数3. 使用解构赋值传递参数4. 使用展开运算符传递参数5. 使用可选参数6. 使用剩余参数JavaScript是一门非常灵活的语言,其参数传递方式也同样灵活。在本篇文章中,会详细介绍JavaScript中的参数…...

蓝桥之统计子矩阵
样例说明 满足条件的子矩阵一共有 19 , 包含: 大小为 11 的有 10 个。 大小为 12 的有 3 个。 大小为13 的有 2 个。 大小为 14 的有 1 个。 大小为 21 的有 3 个。 前缀和二维数组 前缀和暴力搜索 import java.util.*; public class Main{private static int ans0;pub…...
Java的基础面试题
一.java基础1.JDK和JRE有什么区别?JDK是java开发工具包,JRE是java运行时环境(包括Java基础类库,java虚拟机)2.和equals的区别是什么?比较的是两者的地址值,equals比较的是两者的内容是否一样3.两…...

J1939故障码诊断说明
1:1939整体协议说明 这里主要说明1939不同的协议,对应不同的网络分层 注意了,这里只进行文档解析说明,具体查看去搜素协议的关键字进行理解 2:DMx和FMI 说明 想知道每个代号的具体含义,可以去 saeJ1939…...

XCPC第十三站,贪心问题
一.区间选点 我们采取这样的策略来选点:step(1)将区间按照右端点的大小从小到大排序;step(2)从前往后依次枚举每个区间,如果当前区间中已经包含点,直接pass,否则选当前区…...

一文让你吃透 Vue3中的组件间通讯 【一篇通】
文章目录前情回顾前言1. 父组件 > 子组件通讯传递2. 子组件 > 父组件通讯传递3. 爷孙组件,后代组件通讯数据总结前情回顾 在本专栏前一章节中,我为大家带来了 Vue3 新特性变化上手指南 的归纳梳理,主要介绍了 Vue3 的 Proxy 响应式原理…...
EVE遭遇大规模DDOS攻击,玩家和官方都傻眼了
如果你恰好是一名《星战前夜》(EVE)的国际服玩家(虽然这个几率很小),又恰好因为疫情一直待在家里,那你就真是倒霉透顶了。因为从1月底开始,EVE的服务器就一直受到大规模的DDOS攻击,而…...

【数据结构】二叉树及相关习题详解
新年新气象! 祝大家兔年 财源滚滚! 万事胜意! 文章目录前言1. 树的一些基础概念1.1 树的一些基本概念1.2 树的一些重要概念2. 二叉树的一些基本概念2.1 二叉树的结构2.2 两种特殊的二叉树3. 二叉树的性质4. 二叉树的存储5. 二叉树的基本操作5.1 构造一棵二叉树5.2 二叉树的遍历…...

锂电池充电的同时也能放电吗?
大家应该都有这样经历,我们的手机在充电的同时也能边使用,有的同学就会说了,这是因为手机电池在充电的同时也在放电。如果这样想我们可能就把锂电池类比了一个蓄水池,以为它在进水的同时也能出水,其实这个比喻是错误的…...

通信工程考研英语复试专有名词翻译
中文英文频分多址Frequency Division Multiple Access码分多址Code Division Multiple Access时分多址Time Division Multiple Access移动通信mobile communication人工智能artificial intelligence水声通信Middle-Range Uwa Communication正交频分复用Orthogonal frequency di…...

注意力机制(四):多头注意力
专栏:神经网络复现目录 注意力机制 注意力机制(Attention Mechanism)是一种人工智能技术,它可以让神经网络在处理序列数据时,专注于关键信息的部分,同时忽略不重要的部分。在自然语言处理、计算机视觉、语…...
【2023Unity游戏开发教程】零基础带你从小白到超神19——射线检测
文章目录 射线检测从某点发射一条射线从摄像机发射一条射线射线检测 游戏中的红外线,默认肉眼是看不到的,从某个初始点开始,沿着特定的方向发射一条不可见且无限长的射线,通过此射线检测是否有任何模型添加了Collider碰撞器组件。一旦检测到碰撞,停止射线继续发射。 碰撞检…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...