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

Cracker Handbook 1.0 part 30 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 (147.96 KB, 6 trang )

06.3 General
========
Chọn Fake Serial
Khi bước vào “con đường tội lỗi” cracking, các bác nên chọn cho mình 1 con số
(như ngày sinh của mình, hay là của người yêu, hay là telephone của người yêu
chẳng hạn ) và con số này sẽ theo các bác đến hết quãng đời cracking của
mình. Và khi crack các chương trình yêu cầu nhập số serial, các bác sẽ rút “bảo
bối” này ra (và đương nhiên các bác sẽ nhận đuợc 1 cái nag văng vào mặt) bởi lẽ
theo thời gian các bác chác chắn sẽ biết được nó bằng bao nhiêu trong hệ hex cũng
như decimal (như của em là 1234567890, và trong hex nó sẽ là 499602D2 – hehe
quá dễ nhớ :)
Ở đây em cũng nói thêm 1 điều là các bác nên chọn số mà các chữ số không giống
nhau , bởi nếu chương trình không kiểm tra từ số đầu tiên mà từ số thứ 2 hoặc thứ
3 thì sao (keke thì đơ chứ seo nữa) hoặc giả sử các bác dùng số 1122334455 và
khi kiểm tra code nó hiện ra là “1” thì các bác có biết nó là số 1 nào không, còn
nếu các bác sử dụng các chữ số khác nhau thì sau 1 lần kiểm tra các bác sẽ nhận ra
ngay.

Lệnh CALL
Mỗi khi các bác quyết định nhảy qua 1 lệnh CALL nào đó trong đoạn code bảo vệ,
các bác hãy kiểm tra nội dung của các register bị thay đổi, các bác có thể tìm thấy
real serial ở đó đó. Nếu các bác đã kiểm tra tất cả posibilities mà không thấy gì, các
bác hãy trace lại và khảo sát từng function.

Các cracker/programmer suy nghĩ như thế nào ?
Các programmer được dạy rằng mỗi khi có công việc nào đó mà cần hoàn thành
nhiều hơn 1 lần thì nên tạo ra function để thực hiện công việc đó, và chỉ gọi
function khi cần thi hành công việc. Hầu hết các chương trình đều dùng name kết
hợp với serial để kiểm tra code ít nhất 2 lần : 1 lần là khi chúng ta nhập name và
serial, còn 1 lần là khi chúng ta khởi động chương trình. Vì vậy các programmer
thường sẽ gọi function để kiểm tra code đăng kí của các bác. Và thông thường thì


function sẽ được gọi mỗi khi code được check. Tại điểm này các bác sẽ thấy nơi
mà chúng ta bắt đầu. Nếu các bác patch function được gọi để kiểm tra code đăng
kí, nó sẽ hiện lên hợp lý mỗi khi chương trình check nó.
Kĩ thuật ở đây không chỉ áp dụng để crack những chương trình dùng code name và
serial. Đừng tự trói buộc bản thân bằng cách nghĩ "Inside the Box" (cái này em chả
biết dịch thế nào :), những kĩ thuật này có thể áp dụng với các kiểu bảo vệ khác

Sử dụng INT 3
Trong trường hợp bạn chưa chuẩn bị để nghe, INT 3 được set để debug theo ý
định. Vì vậy nếu các bác muốn break tại 1 điểm nào đó, các bác có thể sử dụng
kiến thức này. Các bác nên copy file mà các bác muốn break ra rồi hãy patch file
copy đó. Hãy thử thay 1 byte đơn bằng opcode CC ( CC là opcode của INT 3). Nếu
các bác không tìm được điểm nào, các bác đừng quên NOP (opcode của NOP là
90) những byte còn lại. Sau đó các bác có thể sử dụng SoftICE để break INT 3.
Đùng quên chú ý giá trị gốc, bởi các bác cần nó khi SoftICE break tại vị trí này.
Khi đã ở đó (trước chỗ INT 3 được thi hành), các bác hãy gõ A (nếu các bác không
làm thế thì các bác sẽ gây ra 1 General Protection Fault) . Việc tiếp theo tùy ý các
bác

Giá trị trả về
Khi function trả về 1 giá trị, các bác hãy để ý : nếu check thành công thì giá trị trả
về thường là 1 (có 1 vài trường hợp là 0), còn nếu là -1 nghĩa là check không thành
công.

