Tải bản đầy đủ (.pdf) (6 trang)

Cracker Handbook 1.0 part 31 potx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (95.81 KB, 6 trang )

báo trong 1 cái message box nào đó).
Và để tìm được đoạn code tính số lần sử dụng, các bác nên dùng 1 chương trình
disassembly – chẳng hạn như W32DASM. Trong W32DASM, các bác hãy tìm
chuỗi text trong cái message box và các bác sẽ dễ dàng thấy như sau :
Code:
CMP BYTE PTR [004628D4] , 00 ; kiểm tra xem có phải lần chạy đầu tiên ?
JZ 0045B7D9 ; nếu đúng, nhảy đến lần chạy đầu tiên
CMP DWORD PTR [004628D8] , 1A ; kiểm tra số lần đã sử dụng (1Ah=26d)
JGE 0045B72A ; nhảy nếu lớn hơn hoặc bằng
Nhìn vào đoạn code trên các bác dễ dàng thấy được có 2 chỗ quan trọng : 1.
0045B7D9 là nơi chương trình chạy lần đầu tiên, 2. 0045B72A sẽ đánh dấu số lần
các bác đã sử dụng chương trình, ở đây nó sẽ so sánh số lần đã dùng với 26, nghĩa
là nếu các bác chạy quá 25 lần thì chương trình sẽ tự động disable. Okey, nếu các
bác đã hiểu được những điều trên thì việc crack nó không có gì là khó. Các bác có
thể đổi 1A (26) thành FF (255) , hay NOP JGE 0045B72A, hoặc đổi JZ 0045B7D9
thành JMP 0045B7D9… Nói chung là có rất nhiều cách, các bác có thể làm theo
cách mà các bác thích.
Phần lớn các chương trình hạn chế số lần sử dụng đều có những đoạn code tương
tự như vậy và nó thường có 1 counter (counter này có thể nằm trong chương trình
hoặc 1 file DLL nào đó). Các bác nên chú ý đến vị trí các vị trí đánh dấu số lần sử
dụng và hãy kiểm tra 1 cách chắc chắn là không có cái mirror nào khác có khả
năng kiểm tra số làn sử dụng cả.

06.8 Serials
=======
Memory Echo
1 cách thông thường để tìm real serial là tìm ra cái +ORC gọi memory echo. Đây là
nơi mà số serial chúng ta đánh vào được so sánh với real serial của chương trình (1
vài chương trình real serial này được tính từ name mà chúng ta nhập vào). Các bác
có thể crack nhiều chương trình mà chỉ cần tìm ra memory echo, hãy chú ý nếu
như các bác gặp đoạn code tương tự như sau :


Code:
mov bl, [esi] ; lấy 1 byte của real serial
mov bh, [edi] ; lấy 1 byte của fake serial
cmp bl, bh ; so sánh
jne … ; nhảy nếu không bằng
Ở đây nếu các bác muốn tìm memory echo, trong SoftICE các bác đánh “d esi”, và
các bác sẽ thấy được real serial trong Data Window.
1 đoạn code khác cũng làm chức năng tương tự là :
Code:
mov ecx, (chiều dài của fake serial) ; chuyển chiều dài của fake serial vào ecx
repz cmpsw ; so sánh chuỗi tại ds:esi (real serial) với tại es:edi (fake
serial)
je … ; nhảy nếu bằng
Đối với những đoạn code như trên, để tìm memory echo, trong SoftICE các bác
đánh “d esi”. Okey, hãy nhìn lên trên, các bác sẽ thấy cái cần thấy.
Hi vọng qua 2 ví dụ trên các bác biết được thế nào là memory echo và làm cách
nào để tìm ra nó !!!

