baby_uyen2003

New Member
em tìm nhiu topic nhưng không hỉu nóp nói gì vì khi mở nó không đúng với bài hường dẫn


điển hình:


II. HƯỚNG DẪN



Để dễ hỉu, tui xin chỉ dẫn bạn tự luyện tập Cr-ack 1 phần mềm. Giả sử phần mềm này bắt buộc bạn phải nhập đúng username và seri@l thì mới cho sử dụng mãi mãi, còn không thì chỉ sử dụng trong vòng 15 ngày .v.v... Nhưng bạn lấy đâu ra username và seri@l đúng ? Đừng lo, hãy làm theo cách sau:



Bước 1. Setup phần mềm:


Sau khi setup và chạy chương trình, có thể nó sẽ hiển thị những thông báo bắt đăng ký đại loại như “Enter Registration Code”, "Register", "evalution copy", "unregistered version"…v.v.. hay nếu nó không hiển thị những thông báo này thì bạn có thể vào menu Giúp của nó, chọn phần about sẽ thấy.



Bước 2. Nhập bất kì user name - seri@l/code và ghi nhớ thông báo làm cơ sở để Cr-ack:


Nhập đại username và seri@l/code bất kỳ vào ô đăng ký. Cái username và serail/code bạn vừa nhập vào đó có mức độ chính xác là con số 0,000....1%. Sau đó, bạn sẽ thấy hiển thị những câu thông báo sai username và seri@l/code đại loại như “Incorrect seri@l/code...", "Wrong seri@l...", "Re-enter password" ... Không sao, bạn hãy lấy bút ra, ghi lại những câu thông báo này để làm cơ sở cho W32Dasm mò điểm cần Cr-ack.



Bước 3. Mò offset nhập seri@l/code:


• 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 Cr-ack (thường thì file *.exe hay *.dll của chương trình cần Cr-ack).



Trên menu Refs của WDasm, chọn String Data References (mục này sẽ sáng nếu file cần Cr-ack có chứa chuỗi - string). Sau khi chọn xong, sẽ có 1 hộp thoại String Data References hiển thị. Trong hộp thoại này sẽ có chứa ít nhất 1 dòng chữ (chuỗi kí tự) nào đó. Nếu bạn thấy dòng chữ mà bạn vừa lấy bút ghi xuất hiện trong hộp thoại này thì có đến 70% cơ may bạn Cr-ack được. (***)



Tại sao ta phải làm như vậy, bạn hãy xem nguyên tắc làm chuyện của phần mềm cần Cr-ack như sau:



* Đoạn mã thứ 1:



If ("enter seri@l" = "program seri@l") then (goto Register) Else (goto "Incorrect code/key")



Nghĩa là, khi ta nhập username và seri@l/key vào thì phần mềm sẽ làm theo trình tự:


Nếu ("seri@l gõ vào" bằng "seri@l chương trình" ) thì (nhảy đến đăng ký bản quyền) còn không (nhảy đến thông báo sai code key).



Trời ạ, chính là ngay chỗ này đây, bạn nhập user và code vào nếu không đúng thì nó không cho đăng kí. Vậy thì ta tìm cách làm cho chương trình hiểu sai đi, bằng cách sửa chữa lại cái đoạn mã này. Hiệu quả nhất là bạn hãy viết 1 đọan mã làm ngược lại cái đoạn mã trên, bạn chỉ cần thay dấu = (bằng) bằng dấu <> (khác). Có nghĩa là bạn nhập user và seri@l/code sai nhưng làm cho nó hiểu nhầm là đúng. Đây chính là cái đoạn mã thứ 2 sau:



* Đoạn mã thứ 2:



If ("enter seri@l" <> "program seri@l") then (goto Register) Else (goto "Incorrect code/key")



Nghĩa là:


Nếu ("seri@l gõ vào" khác "seri@l chương trình" ) thì (nhảy đến đăng ký bản quyền) còn không (nhảy đến thông báo sai code key).



Bạn đang e sợ vì không biết viết đoạn mã đó như thế nào, rồi chèn như thế nào .v.v... ? Không hề chi. Trên lý thuyết, tui viết cái đoạn mã đó để cho bạn dễ thấy thôi, chứ để viết và chèn thì có anh WinHex lo rồi, bạn chỉ chuyện dịch chuyển con trỏ WinHex đến đúng địa điểm offset để chèn đoạn mã, sau đó thay đổi 1 kí tự nào đó và save lại, vậy là bạn vừa Cr-ack xong! Thế nhưng, để có được offset, bạn phải dùng W32Dasm để tìm.



