Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 20

Mục lục

I. Tổng quan về Cracking 4


1. Reverse Engineering - Tiền đề của Cracking 4
2. Giới thiệu về Crack phần mềm 5
2.1: Tổng quan về Crack phần mềm 5
2.2: Lịch sử Cracking 5
2.3: Cracker 6
2.4: Mục đích của Cracking 6
2.5: Con đường Cracking 7
3. Các phần mềm thông dụng 9
3.1: OllyDbg 9
3.2: PeiD 10
3.3: WinHex 12
3.4: Resource Hacker 14
II. Kiến thức cơ bản lập trình hợp ngữ 16
1. Các hệ thống cơ số, bảng mã ASCII và mạch LOGIC 16
1.1: Các hệ thống số 16
1.2: Số có dấu trong hệ Hexa (Thập lục phân) 16
1.3: Bảng mã ASCII 16
1.4: Logical Operation 16
2. Các thanh ghi và công dụng 16
2.1: Thanh ghi ESP (Con trỏ ngăn xếp - Stack pointer) 16
2.2: Thanh ghi EIP (Con trỏ chỉ dẫn - Instruction Pointer) 16
2.3: Thanh ghi EBP (Con trỏ cơ sở - Base Pointer) 16
2.4: Các thanh ghi dữ liệu EAX, EBX, ECX, EDX 16
2.5. Các thanh ghi chỉ số ESI, EDI 16
3. Các cờ (Flags) 17
3.1: Cờ trạng thái: 17
3.1.1: Cờ tràn (Overflow Flag) 17
3.1.2: Cờ chẵn lẻ (Parity Flag) 17
3.1.3: Cờ Zero (Parity Flag) 17
3.1.4: Cờ dấu (Sign Flag) 17
3.1.5: Cờ nhớ(Carry Flag) 17
3.2: Cờ điều khiển 17
4. Stack 17
5. Câu lệnh cơ bản 18
5.1: Các câu lệnh dùng trong tính toán 18
5.1.1: Lệnh INC và DEC 18
5.1.2: Lệnh ADD 18
5.1.3: Lệnh ADC 18
5.1.4: Lệnh SUB 18
5.1.5: Lệnh SBB 18
5.1.6: Lệnh MUL 18
5.1.7: Lệnh IMUL 18
5.1.8: Lệnh XADD 18
5.1.9: Lệnh NEG 18
5.2: Các lệnh LOGIC 18
5.2.1: Lệnh AND 18
5.2.2: Lệnh OR 18
5.2.3: Lệnh XOR 18
5.2.4: Lệnh NOT 18
5.3: Các lệnh so sánh 19
5.3.1: Lệnh CMP 19
5.3.2: Lệnh Test 19
5.4: Các lệnh nhảy 19
5.4.1: Lệnh JMP 19
5.4.2: Lệnh JE/JZ 19
5.4.3: Lệnh JNE/JNZ 19
5.4.4: Lệnh JS 19
5.4.5: Lệnh JP/JPE 19
5.4.6: Lệnh JNP/JNPE 19
5.4.7: Lệnh JO 19
5.4.8: Lệnh JNO 19
5.4.9: Lệnh JB 19
5.4.10: Lệnh JBE 19
5.4.11: Lệnh JL 19
5.5: Lệnh Call và Ret 19
5.6: Vòng lặp 19
5.7: Các lệnh liên quan đến chuỗi 20
5.7.1: Lệnh MOV 20
5.7.2: Lệnh REP 20
5.7.3: Lệnh LODS 20
5.7.4: Lệnh STOS 20
5.7.5: Lệnh CPMS 20
5.7.6: Các chế độ địa chỉ 20
6. Cấu trúc PE file 20
7. Hướng dẫn dùng Ollydbg cơ bản để crack 20
III. Crack phần mềm 20
Patching 20
Keygenning 20
Serial Fishing 21
Self-Keygenning 21
Unpacking 21
Inline-Patching 21
IV. Chống Crack phần mềm 22
The Basic Types of Software of Protection 22
Anti-Ollydbg Techniques & Solutions 22
Anti-Cracking Techniques 22
Crack và chống Crack phần mềm
I. Tổng quan về Cracking

