同人Mod游戲 《Craft The World -The Age of Dragon v5.7 (for 1.4013)(打造世界-巨龍時代v1.4013)-制作》修改器制作-[附帶1.7002 版本修改CT文件] (持續(xù)更新)
日期:2020.06.05
博客期:177
星期五
【溫馨提示】:
我現(xiàn)在把資源先放到開頭,不想研究學習的就直接取用。如果修改器失效了,你們可以在博客園本頁直接評論,也可以給我發(fā)郵件告訴我,就是不要到百度云上去說了,百度云我好久不登錄一次的!大家給我發(fā)郵件的話,記得要注明是哪個游戲,內(nèi)容當然是越詳細越好啦!郵箱地址:nightskysxs@163.com
| 資源鏈接表 | |||
| 沒有博客園賬號的網(wǎng)友 |
百度網(wǎng)盤下載地址: https://pan.baidu.com/s/1Y6gaAHKWxhEiFHIVRUn6UA 提取碼:taod
Git Hub下載地址:https://github.com/TwoStarsGodNightSky/GameTrainer (暫時未更新) |
||
| 有博客園賬號的博友 | 版本 | CT文件 | 修改器 |
| 1.4.013 (TAOD 5.7) | 點我下載 | 點我下載 | |
| 1.6.007 (TAOD 6.4) | 點我下載 | 點我下載 | |
| 1.6.007 (TAOD 6.5) | 點我下載 | 點我下載 | |
| 1.6.007 (TAOD 6.7) | 點我下載 | 點我下載 | |
| 1.6.007 (TAOD 6.8) | 點我下載 | 點我下載 | |
| 1.9.005(TAOD 6.9) | 點我下載 | 點我下載 | |
| 1.7.002 | 點我下載 | x | |
| 1.8.000 & 1.8.001 | 點我下載 | x | |
| 1.8.002 | 點我下載 | x | |
博客防爬取部分:http://www.rzrgm.cn/onepersonwholive/p/13053102.html
a.學習現(xiàn)狀
我先說我現(xiàn)在是什么狀況吧,一般臨近考試周我們都會很忙。一方面要準備考試,另一方面要準備實驗資料要交作業(yè)了。我對于剩下的時間要做的事情規(guī)劃了一個計劃表,發(fā)現(xiàn)我還要去做大大小小32項任務。所以大家真的不要再催我多寫一點修改器文章了。再者說,寫一個修改器真的沒那么容易,我又不是老手,對吧!
b.為什么我想做這個游戲
這個問題其實我早就回答了。我前面的修改器日志里說過對于這一項修改的問題。我寒假時研究 Steam 版本的最新 1.7002 版本,什么也研究不出來。我看 M佬 做的版本大概是 1.7001 版本的吧,反正我試著沒用。等我們放暑假了,我看 WeGame 上他更新沒有,如果沒更新,我就來做新版本的。
c.研究成果
本次的博客相當于挖坑,討論我在修改上遇到的問題和修改的先行成果。
首先,進入游戲。(注意對應版本1.4013)
我們進去世界后砍一棵樹,等木頭運到倉庫里以后。我們按照 4字節(jié) 搜索的方法,找到一個地址。你建造一次木棍消耗兩個木頭,完后把建造九宮格上的木頭退回,繼續(xù)搜索。但是不要高興地太早了了——嘗試修改這個值為 999,回到游戲它的值并沒有發(fā)生變化。

所以,我們首先知道這個地址的值是被真實值修改的,但它的修改無法影響到真實值。而且我們從剛才的搜索中也看到了真實值沒有被搜索出來,這讓我們小白一看到就感到十分的詭異。那真實數(shù)據(jù)是怎樣的呢?我們重新搜索一次木頭數(shù)量并找到對應的虛假地址。我們選擇“找出什么地址改寫了它”。

我們選擇改變一下木頭數(shù)量。
.... ...
d.目前的結果:
CT文件使用方法:
1、打開游戲以后選擇左上角第一個按鈕,如下圖:

2、然后雙擊你的游戲

3、之后讀取文件

4、找到我的CT文件地址

