某app內容協議分析

首先,拿到一款app,二話不說,抓包。

這個就是它的文章詳情的包。可以看到部分解碼正常,部分亂碼。這是它自定義的協議格式。亂碼部分爲文章內容。
看一下它的響應格式
在這裏插入圖片描述
使用了字節流傳輸。
接下來使用jadx打開它的app,分析一下。
這裏採用逆向分析。
一般根據這些閱讀類的app,喜歡在本地寫一些緩存文件,用來提升用戶體驗。我們去文件目錄下找找看下有沒有這些我們比較敏感的文件。
在這裏插入圖片描述
看我們發現了啥。打開看看
在這裏插入圖片描述
這不就是文章的內容了嗎? 說明在這之前,它已經完成了內容的解密。 可以發現這些文件都是以.deb結尾。那我們到jadx裏搜一下
在這裏插入圖片描述
只有一處,非常完美。
在這裏插入圖片描述
這裏我們使用frida專門hook此方法,打堆棧,查看調用情況。

在這裏插入圖片描述
可以看到它確實調用了該方法,返回了我們期待的文件路徑。 根據調用棧,我們看下它的上層函數
在這裏插入圖片描述
其中a2就是我們的文件路徑,然後傳到了m19274a中,最後又返回了a2。 我們進入到這個函數看它進行了啥操作。
在這裏插入圖片描述
可以基本猜想這裏是寫入文件的操作。 重點再觀察一下EasyEncrypt.mbb37b這個函數。

在這裏插入圖片描述
繼續使用frida hook這個函數。

在這裏插入圖片描述
這裏因爲它的返回值是字節, 沒辦法直觀看到結果。我們這裏轉一下字符串。方便觀察。
在這裏插入圖片描述
可以看到這個函數確實最終轉成了字符串。
我輸入的字節是不是我們從響應裏得到的呢? 這裏需要摘取部分片段搜索一下。
從抓包軟件中隨便複製一行
在這裏插入圖片描述
把16進制轉成java字節碼
在這裏插入圖片描述
在這裏插入圖片描述
然後去搜索剛纔frida hook的參數裏,去搜下這傳數字。確定下傳入參數。
在這裏插入圖片描述
可以發現傳入參數確實有這串字節碼
在這裏插入圖片描述
但是卻轉換失敗了。 我們看下最後成功的字節碼
在這裏插入圖片描述
實際通過m6637b這個函數轉換成功的字節碼是這一串。 通過觀察整個調用情況,發現總共經過了兩次m6637b這個函數的轉換。 第一次參數是我們請求接口中獲取的字節碼,第二次纔是可以通過此函數轉成字符串的字節碼。所以現在的問題是,怎麼由第一步結果的字節碼,轉成第二次參數的字節碼。
我們看下b的調用棧,看有沒有更多信息。
在這裏插入圖片描述
這是m6637b第一次調用的調用棧。進去看一下。
在這裏插入圖片描述
可以看到它這個首先對我們響應的字節流用m6637b這個函數進行了一次處理,之後又用gzip完成了一次解壓縮。 那我們把第一次的值進行解壓縮,看一下解壓縮完畢的值是不是第二次調用m6637b函數的參數 。
轉換代碼 在這裏插入圖片描述
最後結果
在這裏插入圖片描述
拿到這串結果,去hook到的數據裏搜一下。
在這裏插入圖片描述
結果發現剛好是這組字節碼轉成的字符串。 也就是說只經過了一次m6637b函數處理和gzip解壓縮就可以完成解密。那和之前分析的不符。之前分析的明明是調用了兩次m6637b函數才完成的解密。後來通過hook EasyEncrypt中的另一個函數才知道原因。
在這裏插入圖片描述
解壓縮完畢調用 mbb35a這個函數,之後再調用繼續調用mbb37b函數,也能還原數據。 現在解壓縮之後就可以的話,那後面兩步是可以省略的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章