同人Mod游戲 《Craft The World -The Age of Dragon v5.7 (for 1.4013)(打造世界-巨龍時代v1.4013)-制作》修改器制作-[附帶1.7002 版本修改CT文件] (持續更新)


日期:2020.06.05

博客期:177

星期五

 

【溫馨提示】:

  我現在把資源先放到開頭,不想研究學習的就直接取用。如果修改器失效了,你們可以在博客園本頁直接評論,也可以給我發郵件告訴我,就是不要到百度雲上去說了,百度雲我好久不登錄一次的!大家給我發郵件的話,記得要注明是哪個游戲,內容當然是越詳細越好啦!郵箱地址:nightskysxs@163.com

 

資源鏈接表
沒有博客園賬號的網友

百度網盤下載地址

https://pan.baidu.com/s/1Nzx84umtkP9PprDExP7DZw

提取碼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.7.002 點我下載 x
1.8.000 & 1.8.001 點我下載 x
1.8.002 點我下載 x

 

博客防爬取部分:https://www.cnblogs.com/onepersonwholive/p/13053102.html 


 a.學習現狀

  我先說我現在是什么狀況吧,一般臨近考試周我們都會很忙。一方面要准備考試,另一方面要准備實驗資料要交作業了。我對於剩下的時間要做的事情規划了一個計划表,發現我還要去做大大小小32項任務。所以大家真的不要再催我多寫一點修改器文章了。再者說,寫一個修改器真的沒那么容易,我又不是老手,對吧!

b.為什么我想做這個游戲

  這個問題其實我早就回答了。我前面的修改器日志里說過對於這一項修改的問題。我寒假時研究 Steam 版本的最新 1.7002 版本,什么也研究不出來。我看 M佬 做的版本大概是 1.7001 版本的吧,反正我試着沒用。等我們放暑假了,我看 WeGame 上他更新沒有,如果沒更新,我就來做新版本的。

c.研究成果

       本次的博客相當於挖坑,討論我在修改上遇到的問題和修改的先行成果。

       首先,進入游戲。(注意對應版本1.4013)

       我們進去世界后砍一棵樹,等木頭運到倉庫里以后。我們按照 4字節 搜索的方法,找到一個地址。你建造一次木棍消耗兩個木頭,完后把建造九宮格上的木頭退回,繼續搜索。但是不要高興地太早了了——嘗試修改這個值為 999,回到游戲它的值並沒有發生變化。

  

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

  

  我們選擇改變一下木頭數量。

  .... ...

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、不過下一次,如果直接關游戲的話,倉庫會被清空。所以直接點退出游戲,之后關掉修改項再進入游戲就沒事了。

  

   具體操作:

  


后續更新部分----------------[更新日期:2020-06-30]

  今天研究的內容是 Mana 部分,我看到了之前研究的 Death 為什么會死,其實原理和無限物品是一樣的。

  物品在你修改以后會變成 0,這是因為有數據加密項。它要經過一些 xor (異或) 運算,才能得到真實結果,而實際存儲的是這兩個異或的操作數。

  先補充一個小知識:已知三個位數相同的二進制數 a,b,c。若滿足 a xor b = c ,則 b xor c = aa xor c = b , 其中任意兩數做異或,結果一定是另外一數

  異或: 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。所以,我上次就索性把校驗直接砍掉,反正是倉庫物品數量,不會對系統造成什么可玩性的改變。但是今天的校驗內容不一樣了,它的加密內容不僅多而雜,而且 Float 類型的修改項有 Mana 值、生命值、飢餓值等等。我雖然關掉校驗並統一賦值 20,可以保證 Mana 鎖定,但是同時也鎖定了矮人們的生命值和飢餓值。你可能覺得“這豈不美哉”?但是“變量加密”是一段公用代碼,鎖定的同時也鎖定了怪物的血,就等於是鎖定了戰斗狀態(雙方都不死),啊!這便是永恆!另外,如果不關閉校驗,就會賦值 矮人們的生命到 0,因而所有矮人都死了,當然所有怪物也沒能幸免。

  嗯,Mana 的修改方式我得親自找對加密的調用了,還有就是加密函數是如何實現加密的?它需要調用那幾個寄存器參數?返回結果如何?之后,再對症下葯。

  下面是它的異或操作(輸入項為 especxedx, 可能為固定寄存器的有 dldhclch,最終賦值到 xmm0 的是 [ebp-04],對應校驗項為 [ebp-08],灰色表示這一項在實際效果中未起到作用、屬於干擾段)。這之后有校驗將 xmm0 ([ebp-04]——我們的 Float 類型的 “c”值) 和 [ebp-08] 進行比較。如果二者相等方可正常運行,否則置要修改的 c 值為 0 (一系列操作)。


