作者: Alexboo (知己方能百戰百勝) 看板: Gossiping
標題: Re: [問卦] 有沒有WINRAR的密碼無解的八卦
時間: Sat May 29 20:25:22 2010
※ 引述《accprote (KS)》之銘言:
: RAR是普遍用的壓縮格式
: 然後各大網站的分享者通常會保護自己的東西
: 所以都會加密
: 但是rar的加密好像現在還是無解
: 有沒有RAR密碼的八卦?
哎呀 八卦版居然對技術問題有興趣
那我轉貼一篇長文解釋吧...
http://bbs.pediy.com/showthread.php?t=62908
一個菜鳥關於winrar密碼無法秒破的研究結果
研究的原因:
由於有一個重要的Rar檔案,極需解開,首先試用了ARPC,但是解壓
的速度極慢,每秒只有30個左右,所以斷了窮舉破解的念頭,卻仍不死心
,因為我從不崇尚窮舉破解的方法,除非每秒可以跑幾千萬次的,我或許
可以一試,所以決定研究一下Winrar 3.x密碼演算法,以期是否可以破
解該密碼。查看了網路上的資料,包括看雪FAQ裏的回答,都聲稱只能用
窮舉法破解,起先並不理解,但通過研究,我理解了看雪前輩們在FAQ裏
所說的原因,不禁讓我佩服 Winrar加密思路的成熟。雖然研究的結果沒
有什麼新意,但我還是決定把我的研究結果與大家一起分享,為那些仍然
以為winrar密碼可以象破解註冊碼一樣的,通過修改winrar彈出框之類的
更改檔案流程指向可以達到跳過密碼檢驗的朋友,做一個簡要的說明。
一、Rar檔案生成的流程。
Winrar加密檔案時,總的分兩個步驟:
1:先把原始檔案壓縮,壓成一段資料段。
2:再將壓縮完的資料段加密。
對於同一個原始檔案來說,不進行加密,壓縮完,其rar檔案中的資料段
是一模一樣的。但是如果對同一個原始檔案來說,即使使用同一個密碼,
加密完rar檔案中的資料段是不一樣的,這是由於加密的密鑰是依賴於一
個Salt(8個位元組的密鑰,用來加密時使用,存放在rar檔案頭中裏)
所以要解密rar加密檔案關鍵在於資料解密這一步,那我們接下來研究一
下如何加密的。
二、加密“壓縮完的資料段”的流程
1、獲取密鑰:
將明文的密碼與Salt一起,通過HASH演算法,生成兩個16位元組的密鑰。
(一個是KEY(AES演算法的參數),一個是initVector)
2、以Key和initVector來加密壓縮資料:
這裏,是一個迴圈加密的結構,每16位元組作為一個塊,進行加密(這可
能正是為什麼加密完的檔案長度總為16倍數的原因)。加密採用AES演算法
(RAR採用的是AES的rijndael的標準應用)。這裏注意:AES加密前,有
一個XOR運算,是先將每16位元組塊與上一個16位元組塊加密結果進行XOR,
然後再進行AES演算法的。我用一個簡單的示意代碼看說明:
;===============================================
packblock[0]=packblock[i]^initVector
encryptBlock[0]=AES(packblock[0]) ;(KEY為AES的密鑰)
for i=1 to blocks-1
packblock[i]=packblock[i]^encryptBlock[i-1]
encryptBlock[i]=AES(packblock[i]) ;(KEY為AES的密鑰)
next
;packblock[i]表示壓縮完的每16位元組資料
;encryptBlock[i]表示加密完的每16位元組資料
;===============================================
三、解密的過程
由於AES演算法是對稱的,所以解密的過程,是加密過程的逆運算。但
解密時AES演算法過程與加密所用的不一樣(是因為解密過程中由KEY生
成的子密鑰表不一樣)。仍然需要我們將密碼輸入,與salt一起生成
兩個16位元組密鑰,KEY和initVector。
;===============================================
packblock[0]=AES_Reverse(encryptBlock[0]) ;(KEY為AES的密鑰)
packblock[0]=packblock[i]^initVector
for i=1 to blocks-1
packblock[i]=AES_Reverse(encryptBlock[i]) ;(KEY為AES的密鑰)
packblock[i]=packblock[i]^encryptBlock[i-1]
next
;===============================================
那判斷密碼是否正確的在什麼地方呢?
解密的過程是解密後的資料塊進行解壓縮,然後解成原始檔案,對該
檔案進行CRC校驗,存在RAR檔案中的原始檔案CRC校驗碼比較,相同則
密碼正確,不相同則密碼錯誤。
四、無法秒破的原因
從上面,我們瞭解了RAR檔案的整體思路。地球人都知道,解密時,肯定
有個步驟是來判斷密碼的正確與否。而且,依據以往的經驗,我們也許
可以將某些判斷的點移動,那樣可以縮減破解的流程思路。那RAR的這一
步在哪里?它把校驗放在了最後的一步。如果要秒破,我們該怎麼做泥
?至少我認為目前是不可能的。
我們從解密過程逆反過來看看:
1、CRC檢驗這一塊修改跳轉?
根本毫無意義,因為它已經是最後一步了。你可以修改RAR檔案頭的
CRC值,你可以將它改得和你用任意密碼解壓出來的檔案CRC值一樣,
但你的檔案根本就不是原來的檔案了。可能已經完全面目全非了。
所以,對這一過程不可行。CRC校驗本身是不可逆的
2、那麼把判斷提前到壓縮完的資料?
解壓的時候,有沒有什麼來判斷壓縮資料是否正確?壓縮完的資料,
有沒有固定的特徵,是否可以做為解壓的判斷,在這一步裏,我們也
無法找到有效的可用的固定特徵。因為這一步涉及到RAR的壓縮演算
法。即使一個原始檔案,即使你的檔案前一部分是完全相同的,只對
後面的部分進行改過,那麼壓縮完,資料也是完全一樣的。因為壓縮
完的資料首先是一個壓縮表,後面是編碼。檔案不一樣,掃描完的壓
縮表也不一樣,編碼又是依賴於壓縮表,所以,這裏頭找不到壓縮完
的資料有任何的固定特徵可以用來判斷的。
不管壓縮資料是什麼樣的,Winrar都一如既往地進行解壓,沒有進行
壓縮資料是否有效的判斷。
3、那假如我們破解了AES了泥?
由於AES只依賴於KEY,如果AES演算法被破解了,我們知道了KEY,
我們可以解出壓縮完的資料,但是這裏有一個問題,還有一個
initVector密鑰,用來第一個16位元組塊的異或,你沒有initVector
參數,你第一個16位元組塊的資料便無法解得出來。
4、那就只能從第一步Hash的演算法入手
即使你能破解hash,但hash後的結果泥?沒有結果,你怎麼返推密碼。
所以綜上,我發現rar的加密是由hash和AES兩種演算法互相牽制,而兩種
演算法當前都無法破解,至少目前還沒有辦法秒破,也理解了看雪高手講
的道理。
五、對窮舉提高演算法效率的一些設想。
我用ASM寫完了RAR窮舉解密的演算法模組,但是如何提高效率,優化窮舉
的速度泥?我有如下的想法:
1、從壓縮資料裏找尋特徵,省掉解壓縮、CRC檢驗代碼和生成initVector
生成代碼。目前,通過多次實驗,我找到的一個特徵(不知道這個是否
正確),即解密完的最後一個16位元組塊的最後一個位元組必須為0。
因為經過多次的試驗,我發現有加密的資料段長度都會比未加密前的資
料長,那麼,最後一個16個位元組的資料塊解密完,多出的部分就都為0
,但多出幾個位元組泥?多次實驗,長度不一,我試想著從加密資料段
最後一個16個位元組塊著手,只解這一塊,看是否一個位元組為0,這
樣,只解密16個位元組的資料,來大大提高效率?如果能進行到這一
步了,再通過解全部資料,進行CRC校驗的判斷。
2、如果第一個特徵不成立的話,針對特定格式的壓縮檔案,比如doc、jpg
等,部分資料固定,壓縮完的資料是否存在相互牽制的資料?從而把判
斷提前,這一步,我不知道如何找到壓縮完的資料是否存在相互牽制的
資料。
以上是研究的一點點成果,歡迎大家討論,至於聽說如美國情報機構,完成
了對RAR檔案的秒破,還有在臺灣一論壇上看到,有人提到RAR文件被人秒破
過,我不太相信,我覺得美國情報局這樣的機構,有可能可以秒破,但應該
是建立在已經通過非常規手段,跑出一份對應表,只做查詢密碼才有可能做
到.
====
給按END的
簡單的說就是除了窮舉 你也破不了
不過中文不是問題就是了 :)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.172.208.136
推 wyvernlee:略懂 05/29 20:26
推 dio0204:喔喔~~~~~~~~~~~~~~~原來如此 05/29 20:26
推 oo0: E N D 05/29 20:26
推 Hu1din:嗯嗯 原來如此 05/29 20:27
推 RedHouse:拿1.0的來破就好了,誰叫你挑戰版新版的 05/29 20:27
→ LVE: 哈 看完之後馬上破了一個檔案,今晚不睡了阿! 05/29 20:27
推 s902131:略懂 05/29 20:27
推 WizZ:所以有生之年都看不到林.. 05/29 20:27
→ deeder1:END 05/29 20:27
推 tk1211:嗯 差不多就是這樣 05/29 20:27
→ digimaster:花點小錢加入論壇會員就好了 花時間在破解密碼上?呿~ 05/29 20:28
→ doctor2tw: END 05/29 20:29
推 wackyjazz:閱 05/29 20:29
推 estupid:略懂略懂 05/29 20:30
推 opopoppj:快推 不然有人嫌我們笨 05/29 20:30
→ bear2008:直接貼結論還比較快 05/29 20:30
推 protoss666:END 05/29 20:31
推 akira00150:推 但是我看不懂 05/29 20:32
推 momowawa1981:恩 原PO想法跟我差不多 不錯 05/29 20:32
推 wolves0117:沒錯 跟我想的一樣 嗯嗯 嗯嗯 嗯嗯 05/29 20:32
推 gmoz:簡單的說就是 他根據你輸入的密碼解完檔案之後再比對 05/29 20:33
→ netsphere:喔 05/29 20:33
→ gmoz:不是先檢查密碼對不對再開始解壓縮 是這樣嗎? 05/29 20:33
噓 ewings:這是google搜索的結果第一個網頁的文章吧,來人檢舉吧 05/29 20:35
→ Alexboo:給 gmoz: 對 因為根本沒紀錄密碼啊... XD 05/29 20:35
推 boyen3:密碼學... 當初差點被這科搞死 05/29 20:36
推 yphs88:alexboo那這樣超大檔案密碼一不小心輸入錯誤不就囧了? 05/29 20:37
→ Alexboo:給 yphs88: 是啊... 05/29 20:41
推 a1e:密碼學的東西拜託不要貼上來...那個真的會整死人... 05/29 20:41
→ Alexboo:給 a1e: 這還沒講到密碼學的經隨啦...XD 05/29 20:43
推 adila:原來是這樣啊! 05/29 20:45
推 tom222:我用一個簡單的示意代碼看說明: 05/29 20:48
推 hkshen:原來是這樣阿 05/29 20:51
推 hank11235813:真巧 我也是這樣認為的 05/29 20:53
推 ohhiyomylove:略懂 05/29 20:55
推 mmmbop:恩 沒錯 就是這樣 05/29 21:08
推 andywolfer:有生之年還是看不到林志玲大戰林百里這個傳說了 05/29 21:13
推 Janius:最後三行字很貼心 05/29 21:24
推 afooque:專業推! 雖然沒看完 05/29 21:48
沒有留言:
張貼留言
您好.本資料庫並非第一手資料.如果你有對文章作者的詢問,意見與需求,請自行找尋文章作者並提供意見,謝謝.