Crack App | 某資訊 app 參數(shù) Signature 與 request_sign_q 加密邏輯分析
第一時(shí)間關(guān)注Python技術(shù)干貨!

圖源:網(wǎng)絡(luò)
今日目標(biāo)
aHR0cHM6Ly93d3cud2FuZG91amlhLmNvbS9hcHBzLzEyMzY2NzE=
js 逆向卷不動了,開始入門 app
抓包分析
打開 app,然后檢索python關(guān)鍵詞,可以找到下面的請求

其中signature還有request_sign_q是分析的重點(diǎn)
查殼與脫殼
現(xiàn)在基本 app 都會做加固防護(hù),所以還是直接看看有沒有殼

果然還是有殼的,是數(shù)字家的
還是用上次的辦法,先脫殼試試,然后再抓包看請求
很好,BlackDex 直接掛逼了

掏出葫蘆娃大佬的frida-dexdump試試

項(xiàng)目地址:https://github.com/hluwa/frida-dexdump
使用方法也很簡單,直接pip3 install frida-dexdump就行了,具體的可以看看大佬的項(xiàng)目,記得star
r0env自帶了frida-dexdump,所以先看看frida-dexdump的幫助文檔

每個(gè)項(xiàng)都做了通俗的標(biāo)注,大佬太貼心了。
直接frida-dexdump -d走起,這個(gè)選項(xiàng)很慢,沒有FART倒數(shù) 3 秒脫殼那么快,但是非常給力
#?準(zhǔn)備工作
1、啟動?frida?server
2、啟動?app?并保持?app?運(yùn)行狀態(tài)
3、啟動?frida-dexdump

直接開整,然后就脫下來了,不指定輸出路徑的話默認(rèn)會保存在frida-dexdump/[package name]的路徑下

全部打包太多了,所以我刪掉了非常小的幾個(gè)dex,按照大小排序打包了最大的幾個(gè),拖到jadx中分析

通過檢索我們可以大致定位到signature還有request_sign_q的位置,接下來分析看看
加密參數(shù)分析
signature 參數(shù)分析
先看signature,這個(gè)參數(shù)直接檢索結(jié)果可太多了

所以試著通過同一個(gè)請求的其他參數(shù)輔助定位,這個(gè)和 js 逆向中分析參數(shù)的思維邏輯是相通的
然后就可以找到下面的位置了

這個(gè)位置是okhhtp3.Interceptor和 js 逆向中遇到的攔截器一樣也是在往請求中搞一些小動作
這里可以看到signature經(jīng)過了C26321sk1.a(url.url().toString(), hashMap)的出結(jié)果
所以繼續(xù)追進(jìn)去看看a方法都做了什么操作
進(jìn)去之后看到這里取了appid、cv、platform、reqid、version這些參數(shù)之后,還調(diào)用了一個(gè)a方法

這里的a方法返回的是context,是 app 的上下文,和加密關(guān)系不大,主要的邏輯還是在C13259SignUtil.a中
可以看看這個(gè)文章:http://gityuan.com/2017/04/09/android_context/

跟到C13259SignUtil.a中,可以看到,方法里調(diào)用了signInternal方法

這個(gè)方法是個(gè)native方法,使用下方代碼,hook看下結(jié)果和參數(shù)
Java.perform(function?()?{
?????var?SignUtil?=?Java.use('類名');
?????SignUtil.signInternal.implementation?=?function?(a,b)?{
?????console.log("參數(shù)?a?===>:"+?a);
?????console.log("參數(shù)?b?===>:"+?b);
?????var?result?=?this.signInternal(a,b);
?????console.log("結(jié)果===>:"+result);
?????return?result;
?};
});

可以看到參數(shù)a是標(biāo)識context實(shí)例,b參數(shù)是一串字符串符合我們前面的分析
這個(gè)so我們之后分析
request_sign_q 參數(shù)分析
依舊是搜索定位,這個(gè)參數(shù)好定位得多

關(guān)鍵得函數(shù)是這個(gè)b函數(shù),繼續(xù)跟進(jìn)去分析b函數(shù)

這個(gè)就比較簡單啦,是一個(gè)AES加密,同樣的hook一下看看
Java.perform(function?()?{
?????var?encryptUtil?=?Java.use('類名');
?????encryptUtil.b.implementation?=?function?(a)?{
?????console.log("參數(shù)?a?===>:"+?a);
?????var?result?=?this.b(a);
?????console.log("結(jié)果===>:"+result);
?????return?result;
?};
});

輸出的內(nèi)容比較多
這里就截了短的一個(gè)給大家看看,大家可以根據(jù)抓包來印證分析出入?yún)?/p>
不是自寫算法,大家可以試試看用python還原一波


so 分析 - 沒寫,還不會
剛剛我們分析了signature 參數(shù),但是只到調(diào)用的位置就沒有繼續(xù)了,因?yàn)榻酉聛砭褪?code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(71, 193, 168);">so層的分析了
把對應(yīng)的so拖到IDA里面瞅瞅,有點(diǎn)難,還是之后熟悉了unidbg還原之后再來分析吧


End.
以上就是今天的全部內(nèi)容了,又一次見識到自己的菜,繼續(xù)學(xué)習(xí)了。
公眾號配套技術(shù)交流群,備注【咸魚666】,入群交流
我是沒有更新就在摸魚的咸魚
收到請回復(fù)~
我們下次再見。
對了,看完記得一鍵三連,這個(gè)對我真的很重要。
