前面有兩篇關(guān)于逆向工程的谭胚,主要是一些入門級的吧徐块,主要是為了尋找我們逆向該 app 的靈感或入口吧。Reveal 可以幫我們了解該 app 的層級結(jié)構(gòu)灾而,讓我們找到我們想要逆向的實(shí)現(xiàn)胡控,在哪些控制器里。然后通過某些手段 Hook 對應(yīng)的方法旁趟,就有可能達(dá)到我們想要實(shí)現(xiàn)的功能昼激。下面以去視頻廣告為例展開:
一、工具準(zhǔn)備:
- MonkeyDev 大神已經(jīng)幫我們集成了逆向大部分的工具(包含下面 2和4)和框架了锡搜,很方便實(shí)用橙困,可以直接用Xcode 的看UI-----(主要工具)安裝 so easy,按照步驟即可
- class-dump 導(dǎo)出 app 的頭文件凡傅,然后就可以 Hook 頭文件的方法了
- Hopper 二進(jìn)制分析工具(輔助工具),很強(qiáng)大蛾方,可以生成為代碼像捶。自己去用了才知道。
- Reveal 可以幫我們了解該 app 的層級結(jié)構(gòu) ---- (輔助工具)
- Charles 抓包工具----(輔助工具)
二桩砰、尋找突破口
我們可以通過app 的UI 分布圖拓春,來找一下靈感或入口,如果直接用 Hopper 分析的話亚隅,可能會(huì)比較煩躁硼莽,而且要有足夠的耐心(這個(gè)是逆向工程中必備的)和細(xì)心,如果你操之過急的話煮纵,就比較容易失敗懂鸵,你就會(huì)覺得,我怎么知道這個(gè)隱藏的入口在哪里(就是我們要找的突破口行疏,就像黑客攻擊別人的程序一樣匆光,要先找到這個(gè) bug ,才能注入木馬程序)酿联。然而從 UI 入手终息,可能就有捷徑吧,也不一定啊贞让。
反正能直觀的看出來周崭,我們可能要入手的位置,如上圖 1 喳张,播放器前面的是廣告視圖(QNBPlayerVideoAdsView)它屬于控制器(QNBPlayerVideoAdsViewController)如圖 2
可能為我們的突破口:
猜想1:是不是把視頻前面的控制器隱藏了就可以達(dá)到我們?nèi)V告的效果了续镇?
實(shí)現(xiàn)猜想1:
步驟1: 用 class-dump 把 app 的頭文件找出來,不清楚的請來這里
步驟2:編寫 Hook 代碼销部,基于MonkeyDev摸航,如下圖 3
??注意:如果 .xm 文件不能寫入,像 Xcode 右邊柴墩,選擇一下語言
步驟3:結(jié)果我們的猜想是對的,如下圖 4
Hook 代碼
%hook QNBPlayerVideoAdsViewController
- (id)initWithEventProxy:(id)arg1 withPlayerInfo:(id)arg2
withParentViewController:(id)arg3 withPageViewController:(id)arg4 withAddToParenViewControllerNow:(_Bool)arg5
{
return nil;
}
- (id)initWithEventProxy:(id)arg1 withPlayerInfo:(id)arg2
withParentViewController:(id)arg3 withParentEventViewController:(id)arg4
withAddToParenViewControllerNow:(_Bool)arg5
{
return nil;
}
- (id)initWithEventProxy:(id)arg1 withPlayerInfo:(id)arg2
withParentViewController:(id)arg3 withAddToParenViewControllerNow:(_Bool)arg4
{
return nil;
}
- (id)initWithEventProxy:(id)arg1 withPlayerInfo:(id)arg2
withParentViewController:(id)arg3 withParentEventViewController:(id)arg4
{
return nil;
}
- (id)initWithEventProxy:(id)arg1 withPlayerInfo:(id)arg2
withParentViewController:(id)arg3
{
return nil;
}
%end
%hook QNBPlayerIAPView
- (id)initWithFrame:(struct CGRect)arg1 delegate:(id)arg2
{
return nil;
}
- (id)init
{
return nil;
}
%end
Github代碼
其他猜想:也可以抓包從返回的數(shù)據(jù)入手江咳,就是入口找比較久
總結(jié):其實(shí)做什么事情都是一樣,就是多點(diǎn)耐心和細(xì)心歼指,只要心中有目標(biāo)有想法,就去做踩身,堅(jiān)持下去,結(jié)果可能不會(huì)成功挟阻。但是我們總會(huì)收獲過程琼娘,談戀愛也是一個(gè)道理的峭弟。。不用可以去追求結(jié)果脱拼,也許過程才是最美的瞒瘸。。熄浓。
特別聲明:此文為原創(chuàng)文章情臭,只是做為學(xué)習(xí)專用,禁止用于非法用途赌蔑,否則后果自負(fù)俯在。。如果侵權(quán)娃惯,請聯(lián)系刪除跷乐。