對某數藏類app逆向安全分析

前言



昨晚我羣裏有個老哥在問移動端滑塊怎麼分析

 

 

 

因爲大多app端的滑塊都是加載在webview上的

我當時突然就想到纔沒幾天搞定的一個app,也有webview部分的操作,因爲是用uni打包的,所以實際走的還是webview。而uni相關的其實之前發過一篇  對uni-app開發的某app逆向分析
不過今天這個app有點不同,我感覺是值得記錄的,所以準備再寫一篇有關這個的

分析


首先,打開這個app,抓包,左邊就是想要的數據,右邊就是抓到的包

 

 

 


然後加密參數有幾個
x-request-idx-tokensign

然後返回有加密

 

 

 



加密參數分析


首先就是對app一頓分析
搜一個sign:

 

 

 

一開始我並不知道這個app是uni-app打包的,一搜,發現最後一個,這個assets/apps/xxxxx/app-services.js有點可疑,因爲它也可能並沒有用到這部分的代碼。

爲了進一步確認,用android studio自帶的devices monitor工具發現果然是webview,那基本就確定是uni打包了。

 

 



插一句,我用的android studio 版本是4.1.1,然後你需要裝jdk1.8,然後到sdk tools裏,把相關的安裝下,然後如果你的sdk目錄有這個就行了,不然啓動報錯。

 

 

 

詳細的百度即可




webview調試


1.webviewdebughook調試

 

那麼,既然是webview,那就準備用webview調試一波,也就是文章開頭我羣裏的大佬 @qxp 說的路子。
當然這個部分 @孤雁逐雲 也發過相關的文章

https://mp.weixin.qq.com/s/cRLGMthZE9LOu8VlUtyzWg

這裏我就不詳細解釋了,就大概的展示下
用xp插件,對該app開啓webviewdebugg:

https://github.com/feix760/WebViewDebugHook

然後用chrome瀏覽器打開這個網址(第一次打開要開下科學軟件,打開了就可以把科學關了)
chrome://inspect/#devices

 

 

 

靜等一會兒,這個加載有點慢,等出現有設備就行了。然後點【inspect】,就會出來一個彈窗,類似web頁面的調試工具,然後就是正常的分析了。以前用它分析過某寶 app端的滑塊:

 

 

 




但是,今天很奇怪,啥都沒有

 

 

 

昨天都還可以加載的,有點迷,沒任何東西了。
有時候環境很容易把人搞迷,不過沒事,不能在一棵樹上吊死,換一個工具

2.webviewpp調試

 

之前 @孤煙逐雲 老哥給我推薦過一個新的工具:

 

https://github.com/WankkoRee/WebViewPP

這個也是xp插件,直接在手機端上操作,用它來看看:

首先點開

 

 

 


然後點這個:

 

 

 


然後點組件左邊的下載圖標,管他有沒有用,全都下載了再說

 

 

 


下載完回去,選這個hook規則管理:

 

 

 

找到你的目標app

 

 

 

點進去,把下面的全都點亮

 

 

 

 

 

 

然後再點這個,把主流的規則全都點一遍

 

 

 

 

 

 

點完就會自動出現這些hook代碼:

 

 

 


你覺得不行還可以自己寫你要的

這樣就配置好了,然後這個webviewpp在後臺,別關了,現在啓動目標app,進入你要調試的頁面,這右下角就自動出來了兩個浮窗按鈕

 

 

 


點一下,選到network:

 

 

 

然後刷下頁面,下拉加載數據接口,結果發現,一直是空,

 

 

 


調試工具里根本沒有抓到請求包,啥都沒有,這就尷尬了。查閱uni相關資料,發現應該是js層發請求,所以,這樣是抓不到,那這個就沒法了,抓不到網絡包,那就沒法調試了。尷尬。

源碼靜態分析

 

既然無法動態調試,那隻能先靜態調試了先對該app解包,然後直接來到assets文件夾裏的這個目錄的這個文件裏:

 

 

 

直接搜那幾個加密參數:
x-request-id

 

 

 

x-token

 

 

 

