iOS作為一種閉源系統,沒有Android那麼多的packers和so庫,iOS官方封裝了自己統一的Crypto庫,所以我們HOOK起來也很方便。我以某報價大全 iOS v10.5.5版為例,記錄一下巧破加密引數的過程和一些知識點。
此次逆向教程使用到的工具如下:
一部越獄iPhone或iPad
抓包工具:Charles
Hook 框架:frida v12.8.11
一、抓包分析
通過Charles抓取目標APP列表頁請求的資料,我們發現含有32位的“sign”引數,且向下滑動載入更多時“sign”引數都會變化。兩次抓包請求引數對比如下圖:
通過對比抓包資料,我們猜測可能使用了MD5加密演算法,接下來我們就用frida-trace監控iOS系統封裝的CC_MD5加密函式,看能不能巧破該APP的“sign”引數。
二、frida-trace分析
首先通過 frida-ps -Ua (請自行安裝frida)檢視目標APP的程式id為4934:
再通過frida-trace跟蹤“CC_MD5”函式,命令如下:
frida-trace引數說明如下:
-U 使用USB資料線連線裝置
-i 追蹤函式
“CC_MD5” 要追蹤的函式名
4934 目標APP程式id
接著在終端介面按 Ctrl+C 停止執行。然後在__handlers__/ASEProcessing資料夾中找到CC_MD5.js檔案,將程式碼修改為如下並儲存:
以上程式碼會在追蹤到CC_MD5函式步入時列印待加密的引數值,步出時列印加密後的md5返回值。
接著我們繼續使用之前的命令執行frida-trace,然後在目標APP列表頁繼續滑動即可看到frida-trace追蹤到的引數和返回值。然後我們用Charles抓包看到的sign值到frida-trace視窗中搜尋即可找到對應引數,如下圖:
對比請求的url和加密引數:
-請求的url:api.ashx?cateid=3&cityid=&method=news.list&pageindex=3&pagesize=25&productid=7&serialid=&sign=fbe1c8222424f38371f0b59592a6293b-加密的引數:?cateid=3&cityid=&method=news.list&pageindex=3&pagesize=25&productid=7&serialid=2CB3147B-D93C-964B-47AE-EEE448C84E3C
請求url中標註部分與加密引數標註部分完全一致,我們可以確定鹽值為:2CB3147B-D93C-964B-47AE-EEE448C84E3C。至此“sign”引數md5加密演算法不攻自破了。
三、總結
本文重點在通過Charles抓包看到“sign”引數為32位字串,猜測是md5加密,從而使用frida-trace監控目標APP是否使用了iOS系統封裝的CC_MD5加密函式。之後一擊即中巧破了“sign”引數加密演算法。
對於我們爬蟲工作者在抓取資料時遇到加密“sign”引數,首先可以猜測其大致的演算法,之後用frida-trace去監測系統預設的加密函式,比如iOS系統的:CC_MD5,CC_SHA1,CCHmac等,有可能會有意想不到的收穫。如果此方法行不通,我們可以再去想辦法逆向分析。
我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。
***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***