好久沒寫文章了箩祥,今天帶大家去分析一波某app的sign參數(shù)试伙,這個(gè)app還比較特殊议薪,當(dāng)時(shí)在源碼找這個(gè)參數(shù)的時(shí)候死活找不到,后來抓包仔細(xì)一看Referer字段,瞬間明白了罐孝,他利用js發(fā)送的請求,首先抓包請出今天的受害者:
從密文來看像是16進(jìn)制,我們直接在線16進(jìn)制解密試一下,萬一解密出來了呢狞尔!
哦豁丛版!發(fā)現(xiàn)并不是我們想要的結(jié)果,哈哈,廢話少說,直接打開Referer字段的url偏序,采用字符串搜索大法页畦,全局搜索sign參數(shù),發(fā)現(xiàn)有以下5處結(jié)果:
經(jīng)過排查研儒,最終定位到:
從代碼可見豫缨,將參數(shù)按照key值進(jìn)行排序后使用&拼接,加上指定的鹽值進(jìn)行加密端朵,我們繼續(xù)跟蹤加密的函數(shù)好芭,發(fā)現(xiàn)調(diào)用了2個(gè)函數(shù)完成加密邏輯,(提示個(gè)小技巧冲呢,代碼混淆比較大,無法定位到函數(shù)定義的地方栓撞,將代碼copy到IDE中按住Ctrl點(diǎn)擊),跳轉(zhuǎn):
這兩個(gè)肯定是加密邏輯了,我們順著找上去瓤湘,先看第一個(gè)“a7c4”對應(yīng)的函數(shù),直接上全局搜索恩尾,
得到函數(shù)源碼如下:
這個(gè)應(yīng)該就是導(dǎo)出的密文函數(shù)了弛说,從代碼邏輯看出應(yīng)該是對某加密結(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é)果,通過計(jì)算算出密文長度是明文長度的2倍冀偶,那么明文長度肯定就是32位了醒第,我們回到源碼,搜索另一個(gè)加密函數(shù)8d81:
這就是加密的邏輯进鸠,從代碼來看是不是有點(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è)固定常量。
常見表現(xiàn)形式如下:
這種特征在so層加密很常見的:
最后我們直接將拼接好的key加上代碼的鹽值進(jìn)行MD5量瓜,傳入剛才的a7c4函數(shù)運(yùn)行就是sign結(jié)果司恳,直跑一下試試:
見證了我們前面的思路是對的,當(dāng)js代碼混淆比較亂且比較復(fù)雜時(shí)绍傲,可以直接調(diào)用js扔傅,或者使用express框架搭建服務(wù)器,這里代碼量較少烫饼,python幾行代碼搞定:
文章僅供學(xué)習(xí)交流,禁止一切商業(yè)用途猎塞。