1. Reverse Engineering - Tiền đề của Cracking

- Reverse engineering (kỹ thuật đảo ngược) là một quá trình phát hiện ra
các công nghệ cơ bản của một thiết bị, đối tượng hay một hệ thống thông
qua việc phân tích cấu trúc, chức năng và cách vận hành của chúng. Các
đối tượng ở đây có thể bao gồm: thiết bị cơ học, thiết bị điện tử, chương
trình phần mềm... Mục đích của việc này là tạo ra những thiết bị, chương
trình có tính năng như cái ban đầu nhưng không lấy bất cứ cái gì từ cái
ban đầu.

- Đối với phần mềm, Reverse engineering có thể được hiểu là


quá trình tìm ra các nguyên lý kỹ thuật của một phần mềm
thông qua việc phân tích cấu trúc, chức năng và hoạt động
của nó.

- Còn đối với cracker thì Reverse engineering có nghĩa là dịch


ngược. Một trong các cái để thực hành kỹ năng này là
Crackmes, Reversemes và Keygenmes. Những chương trình
này được lập trình sử dụng những kỹ thuật bảo vệ tương tự
như những ứng dụng thật, để bẻ khóa thử. Qua đó để kiểm
tra mức độ bảo vệ của ứng và kỹ thuật được sử dụng. Đây là
những bài thực hành đòi hỏi phải hiểu rõ công nghệ của ứng
dụng sử dụng thì mới có thể vượt qua được. Thậm trí có
những crackme khó hơn cả những phần mềm trong thực tế.
-

2. Giới thiệu về Crack phần mềm

2.1: Tổng quan về Crack phần mềm


https://en.wikipedia.org/wiki/Software_cracking

- Khái niệm Software cracking chỉ đơn giản là việc sửa hay can thiệp vào
phần mềm nào đó nhằm mục đích có được license (giấy phép) hay loại bỏ
module kiểm tra license của nó để có thể sử dụng đầy đủ các chức năng
một cách không chính thức. Do đó, các kiến thức lập trình tối thiểu là
điều yêu cầu phải có. Khi thực hiện việc crack phần mềm, chúng ta sẽ sử
dụng một kỹ thuật được gọi là reverse engineering (dịch ngược phần
mềm sang một loại ngôn ngữ nào đó - như assembly chẳng hạn) và khai
thác lỗ hổng của nó để viết crack, patch, keygen, ...!

- Bẻ khóa phần mềm có thể bị coi là một hành vi vi phạm bản quyền,
nhưng nó chỉ là một hạt cát trong sa mạc được gọi là Reverse
Engineering, kỹ thuật dịch ngược nhằm chỉnh sửa mã thực thi ở cấp thấp
(thập lục phân - Hex hay mã Assembly). Nhưng điều đáng nói là bất cứ ai
với một nền tảng cơ bản nhưng vững chắc về lập trình (không phân biệt
VB hay C/C++ "bác học"), về cách chuyển đổi giữa các hệ cơ số (nhị
phân, thập phân, thập lục phân)... đều có thể tiếp cận reverse engineering

2.2: Lịch sử Cracking


