標籤:
android 上的API函數鉤子,利用CydiaHook實現
發布將近一年了,最近發現還是有些人需要的,github上也有些人fork了。
例子代碼,發布在github上,地址:https://github.com/zencodex/cydia-android-hook
CydiaHook
利用Cydia Substrate SDK 開發,可以HOOK java層或NATIVE層 API介面。
本代碼功能
寫代碼的初衷是因為有個app,需要儲存資料到SD卡上,並且app裡面有判斷SD掛載的狀態。沒有SD卡,會造成程式邏輯有問題,很多功能無法正常使用,而My Phone沒有裝SD卡。
另外這種HOOK方式也有助於偵錯工具,不必因為修改ROM底層,而引起手機變磚,簡便好用,目前Cydia Substrate在某些手機中可能會有不穩定的情況,我測試的機型是ZTE U969,還找不到相關ROM。
- HOOK android.os.Environment.getExternalStorageState(),強制返回,已掛在狀態。
- 執行mount bind 掛載可以讀寫目錄到 SD卡的路徑,每個終端方案商的掛載點都可能不同,請根據自己的情況,修改成正確的掛載點路徑。
- 可以根據自身需要,修改掛載實現函數,可以HOOK framework中的任何API。在Main.java裡,比如IMEI,GPS類比等等。
準備工作
- ROOT過的手機一部,沒有ROOT的,請自行搜尋方法。
- Eclipse 上安裝 Android Substrate SDK,參考:
http://www.cydiasubstrate.com/id/73e45fe5-4525-4de7-ac14-6016652cc1b8/
- 手機端去Google Play 下載安裝 Cydia Substrate
- Eclipse 匯入本代碼,編譯後安裝到手機。
- 手機上運行Substrate,介面上點擊“Link Substrate Files”,再點擊 “Restart System(Soft)”
- 通過CydiaHook,查看掛載路徑和狀態。
參考官方的入門教程 VioletExample:
http://www.cydiasubstrate.com/id/20cf4700-6379-4a14-9bc2-853fde8cc9d1/
cydia-android-hook
Cydia Substrate demo, hook getExternalStorageState, always return MOUNTED status.
android 上的API函數鉤子,利用CydiaHook實現