iOS應用砸殼

在研究AppStore下載的iOS應用時,由於Appstore默認給應用程序加了殼,所以需要先脫殼,然後提取解密後IPA文件用於安全分析。文件將介紹多個砸殼工具的使用。

實驗條件:

1. iOS越獄環境,本文環境是iOS9.3.1,機型是iPhone 5s, CPU架構是arm64

# sysctl -a
kern.ostype = Darwin
kern.osrelease = 15.4.0
kern.osrevision = 199506
kern.version = Darwin Kernel Version 15.4.0: Fri Feb 19 13:54:53 PST 2016; root:xnu-3248.41.4~28/RELEASE_ARM64_S5L8960X

2. 配置好sshd,會使用scp,能夠使用root賬戶登錄,默認的root密碼一般是alpine,但是為了安全請修改密碼。

砸殼工具

Clutch

下載源代碼並使用xcode進行編譯。

$ git clone https://github.com/KJCracks/Clutch.git
Cloning into Clutch...
remote: Total 3545 (delta 0), reused 0 (delta 0), pack-reused 3545
Receiving objects: 100% (3545/3545), 37.18 MiB | 30.00 KiB/s, done.
Resolving deltas: 100% (2033/2033), done.

將編譯好的文件copy到設備的/sbin/

scp ./Clutch root@192.168.0.119:/sbin/

在設備上運行命令,顯示安裝的APP列表,說明安裝成功。

iPhone-5s:/sbin root# ./Clutch -i
2018-10-28 20:39:56.782 Clutch[3966:1623012] command: Prints installed applications
Installed apps:
1: TikTok-global video community <com.ss.iphone.ugc.Ame>
9: YouTube <com.google.ios.youtube>
10: Facebook <com.facebook.Facebook>
11: ボイスレコーダー-無料ボイスメモ <com.leqimea.recorderAudio>

選擇包名,使用如下命令進行砸殼,注意有些包會失敗,可以使用後續的工具進行嘗試。如果成功就會顯示ipa文件的路徑。

root# Clutch -d com.liuli****.engzo2
Zipping SwiftProtobuf.framework
Zipping pop.framework
DONE: /private/var/mobile/Documents/Dumped/com.liuli****.engzo2-iOS9.0-(Clutch-(null)).ipa

解壓提取內容,ipa文件實質上是一個zip文件,使用unzip 就可以解壓。其中比較重要的是Payload/*.app/Info.plist,是整個APP的描述文件,其中一項是bundle name,值就是app的二進位代碼的文件名。

$unzip com.liuli****.ipa
inflating: Payload/Liuli****.app/Frameworks/Rainbow.framework/Rainbow
inflating: Payload/Liuli****.app/Liuli****

$ file Liuli****
Liuli****: Mach-O 64-bit executable arm64

Dumpdecrypted

對於Clutch砸殼失敗的,還可以嘗試一下Dumpdecrypted.

下載並編譯

git clone https://github.com/stefanesser/dumpdecrypted cd dumpdecrypted make

copy文件到設備

scp ./dumpdecrypted.dylib root@192.168.119:/sbin/

從cydia源中下載Cycript

定位app路徑,因為APP都被加密過了,需要從進程里找到app的路徑。先打開app,利用ps和grep進行尋找關鍵字。

iPhone-5s:/tmp root# ps -ef | grep Application
501 4443 1 0 0:00.00 ?? 0:00.10 /Applications/MobileSafari.app/webbookmarksd
501 4544 1 0 0:00.00 ?? 0:00.50 /Applications/MobileMail.app/MobileMail
501 4595 1 0 0:00.00 ?? 0:07.39 /var/containers/Bundle/Application/43DA0965-EBD8-4A2B-8D7C-286A11AB3386/Awe**.app/Awe**

然後發現進程4595就是打開的,利用命令尋找路徑。

cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask][0]
#"file:///var/mobile/Containers/Data/Application/144302A4-760B-4F3E-93BE-E61495CDCA54/Documents/"

至此我們需要的兩個路徑都已經獲得,

a. 程序路徑:/var/containers/Bundle/Application/43DA0965-EBD8-4A2B-8D7C-286A11AB3386/Awe**.app/Awe**

b. 文檔路徑:/var/mobile/Containers/Data/Application/144302A4-760B-4F3E-93BE-E61495CDCA54/Documents/

最後切換成mobile用戶,copy一份編譯出的dumpdecrypted.dylib到/var/mobile/Documents下,主要用戶和路徑都是必須的。

su mobile
cp /sbin/dumpdecrypted.dylib /var/mobile/

導出app

iPhone-5s:~/Documents mobile$ DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/43DA0965-EBD8-4A2B-8D7C-286A11AB3386/Awe**.app/Awe**
mach-o decryption dumper
DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.

[+] detected 64bit ARM binary in memory.
[+] offset to cryptid found: @0x10000cd98(from 0x10000c000) = d98
[+] Found encrypted data at address 00004000 of length 55230464 bytes - type 1.
[+] Opening /private/var/containers/Bundle/Application/43DA0965-EBD8-4A2B-8D7C-286A11AB3386/Awe**.app/Awe** for reading.
[+] Reading header
[+] Detecting header type
[+] Executable is a plain MACH-O image
[+] Opening Awe**.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
[+] Setting the LC_ENCRYPTION_INFO->cryptid to 0 at offset d98
[+] Closing original file
[+] Closing dump file

最後導出解密後的數據。

scp root@192.168.0.119:/tmp/Awe**.decrypted .

這個Awe**.decrypted文件可以使用class-dump導出頭文件。具體做法請參見下一章。

導出頭文件

  1. 首先下載class-dump

  2. 使用如下命令,導出頭文件

    ./class-dump ./Awe**.decrypted -H -o ./Awe**

    導出的頭文件如下圖所示

總結

使用砸殼工具對APP進行提取ipa文件,是對iOS程序進行安全分析的第一步,本文介紹了兩種工具,Clutch和dumpdecrypted,分別使用靜態和動態兩種技術對APP進行了砸殼。

聲明

本文由萌貓安全說原創發佈於微信公眾號和知乎文章,為了追求信息安全技術的終極奧義,歡迎非盈利性轉載,但是請標明作者和出處。

weixin.qq.com/r/lUOHn4n (二維碼自動識別)

參考資料

  1. 52pojie.cn/thread-69630
  2. jianshu.com/p/a4373b5fe
  3. jianshu.com/p/6eb62eabb
  4. blog.csdn.net/science_L

推薦閱讀:

TAG:iOS應用 | iOS越獄 | 網路安全 |