車服務平臺-ios版本分析
1.砸殼
1.1.這里采取frida-ios-dump 操作
用起來很簡單直接下載這個包,然后打開要砸殼的APP、命令行運行 python dump.py 進程名,然后等待就行。
1.2.砸完殼后拿到ipa文件,改成zip格式,解壓打開找到里面可執行的文件,一般跟app名稱一樣。把他扔到ida中,等待ida分析完成就好。這里要等待蠻久的。
2.ida+lldb分析

搜索要X-PA-SIGN 要到引用位置。



定位到這個方法,對比抓包結果判斷這個方法就是用于添加請求頭的位置,分析代碼找到X-PA-SIGN應該是由下面這個函數返回。

點進去看:



對比抓包生成的sign和代碼分析可差不多知道X-PA-SIGN就是SHA256加密,下面我們來分析sub_1014DACA4的入參。
lldb調試
在x-code目錄中找到對于版本的DeveloperDiskImage.dmg,路徑大 致/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/9.2 /DeveloperDiskImage.dmg
雙擊 DeveloperDiskImage.dmg 在/Volumes/DeveloperDiskImage/usr/bin/ 下找到debugserver。
debugserver復制出來,
創建一個entitlement.xml文件與debugserver保持同一目錄。
<plist version="1.0"> <dict> <key>com.apple.springboard.debugapplicationskey> <true/> <key>get-task-allowkey> <true/> <key>task_for_pid-allowkey> <true/> <key>run-unsigned-codekey> <true/> dict> plist>
用codesign簽名
codesign -s - --entitlements entitlement.xml -f debugserver
發送到手機中 scp -r debugserver root@localhost -p xxxx :/usr/bin
- 然后運行debugserver 127.0.0.1:1998 -a /var/mobile/app進程。

記得在電腦端轉發這個1998端口,也可以自己定義 iproxy裝個就好了。

然后再電腦端另起一個窗口啟動lldb。
然后再輸入 process connect connect://localhost:1998 等待連接。

連上了,按c繼續。
拿到首地址:

在剛才那個方法sub_1014DACA4下斷點看看入參。

觸發斷點,打印寄存器情況,這10個寄存器代表函數的10個入參。

分別打印寄存器的值,這里跟我在安卓上抓到計算X-PA-SIGN方法入參對比。


x0為http請求方法、x1請求路徑 、x2為請求參數、x3為請求body base64編碼、x4時間戳、x5為平臺 、x6為安卓和ios特定的字符串、x7為固定值1。那么拿到入參后、繼續分析。

很明顯了就是把GET請求就是把這些參數按照順序拼起來。
再看看POST方法的。

也是把參數拼接來,路徑后接一個請求報文的base64編碼。
那么我們先拿到這個函數的結果然后去判斷是否是標準的sh256加密。






好了 到這X-Pa-Sign分析完了,就是Sha256 對拼接的參數進行加密。
2.1.spartaid
這里開始分析sparataid的生成,在ida中找到這個生成的位置。

具體這Lion_meta 有三個方法 通過對前面兩個方法進行hook 大概猜到用于收集設備信息 然后把前兩步收集到的信息傳入第三個方法進行加密。


hook該方法拿到的入參和返回值就很明顯這是設備信息收集進行加密的方法,具體分析下這個方法怎么加密的,看代碼大概猜了下如下圖:

這就很簡單了直接打印下CCCrypt的入參和返回值就知道,是哪種加密和key是多少。


很明顯了AES ecb psck7 加密 key為固定值 OkqDu3nfoVGNIyQA。不過這里要注意一點,這個ios 這個編碼出來的結果跟java 和python 有一點的不一樣,要處理下,這里就不解釋了,自己去看吧!