CryptCD 3演算法分析
CryptCD 3是一款能夠加密檔案的工具,其實不用我解釋大家看檔名就知道該
檔案的用途了!你可以到http://www.timesavesoftware.com下載,當然如果你感
興趣的話.
下面來看看這個軟體的註冊的分析過程(我們到達下面的關鍵地方):
0040873B . 8D5424 48 LEA EDX,DWORD PTR SS:[ESP+48]
0040873F . 52 PUSH EDX
00408740 . E8 7B5B0000 CALL CRYPTCD3.0040E2C0 ;關鍵
00408745 . 83C4 04 ADD ESP,4
00408748 . 85C0 TEST EAX,EAX
0040874A . 5F POP EDI
0040874B . 75 27 JNZ SHORT CRYPTCD3.00408774
0040874D . 68 60794200 PUSH CRYPTCD3.00427960 ; ASCII "That registration code is invalid. Please make sure the CAPS Lock key is not on."
00408752 . 68 44794200 PUSH CRYPTCD3.00427944 ; ASCII "INVALID REGISTRATION CODE!"
00408757 . E8 04ACFFFF CALL CRYPTCD3.00403360
進入408740的Call:
0040E2C0 /$ 81EC 34040000 SUB ESP,434
0040E2C6 |. 53 PUSH EBX
0040E2C7 |. 55 PUSH EBP
0040E2C8 |. 8BAC24 4004000>MOV EBP,DWORD PTR SS:[ESP+440]
0040E2CF |. 56 PUSH ESI
0040E2D0 |. 85ED TEST EBP,EBP
0040E2D2 |. 57 PUSH EDI
0040E2D3 |. 75 0F JNZ SHORT CRYPTCD3.0040E2E4
0040E2D5 |. 68 48874200 PUSH CRYPTCD3.00428748 ; ASCII "No code entered. (654a)"
0040E2DA |. 68 38874200 PUSH CRYPTCD3.00428738 ; ASCII "Error: (654a)"
0040E2DF |. E9 07020000 JMP CRYPTCD3.0040E4EB
0040E2E4 |> 8BFD MOV EDI,EBP
0040E2E6 |. 83C9 FF OR ECX,FFFFFFFF
0040E2E9 |. 33C0 XOR EAX,EAX
0040E2EB |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0040E2ED |. F7D1 NOT ECX
0040E2EF |. 49 DEC ECX
0040E2F0 |. 83F9 0E CMP ECX,0E ;比較註冊碼是否是14個
0040E2F3 |. 73 0F JNB SHORT CRYPTCD3.0040E304
0040E2F5 |. 68 28874200 PUSH CRYPTCD3.00428728 ; ASCII "Invalid. (654b)"
0040E2FA |. 68 18874200 PUSH CRYPTCD3.00428718 ; ASCII "Error: (654b)"
0040E2FF |. E9 E7010000 JMP CRYPTCD3.0040E4EB
0040E304 |> B9 00010000 MOV ECX,100
0040E309 |. 33C0 XOR EAX,EAX
0040E30B |. 8D7C24 44 LEA EDI,DWORD PTR SS:[ESP+44]
0040E30F |. 6A 04 PUSH 4
0040E311 |. F3:AB REP STOS DWORD PTR ES:[EDI]
0040E313 |. 8D4424 48 LEA EAX,DWORD PTR SS:[ESP+48]
0040E317 |. 55 PUSH EBP
0040E318 |. 50 PUSH EAX
0040E319 |. E8 92C40000 CALL CRYPTCD3.0041A7B0 ;取註冊碼的前4位
0040E31E |. 83C4 0C ADD ESP,0C
0040E321 |. BE 10874200 MOV ESI,CRYPTCD3.00428710 ; ASCII "TCX3"
0040E326 |. 8D4424 44 LEA EAX,DWORD PTR SS:[ESP+44] ; 前4位的值的地址
0040E32A |> 8A10 /MOV DL,BYTE PTR DS:[EAX]
0040E32C |. 8A1E |MOV BL,BYTE PTR DS:[ESI]
0040E32E |. 8ACA |MOV CL,DL
0040E330 |. 3AD3 |CMP DL,BL
0040E332 |. 75 1E |JNZ SHORT CRYPTCD3.0040E352
0040E334 |. 84C9 |TEST CL,CL
0040E336 |. 74 16 |JE SHORT CRYPTCD3.0040E34E
0040E338 |. 8A50 01 |MOV DL,BYTE PTR DS:[EAX+1]
0040E33B |. 8A5E 01 |MOV BL,BYTE PTR DS:[ESI+1]
0040E33E |. 8ACA |MOV CL,DL
0040E340 |. 3AD3 |CMP DL,BL
0040E342 |. 75 0E |JNZ SHORT CRYPTCD3.0040E352
0040E344 |. 83C0 02 |ADD EAX,2
0040E347 |. 83C6 02 |ADD ESI,2
0040E34A |. 84C9 |TEST CL,CL
0040E34C |.^75 DC JNZ SHORT CRYPTCD3.0040E32A ;以上的是前4位和"TCX3"進行比較
0040E34E |> 33C0 XOR EAX,EAX
0040E350 |. EB 05 JMP SHORT CRYPTCD3.0040E357
0040E352 |> 1BC0 SBB EAX,EAX
0040E354 |. 83D8 FF SBB EAX,-1
0040E357 |> 85C0 TEST EAX,EAX
0040E359 |. 74 0F JE SHORT CRYPTCD3.0040E36A
0040E35B |. 68 FC864200 PUSH CRYPTCD3.004286FC ; ASCII "Invalid. (654c)"
0040E360 |. 68 EC864200 PUSH CRYPTCD3.004286EC ;ASCII "Error: (654c)"
0040E365 |. E9 81010000 JMP CRYPTCD3.0040E4EB
0040E36A |> 6A 2D PUSH 2D ;壓入'-'號
0040E36C |. 55 PUSH EBP
0040E36D |. E8 7EB70000 CALL CRYPTCD3.00419AF0 ;搜尋是否有'-'號
0040E372 |. 83C4 08 ADD ESP,8
0040E375 |. 85C0 TEST EAX,EAX
0040E377 |. 75 0F JNZ SHORT CRYPTCD3.0040E388
0040E379 |. 68 D8864200 PUSH CRYPTCD3.004286D8 ; ASCII "Invalid. (654d)"
0040E37E |. 68 C8864200 PUSH CRYPTCD3.004286C8 ; ASCII "Error: (654d)"
0040E383 |. E9 63010000 JMP CRYPTCD3.0040E4EB
0040E388 |> 8D7D 05 LEA EDI,DWORD PTR SS:[EBP+5] ;取後9位數
0040E38B |. 83C9 FF OR ECX,FFFFFFFF
0040E38E |. 33C0 XOR EAX,EAX
0040E390 |. 8D5424 44 LEA EDX,DWORD PTR SS:[ESP+44]
0040E394 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0040E396 |. F7D1 NOT ECX
0040E398 |. 2BF9 SUB EDI,ECX
0040E39A |. 8BC1 MOV EAX,ECX
0040E39C |. 8BF7 MOV ESI,EDI
0040E39E |. 8BFA MOV EDI,EDX
0040E3A0 |. 8D5424 10 LEA EDX,DWORD PTR SS:[ESP+10]
0040E3A4 |. C1E9 02 SHR ECX,2
0040E3A7 |. F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
0040E3A9 |. 8BC8 MOV ECX,EAX
0040E3AB |. 33C0 XOR EAX,EAX
0040E3AD |. 83E1 03 AND ECX,3
0040E3B0 |. F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
0040E3B2 |. 8BFD MOV EDI,EBP
0040E3B4 |. 83C9 FF OR ECX,FFFFFFFF
0040E3B7 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0040E3B9 |. F7D1 NOT ECX
0040E3BB |. 49 DEC ECX
0040E3BC |. 8D7C29 FC LEA EDI,DWORD PTR DS:[ECX+EBP-4] ;後4位地址給EDI
0040E3C0 |. 83C9 FF OR ECX,FFFFFFFF
0040E3C3 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0040E3C5 |. F7D1 NOT ECX
0040E3C7 |. 2BF9 SUB EDI,ECX
0040E3C9 |. 8BC1 MOV EAX,ECX
0040E3CB |. 8BF7 MOV ESI,EDI
0040E3CD |. 8BFA MOV EDI,EDX
0040E3CF |. C1E9 02 SHR ECX,2
0040E3D2 |. F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
0040E3D4 |. 8BC8 MOV ECX,EAX
0040E3D6 |. 33C0 XOR EAX,EAX
0040E3D8 |. 83E1 03 AND ECX,3
0040E3DB |. F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
0040E3DD |. 8D7424 44 LEA ESI,DWORD PTR SS:[ESP+44]
0040E3E1 |. 8D7C24 44 LEA EDI,DWORD PTR SS:[ESP+44]
0040E3E5 |. 83C9 FF OR ECX,FFFFFFFF
0040E3E8 |. 83EE 04 SUB ESI,4
0040E3EB |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0040E3ED |. F7D1 NOT ECX
0040E3EF |. 49 DEC ECX
0040E3F0 |. 880431 MOV BYTE PTR DS:[ECX+ESI],AL
0040E3F3 |. 8A4C24 10 MOV CL,BYTE PTR SS:[ESP+10]
0040E3F7 |. 84C9 TEST CL,CL
0040E3F9 |. 8D4424 10 LEA EAX,DWORD PTR SS:[ESP+10] ;後4位給EAX
0040E3FD |. 74 10 JE SHORT CRYPTCD3.0040E40F
0040E3FF |> 8038 2B /CMP BYTE PTR DS:[EAX],2B
0040E402 |. 75 03 |JNZ SHORT CRYPTCD3.0040E407
0040E404 |. C600 20 |MOV BYTE PTR DS:[EAX],20
0040E407 |> 8A48 01 |MOV CL,BYTE PTR DS:[EAX+1]
0040E40A |. 40 |INC EAX
0040E40B |. 84C9 |TEST CL,CL
0040E40D |.^75 F0 JNZ SHORT CRYPTCD3.0040E3FF ;判斷後4位是否是合法字元
0040E40F |> 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
0040E413 |. 51 PUSH ECX
0040E414 |. E8 E7000000 CALL CRYPTCD3.0040E500 ;關鍵Call=====>所以我們跟進
0040E419 |. 8D7C24 48 LEA EDI,DWORD PTR SS:[ESP+48]
0040E41D |. 83C9 FF OR ECX,FFFFFFFF
0040E420 |. 33C0 XOR EAX,EAX
0040E422 |. 83C4 04 ADD ESP,4
0040E425 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0040E427 |. F7D1 NOT ECX
0040E429 |. 49 DEC ECX
0040E42A |. 8D6C24 10 LEA EBP,DWORD PTR SS:[ESP+10] ;上面的Call運算後的結果
0040E42E |. 03CE ADD ECX,ESI
0040E430 |> 8A11 /MOV DL,BYTE PTR DS:[ECX]
0040E432 |. 8A5D 00 |MOV BL,BYTE PTR SS:[EBP]
0040E435 |. 8AC2 |MOV AL,DL
0040E437 |. 3AD3 |CMP DL,BL
0040E439 |. 75 1E |JNZ SHORT CRYPTCD3.0040E459
0040E43B |. 84C0 |TEST AL,AL
0040E43D |. 74 16 |JE SHORT CRYPTCD3.0040E455
0040E43F |. 8A51 01 |MOV DL,BYTE PTR DS:[ECX+1]
0040E442 |. 8A5D 01 |MOV BL,BYTE PTR SS:[EBP+1]
0040E445 |. 8AC2 |MOV AL,DL
0040E447 |. 3AD3 |CMP DL,BL
0040E449 |. 75 0E |JNZ SHORT CRYPTCD3.0040E459
0040E44B |. 83C1 02 |ADD ECX,2
0040E44E |. 83C5 02 |ADD EBP,2
0040E451 |. 84C0 |TEST AL,AL
0040E453 |.^75 DB JNZ SHORT CRYPTCD3.0040E430 ;與2345位進行比較
進入40E414的Call:
0040E500 /$ 53 PUSH EBX
0040E501 |. 8B5C24 08 MOV EBX,DWORD PTR SS:[ESP+8]
0040E505 |. 56 PUSH ESI
0040E506 |. 33F6 XOR ESI,ESI
0040E508 |. 85DB TEST EBX,EBX
0040E50A |. 57 PUSH EDI
0040E50B |. 75 12 JNZ SHORT CRYPTCD3.0040E51F
0040E50D |. 68 68874200 PUSH CRYPTCD3.00428768 ; ASCII "*Data == NULL! in UnEncText!"
0040E512 |. 68 60874200 PUSH CRYPTCD3.00428760 ; ASCII "ERROR!"
0040E517 |. E8 444EFFFF CALL CRYPTCD3.00403360
0040E51C |. 83C4 08 ADD ESP,8
0040E51F |> 8BFB MOV EDI,EBX
0040E521 |. 83C9 FF OR ECX,FFFFFFFF
0040E524 |. 33C0 XOR EAX,EAX
0040E526 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0040E528 |. F7D1 NOT ECX
0040E52A |. 49 DEC ECX
0040E52B |. 8BF9 MOV EDI,ECX
0040E52D |. 85FF TEST EDI,EDI
0040E52F |. 7E 14 JLE SHORT CRYPTCD3.0040E545
0040E531 |> 8A041E /MOV AL,BYTE PTR DS:[ESI+EBX]
0040E534 |. 50 |PUSH EAX ;壓入一個字元,進行運算
0040E535 |. E8 16000000 |CALL CRYPTCD3.0040E550 ;所以我們進入
0040E53A |. 83C4 04 |ADD ESP,4
0040E53D |. 88041E |MOV BYTE PTR DS:[ESI+EBX],AL
0040E540 |. 46 |INC ESI
0040E541 |. 3BF7 |CMP ESI,EDI
0040E543 |.^7C EC JL SHORT CRYPTCD3.0040E531
0040E545 |> 5F POP EDI
0040E546 |. 5E POP ESI
0040E547 |. 5B POP EBX
0040E548 . C3 RETN
進入40E535的Call:
0040E550 /$ 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
0040E554 |. 3C 3D CMP AL,3D
0040E556 |. 75 03 JNZ SHORT CRYPTCD3.0040E55B
0040E558 |. B0 20 MOV AL,20
0040E55A |. C3 RETN
0040E55B |> 50 PUSH EAX
0040E55C |. 68 F0604200 PUSH CRYPTCD3.004260F0 ;ASCII "JrKYmF!.GXjWin-boca0NyEv3Lle4qHOwP2s87xUtQM1V56Ag9ZfkuDhzIpT#BCRSd ="
0040E561 |. E8 0A000000 CALL CRYPTCD3.0040E570 ;計算位置的Call
0040E566 |. 8A80 A8604200 MOV AL,BYTE PTR DS:[EAX+4260A8] ;4260A8是真正的密碼錶的地址
0040E56C |. 83C4 08 ADD ESP,8
0040E56F . C3 RETN
40E561的Call是計算位置:
0040E570 /$ 8B5424 04 MOV EDX,DWORD PTR SS:[ESP+4]
0040E574 |. 33C0 XOR EAX,EAX
0040E576 |. 56 PUSH ESI
0040E577 |. 8A0A MOV CL,BYTE PTR DS:[EDX]
0040E579 |. 84C9 TEST CL,CL
0040E57B |. 74 18 JE SHORT CRYPTCD3.0040E595
0040E57D |. 0FBE7424 0C MOVSX ESI,BYTE PTR SS:[ESP+C]
0040E582 |> 81E1 FF000000 /AND ECX,0FF ;比較字元找到位置
0040E588 |. 3BCE |CMP ECX,ESI
0040E58A |. 74 0E |JE SHORT CRYPTCD3.0040E59A
0040E58C |. 8A4A 01 |MOV CL,BYTE PTR DS:[EDX+1]
0040E58F |. 42 |INC EDX
0040E590 |. 40 |INC EAX
0040E591 |. 84C9 |TEST CL,CL
0040E593 |.^75 ED JNZ SHORT CRYPTCD3.0040E582
0040E595 |> B8 2A000000 MOV EAX,2A ;如果沒有找到則把2AH送給EAX
0040E59A |> 5E POP ESI
0040E59B . C3 RETN
下面總結一下整個過程,首先比較個數是否為14個,然後察看註冊碼的前4位是否為TCX3,
接著搜尋字串中是否含有'-'如果沒有則出錯.如果含有'-'則取出,最後9位數,依次取出
最後4位,透過密碼錶:"JrKYmF!.GXjWin-boca0NyEv3Lle4qHOwP2s87xUtQM1V56Ag9ZfkuDhzIpT#BCRSd ="
用來計算位置,最後位置存放在EAX中,即找到的字元的位置,如果沒有找到該字元則EAX為2AH,
然後在查真正的表".-#!0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz="
得到每位相對應的字元,然後把所得的4位字元和9位中的2~5位進行比較,如果註冊成功!
下面是KeyGen:
#include <stdio.h>
#include <stdlib.h>
int p[4];
char key[4];
void GetRealKey()
{
int i,k,j;
char position[]="JrKYmF!.GXjWin-boca0NyEv3Lle4qHOwP2s87xUtQM1V56Ag9ZfkuDhzIpT#BCRSd =";
char suiji[]="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
k=0;j=0;
for(i=0;i<=3;i++)
{
p[i]=rand()%61;
key[i]=suiji[p[i]];
}
for(i=0;i<=3;i++)
{
while(key[i]!=position[k])
{
k++;
}
p[j]=k;
k=0;
j++;
}
}
int main()
{
int i;
char mima[]=".-#!0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz=";
char key1[3];
printf("===========================================
");
printf("KeyGen for CryptCD 3 mady by dengkeng[DFCG]
");
printf("===========================================
");
for(i=0;i<=7;i++)
{
GetRealKey();
printf("TCX3-%c%c%c%c%c%c%c%c%c
",key[rand()%3],mima[p[0]],mima[p[1]],mima[p[2]],mima[p[3]],key[0],key[1],key[2],key[3]);
}
return 0;
}
給出註冊碼TCX3-1gXWj6789或者TCX31-gXWj6789
Made By dengkeng[DFCG]
E-mail:shellc0de@sohu.com
歡迎轉載,請保持文章的完整性
相關文章
- 貪吃蛇的演算法分析(3) (轉)2007-11-13演算法
- 演算法分析與設計 - 作業32024-03-18演算法
- 炒股理財演算法分析 (3千字)2001-03-31演算法
- Green Tea 2.60註冊碼演算法分析 (3千字)2000-07-17演算法
- 演算法分析2024-10-09演算法
- Advanced MP3WMA Recorder 3.7.3破解手記--完美演算法分析2015-11-15演算法
- 《機器學習實戰》決策樹(ID3演算法)的分析與實現2015-08-15機器學習演算法
- EZ MP3 Recorder 1.15 註冊演算法分析 (14千字)2015-11-15演算法
- EOS原始碼分析(3)案例分析2018-05-13原始碼
- 加解密演算法分析2020-06-29解密演算法
- 如何分析排序演算法2022-06-16排序演算法
- SFR演算法原理分析2024-08-21演算法
- 演算法3Sum2014-05-04演算法
- 演算法題系列32024-08-10演算法
- 演算法分析__級數求和2019-03-05演算法
- 演算法分析__時間估算2019-03-05演算法
- 演算法分析__遞推方程2019-03-05演算法
- ETH-Pow演算法分析2019-02-20演算法
- 演算法複雜度分析2021-09-19演算法複雜度
- 演算法分析基本概念2018-05-14演算法
- 演算法複雜性分析2013-09-25演算法
- ResScope1.92演算法分析2004-07-21演算法
- 計程車管理
1.2 演算法分析2004-08-16演算法
- supercleaner註冊演算法分析2015-11-15演算法
- #排序演算法#【3】堆排序2014-05-31排序演算法
- 演算法3Sum Closest2014-05-04演算法
- Linux核心分析。32016-07-30Linux
- Oracle分析函式-32007-09-27Oracle函式
- 集合原始碼分析[3]-ArrayList 原始碼分析2019-04-12原始碼
- 排名演算法(二)--淘寶搜尋排序演算法分析2018-12-31演算法排序
- Advanced Dialer v2.5演算法分析(附序號產生器) (3千字)2002-04-17演算法
- Lc3&Lc4
註冊演算法分析及序號產生器的製作2004-06-18演算法
- EmEditor v3 Version 3.09 漢化版註冊碼演算法分析
(8千字)2001-01-09演算法
- 演算法分析__遞迴跟蹤2019-03-05演算法遞迴
- 演算法複雜度分析(下)2018-09-30演算法複雜度
- 演算法複雜度分析(上)2018-09-27演算法複雜度
- 關聯分析(二)--Apriori演算法2018-12-29演算法
- 演算法設計與分析(fd)2020-12-28演算法