C語(yǔ)言密碼破解!??!遠(yuǎn)沒有你想的那么簡(jiǎn)單!

導(dǎo)語(yǔ)

?各位,大家看到標(biāo)題先別著急,我先大伙聊聊密碼破解的事,后面會(huì)有C語(yǔ)言的破解案例。

? ? ? ?現(xiàn)代密碼學(xué)發(fā)展到今天,應(yīng)該來(lái)講破解密碼的可能性已經(jīng)很低了,而且破解的方法比較單一,因?yàn)楝F(xiàn)在普遍采取不可逆的哈希加密方式(如md5、SHA-1、HMAC-MD5等等),無(wú)法通過(guò)反向計(jì)算破解密碼,因此目前有效的密碼破解方式仍然是哈希碰撞來(lái)暴力破解。

? ? ? ?暴力破解的本質(zhì)就是遍歷所有可能,而且我們可優(yōu)化的地方只能是策略層面的,也就是提高遍歷所有情況的效率。不過(guò)今天我們要講的不是暴力破解,我們接下來(lái)要說(shuō)的是跟C語(yǔ)言學(xué)習(xí)有關(guān)的一個(gè)密碼破解的案例,一定程度上也提供了一種密碼破解策略,大家請(qǐng)先看代碼:

◎? 1、密碼破解C語(yǔ)言案例

◎? 2、破解案例分析

? ? ? ?上面的代碼其實(shí)很簡(jiǎn)單,提示用戶輸入密碼,讀入字符數(shù)組,通過(guò)比較函數(shù)驗(yàn)證密碼,正確的話輸出破解成功,錯(cuò)誤提示密碼錯(cuò)誤,密碼為abc。當(dāng)然這個(gè)案例有很多地方比較理想化,省略了很多東西,但我們想講的是這種破解思想。

if(flag)

? ? ?printf("\nPassword cracked!\n");? ? //進(jìn)入語(yǔ)句,密碼破解就成功

? ? ? ?從代碼中可以看出通過(guò)if語(yǔ)句即為破解成功,也就是打印出密碼破解成功即可。講到這里,其實(shí)我們大家有一個(gè)思維誤區(qū),就是認(rèn)為密碼破解就是要找出原始密碼才算成功,其實(shí)不是這樣的。

if(0==strcmp("abc",password))?{??????flag=1;? ? //關(guān)鍵在于讓flag變?yōu)榉橇阒?,密碼abc只是為flag重新賦值提供條件? }

? ? ? ?我們換個(gè)角度來(lái)思考,在這個(gè)例子中,要想通過(guò)if語(yǔ)句,也就是說(shuō)驗(yàn)證密碼得成功,需要把flag重新賦值進(jìn)而通過(guò)if語(yǔ)句的判斷條件,問(wèn)題就在這里,我們的最終目的是通過(guò)if判斷語(yǔ)句,也就是說(shuō)判斷條件得為真,而上面輸入密碼等一些列過(guò)程最終就是讓if判斷語(yǔ)句為真,也就說(shuō)我們可以拋棄密碼這個(gè)概念,只要讓if判斷條件為真,即可破解成功,能否想到這一步很重要?。?!

? ? ? ?接下來(lái)我們的工作就是想方設(shè)法讓if判斷條件為真了,也就是給flag重新賦一個(gè)非零值,但可操作的只能是用戶輸入,這似乎有點(diǎn)難度。其實(shí)這里就用到了平時(shí)我們要極力避免的bug——棧溢出。

? ? ? ?大家這樣想,我們沒辦法直接修改flag的值,但可以肯定的是, flag和輸入的密碼都位于同一個(gè)內(nèi)存區(qū)域,而存儲(chǔ)密碼的數(shù)組總是有限的,是否可以通過(guò)輸入足夠長(zhǎng)的密碼來(lái)使數(shù)組數(shù)據(jù)溢出到存儲(chǔ)變量flag的內(nèi)存位置來(lái)改變flag的值答案是可以的。大家看圖:

? 3、總結(jié)反思

? ? ? ?破解上述密碼的關(guān)鍵在于利用數(shù)據(jù)溢出這一漏洞。如果用戶輸入一個(gè)足夠造成緩存溢出并且重寫“flag”變量默認(rèn)值所存在位置的內(nèi)存的長(zhǎng)“密碼”,即使這個(gè)密碼無(wú)法通過(guò)驗(yàn)證,flag驗(yàn)證位也變成了非零,雖然上面的密碼并不等于正確密碼abc,但我們?nèi)匀豢梢酝ㄟ^(guò)緩存溢出繞開密碼安全保護(hù)。

? ? ? ?當(dāng)然上面的例子有很多理想化的地方,但是到現(xiàn)在每年因?yàn)閿?shù)據(jù)溢出漏洞造成損失還很大。以上只是密碼破解領(lǐng)域的一種策略,開頭就說(shuō)了真正的密碼破解遠(yuǎn)沒有這么簡(jiǎn)單,但我們主要想講的是這種問(wèn)題轉(zhuǎn)化的思維,它在計(jì)算機(jī)領(lǐng)域的應(yīng)用是很多的,希望這種思想能給大家的學(xué)習(xí)生活幫上一點(diǎn)忙。

? ? ? ?對(duì)于熱愛編程的小伙伴來(lái)說(shuō),一個(gè)好的學(xué)習(xí)氛圍是事半功倍的!如果你感興趣或者有需求的話,筆者這里推薦我專欄的編程入門學(xué)習(xí)交流聚集地→C語(yǔ)言/C++進(jìn)階之路 - 專題 - 簡(jiǎn)書還有完整的學(xué)習(xí)路線圖和學(xué)習(xí)文件視頻,小白和大神們正在等著你一起探討編程,極佳的學(xué)習(xí)氛圍一起來(lái)學(xué)習(xí)吧!

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 注入攻擊的分類 1.沒有正確過(guò)濾轉(zhuǎn)義字符 在用戶的輸入沒有為轉(zhuǎn)義字符過(guò)濾時(shí),就會(huì)發(fā)生這種形式的注入式攻擊,它會(huì)被傳...
    查無(wú)此人asdasd閱讀 1,842評(píng)論 0 5
  • 個(gè)人學(xué)習(xí)批處理的初衷來(lái)源于實(shí)際工作;在某個(gè)迭代版本有個(gè)BS(安卓手游模擬器)大需求,從而在測(cè)試過(guò)程中就重復(fù)涉及到...
    Luckykailiu閱讀 5,003評(píng)論 0 11
  • [SQL注入攻擊] SQL注入攻擊是黑客對(duì)數(shù)據(jù)庫(kù)進(jìn)行攻擊的常用手段之一。隨著B/S模式應(yīng)用開發(fā)的發(fā)展,使用這種模式...
    James黃杰閱讀 2,926評(píng)論 0 30
  • 1/75 1認(rèn)識(shí)Python語(yǔ)言 2/75 序言 培訓(xùn)最終的目標(biāo)是什么? 衡量一個(gè)合格的軟件工程師的標(biāo)準(zhǔn)是什么? ...
    清清子衿木子水心閱讀 4,328評(píng)論 0 1
  • 滑下薄紗 香肩 玫瑰色的紋身呼之欲出 月光 坐懷不亂 再以猩紅的唇吐出煙圈 以夜來(lái)香的笑聲撩撥其心弦 星兒顫了一顫...
    茉莉風(fēng)車閱讀 309評(píng)論 0 2

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