- UID
- 256845
- 帖子
- 502
- 主題
- 501
- 精華
- 0
- 積分
- 503
- 楓幣
- 1730
- 威望
- 502
- 存款
- 0
- 贊助金額
- 0
- 推廣
- 0
- GP
- -5
- 閱讀權限
- 50
- 性別
- 保密
- 在線時間
- 11 小時
- 註冊時間
- 2019-2-14
- 最後登入
- 2019-4-19
|
這個在6封以前(包含)沒問題,超過6封好像通關時間太短有高機率#3,跑腳本測了10隻在7封不同的地方分別#3
7B 81 59 00 04 7B 46 65 00 04 3F 07 00 00 00 02 28 A2 0A 00 06 2A
7B 81 59 00 04 7B 46 65 00 04 3D 07 00 00 00 02 28 A2 0A 00 06 2A
這個是修改"當前回合大於等於關卡總回合時觸發勝利",把判斷給反過來所以進關就會勝利。
重點不是上面的東西,有人發簡訊提問,這邊就統一給有興趣修改的人點方向
下面是上面數組的IL,記憶體編排的關係, | 前的先輸入, 然後 | 後面有(OO)或是給予數值反過來輸入,有興趣了解詳細的可以Google,這裡就不多做解釋了。
IL_00b8: /* 7B | (04)005981 */ ldfld class Floor Game/RuntimeData::currentFloor
IL_00bd: /* 7B | (04)006546 */ ldfld int32 Floor::waveCount
IL_00c2: /* 3F | 07000000 */ blt IL_00ce
IL_00c7: /* 02 | */ ldarg.0
IL_00c8: /* 28 | (06)000AA2 */ call instance void Labyrinth::Victory()
IL_00cd: /* 2A | */ ret
會得到 7B 81 59 00 04 7B 46 65 00 04 3F 07 00 00 00 02 28 A2 0A 00 06 2A
然後我們從List of CIL instructions查到blt也就是3F是指"如果第一個值小於第二個值,則將控制轉移到目標指令",那我們就找他的相反指令bgt也就是3D替換達成進關勝利的效果,其他指令的細節就請到List of CIL instructions來做查詢。
先從改判斷式或是數值入門的話,修改程式的範圍與複雜度較低,比較好上手,等到熟悉後就可以加以變化做出特殊的效果,上面的修改方法都是網路上查的到的方法只是做個簡單整理,至於工具的話可以用ildasm和ilspy,有興趣的歡迎留言討論。 |
|