Làm thế nào để crack một chương trình - Pdf 69

Đây là bài viết hướng dẫn newbie về cách “làm thế nào để crack một chương trình”.
Vì vậy, nội dung rất đơn giản, nếu có “cao thủ” nào “bức xúc” về nội dung bài viết thì
xin vui lòng bỏ quá cho
Cách dễ nhất để crack là dùng 2 công cụ chính :
Win32Dasm, HView… bộ óc, Coca Cola và âm nhạc 8-).
Giải thích công dụng :
W32Dasm : Công cụ dùng để disassembler một file ra mã máy. Nó còn được dùng
để hiểu xem chương trình này làm cái “quái” gì trong đó.
HView : Khi đã biết được nơi cần patch trong file, bạn có thể dùng công cụ hữu ích
này.
Vì đây là cách đơn giản nhất để crack chương trình nên không phải tất cả các chương
trình đều có thể crack được mà khoảng 40% chương trình sẽ được patch bằng cách
này 8-).
Đầu tiên, bạn phải xem coi chương trình có được nén(pack) lại hay không. Nén ở
đây không có nghĩa là được nén bằng WinZip hay WinRAR mà file .EXE được nén nhỏ
lại mà vẫn có thể chạy được bình thường không cần giải nén. Để biết file có bị nén
hay không, bạn phải xem mở file .EXE đó ra để xem đoạn mã của nó. Ở đây tôi dùng
WinNC, chọn file cần xem và nhấn F3. Thông thường, nếu file đã bị nén thì nó sẽ có
1 dòng đặc trưng trong file bị nén ở đầu file. Chẳng hạn như được nén bằng ASPack
thì (thường) trong file sẽ có chuỗi “aspack”. Nén bằng UPX thì sẽ có dòng “UPX…”.
Còn đối với shrink thì có chữ “shrink”. Tuy nhiên, cũng có một vài công cụ giúp ta
giải nén (unpack) mà không cần biết file được nén theo dạng nào, đó là nó tự động
nhận dạng. Tuy nhiên, nếu dạng được nén không được hỗ trợ thì nó cũng đành bó
tay. Tiêu biểu cho loại này là ProcDump32, nó hỗ trợ khá nhiều dạng phổ biến như
ASPack, Code Safe 3.X, PC Guard 2.10, PE Compact, PKLITE… bạn có thể chọn
“*unknown*” để chương trình tự động nhận dạng.
Ngoài ra, có thể chương trình còn được bảo vệ bởi 1 đoạn mã bảo vệ(Security
Code). Đây là một đoạn mã dùng để bảo vệ chương trình tránh bị debug (anti-
debug) hay thay đổi kích thước. Đối với loại này, chúng ta cũng có một số chương
trình để bỏ phần Security Code đó, có thể kể ra là : Anti Crypt, UnCode Crypt,
tEunlock…

dịch ra assembler mà
Viết lại trong assembler đoạn code trên sẽ tương tự như :
cmp eax, eax <—– So sánh số serial/unlock code…
jne [Địa chỉ 1] <—– Nhảy đến thông báo số đăng ký đúng hoặc sai
call [Địa chỉ 2] <—– Nhảy đến thông báo ngược lại
Bây giờ, giả sử [Địa chỉ 1] là nhảy đến thông báo đã được đăng ký và[Địa chỉ
2] nhảy đến thông báo “Incorrect password…” thì ta sẽ phải sửa lại đoạn code như
sau :
cmp eax, eax
je [Địa chỉ 1] <—— Chỗ đã được Patch
call [Địa chỉ 2]
Trong assembler, câu lệnh nhảy được biết đến là :
je = Jump if equal : Nhảy nếu bằng
jne = Jump if not equal : Nhảy nếu không bằng
Vì vậy, thông thường “je” được đổi thành “jne” và ngược lại.
Trở lại với chương trình của chúng ta, đi tìm chuỗi “Incorrect password…” là chúng ta
đã đến bảng thông báo “Incorrect password…”. Kiếm bằng cách vào menu
Refs/String data references của W32Dasm, tìm chuỗi “Incorrect password…” và nhấn
kép vào nó (hy vọng là có 8-). Lúc này, W32Dasm đưa chúng ta đến bảng thông báo
chưa đăng ký rồi, nhiệm vụ của chúng ta là phải kiếm được nơi có chứa lệnh nhảy
đến bảng thông báo này. Hãy dời con trỏ lên cho tới khi nào kiếm thấy dòng “je …”
hay “jne…” thì dừng lại ở đó. Còn nếu thấy dòng :
* Reference ….
:000… <—- để ý địa chỉ này
thì hãy dừng lại đó vì bảng thông báo đã được gọi từ 1 địa chỉ khác, nhấn Shift-F12
(hay vào menu Goto/Goto Code Location), nhập vào dãy số000… sau dòng “*
Reference…” rồi Enter.
Lặp lại các bước dò như trên cho đến khi nào thấy được dòng “je…” hay “jne…“
Cuối cùng, khi đã kiếm được rồi thì hãy nhìn xuống thanh status bar, bạn sẽ thấy 1
chuỗi số ngay sau “@Offset …00…“. Nhớ lấy chuỗi số đó, và đừng quên là bỏ chữ “h”


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status