freewarez
08-06-2004, 00:26
DL tools www.ctools.net
Phần IV: Làm sao để ***** được một soft…
Chào các bạn, chúng ta lạI gặp lạI nhau…;) Trong phần IV này chúng ta sẽ bàn đề vấn đề chính đó là làm sao để ***** được một phần mềm bằng WDASM và Hacker Views ??? (không dùng SoftIce).
He he he câu hỏI thật dễ nhưng mà trả lờI không dễ chút nào…!!! Tôi cũng như các bạn khi tập tễnh bước vào làng ***** cũng phảI toát mồ hôi mớI ***** được một phần mềm. Sau đây là một số kinh nghiệm bản thân tôi khi muốn ***** một phần mềm bằng WDASM và Hacker Views .
Chú ý: Trong bài này tôi có tham khảo bài viết của anh HOAVELU—Thanx for support
I. Tổng Quát:
Trên thị trường phần mềm hiện nay có rất nhiều phần mềm, chủng loạI thật đa dạng và phong phú…MỗI ngày lạI có nhiều phần mềm mớI ra đờI, bản thân những phần mềm đã xuất hiện cũng luôn luôn nâng cấp lên version mới…Do đó cách ***** luôn luôn phảI linh động , không được lấy y chang cái cũ mà áp dụng cho cái mới…Sẽ thất bạI ngay!!!
Ví dụ: VớI phần mềm Winzip ver 8.0 bạn có thể dùng SoftIce tìm đến dòng 00407AA3 LEA EAX,[EBP-0140] , sau đó đánh vào D EBP-0140 là tìm được số ****** tương ứng vớI user name nhập vào…Nhưng vớI Winzip 8.1 , nếu bạn áp dụng y chang như cách đốI vớI Winzip 8.0 sẽ chẳng được gì…Do đó bạn hãy dùng chính cái đầu của mình hơn là áp dụng một cách máy móc như con vẹt nhưng cái đã học
II. Cài Đặt
Hầu hết (khoảng 70%) phần mềm đều cài đặt xong rồI ta mớI *****…(Tuy nhiên có những phần mềm bắt nhập license khi setup như Window, Photoshop Visual Studio…thì ta sẽ bàn sau). Sau khi cài đặt xong bạn hãy chạy soft cần ***** sau đó ghi nhớ thông báo bắt đăng ký hay nhập license code, user code v.v.
III. Unpack
Một số soft được tác giả nén lạI, vì sợ *****…ke ke ke, đơn cử như Vietkey 2000 . Bạn phải xem coi chương trình có được nén(pack) lại hay không. Nén ở đây không có nghĩa là được nén bằng WinZip hay WinRAR mà file .EXE được nén nhỏ lại mà vẫn có thể chạy được bình thường không cần giải nén. Để biết file có bị nén hay không, bạn phải xem mở file .EXE đó ra để xem đoạn mã của nó. Ở đây tôi dùng WinNC, chọn file cần xem và nhấn F3. Thông thường, nếu file đã bị nén thì nó sẽ có 1 dòng đặc trưng trong file bị nén ở đầu file. Chẳng hạn như được nén bằng ASPack thì (thường) trong file sẽ có chuỗi "aspack". Nén bằng UPX thì sẽ có dòng "UPX...". Còn đối với shrink thì có chữ "shrink". Tuy nhiên, cũng có một vài công cụ giúp ta giải nén (unpack) mà không cần biết file được nén theo dạng nào, đó là nó tự động nhận dạng. Tuy nhiên, nếu dạng được nén không được hỗ trợ thì nó cũng đành bó tay. Tiêu biểu cho loại này là ProcDump32, nó hỗ trợ khá nhiều dạng phổ biến như ASPack, Code Safe 3.X, PC Guard 2.10, PE Compact, PKLITE... bạn có thể chọn "*unknown*" để chương trình tự động nhận dạng.
Ngoài ra, có thể chương trình còn được bảo vệ bởi 1 đoạn mã bảo vệ (Security Code). Đây là một đoạn mã dùng để bảo vệ chương trình tránh bị debug (anti-debug) hay thay đổi kích thước. Đối với loại này, chúng ta cũng có một số chương trình để bỏ phần Security Code đó, có thể kể ra là : Anti Crypt, UnCode Crypt, tEunlock...
IV. Bắt tay vào *****
*.Bước 1: sau khi chạy chương trình bạn hãy ghi nhận lạI những thông báo bắt đăng ký đạI loạI như “Enter Registration Code”, Register, evalution copy, unregistered version…v.v và v.v
*.Bước 2: Nhấn vào và nhập vào đạI một số ******/Unlock Code/Registration Code bất kỳ…Sau đó nó sẽ hiện lên một nag báo rằng chúng ta đã nhập sai, yêu cầu nhập lại…Không sao, hãy ghi lạI dòng thông báo mà bạn nhận được khi nhập sai như : “Incorrect Password...", "Wrong ******...", "Re-enter password ... "
*.Bước 3:
Chạy W32Dasm, chọn "Open file to Disassembler..." hay nhấn trên thanh công cụ cũng được.
_ Chọn file cần *****.
_ Trên menu Refs, chọn String Data References. Tại sao ta phải làm như vậy, bạn hãy xem đoạn mã sau :
Nếu "****** bạn gõ vào" = "****** chương trình" thì <---- Ta sẽ Patch chỗ này
Nhảy đến đăng ký bản quyền
Còn không
Nhảy đến bảng thông báo "Incorrect password..." <------- Bạn cần ở đây trong W32Dasm
Bây giờ, nếu nó kêu là sai thì mình cho nó thành đúng :
Nếu "****** bạn gõ vào" <> "****** chương trình" thì <----- Chỗ đã được patch
Nhảy đến đăng ký bản quyền
Còn không
Nhảy đến bảng thông báo "Incorrect password..." <-------- Bạn cần ở đây trong W32Dasm
Còn bây giờ bạn cần biết một chút về assembler (vì chương trình sẽ được W32Dasm dịch ra assembler mà :)
Viết lại trong assembler đoạn code trên sẽ tương tự như :
cmp eax, eax <----- So sánh số ******/unlock code...
jne [Địa chỉ 1] <----- Nhảy đến thông báo số đăng ký đúng hoặc sai
call [Địa chỉ 2] <----- Nhảy đến thông báo ngược lại
Bây giờ, giả sử [Địa chỉ 1] là nhảy đến thông báo đã được đăng ký và [Địa chỉ 2] nhảy đến thông báo "Incorrect password..." thì ta sẽ phải sửa lại đoạn code như sau :
cmp eax, eax
je [Địa chỉ 1] <------ Chỗ đã được Patch
call [Địa chỉ 2]
Trong assembler, câu lệnh nhảy được biết đến là :
je = Jump if equal : Nhảy nếu bằng
jne = Jump if not equal : Nhảy nếu không bằng
Vì vậy, thông thường "je" được đổi thành "jne" và ngược lại.
Trở lại với chương trình của chúng ta, đi tìm chuỗi "Incorrect password..." là chúng ta đã đến bảng thông báo "Incorrect password...". Kiếm bằng cách vào menu Refs/String data references của W32Dasm, tìm chuỗi "Incorrect password..." và nhấn kép vào nó (hy vọng là có 8-). Lúc này, W32Dasm đưa chúng ta đến bảng thông báo chưa đăng ký rồi, nhiệm vụ của chúng ta là phải kiếm được nơi có chứa lệnh nhảy đến bảng thông báo này. Hãy dời con trỏ lên cho tới khi nào kiếm thấy dòng "je ..." hay "jne..." thì dừng lại ở đó. Còn nếu thấy dòng :
* Reference ....
:000... <---- để ý địa chỉ này
thì hãy dừng lại đó vì bảng thông báo đã được gọi từ 1 địa chỉ khác, nhấn Shift-F12 (hay vào menu Goto/Goto Code Location), nhập vào dãy số000... sau dòng "* Reference..." rồi Enter.
Lặp lại các bước dò như trên cho đến khi nào thấy được dòng "je..." hay "jne..."
Cuối cùng, khi đã kiếm được rồi thì hãy nhìn xuống thanh status bar, bạn sẽ thấy 1 chuỗi số ngay sau "@Offset ...00...". Nhớ lấy chuỗi số đó, và đừng quên là bỏ chữ "h" cuối cùng đi, vì đây là chữ biểu hiện cho số HEX.
*.Bước 4:
Đóng W32Dasm lại. Mở HView ra, nhấn F4, chọn Decode, nhấn F5, đánh vào giá trị00... bạn thu được ở "@Offset...00..." lúc nãy và Enter, HView đưa bạn đến ngay đúng dòng bạn nhìn thấy trong W32Dasm và còn chờ gì nữa, patch nó đi. Nhấn F3, rồi F2 (tôi chọn cách này để giúp Newbie dễ hiểu hơn vì đôi lúc không phải lúc nào giá trị cũng là 74 và 75). Sửa "jne..." thành "je..." và "je..." thành "jne..."
_ Cuối cùng, nhấn F9 để Save chương trình và F10 để thoát, bạn chạy lại chương trình và nhập số đăng ký bất kỳ thử xem sao, nếu may mắn, bạn sẽ nhận được thông báo "Thanks for ..." 8-), hehe, và đừng quên lưu 1 bản .EXE để đề phòng sự cố trước khi Patch :).
Mẹo : Nếu không tìm thấy dòng "Incorrect password..." thì bạn thử đi ngược lại là đi từ dòng "Thanks for..." hay "Registered..." xem ;-).
Đây là cách đơn giản nhất để Patch chương trình, ngoài ra còn có thể dùng SoftICE, VBDe, DeDe, SmartCheck... cái đó để hỗ trợ ***** soft là tùy ở bạn :). Bạn có thể nâng cao "tay nghề" bằng cách viết keygen hoặc bằng 1 số thủ thuật khác như "spy memory" :).
Chú ý : Ngoài hai câu lệnh ASM cơ bản bạn nên biết một số câu lệnh khác như : Call, Popad, Test, Nop ( bạn có thể tham khảo trong phần phụ lục của tôi)
Phần IV: Làm sao để ***** được một soft…
Chào các bạn, chúng ta lạI gặp lạI nhau…;) Trong phần IV này chúng ta sẽ bàn đề vấn đề chính đó là làm sao để ***** được một phần mềm bằng WDASM và Hacker Views ??? (không dùng SoftIce).
He he he câu hỏI thật dễ nhưng mà trả lờI không dễ chút nào…!!! Tôi cũng như các bạn khi tập tễnh bước vào làng ***** cũng phảI toát mồ hôi mớI ***** được một phần mềm. Sau đây là một số kinh nghiệm bản thân tôi khi muốn ***** một phần mềm bằng WDASM và Hacker Views .
Chú ý: Trong bài này tôi có tham khảo bài viết của anh HOAVELU—Thanx for support
I. Tổng Quát:
Trên thị trường phần mềm hiện nay có rất nhiều phần mềm, chủng loạI thật đa dạng và phong phú…MỗI ngày lạI có nhiều phần mềm mớI ra đờI, bản thân những phần mềm đã xuất hiện cũng luôn luôn nâng cấp lên version mới…Do đó cách ***** luôn luôn phảI linh động , không được lấy y chang cái cũ mà áp dụng cho cái mới…Sẽ thất bạI ngay!!!
Ví dụ: VớI phần mềm Winzip ver 8.0 bạn có thể dùng SoftIce tìm đến dòng 00407AA3 LEA EAX,[EBP-0140] , sau đó đánh vào D EBP-0140 là tìm được số ****** tương ứng vớI user name nhập vào…Nhưng vớI Winzip 8.1 , nếu bạn áp dụng y chang như cách đốI vớI Winzip 8.0 sẽ chẳng được gì…Do đó bạn hãy dùng chính cái đầu của mình hơn là áp dụng một cách máy móc như con vẹt nhưng cái đã học
II. Cài Đặt
Hầu hết (khoảng 70%) phần mềm đều cài đặt xong rồI ta mớI *****…(Tuy nhiên có những phần mềm bắt nhập license khi setup như Window, Photoshop Visual Studio…thì ta sẽ bàn sau). Sau khi cài đặt xong bạn hãy chạy soft cần ***** sau đó ghi nhớ thông báo bắt đăng ký hay nhập license code, user code v.v.
III. Unpack
Một số soft được tác giả nén lạI, vì sợ *****…ke ke ke, đơn cử như Vietkey 2000 . Bạn phải xem coi chương trình có được nén(pack) lại hay không. Nén ở đây không có nghĩa là được nén bằng WinZip hay WinRAR mà file .EXE được nén nhỏ lại mà vẫn có thể chạy được bình thường không cần giải nén. Để biết file có bị nén hay không, bạn phải xem mở file .EXE đó ra để xem đoạn mã của nó. Ở đây tôi dùng WinNC, chọn file cần xem và nhấn F3. Thông thường, nếu file đã bị nén thì nó sẽ có 1 dòng đặc trưng trong file bị nén ở đầu file. Chẳng hạn như được nén bằng ASPack thì (thường) trong file sẽ có chuỗi "aspack". Nén bằng UPX thì sẽ có dòng "UPX...". Còn đối với shrink thì có chữ "shrink". Tuy nhiên, cũng có một vài công cụ giúp ta giải nén (unpack) mà không cần biết file được nén theo dạng nào, đó là nó tự động nhận dạng. Tuy nhiên, nếu dạng được nén không được hỗ trợ thì nó cũng đành bó tay. Tiêu biểu cho loại này là ProcDump32, nó hỗ trợ khá nhiều dạng phổ biến như ASPack, Code Safe 3.X, PC Guard 2.10, PE Compact, PKLITE... bạn có thể chọn "*unknown*" để chương trình tự động nhận dạng.
Ngoài ra, có thể chương trình còn được bảo vệ bởi 1 đoạn mã bảo vệ (Security Code). Đây là một đoạn mã dùng để bảo vệ chương trình tránh bị debug (anti-debug) hay thay đổi kích thước. Đối với loại này, chúng ta cũng có một số chương trình để bỏ phần Security Code đó, có thể kể ra là : Anti Crypt, UnCode Crypt, tEunlock...
IV. Bắt tay vào *****
*.Bước 1: sau khi chạy chương trình bạn hãy ghi nhận lạI những thông báo bắt đăng ký đạI loạI như “Enter Registration Code”, Register, evalution copy, unregistered version…v.v và v.v
*.Bước 2: Nhấn vào và nhập vào đạI một số ******/Unlock Code/Registration Code bất kỳ…Sau đó nó sẽ hiện lên một nag báo rằng chúng ta đã nhập sai, yêu cầu nhập lại…Không sao, hãy ghi lạI dòng thông báo mà bạn nhận được khi nhập sai như : “Incorrect Password...", "Wrong ******...", "Re-enter password ... "
*.Bước 3:
Chạy W32Dasm, chọn "Open file to Disassembler..." hay nhấn trên thanh công cụ cũng được.
_ Chọn file cần *****.
_ Trên menu Refs, chọn String Data References. Tại sao ta phải làm như vậy, bạn hãy xem đoạn mã sau :
Nếu "****** bạn gõ vào" = "****** chương trình" thì <---- Ta sẽ Patch chỗ này
Nhảy đến đăng ký bản quyền
Còn không
Nhảy đến bảng thông báo "Incorrect password..." <------- Bạn cần ở đây trong W32Dasm
Bây giờ, nếu nó kêu là sai thì mình cho nó thành đúng :
Nếu "****** bạn gõ vào" <> "****** chương trình" thì <----- Chỗ đã được patch
Nhảy đến đăng ký bản quyền
Còn không
Nhảy đến bảng thông báo "Incorrect password..." <-------- Bạn cần ở đây trong W32Dasm
Còn bây giờ bạn cần biết một chút về assembler (vì chương trình sẽ được W32Dasm dịch ra assembler mà :)
Viết lại trong assembler đoạn code trên sẽ tương tự như :
cmp eax, eax <----- So sánh số ******/unlock code...
jne [Địa chỉ 1] <----- Nhảy đến thông báo số đăng ký đúng hoặc sai
call [Địa chỉ 2] <----- Nhảy đến thông báo ngược lại
Bây giờ, giả sử [Địa chỉ 1] là nhảy đến thông báo đã được đăng ký và [Địa chỉ 2] nhảy đến thông báo "Incorrect password..." thì ta sẽ phải sửa lại đoạn code như sau :
cmp eax, eax
je [Địa chỉ 1] <------ Chỗ đã được Patch
call [Địa chỉ 2]
Trong assembler, câu lệnh nhảy được biết đến là :
je = Jump if equal : Nhảy nếu bằng
jne = Jump if not equal : Nhảy nếu không bằng
Vì vậy, thông thường "je" được đổi thành "jne" và ngược lại.
Trở lại với chương trình của chúng ta, đi tìm chuỗi "Incorrect password..." là chúng ta đã đến bảng thông báo "Incorrect password...". Kiếm bằng cách vào menu Refs/String data references của W32Dasm, tìm chuỗi "Incorrect password..." và nhấn kép vào nó (hy vọng là có 8-). Lúc này, W32Dasm đưa chúng ta đến bảng thông báo chưa đăng ký rồi, nhiệm vụ của chúng ta là phải kiếm được nơi có chứa lệnh nhảy đến bảng thông báo này. Hãy dời con trỏ lên cho tới khi nào kiếm thấy dòng "je ..." hay "jne..." thì dừng lại ở đó. Còn nếu thấy dòng :
* Reference ....
:000... <---- để ý địa chỉ này
thì hãy dừng lại đó vì bảng thông báo đã được gọi từ 1 địa chỉ khác, nhấn Shift-F12 (hay vào menu Goto/Goto Code Location), nhập vào dãy số000... sau dòng "* Reference..." rồi Enter.
Lặp lại các bước dò như trên cho đến khi nào thấy được dòng "je..." hay "jne..."
Cuối cùng, khi đã kiếm được rồi thì hãy nhìn xuống thanh status bar, bạn sẽ thấy 1 chuỗi số ngay sau "@Offset ...00...". Nhớ lấy chuỗi số đó, và đừng quên là bỏ chữ "h" cuối cùng đi, vì đây là chữ biểu hiện cho số HEX.
*.Bước 4:
Đóng W32Dasm lại. Mở HView ra, nhấn F4, chọn Decode, nhấn F5, đánh vào giá trị00... bạn thu được ở "@Offset...00..." lúc nãy và Enter, HView đưa bạn đến ngay đúng dòng bạn nhìn thấy trong W32Dasm và còn chờ gì nữa, patch nó đi. Nhấn F3, rồi F2 (tôi chọn cách này để giúp Newbie dễ hiểu hơn vì đôi lúc không phải lúc nào giá trị cũng là 74 và 75). Sửa "jne..." thành "je..." và "je..." thành "jne..."
_ Cuối cùng, nhấn F9 để Save chương trình và F10 để thoát, bạn chạy lại chương trình và nhập số đăng ký bất kỳ thử xem sao, nếu may mắn, bạn sẽ nhận được thông báo "Thanks for ..." 8-), hehe, và đừng quên lưu 1 bản .EXE để đề phòng sự cố trước khi Patch :).
Mẹo : Nếu không tìm thấy dòng "Incorrect password..." thì bạn thử đi ngược lại là đi từ dòng "Thanks for..." hay "Registered..." xem ;-).
Đây là cách đơn giản nhất để Patch chương trình, ngoài ra còn có thể dùng SoftICE, VBDe, DeDe, SmartCheck... cái đó để hỗ trợ ***** soft là tùy ở bạn :). Bạn có thể nâng cao "tay nghề" bằng cách viết keygen hoặc bằng 1 số thủ thuật khác như "spy memory" :).
Chú ý : Ngoài hai câu lệnh ASM cơ bản bạn nên biết một số câu lệnh khác như : Call, Popad, Test, Nop ( bạn có thể tham khảo trong phần phụ lục của tôi)