青蛙旅行 — Unity3d類安卓遊戲逆向分析初探

0x01 前言

最近一款養蛙的遊戲非常火,但是語言是日文的。下載了一個漢化的,結果廣告一大堆。反編譯之後查看是Unity遊戲,之前沒接觸過,就想著跟著看一下。關於這類的破解,可以在52pojie上進行搜索。有很多類似的案例。

這裡主要採用的工具為dnSpy,dnSpy 是一款針對 .NET 程序的逆向工程工具。反編譯和打包採用的是apktool,當然也可以直接用改之理等工具。

雖然本文以一個小遊戲為實例,但這個思路值得安全滲透人員借鑒。

0x02 修改數據

下載app後重命名為zip文件,發現存在assetsinDataManaged目錄,那麼該遊戲應該為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 遊戲攻略

以下內容均來自知乎

作者:黃小秋

鏈接:zhihu.com/question/6873

呱是如何旅行的?

確定了地點之後,呱會開始旅行:

  1. 攜帶物品會決定蛙最長能旅行多久,6 ~ 72 小時不等。
  2. 初始體力由攜帶物品決定,以 100 為基數提升。

    *物品的具體屬性參考下面的圖鑑
  3. 經過圖上的一條路(邊)的時候,道路的地形屬性和所攜帶的物品屬性互相作用,會決定呱實際消耗的時間和體力。
  4. 路上可能會遇見小夥伴,會在之後的旅行中結伴而行,從而出現在明信片中。
  5. 根據路途屬性,有一定概率會寄相關的明信片。
  6. 當體力不支的時候,蛙必須停下來休息 3 小時,休息完之後體力會恢復到 100。休息時間也算作旅行時間。
  7. 當到達目的或者旅行時間耗盡的時候,蛙就會回家。
    1. 回家時會攜帶三葉草和抽獎券。
    2. 如果在時間耗盡前到達了目的地,蛙會在此基礎上帶回當地特產和收藏品。

所以如果你的蛙很久都沒回家,回家了也沒有帶土特產,可能是路途上多次體力不支,暈倒在路邊。

呱在每條路上的耗時是怎麼計算的?

設:

為當前道路 耗時

為當前道路的 地形增加耗時

為當前道路的 地形,

為攜帶物品數量

依次為攜帶的第

件物品中所有具有 普通、山地、大海、洞穴、任意地形 移動速度 的效果值。

如果當前道路是 普通 地形,則耗時因疊加 移動速度 效果而減少:

或者 如果當前道路是 山地、大海、洞穴 地形,基礎耗時不變,地形增加耗時因疊加 移動速度 效果而減少:

如果攜帶了 乳蛋餅 (のひ?るのキッシュ)這種 全地形 移動速度 提升的物品,則會在此基礎上再次疊加 移動速度 效果:

最終獲得的

就是該條道路上的實際耗時。

呱離家出走了怎麼辦?

如果長時間沒有準備便當,包里和桌上都沒有食物,呱會憤然離家出走(どこかへ出かけています)。

這個時候在桌子上放上吃的,呱就會在 5~30 分鐘內回家。

有趣的是,離家出走也算作成就計算中的旅行次數…emmmm。

道路有哪些屬性?

連接不同地點之間的每條路 (edge) 都有以下幾個屬性

  • 地形

    四種地形分別是 普通、大海、山地、洞穴

  • 耗時

    途徑這條路的體力和時間損耗,分為基礎耗時和地形增加耗時

    呱需要跋山涉水自然會耗時久一點
  • 明信片概率

    明信片上不同元素出現的概率

    據說所有的地圖元素都有真實原型
  • 遇見夥伴

    遇見特定夥伴的概率

每件物品都有什麼效果?

奉上這張吐血整理的物品效果圖鑑:

有五類不同的物品

  • 便當

    商店購買或者抽獎獲得的食物

  • 幸運符

    除了四葉草和可以購買的幸 (tǔ) 運 (háo) 鈴之外,都要抽獎獲得
  • 道具

    商店購買
  • 特產

    呱旅遊時獲得
  • 收藏品

    特別的特產,通常在縣府獲得,無法使用

屬性分類

  • HP
    • 最大時間(小時

      決定蛙的旅行時間
    • 初始體力提升(%)

      增加一開始一鼓作氣能旅行的距離
    • 隨機體力提升(%)

      隨機額外增加體力提升的最高百分點
  • 物品幾率
    • 三葉草

      獲得三葉草數量
    • 額外隨機三葉草

      隨機額外獲得的最大三葉草數量
    • 抽獎券

      獎券數量
    • 物品數量增多

      增加獲得目的地收藏品的概率
  • 決定地區

    對應地區被選中的概率,如果值為 D 則可以直接決定目的地所在區域
  • 移動速度

    根據地形不同,提升移動速度,減少途徑所耗費的時間,在相同旅行時間內可以走更遠
  • 朋友

    遇到特定旅行夥伴的概率
  • 遭遇地形

    途徑特定地形時候獲得相應明信片的概率
  • FLAG 屬性

    立一些特定的 Flag,主要影響成就系統,下面會寫到

如何科學使用物品?

這裡用幾個例子來展示物品和路線結合的效果

  1. 決定想去的地區

    攜帶的便當和抽獎獲得的護身符(お守り)可以提升選擇特定地區的概率。 抽獎獲得的車票(きっぷ)可以直接決定所去到的地區。

    例:想去北方,使用北國きっぷ。
  2. 影響路途的距離和時間

    最大時間 值高的食物吃走得遠,帶 體力提升 值高的食物吃走得快耗時少。
  3. 快速通過沿途路線的地形

    帶有地區速度加成的食物或者道具,可以增加特定地形的移動速度。

    不同物品的 移動速度 效果可以疊加,詳情查看上面的解釋。
  4. 匹配在道路上遇到的夥伴

    如果在途徑會遭遇夥伴的道路,特定物品可以增加實際遭遇概率

    例:
    抽獎抽到的黃色ぼうろ(餅乾)可以增加路途中遇到螃蟹的幾率。

綜合運用(敲黑板!!!)

呱想去秋田県男鹿市看燈塔

  1. 在地圖上找到 秋田県(3022) 在北方。
  2. 便當選擇 あさつきのヒ?ロシキ (蔥餅?)可以提升去北方的概率。
  3. 攜帶 青色のお守り (藍色護身符)可以提升去北方的概率。
  4. 如果有 北國きっぷ(北方車票?)可以直接決定去北方,上面的便當和護身符可以換別的。
  5. 通過目的地概率表發現攜帶各類帳篷前往 3022 目的地的概率更高。
  6. 查看可能的路線發現從起始點 3000 到 3022 之間會途徑很多山路。
  7. 攜帶 ハイテクテント (高級帳篷?)增加山地移動速度更顯著。
  8. 如果還有空餘,可以帶上 よつ葉(四葉草)或者 幸運の鈴,提升帶回物品的概率。

0x05 參考鏈接

  1. paper.seebug.org/519/
  2. zhihu.com/question/6873

推薦閱讀:

CTF逆向題中的編程技巧
有Android逆向基礎如何學習Android漏洞挖掘?
構造函數和析構函數在不在 vftable 裡面?
R2逆向學習(1-3)
自動化二進位文件分析框架:angr

TAG:旅行青蛙旅かえる | 逆向工程 |