root權限的應用Hook方法

工作中碰到了TouchSprite這款應用,很有想法的一個APP,通過模擬點擊的方式來達到自動幫助玩家玩游戲的目的。而且還形成了一個小的生態(tài)圈子,TouchSprite提供這樣一款模擬點擊的工具,但針對各種游戲需要平臺上的腳本開發(fā)者來具體開發(fā)與發(fā)布。玩家可以在這個平臺上搜索自己感興趣的游戲腳本并支付給開發(fā)者相應的費用。一個閉環(huán)的精致的生態(tài)鏈就這樣建立了,完美。好了,不廢話了,今天要寫的話題就是跟這個TouchSprite有關。

TouchSprite是一款使用root賬戶運行的應用,從cydia中將它安裝到手機后,可以在/Application目錄下找到它,可以發(fā)現(xiàn)該目錄下存在著大量的蘋果原生應用。TouchSprite的具體構架這里不再介紹了,后面有時間的話,會單獨的出一篇。在我的上篇文章《Cydia的基石:MobileSubstrate》中有提到有些APP通過在編譯時通過設置__RESTRICT,__restrict編譯參數(shù)來阻止dylib動態(tài)庫的注入。而TouchSprite毫無疑問的采用了這種技術,我們可以能過MachOView來查看它的可執(zhí)行文件TouchSprite.app/Weather來確認這一點(它的plist文件中注明的可執(zhí)行文件是NewTouchSprite,如何跳轉到Weather有待于進一步探索)。

既然傳統(tǒng)的Tweak注入方式不頂用了,我們還有其它的Hook方式嗎?當然有!App運行時所需要的信息,一般都存放在MachO文件的頭部中,而dylib的信息是由load commands塊來確定的。換名話說就是App在執(zhí)行時,dylb會查看APP可執(zhí)行文件的頭部信息,并將包含在load commands塊中由LC_LOAD_DYLIB指定的dylib加載到內(nèi)存空間中去。我們使用machOView查看TouchSprite的load commands模塊截圖如下:

從這個圖上我們可以看到,app運行時所需要鏈接的庫文件信息全部都在這里了,還指明了加載庫文件所要用到的絕對路徑,甚至指明了一些庫文件的weak加載方式。現(xiàn)在我們要做的就是想方設法的將我們自己的庫用LC_LOAD_DYLIB的方式羅列在這里就OK了。怎么做呢?一個叫insert_dylib的開源工具為我們指明了方向,感謝這個工具的作者,工具的地址為https://github.com/Tyilo/insert_dylib。將代碼clone到本地,編譯,使用如下命令來達成目標。

這里要注意的是insert_dylib這個工具是mac端的,如果你將它scp到手機上使用的話,它會報錯的。

這里還有一個小的技巧需要說明下:注意到上圖那個TouchSpriteTweak.dylib了嗎,它是我測試用的動態(tài)庫,也是我想注入到TouchSprite中的動態(tài)庫,它在mac上的絕對路徑是不是與手機上一般情況下tweak所在的絕對路徑完全一致,是的,這是我故意做的,這樣我就能夠使用傳統(tǒng)的tweak編譯導入方式將動態(tài)庫上傳到手機中去,然后應用會自動到這個路徑下來加載我的庫文件,這個想法有點高明哈。

當我完成以上操作后,我開始以為完成了所有的步驟。當我把重新生成的weather_patched文件重命名為Weather并拷貝替換TouchSprite.app下的文件,嘗試在手機上運行該文件才發(fā)現(xiàn),應用崩潰了,而且沒有打印出我期望的運行日志。一番探究后發(fā)現(xiàn)問題出簽名上。如何解決呢?

首先需要使用ldid工具對新生成的Weather_patched重簽名,其次需要在手機上下載AppSync來過濾掉蘋果官方的簽名驗證機制。

測試驗證打包LOG如下,成功完成動態(tài)庫的加載。

參考文章:

http://bbs.iosre.com/t/igrimace-hook-root-app/440

http://bbs.iosre.com/t/tweak-app-app-tweak/438

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容