本文中的主要思路來源于狗神的一篇文章硼补。這里只是記錄了我在實(shí)踐中的全過程茶鹃。
hook具有root權(quán)限的App释液,這個(gè)事兒也和朋友討論過全释,但是我們會(huì)遇到不同的問題,希望大家把自己遇到的問題(解決的沒解決的)都發(fā)上來误债,以便后面的同學(xué)少走彎路浸船。
閑話少敘,下面就開始寝蹈。本文將以一款很常見的應(yīng)用iFile為例李命。用上面狗神介紹的方法進(jìn)行hook。
一箫老、查看iFile.app里面的內(nèi)容封字。
什么情況?怎么這么多iFIle*耍鬓?
但是觀察發(fā)現(xiàn)阔籽,里面的iFile文件大小為,與其他人相去甚遠(yuǎn)牲蜀。此文件必有蹊蹺笆制,二話不說直接拖進(jìn)MachOView中。發(fā)現(xiàn)原來是個(gè)bash文件涣达。和狗神在另一篇文章中提到用bash調(diào)起具有root權(quán)限App道理是一樣的在辆。只是把文件改了個(gè)名字(自己還是眼力不行爸ま薄)。
既然是這樣开缎,直接把該文件拖進(jìn)Sublime Text中棕叫。
仔細(xì)看看林螃,確實(shí)也沒啥奕删,就是在判斷到底執(zhí)行哪個(gè)文件。如果不從這個(gè)這個(gè)文件查看疗认,也可以從手機(jī)的進(jìn)程中查看完残,效果是一樣的。
OK横漏,確定了是哪個(gè)文件在執(zhí)行谨设,一會(huì)就可以直接動(dòng)手改了。在改之前缎浇,先隨便寫個(gè)tweak扎拣。
雖說是隨便寫個(gè),但是好歹得知道hook在什么方法上吧素跺。只得還是把iFile的頭文件拿出來二蓝。
隨便選一個(gè),反正今天的重點(diǎn)不在這指厌,哈刊愚。。踩验。
tweak.xm里面隨便打了一句Log鸥诽,是個(gè)意思就好
%hook FileViewController
- (void)viewDidAppear:(BOOL)arg1
{
NSLog(@"Labrador, i am hook in iFile");
%orig(arg1);
}
%end
恩,現(xiàn)在插件也準(zhǔn)備好了箕憾,安裝到手機(jī)上牡借,然后拷貝一份在手機(jī)的/var/tmp/目錄下。因?yàn)槲覀円巡寮穆窂街付檫@個(gè)路徑袭异。
下面該是修改iFile_文件了蓖捶。要用到insert_dylib這個(gè)工具。這是一個(gè)mac上的工具扁远,下載好代碼后俊鱼,自己編譯一下,然后把生成的insert_dylib放到一個(gè)合適的位置畅买,就可以開始工作了并闲。
命令使用的格式很簡(jiǎn)單
path/to/insert_dylib /path/to/dylib /path/to/iFile_
執(zhí)行完這個(gè)命令,會(huì)生成一個(gè)iFile__pathced文件」刃撸現(xiàn)在還沒完帝火,不要急著把文件拷貝回去溜徙。
下面還要對(duì)文件進(jìn)行一次簽名。具體為什么這么做犀填,大概猜測(cè)蠢壹,只是為了保持文件的結(jié)構(gòu)。
ldid -S iFIle__patched
OK九巡,現(xiàn)在好了图贸。可以把修改后的文件拷貝回去冕广,替換原來的iFile_了疏日。記得名字一定不要錯(cuò)哦。撒汉。沟优。
上面的描述的幾個(gè)步驟,直接上張操作圖睬辐。
下面就是見證奇跡的時(shí)刻挠阁。我們?nèi)タ纯碙og打印出來沒。
哈哈 成功了溯饵!
說明:
關(guān)于用ldid個(gè)iFile__patched簽名貌似是必須的侵俗,如果不簽的話,會(huì)出現(xiàn)閃退瓣喊。
我記得錯(cuò)誤提示信息最后是坡慌。。藻三。killed:9
貌似還有可能出現(xiàn)其他的錯(cuò)誤提示信息洪橘,歡迎留言,大家一起討論下棵帽。
內(nèi)容到此結(jié)束了熄求,如果上面有問題,請(qǐng)各位同學(xué)指正逗概,如果有大神光顧弟晚,請(qǐng)一定不吝賜教。有很多不懂得地方逾苫。
就這樣吧卿城。。铅搓。