FreshDiagnose 6.70 FRESH DIAGNOSE is an utility designed to analyze and benchmark your computer system.. It can analyze and benchmark many kinds of hardware, such as CPU performance, ha
Trang 10048DBC6 | C645 F0 00 MOV BYTE PTR SS:[EBP-10],0
0048DBCA | 8D53 10 LEA EDX,DWORD PTR DS:[EBX+10]
0048DBCD | 8D45 DC LEA EAX,[LOCAL.9]
0048DBD0 | B9 08000000 MOV ECX,8 ; <== 8 charts
0048DBD5 | E8 ECFCFFFF CALL DUMeter.0048D8C6 ; <== SecIII
0048DBDA | C645 E4 00 MOV BYTE PTR SS:[EBP-1C],0
0048DBDE | 8D45 C8 LEA EAX,[LOCAL.14]
0048DBE1 | B9 10000000 MOV ECX,10 ; <== 16 charts
0048DBE6 | 8BD3 MOV EDX,EBX
0048DBE8 | E8 D9FCFFFF CALL DUMeter.0048D8C6 ; <== SecIV
- Đầu tiên chương trình sẽ mã hoá chuỗi U nhập Tuy nhiên, trước khi tiến hành quá trình mã hoá chương trình sẽ chuyển đổi các ký tự của chuỗi U nhập sang dạng UpperCase và loại bỏ các ký tự đặc biệt :
0048DBFF | E8 81FDFFFF CALL DUMeter.0048D985 ; <== Encrypt U : ValueU
-=== Encrypt U === -
0048D98C |> /C1E2 04 /SHL EDX,4 ; <== ValueU = ValueU * 0x10
0048D98F | |0FBE08 |MOVSX ECX,BYTE PTR DS:[EAX] ; <== U[i] 0048D992 | |03D1 |ADD EDX,ECX ; <== ValueU = ValueU + U[i]
0048D994 | |8BCA |MOV ECX,EDX ; <== Temp = ValueU
0048D996 | |81E1 000000F0 |AND ECX,F0000000 ; <== Temp
= Temp and 0xF0000000
0048D99C | |85C9 |TEST ECX,ECX ; <== if ( ECX != 0x0 )
0048D99E | |74 0B |JE SHORT DUMeter.0048D9AB ; <== then 0048D9A0 | |C1E9 18 |SHR ECX,18 ; <== Temp = Temp / 0x1000000
0048D9A3 | |33D1 |XOR EDX,ECX ; <== Value = Value xor Temp
0048D9A5 | |81E2 FFFFFF0F |AND EDX,0FFFFFFF ; <==
ValueU = ValueU & 0xFFFFFFF
0048D9AB |> |40 |INC EAX ; <== i++
Trang 20048D9AC |> |8038 00 CMP BYTE PTR DS:[EAX],0 ; <== while ( i < LenU )
0048D9AF |.^\75 DB \JNZ SHORT DUMeter.0048D98C ; <==
continue Loop
-=== Encrypt U === -
- Kế đó là mã hoá SecI Đoạn mã hoá này cho ta biết được rằng các ký tự của SecI phải là một trong các ký tự của chuỗi mặc định
"ABCDEFGHIJKLMNOPQRSTUVWXYZ987654" :
0048DC06 | 8D45 F4 LEA EAX,[LOCAL.3] ; <== SecI
0048DC09 | E8 01FEFFFF CALL DUMeter.0048DA0F ; <== Encrypt SecI : ValueI
-=== Encrypt SecI === -
0048DA19 | E8 7EFEFFFF CALL DUMeter.0048D89C ; <== LenSecI
0048DA1E | 83F8 03 CMP EAX,3 ; <== Must
be 3 charts
0048DA21 | 73 04 JNB SHORT DUMeter.0048DA27
0048DA23 | 33C0 XOR EAX,EAX
0048DA25 | EB 39 JMP SHORT DUMeter.0048DA60
0048DA27 |> BA 0C174F00 MOV EDX,DUMeter.004F170C
; ASCII "ABCDEFGHIJKLMNOPQRSTUVWXYZ987654"
0048DA2C | 8A03 MOV AL,BYTE PTR DS:[EBX] ; <== SecI[0]
0048DA2E | E8 82FFFFFF CALL DUMeter.0048D9B5 ; <== Location in DefaultString
0048DA33 | 8BF0 MOV ESI,EAX ; <== LocI 0048DA35 | 4E DEC ESI ; <==
LocI
0048DA36 | BA 0C174F00 MOV EDX,DUMeter.004F170C
; ASCII "ABCDEFGHIJKLMNOPQRSTUVWXYZ987654"
0048DA3B | 8A43 01 MOV AL,BYTE PTR DS:[EBX+1] ; <== SecI[1]
0048DA3E | E8 72FFFFFF CALL DUMeter.0048D9B5 ; <== Location in DefaultString
0048DA43 | 8BF8 MOV EDI,EAX ; <== LocII 0048DA45 | 4F DEC EDI ; <==
LocII
Trang 30048DA46 | BA 0C174F00 MOV EDX,DUMeter.004F170C
; ASCII "ABCDEFGHIJKLMNOPQRSTUVWXYZ987654"
0048DA4B | 8A43 02 MOV AL,BYTE PTR DS:[EBX+2] ; <== SecI[2]
0048DA4E | E8 62FFFFFF CALL DUMeter.0048D9B5 ; <== Location in DefaultString
0048DA53 | 48 DEC EAX ; <==
LocIII
0048DA54 | C1E7 05 SHL EDI,5 ; <== ValueI = LocII * 0x20
0048DA57 | 0BF7 OR ESI,EDI ; <== Value = Value or LocI
0048DA59 | C1E0 0A SHL EAX,0A ; <==
LocIII = LocIII * 0x400
0048DA5C | 0BF0 OR ESI,EAX ; <== Value = Value or LocIII
0048DA5E | 8BC6 MOV EAX,ESI ; <== Value -=== Encrypt SecI === -
- Tiếp đến là quá trình chuyển đổi SecII từ chuỗi sang dạng HEX Value tương ứng ( Ví dụ SecII : “123AB” được chuyển sang thành giá trị ValueII = 0x123AB ) Như vậy, các ký tự của SecII phải nằm trong khoảng các ký tự sau
“123456789ABCDEF” :
0048DC10 | 8D45 E8 LEA EAX,[LOCAL.6] ; <== SecII 0048DC13 | E8 7CFEFFFF CALL DUMeter.0048DA94 ; <==
Convert to HEX value : ValueII
- Tiếp đó là quá trình kiểm tra đầu tiên :
0048DC1A | 3BF3 CMP ESI,EBX ; <== if ( ValueU
== ValueII )
0048DC1C 74 04 JE SHORT DUMeter.0048DC22 ; <==
Continue check
- Tương tự như quá trình mã hoá SecII, SecIII cũng giống như vậy :
0048DC22 |> \8D45 DC LEA EAX,[LOCAL.9] ; <==
SecIII
0048DC25 | E8 6AFEFFFF CALL DUMeter.0048DA94 ; <==
Convert to HEX value : ValueIII
- Qúa trình mã hoá SecIV dựa trên thuật toán CRC32 :
Trang 40048DC2C | 8D45 C8 LEA EAX,[LOCAL.14] ; <==
SecIV
0048DC2F | E8 1EFDFFFF CALL DUMeter.0048D952 ; <==
CRC32 Encrypt
-=== CRC32 Encrypt === -
0048D95F | 83CE FF OR ESI,FFFFFFFF ; <==
CRC32Value
0048D962 | 33DB XOR EBX,EBX ; <== i = 0x0
0048D964 | EB 0D JMP SHORT DUMeter.0048D973
0048D966 |> 8A041F /MOV AL,BYTE PTR DS:[EDI+EBX] ; <== SecIV[i]
0048D969 | 8BD6 |MOV EDX,ESI ; <==
CRC32Value
-=== CRC32 === -
0048D93B | 32C2 XOR AL,DL ; <== Temp =
CRC32Value xor SecIV[i]
0048D93D | 25 FF000000 AND EAX,0FF ; <== Temp =
Temp and 0xFF
0048D942 | 8B0C85 B0504F>MOV ECX,DWORD PTR DS:[EAX*4+4F50B0]
; <== Value = CRC32Table[Temp]
0048D949 | C1EA 08 SHR EDX,8 ; <== CRC32Value = CRC32Value / 0x100
0048D94C | 33CA XOR ECX,EDX ; <== Value = Value xor CRC32Value
0048D94E | 8BC1 MOV EAX,ECX ; <== Value
-=== CRC32 === -
0048D970 | 8BF0 |MOV ESI,EAX ; <==
CRC32Value = Value
0048D972 | 43 |INC EBX ; <== i++; 0048D973 |> 8BC7 MOV EAX,EDI ; <==
SecIV
0048D975 | E8 22FFFFFF |CALL DUMeter.0048D89C ; <== LenSecIV
0048D97A | 3BD8 |CMP EBX,EAX ; <== while ( i < LenSecIV )
0048D97C |.^ 72 E8 \JB SHORT DUMeter.0048D966 ; <==
Continue Loop
0048D97E | 8BC6 MOV EAX,ESI ; <==
CRC32Value
Trang 5-=== CRC32 Encrypt === - 0048DC34 | 33C3 XOR EAX,EBX ; <== CRC32Value = CRC32Value xor ValueU
- Quá trình kiểm tra thứ hai diễn ra như sau :
0048DC36 | 3BC6 CMP EAX,ESI ; <== if ( CRC32Value == ValueIII )
0048DC38 75 04 JNZ SHORT DUMeter.0048DC3E ; <== Congrat !!!!
/*/*/*/ - SERIAL tương ứng :
User : REA-cRaCkErTeAm Serial : D3-JD5-06FFE94D-6348F8BD
Serial : N/A
III – End of Tut :
- Finished – September 13, 2004
- Thank to my family, Computer_Angel, Zombie_Deathman, Littleboy all REA‘s members, HacNho, RongChauA, Deux, Infinity, all my friend, and YOU
REVERSE ENGINEERING ASSOCIATION
http://www.reaonline.net
Reverse Engineering Association
SoftWare
Homepage : http://www.freshdevices.com
Production : Freshdevices Corp
SoftWare : FreshDiagnose 6.70
Copyright by : Copyright © 2001-2004 Freshdevices Corp All Rights Reserved
Type : Name / Serial
Packed : ASPack 2.12 -> Alexey Solodovnikov
Language : Borland Delphi 6.0 - 7.0
Crack Tool : OllyDbg 1.09d, PEiD 0.92, kWdsm 10
Unpack : Manual
Request : Correct Serial
Trang 6FreshDiagnose 6.70
FRESH DIAGNOSE is an utility designed to analyze and benchmark your computer system It can analyze and benchmark many kinds of hardware, such as CPU performance, hard disk performance, video system information, mainboard information, and many more!
I – Information :
- Dùng PEiD kiểm tra biết chương trình bị PACK bằng ASPack 2.12 -> Alexey Solodovnikov UnPACK và kiểm tra lại biết chương trình được viết bằng Borland Delphi 6.0 - 7.0
- Chạy thử chương trình với User và Fake Serial ta không nhận được thông báo gì Tuy nhiên trong quá trình tìm kiếm chuỗi ta tìm được thông báo :
00561F2F > \B8 74215600 MOV EAX,unpack.00562174 ; ASCII
"FreshDiagnose has been registered successfully."
- Dò ngược lên trên và đặt BreakPoint tại lệnh CALL đầu tiên của FUNCTION này :
00561EB2 E8 1176F0FF CALL unpack.004694C8 ; <== Set BreakPoint here
II – Cracking :
- Load chương trình lên, chạy chương trình với User và Fake Serial, chương trình dừng lại tại điểm đặt BP Trace xuống chút :
00561EF2 E8 A5FDFFFF CALL unpack.00561C9C ; <== Trace Into
-=== Trace Into === -
- Chuỗi Serial đầu tiên là chuỗi Serial không hợp lệ Chỉ có 1 chuỗi Serial duy nhất :
00561D34 |> /8D4D F0 /LEA ECX,[LOCAL.4]
00561D37 | |0FBFD6 |MOVSX EDX,SI
00561D3A | |8B45 FC |MOV EAX,[LOCAL.1]
00561D3D | |8B80 34030000 |MOV EAX,DWORD PTR DS:[EAX+334]
00561D43 | |8B80 20020000 |MOV EAX,DWORD PTR DS:[EAX+220]
00561D49 | |8B38 |MOV EDI,DWORD PTR DS:[EAX]
Trang 700561D4B | |FF57 0C |CALL DWORD PTR DS:[EDI+C] ; <== Licence of Old Version
00561D4E | |8B55 F0 |MOV EDX,[LOCAL.4] ; <== RealSerial
00561D51 | |A1 A4115800 |MOV EAX,DWORD PTR DS:[5811A4] ; <== Fake Serial
00561D56 | |E8 5D34EAFF |CALL unpack.004051B8 ; <==
Compare
00561D5B | |75 0A |JNZ SHORT unpack.00561D67
00561D5D | |C705 98115800>|MOV DWORD PTR DS:[581198],-1