*** Vẫn là những động tác quen thuộc cuối cùng :laugh: , cứ thế ta làm : tắt Ollydbg , chạy chương trình , nhập vào : Email :hoa_dong_noi_06@yahoo.com Serial : A5I8A4LQ4X5IK3DN Hoặc : Email :REA-cRaCkErTeAm@yahoo.com Serial : WGMUVJ6N5QKX5MSI OK ! Done ! :laugh: Enjoy ! Chúc thành công ! :smiling: III/ End Tut : - Finished : 01/12/2004 - Thank to my family, Computer_Angel, Moonbaby , Benina , QHQCrker , Kienmanowar , Nini all REA‘s members, HacNho, Zombie , RongChauA, all my friend, and YOU . :wub: :) REA - Reverse Engineering Associatinon SoftWare Homepage : http://www.jklnsoft.com Production : JKLNSoft , Inc SoftWare : Picture Finder Pro v2.6 Copyright by : Copyright (C) 2004 JKLNSoft.com Packed : N/A Language : Microsoft Visual C++ 6.0 Crack Tools : OllyDbg 1.09d, PEiD v0.92 Unpack tools : N/A Request : Real Serial . Introduction : Picture Finder Pro v2.6 I/ Information : - Đồ nghề các bạn để hết đâu rùi , lôi ra đi nào . Now , Let's go ! :) Như được lập trình sẵn cứ thế ta làm : Dùng PEid v0.92 để Detect , chúng ta biết chương trình ko bị pack & được viết bằng Microsoft Visual C++ 6.0 . Phù thế là ko phải unpack > sướng . hihiiii :) - Vẫn là động tác quen thuộc : Chạy thử chương trình , chúng ta thấy hiện lên một 1 Dialog Box : “Wellcome to Picture Finder Pro”. Nhìn xuống dưới 1 chút ta thấy dòng : "Try to register " , nhìn thấy mà tức cả mắt :wacko: . Nó đồng nghĩa với việc họ chỉ cho chúng ta dùng thử 14 days & limit 50 files nếu chúng ta ko Register (tức là ta phải đưa money cho họ đó bạn ) . Đưa money để buy soft , chúng ta đâu có thói quen này . Và lần này cũng vậy thôi , thông cảm nhé hãng Jklnsoft . "no Money, no Register , and Free all " ==> đó là mục tiêu của chúng ta . Hihiiiii ! :P - OK ! típ nhé . Ở đây ta còn thấy 1 button : Enter Code . click vào đó , chúng ta sẽ điền các thông tin cần thiết xem nó bảo sao . Ở đây mình nhập là : Email :hoa_dong_noi_06@yahoo.com & Code : 0361985 . Nhấn OK , một cái Nag văng ra , nó làm ta mừng hụt : "Thanks for Registratinon. Please restart Picture Finder Pro ". Nhấn tiếp OK , mở lại chương trình ta vẫn thấy hiện Dialog box bắt đăng ký :(( . 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á :sick: . Để 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 PictureF:.text Address Disassembly Text string 00408ACA PUSH PictureF.0047E9B4 ASCII "Email" 00408AD3 PUSH PictureF.0047E9A0 ASCII "Registration Info" 00408AE5 PUSH PictureF.0047E98C ASCII "Registration Code" 00408AEE PUSH PictureF.0047E9A0 ASCII "Registration Info" 00408B9B PUSH PictureF.0047E398 ASCII "Analyse.dll" 00408D47 PUSH PictureF.0047E9E0 ASCII "aaaaaaaa" 00408EAE PUSH PictureF.0047E9CC ASCII "0000000000000000" *** 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 ” , ta sẽ thấy Procedure này được gọi bởi 2 hàm Call : Code: 00408B35 CALL PictureF.00408D00 00408C51 CALL PictureF.00408D00 Click chuột phải vào cửa sổ này chọn : Set breakpoint on very command . Quay trở lại Olly II/ Craking : ***OK, sau khi đặt BP tại 2 hàm Call đó , 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: 00408B35 |. E8 C6010000 CALL PictureF.00408D00 ; \PictureF.00408D00 ==> Set BP . We’re here . Trace Into 00408D00 /$ 6A FF PUSH -1 00408D02 |. 68 071E4600 PUSH PictureF.00461E07 ; SE handler installation 00408D07 |. 64:A1 0000000>MOV EAX, DWORD PTR FS:[0] 00408D0D |. 50 PUSH EAX 00408D0E |. 64:8925 00000>MOV DWORD PTR FS:[0], ESP 00408D15 |. 83EC 2C SUB ESP, 2C 00408D18 |. C74424 04 000>MOV DWORD PTR SS:[ESP+4], 0 00408D20 |. 8D4424 40 LEA EAX, DWORD PTR SS:[ESP+40] 00408D24 |. 8D4C24 00 LEA ECX, DWORD PTR SS:[ESP] 00408D28 |. 50 PUSH EAX 00408D29 |. C74424 38 010>MOV DWORD PTR SS:[ESP+38], 1 00408D31 |. E8 D1720300 CALL PictureF.00440007 00408D36 |. 8B4C24 00 MOV ECX, DWORD PTR SS:[ESP] ==> đưa Input vào ECX . 00408D3A |. C64424 34 02 MOV BYTE PTR SS:[ESP+34], 2 00408D3F |. 8B41 F8 MOV EAX, DWORD PTR DS:[ECX-8] 00408D42 |. 83F8 10 CMP EAX, 10 00408D45 |. 7D 0E JGE SHORT PictureF.00408D55 00408D47 |. 68 E0E94700 PUSH PictureF.0047E9E0 ; ASCII "aaaaaaaa" 00408D4C |. 8D4C24 04 LEA ECX, DWORD PTR SS:[ESP+4] 00408D50 |. E8 19790300 CALL PictureF.0044066E 00408D55 |> 56 PUSH ESI 00408D56 |. 8B7424 04 MOV ESI, DWORD PTR SS:[ESP+4] ==> đưa Input vào ESI 00408D5A |. 8D4424 1C LEA EAX, DWORD PTR SS:[ESP+1C] 00408D5E |. 33D2 XOR EDX, EDX ==> bắt đầu tính toán với EDX=0 00408D60 |. 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====== 00408D62 |> 8D4C14 1C /LEA ECX, DWORD PTR SS:[ESP+EDX+1C] 00408D66 |. 8A040E |MOV AL, BYTE PTR DS:[ESI+ECX] ==> đưa S[0] vào AL 00408D69 |. 3C 61 |CMP AL, 61 ==> so sánh S[0] với 61 00408D6B |. 8801 |MOV BYTE PTR DS:[ECX], AL 00408D6D |. 7C 08 |JL SHORT PictureF.00408D77 ==> nhảy nếu nhỏ hơn 00408D6F |. 3C 66 |CMP AL, 66 ==> so sánh S[0] với 66 00408D71 |. 7F 04 |JG SHORT PictureF.00408D77 ==> nhảy nếu lớn hơn 00408D73 |. 24 CE |AND AL, 0CE ==> nếu nhỏ hơn thì And tiếp AL với 0CE 00408D75 |. 8801 |MOV BYTE PTR DS:[ECX], AL 00408D77 |> 8A01 |MOV AL, BYTE PTR DS:[ECX] ==> đưa S[0] vào AL 00408D79 |. 3C 41 |CMP AL, 41 ==> so sánh S[0] với 41 00408D7B |. 7C 08 |JL SHORT PictureF.00408D85 ==> nhảy nếu nhỏ hơn 00408D7D |. 3C 46 |CMP AL, 46 ==> so sánh S[0] với 46 00408D7F |. 7F 04 |JG SHORT PictureF.00408D85 ==> nhảy nếu lớn hơn 00408D81 |. 2C 42 |SUB AL, 42 ==> nếu nhỏ hơn thì tiếp tục trừ AL cho 42 00408D83 |. EB 02 |JMP SHORT PictureF.00408D87 00408D85 |> 2C 32 |SUB AL, 32 ==> trừ tiếp AL cho 32 00408D87 |> 42 |INC EDX ==> tăng EDX lên 1 00408D88 |. 8801 |MOV BYTE PTR DS:[ECX], AL 00408D8A |. 83FA 10 |CMP EDX, 10 ==> so sánh EDX với 10 00408D8D |.^ 7C D3 \JL SHORT PictureF.00408D62 ==> tiếp tục vòng lặp nếu nhỏ hơn . =======lặp 16 lần thì check xong & End Loop1====== - 00408D8F |. 53 PUSH EBX 00408D90 |. 55 PUSH EBP 00408D91 |. 8D6C24 14 LEA EBP, DWORD PTR SS:[ESP+14] 00408D95 |. 57 PUSH EDI 00408D96 |. B8 06000000 MOV EAX, 6 00408D9B |. 83ED 06 SUB EBP, 6 ========bắt đầu vòng lặp thứ 2 để tạo Rel Ser======== 00408D9E |> 8D70 FA /LEA ESI, DWORD PTR DS:[EAX-6] 00408DA1 |. 8BD8 |MOV EBX, EAX 00408DA3 |. 8BCE |MOV ECX, ESI 00408DA5 |. 83E3 0F |AND EBX, 0F 00408DA8 |. 83E1 0F |AND ECX, 0F 00408DAB |. 8D78 01 |LEA EDI, DWORD PTR DS:[EAX+1] 00408DAE |. 0FBE5C1C 28 |MOVSX EBX, BYTE PTR SS:[ESP+EBX+28] 00408DB3 |. 0FBE540C 28 |MOVSX EDX, BYTE PTR SS:[ESP+ECX+28] 00408DB8 |. 8D48 FC |LEA ECX, DWORD PTR DS:[EAX-4] 00408DBB |. 03D6 |ADD EDX, ESI 00408DBD |. 83E1 0F |AND ECX, 0F 00408DC0 |. 0FBE4C0C 28 |MOVSX ECX, BYTE PTR SS:[ESP+ECX+28] 00408DC5 |. 0FAFD1 |IMUL EDX, ECX 00408DC8 |. 8D48 FD |LEA ECX, DWORD PTR DS:[EAX-3] 00408DCB |. 83E1 0F |AND ECX, 0F 00408DCE |. 0FBE4C0C 28 |MOVSX ECX, BYTE PTR SS:[ESP+ECX+28] 00408DD3 |. 03CE |ADD ECX, ESI 00408DD5 |. 0FAFCB |IMUL ECX, EBX 00408DD8 |. 03D1 |ADD EDX, ECX 00408DDA |. 8D48 FB |LEA ECX, DWORD PTR DS:[EAX-5] 00408DDD |. 8D58 FF |LEA EBX, DWORD PTR DS:[EAX-1] 00408DE0 |. 83E1 0F |AND ECX, 0F 00408DE3 |. 83E3 0F |AND EBX, 0F 00408DE6 |. 0FBE4C0C 28 |MOVSX ECX, BYTE PTR SS:[ESP+ECX+28] 00408DEB |. 0FBE5C1C 28 |MOVSX EBX, BYTE PTR SS:[ESP+EBX+28] 00408DF0 |. 0FAFCB |IMUL ECX, EBX 00408DF3 |. 03D1 |ADD EDX, ECX 00408DF5 |. 8D48 FE |LEA ECX, DWORD PTR DS:[EAX-2] 00408DF8 |. 8BDF |MOV EBX, EDI 00408DFA |. 83E1 0F |AND ECX, 0F 00408DFD |. 83E3 0F |AND EBX, 0F 00408E00 |. 0FBE4C0C 28 |MOVSX ECX, BYTE PTR SS:[ESP+ECX+28] 00408E05 |. 0FBE5C1C 28 |MOVSX EBX, BYTE PTR SS:[ESP+EBX+28] 00408E0A |. 0FAFCB |IMUL ECX, EBX 00408E0D |. 03D1 |ADD EDX, ECX 00408E0F |. 8D48 03 |LEA ECX, DWORD PTR DS:[EAX+3] 00408E12 |. 83E1 0F |AND ECX, 0F 00408E15 |. 8D58 07 |LEA EBX, DWORD PTR DS:[EAX+7] 00408E18 |. 83E3 0F |AND EBX, 0F 00408E1B |. 0FBE4C0C 28 |MOVSX ECX, BYTE PTR SS:[ESP+ECX+28] 00408E20 |. 0FBE5C1C 28 |MOVSX EBX, BYTE PTR SS:[ESP+EBX+28] 00408E25 |. 03CE |ADD ECX, ESI 00408E27 |. 0FAFCB |IMUL ECX, EBX 00408E2A |. 8D58 02 |LEA EBX, DWORD PTR DS:[EAX+2] . Code: 00 408 B35 |. E8 C6 01 0 00 0 CALL PictureF .00 408 D 00 ; PictureF .00 408 D 00 ==> Set BP . We’re here . Trace Into 00 408 D 00 /$ 6A FF PUSH -1 00 408 D02 |. 68 07 1E4 600 PUSH PictureF .00 461E07 ;. 00 408 D07 |. 64:A1 00 000 00& gt;MOV EAX, DWORD PTR FS: [0] 00 408 D0D |. 50 PUSH EAX 00 408 D0E |. 64:8925 00 000 >MOV DWORD PTR FS: [0] , ESP 00 408 D15 |. 83EC 2C SUB ESP, 2C 00 408 D18 |. C74424 04 . 00 408 B9B PUSH PictureF .00 47E398 ASCII "Analyse.dll" 00 408 D47 PUSH PictureF .00 47E9E0 ASCII "aaaaaaaa" 00 408 EAE PUSH PictureF .00 47E9CC ASCII " ;00 000 000 000 000 00& quot; *** Theo