加密算法運用不當的後果

                                   加密算法運用不當的後果

                                           lnn1123[BCG][DCM][DFCG][D.4s]

看題目就知道這次的目標軟件裏用到了加密算法,哈哈,現在的軟件用加密算法的真的是不少,軟件作者已經不象以前那樣的不重視加密軟件了,但是用加密算法失敗的例子也有不少的哦,這期我爲大家帶來的就是運用不好的加密算法,現在的軟件很多是加的猛殼或者什麼變態的加密算法,使得小菜門看了就跑,爲了給大家學習破解的信心,我帶了一個擊敗加密算法的例子.

軟件介紹:

房地產開發項目經濟評價可行性研究及概預決算管理系統 專業版 6.36,可實現項目成本(造價)、銷售收入、投資計劃、資金籌措計劃、土地拍賣多方案經濟分析、敏感性分析(風險性分析)電算化,可以以最快速度準確地計算出項目的造價(成本)、銷售收入計算、投資計劃、資金籌措計劃、土地拍賣多方案經濟分析、敏感性分析(風險性分析)等有關數據,並可撰寫可行性報告,爲房地產開發或固定資產投資企業(單位)的項目投資決策,項目實施過程中成本覈算、成本控制和項目竣工後的財務決算提供依據,是土地拍賣招投標報價的好助手。


  呵呵,軟件功能好像滿強大的,但是註冊算法的保護是不是很強大呢,

呵呵,軟件功能好像滿強大的,但是註冊算法的保護是不是很強大呢,

呵呵,軟件功能好像滿強大的,但是註冊算法的保護是不是很強大呢,

初步觀察:

破解工具:

PEID 0.93

Ollydbg 1.10(下面簡稱OD)

2個工具是每個喜歡破解的人必備的軟件啊

先用PEID看看有沒有加殼,現在的軟件加殼的真的是不少啊,查看情況如圖1所示

(1)

看到沒有殼,delphi編寫的,情況還比較好哦 ^_^

運行軟件看看如圖2所示

(2)

發現窗口上方有尚未註冊的提示,看起來真的不爽啊,決定把它給幹了

跟蹤過程:

試着註冊一下

機器碼: ACA9B-B9EEC-324A3-02A00

註冊碼:78787878

點註冊後就是註冊失敗(如果不是建議買彩票 ^_^ )如圖3所示

(3)

 剛纔看到有錯誤提示,那麼我的第一個想法就是找字符參考,用老羅大牛的插件(支持中文的哦)

Ultra String Reference,項目 2986

 Address=0061C6A7

 Disassembly=MOV EDX,EEV.0061C7D4

 Text String=註冊失敗,請再次註冊!

現在好了,下斷在

0061C508   . 55             PUSH EBP       //下斷處

0061C509   . 8BEC           MOV EBP,ESP

0061C50B   . 83C4 D4        ADD ESP,-2C

算法分析:

0061C592   . E8 3D56E6FF    CALL EEV.00481BD4                               ;  得到機器碼

0061C597   . 8B55 F4        MOV EDX,DWORD PTR SS:[EBP-C]                    ;  機器碼

省略代碼。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

0061C5E4   . E8 EB55E6FF    CALL EEV.00481BD4                               ;  得到假碼

0061C5E9   . 8B55 F0        MOV EDX,DWORD PTR SS:[EBP-10]                   ;  假碼

0061C5EC   . A1 D4D36C00    MOV EAX,DWORD PTR DS:[6CD3D4]

省略代碼。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

0061C618   . B8 A8C76100    MOV EAX,EEV.0061C7A8                            ;  ASCII "75EA2-2D12A-AA55A-FBCC7"

0061C61D   . E8 9E88DEFF    CALL EEV.00404EC0                               ;  要進去,因爲涉及到註冊

0061C622   . 85C0           TEST EAX,EAX                                    ;位測試

0061C624   . 74 0A          JE SHORT EEV.0061C630                           ;必須跳

0061C626   . E8 257DDEFF    CALL EEV.00404350

0061C62B   . E9 B3000000    JMP EEV.0061C6E3

0061C630   > 8D55 DC        LEA EDX,DWORD PTR SS:[EBP-24]                   ;  機器碼

0061C633   . A1 10D76C00    MOV EAX,DWORD PTR DS:[6CD710]

0061C638   . 8B00           MOV EAX,DWORD PTR DS:[EAX]

0061C63A   . E8 49B3F8FF    CALL EEV.005A7988                               ;  要跟進,對機器碼進行MD5運算

0061C63F   . 8D45 DC        LEA EAX,DWORD PTR SS:[EBP-24]

0061C642   . 8D55 EC        LEA EDX,DWORD PTR SS:[EBP-14]

0061C645   . E8 1A090000    CALL EEV.0061CF64                               ;  產生的註冊碼,好像可以做內存註冊機哦

0061C64A   . 8B45 EC        MOV EAX,DWORD PTR SS:[EBP-14]                   ;  MD5後的前8個字符連接,****-****這個樣子

0061C64D   . 8B15 D4D36C00  MOV EDX,DWORD PTR DS:[6CD3D4]                   ;  EEV.006CF42C

0061C653   . 8B12           MOV EDX,DWORD PTR DS:[EDX]                      ;  假碼

0061C655   . E8 6688DEFF    CALL EEV.00404EC0                               ;  重要CALL,要進去

0061C65A   . 85C0           TEST EAX,EAX                                    ;不能夠讓它返回EAX=0

0061C65C   . 7E 2E          JLE SHORT EEV.0061C68C                          ;  關鍵跳轉,跳就註冊失敗

0061C65E   . 6A 40          PUSH 40                                         ;註冊成功的提示

0061C660   . 8D55 D8        LEA EDX,DWORD PTR SS:[EBP-28]

0061C663   . A1 24D86C00    MOV EAX,DWORD PTR DS:[6CD824]

0061C68C   > 6A 10          PUSH 10                                         ;  註冊失敗的提示

0061C68E   . 8D55 D4        LEA EDX,DWORD PTR SS:[EBP-2C]

0061C691   . A1 24D86C00    MOV EAX,DWORD PTR DS:[6CD824]

0061C696   . 8B00           MOV EAX,DWORD PTR DS:[EAX]

0061C698   . E8 AB73E8FF    CALL EEV.004A3A48

省略代碼。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

比較的方式:

=============================== CALL EEV.00404EC0================================

00404EC0  /$ 85C0           TEST EAX,EAX                                    ;  是否爲空

00404EC2  |. 74 40          JE SHORT EEV.00404F04

00404EC4  |. 85D2           TEST EDX,EDX                                    ;  是否爲空

00404EC6  |. 74 31          JE SHORT EEV.00404EF9

00404EC8  |. 53             PUSH EBX

00404EC9  |. 56             PUSH ESI

00404ECA  |. 57             PUSH EDI

00404ECB  |. 89C6           MOV ESI,EAX

00404ECD  |. 89D7           MOV EDI,EDX

00404ECF  |. 8B4F FC        MOV ECX,DWORD PTR DS:[EDI-4]

00404ED2  |. 57             PUSH EDI

00404ED3  |. 8B56 FC        MOV EDX,DWORD PTR DS:[ESI-4]

00404ED6  |. 4A             DEC EDX

00404ED7  |. 78 1B          JS SHORT EEV.00404EF4

00404ED9  |. 8A06           MOV AL,BYTE PTR DS:[ESI]                        ;  取一個字節

00404EDB  |. 46             INC ESI

00404EDC  |. 29D1           SUB ECX,EDX                                     ;  假碼的長度減運算得到的字符的長度

00404EDE  |. 7E 14          JLE SHORT EEV.00404EF4                          ;  假碼長度不能小於8位

00404EE0  |> F2:AE          /REPNE SCAS BYTE PTR ES:[EDI]                   ;  串掃描

00404EE2  |. 75 10          |JNZ SHORT EEV.00404EF4

00404EE4  |. 89CB           |MOV EBX,ECX

00404EE6  |. 56             |PUSH ESI                                       ;  比較的參數

00404EE7  |. 57             |PUSH EDI                                       ;  比較的參數

00404EE8  |. 89D1           |MOV ECX,EDX                                    ;  比較的位數

00404EEA  |. F3:A6          |REPE CMPS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]  ;  串比較

00404EEC  |. 5F             |POP EDI

00404EED  |. 5E             |POP ESI

00404EEE  |. 74 0C          |JE SHORT EEV.00404EFC                          ;  串比較是否相等

這裏比較的方式是串比較,這裏就是看看註冊碼是不是75EA2-2D12A-AA55A-FBCC7爲這個,註冊失敗,後面最後一次比較註冊碼也用到這個CALL

MD5計算過程:

======================進CALL EEV.005A7988==========================================

005A79AD  |. E8 AEFEFFFF    CALL EEV.005A7860                               ;  MD5常數初始化

005A79B2  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]                    ;  機器碼

005A79B5  |. E8 C2D1E5FF    CALL EEV.00404B7C                               ;  是否爲空

005A79BA  |. 50             PUSH EAX

005A79BB  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]

005A79BE  |. E8 B9D3E5FF    CALL EEV.00404D7C

005A79C3  |. 8BD0           MOV EDX,EAX

005A79C5  |. 8D45 A4        LEA EAX,DWORD PTR SS:[EBP-5C]

005A79C8  |. 59             POP ECX

005A79C9  |. E8 C6FEFFFF    CALL EEV.005A7894                               ;  標準的MD5運算

005A79CE  |. 8BD3           MOV EDX,EBX

005A79D0  |. 8D45 A4        LEA EAX,DWORD PTR SS:[EBP-5C]

005A79D3  |. E8 3CFFFFFF    CALL EEV.005A7914

005A79D8  |. 33C0           XOR EAX,EAX

005A79DA  |. 5A             POP EDX

005A79DB  |. 59             POP ECX

005A79DC  |. 59             POP ECX

005A79DD  |. 64:8910        MOV DWORD PTR FS:[EAX],EDX

005A79E0  |. 68 F5795A00    PUSH EEV.005A79F5

005A79E5  |> 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]

005A79E8  |. E8 BFCEE5FF    CALL EEV.004048AC

005A79ED  /. C3             RETN

標準MD5的特徵:

==========================進CALL EEV.005A7860=====================================

005A7860  /$ C700 01234567  MOV DWORD PTR DS:[EAX],67452301                 ;  標準MD5的四個常數

005A7866  |. C740 04 89ABCD>MOV DWORD PTR DS:[EAX+4],EFCDAB89

005A786D  |. C740 08 FEDCBA>MOV DWORD PTR DS:[EAX+8],98BADCFE

005A7874  |. C740 0C 765432>MOV DWORD PTR DS:[EAX+C],10325476

005A787B  |. 33D2           XOR EDX,EDX

005A787D  |. 8950 10        MOV DWORD PTR DS:[EAX+10],EDX

005A7880  |. 33D2           XOR EDX,EDX

005A7882  |. 8950 14        MOV DWORD PTR DS:[EAX+14],EDX

005A7885  |. 83C0 18        ADD EAX,18

005A7888  |. BA 40000000    MOV EDX,40

005A788D  |. E8 DA06E6FF    CALL EEV.00407F6C

005A7892  /. C3             RETN

這段的功能就是把機器碼用MD5加密算法加密得到一個MD5值,結果爲16字節,機器碼: ACA9B-B9EEC-324A3-02A00

我這裏的機器碼MD5值是: d6d11c05c3b225b10d95ec54a4cd7f9c

轉化MD5:

=======================進CALL EEV.0061CF64=======================================

省略代碼。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

0061CF6D  |. 33C9           XOR ECX,ECX

0061CF6F  |. 894D D8        MOV DWORD PTR SS:[EBP-28],ECX                   ;  爲0

0061CF72  |. 894D E8        MOV DWORD PTR SS:[EBP-18],ECX

0061CF75  |. 894D DC        MOV DWORD PTR SS:[EBP-24],ECX

0061CF78  |. 894D FC        MOV DWORD PTR SS:[EBP-4],ECX

0061CF7B  |. 8BF0           MOV ESI,EAX

0061CF7D  |. 8D7D EC        LEA EDI,DWORD PTR SS:[EBP-14]

0061CF80  |. A5             MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]      ;  MD5產生的16個字節

0061CF81  |. A5             MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]      ;  MD5產生的16個字節

0061CF82  |. A5             MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]      ;  MD5產生的16個字節

0061CF83  |. A5             MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]      ;  MD5產生的16個字節

省略代碼。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

0061CF9E  |. E8 59AAF8FF    CALL EEV.005A79FC                               ;  MD5產生的16個字節

0061CFA3  |. 8B45 DC        MOV EAX,DWORD PTR SS:[EBP-24]                   ; |MD5值

0061CFA6  |. 8945 E0        MOV DWORD PTR SS:[EBP-20],EAX                   ; |

0061CFA9  |. C645 E4 0B     MOV BYTE PTR SS:[EBP-1C],0B                     ; |

0061CFAD  |. 8D55 E0        LEA EDX,DWORD PTR SS:[EBP-20]                   ; |

0061CFB0  |. 33C9           XOR ECX,ECX                                     ; |

0061CFB2  |. B8 5CD06100    MOV EAX,EEV.0061D05C                            ; |ASCII "%s"

0061CFB7  |. E8 6CDBDEFF    CALL EEV.0040AB28                               ; /轉化爲字符形式

0061CFBC  |. 8B45 E8        MOV EAX,DWORD PTR SS:[EBP-18]                   ;  轉化爲字符

0061CFBF  |. 8D55 FC        LEA EDX,DWORD PTR SS:[EBP-4]

0061CFC2  |. E8 39C3DEFF    CALL EEV.00409300                               ;  MD5轉化後的字符小寫轉化爲大寫,跟進

0061CFC7  |. 8BC6           MOV EAX,ESI

0061CFC9  |. E8 DE78DEFF    CALL EEV.004048AC

0061CFCE  |. 33DB           XOR EBX,EBX

0061CFD0  |> 85DB           /TEST EBX,EBX

0061CFD2  |. 75 15          |JNZ SHORT EEV.0061CFE9

0061CFD4  |. 56             |PUSH ESI

0061CFD5  |. 8BD3           |MOV EDX,EBX

0061CFD7  |. C1E2 02        |SHL EDX,2

0061CFDA  |. B9 04000000    |MOV ECX,4                                      ;  從首位開始,取4個

0061CFDF  |. 8B45 FC        |MOV EAX,DWORD PTR SS:[EBP-4]                   ;  轉化爲大寫的MD5字符

0061CFE2  |. E8 F57DDEFF    |CALL EEV.00404DDC

0061CFE7  |. EB 2C          |JMP SHORT EEV.0061D015

0061CFE9  |> FF36           |PUSH DWORD PTR DS:[ESI]                        ;  轉化爲大寫後的前4個字符

0061CFEB  |. 68 68D06100    |PUSH EEV.0061D068

0061CFF0  |. 8D45 D8        |LEA EAX,DWORD PTR SS:[EBP-28]

0061CFF3  |. 50             |PUSH EAX

0061CFF4  |. 8BD3           |MOV EDX,EBX                                    ;  EDX=1

0061CFF6  |. C1E2 02        |SHL EDX,2                                      ;  左移2位得到4

0061CFF9  |. B9 04000000    |MOV ECX,4                                      ;  再取四個,從第四位開始

0061CFFE  |. 8B45 FC        |MOV EAX,DWORD PTR SS:[EBP-4]                   ;  轉化爲大寫的MD5字符

0061D001  |. E8 D67DDEFF    |CALL EEV.00404DDC

0061D006  |. FF75 D8        |PUSH DWORD PTR SS:[EBP-28]                     ;  取的5-8位MD5字符

0061D009  |. 8BC6           |MOV EAX,ESI

0061D00B  |. BA 03000000    |MOV EDX,3

0061D010  |. E8 277CDEFF    |CALL EEV.00404C3C

0061D015  |> 43             |INC EBX                                        ;  用"-"連接字符

0061D016  |. 83FB 02        |CMP EBX,2

0061D019  |.^75 B5          /JNZ SHORT EEV.0061CFD0

0061D01B  |. 33C0           XOR EAX,EAX

0061D01D  |. 5A             POP EDX

0061D01E  |. 59             POP ECX

0061D01F  |. 59             POP ECX

0061D020  |. 64:8910        MOV DWORD PTR FS:[EAX],EDX

0061D023  |. 68 4DD06100    PUSH EEV.0061D04D

0061D028  |> 8D45 D8        LEA EAX,DWORD PTR SS:[EBP-28]

0061D02B  |. BA 02000000    MOV EDX,2

0061D030  |. E8 9B78DEFF    CALL EEV.004048D0

0061D035  |. 8D45 E8        LEA EAX,DWORD PTR SS:[EBP-18]

0061D038  |. E8 6F78DEFF    CALL EEV.004048AC

0061D03D  |. 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]

0061D040  |. E8 6778DEFF    CALL EEV.004048AC

字母轉化:

======================進CALL EEV.00409300===================================

00409329  |> 8B0424         /MOV EAX,DWORD PTR SS:[ESP]                     ;eax指向md5值

0040932C  |. 8A00           |MOV AL,BYTE PTR DS:[EAX]                       ;  依次取MD5值的一個字節

0040932E  |. 3C 61          |CMP AL,61                                      ;  大於97?

00409330  |. 72 06          |JB SHORT EEV.00409338                          ;  不小於就是小寫字母了

00409332  |. 3C 7A          |CMP AL,7A                                      ;  是否大於122?

00409334  |. 77 02          |JA SHORT EEV.00409338                          ;  大於就不是字母了

00409336  |. 2C 20          |SUB AL,20                                      ;  AL=AL-0X20,小寫轉化爲大寫

00409338  |> 8B5424 04      |MOV EDX,DWORD PTR SS:[ESP+4]

0040933C  |. 8802           |MOV BYTE PTR DS:[EDX],AL                       ;  保存

0040933E  |. FF0424         |INC DWORD PTR SS:[ESP]                         ;  指針下移

00409341  |. FF4424 04      |INC DWORD PTR SS:[ESP+4]

00409345  |. 4B             |DEC EBX                                        ;  計數器減1

00409346  |. 85DB           |TEST EBX,EBX                                   ;  位測試

00409348  |.^75 DF          /JNZ SHORT EEV.00409329                         ;  循環轉化

這段的C語言表示:

int a,b;

for(a=0;a<strlen(md5_ID);a++)

{

b=md5_ID([a];

  if(b>97 && b<122)

   b=b-32;

  md5_ID[a]=b

}

 

到這裏軟件的註冊算法已經很清楚了,什麼不清楚再看一次,

算法總結:

1;取得軟件的機器碼,用標準MD5加密一下得到一個值即爲MD5_SN,把MD5值轉化爲字符型,然後把小寫轉化爲大寫,結果爲SN

2;取SN(1-4),SN(5-8),就是取SN的前4位和SN的(5-8)位,用-連接,得到KEY,即註冊碼

算法就這樣,算法很失敗吧,MD5強大的作用好像沒發揮哦,^_^我的註冊信息:

機器碼: ACA9B-B9EEC-324A3-02A00

註冊碼: D6D1-11C0

這個軟件的加密方式是這樣的

If(md5(機器碼)=註冊碼)

 註冊成功

Else

 註冊失敗

這是使用MD5最失敗的方式;

註冊成功的截面如圖4所示:

(4)

註冊機也很簡單,代碼我就不弄上來,就一個MD5模塊,不然有騙稿費之嫌

我做的註冊機界面如圖(5):

(5)

聲明:筆者水平有限,如有錯誤請指出,請有能力的朋友支持國產軟件,本篇文章只交流技術,如果利用本文的相關技術去做違法的事本人概不負責.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章