您的位置:首頁>正文

殺戮尖塔修改class檔圖文教程

從網上看到有兩種修改方法。 一種是用某些工具把整個jar包完全反編譯, 然後就像製作遊戲一樣修改代碼後再重新封包。 另一種是修改單獨的class檔。

理論上說第一種是最好的, 因為可以想怎麼改就怎麼改, 但仔細想想, 那不等於自學java一樣麼, 我們只想簡單改改遊戲, 並不想搞的那麼複雜不是。

所以我研究的是第二種, 測試成功。 現在說說具體步驟。

比如遊戲裡會中一個confusion”混亂“負面狀態, 卡牌消耗是0-3隨機的。 要隨時有這個狀態, 並總能隨到0多好, 就要這個!(其實有時候切換為英文版更方便看到關鍵字)

第一步

用 DJ java decomper 打開jar遊戲包, 在彈出的視窗上選擇 search, 檔案類型*.class, 搜索文本“confusion”。

等一會找到3個檔包含這個詞。

第二步

用 java decompiler 打開jar包(名字有點像, 但是另一個工具), 分別定位到這3個檔, 搜索confusion找到代碼, 然後觀察代碼。

你只需要稍微有一點點英文基礎, 就能看到關鍵代碼在 AbstractPlayer.class這裡,

random(0,3)就是隨機返回0-3。 這個代碼屬於 public void draw(int numCards)

第三步

很遺憾, 雖然已經看到了要改的代碼, 但並不能在這裡把3改成0。 因為class檔實際是難以理解的jvm代碼, 剛才只是工具幫你轉換為容易理解的明文代碼而已。

用winrar打開jar包, 把AbstractPlayer.class解壓出來。 用jclasslib bytecode viewer打開。 (安裝這個工具前還要先裝一個java runtime,

java官網下載)

在Methods裡面可以看到有兩個draw, 點擊Code就能看到jvm機器碼了。 一對比很容易確定第一個是我們找的。

關鍵是把iconst_3改成iconst_0。 接下來就是提取這段機器碼。

在最下面找到iconst_0, 點那個showDescription, 可以彈出一個網頁顯示出這個命令的機器碼是 3

iconst_3 是6

invokestatic 是b8 , 後面還有2bit的參數, #392轉換為16進制是0x188, 那麼這裡的jvm代碼就是 b8 01 88

這兩個命令的jvm代碼連起來就是 03 06 b8 01 88 。

最後一步

用十六進位編輯器打開AbstractPlayer.class。 (這種軟體比較多, 010editro, winhex等等隨便都可以), 搜索 03 06 b8 01 88。 然後改為 03 03 b8 01 88, 保存。

把修改後的class檔覆蓋回去, 完成。

是不是炒雞簡單?

也許是, 但又好像不是, 你試試就知道了。

殺戮尖塔專題

Slay the Spire發行商:Mega Crit Games平臺:PC類型:策略戰棋(SLG)發售日期:2017年11月15日進入專題>>
同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示