CE修改Eternium永恒之金【LUA篇】

目录

  • CE修改Eternium永恒之金【LUA篇】
    • 一、加密分析
    • 二、使用LUA直接修改数据
      • 1. 找到加密数值的地址
      • 2. 使用CE运行LUA脚本
      • 3. 一些重要数据的地址
    • 三、不使用LUA直接修改数据
      • 1. 去除数据验证
      • 2. 自定义异或表使得数据明文存储
    • 四、补充说明

本文将介绍如何直接修改钻石、金币、等级、冠军等级、装扮点数和新版本黄球的数量

一、加密分析

前面两篇教程中我介绍了通过修改任务奖励或者修改邮件物品数量来修改钻石数量而不是直接修改,是因为直接搜索得到的数据不是真正代表钻石数量的数据。直接修改的话会逐渐恢复成原来的数值。真正的地址中的数据应该是经过加密了。有没有办法找出加密算法和加密值的地址并对其进行修改呢?

我们先直接搜索钻石数,看看是什么访问、改变了这些地址:

这三条语句都属于函数Eternium.s86+211D0,用IDA看一下:

简单分析:

上图4个紫圈内的语句对ECX赋值。第四个是将ECX置零,第一、第三个紫圈中的函数都调用了第二个紫圈中的函数:


让我们看看第二个紫圈中这个函数sub_1000AD60:


其中dword_1071C860指向的是一个用于异或的数组,暂且称之为异或表吧:

一个4字节的整数加密存储后占16字节。DWORD指针V1指向前4字节,5至8字节是加密(异或)后的数据,9至12字节用于存储异或的数在异或表中的索引,最后4字节则是对加密后的数据的验证。

函数的逻辑大致是这样的:

至此,我们已经搞清楚了这些数据的加密方式,可以开始尝试查找数据并修改了。

二、使用LUA直接修改数据

1. 找到加密数值的地址

要想找到加密数据的地址不难,只要在CE中找到读取加密数据的指令,再查看指令访问的地址即可。

找到很多地址,其中一些还在不断地变化:

2. 使用CE运行LUA脚本

由于地址存放的是加密数据,再加上部分数据不断变化,如何确认这是我们要找的地址呢?我们可以通过LUA实现对数据的读取与写入:


下面是我写的用于查询和修改的LUA脚本,代码水平一般,大伙凑合着看。另外建议将代码复制到编辑器里看,Markdown的代码块似乎不支持lua的语法高亮。

-- 读取异或表
XORTableAddress = getAddress("Eternium.s86+71C860")
XORTable = {}
for i=1, 64 doXORTable[i] = readInteger(XORTableAddress + i*4-4)
end-- 读取某地址加密的数据
function ReadEncrypted(address)pause()encrypted = readInteger(address)XORIndex = readInteger(address + 4)XORCheck = readInteger(address + 8)unpause()if XORIndex >= 0 and XORIndex <= 63 thenif ((0x186557FB * (encrypted + XORTable[(XORIndex ~ 0x3F) + 1])) & 0xFFFFFFFF) == XORCheck thenresult = encrypted ~ XORTable[XORIndex + 1]print(result)returnendendprint("Fail, wrong address!")return
end-- 将数值写入指定地址
function WriteEncrypted(address, number)pause()encrypted = readInteger(address)XORIndex = readInteger(address + 4)XORCheck = readInteger(address + 8)if XORIndex >= 0 and XORIndex <= 63 thenif ((0x186557FB * (encrypted + XORTable[(XORIndex ~ 0x3F) + 1])) & 0xFFFFFFFF) == XORCheck thenencrypted = number ~ XORTable[XORIndex + 1]XORCheck = (0x186557FB * (encrypted + XORTable[(XORIndex ~ 0x3F) + 1])) & 0xFFFFFFFFwriteInteger(address, encrypted)writeInteger(address + 8, XORCheck)print("Success!")unpause()returnendendprint("Fail, wrong address!")unpause()return
end

测试一下,读取之前列表的第一个地址,与钻石数量一直:


尝试进行修改:


修改成功!

3. 一些重要数据的地址

同理我们可以用相同的方法找到其他数据的地址。
先找和钻石一样一直在变化的数值:
右键点击钻石数量地址 => 找出是什么改写了这个地址 => 显示反汇编程序 => 右键点击代码 => 找出指令访问的地址,可以看到这样不停变化的数有5个,经过我的验证,前四个分别代表钻石、金币、冠军等级、等级,第五个尚不确定。


再浏览钻石数量的地址附近区域,装扮点数的地址位于钻石地址+40h处,新版本黄球的地址位于钻石地址+50h处



使用LUA读取、修改数据的方法到此结束。

三、不使用LUA直接修改数据

个人觉得上述使用LUA脚本读取、修改数据的方法有点麻烦,下面提供一种懒人修改法,不过不确定是否稳定。懒得折腾lua的玩家可以试试看。

1. 去除数据验证

通过上面的分析我们知道,每组加密数据中最后一个数作为验证,一旦加密的数据验证不通过则将数据置零。既然已经找到了用于验证的代码,我们就可以通过注入的方式移除验证。
找到比较计算出的验证位和存储的验证位的指令。

AOB注入:

激活脚本后直接修改加密的数据试试看:

钻石数量改变了,并没有置零。此方法可以,但我不确定是否稳定。

2. 自定义异或表使得数据明文存储

游戏数据加密只是通过简单的异或,那么如果用于异或的数为0,异或的结果就与异或前相同,是不是就相当于明文存储?

在逆向分析的过程中我发现,每次游戏启动的时候,异或表都会随机变化一次:

这个函数在程序刚开始运行的时候被调用,所以我们要先写好代码注入的脚本,再重启游戏运行脚本。

同样使用AOB注入:

重新启动游戏。注意:由于游戏刚开始运行的时候就会执行本函数,所以启动游戏的时候,要以最快的速度最小化游戏窗口到任务栏暂停游戏进程,之后打开CE选择游戏进程并激活脚本,最后再点开游戏窗口。


可以看到已经成功修改了异或表中的值。开启去除异或验证的脚本之后,尝试搜索明文数据并修改:


修改成功

四、补充说明

  1. 国外有大佬做出使用GG修改器运行的lua脚本并发在了GG修改器的论坛上,功能挺多并且还在不断更新,有兴趣的话可以看看。
  2. 我尝试对加密的钻石数量等地址进行指针扫描,但是并没有得到可用的结果。所以在文中采用通过指令找数据地址的方法。有兴趣的可以尝试找指针。
  3. CE的Lua文档在帮助里面,有问题的可以自行查询。
  4. 文中可能会有一些语病和措辞不当,还请多多包涵。如果发现错误或者有不明白的地方可以在下面评论,有时间我都会回复的。
  5. 游戏或CE的版本不同可能导致修改失败。
  6. 文中一些工具的下载地址:
    Cheat Engine 7.1 (官网)
    IDA pro (吾爱破解)
  7. 文中游戏版本1.5.5,版本不同指令地址也不同。Eternium.s86文件位于游戏安装目录,查看的时候可能需要用到安全选项卡。