后續更新部分-------------------------[更新日期:2020-07-01]

  我今天去把無限物品的功能完善了一下,找到了之前的錯誤原因。另外,我發現可以直接使用匯編語句 MOV eax,3E7 來賦值 999,我之前都是先定義一個全局變量然后再改的,現在好了,就可以方便我們使用了。還有,我之前遇到的打造世界的修改器的無限物品都是按照你有了什么物資,就把什么物資的數量改為 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 數據 (item_num的值)
//lea ebx,[item_num]
mov ebx,3E7
// edx 用於 存儲 臨時數據
//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

  效果展示:

  

  制作修改器模擬:

  

 

  注意不要兩項都使用。


后續更新部分----------------------[更新日期:2020-07-03]

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

    

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

  今天實際上是做完了,但不完善,保命居然只能保護第一個矮人的?我真是醉了。做一個20長度的數組,也許可以,但我不會,看來只能是根據什么地址跳轉過來的,來確定是否進行改正。

  呃~確實這圖不是很美觀,下次更新我再換回那個標題為 Craft The World 來。


后續更新部分-----------------------------[更新日期:2020-07-07]

  我看了看 1.7002 版本的無限物品要比 1.4013 版本的更難一點,起碼找到物品對應的數據就很難。不過,我已經有了上一次的基礎,再做就不難了。嗯~ 新版本的話,還是推薦大家以修改配置文件的形式,更改游戲性。畢竟這也是官方給定的投機之處,最好按照官方的來。懶得刷物品,就找我的 CT 文件里面的無限物品,里面還有10 倍經驗和無限魔法(關於無限魔法,我還是投機采用自動給魔法值賦值 999,而不是根據實際最大魔法上限而定的,我這里在 CT 文件內部留下了一些地址信息方便我日后完善)。我看代碼里面還有構造函數和析構函數,我大概知道這游戲是使用什么語言寫的或以什么語言為基礎寫的了。我每次生成 1.7002 版本的修改器的時候,總被當作一個垃圾軟件,系統自動給我刪了,我很難受。這幾天要把工作重心偏離打造世界了。

  原本做了 1.7002 版本的修改器,但是總是會自己閃退,不得已我不再上傳...對應版本的CT文件的使用倒是沒什么問題,大家可以放心。


后續更新部分----------------------[更新日期:2020-07-08]

  我原本想就這樣算了,唉~原來Steam都更新到1.8000版本了,這么快的嗎?也許是我玩Steam版本比較少吧。嗯嗯嗯...還是看了一下各個網上都沒有對應版本的修改器,而 WeMod 上又是只有1.7001版本的。這都1.8000版本了,這游戲出新版本的速度比出修改器的速度都快...我估計完成這一版本以后過不了多少時間,就可以繼續下一個版本的編寫了。我將所有信息配置到開頭,方便大家。

  重要的是利用 Float 找到 Mana 值,找到修改 Float 值的區域代碼,判定 OneSecondTicker 之前就行了。還有無限物品就只需要我們找到 ChangeResourceNumber 區域,然后逐步查看導入的數據究竟哪一項符合結果。   

