LV. 18
GP 29

RE:【問題】請各位修改同好幫忙一下,謝謝。

樓主 BrutalDeath litohow
GP5 BP-


※ 引述《M77777 (米凱爾)》之銘言

> 沒錯啊!程式語言確實是我們很弱的一環啊!最近試改東方妖妖夢.位置找到了.卻都是浮點運算結果.直接輸入數字後立即發生衝突(crash)跳出遊戲.機械碼任務追蹤之後.卻不知道下一步要做什麼.後來發現"小白勝"大大在自己的網路空間放了東方妖妖夢1.00b修改器第4版.測試後完全有效.但是那卻是"小白勝"大大3年前po上去的.當時還沒有gm9.真不知道這些高手是如何修改出來的?
> ps:後半段的方式我猜測到了.就是"利用事件引發".以本例來說
> 按f2玩家人數不減
> 按f3炸彈數不減
> 按f4無敵
> 按f5火力最大
> 按f6全部取消
> 我不知道的地方在於:
> 追蹤任務搜尋出來一堆機械碼後.怎麼寫出這些程式語言.最後造出一個修改器?
> 過去gm9還未出現時.就能夠做出來.不知道到底是如何造出來的呢?希望有大大能夠指導一下.謝謝!
> (請不要叫我以神偷大師去偷.這樣我永遠不會自己寫.只能抄襲別人的作品-.-b)

我不知道小白勝大大怎麼改的, 我也試著改了一下
順便試試GM9, 呵呵~
 
1. 人數不減
遊戲版本是東方妖妖夢 v1.00b
照你所說直接用浮點數去找, 輸入4.0, 接下來3.0, 然後是2.0和1.0
最後找到一個位址, 直接輸入數值或鎖定, 結果遊戲當場給我關閉, 真是好樣的
重新再來, 找到位址後, 這次用機械碼追蹤
找到以下結果:
我的媽, 這麼多~
仔細看了一下, 原來其中包含了讀取和寫入的機械碼
印象中GM8是不支援讀取的機械碼, 這是新功能
如果是用CE的話, CE可以選擇全追蹤或是只追蹤寫入的機械碼
這方面來說是CE是比較方便一點 ...
那好吧, 到底哪一個是我們要的?
 
第一個是MOV系列指令, 是把後面的[EAX]地址的資料複製到EAX暫存器裡
這個方括符[ ]是表示把裡面的東西當作地址, 也就是我們找到的地址
也就是說, 這是一個讀取地址的指令, 我們要的是寫入的, 所以這一行不考慮
如果是寫成MOV [EAX], EAX 是把資料複製到地址裡, 這樣才是寫入
 
接下來有四行FLD指令, 一看是F開頭的, 就知道是浮點數運算指令
我也看不懂, Google了一下, 原來是將[EAX+0x5c]這個地址裡的資料載入(load)堆疊中
也是一個讀取動作
 
再來的FADD, 浮點相加, 是讀取後面地址裡的資料, 然後加到堆疊的資料中
也是讀取動作
 
最後FSTP, 是把堆疊頂端的資料搬移到地址[EAX+0x5c]裡
這個就是寫入的動作了
 
整個看下來只有 42D602  FSTP DWORD [EAX+0x5c] 這一行是寫入
其他都不是我們要的
這下好, 直接刪除這個機械碼
滑鼠雙擊這行, 選 "刪除此機械碼"

接著勾選 "自動鎖定" -> 確定
回到遊戲中, 人數不減, 修改完成
要注意, 如果只剩零條命的時候才用這個鎖定, 還是會死的
不過只要遊戲開始還有兩條命的時候就用, 就沒關係
 
 
2. 炸彈數不減
浮點數搜尋找到位址後, 啟動機械碼修改, 找到如下結果:

一樣只有這一行是寫入
42D647  FSTD DWORD [EAX+0x68]
滑鼠雙擊該行 --> 刪除此機械碼 --> 自動鎖定 --> 確定
回到遊戲測試, 炸彈不減, 打完收工
 
 
3. 火力(Power)最大
一樣的操作, 找到一堆機械碼, 只有這一行是寫入動作
432615  FSTP DWORD [EAX+0x7c]
這次不能用刪除機械碼了, 刪了以後會造成power不增加
改用注射程式碼, 直接寫入power最大值到地址 [EAX+0x7c] 裡
好, 雙擊該行, 選擇 "修改為另一個機械碼", 出現注射程式碼的視窗
原文保留打勾
我們的程式碼, 當然是要寫在原文之後
如果寫在原文之前, 又會被原文的程式碼寫入成當前值, 白做工
在"之後"的區域裡, 加入這一行程式碼
  dma_writed(RAX+$7C, $43000000)
這個dma_writed就是寫入的函式
RAX+$7C是寫入的地址
$43000000是寫入的值
還記得我們追蹤到的機械碼是 FSTP DWORD [EAX+0x7c]
[EAX+0x7c]就是power的地址
在GM9中, 就把EAX改成RAX, 0x7c就改成 $7C
因此這個地址在GM9中就寫成RAX+$7C
至於寫入的值為什麼是$43000000?
你可以在遊戲中先玩到power max, 會發現power滿檔是128.0
然後觀察記憶體, 可以發現128.0在記憶體中是表示為00 00 00 43
反過來就是十六進位的43000000
在GM9中十六進位值要加$表示, 所以我們要寫入的值就是$43000000啦
程式寫好後, 如下

按下 "關閉" --> 自動鎖定 --> 確定
回到遊戲, 只要吃到一個power就直接power max啦, 修改完成
 
GM9的注射程式碼, 感覺還蠻簡單好用的
基本上, 只要會這一行dma_writed()寫入資料, 就可以打死一堆遊戲了
跟CE比起來, 是有比較簡單, CE的auto assemble雖然也不難, 不過還需要一點點組語知識
以結果來說, 使用GM9的修改玩家對組合語言又更遠了
這不知道算是好還是不好...
 
 
4. 無敵
低階搜尋角色的狀態, 還活著就一直 = 搜尋
死掉, 角色還在閃爍時, ! 搜尋
回到正常狀態, ! 搜尋
持續活著就 = 搜尋
這樣最後可以找到角色狀態的地址, 然後一直鎖定為正常狀態即可
 
搜尋時, 選擇 8bit 位元 (Byte)
最後找到一個位址4BFEE0
這個位址似乎不會變動
在遊戲中觀察的結果, 發現有四個狀態
0: 正常
1: 迷之狀態, 所有彈幕消失
2: 死亡
3: 閃爍
角色死亡的時候, 裝態變化依序是 0 --> 2 --> 1 --> 3 --> 0
這樣只要把位址4BFEE0鎖定為0就好
結果效果不好, 會出現一種死一半又不死的畫面
那就改用機械碼修改吧
追蹤機械碼後, 得到四個寫入的機械碼:
43EE0E  MOV BYTE [EDX+0x2408], 0x2
4410A0  MOV BYTE [EAX+0x2408], 0x1
4412A6  MOV BYTE [EAX+0x2408], 0x3
4413FA  MOV BYTE [EDX+0x2408], 0x0
第一行是寫入狀態2
把這行機械碼刪除, 回到遊戲測試, 修改成功
 
 
 
 
 
5
-
未登入的勇者,要加入討論嗎?
板務人員:歡迎申請板主

精華區有 371 筆文章
目前無人維護,申請組長


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】