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] ,這樣就不是該我們的假數據了!

演示:


后續更新內容-----------------【2020-03-22更新內容】

Hello , 我回來了;我看到 Steam 上,自己試了一下修改器,發現又不行了,於是開始這次的計划。(我看到 羊皮紙的修改器還是訪問的比較多,這個游戲可能就是比較冷門吧,我看 WeMod 上,也沒幾個推薦的)

不過博主會加油的!!!首先,大家看到上面的那個圖片是好幾個星期以前我在當時的特殊環境下實現的,當我重啟游戲以后,0血還是要亡!所以這次我們實在一點兒,爭取使用全匯編!

我在這里先更新一下基礎地址:(還是只有 EXP 和 MONEY)

1、首先搜索到金錢值的普通地址(這個大家都會啊)

2、搜到以后選擇 對這個地址進行指針掃描,選擇 最大級別 為 8 ,點擊確定

3、關閉並重啟游戲,進入一局游戲,找到金錢值,並根據 金錢值 篩選 多級地址。可以得到,如下圖所示的地址:(當然還有很多這樣的地址,隨便用一個就行)

4、我們把 最后一級偏轉 BC 減去 4 ,也就是讓它變成 B8(點擊 BC 左邊的 < 按鈕也可以),這樣我們就找到了經驗的地址(其實現在我們就可以改值完成修改了)

5、以我的經驗得知,金錢可以設值成 999999 ,經驗需要設值成 90000010(100滿級),999999 轉 16 進制 是 F423F90000010 轉 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.... 那句就不一定在那個位置上了,確實讓我比較難受,好不容易探索出這么多內容,這個找跳轉地址的方法也是自己摸索的,真的是效率很慢,小白嘛!

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


后續更新內容-----------------【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 文件(非修改性的——這里面還會有中間測試中有用的保留數據,真正可修改的是如下圖的 紅色部分 ,至於修改項是什么,字面意思)

更新的修改器如下圖:

 


后續更新內容-----------------【2020-03-25更新內容】

出現問題了,那個映射並不穩定,究竟什么時候才能完成穩定的映射呢?這個我不清楚,說不定一直找不到,看緣分吧!

我現在還有另外的三個方向:技能無冷卻 、 無限底部道具 和 加持工具編輯。

最簡單的是 無限底部道具,那么我就先研究這部分吧。

我們使用 開局 就送 5 個 的 玉凈瓶 開始研究,根據基礎知識我們掃到地址,如下:

看圖,我已經標注了,其中有一個是真的,有一個是跟隨另外一個變化的,現在我們的任務就算如何綁定這一項,使其不變。

查找是什么改寫了這個地址的值,找到了兩句代碼。這個時候我們給這兩句代碼都添加斷點,然后回到游戲使用玉凈瓶,對第一個斷點處的代碼替換成 nop 就能簡單的實現 無限玉凈瓶 功能!


后續更新內容----------------【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

 [百度網盤下載地址]

  如果以下鏈接被吞,請及時留言,博主會抽空回來補。

  下載鏈接:https://pan.baidu.com/s/1-iv2xwNMl5SXAZN1PKH6CQ

  提取碼:z0rb


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM