OK, và sau đây là câu trả lời, các bác xem thử coi có đúng với câu trả lời của các bác không nha ; 1 – Đây là 1 chương trình 32 bit 2 – Các bác có thể nhập số đăng kí bằng cách gõ vào kh
Trang 1+ SoftICE 4.0 : 5419-00009D-DF
+ SoftICE 4.05 : 5109-0122DF-FF
Sau đó các bác típ tục cài đặt cho đến khi hiện bảng thông báo các bác có muốn restart lại máy không , các bác khoan hãy ấn Yes mà hãy dùng Notepad ( hay chương trình soạn thảo nào cũng được ) để mở file winice.dat trong thư mục vừa cài đặt SoftICE Các bác tìm dòng INIT=”WR;X;” ( hoặc có thể là INIT=”X;” ) ở gần đầu file và sửa thành
INIT=”WD;WR; WL;CODE ON;X;” Sau đó các bác kéo xuống gần cuối file tìm các dòng sau :
; ***** Examples of export symbols that can be inluded for Windows 9x *****
; Change the path to the appropriate drive and directory
;EXP=c:\windows\system\kernel32.dll
;EXP=c:\windows\system\user32.dll
;EXP=c:\windows\system\gdi32.dll
;EXP=c:\windows\system\comdlg32.dll
;EXP=c:\windows\system\shell32.dll
;EXP=c:\windows\system\advapi32.dll
;EXP=c:\windows\system\shell232.dll
;EXP=c:\windows\system\comctl32.dll
;EXP=c:\windows\system\crtdll.dll
;EXP=c:\windows\system\version.dll
;EXP=c:\windows\system\netlib32.dll
;EXP=c:\windows\system\msshrui.dll
;EXP=c:\windows\system\msnet32.dll
;EXP=c:\windows\system\mspwl32.dll
;EXP=c:\windows\system\mpr.dll
Và các bác hãy xóa hết các dấu ; ở các dòng này Xong các bác save flie lại rùi restart lại máy
-
Để vào SoftICE, các bác ấn Ctrl-D Và để sử dụng SoftICE có hiệu quả, các bác nên để các khung như thế này :
| -|
| _Registers | Để chỉnh sửa khung này, các bác đánh R
| -|
| _Data Window _| Các bác đánh D để xem address , đánh E để chỉnh sửa
| -|
| _Code Window _| Đánh U để xem address , đánh A để chèn asm code
| -|
|_Command Window_| Khung này để đánh lệnh và đọc kết quả
| -|
Những phím quan trọng khác ( theo mặc định ) :
H/F1 : Online Help
F5/Ctrl-5 : Run
Trang 2F8 : “bước” vào functions
F10 : “bước” qua functions
F11 : “bước” ra khỏi functions
3 Tìm đoạn code registration
===================
Chắc chắn đây là “con đường” dễ nhất để thực hành, để “có” 1 chương trình shareware
và đăng kí nó
3.1 Phần mềm thực hành : Task Lock 3.00
-
Đây là 1 chương trình mà sự bảo vệ tương đối đơn giản, đó chỉ là 1 đoạn code mà không bao giờ thay đổi
3.1.1 Tìm hiểu về chương trình
-
Trước khi bước vào crack chương trình , các bác hãy trả lời 3 câu hỏi này nha :
1 - Đó là chương trình 16 hay 32 bit ?
2 - Làm thế nào để nhập số đăng kí ?
3 - Phần help có thể giúp gì chúng ta để tìm ra cách làm việc của registration không ? Các bác hãy tự tìm câu trả lời cho các câu hỏi trên trước khi chúng ta típ tục nha Em chờ các bác đấy…
Xong chưa các bác ? OK, và sau đây là câu trả lời, các bác xem thử coi có đúng với câu trả lời của các bác không nha ;)
1 – Đây là 1 chương trình 32 bit
2 – Các bác có thể nhập số đăng kí bằng cách gõ vào khung dialog khi các bác chọn menu “Register!Register…”
3 – Và qua phần Help, các bác có thể biết được chương trình có 2 cách đăng kí :
Individual (đăng kí cá nhân) và Site License (đăng kí tại site)
Thế nào, câu trả lời của các bác có đúng không ;) Nếu bác nào trả lời đúng hết thì em xin chúc mừng vì “ các bác có mùi cracker rùi đấy “ ( sorry bác benina nha vì sử dụng câu của bác mà chưa xin phép ;) Đọc đến đây em nghĩ chắc sẽ có bác thắc mắc rằng tại sao phải trả lời câu hỏi 1 làm gì Đúng là em thấy các tuts về SoftICE khác đều không nói về vấn đề này Vì sao ? Vì các tác giả viết sai? Không đâu Thực ra việc trả lời câu hỏi 1 sẽ giúp cho việc crack của các bác đơn giản hơn nhiều Lý do ư , xin mời các bác đọc típ sẽ
rõ Hehehe…
3.1.2 “Bẫy” (breakpoint) các chuỗi code
-
Những đoạn code thường được nhập vào những box Windows Edit Và để dừng các đoạn code, SoftICE phải “đọc” được nội dung của các box Windows Edit này với “sự giúp sức” của 1 trong các function (lệnh) sau :
- Đối với chương trình 16 bit : GetWindowText , GetDlgItemText
Trang 3- Đối với chương trình 32 bit : GetWindowTextA , GetWIndowTextW ,
GetDlgItemTextA , GetDlgItemTextW
Giờ thì chắc các bác đã hiểu vì sao em bảo các bác trả lời câu hỏi 1 ở trên Okie, giờ chúng ta típ tục nha À quên, em còn điều này chưa nói, các bác có thấy cái chữ cái A và
W trong các function của chương trình 32 bit không, no’ cho chung’ ta biết nếu function
sử dụng one-byte hay double-byte Double-byte code là RARE Đến đây chắc các bác đã hỉu ý em: “If i only could break on GetWindowText” (cái này em xin để nguyên văn câu của tác giả vì em chả bít dịch thế nào cả ;)
Để đặt breakpoint trong SoftICE , các bác vào SoftICE bằng cách ấn Ctrl-D, sau đó dùng lệnh BPX cộng với tên của function hoặc memory address Vì TaskLock là chương trình 32-bit nên sẽ đặt breakpoint ở hàm GetWindowTextA Nếu nó không làm việc, chúng ta
có thể thử hàm khác
Trong khung Command Window của SoftICE chúng ta đánh
BPX GetWindowTextA
Nếu các bác gặp lỗi “No LDT”, các bác hãy coi xem các bác có đang chạy chương trình nào không ( tốt nhất là không nên chạy chương trình nào khi các bác dùng mở SoftICE ) Đặc biệt nếu các bác dùng Norton Commander/Dos thì nó sẽ disturb function này Các bác có thể kiểm tra nếu các bác có bất kì breakpoint nào trong list breakpoint bằng lệnh :
bl
Nó sẽ hiện ra như thế này : 00) BPX USER32!GetWindowTextA C=01
Để ra khỏi SoftICE, các bác ấn Ctrl-D hoặc F5 hoặc dùng lệnh X
Okey, các bác đã bẫy bất kì lệnh gọi GetWindowTextA Bây giờ các bác hãy nhập số nào
đó (ta gọi là FS nha) và ấn OK… chuyện gì sẽ xảy ra? Còn gì nữa, 1 cái nag văng ra nói rằng bác nhập sai registration number Nhưng như dzậy có nghĩa là sao, nghĩa là nó không gọi hàm GetWindowTextA, vậy thì chúng ta sẽ thử với GetDlgItemTextA Nhưng trước hết chúng ta phải xóa cái breakpoint đã đặt đi đã Vào SoftICE đánh : bc 0 , xong chúng ta set breakpoint mới :
BPX GetDlgItemTextA
Chúng ta hãy thử lại nha
3.1.3 Làm việc với SoftICE
-
Oh, nó đã làm việc! Bây giờ chúng ta… uống ly nước đã, em khát nước quá rùi ;))
OK, bây giờ chúng ta đang ở trong SoftICE , tại cái nơi mà function GetDlgItemTextA bắt đầu Để “nhảy” đến nơi mà nó được gọi, các bác hãy nhấn F11 Rùi, chúng ta đang ở trong SGLSET.EXE , nếu các bác không biết thì các bác hãy nhìn vào dòng nằm giữa khung code window và comand window, các bác sẽ thấy như thế này:
-SGLSET!.text+1B13 -
Bây giờ các bác có thể disable breakpoint bằng lệnh : bd 0
Nếu các bác muốn enable nó lại thì các bác dùng lệnh : be 0
Các bác nhìn vào dòng đầu tiên trong code window :
CALL [USER32!GetDlgItemTextA]
Để thấy những lệnh ở trên, các bác nhấn Ctrl-Up Nếu các bác không bít gì về Assembler
Trang 4thì các bác hãy nhìn xuống đây :
RET Kết thúc function
PUSH EBP _Bắt đầu function
MOV EBP,ESP
SUB ESP,0000009C
PUSH ESI
LEA EAX,[EBP-34] _ EAX=EBP-34
PUSH EDI
MOVE ESI,ECX
PUSH 32 _Lưu chiều dài của FS
PUSH EAX _ Lưu địa chỉ của text buffer
PUSH 000003F4 _Lưu Identifier của control
PUSH DWORD PTR [ESI+1C] Lưu handle của dialog
CALL [USER32!GetDlgItemTextA] _Chúng ta đang ở đây
Em xin giải thích chút xíu : lệnh PUSH có nhiệm vụ lưu lại giá trị cho lần sử dụng sau Các bác chú ý vào 2 dòng màu đỏ Nhìn vào đoạn lệnh trên chúng ta bít được địa chỉ của text buffer đã được cất giữ trong EAX, và EAX đó là EBP-34 Bây giờ chúng ta hãy nhìn vào EBP-34, nó sẽ như thế này : d ebp-3
Chúng ta nhấn F10 đến khi thấy cái gì liên quan đến EBP-34, và nó đây (không bít có giống của các bác không) :
LEA EAX, [EBP+FFFFFF64] _EAX=EBP-9C
LEA ECX, [EBP-34] _ECX=EBP-34
PUSH EAX Lưu EAX
PUSH ECX _Lưu ECX
CALL 00403DD0 Gọi function
ADD ESP, 08 Xóa thông tin đã lưu
TEST EAX, EAX _Kiểm tra function lần nữa
JNZ 00402BC0 Nhảy nếu không bằng 0
Theo em thì đây là 1 đoạn code so sánh, nó làm việc như thế này : Nhập vào 2 giá trị , trở
về 0 nếu 2 giá trị bằng nhau, còn không bằng nhau thì khác 0
Okey, cái gì nằm phía sau [EBP+FFFFFF64], do SoftICE không thể tự negative number, nên để tìm giá trị thật của nó các bác làm phép tính như thế này:
100000000 – FFFFFF64 = 9C
Trong SoftICE , các bác cũng có thể thực hiện phép tính ấy bằng lệnh :
? 0 – FFFFFF64
Tại sao là 0 mà không phải 100000000 ( không lẽ 0=100000000 => điều này trái với các quy tắt toán học ) ? Đó là số 100000000 qua lớn đối với SoftICE, nhưng khi ta thay
100000000 bằng 0 thì nó cũng cho kết quả như vậy
Và bây giờ là lúc xem cái gì nằm phía sau EBP-9C ( hồi hộp quá ) , các bác làm như sau :
d ebp-9c
Ah, data window hiện ra cho chúng ta 1 dãy số - registration number đây ư ? không đâu (
Trang 5mà sao cái số này giống cái số mà hồi nãy ta nhập vào quá hen ) Các bác có nhớ đoạn code ở trên không, nó so sánh 2 số : 1 là số ta nhập vào , còn số thứ 2 chính là registration number Do vậy chúng ta tiếp tục “nhảy” với F10 nha ;) ( cố lên các bác , thằng
TaskLock sắp là của các bác rùi đấy) Và chúng ta sẽ đến đoạn code này đây ( nó giống đoạn code ở trên đấy các bác ạ ) :
LEA EAX, [EBP-68] EAX=EBP-68
LEA ECX, [EBP-34] _ECX=EBP-34
PUSH EAX Lưu EAX
PUSH ECX Lưu ECX
CALL 00403DD0 Gọi function
ADD ESP, 08 _Xóa thông tin đã lưu
TEST EAX, EAX Kiểm tra function lần nữa
JNZ 00402BFF _Nhảy nếu không bằng 0
Và các bác hãy chú ý đến dòng LEA EAX, [EBP-68] , nó dấu cái gì vậy ? Thui thắc mắc làm cái gì, ta dùng lệnh d là biết nó dấu gì thui mà Nào, các bác đánh cùng em nha : d ebp-68
Hehehe, đây rùi, cuối cùng thì cái registration number nó cũng vác mặt ra !!!
3.2 Phần mềm thực hành : Command Line 95
-
Đây là 1 chương trình khá dể, nó chỉ dùng 1 đoạn code đơn giản để tính số serial, do đó chúng ta sẽ dùng nó để làm ví dụ
3.2.1 Tìm hiểu về chương trình
-
Sau khi kiểm tra (cách kiểm tra xem ở phần trước), các bác bít đây là 1 chương trình 32bit, và nó yêu cầu chúng ta nhập tên đăng kí và registration trong 1 hộp thoại
Okie, sau khi bít những thông tin “quý báu” trên, chúng ta sẽ đến bắt đầu “bẫy” nó
Hehehe dzui qua’ ;))
3.2.2 “Bẫy” các chuỗi code
-
Giống như với TaskLock “xấu số”, chúng ta sẽ đặt breakpoint Chúng ta có thể set
breakpoint cho cả 2 function : GetWindowTextA và GetDlgItemTextA Vào SoftICE (đừng nói là các bác không bít vào nha, đọc đến đây rùi mà nỡ nói 2 chữ không bít là buồn em lắm đó), rùi đánh :
BPX GetWindowTextA
BPX GetDlgItemTextA
Bây giờ chúng ta mở hộp thoại đăng ký ra, nhập tên ( gọi là FN – Fake Name ) và nhập
Trang 6số nào đó ( em nhập là 12345 và ta hãy gọi số này là FS – Fake Serial ), sau đó nhấn OK…
Và… BÙM, SoftICE nhảy ra giữa màn hình tại function GetDlgItemTextA Cũng như