- Trong References của Form nay chỉ có một mục... - Ta cũng thấy chương trình sẽ MOV 1 vào ô nhớ này trước khi có thông báo “đã đăng kí !”.. Và cờ này sẽ được bật suốt khi chương trình đ
Trang 1- Dòng thứ 2, nếu chưa đăng kí, lệnh nhảy sẽ tới nhãn L222, xóa cờ này đi
- Đây có thể là mấu chốt của vấn đề.Giờ ta chọn tab RCP, Find chuỗi: ”Enter your
registration code” Dừng tại đây
- Như thế, phần nhập Registration Code là một Form, có ID 1200.Cùng một cách
đã làm ở những bước trước, ta được:
FORM ID 1200 AT (2 2 156 156) ID của Form này
MODAL
BEGIN
TITLE "Registration"
LABEL "Enter your registration code :" ID 1201 AT (6 102) FONT 1
FIELD ID 1202 AT (14 118 128 16) EDITABLE SINGLELINE UNDERLINED LEFTALIGN MAXCHARS 12 FONT 2 BUTTON "OK" ID 1203 AT (64 140 36 12) LEFTANCHOR FONT 0
BUTTON "Cancel" ID 1204 AT (107 140 36 12) LEFTANCHOR FONT 0
FORMBITMAP AT (4 30) BITMAP 1000
LABEL "Biorhythm for Palm OS®" ID 1206 AT (22 14) FONT 2
LABEL "Registration removes\013launching progress bar." ID 1207 AT (40 35) FONT 1
LABEL "Get registration code at :\013 www.mobilisoft.com" ID 1208 AT (14 70) FONT 1
GRAFFITISTATEINDICATOR ID 147 142
BUTTON "Keyboard" ID 1210 AT (7 140 50 12) LEFTANCHOR FONT 0
END
Trang 2- Trong References của Form nay chỉ có một mục Double-Click vào nó, tới Code sau:
00000a16 584f ADDQ.W #4,A7
00000a18 670e BEQ L52
00000a1a 3f3c0514 MOVE.W #1300!$514,-(A7) ;
Registration
sysTrapFrmInitForm
00000a22 2448 MOVEA.L A0,A2
00000a24 544f ADDQ.W #2,A7
00000a26 602c BRA L53
00000a28 3f3c04b0 L52 MOVE.W #1200!$4b0,-(A7) ;
Registration
sysTrapFrmInitForm
- Ở đây cũng có kiểm tra(màu vàng), nếu TRUE thì nhày tới nhãn L52, ngược lại thì gọi Form ID 1300 Xem Form ID 1300 là cái gì nào:
Trang 3- Lệnh thứ 2 ta quan tâm là chỗ màu đỏ:
- Nó sẽ làm cái wái gì đấy với ô nhớ tại địa chỉ A5-75
- Ta đã biết A5-75 là một cờ, nếu nó bật lên 1, tức là chương trình đã có Valid Serial Ngược lại thì chưa có
- Ta cũng thấy chương trình sẽ MOV 1 vào ô nhớ này trước khi có thông báo “đã đăng kí !” Và cờ này sẽ được bật suốt khi chương trình đang chạy Ngoài ra cũng
có chỗ sẽ xóa cờ này đi nếu serial nhập vào là sai Quay lại đoạn Code bung NAG nào, Alert ID 1100:
00001c52 4fef000c LEA 12(A7),A7
00001c56 6712 BEQ L222
00001c58 1b7c0001ffb5 MOVE.B #1,-75(A5)
00001c5e 3f3c03e8 MOVE.W #1000!$3e8,-(A7) ; Registered
!
sysTrapFrmAlert
00001c68 600e BRA L223
FORM ID 1300 AT (2 2 156 156)
MODAL
BEGIN
TITLE "Registration"
LABEL "You can check for updates at :\013 www.mobilisoft.com" ID 1301 AT (6 102) FONT 1 BUTTON "Close" ID 1303 AT (55 135 46 12) LEFTANCHOR FONT 0
FORMBITMAP AT (4 30) BITMAP 1000
Trang 400001c6a 422dffb5 L222 CLR.B -75(A5)
00001c6e 3f3c044c MOVE.W #1100!$44c,-(A7) ; Not registered !
sysTrapFrmAlert
- Trước lệnh so sánh để nhảy, cũng có TST.B, khi đăng kí chương trình, nó cũng
sẽ làm gì đó với thanh ghi D0 Nếu kết quả trả về sai- tức lệnh nhảy ko xảy ra, cờ tại A5-75 sẽ được bật Như thế, ta luôn muốn cờ tại A5-75 được bật Giờ hãy tìm các nơi ô nhớ này được dùng tới
- Có 6 vị trí liên quan tới A5-75:
- Tham chiếu tới từng em, gom lại được như sau:
Trang 51) 00000a12 4a2dffb5 TST.B -75(A5)
2) 00000c8e 1b40ffb5 MOVE.B D0,-75(A5)
3) 00000f5e 422dffb5 CLR.B -75(A5)
4) 00001c58 1b7c0001ffb5 MOVE.B #1,-75(A5)
5) 00001c6a 422dffb5 L222 CLR.B -75(A5)
6) 00001c78 102dffb5 L223 MOVE.B -75(A5),D0
- Dòng 1) sẽ kiểm tra giá trị tại A5-75, để xem nên hiện Form đăng kí hay Form thông báo “Already Registered !”(khác Alert “Registered”)
- Dòng 3) sẽ xóa cờ tại A5-75 nếu số Serial nhập vào sai
- Dòng 4), 5) sẽ bật cờ tại A5-75
- Dòng 6) đưa giá trị tại A5-75 vào thanh ghi D0
- Và dòng 2) chính là nơi ta đang tìm Đưa giá trị của D0 vào A5-75
- D0 chứa địa chỉ một ô nhớ khác, cũng có thể coi đây là một biến Lúc là 0, lúc là 1(suy ra như thế vì nó MOV vào A5-75) Ta sẽ xem đoạn code tại dòng 2) như thế nào:
00000c80 2f0b MOVE.L A3,-(A7)
sysTrapFrmDrawForm
00000c86 486dffdc PEA -36(A5)
00000c8e 1b40ffb5 MOVE.B D0,-75(A5)
00000c92 4fef000c LEA 12(A7),A7
00000c96 6608 BNE L71
- Như đã phân tích ở trên, việc đã đăng kí hay chưa tùy thuộc vào cờ tại A5-75 hay nói chính xác là tại D0 Vậy ta cần biết chuyện gì xảy ra với D0 trước khi tới dòng lệnh XANH Xem ngay trên nó nào:
- Lệnh này nhảy tới một subroutine hay một hàm(giống lệnh CALL nhỉ?) Ta cũng thấy nó trước đoạn code bung NAG ,xem lại Alert ID 1100:
Trang 600001c4c 4ebafe5a JSR L211
00001c58 1b7c0001ffb5 MOVE.B #1,-75(A5)
;Registered !
sysTrapFrmAlert
00001c6a 422dffb5 L222 CLR.B -75(A5)
00001c6e 3f3c044c MOVE.W #1100!$44c,-(A7) ; Not registered !
- Như thế, ở nhãn L211(máy các lão có thể khác) đã có gì xảy ra với D0 Click phải tại lệnh nhảy này, chọn:
- Ta sẽ bay tới nhãn này: