送書(shū)|逆向系列-你一定要懂的MD5加密
逆向的步驟
逆向的步驟主要包含以下幾點(diǎn):
-
抓包
抓包的過(guò)程其實(shí)很簡(jiǎn)單,在學(xué)爬蟲(chóng)入門(mén)的時(shí)候,想必這是每一個(gè)同學(xué)都必學(xué)的一個(gè)階段。打開(kāi)開(kāi)發(fā)者調(diào)試工具,刷新頁(yè)面,即可在network面板查看到加載出來(lái)的數(shù)據(jù)包。
-
調(diào)試
當(dāng)找到目標(biāo)數(shù)據(jù)包時(shí),根據(jù)目標(biāo)數(shù)據(jù)包form data中的關(guān)鍵字參數(shù)進(jìn)行全局查找,便基本上可以查找到目標(biāo)參數(shù)所在的js文件,通過(guò)斷點(diǎn)的方式即可查找到目標(biāo)值。注意:這僅僅只是針對(duì)大多數(shù)網(wǎng)站的方式。
-
扣取js
當(dāng)找到目標(biāo)參數(shù)的值的生成方式時(shí),便需要通過(guò)方法棧的跟蹤找到目標(biāo)參數(shù)生成值的方法即可,并將js代碼復(fù)制出來(lái)并運(yùn)行代碼即可。
-
改寫(xiě)js
有時(shí)候,扣去下來(lái)的js代碼存在不規(guī)范,需要進(jìn)行簡(jiǎn)單的修改。這一點(diǎn)需要各位同學(xué)熟悉js的代碼。
-
本地運(yùn)行代碼
當(dāng)做完上述的步驟之后,便可以將代碼復(fù)制出來(lái)在本地運(yùn)行出結(jié)果與已知結(jié)果相同即可。
常見(jiàn)的加密方法
MD系列
MD系列中有三種加密方式:MD5、MD4、MD2。
關(guān)于MD系列中重點(diǎn)講解的內(nèi)容就是MD5,不論是多長(zhǎng)的字符串均能加密成32位或16位字符。MD5編碼是由數(shù)字與字母組成,因此看到位數(shù)以及字母組成形式的字符可以迅速判斷可能是MD5編碼。
MD5編碼具有不可逆的特點(diǎn),明文可以被加密成密文,但是無(wú)法根據(jù)密文以及加密方式反推明文,極大的保證了安全性。但是目前有不少在線解密MD5的網(wǎng)站,它是怎么樣做的呢?
其實(shí)很簡(jiǎn)單,它將常見(jiàn)的明文加密成MD5密文的形式,將所得結(jié)果保存起來(lái),當(dāng)需要查詢的時(shí)候進(jìn)行匹配即可。其實(shí)這種方法就類(lèi)似于暴力破解。
個(gè)人經(jīng)驗(yàn)之談
關(guān)于MD5的加密,我說(shuō)一下個(gè)人的經(jīng)驗(yàn)一般來(lái)說(shuō)它會(huì)在賬號(hào)與密碼登陸的時(shí)候動(dòng)手腳。(對(duì)于一部分網(wǎng)站)
我們?cè)谳斎朊艽a的時(shí)候會(huì)采用123456,方便我們記憶。
為什么這樣說(shuō)呢?
因?yàn)?23456所對(duì)應(yīng)的16位和32位MD5字符串分別是:
49ba59abbe56e057 #16位
e10adc3949ba59abbe56e057f20f883e # 32位
這一點(diǎn)我們需要熟記,123456的16位密文是49開(kāi)頭,而32位123456的密文是e10開(kāi)頭。當(dāng)在數(shù)據(jù)包中發(fā)現(xiàn)此類(lèi)信息是即可判斷。
另一點(diǎn)就是程序員一般都不會(huì)沒(méi)事找事干。加密函數(shù)與加密參數(shù)都是放在同一個(gè)js文件中,如果實(shí)在是找不到也沒(méi)有關(guān)系,可以考慮采用方法棧的跟蹤進(jìn)行查找。
今日網(wǎng)站
aHR0cHM6Ly93d3cuc29odS5jb20v
本次網(wǎng)站主要是考慮是如何破解登陸上的MD5加密,和開(kāi)始所寫(xiě)的內(nèi)容相同,一定要按照逆向的步驟進(jìn)行操作。
首先先進(jìn)行抓包操作:
如上圖所示,我輸入的密碼是123456,它也給我通過(guò),只是點(diǎn)擊登陸的時(shí)候會(huì)顯示密碼或賬號(hào)錯(cuò)誤。有些網(wǎng)站是不會(huì)通過(guò)123456這種密碼的,那么如果不通過(guò)的話,就要考慮換一個(gè)復(fù)雜一點(diǎn)的即可。
大家來(lái)看一下,這是不是就是我們要查找的數(shù)據(jù)包呀?
很明顯,當(dāng)我們看到password的值時(shí)是否就能聯(lián)想到剛剛所描述的加密方式的特點(diǎn)呢?相信各位同學(xué)都已經(jīng)心中有數(shù)了吧!
form data里面的參數(shù)都是我們可以進(jìn)行搜索的內(nèi)容,比如說(shuō):userid、password、persistentCookie等等,或者是最上方的url里面的值也有可能是我們要進(jìn)行全局搜索的內(nèi)容哦。
為了節(jié)省時(shí)間,我們就直接對(duì)password進(jìn)行全局搜索。
經(jīng)過(guò)搜索之后,我們從圖中可以發(fā)現(xiàn),出現(xiàn)的結(jié)果還是蠻多的。但是大家有沒(méi)有想過(guò)一個(gè)問(wèn)題,那就是MD5加密的值是怎么樣傳遞給password的呢?一般來(lái)說(shuō)是不是對(duì)象.password = xxx這樣的形式來(lái)傳遞的呢?因此搜索方式可以修改為password=:
在password的后面我沒(méi)有加上空格,因?yàn)楝F(xiàn)在所搜索的內(nèi)容是沒(méi)有經(jīng)過(guò)格式化的,如果格式化代碼之后,那么在password的后面就必須要加上空格了。(這一點(diǎn)要注意)
從上圖可以看出,所搜結(jié)果又被過(guò)濾掉了很多,只剩下其中一個(gè)了,這正合我意。
當(dāng)進(jìn)入這個(gè)js文件之后,再將password搜索一遍,可以看到password的結(jié)果有4個(gè)。
接下來(lái)便在此行打上斷點(diǎn),來(lái)跟蹤加密函數(shù)。從上面的圖中可以發(fā)現(xiàn)它是通過(guò)utils對(duì)象生成的加密參數(shù)。
打上斷點(diǎn)之后,可以發(fā)現(xiàn)這個(gè)確實(shí)是我們需要查找的內(nèi)容,經(jīng)過(guò)上面的分析,接下來(lái)便要查找utils關(guān)鍵字。
經(jīng)過(guò)搜索發(fā)現(xiàn),在當(dāng)前的js代碼中確實(shí)是存在utils關(guān)鍵字,看上去也是一個(gè)對(duì)象,那這就剛剛好驗(yàn)證了我們剛才所描述的內(nèi)容了。
在這里也分享一下我扣取js代碼的經(jīng)驗(yàn):
可以先將JS代碼全部復(fù)制下來(lái)到本地,因?yàn)樵跒g覽器中括號(hào)無(wú)法將成對(duì)展現(xiàn),但是在本地文件中是可以成對(duì)出現(xiàn),方便扣取的時(shí)候,不會(huì)少了括號(hào)或者是代碼而報(bào)錯(cuò)。
將utils代碼扣去下來(lái)之后,便將其進(jìn)行運(yùn)行出結(jié)果即可。
至此,關(guān)于MD5的加密逆向就講解到這里了。
更多精彩內(nèi)容,期待下次再見(jiàn)!??!
送書(shū)
本書(shū)介紹了如何利用 Python 3 開(kāi)發(fā)網(wǎng)絡(luò)爬蟲(chóng)。本書(shū)相比于第 1 版,作者為每個(gè)知識(shí)點(diǎn)的實(shí)戰(zhàn)項(xiàng)目配備了針對(duì)性的練習(xí)平臺(tái),避免了案例過(guò)期的問(wèn)題。另外,主要增加了異步爬蟲(chóng)、JavaScript 逆向、App 逆向、頁(yè)面智能解析、深度學(xué)習(xí)識(shí)別驗(yàn)證碼、Kubernetes 運(yùn)維及部署等知識(shí)點(diǎn),同時(shí)也對(duì)各個(gè)爬蟲(chóng)知識(shí)點(diǎn)涉及的請(qǐng)求、存儲(chǔ)、解析、測(cè)試等工具都進(jìn)行了豐富和更新。
點(diǎn)擊下方回復(fù):送書(shū) 即可!
