我認識DnSpy已經算是很久了,但一直都沒辦法看清他的全貌。對我來說,他根本就是一個逆向的萬能工具,每當我要做遊戲(C# base)的mod時,都會用上他。
DnSpy
DnSpy 是一款真正的 破解 偵錯軟體,在GitHub上擁有18K的星星。去年(2020年8月)後,就沒有再更新,但其實他現在的功能就已經很完善了,使用上也已經接近真正的 Visual Studio 。
在 Visual Studio 2019 整合 Decompile 偵錯功能前,DnSpy 一直是無源碼偵錯的半壁江山,時至今日,對於電腦跑不動完整 Visual Studio 的人,他也是個輕量化工具(50多MB)。
Unity遊戲主角
總之就是在不知道哪裡找到的單機遊戲主程式,我相中他的原因是因為他的檔案大小只有350MB。這樣的遊戲,內容肯定不會太多,最適合拿來寫入門級教學文。至少比起Sim4來說,這遊戲不可能太複雜。
因為我沒玩過這個遊戲,所以依照遊戲預覽圖判斷,遊戲有5種資源,且很稀有。
準備好後,先看看目錄裡有什麼東西
從Assembly-CSharp.dll
可知這個遊戲是用 C# 所寫,跟預想中的一樣。
接下來用DnSpy打開Assembly-CSharp.dll
,很幸運地,沒有被加密,所以我們可以看到下面這個讀得懂的介面。
點開左邊的檔案,再點開 { }
以查看這遊戲所使用的方法。
瀏覽所有的方法,並找找看我們或許需要的東西。
結果發現了一個叫做 cheat 的方法,原來,這個遊戲本身就有作弊碼這個東西。
看一下 cheat 方法裡的 Action 函數,我們找到了需要的東西。
只需要在遊戲一開始植入 Game.Instance.AddInventory(Game.ItemType.coin, 9999);
這類的程式就可以輕鬆變成 XXXX無限金幣版 。
後記
我覺得本文的例子或許有點太簡單了,但我覺得作為 DnSpy 的入門工程應該足夠了吧。