作者:浮萍@獵戶安全實驗室
0x01 前言
最近一款養蛙的游戲非常火,但是語言是日文的。下載了一個漢化的,結果廣告一大堆。反編譯之后查看是Unity游戲,之前沒接觸過,就想著跟著看一下。關于這類的破解,可以在52pojie上進行搜索。有很多類似的案例。
這里主要采用的工具為dnSpy,dnSpy 是一款針對 .NET 程序的逆向工程工具。反編譯和打包采用的是apktool,當然也可以直接用改之理等工具。
雖然本文以一個小游戲為實例,但這個思路值得安全滲透人員借鑒。
0x02 修改數據
下載app后重命名為zip文件,發現存在assets\bin\Data\Managed目錄,那么該游戲應該為Unity游戲。

那么需要分析的文件就是就是Assembly-CSharp.dll。
首先修改一下抽獎券的數量。安裝游戲后,找到抽獎的地方。抽獎的時候提示券不足。

使用dnSpy打開Assembly-CSharp.dll文件,然后搜索字符串”足”,可以發現有兩個,打開后發現是第一個。

由此可以猜測TicketStock代表抽獎券庫存。

ticket表示抽獎券數量。

當頁查找ticket,發現有一個initialize方法進行初始化。我們將此處的數量改為1000.

快捷鍵Ctrl+E編輯IL指令。找到ticket變量后,將ldc.i4.0改為ldc.i4,然后將數值改為1000.

確定后,發現ticket數值已經改變。

打包后并安裝apk。

打開抽獎界面發現數量已經改變為1000。

這樣雖然達到了修改抽獎券的效果,但數量再大,總會被抽完的。那就換種方法,比如說抽獎的時候增加獎券,或者獎券一直不變。這里采用獎券數量固定的方法,使其不會變動。
if (SuperGameMaster.TicketStock() < 5)
{
ConfilmPanel confilm = this.ConfilmUI.GetComponent<ConfilmPanel>();
confilm.OpenPanel("ふくびき券が足りません");
confilm.ResetOnClick_Screen();
confilm.SetOnClick_Screen(delegate
{
confilm.ClosePanel();
});
return;
}
已知抽獎的時候獎券是從SuperGameMaster.TicketStock()獲取的,找到該方法。令其返回值為固定的數值。

右鍵編輯IL指令。

將其值修改為9000.

然后保存后打包并重新安裝。

此時無論抽多少次,獎券都不再變化。
另一個就是修改三葉草的數量了。三葉草是該游戲中流行的貨幣,買東西都是需要該物品。同理找到CloverPointStock()方法。

將其返回值修改為8888.之后就可以隨便買買買了,三葉草的數量也不會發生變化了。

0x03 漢化
然后就是進行漢化了。漢化的方法和上面的類似。首先搜索需要修改的文字。例如給小青蛙起名字的時候。直接進行字符串搜索。

然后修改為對應的中文就行了。

進入游戲查看

修改其他處的文字也是這樣操作即可。當然這種修改方法比較慢,還有另外一種,直接將他人漢化過的dll文件復制進來,可以快速達到漢化的目的,也沒有廣告的煩惱了。
0x04 總結
這個游戲修改起來比較簡單,首先判斷為該游戲為Unity3d。然后使用dnSpy來對Assembly-CSharp.dll文件進行修改。根據特定的字符串找到需要修改的位置,修改后進行打包簽名后即可。
0x05 參考
[2] https://www.52pojie.cn/thread-647612-1-1.html
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/519/
暫無評論