CE修改Eternium永恒之金【LUA篇】相关推荐

  1. CE修改Eternium永恒之金【基础篇】

    CE修改Eternium永恒之金[基础篇] 目录 CE修改Eternium永恒之金[基础篇] 游戏/工具下载: 一.修改金币.宝石 二.修改制造的装备等级与物品数量 三.修改邮件物品的数量 总结 游戏 ...

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

    目录 1.跳关(任意选择关卡) 2.修改金币值 3.实现自动收集阳光 上一期教程中,我们学习了寻找植物大战僵尸僵尸距离基址.实现"秒杀"僵尸的方法.PS:上篇链接:[CE入门教程] ...

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

    目录 1.单卡片无CD 1.1 思路一 1.2 思路二 2.全卡片无CD 3.豌豆射手射速修改(修改植物射速) 4.实现豌豆射手发射"玉米加农炮"(思路) 上一期教程中,我们学习了 ...

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

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

  5. 【网安】工具篇:CE修改器详细使用指南(必看)

    Cheat Enginee(CE)的详细使用指南 文章目录 Cheat Enginee(CE)的详细使用指南 1 下载和安装说明 1.1下载地址 1.2安装教程 1.2.1网站下载 1.2.2解压压缩 ...

  6. 方舟服务器能不能用ce修改器,方舟生存进化CE修改器代码大全

    虽然现在方舟生存进化现在推出各种8项.16项修改器,但玩家们最喜欢的还是CE修改器,不过最近,小编收到一些玩家反映说CE修改器使用不是非常顺手,所以这里小编特地为大家带来了方舟生存进化CE修改器作弊表 ...

  7. ce修改器我的世界服务器,如何用ce修改我的世界饥饿度 | 手游网游页游攻略大全...

    发布时间:2016-01-09 大家在玩游戏遇到了看不懂的图文或是过不去的关卡.不熟练的技巧攻略的时候是不是很着急呢?没关系,游戏攻略吧为你解答.本文给大家分享一下关于中的一些小技巧,主要是帮助各位玩 ...

  8. 【游戏客户端面试题干货】--2021年最新游戏客户端面试干货(lua篇)

      [游戏客户端面试题干货]-- 2021年度最新游戏客户端面试干货(lua篇)     大家好,我是Lampard~~   经过春招一番艰苦奋战之后,我终于是进入了心仪的公司.   今天给大家分享一 ...

  9. 【游戏客户端与服务器面试题】-- 2022年最新游戏客户端与服务器面试(lua篇持续更新)

    [游戏客户端与服务器面试题干货]-- 2022年度最新游戏客户端面试干货(lua篇) 文章目录 一.Lua的8种数据类型 (1) nil 类型 (2) boolean类型 (3) number类型 1 ...

最新文章

  1. 深度学习-Tensorflow2.2-图像处理{10}-图像定位/优化/图运算/及GPU优化等-22
  2. pytorch 之 有关交叉熵函数使用的几点说明
  3. 编译器在处理const变量跟一般变量时的区别
  4. 如何获取url中的参数并传递给iframe中的报表
  5. docker利用Dockerfile来制作镜像
  6. 实战演练丨Oracle死锁案例分析,看完你就懂了
  7. mqtt server python_Python使用mqtt极简例子
  8. hadoop3.1集成tez和tez-ui
  9. asp.net DataTable导出 excel的方法记录(第三方)
  10. 服务器重装系统u盘启动不了怎么办,重装系统时BIOS不识别U盘启动盘怎么办
  11. Spring全面详解(学习总结)
  12. 如何搭建简易的Wiki系统
  13. 平面图最小割 BZOJ 2006
  14. 华为防火墙安全区域介绍及配置
  15. 从身份证号获取身份证信息
  16. Remix部署契约时出现错误:creation of Ballot errored: Error encoding arguments: Error: expected array value (ar
  17. Introduction to Modern cryptograhy阅读笔记(二)
  18. ECCV2020超分辨率方向论文整理笔记
  19. Python-定时爬取指定城市天气(一)-发送给关心的微信好友
  20. no transaction is in progresss

热门文章

  1. WebDriverPool浏览器驱动池 减少驱动频繁打开和关闭引起的资源损耗
  2. MySQL、JDBC、HTML、CSS、JavaScript、jQuery、tomcat、Http、Servlet、JSP、EL、JSTL、Maven、Cookie、Session(框架第一部分)
  3. 查看spark版本linux,如何查看spark版本和scala版本
  4. Java代码混淆工具ProGuard
  5. 基于python的智能文本分析 书_推荐一本Python数据分析必备工具书
  6. linux重要的文件操作
  7. MS SQL Server 数据库连接字符串详解
  8. 微信小程序阅读器功能
  9. 计算机系学生橱窗分析结果怎么写,2015年高职学生职业生涯规划书
  10. GEO数据库的使用(一)