5、打開以后點擊 Reset-set values
6、改變 item_num 的值 為 999
7、點擊 ignore_the_num_examine
8、點擊 change item to num of [item_num]
9、之后,所有物品都會解鎖并變到 999
10、不過下一次,如果直接關游戲的話,倉庫會被清空。所以直接點退出游戲,之后關掉修改項再進入游戲就沒事了。

具體操作:

后續(xù)更新部分----------------[更新日期:2020-06-30]
今天研究的內(nèi)容是 Mana 部分,我看到了之前研究的 Death 為什么會死,其實原理和無限物品是一樣的。
物品在你修改以后會變成 0,這是因為有數(shù)據(jù)加密項。它要經(jīng)過一些 xor (異或) 運算,才能得到真實結果,而實際存儲的是這兩個異或的操作數(shù)。
先補充一個小知識:已知三個位數(shù)相同的二進制數(shù) a,b,c。若滿足 a xor b = c ,則 b xor c = a 且 a xor c = b , 其中任意兩數(shù)做異或,結果一定是另外一數(shù)
異或: 0 xor 1 = 1 , 1 xor 0 = 1 , 1 xor 1 = 0 , 0 xor 0 = 0
a = 01010010
b = 10001110
c = 11011100
可以驗證一下的。
所以,我們需要修改未保存的 c 值為 999,就首先賦值一個 d 為 999,然后讓它與 b (假定b不會改變)做異或操作,結果賦值給 a 。這樣當被改值的 a 再與 b 做異或操作時,得到的 c 值就是我們要修改的 999 了。
原理搞清楚了,但是在加密的過程中會存在校驗,如果有一組值做異或的結果超過了 999,那么就會改變它的 b 值和 a 值重新為某一相同值,這樣 a 等于 b ,再做異或得到的 c 值就會是 0。所以,我上次就索性把校驗直接砍掉,反正是倉庫物品數(shù)量,不會對系統(tǒng)造成什么可玩性的改變。但是今天的校驗內(nèi)容不一樣了,它的加密內(nèi)容不僅多而雜,而且 Float 類型的修改項有 Mana 值、生命值、饑餓值等等。我雖然關掉校驗并統(tǒng)一賦值 20,可以保證 Mana 鎖定,但是同時也鎖定了矮人們的生命值和饑餓值。你可能覺得“這豈不美哉”?但是“變量加密”是一段公用代碼,鎖定的同時也鎖定了怪物的血,就等于是鎖定了戰(zhàn)斗狀態(tài)(雙方都不死),啊!這便是永恒!另外,如果不關閉校驗,就會賦值 矮人們的生命到 0,因而所有矮人都死了,當然所有怪物也沒能幸免。
嗯,Mana 的修改方式我得親自找對加密的調(diào)用了,還有就是加密函數(shù)是如何實現(xiàn)加密的?它需要調(diào)用那幾個寄存器參數(shù)?返回結果如何?之后,再對癥下藥。
下面是它的異或操作(輸入項為 esp、ecx、edx, 可能為固定寄存器的有 dl、dh、cl、ch,最終賦值到 xmm0 的是 [ebp-04],對應校驗項為 [ebp-08],灰色表示這一項在實際效果中未起到作用、屬于干擾段)。這之后有校驗將 xmm0 ([ebp-04]——我們的 Float 類型的 “c”值) 和 [ebp-08] 進行比較。如果二者相等方可正常運行,否則置要修改的 c 值為 0 (一系列操作)。