Unregistred
Nếu các bác crack 1 chương trình và nó bảo là unregistred (chưa đăng kí), mặc dù
các bác đã đổi các lệnh nhảy và "buộc" chương trình phải chấp nhận số serial "lụi"
của chúng ta nhưng chương trình sẽ ghi nó vào registry hoặc 1 file ini nào đó và
khi chúng ta chạy lại chương trình, nó sẽ đọc lại số trong file ini này hoặc registry.
Vì vậy ở đây chúng ta cần phải tìm "tử huyệt" - nơi mà chương trình kiểm tra lại số

serial ( hàm RegQueryValueEx[A] hoặc hàm GetPrivateProfile[A] ) và buộc
chương trình chấp nhận bất kì số serial nào mà chương trình tìm được. Đây là 1
quá trình rất khó, do đó chúng ta cần phải chuẩn bị thật nhiều hell. Nhưng ý tưởng
hay nhất là dùng W32DASM để disassemble "mục tiêu", sau đó nhìn vào bảng
Import function để tìm những function nói trên, sau đó trace 1 trong số đó (bởi các
bác sẽ tìm thấy rất nhiều function giống nhau) và khi đã tìm được tử huyệt đó thì
các bác sẽ thấy có jnz (hoặc đại loại như vậy) và còn chờ gì nữa mà không đổi nó
thành jz.

Theo dõi
Theo dõi những giá trị bị thay đổi khi các bác debug 1 chương trình, không cần nói
cũng biết đây là 1 việc khá quan trọng đối với crack và reverse engineer. Để mở
cửa sổ theo dõi , chúng ta đánh lệnh ww trong SoftICE. Để theo dõi chúng ta đánh
lệnh watch trước tên giá trị cần theo dõi (ví dụ watch user_id) và giá trị của nó vào
cửa sỗ theo dõi. Chúng ta có thể theo dõi register và stack offset (không kể đến giá
trị memory)
bằng cách dùng nó trong chỗ của tên giá trị, chẳng hạn watch es:di và watch [ebp
18]. Mỗi khi register và stack offset chỉ đơn thuần point đến địa chỉ mà giá trị thực
được cất giữ, các bác có thể theo dõi giá trị register hoặc stack offset bằng cách
đánh * trước tên của register hoặc offset (ví dụ : watch *es:di).

06.4 InstallSHIELD Setups
Chắc hẳn các bác ai cũng ít nhất 1 lần làm công việc install software rồi phải
không ? Vậy các bác có biết nó là gì , được hoạt đông trên nguyên lý nào , hay để
chạy nó cần có những file nào …? Các bác có bao giờ để ý đến những câu hỏi đó
không ? Nếu không thì bây giờ mời các bác hãy xem kĩ phần dưới đây để trả lời
cho các câu hỏi đó – và đương nhiên nếu các bác muốn crack tốt các
InstallSHIELD thì lại càng không thể không đọc :)
Kiến thức tổng quát :
***_SETUP.LIB là 1 file Data-Base nén của InstallSHIELD. Nó có thể chứa

những file EXE và DLL cần thiết cho việc install. Đôi khi những file này cùng
nằm trong file SETUP.EXE, nhưng trong trường hợp của chúng ta chúng được nén
trong file _SETUP.LIB.
***Bất kì 1 file nén Data-Base nào đều bắt đầu với "13 5D 65 8C 3A 01 02 00".
Tại điểm cuối của mỗi file nén Data-Base các bác có thể thấy tên tất cả các file.
SETUP.PKG chứa tên tất cả các file trong chương trình Data-Base mà chúng ta
không cần đến và vì vậy chúng ta không cần SETUP.PKG. InstallSHIELD sử dụng
SETUP.PKG để refer file trong chương Data-Base. Dù vậy chúng ta cũng không
cần SETUP.PKG , bây giờ chúng ta đến với file tiếp theo.
***_SETUP.DLL 1 file nguồn DLL của InstallSHIELD và nó cũng không quan
trọng đối với chúng ta bởi < nó chỉ là 1 file Support được cung cấp cho bất kì 1
chương trình InstallSHIELD nào. Và đây – SETUP.INS – file Installation Script đã
được compile và nó cũng là phần quan trọng nhất trong quá trình InstallSHIELD
Installation. Trong Win95 biểu tượng của nó là hình Trái đất nối với cái điện thoại.
File này điều khiển mọi hoạt động và chứa hầu hết các message nhảy ra trong quá
trình install và nó sẽ đóng vai trò chủ yếu trong APPRAOCH thứ 2 của chúng ta.
***Và SETUP.EXE vẫn là đi đầu cả, nó là “bộ máy” install và thi hành các script
và thực hiện tất cả từ CALL đến DLL và Disk-Access (32 bit). Ok, nếu các bác đã
đọc đến đây có nghĩa là các bác đã có 1 chút kiến thức về InstallSHIELD, và dĩ
nhiên điều đó sẽ giúp các bác nhiều trong việc crack.

Phương pháp crack :
Như các bác biết, hầu như các software đều được package bằng InstallSHIELD, và
không ít trong số đó lại chứa những script dùng để hỏi serial trong quá trình install.
Cách sử dụng nó rất đơn giản : các bác chỉ việc double click vào ICOMP.EXE để
decompress những file dữ liệu và vượt qua setup 1 cách “an toàn” mà không bị
“bắt lại”, và dù thế thì chương trình của các bác vẫn bình thường, không hề có 1
chút “sẹo” nào cả !!!
Trong config của InstallSHIELD , file SETUP.INS chứa các complied script. Khi
mà quá trình install đòi hỏi serial nằm trong script, em nghĩ … tại sao chúng ta

không thay InstallSHIELD complied script bằng 1 file bình thường khác được tạo
ra mà không có bất cứ cấu hình nào ???
Và đây là tất cả những gì chúng ta cần phải làm :
Code:
1. Chạy InstallSHIELD Pro 5
2. Tạo 1 installation mới với 1 file trong đó. Đừng làm gì với file đó cả
3. Biên dịch installation . Nó sẽ đưa ra 1 chùm file trong
“C:\myinstallations\ProjectX\media\disk1\ ”
4. Copy file SETUP.INS vào 1 chỗ an toàn nào đó. Chúng ta sẽ dùng nó sau.
5. Khi các bác gặp chương trình InstalllSHIELD nào mà yêu cầu số serial (hay
những cái đại loại như thế), hãy copy file SETUP.INS đã có sẵn trong chương trình
và đặt tên là SETUP.IN$, sau đó copy file SETUP.INS mà chúng ta đã tạo ở bước
4 đè lên file SEUP.INS của chương trình.
Và vấn đề của chúng ta là nếu script đã được biên dịch chứa những thủ tục dứt
khoát, cách làm này có thể sẽ không thành công… Tuy vậy, trong phần lớn trường
hợp khi mà vị trí của file và khóa registry được mã hóa vào DATA1.CAB chứ
không phải là SETUP.INS script thì nó lại làm việc.

06.5 Key File Protections
===============
***1. Tool tốt nhất để analyze 1 Key file là 1 chương trình Hex Editor. Text Editor
không phù hợp với công việc này.
***2. 1 Key file không có gì cả ngoài các dãy byte liên tiếp nhau nằm trong 1 file
nhỏ. Những byte này có nhiệm vụ cho biết thông tin về người sử dụng, kiểm tra
tính nguyên vẹn của key file, encrypted ngày, tên, địa chỉ, encrypted các cờ …
***3. Để đánh bại 1 chương trình bảo vệ bằng Key file, các bác nên tạo 1 chương
trình nhỏ để code 1 Key file giả khác. Chương trình này phải có thể tạo file với
những cái tên và kích thước khác nhau. Nội dung của file giả này phải có thể đọc
được. Tại sao phải đọc được thông tin trong file giả này ? Bởi chương trình được
chọn sẽ đọc vị trí offset của key file. Mỗi đoạn text được đọc trong file sẽ thông

báo vị trí mà nó được đọc tại bất kì thời gian nào. Nó sẽ cho biết nơi mà certain
checksums phải được add vào key file cuối cùng.
***4. Các bác phải nghĩ ra 1 cái tên cho Key file của mình, tạo 1 file giả và copy
nó vào cùng thư mục với chương trình. Sau đó chạy chương trình và xem điều gì
xảy ra. Nếu các bác nhận được cái nag “Invalid Key File” hoặc “Corrupted Key
File” , công việc crack được 1 nửa, việc còn lại là các bác phải tìm đoạn code gọi
nag trên.
***5. Key file phải được đọc - đó là điều kiện tiên quyết. Chương trình phải đọc
key file để kiểm tra giá trị của nó. Các bác hãy luôn nhớ điều này !!!

