Steam游戏《Zengeon(神明在上)》修改器制作-[先使用CE写,之后有时间的话改用C#](2020年寒假小目标06)

日期:2020.01.30

博客期:138

星期四

  【温馨提示】:

    只是想要修改器的网友,可以直接点击此链接下载;

    只是想拿CT文件的网友,可以直接点击此链接下载;

    没有博客园账号的网友,可以将页面下滑到博客末尾.....

    Git Hub下载地址https://github.com/TwoStarsGodNightSky/GameTrainer

    如果修改器失效了,你们可以在博客园本页直接评论,也可以给我发邮件告诉我,就是不要到百度云上去说了,百度云我好久不登录一次的!大家给我发邮件的话,记得要注明是哪个游戏,内容当然是越详细越好啦!邮箱地址:nightskysxs@163.com

     防爬取部分:https://www.cnblogs.com/onepersonwholive/p/12241956.html

  嗯,跟《九张羊皮纸》一样,我找不到网上的修改器,就下定决心自己来做了,目前找到的可以修改的项如下:

  基础地址:"UnityPlayer.dll"+01540108 

  1、玩家本局的金钱数目

  基址 + 20 + 0 + 30 + 30 + 28 + 28 + BC

  2、玩家本局的经验值

  基址 + 20 + 0 + 30 + 30 + 28 + 28 + B8

  其余的呢?1、2号物品数量好像也是有地址的,但奈何我太菜了,我找不到能够通过基地址进行多次偏转的指向物品数量的地址!

  之前也确实找到了,物品使用无冷却的地址,但是使用太快,物品用完了,也没能找到对应地址。

  对了,在无尽模式下中间那个要保护的太极魔方的血量值也是可以改的,但你一直玩下去会发现特别没劲,我之前都把血量改的不能再减了,但这样游戏就Game Over不了,也就不能停下来了,我毕竟还有其他工作要做嘛!

  对应完整的CT文件下载地址:https://files.cnblogs.com/files/onepersonwholive/Zengeon2.zip

  使用CE制作的修改器也完成了,目前只有两项功能,不过我发现只用这两项就基本无敌了,刷关刷成就,菜鸟也一样行!

  修改器下载地址:https://files.cnblogs.com/files/onepersonwholive/Zengeon-cheater-V1.210.zip

  运行截图:

     提示:

  进入游戏以后,按F1、F2分别可以实现两项功能,加入新比赛以后需要重复按!无限经验的F2按下后,在游戏中吸收任意量经验值以后实现(然后使用玉净瓶恢复50%血量,你懂的)

  游戏效果:

   //-----------------【2020-02-13更新内容】

  有网友提醒我修改器不能用了,我又回去做了一个,(原来是游戏更新了),唉~我这边都不知道!还是这两项功能!修改器的下载链接我已经更新,请大家放心使用!

  之后我去研究了一下血量值,如果你使用 CE 修改器的话,搜出来应该有 3 个值,一个对应血量条的演示,一个对应血量值的展示,另外一个没参透,反正不是真正的血量值地址,那我们应该是找不到那个地址了(很可能是存在了寄存器里,提供调用,或者有相应的set、get来取值,或者真正的血量值与我们展示的血量值是一个参数关系),那都不要紧,我们真正要用的是血量赋值!使用查看修改地址的汇编代码发现 有 mov [r14+40],eax ,这是赋值用的。我们可用看到是 eax (寄存器里的真实血量值),所以我们不妨倒过来改成 mov eax,[r14+40] ,这样就不是该我们的假数据了!

  演示:

  【END】

  //-----------------【2020-03-22更新内容】

  Hello , 我回来了;我看到 Steam 上,自己试了一下修改器,发现又不行了,于是开始这次的计划。(我看到 羊皮纸的修改器还是访问的比较多,这个游戏可能就是比较冷门吧,我看 WeMod 上,也没几个推荐的)

不过博主会加油的!!!首先,大家看到上面的那个图片是好几个星期以前我在当时的特殊环境下实现的,当我重启游戏以后,0血还是要亡!所以这次我们实在一点儿,争取使用全汇编!

  我在这里先更新一下基础地址:(还是只有 EXP 和 MONEY)

    1、首先搜索到金钱值的普通地址(这个大家都会啊)

    2、搜到以后选择 对这个地址进行指针扫描,选择 最大级别 为 8 ,点击确定

     3、关闭并重启游戏,进入一局游戏,找到金钱值,并根据 金钱值 筛选 多级地址:

    可以得到,如下图所示的地址:(当然还有很多这样的地址,随便用一个就行)

     4、我们把 最后一级偏转 BC 减去 4 ,也就是让它变成 B8(点击BC左边的 < 按钮也可以),这样我们就找到了经验的地址(其实现在我们就可以改值完成修改了)

     5、以我的经验得知,金钱可以设值成 999999 ,经验需要设值成 90000010(100满级)

     999999 转 16 进制 是 F423F,90000010 转 16 进制 是 5D4A8A

     6、我是真的想去做无敌效果,但条件真的让我这个小白很难受!怎么回事呢?我来简要的说一下过程吧!

      6-1、开始搜索血量值,你可以找到 3 个地址:

       6-2、分析得出结论——这三个值没有一个可以保证血量不减

        尾号是 8 和 较大的尾号为 0 的地址能够控制血量条显示的地址(不是真实的血量地址)

        剩余的那个地址也不行,它们的组合也不行

      6-3、开始查看内存,我们分析一下数据(注意仔细看我查的是哪个数据——你可以在记录完这三个地址以后重新开启一轮游戏,重新搜索这三个值,哪两个是没变的?搜另外那一个)

       6-4、搜到的结果是两条语句

       6-5、我们选择 显示反汇编程序,并记录此地址到书签,对着这段代码右击,选择 “选择函数”

       6-6、对开始的一句代码右击,选 “转到地址”,复制此地址 (我的是 242DD0E8640)

       6-7、选择 菜单栏 ---> 搜索 ---> 查找汇编码,空白处输入 刚才复制的地址 ,让 “从 ... 至 ... ” 的范围从 242DD0E0000开始 (将后四位归 0),争取能够查到就行,多少其实无所谓

       6-8、可以看到什么也没查到,说明程序没有跳转到 该地址,当程序查到 复制的地址 的时候基本上就可以停止查询了。

       6-9、我们给刚才的 mov [r14+40],ecx 一句添加断点,回到游戏里让怪打我们一下,游戏被CE暂停以后,进来看右侧的寄存器找 r11

        6-10、找到 r11 以后双击复制,发现它就是从 跳转的,242DD0E8640【尴尬】,我们这次从 242DD0B0000 开始搜索地址

 

        6-11、很好,我们找到了从哪里可以跳转到 242DD0E8640,那实际程序走的哪一条路线呢?我们双击对上面两条地址也添加断点,点击游戏继续,让敌人再打我们一下。可以找到是 242DD0DFB896 !

       6-12、恰逢此时右侧寄存器 rdx 的值是敌人对我们的伤害值 F (十进制:15),我们可以在 查看内存的代码表从 242DD0DFB896 开始往上找 与 rdx 有关的代码

        6-13、我们可以看到 movsxd 是赋值语句,所以伤害是来源于此时的 [ rbp - 50 ],开始对此代码进行汇编

        6-14、基础的 菜单栏 ---> 工具 ---> 自动汇编  (注意选中我上图中选中的语句), 在弹出的窗口选择 菜单栏 ---> 模板 ----> CT表框架代码 ,之后是 菜单栏 ---> 模板 ----> 代码注入 ----> 确定

        6-15、在 originalcode: 后面加一句 赋值 mov dword ptr [rbp-50],0

        整体代码:

 1 [ENABLE]
 2 //code from here to '[DISABLE]' will be used to enable the cheat
 3 alloc(newmem,2048,242DD0DFB7E) 
 4 label(returnhere)
 5 label(originalcode)
 6 label(exit)
 7 
 8 newmem: //this is allocated memory, you have read,write,execute access
 9 //place your code here
10 
11 originalcode:
12 mov dword ptr [rbp-50],0
13 movsxd  rdx,dword ptr [rbp-50]
14 movzx r9d,byte ptr [rbp-58]
15 
16 exit:
17 jmp returnhere
18 
19 242DD0DFB7E:
20 jmp newmem
21 nop 4
22 returnhere:
23 
24 
25  
26  
27 [DISABLE]
28 //code from here till the end of the code will be used to disable the cheat
29 dealloc(newmem)
30 242DD0DFB7E:
31 movsxd  rdx,dword ptr [rbp-50]
32 movzx r9d,byte ptr [rbp-58]
33 //Alt: db 48 63 55 B0 44 0F B6 4D A8
无敌

       6-16、选择 菜单栏 ---> 文件 ---> 分配到当前 CT表

       6-17、现在你可以看到效果了。

       6-18、我做到这里的时候很开心,但是现实往往没有这么美好,实际上这部分代码地址是会变的,我还需要去找地址来索引,就是说你重启一下 movsxd rdx.... 那句就不一定在那个位置上了,确实让我比较难受,好不容易探索出这么多内容,这个找跳转地址的方法也是自己摸索的,真的是效率很慢,小白嘛!

      如果我能建立起索引就好了。

  【END】

  //-----------------【2020-03-23更新内容】

  我现在真的是好兴奋啊!因为那个索引我还真建立出来了!

  

   到这里我们可以得到该函数的 第1句代码 —— push rbp ,而这个地址最终的位置是这个 第一句代码的地址 + 16E 的位置处,也就是说我们要在 “ 第一句代码的地址 + 16E 的位置处 ” 这一位置进行昨天的汇编代码,或者,你直接进入内存空间输入以下代码就好:

 1 [ENABLE]
 2 alloc(newmem,2048,[[[[[[["mono-2.0-bdwgc.dll"+004A33E0]+288]+0]+60]+50]+70]+E8]+16E)
 3 label(returnhere)
 4 label(originalcode)
 5 label(exit)
 6 
 7 newmem:
 8 
 9 originalcode:
10 mov dword ptr [rbp-50],0
11 movsxd  rdx,dword ptr [rbp-50]
12 movzx r9d,byte ptr [rbp-58]
13 
14 exit:
15 jmp returnhere
16 
17 [[[[[[["mono-2.0-bdwgc.dll"+004A33E0]+288]+0]+60]+50]+70]+E8]+16E:
18 jmp newmem
19 nop 4
20 returnhere:
21 
22 
23  
24  
25 [DISABLE]
26 dealloc(newmem)
27 [[[[[[["mono-2.0-bdwgc.dll"+004A33E0]+288]+0]+60]+50]+70]+E8]+16E:
28 movsxd  rdx,dword ptr [rbp-50]
29 movzx r9d,byte ptr [rbp-58]
no damage

  这个地址有什么问题吗?答案是有的,这个地址是只有你进入游戏以后,被敌人攻击一下才会显示出真实的 要汇编的那个地址 来!所以这个修改器的使用说明一定要看!

  我将会更新修改器 和 提供研究的 CT 文件(非修改性的——这里面还会有中间测试中有用的保留数据,真正可修改的是如下图的 红色部分 ,至于修改项是什么,字面意思)

   更新的修改器如下图:

 

  【END】

  //-----------------【2020-03-25更新内容】

    出现问题了,那个映射并不稳定,究竟什么时候才能完成稳定的映射呢?这个我不清楚,说不定一直找不到,看缘分吧!

    我现在还有另外的三个方向:技能无冷却 、 无限底部道具 和 加持工具编辑。

    最简单的是 无限底部道具,那么我就先研究这部分吧。

    我们使用 开局 就送 5 个 的 玉净瓶 开始研究,根据基础知识我们扫到地址,如下:

    看图,我已经标注了,其中有一个是真的,有一个是跟随另外一个变化的,现在我们的任务就算如何绑定这一项,使其不变。

    查找是什么改写了这个地址的值,找到了两句代码。这个时候我们给这两句代码都添加断点,然后回到游戏使用玉净瓶,对第一个断点处的代码替换成 nop 就能简单的实现 无限玉净瓶 功能!

    

  【END】

  //----------------【2020-12-07更新内容】

   假更新,之前学到的 AOB 注入,想起来这里还有一个动态分配的游戏,这个之前不是通过地址链接找到的嘛!所以,这次我就直接使用 AOB 注入的方法,让它们自动找这一部分的代码,之后匹配修改。代码给出:

 1 { Game   : Zengeon.exe
 2   Version: 
 3   Date   : 2020-11-29
 4   Author : dell
 5 
 6   This script does blah blah blah
 7 }
 8 
 9 [ENABLE]
10 //code from here to '[DISABLE]' will be used to enable the cheat
11 
12  
13  
14 aobscan(NO_DAMAGE,48 63 55 B0 44 0F B6 4D A8) // should be unique
15 alloc(newmem,$1000,1C9789CD25E)
16 
17 label(code)
18 label(return)
19 
20 newmem:
21 
22 code:
23   mov dword ptr [rbp-50],0
24   movsxd  rdx,dword ptr [rbp-50]
25   movzx r9d,byte ptr [rbp-58]
26   jmp return
27 
28 NO_DAMAGE:
29   jmp newmem
30   nop 4
31 return:
32 registersymbol(NO_DAMAGE)
33 
34 [DISABLE]
35 //code from here till the end of the code will be used to disable the cheat
36 NO_DAMAGE:
37   db 48 63 55 B0 44 0F B6 4D A8
38 
39 unregistersymbol(NO_DAMAGE)
40 dealloc(newmem)
41 
42 {
43 // ORIGINAL CODE - INJECTION POINT: 1C9789CD25E
44 
45 1C9789CD232: 48 83 C2 B0                    -  add rdx,-50
46 1C9789CD236: 4C 8B C5                       -  mov r8,rbp
47 1C9789CD239: 49 83 C0 A8                    -  add r8,-58
48 1C9789CD23D: 49 8B CF                       -  mov rcx,r15
49 1C9789CD240: 48 8D 64 24 00                 -  lea rsp,[rsp+00]
50 1C9789CD245: 90                             -  nop 
51 1C9789CD246: 49 BB 90 D5 9C 78 C9 01 00 00  -  mov r11,000001C9789CD590
52 1C9789CD250: 41 FF D3                       -  call r11
53 1C9789CD253: 49 8B 87 D8 00 00 00           -  mov rax,[r15+000000D8]
54 1C9789CD25A: 48 8B 40 18                    -  mov rax,[rax+18]
55 // ---------- INJECTING HERE ----------
56 1C9789CD25E: 48 63 55 B0                    -  movsxd  rdx,dword ptr [rbp-50]
57 1C9789CD262: 44 0F B6 4D A8                 -  movzx r9d,byte ptr [rbp-58]
58 // ---------- DONE INJECTING  ----------
59 1C9789CD267: 48 8B C8                       -  mov rcx,rax
60 1C9789CD26A: 4D 8B C6                       -  mov r8,r14
61 1C9789CD26D: 83 38 00                       -  cmp dword ptr [rax],00
62 1C9789CD270: 48 8D 64 24 00                 -  lea rsp,[rsp+00]
63 1C9789CD275: 90                             -  nop 
64 1C9789CD276: 49 BB 50 E5 9C 78 C9 01 00 00  -  mov r11,000001C9789CE550
65 1C9789CD280: 41 FF D3                       -  call r11
66 1C9789CD283: 66 66 90                       -  nop 
67 1C9789CD286: 49 BB 70 6F 61 78 C9 01 00 00  -  mov r11,000001C978616F70
68 1C9789CD290: 41 FF D3                       -  call r11
69 }
no damage --- AOB

  【END】

  [百度网盘下载地址]

    如果以下链接被吞,请及时留言,博主会抽空回来补。

    下载链接:https://pan.baidu.com/s/1-iv2xwNMl5SXAZN1PKH6CQ

    提取码:z0rb

原文地址:https://www.cnblogs.com/onepersonwholive/p/12241956.html