安卓逆向-靜態(tài)分析破解某app sign參數(shù)

好久沒(méi)寫(xiě)文章了,今天帶大家去分析一波某app的sign參數(shù),這個(gè)app還比較特殊,當(dāng)時(shí)在源碼找這個(gè)參數(shù)的時(shí)候死活找不到,后來(lái)抓包仔細(xì)一看Referer字段,瞬間明白了,他利用js發(fā)送的請(qǐng)求,首先抓包請(qǐng)出今天的受害者:

從密文來(lái)看像是16進(jìn)制,我們直接在線16進(jìn)制解密試一下,萬(wàn)一解密出來(lái)了呢!


哦豁!發(fā)現(xiàn)并不是我們想要的結(jié)果,哈哈,廢話少說(shuō),直接打開(kāi)Referer字段的url,采用字符串搜索大法,全局搜索sign參數(shù),發(fā)現(xiàn)有以下5處結(jié)果:


經(jīng)過(guò)排查,最終定位到:

從代碼可見(jiàn),將參數(shù)按照key值進(jìn)行排序后使用&拼接,加上指定的鹽值進(jìn)行加密,我們繼續(xù)跟蹤加密的函數(shù),發(fā)現(xiàn)調(diào)用了2個(gè)函數(shù)完成加密邏輯,(提示個(gè)小技巧,代碼混淆比較大,無(wú)法定位到函數(shù)定義的地方,將代碼copy到IDE中按住Ctrl點(diǎn)擊),跳轉(zhuǎn):

這兩個(gè)肯定是加密邏輯了,我們順著找上去,先看第一個(gè)“a7c4”對(duì)應(yīng)的函數(shù),直接上全局搜索,

得到函數(shù)源碼如下:


這個(gè)應(yīng)該就是導(dǎo)出的密文函數(shù)了,從代碼邏輯看出應(yīng)該是對(duì)某加密結(jié)果進(jìn)行轉(zhuǎn)換操作,我們copy到ide中用note運(yùn)行一下,得到加密后的結(jié)果:


發(fā)現(xiàn)這并不是我們想要的結(jié)果,從這個(gè)sign密文和這個(gè)函數(shù)導(dǎo)出的結(jié)果可以得出結(jié)論,入?yún)⒖隙ㄊ莻€(gè)加密后的結(jié)果,通過(guò)計(jì)算算出密文長(zhǎng)度是明文長(zhǎng)度的2倍,那么明文長(zhǎng)度肯定就是32位了,我們回到源碼,搜索另一個(gè)加密函數(shù)8d81:


這就是加密的邏輯,從代碼來(lái)看是不是有點(diǎn)暈啊,仔細(xì)看下加密特征,就知道這是一個(gè)很普通的MD5加密:

普及一下:

數(shù)據(jù)摘要的算法(MD5,SHA*) 算法的數(shù)據(jù)特征:

由三個(gè)方法組成:1.初始化? ? ? ? 2.運(yùn)算? ? ? ? 3.取結(jié)果

MD5有四個(gè)固定常量。SHA1算法有5個(gè)固定常量。SHA256算法有8個(gè)固定常量。

常見(jiàn)表現(xiàn)形式如下:

這種特征在so層加密很常見(jiàn)的:

最后我們直接將拼接好的key加上代碼的鹽值進(jìn)行MD5,傳入剛才的a7c4函數(shù)運(yùn)行就是sign結(jié)果,直跑一下試試:

見(jiàn)證了我們前面的思路是對(duì)的,當(dāng)js代碼混淆比較亂且比較復(fù)雜時(shí),可以直接調(diào)用js,或者使用express框架搭建服務(wù)器,這里代碼量較少,python幾行代碼搞定:


文章僅供學(xué)習(xí)交流,禁止一切商業(yè)用途。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容