- Xuất hiện từ thập niên 1980, một số người dùng internet độc lập đã liên
kết với nhau thành những nhóm, thường được gọi là “cracking crews”.
Mỗi nhóm được tổ chức có tên và tiêu chí hoạt động rõ ràng, có website
riêng... Các thành viên trong nhóm được chia thành các tổ, hoạt động theo
các công việc rõ ràng nhưng rất gắn kết với nhau:
+) Supplier: Là những người có khả năng có được những phần mềm thử
nghiệm (version beta), trước khi nhà sản xuất tung ra bản chính thức.
+) Coder: Những lập trình viên, những người có khả năng phá được các
loại khoá bảo vệ của phần mềm.
+) Trader: Những người có nhiệm vụ cung cấp các bản crack phần mềm
miễn phí lên trên internet, càng nhanh càng tốt, bằng e-mail hay tải lên
mạng...
+) Sysop và Webmaster: Những người phụ trách phần đưa thông tin về
nhóm của mình lên trang chủ của nhóm.

- Như vậy, các Coder đóng vai chính trong một nhóm cracker. Họ có khả
năng lập trình tốt với các ngôn ngữ lập trình thông dụng nhất, trong đó
đặc biệt là ngôn ngữ lập trình Assembly (ASM). Họ có thể là một sinh
viên, một lập trình viên của công ty phần mềm nào đó,... Cracking đối với
họ thường chỉ nhằm thoả mãn sự đam mê, niềm vui song không loại trừ
những ngoại lệ: cracking với mục đích kinh tế.

