Nếu giá trị difference lớn hơn 3 ngày, chương trình sẽ tự kết thúc... theo, byte thứ 11 trong file được kiểm tra, và đó chính là số lần các bác đã sử dụng chương trình.. Nó sẽ từ trừ 1 s
Trang 100401092 66356969 xor ax, 6969
:00401096 668981AB304000 mov word ptr [ecx+004030AB], ax
:0040109D 83C102 add ecx, 00000002
* Referenced by a (U)nconditional or (C)onditional Jump at Address:00401089(U)
004010A0 83F908 cmp ecx, 00000008 ; nếu 8 byte đã được cộng
004010A3 76E6 jbe 0040108B ; kết thúc loop
004010A6 EB3A jmp 004010E2
Nhìn vào đoạn code trên, chúng ta biết được quá trình hoạt động diễn ra như sau : file timetrial được mở (chỉ nếu chương trình đang tồn tại hoặc không có chương trình nào đang dùng nó), nội dung được đọc từ file Nó chỉ gồm 11 byte 10 byte đầu tiên là 1 phần của cấu trúc SYSTEMTIME (năm, tháng, thứ ngày, ngày, giờ - mỗi giá trị gồm 2 byte), và mỗi byte được cộng thêm 069h Chúng ta thấy ở trên chỉ mới có 10 byte, vậy 1 byte đã đi đâu mất ???
Chúng ta hãy tiếp tục nhìn xuống dưới :
Code:
004010A8 8B0DAB304000 mov ecx, dword ptr [004030AB] ; chuyển dword
từ buffer vào ecx
004010AE 81F169696969 xor ecx, 69696969 ; Decrypt dword sang dữ liệu năm - tháng
004010B4 A1E4304000 mov eax, dword ptr [004030E4] ; chuyển
SYSTEMTIME vào eax
004010B9 3BC1 cmp eax, ecx ; so sánh eax, ecx
004010BB 0F8585000000 jne 00401146 ; nếu không bằng -> nhảy đến bad-guy
004010C1 668B0DB1304000 mov cx, word ptr [004030B1] ; chuyển ngày từ buffer vào cx
004010C8 6681F16969 xor cx, 6969 ; Decrypt day
004010CD 66A1EA304000 mov ax, word ptr [004030EA] ; chuyển ngày hiện tại vào ax
004010D3 662BC1 sub ax, cx ; lấy ngày hiện tại trừ ngày bắt đầu dùng chương trình
004010D6 6683F803 cmp ax, 0003 ; so sánh kết quả với 3 ngày
004010DA 776A ja 00401146 ; nếu lớn hơn -> nhảy đến bad-guy 004010DC 280500304000 sub byte ptr [00403000], al ; lấy difference trừ giá trị ngày được lưu lại lớn nhất
* Referenced by a (U)nconditional or (C)onditional Jump at Address:004010A6(U)
Trang 2004010E2 A0B5304000 mov al, byte ptr [004030B5] ; nhận byte thứ 11 từ buffer
004010E7 3469 xor al, 69 ; decrypt byte thứ 11 này
004010E9 3C00 cmp al, 00 ; so sánh với 0
004010EB 7459 je 00401146 ; nếu bằng -> nhảy đến bad-guy
004010ED FEC8 dec al ; giảm 1
004010EF A201304000 mov byte ptr [00403001], al ; lưu giá trị
004010F4 3469 xor al, 69 ; crypt lại lần nữa
004010F6 A2B5304000 mov byte ptr [004030B5], al ; lưu nó trong
FileBuffer
004010FB 6A00 push 00000000
004010FD 6A00 push 00000000
004010FF 6A00 push 00000000
00401101 FF3514314000 push dword ptr [00403114]
* Reference To: KERNEL32.SetFilePointer, Ord:024Bh
00401107 E818010000 Call 00401224 ; đặt FilePointer bắt đầu file
0040110C 6A00 push 00000000
0040110E 68E0304000 push 004030E0
00401113 6A0B push 0000000B
00401115 68AB304000 push 004030AB
0040111A FF3514314000 push dword ptr [00403114]
* Reference To: KERNEL32.WriteFile, Ord:02B9h
00401120 E805010000 Call 0040122A ; viết buffer vào file
00401125 833DE03040000B cmp dword ptr [004030E0], 0Bh
0040112C 752D jne 0040115B
0040112E 6A00 push 00000000
00401130 6874114000 push 00401174
00401135 6A00 push 00000000
* Possible Reference to Dialog: DialogID_0001
00401137 6A01 push 00000001
00401139 FF35F4304000 push dword ptr [004030F4]
* Reference To: USER32.DialogBoxParamA, Ord:0092h
0040113F E8B0000000 Call 004011F4 ; hiện Dialog
Okey, nếu đã có 1 vài thứ trong file, nó sẽ decrypt ra, và so sánh với ngày hiện hành Nếu giá trị difference lớn hơn 3 (ngày), chương trình sẽ tự kết thúc Tiếp
Trang 3theo, byte thứ 11 trong file được kiểm tra, và đó chính là số lần các bác đã sử dụng chương trình Nó sẽ từ trừ 1 sau mỗi lần chương trình được sử dụng, cộng lại và viết vào trong file
Bây giờ, công việc cuối cùng của chúng ta là thay đổi 3 lệnh JMP : 2 cái dành cho ngày và 1 cái dành cho số lần sử dụng
Patching:
Mở HACKER VIEW, load file timetrial lên, nhấn F4 -> chọn Decode, sau đó NOP các lệnh JMP bằng cách :
Code:
004010BB 0F8585000000 jne 00401146
Đổi 0F8585000000 -> 909090909090
Cách làm : nhấn F5 -> gõ 004010BB -> nhấn F3 -> nhấn 90 6 lần -> nhấn F9
Code:
004010DA 776A ja 00401146
Đổi 776A -> 9090
Cách làm : nhấn F5 -> gõ 004010DA -> nhấn F3 -> nhấn 90 2 lần -> nhấn F9 Code:
004010EB 7459 je 00401146
Đổi 7459 -> 9090
Cách làm : nhấn F5 -> gõ 004010EB -> nhấn F3 -> nhấn 90 2 lần -> nhấn F9
Nhấn F10 để lưu lại những thay đỗi và thoát khỏi chương trình
Chạy lại timetrial, số ngày và số làn sử dụng vẫn thay đỗi Sai ư? không đâu Bây giờ cho dù các bác có mở nó đến 1000 lần hay để đến năm 2005 thì nó vân chạy ngon ơ ;)
Nếu các bác muốn số trong khung days left và sessions left "bền vững theo thời gian" thì các bác chỉ việc patch thêm 2 chỗ sau :
Code:
004010DC 280500304000 sub byte ptr [00403000], al -> mov byte ptr [00403000], 03h
004010EF A201304000 mov byte ptr [00403001], al -> mov byte ptr [00403001], 09h
Chú ý : số 03 và 09 ở trên có thể thay đổi tùy ý
=========THE END=========
Hi vọng qua tut này có thể giúp các bác nhiều trong việc crack time trial ;)
Nếu bác nào có gì không hiểu, hãy hỏi các bác Admin ( đừng hỏi em, em chả biết
gì đâu - Newbie mà )
Chúc các bác may mắn
Trang 4the_lighthouse(REA)