日期:2020.07.23
博客期:178
星期四
【溫馨提示】:
我現在把資源先放到開頭,不想研究學習的就直接取用。如果修改器失效了,你們可以在博客園本頁直接評論,也可以給我發郵件告訴我,就是不要到百度雲上去說了,百度雲我好久不登錄一次的!大家給我發郵件的話,記得要注明是哪個游戲,內容當然是越詳細越好啦!郵箱地址:nightskysxs@163.com
資源下載表 | |||
沒有博客園賬號的網友 | 百度網盤下載鏈接:https://pan.baidu.com/s/12kTl7v8z7Q3llqBz_tmnbA 提取碼:rabi
Git Hub下載地址:https://github.com/TwoStarsGodNightSky/GameTrainer (Git Hub 暫不更新) |
||
有博客園賬號的網友 | 版本 | CT文件 | 修改器 |
1.99s | 點我下載 | 點我下載 | |
1.99t | 點我下載 | 點我下載 | |
2.00 | 點我下載 | 點我下載 |
博客防爬取部分:https://www.cnblogs.com/onepersonwholive/p/13369657.html
B 站測試視頻 bv 號:BV1YU4y1s7Qx
前言
這個游戲最近剛接觸到,我靠着自己不作弊的情況下就只能打到一部分,唉~我的躲彈幕類型游戲的投入確實不深,不要再說我游戲菜鳥了,我自己說了我自己,大家就不要說了。有好多人說你玩個游戲還用修改器,這樣你玩不了多久就不想玩下去了。我個人認為大多數這些人都是自己通關了,想看別人受難。還有我只負責做修改器,別人用不用可不是我說了算的。所以我個人想說,你用了修改器和不用修改器是兩種不同的體驗,想一想你會無限跳就能提前跑到之前到達不了的地方,就會有不一樣的通關路線,這對游戲是有幫助的。總之,做了修改器甚至能夠豐富游戲性,讓用戶有不同體驗的選擇,這不是更好么?
修改內容(內部構造)
1、血量不減的思路
首先,如果會CE的基本操作的網友就可以直接搜索數值,進行鎖定就可以了,這樣我們可以找到基礎的 HP 的位置,可以透過掃描或者多重地址的方法利用基質鎖定位置,這樣我們實際上就可以慢慢地打了,但是我不會。我就是能用匯編代碼的地方堅決不找地址。我會先找到一個 HP 的普通地址(沒有關聯,就是地址)【要找那個不隨其他變化而變化,且能引起其他變化的地址】。然后繼續找修改它的地方,我找到的是 "rabiribi.exe"+8D368 的地址(你們可以打開 “查看內存”,右擊選擇“轉到地址”,將上述地址寫入,並轉到對應地址)。可以看到如下幾句:
匯編代碼 實際效果
mov ecx,[ebp-10] // [ebp-10] = ecx
sub eax,ecx // eax = eax - ecx
mov [esi+edi+000004DC],eax // [esi+edi+000004DC] = eax
我們分析上述代碼,我們找到這是血量減少的語句,[ebp-10] 是要減少多少血量,[esi+edi+000004DC] 是實際血量地址。
那么我們現在就有很多種辦法進行修改,一是在整段話之前將 [ebp-10] 的值改為 0,即將 “mov [ebp-10],00000000”一句寫入第一句之前;也可以在第一句之后加入“mov ecx,00000000”一句;也可以直接注釋掉 “sub eax,ecx”一句或者改寫成“sub eax,00000000”或者改寫成“add eax,00000000” 等等,還可以注釋掉后面的賦值一句。(這其實挺好理解的)無論哪一種都能達到我們生命不減少的目的。然后,我自己親身測試了一下果然自己的生命沒有減少,但是自己也無法減少敵人的血量,我的歷史經驗告訴我——遇到 共用代碼段 了。(共用代碼段就是敵人減少血量和自己減少血量所用函數相同,例如函數 def attack(Int code,Int damage) //code為生物所屬ID,damage為減少的生命值)。所以遇到公用代碼段,我最常用的方法就是修改公用代碼利用判斷語句區別傳來的地址是敵人的還是自己的。使用這種方法就要找區別,我們可以在 mov [esi+edi+000004DC] 一句中加入斷點,查看其各個寄存器的值,經過發現,只有當傳入的地址是自己的血量值的時候 edi 寄存器的值才會是 0 ,所以我們針對 mov [esi+edi+000004DC] 一句中展開匯編:

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 cmp edi,0 13 je exit 14 mov [esi+edi+000004DC],eax 15 16 exit: 17 jmp returnhere 18 19 "rabiribi.exe"+8D368: 20 jmp newmem 21 nop 2 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 "rabiribi.exe"+8D368: 31 mov [esi+edi+000004DC],eax 32 //Alt: db 89 84 3E DC 04 00 00
經過親測可以達到綁定個人血量的效果。
2、提升個人十倍傷害
我們已經找到了上述代碼,其中 [ebp-10] 的值是傷害的大小。那么我們的思路就很清晰了:如果傳來的地址是個人的地址(要減少個人血量),那就不對傷害值進行操作;如果不是個人地址(那就是敵人的地址),就將傷害予以10倍返回。不過,要注意的是我們已經對最后一句進行了匯編,為了不對第一部分功能產生沖突,我們只能對前兩句進行匯編了:

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 mov ecx,[ebp-10] 13 cmp edi,0 14 je exit 15 imul ecx,ecx,A 16 17 18 exit: 19 sub eax,ecx 20 jmp returnhere 21 22 "rabiribi.exe"+8D363: 23 jmp newmem 24 returnhere: 25 26 27 28 29 [DISABLE] 30 //code from here till the end of the code will be used to disable the cheat 31 dealloc(newmem) 32 "rabiribi.exe"+8D363: 33 mov ecx,[ebp-10] 34 sub eax,ecx 35 //Alt: db 8B 4D F0 29 C8
經過親測可以達到效果。其中 A 是 十六進制的 10,如果想要100倍就將 A 改成 64 ( 6 * 16 + 4 = 100 )。
3、SP值不減(可以不停的敲錘子)
我們還是通過“未知初始值”,然后不斷變化找到 SP值 的地址,然后查找修改它的匯編碼,我找到的匯編碼地址是 "rabiribi.exe"+84F7E ,大抵是:
匯編代碼 實際效果
movd xmm0,[ecx+edx+000005B8] // xmm0 = (float) [ecx+edx+000005B8] (這一句可能不太妥,大家看看就好,不必較真)
subss xmm0,xmm1 // xmm0 = xmm0 - xmm1
cvttss2si eax,xmm0 // eax = (int) xmm0
mov [ecx+edx+000005B8],eax // [ecx+edx+000005B8] = eax
經過分析,我們知道 [ecx+edx+000005B8] 是 SP 值地址,xmm1 是其中要減去的值。所以,我們采用最簡單的方法,將 subss xmm0,xmm1 一句注釋掉掉,就可以了。大家甚至可以將這四句話都注釋掉,運行還能更加快捷呢!

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 //subss xmm0,xmm1 13 cvttss2si eax,xmm0 14 15 exit: 16 jmp returnhere 17 18 "rabiribi.exe"+84F7E: 19 jmp newmem 20 nop 3 21 returnhere: 22 23 24 25 26 [DISABLE] 27 //code from here till the end of the code will be used to disable the cheat 28 dealloc(newmem) 29 "rabiribi.exe"+84F7E: 30 subss xmm0,xmm1 31 cvttss2si eax,xmm0 32 //Alt: db F3 0F 5C C1 F3 0F 2C C0
4、MP值不減
這個和 SP 類似,但是又不完全是,我找到的地址是 "rabiribi.exe"+4F7D1,
匯編代碼 實際效果
movss xmm1,[esi+ecx+000006BC] // xmm1 = [esi+ecx+000006BC]
... ...
subss xmm1,xmm0 // xmm1 = xmm1 - xmm0
... ...
movss [ecx+esi+000006BC],xmm1 // xmm1 = [ecx+esi+000006BC]
這個我就不多說了吧,[esi+ecx+000006BC] 是 MP地址的值(實際存),去除 sub 一句,去除 mov 一句等等方法都可以!任選一種,親測為去除最后賦值 movss 一句,有效果!

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 //movss [esi+ecx+000006BC],xmm1 13 14 exit: 15 jmp returnhere 16 17 "rabiribi.exe"+4F7D1: 18 jmp newmem 19 nop 4 20 returnhere: 21 22 23 24 25 [DISABLE] 26 //code from here till the end of the code will be used to disable the cheat 27 dealloc(newmem) 28 "rabiribi.exe"+4F7D1: 29 movss [esi+ecx+000006BC],xmm1 30 //Alt: db F3 0F 11 8C 0E BC 06 00 00
5、無限金錢(EN值)
我們通過找尋金錢值,發現共有三處可以修改它:一是商店購買,消耗 EN值;二是打怪,補充 EN值;三是最大 99999 的 EN 值 越界判定。嗯,其實簡單來說直接找到 EN值的基地址就行了,因為它本身就是一級地址,直接找到改成 99999 就行了。但是呢,我偏不!!!我就要整代碼!(大家不要學我,除非你遇到的地址是變化的多級地址)。我們把補充 EN 值 的代碼和消耗 EN 值 的代碼統一修改成 越界賦值語句就可以了。下面是匯編代碼:

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 //mov [rabiribi.exe+167608C],eax 13 mov [rabiribi.exe+167608C],0001869F 14 15 exit: 16 jmp returnhere 17 18 "rabiribi.exe"+1C10EA: 19 jmp newmem 20 returnhere: 21 22 23 24 25 [DISABLE] 26 //code from here till the end of the code will be used to disable the cheat 27 dealloc(newmem) 28 "rabiribi.exe"+1C10EA: 29 mov [rabiribi.exe+167608C],eax 30 //Alt: db A3 8C 60 6D 01

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 //sub [rabiribi.exe+167608C],esi 13 14 exit: 15 jmp returnhere 16 17 "rabiribi.exe"+29134: 18 jmp newmem 19 nop 20 returnhere: 21 22 23 24 25 [DISABLE] 26 //code from here till the end of the code will be used to disable the cheat 27 dealloc(newmem) 28 "rabiribi.exe"+29134: 29 sub [rabiribi.exe+167608C],esi 30 //Alt: db 29 35 8C 60 6D 01
6、無限跳
好了,大家上面的其實也還好。這次的 “無限跳” 是屬於我之前未接觸過的修改項。當然嘍,我也是身法實在沒有,才迫不得已准備這一個功能。我們首先確立思路:當我們對這一功能如何實現完全無法入手的時候,我們應該先想一想它跳躍為什么只能跳一下?再者,要是讓我來寫我要怎樣寫才能實現只跳一次呢?如果實在無從下手,索性我們就直接搜索未知值的地址。跳起來搜索變化的地址,落地搜索變化的地址,常此往復(可以適當在空中暫停倆次,其中一次查為改變;或者在路上走一走,查未改變的值),直到我們剩余的值的數量可以控制。之后綁定所有的值不變看看是不是能夠實現 “無限跳”的效果。如果能,我們就可以繼續尋找 究竟是哪幾項不改變能實現“無限跳”的功能了。那么,實際上我找到的是兩個地址,一個地址在落地后值為 0,空中為1;另一個值在落地后為 0,空中是 6。這樣,我們再找是什么修改這兩個值。凡是有可能將其值改變成不是 0 的代碼都要被修改,修改成 給地址賦值 0 的語句就行了。你試着找一下,你一開始會找到三個。如果只修改這三個,那么你在下落的時候就無法再次起跳。所以,在鎖定這三個的同時繼續尋找,會找到一個下落時的數值判定,再把它改成 賦值為 0 的語句就大功告成了。
匯編代碼如下:

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 //mov [ecx+edi+00000644],00000001 13 mov [ecx+edi+00000644],00000000 14 15 exit: 16 jmp returnhere 17 18 "rabiribi.exe"+8CAF9: 19 jmp newmem 20 nop 6 21 returnhere: 22 23 24 25 26 [DISABLE] 27 //code from here till the end of the code will be used to disable the cheat 28 dealloc(newmem) 29 "rabiribi.exe"+8CAF9: 30 mov [ecx+edi+00000644],00000001 31 //Alt: db C7 84 39 44 06 00 00 01 00 00 00

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 //mov [edi+esi+00000644],00000001 13 mov [edi+esi+00000644],00000000 14 15 exit: 16 jmp returnhere 17 18 "rabiribi.exe"+94A3F: 19 jmp newmem 20 nop 6 21 returnhere: 22 23 24 25 26 [DISABLE] 27 //code from here till the end of the code will be used to disable the cheat 28 dealloc(newmem) 29 "rabiribi.exe"+94A3F: 30 mov [edi+esi+00000644],00000001 31 //Alt: db C7 84 37 44 06 00 00 01 00 00 00

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 //mov [ebx+esi+000004BC],eax 13 mov [ebx+esi+000004BC],0 14 15 exit: 16 jmp returnhere 17 18 "rabiribi.exe"+1BDCFC: 19 jmp newmem 20 nop 2 21 returnhere: 22 23 24 25 26 [DISABLE] 27 //code from here till the end of the code will be used to disable the cheat 28 dealloc(newmem) 29 "rabiribi.exe"+1BDCFC: 30 mov [ebx+esi+000004BC],eax 31 //Alt: db 89 84 33 BC 04 00 00

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 //mov [ebx+esi+000004BC],00000006 13 mov [ebx+esi+000004BC],00000000 14 15 exit: 16 jmp returnhere 17 18 "rabiribi.exe"+1BDD15: 19 jmp newmem 20 nop 6 21 returnhere: 22 23 24 25 26 [DISABLE] 27 //code from here till the end of the code will be used to disable the cheat 28 dealloc(newmem) 29 "rabiribi.exe"+1BDD15: 30 mov [ebx+esi+000004BC],00000006 31 //Alt: db C7 84 33 BC 04 00 00 06 00 00 00
親測無限跳的演示
修改器截圖
后續更新部分---------------【2020-09-03 更新】
呼~網上真的是找不到 1.99t 版本的游戲本體,我還是老老實實的去Steam上買了,下載完都下午了。我測試了一下,這個版本貌似有 CE 監聽,不能設斷點,自然也是不能查找修改代碼端。一路上都是靠着分析之前的代碼,進行查找最后完成的功能修改。今天心態不太好,就不准備做新的功能了,我也要步入學業忙起來了,我就先休息了。下次更新時間再定吧!
新的功能部分和修改部分解釋說明:
1、無限金錢因為1.99t中,有刷怪的EN值檢測,無法完成。所以最終決定僅僅保留商店不消耗的部分。(因為打怪刷EN值的代碼不能啟用,於是我就把它丟盡 old address 部分了)
2、無限跳
起初因為開啟了4個代碼修改無法實現(prev 兩個和 next 兩個),而關閉了后面的prev兩個可以實現,我就認定只需要前兩個就可以了,但實際上親測時重新開了一個存檔發現還是不能無限跳。最終發現需要執行最后兩項修改(prev)也還是需要執行一次,所以我們采用新穎的辦法,增加一個 if 判定(cmp je)。生成一個全局變量 x 。一開始生成的時候,系統會默認它的值是 0,所以我們判定如果它是 0,就不再執行之前的語句,而是給 x 賦一個 不為 0 的值。這樣第二次遇到的時候就可以不再執行。當然我們取消掉 “無限跳”的功能的時候,變量和代碼都會被更改因而不會產生變化。

1 [ENABLE] 2 //code from here to '[DISABLE]' will be used to enable the cheat 3 alloc(newmem,2048) 4 alloc(item_tmp,8) 5 label(returnhere) 6 label(originalcode) 7 label(exit) 8 registersymbol(item_tmp) 9 10 newmem: //this is allocated memory, you have read,write,execute access 11 //place your code here 12 13 originalcode: 14 cmp [item_tmp],00000000 15 je exit 16 mov [ebx+esi+000004BC],00000006 17 18 exit: 19 mov [item_tmp],00000006 20 mov [ebx+esi+000004BC],00000000 21 jmp returnhere 22 23 "rabiribi.exe"+1BFBB5: 24 jmp newmem 25 nop 6 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 dealloc(item_tmp) 35 unregistersymbol(item_tmp) 36 "rabiribi.exe"+1BFBB5: 37 //mov [ebx+esi+000004BC],00000006 38 mov [ebx+esi+000004BC],00000000 39 //Alt: db C7 84 33 BC 04 00 00 06 00 00 00

1 [ENABLE] 2 //code from here to '[DISABLE]' will be used to enable the cheat 3 alloc(newmem,2048) 4 alloc(item_tmp_s,8) 5 label(returnhere) 6 label(originalcode) 7 label(exit) 8 registersymbol(item_tmp_s) 9 10 newmem: //this is allocated memory, you have read,write,execute access 11 //place your code here 12 13 originalcode: 14 //mov [ebx+esi+000004BC],eax 15 mov [ebx+esi+000004BC],0 16 17 exit: 18 jmp returnhere 19 20 "rabiribi.exe"+1BFB9C: 21 jmp newmem 22 nop 2 23 returnhere: 24 25 26 27 28 [DISABLE] 29 //code from here till the end of the code will be used to disable the cheat 30 dealloc(newmem) 31 dealloc(item_tmp_s) 32 unregistersymbol(item_tmp_s) 33 "rabiribi.exe"+1BFB9C: 34 mov [ebx+esi+000004BC],eax 35 //Alt: db 89 84 33 BC 04 00 00
1.99s版本無限跳沒有任何改變,因而不再演示(沒有特殊標注是1.99t版本的統一認定是1.99s版本)
3、BOSS連續傷害MAX判定
這個功能是在打BOSS 的時候,可以一擊達到 MAX 99999 的判定,可以說是一擊達到要求,后續正確做一個判定鎖定的。注意:如果被攻擊貌似也還是會回扣...反正親測沒有。原理是把賦值的位置改為賦值 99999.

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 mov [eax+000005C8],1869F 13 mov ecx,[eax+000005C8] 14 15 exit: 16 jmp returnhere 17 18 "rabiribi.exe"+59A42: 19 jmp newmem 20 nop 21 returnhere: 22 23 24 25 26 [DISABLE] 27 //code from here till the end of the code will be used to disable the cheat 28 dealloc(newmem) 29 "rabiribi.exe"+59A42: 30 mov ecx,[eax+000005C8] 31 //Alt: db 8B 88 C8 05 00 00
4、無敵狀態
無敵狀態的原理其實非常簡單,在系統中有賦值語句對應 [edi + esi + 00000680] 的語句中,若 edi 是 0,則可以判定這是玩家的結構體內部,而此地址就是對應玩家的無敵狀態剩余時間。(只要不為 444,就說明處於無敵狀態)。所以我們需要在它數值更改的代碼段進行更改(Steam1.99t 版本在執行斷點是會被察覺自動退出游戲進而無法修改,可以先使用1.99s 版本進行修改,並記住修改位置及其附近的代碼【應挑選沒有rabirabi.exe+xxxxx的代碼】,到1.99t時直接搜索代碼段進行查找)
我遇到的修改項有 5 個,但並不是每一個都要修改,有賦值成 FFFFFFFF32 的,這個是我們進入對話之后的狀態,建議不要修改(親測修改的話,游戲會黑屏)。我們要修改賦值為 0 的和兩個賦值為 eax 的,0 對應的是 “當你切換地圖時,我們會產生無敵狀態” 的代碼段。而 eax 是對應 “你受傷時的賦值” 和 “無敵狀態剩余時間不為 0 時自動減少” 的代碼段。 我們可以分析並進行匯編代碼的編寫:

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 cmp ebx,00000000 13 jne exit 14 mov edx,20 15 jmp exit 16 17 exit: 18 mov [ebx+esi+00000684],edx 19 jmp returnhere 20 21 "rabiribi.exe"+1C05C2: 22 jmp newmem 23 nop 2 24 returnhere: 25 26 27 28 29 [DISABLE] 30 //code from here till the end of the code will be used to disable the cheat 31 dealloc(newmem) 32 "rabiribi.exe"+1C05C2: 33 mov [ebx+esi+00000684],edx 34 //Alt: db 89 94 33 84 06 00 00

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 mov [esi+00000684],00000020 13 14 exit: 15 jmp returnhere 16 17 "rabiribi.exe"+3255C9: 18 jmp newmem 19 nop 5 20 returnhere: 21 22 23 24 25 [DISABLE] 26 //code from here till the end of the code will be used to disable the cheat 27 dealloc(newmem) 28 "rabiribi.exe"+3255C9: 29 mov [esi+00000684],00000000 30 //Alt: db C7 86 84 06 00 00 00 00 00 00
5、取消BOSS無敵判定(僅限1.99s版本)
首先因為1.99t 版本BOSS無敵判定有監聽,無法完成修改,所以1.99t 版本沒有此項功能。要實現這個功能,原理和上一個差不多,我們 判定 edi 不是 0,則把無敵時間改為 0 即可。不過為了和個人無敵狀態不沖突,我們需要和上一個修改做妥協處理,我們需要隔開,選用上上句進行自動匯編。

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 jp rabiribi.exe+1BE729 13 lea edx,[ecx-01] 14 cmp ebx,00000000 15 je exit 16 mov edx,0 17 jmp returnhere 18 19 exit: 20 jmp returnhere 21 22 "rabiribi.exe"+1BE71D: 23 jmp newmem 24 returnhere: 25 26 27 28 29 [DISABLE] 30 //code from here till the end of the code will be used to disable the cheat 31 dealloc(newmem) 32 "rabiribi.exe"+1BE71D: 33 jp rabiribi.exe+1BE729 34 lea edx,[ecx-01] 35 //Alt: db 7A 0A 8D 51 FF
CT文件一覽:(下載時是分開的)
新的修改器頁面如下:
version 1.99s
version 1.99t
順便提一句,用了修改器我幾個小時就通關了,還完成了不少成就(親測至通過)
后續更新部分---------------【2021-01-29 更新】
好了,我看到 Rabi-ribi 在 Steam 更新了,所以我也來小更新一波。我覺得也沒什么,其中地址變了倒是挺麻煩的,大概就做了4個小時,就知道是什么機制了。這里面值得提及的是,如果遇到 [edi+ebx+00000460]這類地址,着重搜索 “+00000460],”字眼就好了。因為我發現里面的 edi ebx 都是可能變換的(下一版本可能是 edx esi 等等),找不變的地方才好找到原本代碼。(好了,下載鏈接已經更新)