Nhấn F9 để chạy chương trình và chúng ta sẽ BP tại địa chỉ trên Chúng ta từ từ lần theo dấu vết này cho tới khi chúng ta nhận thấy ý nghĩa chương trình đang tạo ra một lỗi, dùng F8 (bởi vì những hàm này không quan trọng đối với chúng ta) Khi mà bạn tới đây, bạn sẽ thấy một vùng rất quan trọng đối với chúng ta. Lệnh nhảy JMP tại địa chỉ 005489AD sẽ nhảy qua vùng CRC Check, do vậy chúng ta phải làm cho lệnh nhảy không bao giờ xảy ra. Trên lệnh này chúng ta có vài lệnh nhảy có điều kiện. Một trong số chúng sẽ cần được patch để không bị nhảy qua vùng CRC check, ví dụ như lệnh nhảy sau đây : Sẽ có 1 vấn đề, nó sẽ nhẩy trực tiếp tới lệnh JMP. Vì vậy bằng cách dễ dàng “Nulling” the Jump chúng ta sẽ vượt qua nó. Có hai cách để NULL 1. NOP lệnh nhảy có điều kiện này. 2. Đặt một byte 00 vào lệnh, ví dụ như với lện trên chúng ta chuyển 7E09 thành 7E00, dường như tương tự một lệnh NOP. Do vậy lệnh nhảy sẽ xảy ra nhưng thay vì nhảy tới 9byte thì sẽ nhảy tới lệnh đứng ngay sau nó. Ở đây tôi chọn cách thứ 2. Chúng ta có thể thực hiện bằng cách chuột phải vào lệnh nhảy và follow in dump Nhìn vào cửa số hex dump Tại byte mang giá trị “09”, nhấn “Spacebar” Sửa giá trị “09” thành “00” Sau đó nhấn OK ! Và nhìn vô cửa sổ CPU của Olly bạn sẽ thấy lệnh nhảy thay đổi ra sao Vậy là hoàn thành … nhưng đó mới chỉ là bắt đầu :(. Tiếp tục lần theo bằng F8, cho tới khi chúng ta tới một vùng quan trọng khác. Giống như hình dưới đây, bạn sẽ đi đến CRC check và qua nó, sau đó tới một vài lệnh nhảy có điều kiện, chúng rất quan trọng :). Chúng ta đang ở đây, chúng ta cần cái lệnh tại địa chỉ 00548A5D này nhảy. Vì vậy thực hiện nó. Nếu tại đây không nhảy chúng ta phải làm cho nó nhảy … nghe có vẻ trừu tượng há … ;-) Nhưng khi ta trace qua nó, lệnh nhảy đã được thực hiện, vậy có nghĩa là chúng ta không cần patch tại đây, chúng ta tiếp tục tới vùng khác : Tại đây có thể các bạn có thể đoán được lệnh nhảy tại địa chỉ 00548A85 phải được thực hiện (tức là phải nhảy). Ở đây có nhiều cách giải quyết vấn đề này, ở đây cách của tôi là MOV 3F thay cho lệnh so sánh, do vậy mà không làm xáo trộn CRC Check, xem hình dưới đây để biết tôi đã làm gì : Tôi đã đặt giá trị 3F vào vùng nhớ được trỏ như thể nó đã ở đó, cộng với tôi đã làm cho nó nhảy JUMP … (ở đây người dịch cũng chưa hiểu tại sao tác giả làm thực hiện như vậy, có lẽ để có thể hiểu được chúng ta cần phải hiểu thêm về CRC check). Chúng ta có thể hy vọng là đã kết thúc CRC Check, tiếp tục trace F8 tới khi chúng ta tới điểm sau: Tôi biết là chúng ta đã bỏ qua một vài điều quan trọng. Nhưng hãy tin tôi, chúng không nắm giữ giá trị quan trọng nào cả. Tất cả những gì chúng ta cần là những patch trên cộng với cái tiếp theo này. Chúng ta thấy Move EBP-1 vào AL, nếu bạn trace qua bạn sẽ thấy nó moves giá trị 0. Tất nhiên đó không phải giá trị ta muốn, cái chúng ta muốn là giá trị 1. Chúng ta sẽ thực hiện như sau: Chúng ta sẽ thỏa mãn lệnh JNZ sau khi chúng ta thực hiện lệnh RETN Sau khi patch, tiếp tục trace qua lệnh JNZ . có 1 vấn đề, nó sẽ nhẩy trực tiếp tới lệnh JMP. Vì vậy bằng cách dễ dàng “Nulling” the Jump chúng ta sẽ vượt qua nó. Có hai cách để NULL 1. NOP lệnh nhảy có điều kiện này. 2. Đặt một byte 00 . follow in dump Nhìn vào cửa số hex dump Tại byte mang giá trị 09 ”, nhấn “Spacebar” Sửa giá trị 09 ” thành 00 ” Sau đó nhấn OK ! Và nhìn vô cửa sổ CPU của Olly bạn sẽ thấy. có điều kiện này. 2. Đặt một byte 00 vào lệnh, ví dụ như với lện trên chúng ta chuyển 7E09 thành 7E 00, dường như tương tự một lệnh NOP. Do vậy lệnh nhảy sẽ xảy ra nhưng thay vì nhảy tới 9byte