The_lighthouse(REA)
06.6 NAG Screens
===========
NAG Screen Cracking
Có thể những điều sau đây hơi khó hiểu, nhưng các bác nên biết và tốt nhất là nên
thuộc lòng trong đầu – dĩ nhiên là nó có lợi cho các bác. Chúng ta bắt đầu nào :
Khi các bác gặp 1 cái NAG screen nào đó , các bác hãy load SoftICE lên và đánh :
HWND
Các bác sẽ thấy như sau (hoặc đại loại như vậy) :
Code:
Window-Handle | hQueue | SZ | Qowner | Class-Name | Window-
Procedure
0080 (0) | 2057 | 32 | MSGSVR32 | #32711(switch_win) |
17EF:00004B6E
0084 (1) | 2057 | 32 | EXPLORER | shell_trayWnd |
1487:0000016C
… | … | … | … | … | …
Nhiệm vụ bây giờ của các bác là “kéo” cái bảng trên xuống, tìm trong cột Qowner
handle của process thuộc chương trình cần crack nag, và nếu cái nag đó có nút OK
hãy tìm nó ở cột Class-name . Còn nếu cái nag đó không có gì cả, nhưng lúc đó lại

có cái gì đó có 1 cái nút nằm sau nó, đó không phải là handle mà các bác cần break
đâu. Do đó để tìm được handle cần tìm các bác cần phải thử từng cái. Danh sách
handle thường khá dài, tuy nhiên cái NAG screen thường nằm trong “đám” đầu
tiên của chương trình.
Em khuyên các bác nếu muốn crack nag thì nên dùng SMU Winspector. Chương
trình này sẽ giúp các bác tiết kiệm thời gian hơn trong việc tìm handle. Nó có
nhiệm vụ tìm ra các thông tin mà chúng ta cần, như về Window-Handle, Window-
Class Name, Window-Text, Parent Window-Handle, Parent Window-Class Name,
Parent Window-Text, Module …
Khi các bác đã tìm được handle của nag screen rồi > sử dụng lệnh BMSG. Nếu
các bác muốn chính xác các thông số quy định -> dùng lệnh :
HELP BMSG
Okey, giả sử cái nag của các bác có nút OK và các bác đã tìm đúng cái handle ->
hãy đánh lệnh sau :
BMSG 0084 WM_DESTROY
Trong đó 0084 là handle của nag. Vậy câu lệnh trên sẽ làm gì? Nó sẽ báo cho
SoftICE để break sau khi cái nag được tắt. Các bác sẽ nằm sau trong 1 vài API “vô
danh”. Do đó để trở đoạn code của chương trình các bác phải ấn F12. Tại đây các
bác phải tìm được chỗ mà nag được gọi ra bằng cách set BPX hầu hết các lệnh
CALL. Nag screen sẽ được tạo ra hay xóa bỏ ở cùng 1 lệnh CALL, vì vậy nếu các
bác tìm được lệnh CALL đó rồi thì hãy làm theo bản năng của 1 cracker… kekeke

Splash Screens
Cách nhanh nhất để crack nag là sử dụng 1 chương trình Hex – Editor và cặp mắt
của các bác. Hãy khởi động chương trình và chờ đến khi các nag văng ra. Bây giờ
hãy chú ý đến Taskbar và từ đầu tiên của dialog message. Sau đó load file chương
trình lên bằng Hex – Editor và tìm các từ đã thấy ở trên. Nếu tìm ra nó, hãy kéo lên
và tìm tiếp 4 byte FF FF FF 80 … và hãy sửa 80h bằng 90h. Sau khi patch xong
hãy mở lại chương trình và cái nag sẽ đi về cõi cực lạc :)


06.7 Runtime Limits
============
Hạn chế số lần sử dụng
Nếu các bác gặp phải chương trình hạn chế số lần sử dụng, chắc chắn sẽ có 1
counter. Hãy tưởng tượng rằng chiếc conuter sẽ tự giảm đi sau mỗi làn sử dụng
chương trình. Như vậy sẽ có 1 DEC thường xuyên xuất hiện mỗi khi các bác khởi
động chương trình . Bình thường các bác có 1 chương trình 32bit, vậy sau khi
disassembly chương trình ra hãy tìm chuỗi “dec dword ptr” cùng với grep. Việc sử
dụng grep trong trường hợp này rất quan trọng để nó cho phép các bác thấy những
gì xảy ra trong cùng 1 vị trí.

Runtime Limit Cracking
==============
Giả sử chúng ta đã dùng gần hết số lần cho phép dùng chương trình (giả sử chương
trình quy định 25 lần). Bây giờ chúng ta hãy chạy chương trình và chú ý đến số lần
mà các bác đã dùng (nó sẽ được thông

×