1. Trang chủ
  2. » Công Nghệ Thông Tin

Cracking part 21 pptx

6 169 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 6
Dung lượng 123,03 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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ươn

Trang 1

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

Trang 2

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ờ …

Trang 3

***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 !!!

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:

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ề Handle, Class Name, Window-Text, Parent Window-Handle, Parent Window-Class Name, Parent Window-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

Trang 4

đá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 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

Trang 5

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í

Trang 6

dụ trong trường hợp này để tìm button chúng ta sẽ đánh BMSG 0129 WM_COMMAND

 

Ngày đăng: 01/07/2014, 13:20

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm