一個軟體的MD5註冊演算法【原創】
【破文作者】 落魄浪子
【文章題目】 失敗的MD5演算法
【軟體名稱】 XXXX網路軟體V2.01
【下載地址】 http://mujweb.cz/www/netsoft/
----------------------------------------------------------------------------------------------
【加密方式】 MD5
【破解工具】 FLY大俠的OD1.1
【破解平臺】 XP SP2
----------------------------------------------------------------------------------------------
【軟體簡介】
這個軟體具有網路監控和實時檢測功能,可以實時監控網路流量資訊和連線資訊
【文章簡介】
軟體沒有殼,現在這種不加殼的軟體真是少,呵呵,我這樣的菜菜就喜歡沒殼的,不
過有殼也沒關係,呵呵。@!#@!##¥@
----------------------------------------------------------------------------------------------
【破解過程】
註冊碼不對時有出錯提示“序列號校驗失敗,請重新輸入序列號”,呵呵,有門,OD載入,查詢字串,找
到兩處下斷,向上找看看哪裡跳過來的然後下斷,載入後執行
004A6E99 . E8 46270000 call <jmp.&MFC42.#3097> OD中斷在這裡
004A6E9E . 8B4C24 08 mov ecx,dword ptr ss:[esp+8]
004A6EA2 . 8379 F8 17 cmp dword ptr ds:[ecx-8],17 比較註冊碼是否等於17即23位
004A6EA6 . 75 24 jnz short NetWatch.004A6ECC 不對則出錯
。。。。。。。。。。。。。。。。。。。。。。。。。
004A6EB6 . E8 BD260000 call <jmp.&MFC42.#3098>
004A6EBB . 8D4424 18 lea eax,dword ptr ss:[esp+18] 註冊碼入EAX
004A6EBF . 50 push eax
004A6EC0 . E8 2BEEFFFF call NetWatch.004A5CF0 註冊演算法CALL,進入
004A6EC5 . 83C4 04 add esp,4
004A6EC8 . 85C0 test eax,eax
004A6ECA . 75 1B jnz short NetWatch.004A6EE7 不跳則出錯
004A6ECC > 68 00100000 push 1000
004A6ED1 . 68 105B4D00 push NetWatch.004D5B10
004A6ED6 . 68 70B64D00 push NetWatch.004DB670
004A6EDB . 8BCE mov ecx,esi
004A6EDD . E8 00260000 call <jmp.&MFC42.#4224> 出錯資訊
004A5CF0 /$ 81EC 9C00000>sub esp,9C 進入後來到這裡
004A5CF6 |. 83C9 FF or ecx,FFFFFFFF
004A5CF9 |. 33C0 xor eax,eax
004A5CFB |. 56 push esi
004A5CFC |. 8BB424 A4000>mov esi,dword ptr ss:[esp+A4]
004A5D03 |. 57 push edi
004A5D04 |. 8BFE mov edi,esi
004A5D06 |. F2:AE repne scas byte ptr es:[edi]
004A5D08 |. F7D1 not ecx
004A5D0A |. 49 dec ecx
004A5D0B |. 83F9 17 cmp ecx,17
004A5D0E |. 0F85 9201000>jnz NetWatch.004A5EA6 再次比較註冊碼的位數,不對則出錯
004A5D14 |. 8A4E 05 mov cl,byte ptr ds:[esi+5]比較註冊碼第六位是否等於2D即“-”符號
004A5D17 |. B0 2D mov al,2D
004A5D19 |. 3AC8 cmp cl,al
004A5D1B |. 0F85 8501000>jnz NetWatch.004A5EA6 不對則出錯
004A5D21 |. 3846 0B cmp byte ptr ds:[esi+B],al 比較註冊碼第12位是否等於2D即“-”符號
004A5D24 |. 0F85 7C01000>jnz NetWatch.004A5EA6 不對則出錯
004A5D2A |. 3846 11 cmp byte ptr ds:[esi+11],al 比較註冊碼第18位是否等於2D即“-”符號
004A5D2D |. 0F85 7301000>jnz NetWatch.004A5EA6 不對則出錯
004A5D33 |. B9 08000000 mov ecx,8
004A5D38 |. 33C0 xor eax,eax
004A5D3A |. 8D7C24 2C lea edi,dword ptr ss:[esp+2C]
004A5D3E |. 6A 05 push 5 ; /maxlen = 5
004A5D40 |. F3:AB rep stos dword ptr es:[edi] ; |
004A5D42 |. 8D4424 30 lea eax,dword ptr ss:[esp+30] ; |
004A5D46 |. 56 push esi ; |src
004A5D47 |. 50 push eax ; |dest
004A5D48 |. FF15 B85C4B0>call dword ptr ds:[<&MSVCRT.strncpy>] ; \strncpy
004A5D4E |. 8B3D 385C4B0>mov edi,dword ptr ds:[<&MSVCRT.strnca>; msvcrt.strncat
004A5D54 |. 8D4E 06 lea ecx,dword ptr ds:[esi+6]
004A5D57 |. 6A 05 push 5 ; /maxlen = 5
004A5D59 |. 8D5424 3C lea edx,dword ptr ss:[esp+3C] ; |
004A5D5D |. 51 push ecx ; |src
004A5D5E |. 52 push edx ; |dest
004A5D5F |. FFD7 call edi ; \strncat
004A5D61 |. 8D46 0C lea eax,dword ptr ds:[esi+C]
004A5D64 |. 6A 05 push 5
004A5D66 |. 8D4C24 48 lea ecx,dword ptr ss:[esp+48]
004A5D6A |. 50 push eax
004A5D6B |. 51 push ecx
004A5D6C |. FFD7 call edi
004A5D6E |. 83C6 12 add esi,12
004A5D71 |. 6A 05 push 5
004A5D73 |. 8D5424 54 lea edx,dword ptr ss:[esp+54]
004A5D77 |. 56 push esi
004A5D78 |. 52 push edx
004A5D79 |. FFD7 call edi 以上是把註冊碼的“-”符號去掉後連起來
004A5D7B |. 83C4 30 add esp,30
004A5D7E |. 33C0 xor eax,eax
004A5D80 |> 8A4C04 2C /mov cl,byte ptr ss:[esp+eax+2C]
004A5D84 |. 80F9 41 |cmp cl,41
004A5D87 |. 0F8C 1901000>|jl NetWatch.004A5EA6
004A5D8D |. 80F9 5A |cmp cl,5A
004A5D90 |. 0F8F 1001000>|jg NetWatch.004A5EA6
004A5D96 |. 40 |inc eax
004A5D97 |. 83F8 14 |cmp eax,14
004A5D9A |.^ 7C E4 \jl short NetWatch.004A5D80 查詢字串是否是A~Z的字母,否則出錯
004A5D9C |. 8A4424 2C mov al,byte ptr ss:[esp+2C] 第一位註冊碼入AL 記為N1
004A5DA0 |. 2C 48 sub al,48
004A5DA2 |. 3C 01 cmp al,1
004A5DA4 |. 0F85 FC00000>jnz NetWatch.004A5EA6 比較第一位註冊碼減48是否等於1,不等則出錯
004A5DAA |. 66:0FBE4424 >movsx ax,byte ptr ss:[esp+2D]第2位註冊碼入AX 記為N2
004A5DB0 |. 66:0FBE5424 >movsx dx,byte ptr ss:[esp+2E]第3位註冊碼入DX 記為N3
004A5DB6 |. 8D0C80 lea ecx,dword ptr ds:[eax+eax*4] N2+N2*4 結果記為R1
004A5DB9 |. 8D844A 92FCF>lea eax,dword ptr ds:[edx+ecx*2-36E]
004A5DC0 |. 66:3D 0200 cmp ax,2
004A5DC4 |. 0F85 DC00000>jnz NetWatch.004A5EA6 比較 N3+R1*2-36E=2 不等於2則出錯
004A5DCA |. 8D4C24 4C lea ecx,dword ptr ss:[esp+4C]
004A5DCE |. 51 push ecx
004A5DCF |. E8 7C29FCFF call NetWatch.00468750 進入
00468750 /$ 8B4424 04 mov eax,dword ptr ss:[esp+4] 進入後來到這裡
00468754 |. 33C9 xor ecx,ecx
00468756 |. 8948 14 mov dword ptr ds:[eax+14],ecx
00468759 |. 8948 10 mov dword ptr ds:[eax+10],ecx
0046875C |. C700 0123456>mov dword ptr ds:[eax],67452301
00468762 |. C740 04 89AB>mov dword ptr ds:[eax+4],EFCDAB89
00468769 |. C740 08 FEDC>mov dword ptr ds:[eax+8],98BADCFE
00468770 |. C740 0C 7654>mov dword ptr ds:[eax+C],10325476 呵呵,這不會是MD5的四個變數吧???
00468777 \. C3 retn 返回
004A5DD4 |. 8D5424 30 lea edx,dword ptr ss:[esp+30] 返回到這裡,註冊碼放入EDX
004A5DD8 |. 6A 0C push 0C
004A5DDA |. 8D4424 54 lea eax,dword ptr ss:[esp+54]
004A5DDE |. 52 push edx
004A5DDF |. 50 push eax
004A5DE0 |. E8 9B29FCFF call NetWatch.00468780
004A5DE5 |. 6A 26 push 26
004A5DE7 |. 8D4C24 60 lea ecx,dword ptr ss:[esp+60]
004A5DEB |. 68 F8B44D00 push NetWatch.004DB4F8
004A5DF0 |. 51 push ecx
004A5DF1 |. E8 8A29FCFF call NetWatch.00468780
004A5DF6 |. 8D5424 68 lea edx,dword ptr ss:[esp+68] 四個變數
004A5DFA |. 8D4424 28 lea eax,dword ptr ss:[esp+28]
004A5DFE |. 52 push edx
004A5DFF |. 50 push eax
004A5E00 |. E8 2B2AFCFF call NetWatch.00468830 進入看看
00468830 /$ 83EC 08 sub esp,8 進入後來到這裡
00468833 |. 8D4424 00 lea eax,dword ptr ss:[esp]
00468837 |. 56 push esi
00468838 |. 57 push edi
。。。。。。。。。。。。。。。。。。。略過程式碼
00468871 |. 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
00468875 |. 6A 08 push 8
00468877 |. 51 push ecx
00468878 |. 57 push edi
00468879 |. E8 02FFFFFF call NetWatch.00468780 進入看看
00468780 /$ 53 push ebx 進入後來到這裡
00468781 |. 55 push ebp
00468782 |. 56 push esi
00468783 |. 8B7424 10 mov esi,dword ptr ss:[esp+10]
。。。。。。。。。。。。。。。。。。。略過程式碼
004687D3 |. 8D4E 18 lea ecx,dword ptr ds:[esi+18] 註冊碼放入ECX
004687D6 |. 51 push ecx
004687D7 |. 56 push esi
004687D8 |. E8 C3000000 call NetWatch.004688A0 進入看看
004688A0 /$ 83EC 40 sub esp,40 進入後來到這裡
004688A3 |. 8B4C24 48 mov ecx,dword ptr ss:[esp+48]
004688A7 |. 53 push ebx
004688A8 |. 55 push ebp
004688A9 |. 56 push esi
004688AA |. 8B7424 50 mov esi,dword ptr ss:[esp+50]
004688AE |. 57 push edi
004688AF |. 6A 40 push 40
004688B1 |. 8D5424 14 lea edx,dword ptr ss:[esp+14]
004688B5 |. 8B06 mov eax,dword ptr ds:[esi]
004688B7 |. 8B7E 04 mov edi,dword ptr ds:[esi+4]
004688BA |. 8B5E 08 mov ebx,dword ptr ds:[esi+8]
004688BD |. 8B6E 0C mov ebp,dword ptr ds:[esi+C] 四個變數
004688C0 |. 51 push ecx
004688C1 |. 52 push edx
004688C2 |. 894424 60 mov dword ptr ss:[esp+60],eax
004688C6 |. E8 75090000 call NetWatch.00469240
*********************************************************************************
004688CB |. 8BC7 mov eax,edi MD5計算開紿
004688CD |. 8B5424 60 mov edx,dword ptr ss:[esp+60]
004688D1 |. F7D0 not eax
004688D3 |. 8BCB mov ecx,ebx
004688D5 |. 23C5 and eax,ebp
004688D7 |. 23CF and ecx,edi
004688D9 |. 0BC1 or eax,ecx
004688DB |. 8B4C24 1C mov ecx,dword ptr ss:[esp+1C] 第一輪
004688DF |. 03C1 add eax,ecx
004688E1 |. 8D8C02 78A46>lea ecx,dword ptr ds:[edx+eax+D76AA478]
。。。。。。。。。。。。。。略過程式碼 。。。。。。。。。。。。。。。。。
00468BC6 |. 0BFB or edi,ebx
00468BC8 |. 8B5C24 1C mov ebx,dword ptr ss:[esp+1C] 第二輪
00468BCC |. 03FB add edi,ebx
00468BCE |. 8B5C24 60 mov ebx,dword ptr ss:[esp+60]
00468BD2 |. 8D9C3B AAC7B>lea ebx,dword ptr ds:[ebx+edi+E9B6C7AA]
。。。。。。。。。。。。。。略過程式碼 。。。。。。。。。。。。。。。。。。。
00468ED7 |. 33F9 xor edi,ecx
00468ED9 |. 03FD add edi,ebp
00468EDB |. 8B6C24 1C mov ebp,dword ptr ss:[esp+1C] 第三輪
00468EDF |. 8DBC38 C67E9>lea edi,dword ptr ds:[eax+edi+289B7EC6]
。。。。。。。。。。。。。。略過程式碼 。。。。。。。。。。。。。。。。。。。
00468FC1 |. 0BCB or ecx,ebx
00468FC3 |. 33CF xor ecx,edi
00468FC5 |. 034C24 1C add ecx,dword ptr ss:[esp+1C] 第四輪
00468FC9 |. 8D8408 44222>lea eax,dword ptr ds:[eax+ecx+F4292244]
。。。。。。。。。。。。。。略過程式碼 。。。。。。。。。。。。。。。。。。。
004691C0 |. 03DF add ebx,edi
004691C2 |. 8946 04 mov dword ptr ds:[esi+4],eax *A
004691C5 |. 8D4424 24 lea eax,dword ptr ss:[esp+24]
004691C9 |. 50 push eax
004691CA |. 890E mov dword ptr ds:[esi],ecx *B
004691CC |. 896E 08 mov dword ptr ds:[esi+8],ebp *C
004691CF |. 895E 0C mov dword ptr ds:[esi+C],ebx *D
004691D2 |. E8 D9000000 call NetWatch.004692B0
004691D7 |. 83C4 18 add esp,18
004691DA |. 5F pop edi
004691DB |. 5E pop esi
004691DC |. 5D pop ebp
004691DD |. 5B pop ebx
004691DE |. 83C4 40 add esp,40
004691E1 \. C3 retn 返回
以上程式碼是把註冊碼的前12位和本軟體的名字+991235進行MD5運算 ,
結果記為十六制:AA,BB,CC,DD,EE,FF,GG,HH,JJ,KK,MM,NN,RR,UU,TT,PP
004A5E05 |. 83C4 24 add esp,24 經過幾個CALL返回之後來到這裡
004A5E08 |. 33C0 xor eax,eax
004A5E0A |> 8A4C04 0C /mov cl,byte ptr ss:[esp+eax+C]
004A5E0E |. 80F1 25 |xor cl,25
004A5E11 |. 884C04 0C |mov byte ptr ss:[esp+eax+C],cl
004A5E15 |. 40 |inc eax
004A5E16 |. 83F8 10 |cmp eax,10
004A5E19 |.^ 7C EF \jl short NetWatch.004A5E0A 取AA~PP與25做異或 連起來記為N4
004A5E1B |. 33C0 xor eax,eax
004A5E1D |> 8A4C04 14 /mov cl,byte ptr ss:[esp+eax+14]
004A5E21 |. 8A5404 0C |mov dl,byte ptr ss:[esp+eax+C]
004A5E25 |. 32CA |xor cl,dl
004A5E27 |. 884C04 08 |mov byte ptr ss:[esp+eax+8],cl
004A5E2B |. 40 |inc eax
004A5E2C |. 83F8 08 |cmp eax,8
004A5E2F |.^ 7C EC \jl short NetWatch.004A5E1D N4分成2組分別進行異或運算,結果記為N5,N5和N4的後3
組連起來記為N6
004A5E31 |. 53 push ebx
004A5E32 |. B9 64000000 mov ecx,64
004A5E37 |> 33C0 /xor eax,eax
004A5E39 |> 8A5404 10 |/mov dl,byte ptr ss:[esp+eax+10]
004A5E3D |. 8A5C04 0C ||mov bl,byte ptr ss:[esp+eax+C]
004A5E41 |. 32DA ||xor bl,dl
004A5E43 |. 885C04 0C ||mov byte ptr ss:[esp+eax+C],bl
004A5E47 |. 40 ||inc eax
004A5E48 |. 83F8 08 ||cmp eax,8
004A5E4B |.^ 7C EC |\jl short NetWatch.004A5E39 N6分成5組,每組8位,取第二組分別與第一組和第三組做
異或運算,結果記為N7,N7和N6的後3組連起來記為N8 這樣運算共進行64次 記為N9
004A5E4D |. 49 |dec ecx
004A5E4E |.^ 75 E7 \jnz short NetWatch.004A5E37
004A5E50 |. 33C9 xor ecx,ecx
004A5E52 |. 8D7424 11 lea esi,dword ptr ss:[esp+11] 註冊碼的最後五位入ESI
004A5E56 |> 8A440C 0C /mov al,byte ptr ss:[esp+ecx+C]
004A5E5A |. 83C6 02 |add esi,2
004A5E5D |. 8AD0 |mov dl,al
004A5E5F |. 24 0F |and al,0F
004A5E61 |. C0EA 04 |shr dl,4
004A5E64 |. 8856 FD |mov byte ptr ds:[esi-3],dl
004A5E67 |. 8846 FE |mov byte ptr ds:[esi-2],al
004A5E6A |. 41 |inc ecx
004A5E6B |. 83F9 08 |cmp ecx,8
004A5E6E |.^ 7C E6 \jl short NetWatch.004A5E56
N9分成5組,取第一組的每兩位與0F做與運算和右移4次,結果依次連起來分別替換第二組和第三組記為NN1
NN1分成5組,取第二組的每兩位與0F做與運算和右移4次,結果依次連起來分別替換NN1的第四組和第五組記為NN2
004A5E70 |. 33C0 xor eax,eax
004A5E72 |> 8A5C04 10 /mov bl,byte ptr ss:[esp+eax+10]
004A5E76 |. 80C3 44 |add bl,44
004A5E79 |. 885C04 10 |mov byte ptr ss:[esp+eax+10],bl
004A5E7D |. 40 |inc eax
004A5E7E |. 83F8 08 |cmp eax,8
004A5E81 |.^ 7C EF \jl short NetWatch.004A5E72
NN2分成5組,取第二組和第三組的每兩位與44相加,結果依次替換第二組和第三組記為NN3
004A5E83 |. B9 02000000 mov ecx,2
004A5E88 |. 8D7C24 3C lea edi,dword ptr ss:[esp+3C] 輸入的註冊碼的最後8位
004A5E8C |. 8D7424 10 lea esi,dword ptr ss:[esp+10] 上面計算的結果NN3
004A5E90 |. 33C0 xor eax,eax
004A5E92 |. C64424 18 00 mov byte ptr ss:[esp+18],0
004A5E97 |. 5B pop ebx
004A5E98 |. F3:A7 repe cmps dword ptr es:[edi],dword ptr ds:[es> 暈,最後竟然進行明碼比較
004A5E9A |. 5F pop edi
004A5E9B |. 5E pop esi
004A5E9C |. 0F94C0 sete al 置註冊標置位,正確註冊AL為1
004A5E9F |. 81C4 9C00000>add esp,9C
004A5EA5 |. C3 retn 返回
004A6EC5 . 83C4 04 add esp,4 來到這裡
004A6EC8 . 85C0 test eax,eax
004A6ECA . 75 1B jnz short NetWatch.004A6EE7 不對則出錯
004A6ECC > 68 00100000 push 1000
004A6ED1 . 68 105B4D00 push NetWatch.004D5B10
004A6ED6 . 68 70B64D00 push NetWatch.004DB670
004A6EDB . 8BCE mov ecx,esi
004A6EDD . E8 00260000 call <jmp.&MFC42.#4224> 出錯
到這裡已經全部完成,呵呵,本人文字表達能力差,寫的很亂也很臭,以上分組只是我為了好表達
才這樣,希望各位能看的明白,不能我就白忙了。。。。。
----------------------------------------------------------------------------------------------
【破解心得】
第一位註冊碼減48等於1 ,第3位註冊碼+(第2位註冊碼+第2位註冊碼*4)*2-36E等於2,
註冊碼的前12位和本軟體的名字+991235進行MD5運算後的結果再進行一些運算得到最後8位註冊碼。
這個軟體的加密實在是。。。唉,還用什麼MD5嘛,最後還進行明碼比較,寫序號產生器也非常
容易,網上MD5演算法庫到處都有。
----------------------------------------------------------------------------------------------
【破解宣告】 我是一隻小菜鳥,偶得一點心得,願與大家分享:)
【版權宣告】 本文純屬技術交流, 轉載請註明作者並保持文章的完整, 謝謝!
----------------------------------------------------------------------------------------------
文章寫於2005-12-29 10:09:04
相關文章
- 【原創】一個彩票軟體演算法分析過程(詳細)2015-11-15演算法
- 【原創】 一個會計軟體的演算法分析過程(詳細)2015-11-15演算法
- [原創]Focus
Magic V3.01 註冊演算法分析2015-11-15演算法
- 【原創】Oracle的動態監聽註冊2008-04-14Oracle
- 【原創】星空視訊俱樂部 V1.75註冊演算法簡析2015-11-15演算法
- C#實現無法破解的軟體註冊碼演算法2013-02-22C#演算法
- 檢測文章原創度的軟體哪個好用?2020-06-16
- 給自己的軟體製作註冊碼2020-11-14
- [原創]軟體實施專案記(一)2008-06-03
- 註冊多個賬號需要使用代理IP軟體技巧!2020-06-05
- .NET Core中介軟體的註冊和管道的構建(2)---- 用UseMiddleware擴充套件方法註冊中介軟體類2016-08-08套件
- .NET Core中介軟體的註冊和管道的構建(1)---- 註冊和構建原理2016-08-04
- Crescendo Masters for mac(音樂創作軟體) v5.66註冊啟用版2020-12-25ASTMac
- IP檢視器V6.1版的演算法淺析(原創)--MD5演算法2015-11-15演算法
- 某一login.zip軟體註冊 (12千字)2015-11-15
- 序列號查詢工具KCNScrew解決多個軟體的註冊問題2022-05-17
- 左邊那個是什麼軟體 還需要註冊才可以2020-11-28
- CRM中介軟體裡CRM local changes的註冊管理2020-02-05
- Oracle 叢集軟體資源的手工註冊(zt)2019-06-25Oracle
- 第七章-尋找軟體的註冊碼2015-11-15
- 一個區域網工具的註冊演算法分析
(5千字)2015-11-15演算法
- 原創度檢測工具哪個好?文章原創度檢測軟體是這樣提高原創度的2020-06-12
- LanSee 註冊演算法2015-11-15演算法
- ffmpeg分析系列之一(註冊該註冊的)2010-11-04
- [原創]站長自助平臺-一個幫助站長全自動實現一鍵採集、發貼(偽原創)、會員註冊、交換連線的平臺...2011-04-10
- 共享軟體中註冊部分的簡單實現(轉)2007-08-15
- ORACLE 動態註冊,靜態註冊,多個監聽,一個監聽多個埠配置2015-02-28Oracle
- [原創]淺談勝新系列軟體的破解2004-12-28
- C#基於RSA加密演算法實現軟體註冊實戰演練2019-01-12C#加密演算法
- 計算機軟體水平考試測試系統3.0註冊演算法分析2015-11-15計算機演算法
- 財智老闆通3.04註冊版---註冊演算法分析2003-03-16演算法
- Instant Source 註冊演算法分析+註冊器原始碼2015-11-15演算法原始碼
- supercleaner註冊演算法分析2015-11-15演算法
- 加密保護軟體 WinLicense 註冊常見問題(一):許可證2019-03-26加密
- 菜鳥破解之軟體自己顯示註冊碼2015-11-15
- XPSecurity2005c註冊演算法分析---標準DES+變形MD52015-11-15演算法
- 【標題:Tag&Rename 1.7 文章二 :此軟體的註冊碼演算法。(
進來看看 8^) )】2000-11-14演算法
- 小弟為共享軟體作者製作的管理軟體註冊的動態連結庫 (轉)2007-12-05