[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

  測試結果:


后續更新部分---------------------------[更新日期:2020-07-21]

  今天收到網友的消息,原來巨龍時代還有更新的版本啊,我其實是不知道的,哈哈哈,它的 5.7 版本上說是最終版,難道它說的是 第 5 版的最終版么?不管怎樣,我還是按照之前1.4013 版本的游戲修改方法實現了上面的三項功能,CT文件和修改器已經更新到最上方的表格中,大家可以自行取用。我遇到的問題是物品數量存儲無法找到的問題,最終靠搜索指令 xor ,[esi+000001 找到了物品地址。


后續更新部分---------------------------[更新日期:2020-07-28]

  今天我深入研究了一下魔法值在 OneSecondTicker 部分的變化情況,經過對函數最開始狀況的 [ebp-04]的值進行追蹤,更改前的數據值有三部分。一個是負數“無窮大”,對應 [ebp-04] 的值為 80000000;一個是整值 3.00 (實際是當前的 Mana 值),對應 edx 是 00000003 ;最后一個是整值 145.00 (實際上是 Mana 值的上限),我們完善修改器要實現無限魔法,並把魔法值的上限賦值到實際魔法值的地址,不再是之前那樣單純賦值999,這樣看起來就不會那么突兀。隨着技能的升級,Mana值始終不會超越上限。效果見下圖。(注:今天研究的1.8001版本【目前Steam版本(2020.07.28)】)

  思路:

  def MAX 00000000      // 定義變量 MAX

  ...             ...

  //-------------<下面一部分是改變浮點值存儲的函數內要附加代碼的邏輯結構,因為 OneSecondTicker 是每一秒要執行一次的,所以下面的代碼會被執行三次>-----------//

  if ( [ebp-04] == 80000000 )  // 如果是未知賦值數

    jump out        // 就不進行操作

  else            // 否則

    a = (int) [ebp-04]        // 將 [ebp-04] 的值轉為整形類型賦值到 變量a 中

  if (MAX <= a)          // 如果 MAX 大於 a

    MAX = a          // 更新 MAX 的信息

  ...               ...

  if ( [ebp-04] == 80000000 )  // 如果是未知賦值數

    jump out        // 就不進行操作

  else            // 否則

    [ebp-04] = MAX       // 將 [ebp-04] 的值更新到 Mana上限值。

  測試圖:


后續更新部分-------------------------[更新日期:2020-08-31]

  嗯,最近專心在准備 “中國軟件杯” 的比賽,比賽成績確實不太理想啊,就搞到了一個最普通的獎狀。至於游戲修改這方面,我有點忘了。因為 Steam上又更新了(我比賽完才看到),我就簡單做了最新的那個CT文件,大家看最新的表能看到 1.8.002 的 CT文件的一項是可以下載的了,沒有博客園的網友可以選百度網盤,所有資源我都存到鏈接上了。為什么還是沒有修改器?當然是因為修改器運行以后會自動關閉,也不知道是什么原因。等我下一次深造吧,我來試着做一個修改器類型的 MOD。


后續更新部分-------------------------[更新日期: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
quickly break blocks
 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
unlimited satiety

  我不知道是不是更新的問題,兩次申請空間的話,貌似會報錯。所以,無限魔法的功能肯定就是失效了。


后續更新部分-------------------------[更新日期:2020-10-17]

  嗯,任務來的比較倉促,我也做的比較倉促,說是大佬出了正式版,嗯呃呃呃呃,不過我也沒時間玩就是了。我就是按照之前的經驗,隨便整了一個和之前一樣的修改器,能使就行了,我是真的沒什么時間了。

  PS: 6.5 的修改器目測已經可以了,只是 CT 表對應不上,大家等我考完研再更新 CT 表吧。其余的功能我自然很想做,但我沒精力了啊。


后續更新部分-------------------------[更新日期:2021-01-29]

  嗯,我加入到巨龍交流群了,以后等它更新了,就方便我直接改項了。(功能還是只有三項,無限魔法還沒有測試,因為基礎兩個魔法被刪除了)


免責聲明!

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



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