00001aa2 245f MOVEA.L (A7)+,A2 00001aa4 4e5e UNLK A6 00001aa6 4e75 RTS 00001aa8 4e56ffe2 L211 LINK A6,#-30 00001aac 48e71c20 MOVEM.L D3-D5/A2,-(A7) 00001ab0 246e0008 MOVEA.L 8(A6),A2 00001ab4 7a00 MOVEQ #0,D5 00001ab6 2f0a MOVE.L A2,-(A7) 00001ab8 4e4fa0c7 TRAP #15,$A0C7 = sysTrapStrLen - Đoạn Code ở đây khá dài, ta cần tìm nơi kết thúc của nó. Nhớ lại lệnh RTS sẽ kết thúc một hàm. Ngay trên đầu nhãn này là một lệnh RTS, vậy để tìm cho nhanh, ta click phải tại lệnh này, chọn: - Lệnh RTS phía dưới, chắc chắn là nơi kết thúc của hàm này.(lúc gọi nhãn, lúc gọi hàm, mỗ hơi phiền nhỉ? ) - Từ đó, ta tóm gọn đầu đuôi của nhãn L211 như sau: 00001aa8 4e56ffe2 L211 LINK A6,#-30 Start 00001aac 48e71c20 MOVEM.L D3-D5/A2,-(A7) 00001ab0 246e0008 MOVEA.L 8(A6),A2 00001ab4 7a00 MOVEQ #0,D5 00001ab6 2f0a MOVE.L A2,-(A7) 00001ab8 4e4fa0c7 TRAP #15,$A0C7 = sysTrapStrLen ………. Đoạn Code ở giữa………. …………………………………… 00001bfe 660c BNE L218 00001c00 102a000b MOVE.B 11(A2),D0 00001c04 b02efff2 CMP.B -14(A6),D0 00001c08 6602 BNE L218 00001c0a 7a01 MOVEQ #1,D5 00001c0c 1005 L218 MOVE.B D5,D0 00001c0e 4cdf0438 MOVEM.L (A7)+,D3-D5/A2 00001c12 4e5e UNLK A6 00001c14 4e75 RTS End - Nhìn kĩ sẽ thấy nguyên đoạn Code này là từ nhãn L211 tới L218 (máy các lão có thể khác). Chúng ta vẫn chưa quen phân tích Code, nhưng nhìn kĩ trước lệnh RTS là : 00001bfe 660c BNE L218 - Nhảy tới: 00001c0c 1005 L218 MOVE.B D5,D0 - Nếu điều kiện ko thỏa, sẽ nhảy tới nhãn L218 và giá trị tại D5 sẽ MOV vào D0. Sau đó trả giá trị này về cho nơi gọi nhãn L211(tức kết thúc hàm này). - Càng kéo lên, càng thấy có nhiều lệnh nhảy tới nhãn này, vậy đây chính là nơi quyết định giá trị của D0 từ D5. Mà theo phân tích trên, ta muốn D0 luôn là 1 để cờ tại A5-75 được bật lên. Và dòng lệnh đó lồ lộ trước mặt: 00001c0a 7a01 MOVEQ #1,D5 - Chỉ khi các lệnh nhảy trên đều ko thực hiện thì D5 mới chứa giá trị 1, và hàm mới trả về D0=1. Như thế, thay vì ép cho lệnh MOV 1 vào D5 xảy ra, tại sao ta ko MOV thẳng 1 vào D0 luôn cho rồi. Do đó cần sửa lệnh 0001c0c 1005 L218 MOVE.B D5,D0 - Thành MOVE.Q #1,D0 . Điều này quá dễ vì ta đã có Opcode của lệnh này: - Bay tới địa chỉ nhãn L218 đi nào: - Opcode đang là 1005, sửa thành 7001: - Save file lại nào: - Cái này phải Test nha, tại tụi mình Patch “chay” , ko qua Debug. - Rồi, mở Emulator lại nào: - Chọn file Patch sau cùng: - Biorhythm Option Register - Okie, vậy là bản Patch cao cấp đã xong xuôi. Còn đây là giao diện trong Palm OS Garnet Simulator 5.4:(nó ko chạy X-Master được) IV- End Tut: - Vâng thưa các lão, có thể Biorhythm không phải là chương trình hay nhưng nó quả là một ví dụ thực hành khá tốt đúng ko? Nhờ nó ta đã từng bước làm quen được với các Tool Cracking trên Palm. Mong là các lão hãy cố gắng nghiên cứu và viết thật nhiều bí kíp hay cho các huynh đệ đồng môn học tập. - Vậy thôi hén, Tàn mỗ gói ghém dao kiếm lại đây, chui vào Cửu Không Vô Giới tiếp… Chân thành cảm ơn sư phụ Gammexane rất nhiều vì đã sáng chế ra bộ võ công lợi hại như thế, và cả Napalm đã công phu dịch lại Tut này. . CMP.B -14 (A6),D0 00 001 c08 6 602 BNE L 218 00 001 c0a 7a 01 MOVEQ #1, D5 00 001 c0c 10 05 L 218 MOVE.B D5,D0 00 001 c0e 4cdf0438 MOVEM.L (A7)+,D3-D5/A2 00 001 c12 4e5e UNLK A6 00 001 c14 4e75 RTS End. 00 001 aa2 245f MOVEA.L (A7)+,A2 00 001 aa4 4e5e UNLK A6 00 001 aa6 4e75 RTS 00 001 aa8 4e56ffe2 L 211 LINK A6,#- 30 00 001 aac 48e71c 20 MOVEM.L D3-D5/A2,-(A7) 00 001 ab0 246e 000 8 MOVEA.L 8(A6),A2 00 001 ab4. 00 001 ab8 4e4fa0c7 TRAP #15 ,$A0C7 = sysTrapStrLen ………. Đoạn Code ở giữa………. …………………………………… 00 001 bfe 660c BNE L 218 00 001 c 00 10 2a 000 b MOVE.B 11 (A2),D0 00 001 c04 b02efff2 CMP.B -14 (A6),D0 00 001 c08