Như vậy ta suy đoán chương trình sẽ lưu thông tin ta Registed vào Reg rồi check nó mỗi khi ta Run chương trình.. nghĩ sao làm vậy .Bây giờ chúng ta hãy load chương trình vào trong OllyDb
Trang 1ký :-o Như vậy ta suy đoán chương trình sẽ lưu thông tin ta Registed vào Reg rồi check nó mỗi khi ta Run chương trình :w00t:
*** Ok ! nghĩ sao làm vậy Bây giờ chúng ta hãy load chương trình vào trong OllyDbg Nếu nó hiện ra 1 bảng thông báo thì cứ nhấn OK Sau đó click chuột phải chọn Search for / All referenced text strings để tìm chuỗi thông báo trên ah !
nó đây rùi , double click vào String đó ta được đưa trở lại Olly Ặc ặc nhìn lướt qua mà thấy toàn là hàm Call MFC :(( , ít manh mối quá Để coi trong mớ bòng bong String có gì đáng giá ko ? ở đây chúng ta tìm thấy 1 loạt String như sau :
Code:
Text strings referenced in ppp:.text
Address Disassembly Text string
004023A7 PUSH ppp.004181B4 ASCII
"aaaaaaaaaaaaaaaaaaaaaaaaa"
0040250E PUSH ppp.004181A0 ASCII "0000000000000000"
0040259F PUSH ppp.0041817C ASCII "UserName"
004025A8 PUSH ppp.00418168 ASCII "Registration Info"
004025BA PUSH ppp.004181D0 ASCII "Registration Code" 004025C3 PUSH ppp.00418168 ASCII "Registration Info"
Theo như kinh nghiệm cracked soft trên thì ta thấy chuỗi toàn char 0 này :
“0000000000000000” dường như là 1 Template String để chương trình đặt lần
lượt từng char RS sau khi đã mã hoá vào đó
OK ! bây giờ chúng ta Double click vào String đó xem sao , chúng ta sẽ đến 1 Procedure Code Đặt vệt sáng vào đầu Procedure này , nhấn Ctrl + R để mở cửa sổ
“References in pp ” , ta sẽ thấy Procedure này được gọi bởi 1 hàm Call : :w00t: Code:
004025F5 CALL ppp.00402360
*** Double click vào hàm Call này chúng ta sẽ đến được đoạn Code sau :
Code:
004025F4 | 50 PUSH EAX ; |Arg1
004025F5 | E8 66FDFFFF CALL ppp.00402360 ;
\ppp.00402360 ===> Set BreakPoint here
004025FA | 8B7424 0C MOV ESI, DWORD PTR SS:[ESP+C]
004025FE | 8B4424 08 MOV EAX, DWORD PTR SS:[ESP+8]
Trang 2II/ Craking :
***OK, sau khi đặt BP tại đó , chúng ta nhấn F9 để Run chương trình , Olly sẽ Ice tiến trình tại điểm mà ta vừa đặt BP Chúng ta sẽ Trace Into vào trong hàm Call này nếu bạn muốn xem cơ chế tạo Ser của nó có thể trace over cũng lấy đc RS : Code:
004025F5 | E8 66FDFFFF CALL ppp.00402360 ;
\ppp.00402360 ==> We're here
-Trace
into -
00402360 /$ 6A FF PUSH -1
00402362 | 68 87F34000 PUSH ppp.0040F387 ; SE handler installation
00402367 | 64:A1 0000000>MOV EAX, DWORD PTR FS:[0]
0040236D | 50 PUSH EAX
0040236E | 64:8925 00000>MOV DWORD PTR FS:[0], ESP
00402375 | 83EC 2C SUB ESP, 2C
00402378 | C74424 04 000>MOV DWORD PTR SS:[ESP+4], 0
00402380 | 8D4424 40 LEA EAX, DWORD PTR SS:[ESP+40]
00402384 | 8D4C24 00 LEA ECX, DWORD PTR SS:[ESP]
00402388 | 50 PUSH EAX
00402389 | C74424 38 010>MOV DWORD PTR SS:[ESP+38], 1
00402391 | E8 F8C20000 CALL <JMP.&MFC42.#535>
00402396 | 8B4C24 00 MOV ECX, DWORD PTR SS:[ESP] ==> đưa Input vào ECX
0040239A | C64424 34 02 MOV BYTE PTR SS:[ESP+34], 2
0040239F | 8B41 F8 MOV EAX, DWORD PTR DS:[ECX-8]
004023A2 | 83F8 10 CMP EAX, 10
004023A5 | 7D 0E JGE SHORT ppp.004023B5
004023A7 | 68 B4814100 PUSH ppp.004181B4 ; ASCII
"aaaaaaaaaaaaaaaaaaaaaaaaa"
004023AC | 8D4C24 04 LEA ECX, DWORD PTR SS:[ESP+4]
004023B0 | E8 35C10000 CALL <JMP.&MFC42.#941>
004023B5 |> 56 PUSH ESI
004023B6 | 8B7424 04 MOV ESI, DWORD PTR SS:[ESP+4] ==> đưa Input vào ESI
004023BA | 8D4424 1C LEA EAX, DWORD PTR SS:[ESP+1C]
004023BE | 33D2 XOR EDX, EDX ==> bắt đầu tính toán với EDX=0
Trang 3004023C0 | 2BF0 SUB ESI, EAX
-======chương trình sẽ thực hiện vòng lặp này để lấy và check từng char FU mà ta nhập vào====== -
004023C2 |> 8D4C14 1C /LEA ECX, DWORD PTR SS:[ESP+EDX+1C] 004023C6 | 8A040E |MOV AL, BYTE PTR DS:[ESI+ECX] ==> đưa S[0] vào AL
004023C9 | 3C 61 |CMP AL, 61 ==> so sánh S[0] với 61
004023CB | 8801 |MOV BYTE PTR DS:[ECX], AL
004023CD | 7C 08 |JL SHORT ppp.004023D7 ==> nhảy nếu nhỏ hơn 004023CF | 3C 66 |CMP AL, 66 ==> so sánh S[0] với 66
004023D1 | 7F 04 |JG SHORT ppp.004023D7 ==> nhảy nếu lớn hơn 004023D3 | 24 CE |AND AL, 0CE ==> nếu nhỏ hơn thì And tiếp AL với 0CE
004023D5 | 8801 |MOV BYTE PTR DS:[ECX], AL
004023D7 |> 8A01 |MOV AL, BYTE PTR DS:[ECX] ==> đưa S[0] vào
AL
004023D9 | 3C 41 |CMP AL, 41 ==> so sánh S[0] với 41
004023DB | 7C 08 |JL SHORT ppp.004023E5 ==> nhảy nếu nhỏ hơn 004023DD | 3C 46 |CMP AL, 46 ==> so sánh S[0] với 46
004023DF | 7F 04 |JG SHORT ppp.004023E5 ==> nhảy nếu lớn hơn 004023E1 | 2C 42 |SUB AL, 42 ==> nếu nhỏ hơn thì tiếp tục trừ AL cho
42
004023E3 | EB 02 |JMP SHORT ppp.004023E7
004023E5 |> 2C 32 |SUB AL, 32 ==> trừ tiếp AL cho 32
004023E7 |> 42 |INC EDX ==> tăng EDX lên 1
004023E8 | 8801 |MOV BYTE PTR DS:[ECX], AL
004023EA | 83FA 10 |CMP EDX, 10 ==> so sánh EDX với 10
004023ED |.^ 7C D3 \JL SHORT ppp.004023C2 ==> tiếp tục vòng lặp nếu nhỏ hơn
-=======lặp 16 lần thì check xong & hết vòng lặp thứ nhất====== -
004023EF | 53 PUSH EBX
004023F0 | 55 PUSH EBP
004023F1 | 8D6C24 14 LEA EBP, DWORD PTR SS:[ESP+14]
004023F5 | 57 PUSH EDI
004023F6 | B8 06000000 MOV EAX, 6
004023FB | 83ED 06 SUB EBP, 6
-========bắt đầu vòng lặp thứ 2 để tạo Rel Ser======== -
Trang 4004023FE |> 8D70 FA /LEA ESI, DWORD PTR DS:[EAX-6]
00402401 | 8BD8 |MOV EBX, EAX
00402403 | 8BCE |MOV ECX, ESI
00402405 | 83E3 0F |AND EBX, 0F
00402408 | 83E1 0F |AND ECX, 0F
0040240B | 8D78 01 |LEA EDI, DWORD PTR DS:[EAX+1]
0040240E | 0FBE5C1C 28 |MOVSX EBX, BYTE PTR SS:[ESP+EBX+28]
00402413 | 0FBE540C 28 |MOVSX EDX, BYTE PTR SS:[ESP+ECX+28]
00402418 | 8D48 FC |LEA ECX, DWORD PTR DS:[EAX-4]
0040241B | 03D6 |ADD EDX, ESI
0040241D | 83E1 0F |AND ECX, 0F
00402420 | 0FBE4C0C 28 |MOVSX ECX, BYTE PTR SS:[ESP+ECX+28]
00402425 | 0FAFD1 |IMUL EDX, ECX
00402428 | 8D48 FD |LEA ECX, DWORD PTR DS:[EAX-3]
0040242B | 83E1 0F |AND ECX, 0F
0040242E | 0FBE4C0C 28 |MOVSX ECX, BYTE PTR SS:[ESP+ECX+28]
00402433 | 03CE |ADD ECX, ESI
00402435 | 0FAFCB |IMUL ECX, EBX
00402438 | 03D1 |ADD EDX, ECX
0040243A | 8D48 FB |LEA ECX, DWORD PTR DS:[EAX-5]
0040243D | 8D58 FF |LEA EBX, DWORD PTR DS:[EAX-1]
00402440 | 83E1 0F |AND ECX, 0F
00402443 | 83E3 0F |AND EBX, 0F
00402446 | 0FBE4C0C 28 |MOVSX ECX, BYTE PTR SS:[ESP+ECX+28] 0040244B | 0FBE5C1C 28 |MOVSX EBX, BYTE PTR SS:[ESP+EBX+28]
00402450 | 0FAFCB |IMUL ECX, EBX
00402453 | 03D1 |ADD EDX, ECX
00402455 | 8D48 FE |LEA ECX, DWORD PTR DS:[EAX-2]
00402458 | 8BDF |MOV EBX, EDI
0040245A | 83E1 0F |AND ECX, 0F
0040245D | 83E3 0F |AND EBX, 0F
00402460 | 0FBE4C0C 28 |MOVSX ECX, BYTE PTR SS:[ESP+ECX+28]
00402465 | 0FBE5C1C 28 |MOVSX EBX, BYTE PTR SS:[ESP+EBX+28] 0040246A | 0FAFCB |IMUL ECX, EBX
0040246D | 03D1 |ADD EDX, ECX
0040246F | 8D48 03 |LEA ECX, DWORD PTR DS:[EAX+3]
00402472 | 83E1 0F |AND ECX, 0F
00402475 | 8D58 07 |LEA EBX, DWORD PTR DS:[EAX+7]
00402478 | 83E3 0F |AND EBX, 0F
Trang 50040247B | 0FBE4C0C 28 |MOVSX ECX, BYTE PTR SS:[ESP+ECX+28]
00402480 | 0FBE5C1C 28 |MOVSX EBX, BYTE PTR SS:[ESP+EBX+28]
00402485 | 03CE |ADD ECX, ESI
00402487 | 0FAFCB |IMUL ECX, EBX
0040248A | 8D58 02 |LEA EBX, DWORD PTR DS:[EAX+2]
0040248D | 83E3 0F |AND EBX, 0F
00402490 | 0FBE5C1C 28 |MOVSX EBX, BYTE PTR SS:[ESP+EBX+28]
00402495 | 03DE |ADD EBX, ESI
00402497 | 8D70 04 |LEA ESI, DWORD PTR DS:[EAX+4]
0040249A | 83E6 0F |AND ESI, 0F
0040249D | 0FBE7434 28 |MOVSX ESI, BYTE PTR SS:[ESP+ESI+28] 004024A2 | 0FAFDE |IMUL EBX, ESI
004024A5 | 03CB |ADD ECX, EBX
004024A7 | 8D70 F8 |LEA ESI, DWORD PTR DS:[EAX-8]
004024AA | 8D58 06 |LEA EBX, DWORD PTR DS:[EAX+6]
004024AD | 83E6 0F |AND ESI, 0F
004024B0 | 83E3 0F |AND EBX, 0F
004024B3 | 0FBE7434 28 |MOVSX ESI, BYTE PTR SS:[ESP+ESI+28] 004024B8 | 0FBE5C1C 28 |MOVSX EBX, BYTE PTR SS:[ESP+EBX+28] 004024BD | 0FAFF3 |IMUL ESI, EBX
004024C0 | 03CE |ADD ECX, ESI
004024C2 | 8D70 F9 |LEA ESI, DWORD PTR DS:[EAX-7]
004024C5 | 8D58 05 |LEA EBX, DWORD PTR DS:[EAX+5]
004024C8 | 83E6 0F |AND ESI, 0F
004024CB | 83E3 0F |AND EBX, 0F
004024CE | 0FBE7434 28 |MOVSX ESI, BYTE PTR SS:[ESP+ESI+28] 004024D3 | 0FBE5C1C 28 |MOVSX EBX, BYTE PTR SS:[ESP+EBX+28] 004024D8 | 0FAFF3 |IMUL ESI, EBX
004024DB | 03CE |ADD ECX, ESI
004024DD | 0FAFCA |IMUL ECX, EDX
004024E0 | C1F9 0A |SAR ECX, 0A
004024E3 | 83E1 1F |AND ECX, 1F
004024E6 | 83F9 0A |CMP ECX, 0A
004024E9 | 7D 05 |JGE SHORT ppp.004024F0
004024EB | 83C1 50 |ADD ECX, 50
004024EE | EB 0D |JMP SHORT ppp.004024FD
004024F0 |> 83F9 12 |CMP ECX, 12
004024F3 | 7D 05 |JGE SHORT ppp.004024FA
004024F5 | 83C1 28 |ADD ECX, 28
Trang 6004024F8 | EB 03 |JMP SHORT ppp.004024FD
004024FA |> 83C1 2F |ADD ECX, 2F
004024FD |> 880C28 |MOV BYTE PTR DS:[EAX+EBP], CL
00402500 | 8BC7 |MOV EAX, EDI
00402502 | 8D50 FA |LEA EDX, DWORD PTR DS:[EAX-6]
00402505 | 83FA 10 |CMP EDX, 10
00402508 |.^ 0F8C F0FEFFFF \JL ppp.004023FE
-========Loop=16 times , End loop 2======== -
0040250E | 68 A0814100 PUSH ppp.004181A0 ; ASCII
"0000000000000000"
00402513 | 8D4C24 14 LEA ECX, DWORD PTR SS:[ESP+14]
00402517 | E8 7EBE0000 CALL <JMP.&MFC42.#860>
0040251C | 5F POP EDI
0040251D | 5D POP EBP
0040251E | 33F6 XOR ESI, ESI
00402520 | 5B POP EBX
-=========Start Loop 3 , loop=16=========
-00402521 |> 8A4434 0C MOV AL, BYTE PTR SS:[ESP+ESI+C] ==> lần lượt đưa từng char của Rel Ser vào EAX
00402525 | 8D4C24 04 LEA ECX, DWORD PTR SS:[ESP+4]
00402529 | 50 PUSH EAX
0040252A | 56 PUSH ESI
0040252B | E8 58C10000 CALL <JMP.&MFC42.#5856>
00402530 | 46 INC ESI ==> ESI ++
00402531 | 83FE 10 CMP ESI, 10 ==> so sánh ESI với 10
00402534 |.^ 7C EB JL SHORT ppp.00402521 ==> nếu nhỏ hơn thì tiếp tục vòng lặp
-End loop 3 -
-=====đến đây nhìn sang cửa sổ bên cạnh , ta sẽ thấy Real Ser của c/t sau khi tính toán được đặt trong thanh ghi EAX===== -
00402536 | 8B7424 40 MOV ESI, DWORD PTR SS:[ESP+40]
0040253A | 8D4C24 04 LEA ECX, DWORD PTR SS:[ESP+4]
0040253E | 51 PUSH ECX
0040253F | 8BCE MOV ECX, ESI
00402541 | E8 48C10000 CALL <JMP.&MFC42.#535>
00402546 | B8 01000000 MOV EAX, 1
0040254B | 894424 08 MOV DWORD PTR SS:[ESP+8], EAX
Trang 70040254F | 8D4C24 04 LEA ECX, DWORD PTR SS:[ESP+4]
00402553 | 884424 38 MOV BYTE PTR SS:[ESP+38], AL
00402557 | E8 32BE0000 CALL <JMP.&MFC42.#800>
0040255C | 8D4C24 44 LEA ECX, DWORD PTR SS:[ESP+44]
00402560 | C64424 38 00 MOV BYTE PTR SS:[ESP+38], 0
00402565 | E8 24BE0000 CALL <JMP.&MFC42.#800>
0040256A | 8B4C24 30 MOV ECX, DWORD PTR SS:[ESP+30]
0040256E | 8BC6 MOV EAX, ESI
00402570 | 5E POP ESI
00402571 | 64:890D 00000>MOV DWORD PTR FS:[0], ECX
00402578 | 83C4 38 ADD ESP, 38
0040257B \ C2 0800 RETN 8
-
004025FA | 8B7424 0C MOV ESI, DWORD PTR SS:[ESP+C]
004025FE | 8B4424 08 MOV EAX, DWORD PTR SS:[ESP+8]
- Nhìn sang của sổ bên cạnh, chúng ta thấy 1 vầng hào quang sáng chói hiện ra Vâng đó chính là RS- cái mà chúng ta cần tìm : :kiss:
Code:
ASCII "A5I8A4LQ4X5IK3DN"