移動安全逆向分析流程
抓包
第一大問題就是抓包,如果包都抓不到,那基本就沒法進一步入手了。
而現(xiàn)在的app,稍微有點安全意識的,都會防抓包,并且安卓7.0版本開始也自帶了安全等級,不再信任用戶安裝的證書,只信任系統(tǒng)證書,以及種種類似的情況,這種我們怎么處理呢?就得具體問題具體分析了。
目標(biāo)點定位的思路
抓到包以后,拿到了接口,以及加密參數(shù),怎么定位這個加密參數(shù)生成呢?
1.看請求參數(shù),搜索想要查看的特殊字段(并不推薦,但是確實能解決50-60%的app)。
2.objection 列出所有的類,hook全部,然后看關(guān)鍵點的時候哪些類被調(diào)用了。
3.利用dumpsys window 或者activity看當(dāng)前的activity(mt管理器也可以記錄activity),進到里面找邏輯,如果邏輯代碼太多則不適用。
4.觀察各個接口的請求參數(shù),是否都有一樣的請求體結(jié)構(gòu)(換句話說就是看這些請求參數(shù)的鍵名)是不是一樣的,如果一樣,按照開發(fā)邏輯理念,一定有一個通用的模板加密類,搜一個加密字段,找到這個加密類,查找用例,或者用objection跟蹤,打印調(diào)用棧。
5.hook 通用的加密算法,打印調(diào)用棧。
6.hook 網(wǎng)絡(luò)庫okhttp,request等的(以O(shè)kHttpLogger-Frida庫為首的)。
7.hook hashmap的put方法,大部分的請求參數(shù)基本都用的hashmap封裝請求體,hook put方法,打印調(diào)用棧,則可以找到(并不100%通用)
8.hook string類的getBytes等的常用方法或者轉(zhuǎn)Json的方法。
9.hook Byte類的toString等的常用方法或者轉(zhuǎn)Json的方法。
10.hook Toast類,主流開發(fā)習(xí)慣,提示彈窗都用的這個類,hook它,看調(diào)用棧。
11.關(guān)閉網(wǎng)絡(luò),再發(fā)起需要操作的目標(biāo)接口,看報錯提示,利用報錯提示找調(diào)用棧,實際操作時,大部分情況跟思路10重合。
12.用frida hook 類android.view.View,點擊哪里hook哪里的方法,打印調(diào)用棧。
13.hook Log類,按照開發(fā)邏輯,開發(fā)人員會在開發(fā)的時候會在一個階段里用log打印輸出日志看邏輯,hook log打印調(diào)用棧,有時候有奇效。
14.有的app會檢測返回值的格式,并解析輸出顯示,看是否有通用解析類,hook它,如果hook不上(或者找不到這種類),則用抓包工具修改返回值,然后看解析邏輯(不常用)。
以上方法也無法保證通用,比如也有反調(diào)試調(diào)用棧,使其打印不到核心調(diào)用流程或者直接返回空調(diào)用棧,這種就得針對處理了。
GDA 、jeb、jadx,混著用,別只用jadx,有時候jadx解析并不好,看不到邏輯。
比如某wtoken,用jeb可以直接看到一些邏輯,jadx的那個部分解析失敗。
調(diào)試
當(dāng)定位到加密參數(shù)生成邏輯的時候,準(zhǔn)備調(diào)試。
一般用objection跟蹤類,看調(diào)用棧,結(jié)合源碼,寫frida腳本調(diào)試,如果在frida邏輯里能hook或者主動調(diào)用實現(xiàn),此步結(jié)束。
目前來看,到這一步,基本都會遇到frida反調(diào)試,frida直接用不了,有時候換用lsposed,會有奇效,如果還不行,這就需要去對抗檢測了,三兩句就說不清楚了,感興趣可以聯(lián)系我。
加密協(xié)議實現(xiàn)
調(diào)試完感覺能行得通之后,開始實現(xiàn)加密邏輯。
1.確定是什么加密算法(并不通用,需要結(jié)合實際)。
這里的加密算法,推薦看Q佬的文章。
2.判斷是否是標(biāo)準(zhǔn)的加密算法,給一個固定的入?yún)?,與標(biāo)準(zhǔn)的算法對照加密結(jié)果。
3.實現(xiàn)協(xié)議。
這個就需要需要花精力分析,嘗試,實在無法實現(xiàn),可以用unidbg,不要糾結(jié)于手段。
風(fēng)控對抗
當(dāng)以上步驟你都走完后,請求幾次,發(fā)現(xiàn)確實能拿數(shù)據(jù),于是你非常開心的部署并跑起來,結(jié)果批量跑沒多久,就各種異常返回,滑塊,403啥的也跟著來了,這時候你可能就遇到風(fēng)控了。
什么是風(fēng)控,以下是簡單版的,這個不一定齊全也不一定對,后面有空再單獨搞個專題文章介紹風(fēng)控的。
結(jié)合以上信息,傳到服務(wù)器,服務(wù)端收集到用AI推演出用戶畫像,行為習(xí)慣,判定風(fēng)險等級,然后給定設(shè)備/賬號限制。
如果等級低,則出滑塊,不返回數(shù)據(jù)或者返回異常,提示實名認證,比如某國外社交app,需要人臉認證、身份證、手機號碼驗證?。
風(fēng)控這種東西怎么對抗呢,這個就真的難說了,只能花時間測試并針對調(diào)整了。





















