logo头像

星星給予仰望者光芒

免越獄 ShootMoon.app 逆向

本文于 1107 天之前發表,文章内容可能已經過時。

  免越獄 ShootMoon.app 逆向、修改

輸出 IPA

![](source/images/Non-Jailbreak_Shoot_The Moon_Reverse/OutputIPA.png)

使用Hopper Disassembler

啟動Hopper Disassembler,選單中選擇File->Read Executable to Disassembler…,或者按下快捷鍵Command+Shift+O,彈出的對話框中選擇 shootthemoon 文件,再點擊OK。

緊接著會彈出如下圖所示的對話框,保持默認選項,點擊OK。
![](source/images/Non-Jailbreak_Shoot_The Moon_Reverse/Hopper_Disassmbler_.png)

分析與實現

找到 GamePlay Class,發現他有一個方法是 updateScore,
我們先對這方法 hook,嘗試看看

![](source/images/Non-Jailbreak_Shoot_The Moon_Reverse/CaptainHook_ UpdateScore.png)

這邊我們使用 CaptainHook 來撰寫Hook方法,

接著回到遊戲體驗一下,發現這樣的方法,只要射擊到月亮,就直接結束遊戲了…



![](source/images/Non-Jailbreak_Shoot_The Moon_Reverse/Hopper_Disassmbler_1.png)

看一下 method updateScore 反編譯結果,發現他呼叫了一個 ohHoHo 方法,也是在同一個 Class 底下,這邊經驗告述我們,傳進來的參數 arg2 != 0,就進到這個 if 中!

八九不離十,這應該是最終更新分數的方法

![](source/images/Non-Jailbreak_Shoot_The Moon_Reverse/Hopper_Disassmbler_2.png)
在查看一下這方法,對他進行 hook

發現確實跟我們想的一樣

![](source/images/Non-Jailbreak_Shoot_The Moon_Reverse/CaptainHook_ Ohohoh.png)

最終我們完成修改,為了不讓遊戲體驗變得太糟,我們讓原本分數乘10,並調用加時間,能避免一次就過關了…

![](source/images/Non-Jailbreak_Shoot_The Moon_Reverse/IMG_0030.PNG)

![](source/images/Non-Jailbreak_Shoot_The Moon_Reverse/Shoot_The Moon.gif)

總結

這個逆向工程,主要是為了練習 CaptainHook 的使用與寫法,logos 寫法在 Xcode 中無法模糊輸入,沒記下所有的code確實會很礙事…