iOS逆向之旅(進(jìn)階篇) — HOOK(FishHook)

官方簡介

fishhook is a very simple library that enables dynamically rebinding symbols in Mach-O binaries running on iOS in the simulator and on device. This provides functionality that is similar to using DYLD_INTERPOSE on OS X. At Facebook, we've found it useful as a way to hook calls in libSystem for debugging/tracing purposes (for example, auditing for double-close issues with file descriptors).
【簡而言之就是一個很輕量級的庫(就兩個文件),可以動態(tài)的去修改macho可執(zhí)行文件的屬性】
項目地址:FishHook

案例一【HOOK 系統(tǒng)函數(shù)】

  • 直接把FishHook的兩個文件直接拖進(jìn)項目症虑,并引入頭文件
image.png
  • 申明一個函數(shù)指針用于保存原NSLog的真實(shí)函數(shù)地址
    static void(*origNSLog)(NSString *format, ...);
  • 自定義一個新的函數(shù)用于取代NSLog
void newNSLog(NSString *format, ...){
    //再調(diào)用系統(tǒng)的nslog
    origNSLog(@"就不打印");
}
  • 調(diào)用fishhook的rebind_symbols實(shí)現(xiàn)hook
struct rebinding bind;
bind.name = "NSLog";//要HOOK系統(tǒng)函數(shù)的函數(shù)名稱
bind.replacement = newNSLog;//新的函數(shù)去替換系統(tǒng)的NSLog
bind.replaced = (void *)&origNSLog;//把真正的NSLog地址保存到origNSLog
struct rebinding rebs[] = {bind};
rebind_symbols(rebs, 1);

上面這種事傳統(tǒng)的寫法,我們也可以簡寫成
rebind_symbols((struct rebinding [1]){{"NSLog",newNSLog,(void*)&origNSLog}}, 1);

  • 這樣就hook成功了归薛,直接看效果
image.png

HOOK成功~~~~~~~~~

案例二【HOOK 自定義函數(shù)】

  • 在案例一的基礎(chǔ)上繼續(xù)加谍憔,首先聲明一個自定義函數(shù)func
void func(){
    NSLog(@"123");
}
  • 申明一個函數(shù)指針用于保存原func的真實(shí)函數(shù)地址
    static void(*origFunc)();
  • 自定義一個新的函數(shù)用于取代func
void newFunc(){
    NSLog(@"456");
}
  • 調(diào)用fishhook的rebind_symbols實(shí)現(xiàn)hook
    rebind_symbols((struct rebinding [1]){{"func",newFunc,(void*)&origFunc}}, 1);
  • 查看hook結(jié)果
image.png

不難看出hook失敗了匪蝙,hook成功的話,應(yīng)該打印456才對

FishHook的原理

通過以上兩個案例為何FishHook能hook系統(tǒng)函數(shù)习贫,卻hook不了我們自己的函數(shù)逛球,接下來我們對其原理進(jìn)行分析

科普一下

ASLR技術(shù):是一種針對緩沖區(qū)溢出的安全保護(hù)技術(shù),通過對堆苫昌、棧颤绕、共享庫映射等線性區(qū)布局的隨機(jī)化,通過增加攻擊者預(yù)測目的地址的難度祟身。對于我們APP而言奥务,它保證每次MachO文件加載的時候是隨機(jī)地址【這個我們可以通過LLDB指令的image list去查看】


image.png

根據(jù)蘋果pic技術(shù)【位置代碼獨(dú)立】,當(dāng)我們Macho需要調(diào)用系統(tǒng)庫函數(shù)的時候袜硫,會在_DATA段中建立一個指針氯葬。DYLD【動態(tài)庫加載】會進(jìn)行動態(tài)的綁定,會將這個指針指向外部函數(shù)

回過頭我們在分析我們之前的兩個案例

根據(jù)PIC技術(shù)婉陷,我們在調(diào)用NSLog的時候帚称,系統(tǒng)會現(xiàn)在_Data段建立一個指針,這個指針在DYLD動態(tài)加載Foundation框架時秽澳,把這個指針指向NSLog的的真實(shí)地址闯睹。
fishhook他實(shí)際就是在改這個指針,讓這個指針向我們本地函數(shù)的地址肝集。
所以fishhook的函數(shù)名字就叫rebind_symbols(重新綁定這個符號【指針】)瞻坝,很貼切蛛壳。而我們本身自己的函數(shù)杏瞻,不存在這個DYLD動態(tài)加載的過程,自然無法HOOK的了衙荐。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捞挥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子忧吟,更是在濱河造成了極大的恐慌砌函,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溜族,死亡現(xiàn)場離奇詭異讹俊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)煌抒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門仍劈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人寡壮,你說我怎么就攤上這事贩疙《锿洌” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵这溅,是天一觀的道長组民。 經(jīng)常有香客問我,道長悲靴,這世上最難降的妖魔是什么臭胜? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮癞尚,結(jié)果婚禮上庇楞,老公的妹妹穿的比我還像新娘。我一直安慰自己否纬,他們只是感情好吕晌,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著临燃,像睡著了一般睛驳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上膜廊,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天乏沸,我揣著相機(jī)與錄音,去河邊找鬼爪瓜。 笑死蹬跃,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的铆铆。 我是一名探鬼主播蝶缀,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼薄货!你這毒婦竟也來了翁都?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤谅猾,失蹤者是張志新(化名)和其女友劉穎柄慰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體税娜,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坐搔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了敬矩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片概行。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谤绳,靈堂內(nèi)的尸體忽然破棺而出占锯,到底是詐尸還是另有隱情袒哥,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布消略,位于F島的核電站堡称,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏艺演。R本人自食惡果不足惜却紧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胎撤。 院中可真熱鬧晓殊,春花似錦、人聲如沸伤提。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肿男。三九已至介汹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間舶沛,已是汗流浹背嘹承。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留如庭,地道東北人叹卷。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像坪它,于是被迫代替她去往敵國和親骤竹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容