sign:

 

 

 

 

 

 

然後這裏是返回解密邏輯:

 

 

 

 

 

走一遍邏輯,發現x-request-id,看着很像uuid4

 

 

 

x-token 到這裏就g了,這個參數,我完全不知道他怎麼調用的,傳的這個f是幹嘛的

 

 

 

 

我去,線索斷了,這就尷尬了。
中途我試過,找到app-services.js,加入以下內容

 

 

然後重打包app,重新安裝(mt管理器操作),然後藉助webview調試,發現啥都沒有,這就尷尬了。我猜測大概率是這個js把console.log方法改寫了,不讓我輸出,之前ibox就是這樣的
在我一籌莫展之際,突然想起,這apk是uni打包,而且核心邏輯還在js裏,那很大概率有web端網址,一頓操作之後發現,果然有web網站

 

web端調試,逆向


打開之後,直接看調用棧,這對於我放棄js大半年的人的來說,屬實生疏了,唉

 

 

不需要花太多時間,就跟到了實際的邏輯:

 

 

 

 

最後根據我的一頓分析:總結如下:

 

 

x-token是下面的接口返回的:

 

 

加密邏輯也跟上面一致,然後我一運行

 

 

g了,反正就是怎麼也不出正常的結果。

最後呼喚算法還原大佬 @小小白,一頓操作幫我還原了:

圖片

是真的牛逼啊臥槽。

但是,話說,不是說好的app嗎,咋整到js上去了。想一下,假如,它這個js,有強混淆,而且很難調試的話,怎麼辦?或者說,我就是要在app層面進行分析呢?

終於到了本篇文章的重頭戲。
根據我查閱相關的資料,其實uni開發的,有好幾種模式,但是實際還是藉助了webview,以及jsbridge,進行聯調,然後實現app端的數據交互那麼思路有以下:
1.hook webview,找邏輯2.hook jsbridge相關類,找邏輯3.hook uni 與安卓原生對接的api,找邏輯4.hook 安卓原生json類

我的直覺,第三種可能更好用,一頓操作後發現,根本不行

uniapp調試分析


最後偶然看到它的文檔裏【org.json.JSONArray】類,果然還是要走json類啊,hook完,發現確實有,
然後再一步步跟邏輯找邏輯,跟到這個類:

【io.xxxxx.xxxxx.JSONUtil】,objection hook結果:

圖片

繼續hook這幾個方法,然後手機翻頁看看,看看它這個入參,發現就是最後的頁面數據了,但是這個數據結構有點奇怪

圖片

對比下手機頁面的數據,和這個入參,確實對上了

圖片


再看看調用棧:有點東西啊,還用的tb的webview組件
图片

流程分析

然後根據我的分析,實際的邏輯就是(不一定對,部分方法名已脫敏)



整理下:
1.先用io.xxxxx.AdaUniWebView初始化view2.用io.xxxxx.evalJS預加載js代碼3.再用io.xxxxxx.xxx.execSync 生成view對象4.再用io.xxxxxx.xxxx.exec 用上面生成的對象發起請求5.用io.xxxx.xxxx.prompt 實際請求6.js 原生執行js7.用io.dcloud.common.util.JSONUtil.createJSONArray 接收js代碼返回的對象,裏面包含實際的數據(js部分已經解密好)

部分代碼可見:

圖片

圖片

圖片

嘗試主動調用



我用xp插件,嘗試主動調用,提煉下邏輯:
图片
結果失敗了,貌似是不認我的傳入的參數,那就沒法了。
那思路就只有,用xposedappium之類的操作,然後hook拿結果了。具體流程這裏就不展示了。
如果要完成最後拿數據的目標的話,當然最方便的還是直接走web端拿數據。

如果沒搞錯的話,只要是uni開發的app,這一套應該都是通用的
所以你懂我意思吧图片,當然uni的app在app市場佔比並不多

廣告(不喜忽略)


圖片

圖片

結語

 

工作避坑&內推(僅成都)、技術交流、商務合作、技術交流羣

 

掃碼或者搜ID:geekbyte

圖片

 

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