Message Break
Code:
BMSG <Window-Handle> WM_GETTEXT (password)
BMSF <Window-Handle> WM_COMMAND (nút OK)
Hãy nhớ : Nếu các bác sử dụng WM_COMMAND để xác định vị trí của Button,
các bác hãy tìm handle của button (ví dụ như 0324) và handle của window (ví dụ
như 0129)
Để tìm button, đừng dùng Buttuon Value mà hãy sử dụng Window Value để
BMSG (ví dụ trong trường hợp này để tìm button chúng ta sẽ đánh BMSG 0129
WM_COMMAND

Serial CrackingỞ phần này, em sẽ không dùng các hàm API chính (như

GetDlgItemTextA hay GetWindowText…) mà sẽ dùng HMEMCPY.
Khi chúng ta đặt breakpoint ở HMEMCPY, chúng ta hãy nhấn F10 khoảng 17-25
lần và chúng ta sẽ thấy 1 đoạn code tương tự như sau :
Code:
PUSH ECX
SHR ECX, 2 ; số từ copy
REPZ MOVSD ; copy từ DS:ESI vào ES:EDI
POP ECX
AND ECX, 3
REPZ MOVSB ; tương tự REPZ MOVSD , nhưng chỉ copy 1 byte
XOR DX
XOR AX
Nhìn thì đoạn code trên có vẻ rắc rối, nhưng các bác đừng lo. Các bác sẽ dễ dàng
tìm ra ở đó phương pháp set break trên serial hoặc name của các bác.
Tại REPZ MOVSD, trong SoftICE các bác đánh “D DS:EDI” (nếu là 32bit) hoặc
“D DS:DI” (nếu là 16bit) . Các bác sẽ thấy fake name hoặc fake serial. Bây giờ hãy
đánh “D ES:EDI” (32bit) hoặc đánh “D ES:DI” (16bit). Nó sẽ hiện ra vị trí mà
thông tin bạn nhập vào được copy tới (ví dụ như 22BF:00000000). Hãy chú ý tới
segment (ở đây là 22BF). Nếu các bác set BPR trên range của memory, các bác sẽ
không thể break lại lần nữa. Bây giờ hãy ấn F10 cho đến khi các thông tin các bác
nhập vào được copy xong (nghĩa là vượt qua REPZ MOVSD). Tại đây các bác hãy
đánh “PAGE 22BF:00000000” . Các bác sẽ thấy tương tự như sau :
Code:
Linear | Physical | Attributes | Type
80284960 | 01603960 | PD A AU RW | System
Bây giờ công việc của chúng ta là đặt BPR (breakpoint trên range) tại địa chỉ ở
trong cột Linear. Để làm được các bác cần biết số byte có trong range, và các bác
buộc phải dùng SELECTOR 30 :
Ví dụ : BPR 30:80284960 30:80284969 RW
Nó sẽ set break trên 9 byte trên range trong suốt quá trình RW (đọc/viết). Nếu các

bác muốn biết điểm khác nhau giữa các địa chỉ, các bác có thể đánh :
D 30:80284960
Nhớ là các bác phải luôn dùng bộ lọc 30, bởi nó luôn luôn tồn tại.
Tiếp theo chúng ta ấn F12 rồi tìm name/serial. Xong các bác nhấn F5 rồi đánh BD
<HMEMCPY> và các bác sẽ break khi fake name/serial của các bác được chương
trình đọc. Tiếp theo là công việc của các bác :))

Serial # Cracking sử dụng HMEMCPY
1 hàm API khá thú vị dùng để crack serial là HMEMCPY. Nó sẽ được gọi mỗi khi
chuỗi được copy và memory. Để sử dụng HMEMCPY, trước hết các bác đánh đại
cái gì đó và registration dialog, sau đó load SoftICE và đánh BPX HMEMCPY.
Trở lại chương trình và nhấn nút OK/Register… SoftICE sẽ nhảy ra và hãy ấn F11
để trở về nơi gọi nag. Nếu có nhiều hộp thoại edit box, nhấn Ctrl-D 1 và F11 cho
đến khi các bác biết chắc rằng toàn bộ thông tin mà các bác đã được copy. Bây giờ
các bác sẽ thấy như sau :
Code:
PUSH DWORD PTR [DI]
CALL KERNEL!LOCALUNLOCK
Hầu hết các code đều được kiểm tra từ 1 file executable, bây giờ hãy ấn F10 sau
khi các bác đã disable các breakpoint. Các bác sẽ “nhảy” qua rất nhiều instruction
(có thể là 50 hoặc nhiều hơn), và chắc chắn các bác sẽ nhày qua
Kernel32!_freqasm trước khi trở về đoạn code của chương trình. Khi các bác đã
trở về được đoạn code của chương trình , hãy “nhảy” với F10 nhưng phải thật
chậm. Nếu các bác tìm thấy 2 serial được đặt trong stack và sau đó lệnh CALL
được thực hiện > đánh D để xem chúng.

Visual Basic Serial Cracking
Trước khi set BPX rtcMsgBox trong SoftICE, các bác cần phải có file
MSVBVM50.DLL. Sau đó hãy nhập bất kì cái gì đó trong Registration Box và
nhấn Enter. SoftICE sẽ break tại rtcMsgBox. Bây giờ hãy disassemble chương

