從app store下載的app和app extension是加過密的,可以通過otool查看:
$ otool -l binary_name | grep crypt
cryptoff 16384 cryptsize 294912 cryptid 1
iPhone applications的解密辦法
dumpdecrypted 是個出色的app脫殼開源工具,它的原理是:將應用程序運行起來(iOS系統會先解密程序再啟動),然後將內存中的解密結果dump寫入文件中,得到一個新的可執行程序。
iPhone app extensions的特別之處
app extension雖是獨立進程,但不可獨立運行
app extension的進程中,寫權限被嚴格控制
基於以上兩點,dumpdecrypted 無法實現對iPhone app extensions的脫殼。
iPhone app extensions的解密辦法
通過對dumpdecrypted稍作修改,更改其寫入dump結果的path,變通啟動方式就可實現對app extension的解密,詳見:Carina’s dumpdecrypted
使用方法很簡單,用微信的Share Extension為例
1)本地編譯好 dumpdecrypted.dylib
2)指定作用的Extension Bundle
{ Filter = { Bundles = ("com.tencent.xin.sharetimeline"); }; }
3)將 dumpdecrypted.plist 和 dumpdecrypted.dylib 拷貝至越獄機的 /Library/MobileSubstrate/DynamicLibraries/ 下
4)利用系統相冊啟動微信的Share Extension
當微信的Share Extension被啟動時,解密插件自動工作。值得注意的是,如果你的越獄機是armv7架構,那麼也就只dump armv7那部分;如果越獄機是arm64架構,那麼也就只dump arm64那部分。So,最後你需要:
$ lipo -thin armv7 xxx.decrypted -output xxx_armv7.decrypted
或
$ lipo -thin armv64 xxx.decrypted -output xxx_arm64.decrypted
來得到干淨的dump結果