ios逆向查看視圖層級

參考:https://xiaozhuanlan.com/topic/7193845260

從越獄嘀略、提取iPA檔敲殼到UI分析注入及反編譯的探索過程

關(guān)于安全

之前唯一做過跟安全有關(guān)的就只有 使用中間人攻擊嗅探傳輸資料洼哎;假設(shè)我們在資料傳輸前編碼加密埋合、接受時 APP 內(nèi)解密取募,用以防止中間人嗅探伦仍;那還有可能被偷走資料嗎颂碧?

答案是肯定的窟却!剖笙,就算沒真的試驗(yàn)過软驰;世界上沒有破不了的系統(tǒng)涧窒,只有時間成本的問題,當(dāng)破解耗費(fèi)的時間精力大于破解成果锭亏,那就可以稱為是安全的纠吴!

How?

都做到這樣了,那還能怎么破慧瘤?就是本篇想記錄的議題 — 「逆向工程 」戴已,敲開你的 APP 研究你是怎么做加解密的;其實(shí)一直以來對這個領(lǐng)域都是懵懵懂懂锅减,只在 iPlayground 2019 上聽過兩堂大大的分享糖儡,大概知道原理還有怎么實(shí)現(xiàn),最近剛好有機(jī)會玩了一下跟大家分享怔匣!

逆了向握联,能干嘛?

  • 查看 APP UI 排版方式每瞒、結(jié)構(gòu)

  • 獲取 APP 資源目錄 .assets/.plist/icon…

  • 竄改 APP 功能重新打包 (EX: 去廣告)

  • 反編譯推測原始程式碼內(nèi)容取得商業(yè)邏輯資訊

  • dump 出 .h 標(biāo)頭檔 / keycahin 內(nèi)容

實(shí)現(xiàn)環(huán)境

macOS 版本:10.15.3 Catalina
iOS 版本:iPhone 6 (iOS 12.4.4 / 已越獄) *必要
Cydia: Open SSH

越獄的部分

任何版本的 iOS金闽、iPhone 都可以,只要是能越獄的設(shè)備独泞,建議使用舊的手機(jī)或是開發(fā)機(jī)呐矾,以避免不必要的風(fēng)險;可根據(jù)自己的手機(jī)懦砂、iOS 版本參考瘋先生越獄教學(xué)蜒犯,必要時需要將 iOS 降版認(rèn)證狀態(tài)查詢)再越獄。

我是拿之前的舊手機(jī) iPhone 6 來測試荞膘,原本已經(jīng)升到 iOS 12.4.5 了罚随,但發(fā)現(xiàn) 12.4.5 一直越獄不成功,所幸先降回 12.4.4 然后使用 checkra1n 越獄就成功了羽资!

步驟不多淘菩,也不難;只是需要時間等待!

附上一個自己犯蠢的經(jīng)驗(yàn):下載完舊版 IPSW 檔案后潮改,手機(jī)接上 Mac 狭郑,直接使用 Finder 檔案瀏覽器(macOS 10.5 后就沒有 iTunes 了),在左方 Locations 選擇手機(jī)汇在,出現(xiàn)手機(jī)資訊畫面后翰萨,「Option」按著然后再點(diǎn)「Restore iPhone」就能跳出 IPSW 檔案選擇視窗,選擇剛下載下來的舊版 IPSW 檔案就能完成刷機(jī)降版糕殉。

image

我本來傻傻的直接按 Restore iPhone…只會浪費(fèi)時間重刷一次最新版而已….

使用 lookin 工具查看別人的 APP UI 排版

我們先來點(diǎn)有趣的前菜亩鬼,使用工具搭配越獄手機(jī)查看別人APP 是怎么排版。

查看工具: 一是 老牌 Reveal (功能更完整阿蝶,需付費(fèi)約 $60 美金/可試用)雳锋,二是騰訊 QMUI Team 制作的 lookin 免費(fèi)開源工具;這邊使用 lookin 作為示范羡洁,Reveal 大同小異玷过。

若沒有越獄手機(jī)也沒關(guān)系,此工具主要是讓你用在開發(fā)中的專案上筑煮,查看 Debug 排版(取代 Xcode 陽春的 inspector)平常開發(fā)也能用到冶匹! 唯有要看別人的 APP 需要使用越獄手機(jī)。

如果要看自己的專案…

可以選擇使用 CocoaPods 安裝咆瘟、斷點(diǎn)插入(僅支援模擬器)、手動導(dǎo)入Framework 到專案诽里、手動設(shè)置袒餐,四種方法。

將專案 Build + Run 起來之后谤狡,就能在 Lookin 工具上選擇 APP 畫面 -> 查看排版結(jié)構(gòu)灸眼。

image

如果要看別人的APP…

image

Step 1. 在越獄手機(jī)上打開「Cydia」-> 搜尋「LookinLoader」->「安裝」-> 回到手機(jī)「設(shè)定」->「Lookin」->「Enabled Applications」-> 啟用想要查看的 APP

Step 2. 使用傳輸線將手機(jī)連接至 Mac 電腦 -> 打開想要查看的APP -> 回到電腦墓懂,在 Lookin 工具上選擇 APP 畫面 -> ****即可****查看排版結(jié)構(gòu)**焰宣。

Lookin 查看排版結(jié)構(gòu)

Facebook 登入畫面排版結(jié)構(gòu)

可在左側(cè)欄檢視 View Hierarchy、右側(cè)欄對選中的物件進(jìn)行動態(tài)修改捕仔。

原本的「建立新帳號」被我改成「哈哈哈」

對物件的修改也會實(shí)時的顯示在手機(jī) APP 上匕积,如上圖。

就如同網(wǎng)頁的「F12」開發(fā)者工具榜跌,所有的修改僅對 View 有效闪唆,不會影響實(shí)際的資料;主要是拿來 Debug 钓葫,當(dāng)然也可以用來改值悄蕾、截圖,然后騙朋友 XD

使用 Reveal 工具查看 APP UI 排版結(jié)構(gòu)

image

雖然 Reveal 需要付費(fèi)才能使用础浮,但個人還是比較喜歡 Reveal帆调;在結(jié)構(gòu)顯示上資訊更詳細(xì)奠骄、右方資訊欄位幾乎等同于 XCode 開發(fā)環(huán)境,想做什么即時調(diào)整都可以番刊,另外也會提示 Constraint Error 對于 UI 排版修正非常有幫助含鳞!

這兩個工具在日常開發(fā)自己的 APP 上都非常有幫助!

*了解完流程環(huán)境及有趣的部分之后撵枢,就讓我們進(jìn)入正題吧民晒!
**以下開始都需要越獄手機(jī)配合

提取 APP .ipa 檔案 & 砸殼

所有從 App Store 安裝的 APP,其中的 .ipa 檔案都有 FairPlay DRM 保護(hù) 锄禽,俗稱加殼保護(hù)/相反的去掉保護(hù)就叫「砸殼」潜必,所以單純從 App Stroe 提取 .ipa 是沒有意義的,也用不了沃但。

*另一個工具 APP Configurator 2 只能提取有保護(hù)的檔案磁滚,沒意義就不再贅述,有興趣使用此工具的朋友可以點(diǎn)此查看教學(xué)宵晚。

使用工具+越獄手機(jī)提取砸殼之后的原始 .ipa 檔案:

關(guān)于工具部分起初我使用的是 Clutch 垂攘,但怎么嘗試都出現(xiàn) FAILED 查了下專案 issue,發(fā)現(xiàn)有很多人有同樣狀況淤刃,貌似此工具已經(jīng)不能在 iOS ≥ 12 使用了晒他、另外還有一個老牌工具 dumpdecrypted ,但我沒有研究逸贾。

這邊使用 frida-ios-dump 這個 Python 工具進(jìn)行動態(tài)砸殼陨仅,使用起來非常方便!

首先我們先準(zhǔn)備 Mac 上的環(huán)境:

  1. Mac 本身自帶 Python 2.7 版本铝侵,此工具支援 Python 2.X/3.X灼伤,所以不用在特別安裝 Python;但我是使用 Python 3.X 進(jìn)行操作的咪鲜,如果有遇到 Python 2.X 的問題狐赡,不妨嘗試安裝使用 Python 3 吧!

  2. 安裝 pip( Python 的套件源管理器)

  3. 使用 pip 安裝 frida
    sudo pip install frida -upgrade -ignore-installed six (python 2.X)
    sudo pip3 install frida -upgrade -ignore-installed six (python 3.X)

  4. 在 Terminal 輸入 frida-ps 如果沒錯誤訊息代表安裝成功疟丙!

  5. Clone AloneMonkey/frida-ios-dump 這個專案

  6. 進(jìn)入專案颖侄,用文字編輯器打開 dump.py 檔案

  7. 確認(rèn) SSH 連線設(shè)定部分是否正確 (預(yù)設(shè)不用特別動)
    User = ‘root’
    Password = ‘a(chǎn)lpine’
    Host = ‘localhost’
    Port = 2222