trình ra , đi đến đoạn code gọi message box. Set breakpoint trước đoạn code so
sánh, các bác nên biết rằng các function của Visual Basic không khác lắm với API
của WIN32, nên họ vẫn sẽ đặt 1 vài thông số nào đó trong stack. Và “tóm” các
thông số này rất dễ, các bác hãy ấn F5 và F11 vài lần > các bác sẽ thấy những
đoạn code “trên cả tuyệt vời”
Những function đáng để “thử” :
__vbaLenBstr (nhận chiều dài chuỗi)
__vbaStrCopy
__vbaStrMove

Visual Basic 6 Serial Catching
Trước hết các bác open WINICE.DAT lên mà thay đổi 1 chút :
Code:
F5=”^x;^dd eax;”
EXP=C:\WINDOWS\SYSTEM\MSVBVM60.DLL
Trong hộp thoại registration hãy nhập bất kì cái gì mà các bác thích. Xong hãy vào
SoftICE và đánh “BPX MSVBVM60!_vbaStrCat”. Thoát khỏi SoftICE và nhấn
nút OK trong hộp thoại registration > SICE nhảy ra :
Code:
:66060B5F PUSH EBP
:66060B60 MOV EBP,ESP
:66060B60 MOV EBP,ESP
:66060B62 PUSH EBP
:66060B65 PUSH EAX
:66060B66 PUSH DWORD PTR [EBP+08]
:66060B69 PUSH DWORD PTR [EBP+0C]
:66060B6C CALL [661106E8]
:66060B72 TEST EAX,EAX
:66060B7A MOV EAX,[EBP+08]
:66060B7D POP EBP

:66060B7E RET 0008
Bây giờ hãy đánh những lệnh sau :
Code:
BC * [Enter]
BPX 66060B7D [Enter]
X [Enter]
Tại đây chúng ta nhấn F5 cho đến khi thấy real serial (là những kí tự) trong Data
Window.

06.9 Time Limits
==========
30-Day-Time-Limit
Rất nhiều chương trình shareware chỉ cho phép chúng ta sử dụng trong 1 thời gian
( thường là 30 ngày). Vạy nhiệm vụ của chúng ta là tìm ra đoạn code so sánh số
ngày sử dụng , và thay đổi nó. Đây là đoạn code đó :
Code:
mov ecx, 1E ; đặt 1E (1Eh=30d) vào ecx
mov eax, [esp+10] ; đặt số ngày đã dùng vào eax
cmp eax, ecx ; so sánh eax và ecx
jl … ; nhảy nếu nhỏ hơn (nghĩa là tiếp tục được dùng chương trình)
Cách đơn giản nhất trong trường hợp này là đổi “mov eax, [esp+10]” thành “mov
eax, 1”. Làm như vậy chương trình sẽ luôn luôn nghĩ là chúng ta đang chạy
chương trình vào ngày đầu tiên.

Hết hạn sử dụng
Nếu chương trình mà các bác cần crack đã hết hạn dùng , các bác có thể tìm trong
Registry khóa CURRENT_USER và LOCAL_MACHINE các khóa có liên quan
đến chương trình đó và xóa nó đi. Sau đó cài lại chương trình ( các bác nên nhớ là
cũng phải xóa sạch các file có liên quan đến chương trình đó nhá !!! )


Lazy Programmer’s Trial Check
Chương trình của các bác chỉ cho phép chạy thử trong 30 ngày ??? Hãy xem làm
cách nào để 1 programmer lười biếng kiểm tra số ngày dùng đó :
Code:
CMP DWORD PTR register,1E
JLE/JGE …
Các bác hãy xem các thông số sau : 83 là CMP, 1E là 30 ngày, 7E là JLE hoặc 7D
là JGE. Bây giờ mở 1 chương trình HEX editor và tìm các thông số trên. Các bác
sẽ tìm thấy chúng trong 1 hoặc nhiều vị trí khác nhau - điều đó không quan trọng.
Các bác hãy cứ đổi JLE (7E 33) thành JMP (EB 33). Chắc chắn chương trình sẽ
không bao giờ hết hạn nữa !!!

Crack Time Limit sử dụng W32DASM
Hãy chỉnh đồng hồ hệ thống sang 1 năm -> chương trình của các bác chắc chắn sẽ
hết hạn ngay. Khơi động chương trình, 1 message sẽ hiện ra, hãy nhớ nội dung của
nó nhé (tốt nhất là ghi ra giấy). Dùng W32DASM để load file vào và tìm nội dung
của cái message ban nãy. Tìm ra rồi -> đến đoạn code cần tìm -> phân tích đoạn
code -> crack nó.

×