冒险岛079

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2|回复: 0

Day 12 -- Lua 脚本与实战:从学徒到出院总结

[复制链接]

701

主题

13

回帖

2235

积分

管理员

积分
2235
发表于 4 小时前 | 显示全部楼层 |阅读模式
Day 12 -- Lua 脚本与实战:从学徒到出院总结
Cheat Engine 从入门到住院 · Day 12

最后一天了。如果你一路跟到这里,恭喜——你已经从"什么是内存"的小白,成长为能写注入脚本、追踪多级指针、做敌我识别的 CE 用户了。

今天有两个任务:学习 CE 的 Lua 脚本引擎(最后一块拼图),然后做一个完整的系列回顾和实战指南。

━━━━━━━━━━━━━━━━━━━━

本文你将学到

  • CE 中 Lua 脚本的基本用法
  • Lua 和 Auto Assembler 的配合
  • 用 Lua 实现复杂的修改逻辑
  • 12 天所学技能的完整知识树
  • 继续深入学习的路线图
    阅读时间:15 分钟 | 实操时间:25 分钟 | 难度:进阶

    ━━━━━━━━━━━━━━━━━━━━

    为什么需要 Lua

    Auto Assembler 让你能写汇编代码注入游戏,但汇编语言有一个天然局限:它太"低级"了。

    想在游戏里实现一个"按 F5 保存当前坐标,按 F8 传送回去"的功能?用纯汇编写,光是浮点数运算和条件判断就能让你怀疑人生。

    Lua 是一种轻量级的脚本语言,CE 内置了完整的 Lua 引擎。用 Lua 你可以:

  • 操作 CE 的 GUI 界面(自动化扫描、创建表单)
  • 读写内存(和汇编等效,但语法更友好)
  • 处理复杂逻辑(循环、条件、函数调用)
  • 创建定时器和热键
  • 和 Auto Assembler 脚本交互

    ━━━━━━━━━━━━━━━━━━━━

    CE Lua 快速入门

    打开 Lua 引擎

    在 CE 主界面,菜单 Table → Show Cheat Table Lua Script,或按 Ctrl+Alt+L

    弹出 Lua 脚本编辑器。在这里写代码,点 Execute 执行。

    基本内存操作
    1. -- 读取内存
    2. local value = readInteger(0x0A001018)        -- 读取 4 字节整数
    3. local fvalue = readFloat(0x0A001018)          -- 读取 Float
    4. local dvalue = readDouble(0x0A001018)         -- 读取 Double
    5. local str = readString(0x0A001018, 20)        -- 读取字符串(最多 20 字节)
    6. -- 写入内存
    7. writeInteger(0x0A001018, 99999)               -- 写入整数
    8. writeFloat(0x0A001018, 100.0)                 -- 写入 Float
    9. writeDouble(0x0A001018, 100.0)                -- 写入 Double
    10. writeString(0x0A001018, "Hello")              -- 写入字符串
    11. -- 通过符号名操作(如果你在 AA 脚本中注册了符号)
    12. local addr = getAddress("playerHealth")
    13. writeInteger(addr, 99999)
    复制代码

    获取模块地址
    1. -- 获取模块基址
    2. local base = getAddress("Tutorial-x86_64.exe")
    3. -- 使用模块偏移
    4. local addr = getAddress("Tutorial-x86_64.exe+1A2B3C")
    复制代码

    指针解析
    1. -- 读取多级指针
    2. -- 等价于 [[[[base+0]+10]+14]+18]
    3. local base = getAddress("Tutorial-x86_64.exe+1A2B3C")
    4. local level1 = readQword(base)               -- 读取 8 字节指针值
    5. local level2 = readQword(level1 + 0x10)
    6. local level3 = readQword(level2 + 0x14)
    7. local health_addr = level3 + 0x18
    8. local health = readInteger(health_addr)
    9. print("Health: " .. health)
    复制代码

    ━━━━━━━━━━━━━━━━━━━━

    实用 Lua 脚本示例

    示例一:定时锁血
    1. -- 每 100 毫秒把血量写回 99999
    2. local timer = createTimer(nil)
    3. timer.Interval = 100
    4. timer.OnTimer = function(t)
    5.   local addr = getAddress("Tutorial-x86_64.exe+1A2B3C")
    6.   local ptr = readQword(addr)
    7.   if ptr and ptr ~= 0 then
    8.     writeInteger(ptr + 0x18, 99999)
    9.   end
    10. end
    11. timer.Enabled = true
    12. -- 停止:timer.Enabled = false
    复制代码

    示例二:热键控制
    1. -- 按 F5 启用/禁用无敌模式
    2. local godmode = false
    3. local function toggleGodmode()
    4.   godmode = not godmode
    5.   if godmode then
    6.     print("Godmode ON")
    7.     -- 启用无敌的逻辑
    8.   else
    9.     print("Godmode OFF")
    10.     -- 禁用无敌的逻辑
    11.   end
    12. end
    13. -- 注册热键(VK_F5 = 116)
    14. local hotkey = createHotkey(toggleGodmode, VK_F5)
    复制代码

    示例三:自动扫描
    1. -- 用 Lua 自动执行一次扫描
    2. local scan = createMemScan(nil)
    3. scan.firstScan(
    4.   soExactValue,       -- 扫描类型
    5.   vtDword,            -- 值类型
    6.   rtRounded,          -- 舍入方式
    7.   "100",              -- 要搜索的值
    8.   "",                 -- 第二个值(范围搜索用)
    9.   0, 0x7FFFFFFFFFFF,  -- 搜索范围
    10.   "",                 -- 保护标志
    11.   fsmNotAligned,      -- 对齐方式
    12.   "1",                -- 快速扫描对齐值
    13.   true,               -- 最后一位数字是否进行范围检查
    14.   false,              -- 百分比
    15.   false               -- 是否使用线程
    16. )
    17. scan.waitTillDone()
    18. print("Found: " .. scan.getAttachedFoundlist().Count)
    复制代码

    ━━━━━━━━━━━━━━━━━━━━

    Lua + Auto Assembler 联动

    AA 脚本中可以嵌入 Lua 代码:
    1. {$lua}
    2. -- 这里是 Lua 代码
    3. local base = getAddress("Tutorial-x86_64.exe")
    4. return string.format("define(BASE,%X)", base)
    5. {$asm}
    6. // 现在可以在汇编中使用 BASE 符号
    7. // BASE 的值由 Lua 动态计算得出
    复制代码
    1. {$lua}
    复制代码
    1. {$asm}
    复制代码
    标记用于在 AA 脚本中切换语言。Lua 代码的返回值会被当作 AA 指令处理。

    这种联动的强大之处在于:你可以用 Lua 做复杂的计算和逻辑判断,生成 AA 代码。

    ━━━━━━━━━━━━━━━━━━━━

    CE 的其他实用功能

    在结束前,简要介绍几个我们系列中没有深入展开但很实用的 CE 功能:

    Speedhack(变速)

    CE 可以修改游戏的时间流速——加速或减速。对于需要等待的游戏机制很有用。

    菜单 Edit → Settings → Speedhack,启用后在 CE 主界面右下角出现速度控制。

    Trainer Maker

    CE 可以把你的 Cheat Table 打包成独立的
    1. .exe
    复制代码
    修改器,不需要安装 CE 就能使用。

    菜单 File → Create generic trainer from cheat table。

    Dissect Code

    反汇编视图中,右键一个函数调用 → "Follow",可以跳转到函数内部。配合断点调试,可以深入分析游戏的代码逻辑。

    Structure Compare

    在 Structure Dissect 中,你可以同时打开玩家和敌人的结构体进行对比,快速找到它们之间的差异字段。

    ━━━━━━━━━━━━━━━━━━━━

    12 天知识树总览

    让我们回顾一下整个系列的知识体系:
    1. Day 1:  安装 CE,认识界面,附加进程
    2. Day 2:  精确数值扫描(Exact Value)
    3. Day 3:  未知初始值搜索(Unknown initial value + Changed/Unchanged)
    4. Day 4:  浮点数搜索(Float / Double)
    5. Day 5:  代码查找器(Find what writes/accesses)+ NOP
    6. Day 6:  单级指针(静态基址 + 偏移量)
    7. Day 7:  代码注入(Auto Assembler + JMP 跳板)
    8. Day 8:  多级指针(逐层追踪指针链)
    9. Day 9:  共享代码与敌我识别(条件注入)
    10. Day 10: 指针扫描(自动化指针链查找 + Rescan)
    11. Day 11: Auto Assembler 进阶(AOB 扫描 + Cheat Table)
    12. Day 12: Lua 脚本 + 系列总结
    复制代码

    按能力层级划分:

    | 层级 | 技能 | 对应天数 |
    |------|------|---------|
    | 青铜 | 精确搜索、修改数值、冻结 | Day 1-2 |
    | 白银 | 模糊搜索、浮点数、代码查找 | Day 3-5 |
    | 黄金 | 指针、代码注入 | Day 6-7 |
    | 铂金 | 多级指针、敌我识别 | Day 8-9 |
    | 钻石 | 指针扫描、AA 进阶、Lua 脚本 | Day 10-12 |

    ━━━━━━━━━━━━━━━━━━━━

    继续深入的方向

    如果你想在逆向工程的路上继续走下去,这是一些推荐的方向:

    方向一:游戏逆向进阶

  • 学习 x86/x64 汇编语言(推荐资源:《Assembly Language for x86 Processors》)
  • 了解 Windows PE 文件格式
  • 学习使用 IDA Pro 或 Ghidra(专业反汇编工具)
  • 研究游戏引擎的内部结构(Unity Mono、Unreal Engine)

    方向二:安全研究

  • 漏洞分析与利用(CTF 竞赛是很好的练习场)
  • 恶意软件分析
  • 软件保护与反逆向

    方向三:工具开发

  • 用 C/C++ 编写自己的内存修改工具
  • 学习 Windows API(ReadProcessMemory、WriteProcessMemory)
  • 开发游戏修改器 / Trainer

    ━━━━━━━━━━━━━━━━━━━━

    法律与道德声明

    在结束这个系列之前,再次强调:

  • 本系列所有内容仅用于教育目的。所有演示基于 CE 自带的 Tutorial 程序。
  • 不要使用 CE 修改在线/多人游戏。这违反用户协议,损害其他玩家的体验,某些地区还可能违法。
  • 不要破解商业软件。这是侵犯知识产权的行为。
  • 逆向工程的合法用途包括:安全研究、互操作性分析、教育学习、CTF 竞赛等。
  • CE 本身是合法的开源工具,问题在于使用方式。

    知识本身没有善恶,关键在于你如何使用它。

    ━━━━━━━━━━━━━━━━━━━━

    出院总结

    12 天前你走进这间"手术室",手里连手术刀都不会拿。

    现在你已经能:
  • 在几百万个内存地址中精准定位目标数据
  • 追踪多级指针找到数据的"永久住址"
  • 阅读和修改游戏的汇编代码
  • 编写注入脚本改变游戏逻辑
  • 做敌我识别实现精确控制
  • 用指针扫描自动化繁琐的工作
  • 用 Lua 脚本实现复杂功能

    从入门到住院,你走完了整条路。

    现在,出院。

    去做点有趣的事情吧——记住,只在允许的范围内。

    ━━━━━━━━━━━━━━━━━━━━

    Cheat Engine 从入门到住院 · 全系列完结

    感谢你的阅读。如果这个系列对你有帮助,欢迎转发给同样对逆向工程感兴趣的朋友。
  • 您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    果子博客
    扫码关注微信公众号

    Archiver|手机版|小黑屋|风叶林

    GMT+8, 2026-3-29 20:28 , Processed in 0.149908 second(s), 20 queries .

    Powered by 风叶林

    © 2001-2026 Discuz! Team.

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