越獄手機(jī)上的環(huán)境:

  1. 安裝 Open SSH :Cydia → 搜尋 → Open SSH →安裝

  2. 安裝 Frida 源:Cydia → 來源 → 右上角「編輯」 → 左上角「加入」 → https://build.frida.re

  3. 安裝 Frida:Cydia → 搜尋 → Frida → 依照手機(jī)處理器版本安裝對應(yīng)的工具(EX: 我是 iPhone 6 A11,所以是裝 Frida for pre-A12 devices 這個工具)

環(huán)境都弄好之后享郊,開工:

1.將手機(jī)使用 USB 連接到電腦

2.在 Mac 上打開一個 Terminal 輸入 iproxy 2222 22 发皿,啟動 Server。

3.確保手機(jī)/電腦處于相同網(wǎng)路環(huán)境中(EX: 連同個WiFi)

4.再打開一個 Terminal 輸入 ssh root@127.0.0.1拂蝎,輸入 SSH 密碼(預(yù)設(shè)是 alpine)

image

5.再打開一個 Terminal 進(jìn)行敲殼命令操作穴墅,cd 到 clone 下來的 /frida-ios-dump 目錄下。

輸入 dump.py -l 列出手機(jī)中已安裝/正在執(zhí)行的 APP。

image
  1. 找到要敲殼導(dǎo)出的 APP 名稱 / Bundle ID玄货,輸入:

dump.py APP名稱或BundleID -o 輸出結(jié)果的路徑/輸出檔名.ipa

這邊務(wù)必指定輸出結(jié)果的路徑/檔名皇钞,因?yàn)轭A(yù)設(shè)輸出路徑會在 /opt/dump/frida-ios-dump/ 這邊不想把它搬到 /opt/dump 中,所以要指定輸出路徑避免權(quán)限錯誤松捉。

  1. 輸出成功后就能取得已敲殼的 .ipa 檔案夹界!


    image
  • 手機(jī)必須在解鎖情況下才能使用工具

  • 若出現(xiàn)連線錯誤、reset by peer…等原因隘世,可嘗試拔掉重插 USB 連接可柿、重開 iproxy。

7.將 .ipa 檔直接重新命名成 .zip 檔丙者,然后直接右鍵解壓縮檔

會出現(xiàn) /Payload/APP名稱.app

有了原始 APP 檔后我們可以…

1. 提取 APP 的資源目錄

在 APP名稱.app 右鍵 → 「Show Package Contents」就能看到 APP 的資源目錄


image

2. class-dump 出 APP .h頭文件訊息

使用 class-dump 工具導(dǎo)出全 APP (包含 Framework) .h 頭文件訊息 (僅限 Objective-C复斥,若專案為 Swift 則無效)

nygard/class-dump* 大大的工具我嘗試失敗,一直 failed械媒;最后還是一樣使用 AloneMonkey/MonkeyDev 大大的工具集中改寫過的 class-dump 工具才成功目锭。*

  • 直接從這里 Download MonkeyDev/bin/class-dump 工具

  • 打開 Terminal 直接使用:
    ./class-dump -H APP路徑/APP名稱.app -o 匯出的目標(biāo)路徑

image

dump 成功之后就能獲取到整個 APP 的 .h 資訊。

4. 最后也是最困難的 — 進(jìn)行反編譯

可以使用 IDAHopper 反編譯工具進(jìn)行分析使用纷捞,兩款都是收費(fèi)工具痢虹, Hopper 可免費(fèi)試用(每次 30 分鐘)

我們將取得的 APP名稱.app 檔案直接拉到 Hopper 即可開始進(jìn)行分析。

image

不過我也就止步于此了主儡,因?yàn)閺倪@開始就要研究機(jī)器碼奖唯、搭配 class-dump 結(jié)果推測方法…等等;需要非常深入的功力才行糜值!