Vậy thì:


• Bạn cần lấy offset của đoạn mã nào ? Trả lời: đoạn mã 1 trên, phần ELSE goto Incorrect...


• Bạn lấy offset đoạn mã trên như thế nào? Trả lời: Dùng W32Dasm để tìm, yêu cầu phải biết 1 chút về ngôn ngữ assembler (ASM).



Đoạn mã 1 được viết lại dưới dạng ASM như sau:


cmp eax, eax <----- So sánh số seri@l/unlock code...


jne [Địa chỉ 1] <----- Nếu seri@l/code đúng, nhảy đến đăng ký bản quyền


call [Địa chỉ 2] <----- Còn seri@l/code không đúng, nhảy đến thông báo sai code/key



Bây giờ, ta phải viết 1 đoạn mã làm ngược lại cái đoạn mã trên, nghĩa là nhập seri@l/code không đúng nhưng lại nhảy đến đăng kí bản quyền (làm nó hiểu lầm là đúng).



cmp eax, eax


je [Địa chỉ 1] <------ Chỗ vừa được sửa chữa, chỉ sửa JNE thành JE


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 (***)



Ta vào menu Refs >>"String data references" của W32Dasm, nếu tìm thấy chuỗi thông báo (cái chuỗi mà bạn vừa dùng bút ghi, đại loại như "Incorrect seri@l/code"...) trong hộp thoại này thì nhấn kép vào nó. W32Dasm sẽ đưa bạn đến 1 nhóm có chứa đoạn mã 1 trên.



Nhiệm vụ của chúng ta là phải kiếm được vị trí bắt đầu của đoạn mã 1 trong nhóm đó. 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 vừa đượ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. Bạn sẽ được W32Dasm đưa đến nhóm có lệnh nhảy chứa đoạn mã 1. Sau đó 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 vừa 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...", đây là 1 chuỗi số dạng Hexa (cơ số 16). Lấy bút ra, ghi lại vị trí offset này, ví dụ bạn thấy "@Offset: 00000AB1Fh" thì chỉ cần ghi vào giấy con số 00000AB1F là được.



Bước 4. Anh WinHex ra tay:



Đóng W32Dasm lại. Mở WinHex ra. Khi WinHex vừa được khởi động, bạn hãy:


• Nhấn Ctrl+O (hay open file) mở lại tệp vừa mà vừa rồi vừa tìm offset trong W32Dasm.


• Nhấn F7 (hay vào menu View, chọn Text display only) để winHex hiển thị dạng kí tự.



Lại tiếp tục nhấn ALT + G (hay vào menu Position>>Goto offset) để dịch chuyển con tro WinHex đến 1 offset nào đó. Khi hộp thoại Goto Offset xuất hiện, bạn gõ vào cái địa chỉ offset vừa thu được mà bạn vừa ghi ra giấy, sau đó nhấn Enter.



WinHex sẽ đưa bạn đến vị trí (offset) kí tự đúng ngay dòng mà bạn vừa nhìn thấy trong W32Dasm (dòng "Je, ..." hay "Jne, ..." ). Bạn chỉ chuyện sửa lại kí tự này là được. Sau đó bấm lưu lại. Cr-ack vừa thành công.



Chú ý, đối với các đọan lệnh jump ngắn thì trong WinHex, kí tự thay mặt cho "je" là chữ "t", còn "jne" là chữ "u". Vậy, để làm ngược lại đoạn mã 1 (thực hiện đoạn mã 2, tức là Cr-ack nó) thì:



• Nếu thấy chữ t thì sửa lại thành chữ u


• Nếu thấy chữ u thì sửa lại thành chữ t



Trước khi Cr-ack, bạn nên nhớ sao lưu 1 bản dự phòng để đề phòng trong quá trình Cr-ack làm hư tệp. Sau khi sửa xong, bấm save để lưu sửa chữa.



Mẹo : Nếu không tìm thấy dòng "Incorrect seri@l/code..." 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. Kinh nghiệm cho thấy. Đối với các phần mềm không có tính bảo mật (an ninh) cao, tỉ lệ thành công là 90%, còn ngược lại là 40%


em đang định thử cái cool effect maker nhưng ngôn ngữ chả hiểu gì(kiểu font như wedding khi dùng W32Dasm, còn winhex thì cũng thế bây giờ anh nào có hình ảnh up lên giúp với(hướng dẫn) ai có cái bản fix của W32Dasm thì cho xin , với cái key winhex 16.0 nửa , hứa sẽ hậu tạ, yahoo:eek:wner6106
 

Các chủ đề có liên quan khác

Top