后續(xù)更新部分-------------------------[更新日期:2020-07-01]
我今天去把無限物品的功能完善了一下,找到了之前的錯誤原因。另外,我發(fā)現(xiàn)可以直接使用匯編語句 MOV eax,3E7 來賦值 999,我之前都是先定義一個全局變量然后再改的,現(xiàn)在好了,就可以方便我們使用了。還有,我之前遇到的打造世界的修改器的無限物品都是按照你有了什么物資,就把什么物資的數(shù)量改為 999 的。我個人也比較喜歡這種的,這樣省去了搜集資源的時間,就能大幅度推進游戲科技樹了。你一下子把所有資源刷新出來確實不太好,我做修改器的時候就按照“有了什么物資就改到 999”的需求制作了,全資源刷新的功能我保留到 CT 文件當中好了。
下面給大家看看匯編代碼和效果展示。
匯編代碼(無限物品——漸進無限):
[ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,2048) label(returnhere) label(originalcode) label(exit) newmem: //this is allocated memory, you have read,write,execute access //place your code here originalcode: xor eax,[esi+000001F4] push ebx push edx // ebx 用于保存 999 數(shù)據(jù) (item_num的值) //lea ebx,[item_num] mov ebx,3E7 // edx 用于 存儲 臨時數(shù)據(jù) //lea edx,[item_sys] mov edx,0 //mov ebx,[ebx] //---[edx置為0] //xor edx,edx //---[比較ecx與0的大小] cmp ecx,edx //---[存儲物品值 等于 0,則不進行修改] je exit //---[如果不是零,做修改] mov ecx,3E7 mov eax,3E7 //------(修改至999) //真實存儲值修改 mov edx,3E7 xor edx,[esi+00000088] mov [esi+000001F0],edx //檢驗存儲值修改 mov edx,3E7 xor edx,[esi+000001F4] mov [esi+000001F8],edx jmp exit exit: //釋放 pop edx pop ebx jmp returnhere "CTW-巨龍時代V v5.7-1.4013-完結篇.exe"+3009E3: jmp newmem nop returnhere: [DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) "CTW-巨龍時代V v5.7-1.4013-完結篇.exe"+3009E3: xor eax,[esi+000001F4] //Alt: db 33 86 F4 01 00 00
效果展示:

制作修改器模擬:

注意不要兩項都使用。
后續(xù)更新部分----------------------[更新日期:2020-07-03]
本來是昨天可以更新博客的,奈何研究到第2天凌晨了,先去睡個覺,剛剛完成了“無限魔法”和“無限飽食度”。現(xiàn)在就差兩部分沒做了,一個是“大量經(jīng)驗值(我就設定為10 倍經(jīng)驗,說老實話,我不會創(chuàng)建線程,就不做加多少經(jīng)驗值的了)”,還有一個是“矮人無限生命值”,啊啊啊啊!一想到改共用代碼段,要找區(qū)別就很煩!相當非時間,想想不知道多大的結構體,里面存儲的還是加密的數(shù)據(jù),我佛了。哦!另外還有一類功能 “一擊必殺” 不是很想做。“提高矮人工作效率”我想到了,但是無從下手啊。不要跟我說打造世界可以通過修改文件的方式,加大游戲性。我當然知道我要是能找到這個版本的 XML 配置文件,就不用這么累人的做修改器了!問題就是壓根找不到啊!

以上是我更新的CT文件內(nèi)容,然后就小更新了一下修改器,現(xiàn)在可以下載了。截圖如下:

今天實際上是做完了,但不完善,保命居然只能保護第一個矮人的?我真是醉了。做一個20長度的數(shù)組,也許可以,但我不會,看來只能是根據(jù)什么地址跳轉過來的,來確定是否進行改正。
呃~確實這圖不是很美觀,下次更新我再換回那個標題為 Craft The World 來。
后續(xù)更新部分-----------------------------[更新日期:2020-07-07]
我看了看 1.7002 版本的無限物品要比 1.4013 版本的更難一點,起碼找到物品對應的數(shù)據(jù)就很難。不過,我已經(jīng)有了上一次的基礎,再做就不難了。嗯~ 新版本的話,還是推薦大家以修改配置文件的形式,更改游戲性。畢竟這也是官方給定的投機之處,最好按照官方的來。懶得刷物品,就找我的 CT 文件里面的無限物品,里面還有10 倍經(jīng)驗和無限魔法(關于無限魔法,我還是投機采用自動給魔法值賦值 999,而不是根據(jù)實際最大魔法上限而定的,我這里在 CT 文件內(nèi)部留下了一些地址信息方便我日后完善)。我看代碼里面還有構造函數(shù)和析構函數(shù),我大概知道這游戲是使用什么語言寫的或以什么語言為基礎寫的了。我每次生成 1.7002 版本的修改器的時候,總被當作一個垃圾軟件,系統(tǒng)自動給我刪了,我很難受。這幾天要把工作重心偏離打造世界了。
原本做了 1.7002 版本的修改器,但是總是會自己閃退,不得已我不再上傳...對應版本的CT文件的使用倒是沒什么問題,大家可以放心。

