Nếu hợp lệ thì set giá trị EAX=1 và lệnh nhảy tại địa chỉ 0041D2E4 được thực thi; còn không thì EAX=0, lệnh nhảy đó không được thực thi và sẽ bắn nag.. Tại đây chúng ta có 2 phương án p
Trang 10041D300 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C]
0041D304 50 PUSH EAX
0041D305 68 34964300 PUSH #1_VIDEO.00439634 ; ASCII
"License To: %s"
0041D30A 51 PUSH ECX
0041D30B E8 DABB0000 CALL <JMP.&MFC42.#2818>
0041D310 8B5424 18 MOV EDX,DWORD PTR SS:[ESP+18]
0041D314 83C4 0C ADD ESP,0C
0041D317 8BCE MOV ECX,ESI
0041D319 6A 40 PUSH 40
0041D31B 68 28964300 PUSH #1_VIDEO.00439628 ; ASCII
"Thank you"
0041D320 52 PUSH EDX
0041D321 E8 BEBB0000 CALL <JMP.&MFC42.#4224>
0041D326 57 PUSH EDI
0041D327 B9 C89D4300 MOV ECX,#1_VIDEO.00439DC8
0041D32C E8 DBB70000 CALL <JMP.&MFC42.#858>
0041D331 55 PUSH EBP
0041D332 B9 CC9D4300 MOV ECX,#1_VIDEO.00439DCC
0041D337 E8 D0B70000 CALL <JMP.&MFC42.#858>
0041D33C 8B07 MOV EAX,DWORD PTR DS:[EDI]
0041D33E 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C]
0041D342 50 PUSH EAX
0041D343 68 18964300 PUSH #1_VIDEO.00439618 ; ASCII
"(License To:%s)"
0041D348 51 PUSH ECX
0041D349 E8 9CBB0000 CALL <JMP.&MFC42.#2818>
0041D34E 83C4 0C ADD ESP,0C
0041D351 8D5424 0C LEA EDX,DWORD PTR SS:[ESP+C]
0041D355 8D4424 10 LEA EAX,DWORD PTR SS:[ESP+10]
0041D359 52 PUSH EDX
0041D35A 68 FC954300 PUSH #1_VIDEO.004395FC ; ASCII
"#1 Video Converter 3.8.3 "
Tại địa chỉ 0041D2DA ta có hàm kiểm tra thông tin đăng ký : CALL
#1_VIDEO.0041CD60 Nếu hợp lệ thì set giá trị EAX=1 và lệnh nhảy tại địa chỉ 0041D2E4 được thực thi; còn không thì EAX=0, lệnh nhảy đó không được thực thi
và sẽ bắn nag Oki , vậy là chúng ta đã hiểu cơ chế bắn nag của chương trình Tại đây chúng ta có 2 phương án patch chương trình
Trang 2Phương án 1, chúng ta sẽ patch lệnh nhảy tại địa chỉ 0041D2E4 từ JNZ SHORT
#1_VIDEO.0041D2FE thành JMP SHORT #1_VIDEO.0041D2FE Tức là với bất
kỳ giá trị nào của thanh ghi EAX thì đều nhảy tới thông báo đăng ký thành công Chúng ta thử tiến hành thử phương án này xem sao Nhấn Space Bar tại địa chỉ 0041D2E4, xuất hiển cửa sổ như hình dưới đây :
Tiến hành việc sửa như hình, và nhấn Assemble Sau đó chúng ta tiến hành save những thay đổi ra một file, chẳng hạn như Patch_1 exe Chuột phải tại cửa sổ code, chọn mục trên pop-up menu như hình dưới đây :
Một cửa sổ xuất hiện :
Nhấn tiếp Copy all, xuất hiện cửa sổ sau đây :
Trang 3Nhấp chuột phải trên cửa sổ này, chọn Save file để lưu ra một file khác (Patch_1 exe)
Chạy file Patch_1 exe, nhập vào Name/Serial , nhấn OK Waa … waa, một thông báo ”License To : Name” Có lẽ là chúng ta đã patch đúng rồi chăng ? Các bạn chớ vội mừng, hãy tắt chương trình đi và khởi động lại xem sao Hic … hic ta thấy tiêu
đề chương trình là trial version, 50% conversion, như vậy có nghĩa là vào lúc bắt đầu, chương trình sẽ test lại đăng ký, đây là một kỹ thuật anti patching, và khi bạn đăng ký chương trình chỉ chấp nhận đăng ký đó trong phiên làm việc hiện thời Load file Patch_1 exe trong Olly, chúng ta tìm được chuỗi trial version, 50% conversion tại địa chỉ 00422ADD, lần lên một chút chúng ta sẽ thấy hàm kiểm tra
CALL #1_VIDEO.0041CD60
Code:
00422A77 E8 E4A2FFFF CALL #1_VIDEO.0041CD60 ;<== gọi hàm test
00422A7C 83C4 08 ADD ESP,8
00422A7F 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
00422A83 85C0 TEST EAX,EAX
00422A85 74 4C JE SHORT #1_VIDEO.00422AD3 ; [ /b] <== patch here[/b]
00422A87 A1 C89D4300 MOV EAX,DWORD PTR DS:[439DC8]
00422A8C 50 PUSH EAX
00422A8D 68 18964300 PUSH #1_VIDEO.00439618 ; ASCII
"(License To:%s)"
00422A92 51 PUSH ECX
00422A93 E8 52640000 CALL <JMP.&MFC42.#2818>
00422A98 83C4 0C ADD ESP,0C
00422A9B 8D5424 10 LEA EDX,DWORD PTR SS:[ESP+10]
00422A9F 8D4424 18 LEA EAX,DWORD PTR SS:[ESP+18]
Trang 400422AA3 52 PUSH EDX
00422AA4 68 FC954300 PUSH #1_VIDEO.004395FC ; ASCII
"#1 Video Converter 3.8.3 "
…………
00422AD0 51 PUSH ECX
00422AD1 EB 1D JMP SHORT #1_VIDEO.00422AF0
00422AD3 > 68 FC954300 PUSH #1_VIDEO.004395FC ; ASCII
"#1 Video Converter 3.8.3 "
00422AD8 E8 7B5F0000 CALL <JMP.&MFC42.#860>
00422ADD 68 DC984300 PUSH #1_VIDEO.004398DC ; ASCII
"(trial version, 50% conversion)"
Tại địa chỉ 00422A85, ta sẽ patch lệnh nhảy thành lệnh NOP Làm tương tự như trên chúng ta, sẽ lưu ra file Patch_1_1 exe Chạy thử Patch_1_1 exe, ta sẽ thấy chúng ta đã qua được bước kiểm tra lúc chương trình mới khởi động, và chương trình đã được đăng ký với bất kỳ tên nào bạn nhập vào
Kết luận về cách patch thứ nhất :
Chúng ta sẽ patch tại 2 địa chỉ, 0041D2E4 và 00422A85 thành :
JMP SHORT #1_VIDEO.0041D2FE
NOP
Phương án 2
Đặt BP tại vị trí chương trình gọi hàm kiểm tra đăng ký của chúng ta
Code:
0041D2DA E8 81FAFFFF CALL #1_VIDEO.0041CD60 ; <== gọi hàm test , set BP here
F9 để chạy prog, nhập N/S, nhấn OK, chương trình sẽ ice tại BP Nhấn F7 (trace into) ta sẽ tới đây :
Code:
0041CD60 /$ 6A FF PUSH -1 ; <== you’re here
0041CD62 | 68 E9C24200 PUSH #1_VIDEO.0042C2E9 ; SE handler installation
……
……
0041CDF4 | 68 B89D4300 PUSH #1_VIDEO.00439DB8 ; /s2 = "" 0041CDF9 | 52 PUSH EDX ; |s1
0041CDFA | C68424 AC0000>MOV BYTE PTR SS:[ESP+AC],1 ; | 0041CE02 | FFD6 CALL NEAR ESI ; \_mbscmp
Trang 50041CE04 | 83C4 08 ADD ESP,8
0041CE07 | 85C0 TEST EAX,EAX
0041CE09 | 0F84 0F020000 JE #1_VIDEO.0041D01E ; <== Nhảy nếu
Name=””
0041CE0F | 8B4424 08 MOV EAX,DWORD PTR SS:[ESP+8]
0041CE13 | 68 B89D4300 PUSH #1_VIDEO.00439DB8
0041CE18 | 50 PUSH EAX
0041CE19 | FFD6 CALL NEAR ESI
0041CE1B | 83C4 08 ADD ESP,8
0041CE1E | 85C0 TEST EAX,EAX
0041CE20 | 0F84 F8010000 JE #1_VIDEO.0041D01E ; <== Nhảy nếu
Serial=””
……
……
0041CFBB | 50 PUSH EAX
0041CFBC | 51 PUSH ECX
0041CFBD | FFD6 CALL NEAR ESI
0041CFBF | 83C4 08 ADD ESP,8
0041CFC2 | 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
0041CFC6 | 85C0 TEST EAX,EAX
0041CFC8 | C68424 A40000>MOV BYTE PTR SS:[ESP+A4],6
0041CFD0 0F84 86000000 JE #1_VIDEO.0041D05C ; <== Nhảy nếu
đăng ký hợp lệ
……
0041D01E |> 8D4C24 08 LEA ECX,DWORD PTR SS:[ESP+8]
……
0041D044 | 33C0 XOR EAX,EAX ; EAX=0
0041D046 | 5B POP EBX
0041D047 | 8B8C24 940000>MOV ECX,DWORD PTR SS:[ESP+94]
0041D04E | 64:890D 00000>MOV DWORD PTR FS:[0],ECX
0041D055 | 81C4 A0000000 ADD ESP,0A0
0041D05B | C3 RETN
0041D05C |> E8 D3B90000 CALL <JMP.&MFC42.#800>
0041D061 | 8D4C24 4C LEA ECX,DWORD PTR SS:[ESP+4C]
0041D065 | C68424 A40000>MOV BYTE PTR SS:[ESP+A4],5
0041D06D | E8 FE9F0000 CALL #1_VIDEO.00427070
0041D072 | 8D4C24 34 LEA ECX,DWORD PTR SS:[ESP+34]
0041D076 | 889C24 A40000>MOV BYTE PTR SS:[ESP+A4],BL
0041D07D | E8 EE9F0000 CALL #1_VIDEO.00427070
Trang 60041D082 | 8D4C24 44 LEA ECX,DWORD PTR SS:[ESP+44] 0041D086 | C68424 A40000>MOV BYTE PTR SS:[ESP+A4],9
0041D08E | E8 DD9F0000 CALL #1_VIDEO.00427070
0041D093 | 8D4C24 3C LEA ECX,DWORD PTR SS:[ESP+3C] 0041D097 | C68424 A40000>MOV BYTE PTR SS:[ESP+A4],1
0041D09F | E8 CC9F0000 CALL #1_VIDEO.00427070
0041D0A4 | 8D4C24 08 LEA ECX,DWORD PTR SS:[ESP+8]
0041D0A8 | C68424 A40000>MOV BYTE PTR SS:[ESP+A4],0
0041D0B0 | E8 7FB90000 CALL <JMP.&MFC42.#800>
0041D0B5 | 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C] 0041D0B9 | C78424 A40000>MOV DWORD PTR SS:[ESP+A4],-1 0041D0C4 | E8 6BB90000 CALL <JMP.&MFC42.#800>
0041D0C9 | 8B8C24 9C0000>MOV ECX,DWORD PTR SS:[ESP+9C] 0041D0D0 | 5E POP ESI
0041D0D1 | B8 01000000 MOV EAX,1 ; EAX=1
0041D0D6 | 5B POP EBX
0041D0D7 | 64:890D 00000>MOV DWORD PTR FS:[0],ECX