:004997F6 740A je 00499802 * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:004997ED(C) | :004997F8 E886190300 call 004CB183 :004997FD E9401D0000 jmp 0049B542 * Referenced by a (U)nconditional or (C)onditional Jump at Addresses: |:004997CF(C), :004997F6(C) | Từ (1), (2), (3), ta sẽ có ba chỗ cần crack là : 1. Đổi một byte tại RVA 0049F70A (offset 0009EB0A) từ jz thành jnz (74 thành 75). 2. Đổi một byte tại RVA 0049F6A8 (offset 0009EAA8) từ jz thành jnz (74 thành 75). 3. Đổi một byte tại RVA 004997ED (offset 00098BED) từ jz thành jnz (74 thành 75). Chú ý : (3) chỉ được patch khi bạn đã thực hiện xong (1) và (2). Sau đó trở lại GetRight đăng ký. Đăng ký xong mới thực hiện (3) để xoá các nút. Get it and try it, bạn sẽ thích ngay mà he he. Thật ra còn nhiều chuyện để xử lý nó lắm nhưng tôi chỉ bàn đến vấn đề chính thôi, còn như bạn muốn crack tiếp thì nên disable các nút còn lại (các nút liên quan tới đăng ký :D) Hoặc gỡ bỏ dòng Trial Version v v III. How to crack POPCAP Games : 1. TypeSHARK ver 1.00 Ph ầ n m ề m: TypeSHARK ver 1.00 http://www.popcap.com B ả o v ệ : Trial version Công cụ : -Softice 4.xx (công cụ để debug chương trình) -IDA hay W32DASM -Các công cụ Hex Editor (HexWorkshop) Phương pháp crack: patch M ứ c đ ộ ()D ễ (x)V ừ a ()Hơi khó ()R ấ t khó File c ầ n crack WinTS.exe Cracker: Computer_Angel Website: http://www.vietcracks.com 1. Kiểm tra đối tượng: a) Chạy thử WinTS.exe, bạn sẽ thấy những vấn đề sau: + Màn hình intro có dòng chữ “REGISTER TYPESHARK”, “FREETRIAL VERSION” + Khi nhấn vào “REGISTER TYPESHARK”, một hộp thoại nhập Username+Serial hiện lên. Nhập thử bất kì username+pass thì nhận được thông báo “The registration code you have entered is incorrect ” + Sau khi chơi, không ghi tên vào bảng HALL FAME được. + Khi thoát ra, có hiện hộp thoại quảng cáo. b) Dùng bất cứ một hex editor nào đó, load tập tin WinTS.exe vào, tìm thử một vài chuỗi mà bạn đã ghi nhận được ở các bước trên(Ở đây tôi dùng công cụ thông dụng là HexWorkshop 4.00). Ta tìm thử chuỗi “registration code you”, ta tìm được ở vị trí 00111B24 của tập tin. 2. Nhận xét: + WinTS.exe có khả năng Register (vì có hộp thoại đăng ký) + Không bị unpack Lý do là vì bạn có thể tìm được các chuỗi mà bạn thấy trong game. 3. Bắt đầu công việc: a) Dùng IDA để dịch ngược WinTS.exe sang mã máy. Sau khi dịch xong, ta tìm tới Tab “Strings”, nhấn Alt-T để gõ vào chuỗi cần tìm kiếm. Gõ vào chuỗi “The registration code you have”. IDA sẽ nhảy tới vị trí chuỗi cần tìm trong Tab “Strings”. b) Double click vào chuỗi vừa tìm ra đó, bạn sẽ được chuyển tới cửa sổ chứa thông tin sau: aTheRegistratio db 'The registration code you have entered',0Ah .rdata:00511B20 ; DATA XREF: .text:0043EE54 .rdata:00511B20 db 'is incorrect. Please try again.',0 .rdata:00511B67 db 0 ; Như vậy, ta biết được WinTS.exe đọc chuỗi “The registration ” chỉ một lần ở vị trí mã lệnh là 0043EE54. c) Chuyển sang Tab IDA-View (Chứa mã asm của WinTS vừa dịch ngược), nhảy tới vị trí mã lệnh 0043EE54 bằng cách gõ phím “G”, rồi nhập vào 0043EE54 và nhấn Enter, ta được đoạn mã sau: text:0043EE54 push offset aTheRegistratio ; "The registration code you have entered\n" .text:0043EE59 mov byte ptr [ebp-4], 3 .text:0043EE5D call sub_407250 Nhìn lên phía trên 1 xíu, ta thấy có đoạn so sánh .text:0043EE30 push eax .text:0043EE31 call dword ptr [edx+54h] < Lưu ý .text:0043EE34 test al, al .text:0043EE36 jnz short loc_43EE8C < Lưu ý .text:0043EE38 push 1 .text:0043EE3A sub esp, 1Ch .text:0043EE3D mov ecx, esp .text:0043EE3F mov [ebp+8], esp .text:0043EE42 push offset aOk ; "OK" .text:0043EE47 call sub_407250 .text:0043EE4C sub esp, 1Ch .text:0043EE4F mov ecx, esp .text:0043EE51 mov [ebp-14h], esp .text:0043EE54 push offset aTheRegistratio ; "The registration code you have entered\n" d) Vậy chúng ta có 2 vị trí cần lưu ý. Ta phải kiểm tra xem chức năng của 2 vị trí đó là gì bằng cách dùng Softice. Ta kích hoạt Softice, dùng SymBol Loader để load tập tin WinTS.exe vào, và nhấn vào “Load Symbols” trên toolbar để chạy tập tin > Cửa sổ softice debug sẽ hiện lên. Ta đặt break point tại vị trí lệnh cần lưu ý ở trên bằng cách gõ vào BPX 0043EE31 và nhấn F5. Chương trình WinTS sẽ chạy bình thường, chọn “REGISTER TYPESHARK”, nhập username+mã bất kì vào và nhấn OK. Khi đó cửa sổ Softice debug sẽ bật lên ngay tại vị trí 0043EE31, nhấn F10 để chạy lệnh tại ví trí đó, tiếp tục nhấn F10 tới khi vệt sáng dừng lại tại vị trí 0043EE36. Đây là lệnh nhảy khi AL không bằng 0, mà ta thấy AL=0, vậy ta đổi cờ Z bằng cách gõ vào R, và dùng Tab di chuyển con nháy tới hàng ở phía trên cao dưới hàng ESI=xxxxxxxxx . Dùng mũi tên di chuyển con nháy tới chữ Z và nhấn Insert. Để ý, sau khi nhấn xong, ở vị trí lệnh 43EE36 có mũi tên chỉ xuống, đó là biểu thị câu lệnh này sẽ nhảy đến vị trí chỉ định. Ta nhấn F5 và xem kết quả, ta thấy chương trình WinTS có hiển thị như sau: + Dòng chữ “FREE TRIAL version” > “REGISTER VERSION” + Dòng “REGISTER TYPESHARK” o còn nữa. Như vậy, ta có nhận xét: + Hàm call ở vị trí 43EE31 có nhiệm vụ kiểm tra username+password nhập vào và trả về kết quả AL=1 nếu hợp lệ. e) Thoát khỏi WinTS, nhấn vào nút “Load Symbols” để chạy lại 1 lần nữa, cũng nhập lại số serial+user tùy ý.Cửa sổ Softice debug lại hiện ra, lần này bạn nhấn F8 để debug vào trong hàm kiểm tra. Vệt sáng sẽ chuyển sang địa chỉ là 4A3D20, nhấn F9 để đặt break point tại địa chỉ này, sau đó nhấn F5 để chạy chương trình bình thường. f) Thoát khỏi WinTS, nhấn vào nút “Load Symbols” để chạy lại 1 lần nữa, lần này ta thấy màn Softice Debug hiện ra, vệt sáng nằm tại vị trí 4A3D20. > Nhận xét WinTS gọi hàm này khi: + Bắt đầu chạy để kiểm tra, kết quả trả về AL=1 thì có nghĩa đã đăng ký rồi. + Khi chọn mục đăng ký và nhập số serial+username. g) Nhấn F10 để thi hành từng câu lệnh, cho tới khi vệt sáng nằm ngay lệnh RET: .text:004A406F pop esi . :00 4997F6 740A je 00 499 802 * Referenced by a (U)nconditional or (C)onditional Jump at Address: | :00 4997ED(C) | :00 4997F8 E88 619 03 00 call 00 4CB183 :00 4997FD E9 401 D 000 0 jmp 00 49B542. code you have entered',0Ah .rdata :00 511 B 20 ; DATA XREF: .text :00 43EE54 .rdata :00 511 B 20 db 'is incorrect. Please try again.' ,0 .rdata :00 511 B67 db 0 ; Như vậy, ta biết được. esp, 1Ch .text :00 43EE3D mov ecx, esp .text :00 43EE3F mov [ebp+8], esp .text :00 43EE42 push offset aOk ; "OK" .text :00 43EE47 call sub_ 407 2 50 .text :00 43EE4C sub esp, 1Ch .text :00 43EE4F