Tham khảo tài liệu 'cracker handbook part 116', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả | Posted by moonbaby Dec 16 2003 03 01 PM Homepage http CrackMe Fant0m4 Coder fantOm MASM32 TASM32 Type Name Serial Packed N A Crack Tool OllyDbg Unpack Tool N A Request Correct Serial - Patch for all Serial Rule N A Note N A Đặt Breakpoint tại hai điểm 00401217 . E8 62010000 CALL JMP. GetDlgItemT extA 0040122E . E8 4B010000 CALL JMP. GetDlgItemT extA Trace xuống một chút ta gặp đoạn mã sau 00401236 . E8 BE000000 cALl 0040123B . 83F8 00 CMP EAX 0 0040123E . 74 15 JNZ SHORT Patch ở đây cho mọi Serial Điều này có nghĩa là trong lệnh CALL sẽ là một quá trình xử lý và trả giá trị về cho EAX. Nếu đúng thì EAX sẽ bằng 0 còn nếu sai thì sẽ có giá trị khác 0 và sẽ nhảy đến thông báo sai. Trace vào trong lệnh này ta thấy đoạn mã sau 0040130E . B3 1A Mov BL 1A EBX 1A 00401310 803E 00 CMP BYTE PTR DS ESI 0 Kiểm tra xem chuỗi đã kết thúc chưa 00401313 . 74 15 JE SHORT Nhảy nếu kết thúc 00401315 . 8A06 MOV AL BYTE PTR DS ESI Đưa từng ký tự U vào EAX 00401317 . 02C1 ADD AL CL EAX ECX 9 ban đầu ECX 0 ECX là biến đếm 00401319 . 32C1 XOR AL CL EAX xor ECX 0040131B . F6F3 DIV BL Xem giải thích 0040131D . 66 C1E8 08 SHR AX 8 Xem giải thích 00401321 . 04 41 ADD AL 41 EAX 41h 00401323 . 8807 MOV BYTE PTR DS EDI AL Xem giải thích. 00401325 . 47 INC EDI 00401326 . 46 lNC ESI 00401327 . 41 lNC ECX 00401328 .A EB E6 JMP SHORT Đối với lệnh DIV BL. Đây là một lệnh chia không dấu. Phần chia nguyên của kết quả chia không lấy dấu được đặt vào AL phần chia dư của phép chia cũng không lấy dấu và đặt kết quả vào AH. Gỉa sử ta lấy 113 71h ASCII o chia cho 26 1A sẽ cho giá trị nguyên là 4 và số dư là 9. Chuyển sang hệ hex ta có là 4 và 9 như vậy AL 04 phần chia nguyên và AH 09 phần chia dư . Vậy EAX 00000904 Đây là một phép dịch phải đơn giản như trong chương trình này ta tó thể hiểu là loại bỏ AL. Như vậy sau phép toán này thì EAX 00000009 Giá trị sau .