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








