iOS 逆向?qū)W習(xí)系列之一:砸殼

App Store中下載的程序是加密后的,為了能夠獲取目標(biāo)程序的類信息以便之后修改源碼狡刘,我們需要對(duì)應(yīng)用程序做一個(gè)解密,也就是砸殼。

硬件設(shè)備需要有一臺(tái)越獄手機(jī)和一臺(tái)裝了開發(fā)環(huán)境的mac電腦易核。

以下以 微信 為例,進(jìn)行操作浪默。

1. 遠(yuǎn)程連接iphone

iphone 本質(zhì)也是一臺(tái)linux設(shè)備牡直,所以可以用登錄服務(wù)器的方式連接iphone缀匕。具體操作如下:

  1. 連到同一個(gè)wifi,在 設(shè)置-無線局域網(wǎng) 中查看iphone的ip碰逸,我這里是 192.168.1.116

  2. 使用 ssh 命令登錄服務(wù)器

     ssh root@192.168.1.116
    

    登錄過程中需要輸入服務(wù)器密碼乡小,ios 默認(rèn)密碼為 alpine

2. 找到app路徑和Document路徑

  1. 用ssh連接上iOS設(shè)備后,我們打開想要砸殼的app饵史,輸入 ps -e满钟,就可以在進(jìn)程中找到這個(gè)app的二進(jìn)制文件的地址:

    9281 ??         0:02.65 /var/mobile/Containers/Bundle/Application/23A70D56-542F-4843-B1F7-DAF3FB0CED25/WeChat.app/WeChat    ```
    
    **9281** 為微信的進(jìn)程名,可執(zhí)行文件目錄為 
    ***/var/mobile/Containers/Bundle/Application/23A70D56-542F-4843-B1F7-DAF3FB0CED25/WeChat.app/WeChat***
    
    
  2. Cycript 找出 TargetApp 的 Documents 目錄路徑

    admin:~ root# cycript -p 9281
    cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
    #"file:///var/mobile/Containers/Data/Application/6A3EDE95-573D-4B8A-A107-6AA596C49DE3/Documents/"
    

    cycript -p process process 為第一步中拿到的進(jìn)程名胳喷!
    cycript -p process process 為第一步中拿到的進(jìn)程名湃番!
    cycript -p process process 為第一步中拿到的進(jìn)程名!

    現(xiàn)在得到 微信Document 目錄
    file:///var/mobile/Containers/Data/Application/6A3EDE95-573D-4B8A-A107-6AA596C49DE3/Documents/

    也可以用PP助手類的工具直接獲得Document目錄

3. 編譯dumpdecrypted

dumpdecrypted 工具就是要用的砸殼工具吭露。他的原理是讓app預(yù)先加載一個(gè)解密的dumpdecrypted.dylib牵辣,然后在程序運(yùn)行后,將代碼動(dòng)態(tài)解密奴饮,最后在內(nèi)存中dump出來整個(gè)程序纬向。

Baiya:Ios baiya$ cd dumpdecrypted/
Baiya:dumpdecrypted baiya$ ls
Makefile    README      dumpdecrypted.c
Baiya:dumpdecrypted baiya$ make
`xcrun --sdk iphoneos --find gcc` -Os  -Wimplicit -isysroot `xcrun --sdk iphoneos --show-sdk-path` -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/Frameworks -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/PrivateFrameworks -arch armv7 -arch armv7s -arch arm64 -c -o dumpdecrypted.o dumpdecrypted.c 
`xcrun --sdk iphoneos --find gcc` -Os  -Wimplicit -isysroot `xcrun --sdk iphoneos --show-sdk-path` -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/Frameworks -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/PrivateFrameworks -arch armv7 -arch armv7s -arch arm64 -dynamiclib -o dumpdecrypted.dylib dumpdecrypted.o
ld: warning: directory not found for option '-F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/PrivateFrameworks'
ld: warning: directory not found for option '-F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/PrivateFrameworks'
ld: warning: directory not found for option '-F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/PrivateFrameworks'

即可得到dumpdecrypted.dylib文件逾条。
一般SDK是向下兼容的,保證SDK版本與越獄設(shè)備的版本一致或者高于越獄設(shè)備版本即可投剥。
使用xcrun --sdk iphoneos --show-sdk-path查看SDK版本师脂。
如下:SDK版本是9.3。因?yàn)樵O(shè)備是iOS 8.4江锨,所以沒問題

Baiya:dumpdecrypted baiya$ xcrun --sdk iphoneos --show-sdk-path
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk

4. 砸殼

  1. 將生成的dumpdecrypted.dylib拷貝到設(shè)備目錄吃警,可以用scp命令PP助手

    Baiya:dumpdecrypted baiya$ scp dumpdecrypted.dylib root@192.168.1.116:/var/mobile/Containers/Data/Application/6A3EDE95-573D-4B8A-A107-6AA596C49DE3/Documents/
    root@192.168.1.116's password: 
    dumpdecrypted.dylib                                                     100%  193KB 192.9KB/s   00:00 
    
  2. 進(jìn)入Document目錄下面,執(zhí)行DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib相關(guān)的命令

    admin:/var/mobile/Containers/Data/Application/6A3EDE95-573D-4B8A-A107-6AA596C49DE3/Documents root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/23A70D56-542F-4843-B1F7-DAF3FB0CED25/WeChat.app/WeChat
    mach-o decryption dumper
    
    DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.
    
    [+] detected 32bit ARM binary in memory.
    [-] This mach-o file is not encrypted. Nothing was decrypted.
    

    因?yàn)椴┲餮b的是沒有加密的23333

    正常是:

    iPod:~ root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Applications/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Scan.app/Scan
    mach-o decryption dumper
    
    DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.
    
    [+] Found encrypted data at address 00002000 of length 1826816 bytes - type 1.
    [+] Opening /private/var/mobile/Applications/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Scan.app/Scan for reading.
    [+] Reading header
    [+] Detecting header type
    [+] Executable is a FAT image - searching for right architecture
    [+] Correct arch is at offset 2408224 in the file
    [+] Opening Scan.decrypted for writing.
    [-] Failed opening. Most probably a sandbox issue. Trying something different.
    [+] Opening /private/var/mobile/Applications/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/tmp/Scan.decrypted for writing.
    [+] Copying the not encrypted start of the file
    [+] Dumping the decrypted data into the file
    [+] Copying the not encrypted remainder of the file
    [+] Closing original file
    [+] Closing dump file
    

    會(huì)生成app砸殼后的文件xx.decrypted. 這里就是WeChat.decrypted啄育。如果是沒有加密的酌心,直接使用WeChat即可

取出解密后程序

還是scp命令或者PP助手

Baiya:dumpdecrypted baiya$ scp root@192.168.1.116:/var/mobile/Containers/Bundle/Application/23A70D56-542F-4843-B1F7-DAF3FB0CED25/WeChat.app/WeChat ~/Desktop/
root@192.168.1.116's password: 
WeChat                                                                                                                                             100%   97MB   2.2MB/s   00:45 

查看APP信息

  • 查詢架構(gòu) file app

    Baiya:Desktop baiya$ file WeChat 
    WeChat: Mach-O universal binary with 2 architectures
    WeChat (for architecture armv7):    Mach-O executable arm
    WeChat (for architecture arm64):    Mach-O 64-bit executable
    

    微信支持兩種架構(gòu) armv7arm64

  • 查詢下它的加密情況 otool -l 主文件名 | grep crypt

    Baiya:Desktop baiya$ otool -l WeChat | grep crypt
         cryptoff 16384
        cryptsize 40910848
          cryptid 0
         cryptoff 16384
        cryptsize 43974656
          cryptid 0
    

    cryptid 1代表加密,cryptid 0代表未加密挑豌。兩個(gè)分別對(duì)應(yīng)著armv7和arm64安券,也就是它們都沒有加密。

參考鏈接:

iOS逆向之dumpdecrypted的使用
iOS逆向 - Cycript基本用法
iOS逆向 - dumpdecrypted工具砸殼
用dumpdecrypted給App砸殼
iOS逆向之IPA脫殼
iOS 冰與火之歌番外篇 - App Hook 答疑以及 iOS 9 砸殼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末氓英,一起剝皮案震驚了整個(gè)濱河市侯勉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铝阐,老刑警劉巖址貌,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡练对,警方通過查閱死者的電腦和手機(jī)遍蟋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锹淌,“玉大人匿值,你說我怎么就攤上這事÷赴冢” “怎么了挟憔?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)烟号。 經(jīng)常有香客問我绊谭,道長(zhǎng),這世上最難降的妖魔是什么汪拥? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任达传,我火速辦了婚禮,結(jié)果婚禮上迫筑,老公的妹妹穿的比我還像新娘宪赶。我一直安慰自己,他們只是感情好脯燃,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布搂妻。 她就那樣靜靜地躺著,像睡著了一般辕棚。 火紅的嫁衣襯著肌膚如雪欲主。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天逝嚎,我揣著相機(jī)與錄音扁瓢,去河邊找鬼。 笑死补君,一個(gè)胖子當(dāng)著我的面吹牛引几,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赚哗,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼她紫,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了屿储?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤渐逃,失蹤者是張志新(化名)和其女友劉穎够掠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茄菊,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疯潭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年赊堪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竖哩。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哭廉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出相叁,到底是詐尸還是另有隱情遵绰,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布增淹,位于F島的核電站椿访,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏虑润。R本人自食惡果不足惜成玫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拳喻。 院中可真熱鬧哭当,春花似錦、人聲如沸冗澈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)渗柿。三九已至个盆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間朵栖,已是汗流浹背颊亮。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陨溅,地道東北人终惑。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像门扇,于是被迫代替她去往敵國(guó)和親雹有。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • #### 前言 從 AppStore 下載的 App 是被蘋果使用 FairPlay 技術(shù)加密過的臼寄, 可執(zhí)行文件被...
    善舞ice閱讀 1,217評(píng)論 0 2
  • 逆向工具集的安裝和使用 iOS 逆向工程的工具分類 檢查工具如:Reveal(界面分析工具)霸奕、tcpdump(抓包...
    Yochi閱讀 5,648評(píng)論 1 5
  • 我們需要用到的工作有 dumpdecrypted-github class-dump-github class-d...
    wdsh閱讀 2,658評(píng)論 0 0
  • 1.砸殼前的準(zhǔn)備 一臺(tái)越獄iphone??,根據(jù)以往經(jīng)驗(yàn)吉拳,測(cè)試用的手機(jī)永遠(yuǎn)不要緊跟潮流升級(jí)系統(tǒng)质帅,在越獄手機(jī)中打開Cy...
    I_m趙昊閱讀 1,255評(píng)論 4 10
  • 這個(gè)就當(dāng)做是日記吧,不算文章,因?yàn)槲矣X得我接下來寫的東西應(yīng)該完全沒有條理煤惩,各種記憶和情感充斥著大腦嫉嘀,但又覺得不寫不...
    S塔閱讀 244評(píng)論 0 0