Câu lệnh này là chèn giá trị tại địa chỉ DS:[EDX] vào trước ký tự của chuỗi được lưu ở ECX bên trên.
Trang 1Posted by: moonbaby Jan 7 2004, 03:27 AM
QUOTE
Homepage : http://crackme.de
CrackMe : orion_crackme4.zip (CrackMe4.exe)
Coder : Diablo (Borland C++)
Type : Name / Serial
Packed : N / A
Crack Tool : OllyDbg 1.09d
Unpack Tool : N / A
Request : Correct Serial
Rule : N/A
Note : N/A
>>>>>>>> Chương trình này mã hoá chuỗi rất đơn giản, nhưng đoạn mã xử lý thì rất dài :
QUOTE
>>>> Câu lệnh này là nạp từng ký tự của chuỗi U nhập vào ECX
00401675 0FBE08 MOVSX ECX,BYTE PTR DS:[EAX]
>>>> Trace tiếp một đoạn khá dài ta đến đây Câu lệnh này là chèn giá trị tại địa chỉ DS:[EDX] vào trước ký tự của chuỗi được lưu ở ECX bên trên ( ký tự ở đại chỉ này luôn là 00h )
004016CB 8B12 MOV EDX,DWORD PTR DS:[EDX]
>>>> Lặp lại quá trình cho đến hết chuỗi
00401777 ^\0F85 C6FEFFFF JNZ CRACKME4.00401643
Trang 2>>>> Trace tiếp ta đến :
0040189C E8 07A30600 CALL CRACKME4.0046BBA8
>>>> Trace vào trong lệnh này ta thấy
0046BBAC | 8B00 MOV EAX,DWORD PTR DS:[EAX] < === Chuỗi S nhập
0046BBAE | 8B12 MOV EDX,DWORD PTR DS:[EDX] < === Chuỗi S thực
>>>> Trace thẳng vào trong lệnh này ta đến quá trình so sánh chuỗi 0046BBB0 | E8 FF52FFFF CALL CRACKME4.00460EB4
>>>>>>>> Vậy :
QUOTE
1- Quá trình xử ý chuỗi này là chuyển ký tự thành mã ASCII và chèn trước mỗi ký tự số 00
2- Quá trình xử lý này cực ký đơn giản nhưng cái khó là tìm ra đoạn mã
và đặt BreakPoint
>>>>>>>> Chuỗi mã hóa và chuỗi S nhập được lưu ở
QUOTE
006BF2AC 00BE530C ASCII
Trang 3"004D006F006F006E0062006100620079"
006BF2B0 00BE533C ASCII "412456"
Có thể nhì thấy ở của sổ thứ 5
>>>>>>>> Vậy :
QUOTE
User : Moonbaby
Serial : 004D006F006F006E0062006100620079
User : HVA-CrAcKeRtEaM
Serial
: 004800560041002D0043007200410063004B00650052007400450061004D
Ba file crackme của Diablo sau khi crack xong sẽ cho ta một hình rất đẹp
Posted by: NVCT.com Jan 9 2004, 03:26 AM
QUOTE
Victim : mankind
Tools : OllyDbg v1.09d
Trang 4Crack file : mankind-soarp1.exe
Cracked by : NVCT.com
URL : http://crackme.de
Cracked by : NCVT.com
Set BreakPoint here :
QUOTE
004010C3 | E8 C2020000 CALL
<JMP.&USER32.GetDlgItemTextA> ; \GetDlgItemTextA
00401123 | E8 62020000 CALL
<JMP.&USER32.GetDlgItemTextA> ; \GetDlgItemTextA
The first MagicString :
QUOTE
00401128 | 8D05 36304000 LEA EAX,DWORD PTR DS:[403036]
< === Save here
0040112E | C600 43 MOV BYTE PTR DS:[EAX],43 <
======== C
00401131 | C640 01 72 MOV BYTE PTR DS:[EAX+1],72 <
====== r
00401135 | C640 02 61 MOV BYTE PTR DS:[EAX+2],61 <
====== a
00401139 | C640 03 63 MOV BYTE PTR DS:[EAX+3],63 <
Trang 5====== c
0040113D | C640 04 6B MOV BYTE PTR DS:[EAX+4],6B <
====== k
00401141 | C640 05 54 MOV BYTE PTR DS:[EAX+5],54 <
====== T
00401145 | C640 06 68 MOV BYTE PTR DS:[EAX+6],68 <
====== h
00401149 | C640 07 69 MOV BYTE PTR DS:[EAX+7],69 <
====== i
0040114D | C640 08 73 MOV BYTE PTR DS:[EAX+8],73 <
====== s
00401151 | C640 09 31 MOV BYTE PTR DS:[EAX+9],31 <
====== 1
================> MagicString1 = CrackThis1
The second MagicString :
QUOTE
00401155 | 8D05 41304000 LEA EAX,DWORD PTR DS:[403041]
< === Save here
0040115B | C600 4B MOV BYTE PTR DS:[EAX],4B <
======== K
0040115E | C640 01 61 MOV BYTE PTR DS:[EAX+1],61 <
====== a
00401162 | C640 02 6E MOV BYTE PTR DS:[EAX+2],6E <
====== n
00401166 | C640 03 61 MOV BYTE PTR DS:[EAX+3],61 <
====== a
Trang 60040116A | C640 04 6C MOV BYTE PTR DS:[EAX+4],6C <
====== l
0040116E | C640 05 32 MOV BYTE PTR DS:[EAX+5],32 <
====== 2
00401172 | C640 06 33 MOV BYTE PTR DS:[EAX+6],33 <
====== 3
================> MagicString2 = Kalan23
The first Process :
QUOTE
004011A9 | 8D05 8B314000 LEA EAX,DWORD PTR
DS:[40318B] < ==== MagicString1
004011AF | 8D1D 41304000 LEA EBX,DWORD PTR
DS:[403041] < ==== MagicString2
004011B5 | 8D15 26314000 LEA EDX,DWORD PTR
DS:[403126] < ==== input U
004011BB |> 8A0C30 /MOV CL,BYTE PTR DS:[EAX+ESI] <
==== Chart of MagicString1
004011BE | 8A5415 00 |MOV DL,BYTE PTR SS:[EBP+EDX]
< ==== Chart of U input
004011C2 | 8A043B |MOV AL,BYTE PTR DS:[EBX+EDI] <
==== Chart of MagicString2
004011C5 | 02C2 |ADD AL,DL
004011C7 | 02C1 |ADD AL,CL
004011C9 | 2C 02 |SUB AL,2
004011CB | 34 09 |XOR AL,9
004011CD | 33C9 |XOR ECX,ECX
004011CF | 8AC8 |MOV CL,AL
Trang 7004011D1 | 8D86 8B314000 |LEA EAX,DWORD PTR
DS:[ESI+40318B]
004011D7 | 8808 |MOV BYTE PTR DS:[EAX],CL
004011D9 | 8D05 8B314000 |LEA EAX,DWORD PTR
DS:[40318B]
004011DF | 46 |INC ESI
004011E0 | 83FE 0A |CMP ESI,0A
004011E3 | 75 02 |JNZ SHORT SOARP1.004011E7
004011E5 | 33F6 |XOR ESI,ESI
004011E7 |> 8D1D 41304000 |LEA EBX,DWORD PTR
DS:[403041]
004011ED | 47 |INC EDI
004011EE | 83FF 07 |CMP EDI,7
004011F1 | 75 02 |JNZ SHORT SOARP1.004011F5
004011F3 | 33FF |XOR EDI,EDI
004011F5 |> 8D15 26314000 |LEA EDX,DWORD PTR
DS:[403126]
004011FB | 45 |INC EBP ======================== counter
004011FC | 3B2D 1E314000 |CMP EBP,DWORD PTR
DS:[40311E]
00401202 |.^ 7C B7 \JL SHORT SOARP1.004011BB
After this process the value ( MagicString3 ) is saved at DS:[40318B] The second Process :
QUOTE
00401204 | C705 22314000>MOV DWORD PTR DS:[403122],0A
Trang 80040120E | 8B0D 22314000 MOV ECX,DWORD PTR DS:[403122] < ====== ECX = 0Ah
00401214 | 33F6 XOR ESI,ESI
00401216 | 85C9 TEST ECX,ECX
00401218 | 7E 3B JLE SHORT SOARP1.00401255 0040121A |> 8A8E 8B314000 /MOV CL,BYTE PTR
DS:[ESI+40318B] < === Chart of MagicString3
00401220 | 80F9 30 |CMP CL,30
00401223 | 7C 1A |JL SHORT SOARP1.0040123F
00401225 | 80F9 2F |CMP CL,2F
00401228 | 76 09 |JBE SHORT SOARP1.00401233 0040122A | 80F9 3A |CMP CL,3A
0040122D | 73 04 |JNB SHORT SOARP1.00401233 0040122F | 7E 19 |JLE SHORT SOARP1.0040124A
00401231 | EB 0C |JMP SHORT SOARP1.0040123F
00401233 |> 80F9 40 |CMP CL,40
00401236 | 76 07 |JBE SHORT SOARP1.0040123F
00401238 | 80F9 5B |CMP CL,5B
0040123B | 73 02 |JNB SHORT SOARP1.0040123F 0040123D | 7E 0B |JLE SHORT SOARP1.0040124A 0040123F |> 80C1 13 |ADD CL,13
00401242 | 888E 8B314000 |MOV BYTE PTR
DS:[ESI+40318B],CL
00401248 |.^ EB D0 |JMP SHORT SOARP1.0040121A 0040124A |> 8B0D 22314000 |MOV ECX,DWORD PTR DS:[403122]
00401250 | 46 |INC ESI
00401251 | 3BF1 |CMP ESI,ECX
00401253 |.^ 7C C5 \JL SHORT SOARP1.0040121A
After the second Process, we here :
Trang 9QUOTE
00401255 |> \68 8B314000 PUSH SOARP1.0040318B ; /String2 =
"2AR20MMO11" < == Real Serial
0040125A | 68 B9304000 PUSH SOARP1.004030B9 ; |String1 =
"1" < ======== input S
So :
QUOTE
User : NVCT.com Serial : 2AR20MMO11