突破反編譯后臭埋,可以自行竄改運(yùn)作重新打包成新的 APP。

圖片取自航海王

逆向工程的其他工具

1.使用 MITM Proxy 免費(fèi)工具嗅探 API 網(wǎng)路請求資訊

image

2.Cycript (搭配越獄手機(jī)) 動態(tài)分析/注入工具:

  • 在越獄手機(jī)上打開「Cydia」-> 搜尋「Cycript」->「安裝」

  • 在電腦打開一個 Terminal 使用 Open SSH 連線至手機(jī)臀玄,ssh root@手機(jī)IP (預(yù)設(shè)是 alpine)

  • 打開目標(biāo) APP (APP 保持在前景)

  • 在 Terminal 輸入 ps -e | grep **APP Bundle ID **查找正在運(yùn)行的 APP Process ID

  • 使用 cycript -p Process ID 注入工具到正在運(yùn)行的 APP

可使用 Objective-c/Javascript 進(jìn)行調(diào)試控制。

image

For Example:

**cy#** alert = [[UIAlertView alloc] initWithTitle:@"HIHI" message:@"ZhgChg.li" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:nl]
**cy#** [alert show]

注入一個 UIAlertViewController…
  • chose(): 獲取目標(biāo)

  • UIApp.keyWindow.recursiveDescription().toString(): 顯示 view hierarchy 結(jié)構(gòu)資訊

  • **new Instance(記憶體位置): **獲取物件

  • exit(0): 結(jié)束

詳細(xì)操作可參考此篇文章畅蹂。

3. Lookin / Reveal 查看 UI 排版工具

前面介紹過健无,再推一次;在自己的專案日常開發(fā)上也非常好用液斜,建議購買使用 Reveal累贤。

4. MonkeyDev 集成工具,可透過動態(tài)注入竄改 APP 并重新打包成新的 APP

5.ptoomey3/Keychain-Dumper少漆,導(dǎo)出 KeyChain 內(nèi)容

詳細(xì)操作請參考此篇文章臼膏,不過我沒試成功,看專案 issue 貌似也是在 iOS ≥ 12 之后就失效了示损。

總結(jié)

這個領(lǐng)域是個超級大坑渗磅,需要非常多的技術(shù)知識基礎(chǔ)才有可能精通;本篇文章只是粗淺了「體驗(yàn)」了一下逆向工程是什么感覺,如有不足敬請見諒始鱼!僅供學(xué)術(shù)研究仔掸,勿做壞壞的事;個人覺得整個流程工具玩下來蠻有趣的医清,也對 APP 安全更有點(diǎn)概念起暮!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市会烙,隨后出現(xiàn)的幾起案子负懦,更是在濱河造成了極大的恐慌,老刑警劉巖柏腻,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纸厉,死亡現(xiàn)場離奇詭異,居然都是意外死亡葫盼,警方通過查閱死者的電腦和手機(jī)残腌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贫导,“玉大人抛猫,你說我怎么就攤上這事『⒌疲” “怎么了闺金?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長峰档。 經(jīng)常有香客問我败匹,道長,這世上最難降的妖魔是什么讥巡? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任掀亩,我火速辦了婚禮,結(jié)果婚禮上欢顷,老公的妹妹穿的比我還像新娘槽棍。我一直安慰自己,他們只是感情好抬驴,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布炼七。 她就那樣靜靜地躺著,像睡著了一般布持。 火紅的嫁衣襯著肌膚如雪豌拙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天题暖,我揣著相機(jī)與錄音按傅,去河邊找鬼捉超。 笑死,一個胖子當(dāng)著我的面吹牛逞敷,可吹牛的內(nèi)容都是我干的狂秦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼推捐,長吁一口氣:“原來是場噩夢啊……” “哼裂问!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起牛柒,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤堪簿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后皮壁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體椭更,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年蛾魄,在試婚紗的時候發(fā)現(xiàn)自己被綠了虑瀑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡滴须,死狀恐怖舌狗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扔水,我是刑警寧澤痛侍,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站魔市,受9級特大地震影響主届,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜待德,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一君丁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧将宪,春花似錦绘闷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毙死。三九已至燎潮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扼倘,已是汗流浹背确封。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工除呵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爪喘。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓颜曾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親秉剑。 傳聞我的和親對象是個殘疾皇子泛豪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評論 2 359