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