iOS逆向之IPA脫殼

來自:https://www.ianisme.com/ios/2326.html

一、前言:

從APPStore上面下載下來的程序都有殼,我們不能對他進行任何操作,iOS逆向的第一步就是脫殼。下面跟我一起實戰(zhàn)一下。

二、工具:

1.一步越獄手機(建議選4s)

2.dumpdecrypted

三、步驟:

3.1 下載對應(yīng)的程序包

首先我使用我已經(jīng)越獄的iPhone4s從Appstore下載APP,此處我以某程序為例。并使用PP助手等工具導(dǎo)入到電腦里。

3.2 查看是否加密

解壓ipa文件,拿到里面的主文件,對其進行架構(gòu)查詢

file 主文件名

如圖:

此APP支持兩種架構(gòu),我們查詢下它的加密情況

otool -l 主文件名 | grep crypt

如圖:

cryptid 1代表加密,cryptid 0代表未加密。兩個分別對應(yīng)著armv7和arm64,也就是它們都有加密。

3.3 使用dumpdecrypted砸殼

地址:傳送門->https://github.com/ianisme/IANDecryptiOSApp/tree/master/dumpdecrypted

3.3.1 編譯dumpdecrypted.dylib文件

首先我們需要編譯我們的dumpdecrypted.dylib文件,越獄手機的iOS的版本要和SDK的版本相同。我手機是iOS8.1.3,因此我選用了8.1的SDK,在Xcode6.1中可以找到。

打開終端我們輸入一下命令查找下我需要的SDK地址:

find / -name iPhoneOS8*

我這里的得到的地址為:

/Applications/Xcode6.1.1/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk

我們需要修改Makefile文件中的

SDK=`xcrun --sdk iphoneos --show-sdk-path`

改為:

SDK=/Applications/Xcode6.1.1/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk

如果是的sdk是7.0的,需要繼續(xù)去掉arm64的內(nèi)容。8.0以上版本請略過

我們需要將Makefile文件中的

GCC_UNIVERSAL=$(GCC_BASE) -arch armv7 -arch armv7s -arch arm64

改為

GCC_UNIVERSAL=$(GCC_BASE) -arch armv7 -arch armv7s

我們再將dumpdecrypted.c文件中的

if (lc->cmd == LC_ENCRYPTION_INFO || lc->cmd == LC_ENCRYPTION_INFO_64)

改為:

if (lc->cmd == LC_ENCRYPTION_INFO)

下面進入到dumpdecrypted根目錄,make進行編譯,獲得dumpdecrypted.dylib

3.3.2 定位二進制文件地址

我們在電腦上解壓縮那個ipa包,取到里面的Info.plist文件,獲取里面的Bundle identifier,例如:com.ianisme.xxxxx

如圖:

在手機上跑我提供的這個Demo:

傳送門->https://github.com/ianisme/IANDecryptiOSApp/tree/master/getAppBundle

找到對應(yīng)Bundle identifier的對應(yīng)的resourcesDirectoryURL和dataContainerURL

如圖:

3.3.3 進行脫殼處理

得到地址后我們將編譯好的dumpdecrypted.dylib傳輸?shù)絛ataContainerURL的tmp目錄下

如圖:

然后切換到dataContainerURL的tmp目錄執(zhí)行如下代碼:

DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/FEA0A0C0-EF52-4D76-8EEC-422D5D8331D4/XXXX.app/XXXX

進行脫殼

如圖:

在tmp目錄下生成了一個XXXX.decrypted這就是脫殼后的主文件

我們把文件用scp命令導(dǎo)出

如圖:

3.4 armv7抽取處理

此時我們把XXXX.decrypted的擴展名去掉,使用otool查看脫殼情況

我們發(fā)現(xiàn)64位的殼沒有脫掉,因為我用的是iPhone4s,處理器架構(gòu)是armv7,只能脫這部分的殼。

我們將app的armv7抽取出來,就可以保證app只以armv7模式運行,指令集向下兼容,也就是4s以上的機型都可以運行的。不得不說現(xiàn)在4s依然威武,到處都少不了他。

運行如下代碼:

lipo XXXX -thin armv7 -output XXXX_armv7

XXXX_armv7就是最終的無殼主文件,將ipa包里面的替換掉,這就是一個無殼的APP了。

四、總結(jié):

逆向是把雙刃劍,有利于提高我們的技術(shù),也有可能為不懷好意的人提供了捷徑,以上內(nèi)容僅供學(xué)習(xí)參考,請勿用于非法用途,謝謝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容