2.3: Cracker
- Cracker (hay thợ khóa) là người có khả năng sửa đổi phần mềm để gỡ bỏ
các biện pháp bảo vệ bản quyền (như: chống sao chép, phiên bản dùng
thử giới hạn, kiểm tra số serial, kiểm tra CD hay các phiền toái trong
phần mềm như cửa sổ thông báo (screennag) và phần mềm quảng
cáo (adware). Họ làm ra các phiên bản cracks, patcher, keygen ...
Và đôi lúc, cracker còn thêm những phần mở rộng cho phần mềm thông
qua các phiên bản cracks của họ (các bản mod mở rộng chức năng/ thay
đổi 1 phần chương trình gốc)…

2.4: Mục đích của Cracking


- Với những phần mềm thương phẩm, internet là công cụ quảng bá hữu
hiệu, người dùng có thể truy cập trang chủ của nhà sản xuất để tải về. Để
thương mại hoá sản phẩm của mình, các nhà sản xuất thường gắn vào sản
phẩm một cái “khoá” – nôm na là để hạn chế người dùng sử dụng sản
phẩm của mình một cách miễn phí. Khoá của họ có nhiều loại: khoá
cứng, khoá mềm,... Như vậy, người dùng muốn thực sự là chủ sở hữu hợp
pháp một phiên bản phần mềm sẽ phải liên hệ với nhà sản xuất.
- Các cracker sẽ vô hiệu hoá cái khoá đó, bởi theo họ mọi thứ tồn tại trên
internet đều có thể... miễn phí. Trong mắt nhiều người, cracker như
những Robin Hood “lấy của nhà giàu chia cho dân nghèo”, do chưa hiểu
như vậy là hành động phạm pháp – cụ thể hơn là vi phạm bản quyền sở
hữu trí tuệ. Nghiêm trọng hơn, một phần mềm khi được bẻ khoá chắc
chắn sẽ được phát tán thành hành triệu bản trên internet, thiệt hại to lớn sẽ
thuộc về nhà sản xuất. Thiệt hại này hầu như không thể thống kê được so
với những thiệt hại do các hacker gây ra. Thử làm một con tính đơn giản:
Một phiên bản Windows 98 được bán với giá 95 USD, nếu một triệu máy
tính được cài trái phép phiên bản này thì thiệt hại của Microsoft sẽ là bao
nhiêu? Con số hầu như không thể thống kê được.

- Ngoài những lý do trên, với mục tiêu gây thiệt hại về tài chính cho công
ty đối thủ, có cả những trường hợp công ty A khuyến khích nhân viên của
mình dùng kỹ năng crack để bẻ khoá sản phẩm của công ty B rồi phân
phát bừa bãi trên mạng, lúc đó bên A mới tung ra sản phẩm của mình để
giành thị trường. Việc chơi xấu này diễn ra không phải là ít, đã và đang
diễn ra bằng hình thức này hay hình thức khác, phản ánh sự cạnh tranh
khốc liệt của thị trường.

2.5: Con đường Cracking


- Sau khi có trong tay phần mềm cần bẻ khoá, công việc đầu tiên của
cracker là tìm hiểu xem cách thức bảo vệ của phần mềm đó như thế nào?
Bởi cũng giống như hacking, cách thức bảo vệ phần mềm cũng có “muôn
hình vạn trạng”. Một phần mềm được gắn khoá thường khoác lên mình
cái tên “bản dùng thử” (trial version), có thể được bảo vệ bằng cách này
hay cách khác nhưng đa số các nhà sản xuất thường làm theo các cách
sau: giới hạn số ngày dùng thử, giới hạn các tính năng,... Để thuận tiện
cho việc phát hành phần mềm của mình, cũng như phổ biến đến khách
hàng, thông thường khi mua, khách hàng sẽ được cung cấp số serial -
chiếc chìa khoá để mở cái khoá đó ra. Như vậy, công việc của cracker là
tìm ra chiếc chìa khoá thay vì phải liên hệ với nhà sản xuất để xin nó.

- Những kiến thức về các ngôn ngữ lập trình bậc cao như Basic, Pascal, C+
+ sẽ giúp các cracker hiểu được quá trình hoạt động của phần mềm thông
quá các hàm chức năng. Tuy vậy, điều này không đóng vai trò thực sự
quan trọng bởi kiến thức cơ bản về Assembly mới là quan trọng nhất.
Đây cũng là điểm mấu chốt để bẻ khoá với một công cụ cực kỳ quan
trọng và cần thiết: debugger.
- Bằng cách sử dụng debugger, cracker có thể theo dõi phần mềm đó hoạt
động như thế nào, hay rõ hơn là quá trình mà khóa làm việc như thế nào?
Khi đó, vấn đề bẻ khoá chỉ còn là thời gian. Đối với những cracker nhiều
kinh nghiệm, việc bẻ khoá một phần mềm còn dễ dàng hơn ăn kẹo bởi họ
đều nắm rõ những thuật toán mà các loại khoá áp dụng. Công việc debug
đòi hỏi nhiều thời gian của cracker bởi nó ghi lại toàn bộ quá trình phần
mềm đó làm việc như thế nào. Sau khi cơ bản đã bẻ được cái khoá của
phần mềm, cracker sẽ tìm cách để phổ biến bản phá khoá này: Chỉ cần
viết một chương trình nho nhỏ (gọi là patch), có tác dụng sửa một số byte
của phần mềm sao cho sau khi sửa thì cái khoá không còn tác dụng nữa
(tựa như nhà sản xuất tung ra các bản sửa lỗi cho phần mềm của mình
vậy). Cao cấp hơn, cracker sẽ viết hẳn một chương trình tính toán ra số
serial hay gọi là key generator để làm công việc tương tự như việc nhà
sản xuất cung cấp số serial cho người dùng đăng ký hợp pháp.

- Tuy nhiên, trải qua nhiều kinh nghiệm và cũng nhiều lần chứng kiến phần
mềm của mình bị bẻ khoá một cách không thương tiếc, các nhà sản xuất
cũng đã và đang dần dần tìm cách nâng cấp, hay thay khoá bảo vệ của
mình tốt hơn. Bằng cách này hay cách khác, họ cố gắng trang bị cho phần
mềm những công cụ chống bẻ khoá ngày càng tối tân hơn: Chống dịch
ngược (disassembly), chống debug (anti debug), khoá cứng (hardlock),
nén lại (pack),... Mặc dù vậy, sự thành công không khả quan là bao bởi vì
không nhóm cracker này thì nhóm cracker khác cũng sẽ ra tay!
3. Các phần mềm thông dụng

3.1: OllyDbg

Ảnh 1:

Thiết kế bởi: Oleh Yuschuk


Bản mới nhất: 2.0 - Beta 2 Final (03/12/2009)
Hệ điều hành: Microsoft Windows
Nền tảng: 32-bit
Thể loại: Trình gỡ lỗi
Giấy phép: Phần mềm chia sẻ/Miễn phí
Website: http://www.ollydbg.de

- OllyDbg là một trình gỡ rối (ở tầng ring 3) ở cấp độ hợp ngữ trên nền
Windows 32-bit. Nó chú trọng đến việc phân tích mã nhị phân nên đặc
biệt hữu ích trong trường hợp không có mã nguồn. Nó dò xét các thanh
ghi, nhận diện các thủ tục, các lời gọi hàm API, các khóa chuyển, các
bảng, hằng số và các chuỗi, cũng như chỉ ra vị trí các routines từ các tập
tin đối tượng và các thư viện. Theo như trong tập tin trợ giúp của chương
trình, phiên bản 1.10 là bản cuối cùng của dòng phiên bản 1.x. Bản 2.0
được phát triển và được lập trình lại từ đầu. Phần mềm thì miễn phí (với
đầy đủ chức năng, không có giới hạn thời gian sử dụng, v.v...), nhưng có
thông báo đăng ký với tác giả như ở các dạng phần mềm dùng thử. Phiên
bản hiện tại của OllyDbg không thể thao tác được các tập tin biên dịch
cho các bộ vi xử lý 64-bit. OllyDbg thường được dùng cho việc reverse
engineering (kỹ thuật dịch ngược) các chương trình. Là công cụ yêu thích
của các cracker để bẻ khóa phần mềm của người khác. Trong việc phân
tích ngược cũng như bẻ khóa, OllyDbg là một trong những công cụ quan
trọng chính vì sự tiện lợi và sức mạnh của mình. Nó cũng là công cụ giúp
các lập trình viên phân tích và sửa chữa, kiện toàn chương trình của họ.

3.2: PeiD

Thiết kế bởi: Jibz, Qwerton, snaker, xineohP


Bản mới nhất: 0.95 (21/10/2008)
Hệ điều hành: Windows 2000/XP
Nền tảng: 32-bit
Thể loại: Xác định trình nén, cryptors và trình biên dịch cho tập tin PE
Giấy phép: Phần mềm miễn phí
Website: http://www.peid.info
- PEiD giúp phát hiện các trình nén phổ biến nhất, cryptors và trình biên
dịch cho các tập tin PE. Hiện tại nó có thể phát hiện hơn 600 chữ ký khác
nhau trong các tập tin PE. PEiD có những nét đặc biệt trong một số khía
cạnh so với các trình detect khác đã có!
1. Nó có một giao diện tuyệt vời, trực quan và thực sự đơn giản.
2. Tỷ lệ phát hiện nằm trong số tốt nhất so với các trình định danh khác.
3. Đặc biệt trong chế độ quét advanced có thể nhận diện sự thay đổi và
các tập tin không xác định.
4. Tích hợp vào menu ngữ cảnh, hỗ trợ dòng lệnh, cửa sổ luôn nằm trên
cùng và tính năng kéo & thả target.
5. Quét nhiều tập tin và thư mục với đệ quy.
6. Cửa sổ Task và trình điều khiển.
7. Giao diện plugin với các plugins như Generic OEP Finder và Krypto
ANALyzer.
8. Kỹ thuật quét mở rộng được sử dụng để nhận diện tốt hơn.
9. Tùy chọn quét heuristic. (PP tự tìm tòi, thử & sai)
10. Chi tiết tập tin PE mới, nhập, xuất và các TLS viewer
11. Thiết kế mới trong bộ phận phân tích nhanh.
12. Thiết kế mới trong trình hex viewer.
13. Giao diện chữ ký mở rộng có thể được cập nhật bởi người sử dụng.

3.3: WinHex
Thiết kế bởi: Stefan Fleischmann
Bản mới nhất: 15.6 (01/03/2010)
Hệ điều hành: Windows 2000/XP/2003/Vista*/2008*/7*
Nền tảng: 32-bit
Thể loại: Biên tập mã hex
Giấy phép: Phần mềm chia sẻ
Website: http://www.x-ways.net/winhex/

- WinHex là một phần mềm biên tập mã hex phổ dụng, đặc biệt hữu dụng
cho máy tính của bạn, có khả năng phục hồi dữ liệu, xử lý dữ liệu cấp
thấp, và bảo mật. Là một phần mềm cao cấp dùng hằng ngày và trong các
trường hợp khẩn cấp: kiểm tra và biên tập tất cả các kiểu tập tin, phục hồi
những tập tin bị xóa hay dữ liệu bị mất mát từ đĩa cứng với cả những hệ
thống tập tin bị hư hại hay từ thẻ nhớ của máy quay phim kĩ thuật số.

Những đặc trưng bao gồm:


- Biên tập đĩa dùng cho đĩa cứng, đĩa mềm, CD-ROM & DVD,
ZIP, Smart Media, Compact Flash…
- Trình duyệt thư mục mạnh mẽ cho FAT, NTFS, Ext2/3, ReiserFS,
CDFS, UDF
- Trình biên tập RAM, cung cấp truy xuất đến những bộ nhớ ảo của
những tiến trình khác
- Thông dịch dữ liệu, nhận biết được 20 kiểu dữ liệu
- Biên tập cấu trúc dữ liệu dùng mẫu có sẵn (vd: để sửa chữa bảng
phân vùng/boot sector)
- Kết nối và chia tập tin, hợp nhất và chia các byte/từ theo số lẻ và
chẵn
- Phân tích và so sánh các tập tin
- Chức năng tìm kiếm và thay thế linh hoạt
- Sao chép đĩa, với bản specialist, ngay cả dưới hệ điều hành DOS
- Tạo tập tin ảnh và lưu dự phòng cho ổ đĩa (tùy chọn nén hay chia
thành từng phần với dung lượng 650MB)
- Giao diện lập trình (API) và kịch bản (chỉ có trong bản
professional & specialist)
- Mã hóa 128-bit, checksums, CRC32, hashes (MD5, SHA-1, ...)
- Xóa tập tin một cách an toàn, làm sạch ổ đĩa cứng để bảo vệ sự
riêng tư của bạn
- Import tất cả các kiểu định dạng clipboard, bao gồm giá trị ASCII
hex
- Chuyển đổi giữa hệ nhị phân, hex ASCII, Intel Hex, và Motorola
S
- Hỗ trợ các tập kí tự: ANSI ASCII, IBM ASCII, EBCDIC,
(Unicode)
- Chuyển qua lại giữa những cửa sổ nhanh chóng. In ấn, phát sinh
số ngẫu nhiên.
- Hỗ trợ tập tin có dung lượng trên 4 GB. Rất nhanh. Dễ sử dụng và
hơn thế nữa...

3.4: Resource Hacker

Thiết kế bởi: Angus Johnson


Bản mới nhất: 3.5.2 (19/12/2009)
Hệ điều hành: Winall
Nền tảng: 32/64-bit
Thể loại: Chỉnh sửa resource các tập tin exe, dll, rc, res
Giấy phép: Freeware/Free
Website: http://angusj.com/resourcehacker

- Resource HackerTM là một tiện ích miễn phí để xem, sửa đổi, đổi tên, thêm,
xoá và trích xuất các resource trong tập tin thực thi (*.exe) và các tập tin
nguồn (*.res). Nó tích hợp một trình biên dịch mã nguồn nội bộ và trình
dịch ngược để làm việc trên các hệ thống Windows (32/64-bit)
- Xem thông tin các resource: Cursor, Icon, Bitmap, GIF, AVI, JPG và ảnh
PNG. Phát các audio resource như WAV và MIDI. Các Menu, Dialogs,
MessageTables, StringTables, Accelerators, Delphi forms, và các thông tin
phiên bản của resource có thể xem với trình biên dịch mã nguồn nội bộ.
Menu và Dialogs cũng có thể được xem đúng theo cách mà nó sẽ thể hiện
khi ứng dụng chạy.
- Sao lưu resource: Các resource có thể lưu được như tập tin hình ảnh (*.ico,
*.bmp…), các file script (*.rc), các tập tin binary resource (*.res), hoặc như
các tập tin untyped binary (*.bin)
- Sửa đổi resource: Resource có thể được sửa đổi bằng cách thay thế các
resource mặc định với một resource nằm trong tập tin khác (*.ico, *.bmp,
*.res…) hoặc bằng cách sử dụng trình biên dịch mã nguồn nội bộ (đối với
các menu, dialog…) Các dialog control có thể được di chuyển hoặc thay
đổi kích cỡ bằng cách click chuột và kéo các dialog control tương ứng
trước khi biên dịch lại với trình biên dịch nội bộ.
- Thêm resource: Các resource có thể được thêm vào một ứng dụng bằng
cách copy chúng từ các tập tin tài nguyên bên ngoài (*.res).
- Xóa resource: Hầu hết các trình biên dịch tự thêm các resource mà không
bao giờ được sử dụng vào ứng dụng. Removing unused resources can
reduce an application's size. Việc loại bỏ các resource không sử dụng này
có thể giúp giảm kích thước của một ứng dụng.
II. Kiến thức cơ bản lập trình hợp ngữ

1. Các hệ thống cơ số, bảng mã ASCII và mạch LOGIC

1.1: Các hệ thống số

1.2: Số có dấu trong hệ Hexa (Thập lục phân)

1.3: Bảng mã ASCII

1.4: Logical Operation

2. Các thanh ghi và công dụng

2.1: Thanh ghi ESP (Con trỏ ngăn xếp - Stack pointer)

2.2: Thanh ghi EIP (Con trỏ chỉ dẫn - Instruction Pointer)

2.3: Thanh ghi EBP (Con trỏ cơ sở - Base Pointer)

2.4: Các thanh ghi dữ liệu EAX, EBX, ECX, EDX

2.5. Các thanh ghi chỉ số ESI, EDI


3. Các cờ (Flags)

3.1: Cờ trạng thái:

3.1.1: Cờ tràn (Overflow Flag)

3.1.2: Cờ chẵn lẻ (Parity Flag)

3.1.3: Cờ Zero (Parity Flag)

3.1.4: Cờ dấu (Sign Flag)

3.1.5: Cờ nhớ(Carry Flag)

3.2: Cờ điều khiển

4. Stack
5. Câu lệnh cơ bản

5.1: Các câu lệnh dùng trong tính toán

5.1.1: Lệnh INC và DEC

5.1.2: Lệnh ADD

5.1.3: Lệnh ADC

5.1.4: Lệnh SUB

5.1.5: Lệnh SBB

5.1.6: Lệnh MUL

5.1.7: Lệnh IMUL

5.1.8: Lệnh XADD

5.1.9: Lệnh NEG

5.2: Các lệnh LOGIC

5.2.1: Lệnh AND

5.2.2: Lệnh OR

5.2.3: Lệnh XOR

5.2.4: Lệnh NOT

5.3: Các lệnh so sánh

5.3.1: Lệnh CMP

5.3.2: Lệnh Test


5.4: Các lệnh nhảy

5.4.1: Lệnh JMP

5.4.2: Lệnh JE/JZ

5.4.3: Lệnh JNE/JNZ

5.4.4: Lệnh JS

5.4.5: Lệnh JP/JPE

5.4.6: Lệnh JNP/JNPE

5.4.7: Lệnh JO

5.4.8: Lệnh JNO

5.4.9: Lệnh JB

5.4.10: Lệnh JBE

5.4.11: Lệnh JL

5.5: Lệnh Call và Ret

5.6: Vòng lặp


5.7: Các lệnh liên quan đến chuỗi

5.7.1: Lệnh MOV

5.7.2: Lệnh REP

5.7.3: Lệnh LODS

5.7.4: Lệnh STOS

5.7.5: Lệnh CPMS

5.7.6: Các chế độ địa chỉ

6. Cấu trúc PE file

7. Hướng dẫn dùng Ollydbg cơ bản để crack


7.1: Giao diện trực quan và các chức năng cơ bản
7.2: Các thủ thuật với Ollydbg ( breakpoint, Entry point…)

III. Crack phần mềm

1. Patching
- Patching (vá) là phương pháp tìm nơi mà chương trình kiểm tra xem nó
đã được đăng ký hay chưa(hay bất kỳ nơi nào quyết định cho phép hay
không cho phép bạn dùng chương trình) sau đó,ta sẽ sửa đổi tập tin chạy
của chương trình để làm cho nó luôn chạy như đã được đăng ký, hoặclà
chấp nhận mọi số serial mà ta nhập vào như là số serial chính xác.
2. Keygenning
- Keygenning (tạo key) là phương pháp tìm nơi chương trình kiểm tra số
serial đúng hay sai, và quy trình tạo số serial, rồi từ đó viết một chương
trình nhỏ để tạo ra số serial chính xác. Tất nhiên, số serial này là chính
xác nên chương trình luôn chấp nhận nó.
3. Serial Fishing
- Serial Fishing (câu serial) là phương pháp tìm nơi mà chương trình so
sánh số serial được nhập với số serial chính xác, rồi từ đó cố gắng thiết
lập sao cho số serial chính xác được tạo ra, tìm nó với các thông tin liên
quan, cuối cùng phát hành nó theo dạng chương trình nhỏ có hộp kiểm
Name/Serial.
4. Self-Keygenning
- Self-Keygenning (tạo key trong) là phương pháp pha trộn giữa Serial
Fishing và Patching. Về cơ bản, Self-Keygenning là phương pháp sửa đổi
chương trình để qua đó thay vì chương trình hiện thông báo lỗi khi nhập
số serial sai thì nó sẽ hiện cho người dùng biết số serial chính xác.
5. Unpacking
- Unpacking (giải nén) là phương pháp tạo ra một tập tin chạy không bị
nén. Về cơ bản, một tập tin chạy khi bị nén (tức packed) sẽ rất khó hay
không thể sử dụng các phương pháp cracking thông thường (Patching,
Serial Fishing, Self-Keygenning, Keygenning ...) để crack được. Vì vậy
cần phải có bước unpacking trước, rồi mới tiến hành các phương pháp
cracking thông thường trên được. Để hiểu thêm về thế nào là "một tập tin
chạy bị nén" tôi sẽ giải thích ở gần cuối bài viết này.
6. Inline-Patching
- Inline Patching (vá khi nén) là phương pháp cracking dành riêng cho các
tập tin chạy bị nén. Như ở trên, thông thường khi gặp một tập tin chạy bị
nén, thì cần phải unpack (giải nén bằng công cụ (unpack tools/ unpack
scripts) hay bằng thủ công (manual unpack)) rồi mới tiến hành phương
pháp cracking khác được. Nhưng với inline patching thì khác, nó là sự
pha trộn giữa Patching và Unpacking cùng với kinh nghiệm từng trải, tốt
nhất nếu bạn chưa có kinh nghiệm thì đừng động tới nó vì bạn sẽ hiểu
bạn sẽ có ít hơn là được.

IV. Chống Crack phần mềm

The Basic Types of Software of Protection

Anti-Ollydbg Techniques & Solutions

Anti-Cracking Techniques

You might also like