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 !!! 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 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 . 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. 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ả