前言:
一直在群里聽(tīng)別人說(shuō)函喉,某某公司招人避归,要高級(jí)的,要將某里的UA管呵,某驗(yàn)梳毙,某數(shù)這種級(jí)別的逆向問(wèn)題玩弄于股掌之間才行。所以今天就看一下這個(gè)UA到底是個(gè)什么玩意捐下。
我們將通過(guò)一個(gè)大數(shù)據(jù)網(wǎng)站的登錄接口账锹,一步一步的把這個(gè)小東西找出來(lái)。
廢話不多說(shuō)坷襟,直接開(kāi)始吧~~
目標(biāo)網(wǎng)站:aHR0cHM6Ly93d3cubmV3cmFuay5jbi91c2VyL2xvZ2lu
正文:
打開(kāi)目標(biāo)網(wǎng)址奸柬,選擇賬號(hào)登錄,會(huì)出現(xiàn)一個(gè)滑塊婴程。
我們輸入錯(cuò)誤的賬號(hào)和密碼廓奕,然后將滑塊劃到右端。會(huì)在調(diào)試工具中出現(xiàn)兩個(gè)請(qǐng)求档叔。
我們點(diǎn)擊第一個(gè)網(wǎng)絡(luò)請(qǐng)求桌粉,從圖二中可以看到請(qǐng)求參數(shù)中,有一個(gè)n參數(shù)特別長(zhǎng)衙四。憑借我那么些許的直覺(jué)來(lái)看铃肯,這個(gè)n里面應(yīng)該包含了很多貓膩。那么接下來(lái)传蹈,我們來(lái)就追溯一下押逼,這個(gè)參數(shù)是怎么生成的步藕。
將鼠標(biāo)移至圖三紅色框位置,會(huì)顯示該請(qǐng)求的調(diào)用棧宴胧,可以看到有五處調(diào)用漱抓。一次點(diǎn)擊表锻,然后打開(kāi)js文件相應(yīng)位置打上斷點(diǎn)恕齐。類似于圖四所示。
再次滑動(dòng)滑塊瞬逊。當(dāng)鼠標(biāo)碰到滑塊的那一剎那显歧,程序已經(jīng)被斷住了∪纺鳎可以看到上面黃色背景色的部分表示的是鼠標(biāo)事件士骤。這個(gè)是后面某個(gè)函數(shù)的參數(shù),有興趣的同學(xué)可以自己研究下蕾域,我們這里主要找n參數(shù)拷肌。
那么,這里沒(méi)有n參數(shù)旨巷,那么我們繼續(xù)跳到下一個(gè)斷點(diǎn)巨缘。
我們點(diǎn)擊繼續(xù)按鈕,這時(shí)鼠標(biāo)事件繼續(xù)執(zhí)行
我繼續(xù)跳到下一個(gè)斷點(diǎn)采呐,發(fā)現(xiàn)這里也沒(méi)有提到n的事若锁,那就繼續(xù)到下一個(gè)斷點(diǎn)。
我們來(lái)到4067行斧吐,這里黃色背景部分給了我們很多提示信息又固。我們也可以看到紅色箭頭部分,好像是在給一個(gè)n的參數(shù)賦值煤率,那么這個(gè)n是不是就我們找的n呢仰冠?
我們繼續(xù)點(diǎn)擊調(diào)試按鈕,來(lái)到下一個(gè)斷點(diǎn)處蝶糯。我們從控制臺(tái)輸出參數(shù)t洋只,發(fā)現(xiàn)t.data里就是我們?cè)趧傞_(kāi)始分析請(qǐng)求時(shí)遇到的參數(shù),n也位列其中裳涛。那么這個(gè)n是怎么生成的呢木张?
想必大家也已經(jīng)看到了,4566行通過(guò)邏輯表達(dá)式給參數(shù)n賦值端三。賦值的函數(shù)叫:me.__uab.getUA舷礼,對(duì),這就是文章標(biāo)題里說(shuō)的某里的UA郊闯。
我們跟進(jìn)去看一下這個(gè)到底是個(gè)什么東西妻献。發(fā)現(xiàn)是e函數(shù)傳了兩個(gè)參數(shù)蛛株,一個(gè)是數(shù)字:23;一個(gè)是一個(gè)o對(duì)象。繼續(xù)跟進(jìn)去看一下e函數(shù)長(zhǎng)什么樣子
發(fā)現(xiàn)e是這個(gè)函數(shù)育拨,將這個(gè)函數(shù)整個(gè)拷貝出來(lái)谨履,放到vscode里
好嘛, 一個(gè)函數(shù)一萬(wàn)三千行熬丧。
這個(gè)函數(shù)里面有20多個(gè)case笋粟,他調(diào)用的另一個(gè)函數(shù)有40多個(gè)case。
其實(shí)這就是控制流平坦化析蝴。將本來(lái)按照邏輯執(zhí)行的代碼害捕,改成switch..case的形式。從而阻礙了我們的逆向調(diào)試闷畸。
總結(jié):
本案例通過(guò)請(qǐng)求追溯的方式尝盼,一步步的找到加密函數(shù)位置,然后發(fā)現(xiàn)加密函數(shù)為一個(gè)經(jīng)過(guò)控制流平坦化后的函數(shù)佑菩。這也就是某里的UA難以搞定的原因盾沫。如果用同學(xué)想進(jìn)一步研究下如何解決這類問(wèn)題,推薦去看“菜鳥(niǎo)學(xué)Python編程”的關(guān)于AST的文章殿漠。