后續(xù)更新部分----------------------[更新日期:2020-07-08]
我原本想就這樣算了,唉~原來Steam都更新到1.8000版本了,這么快的嗎?也許是我玩Steam版本比較少吧。嗯嗯嗯...還是看了一下各個網(wǎng)上都沒有對應版本的修改器,而 WeMod 上又是只有1.7001版本的。這都1.8000版本了,這游戲出新版本的速度比出修改器的速度都快...我估計完成這一版本以后過不了多少時間,就可以繼續(xù)下一個版本的編寫了。我將所有信息配置到開頭,方便大家。
重要的是利用 Float 找到 Mana 值,找到修改 Float 值的區(qū)域代碼,判定 OneSecondTicker 之前就行了。還有無限物品就只需要我們找到 ChangeResourceNumber 區(qū)域,然后逐步查看導入的數(shù)據(jù)究竟哪一項符合結果。
[ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,2048) label(returnhere) label(originalcode) label(exit) newmem: //this is allocated memory, you have read,write,execute access //place your code here originalcode: //sub esi,eax mov eax,3E7 //add esi,eax mov esi,3E7 mov [ebp-000000B0],eax exit: jmp returnhere "CraftWorld.exe"+3E0B97: jmp newmem nop 3 returnhere: [DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) "CraftWorld.exe"+3E0B97: add esi,eax mov [ebp-000000B0],eax //Alt: db 03 F0 89 85 50 FF FF FF
測試結果:

后續(xù)更新部分---------------------------[更新日期:2020-07-21]
今天收到網(wǎng)友的消息,原來巨龍時代還有更新的版本啊,我其實是不知道的,哈哈哈,它的 5.7 版本上說是最終版,難道它說的是 第 5 版的最終版么?不管怎樣,我還是按照之前1.4013 版本的游戲修改方法實現(xiàn)了上面的三項功能,CT文件和修改器已經(jīng)更新到最上方的表格中,大家可以自行取用。我遇到的問題是物品數(shù)量存儲無法找到的問題,最終靠搜索指令 xor ,[esi+000001 找到了物品地址。
后續(xù)更新部分---------------------------[更新日期:2020-07-28]
今天我深入研究了一下魔法值在 OneSecondTicker 部分的變化情況,經(jīng)過對函數(shù)最開始狀況的 [ebp-04]的值進行追蹤,更改前的數(shù)據(jù)值有三部分。一個是負數(shù)“無窮大”,對應 [ebp-04] 的值為 80000000;一個是整值 3.00 (實際是當前的 Mana 值),對應 edx 是 00000003 ;最后一個是整值 145.00 (實際上是 Mana 值的上限),我們完善修改器要實現(xiàn)無限魔法,并把魔法值的上限賦值到實際魔法值的地址,不再是之前那樣單純賦值999,這樣看起來就不會那么突兀。隨著技能的升級,Mana值始終不會超越上限。效果見下圖。(注:今天研究的1.8001版本【目前Steam版本(2020.07.28)】)
思路:
def MAX 00000000 // 定義變量 MAX
... ...
//-------------<下面一部分是改變浮點值存儲的函數(shù)內(nèi)要附加代碼的邏輯結構,因為 OneSecondTicker 是每一秒要執(zhí)行一次的,所以下面的代碼會被執(zhí)行三次>-----------//
if ( [ebp-04] == 80000000 ) // 如果是未知賦值數(shù)
jump out // 就不進行操作
else // 否則
a = (int) [ebp-04] // 將 [ebp-04] 的值轉為整形類型賦值到 變量a 中
if (MAX <= a) // 如果 MAX 大于 a
MAX = a // 更新 MAX 的信息
... ...
if ( [ebp-04] == 80000000 ) // 如果是未知賦值數(shù)
jump out // 就不進行操作
else // 否則
[ebp-04] = MAX // 將 [ebp-04] 的值更新到 Mana上限值。
測試圖:

后續(xù)更新部分-------------------------[更新日期:2020-08-31]
嗯,最近專心在準備 “中國軟件杯” 的比賽,比賽成績確實不太理想啊,就搞到了一個最普通的獎狀。至于游戲修改這方面,我有點忘了。因為 Steam上又更新了(我比賽完才看到),我就簡單做了最新的那個CT文件,大家看最新的表能看到 1.8.002 的 CT文件的一項是可以下載的了,沒有博客園的網(wǎng)友可以選百度網(wǎng)盤,所有資源我都存到鏈接上了。為什么還是沒有修改器?當然是因為修改器運行以后會自動關閉,也不知道是什么原因。等我下一次深造吧,我來試著做一個修改器類型的 MOD。
后續(xù)更新部分-------------------------[更新日期:2020-09-08]
今天試著做了 無限飽食度 ,看著是完成了,但是呃~我原本是向著 無限生命 去做的,這樣看來還是不成功的。哦,對了,我順便做了 快速挖掘 的功能,當然目前還是只有 對應最新版本 1.8.002 的。搞好了本頁面提到的所有版本的 CT 文件以后,我再更新哦!
1 [ENABLE] 2 //code from here to '[DISABLE]' will be used to enable the cheat 3 alloc(newmem,2048) 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 push edx 13 //初始化整型值 14 mov edx,0 15 //整型值轉化為浮點值 16 CVTSI2SS xmm0,edx 17 pop edx 18 movss [eax+ecx*8+0C],xmm0 19 20 exit: 21 jmp returnhere 22 23 "CraftWorld.exe"+3F6B7F: 24 jmp newmem 25 nop 26 returnhere: 27 28 29 30 31 [DISABLE] 32 //code from here till the end of the code will be used to disable the cheat 33 dealloc(newmem) 34 "CraftWorld.exe"+3F6B7F: 35 movss [eax+ecx*8+0C],xmm0 36 //Alt: db F3 0F 11 44 C8 0C
1 [ENABLE] 2 //code from here to '[DISABLE]' will be used to enable the cheat 3 alloc(newmem,2048) 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 push edx 13 //初始化整型值 14 mov edx,A 15 //整型值轉化為浮點值 16 CVTSI2SS xmm0,edx 17 pop edx 18 subss xmm0,xmm1 19 lea ecx,[edi+00000180] 20 21 exit: 22 jmp returnhere 23 24 "CraftWorld.exe"+5927A7: 25 jmp newmem 26 nop 5 27 returnhere: 28 29 30 31 32 [DISABLE] 33 //code from here till the end of the code will be used to disable the cheat 34 dealloc(newmem) 35 "CraftWorld.exe"+5927A7: 36 subss xmm0,xmm1 37 lea ecx,[edi+00000180] 38 //Alt: db F3 0F 5C C1 8D 8F 80 01 00 00
我不知道是不是更新的問題,兩次申請空間的話,貌似會報錯。所以,無限魔法的功能肯定就是失效了。
后續(xù)更新部分-------------------------[更新日期:2020-10-17]
嗯,任務來的比較倉促,我也做的比較倉促,說是大佬出了正式版,嗯呃呃呃呃,不過我也沒時間玩就是了。我就是按照之前的經(jīng)驗,隨便整了一個和之前一樣的修改器,能使就行了,我是真的沒什么時間了。
PS: 6.5 的修改器目測已經(jīng)可以了,只是 CT 表對應不上,大家等我考完研再更新 CT 表吧。其余的功能我自然很想做,但我沒精力了啊。
后續(xù)更新部分-------------------------[更新日期:2021-01-29]
嗯,我加入到巨龍交流群了,以后等它更新了,就方便我直接改項了。(功能還是只有三項,無限魔法還沒有測試,因為基礎兩個魔法被刪除了)

浙公網(wǎng)安備 33010602011771號