Cracker Handbook 1.0 part 226 docx

6 171 3
Cracker Handbook 1.0 part 226 docx

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

Thông tin tài liệu

- Nguyên tắc căn bản là khi patch ta không làm cho chương trình lớn hơn hay nhỏ hơn: Tức là chương trình sử dụng lệnh nào đó bao nhiêu byte thì khi ta NOP , phảI NOP bấy nhiêu byte đó. - Khi NOP 1 hàm API nào đó ta phảI hiểu hàm đó như thế nào. Dùng win32.hlp để tra hàm đó, ở đây tui tra giùm bạn hàm MessageBoxA nhé: Code: int MessageBox( HWND hWnd, // handle of owner window LPCTSTR lpText, // address of text in message box LPCTSTR lpCaption, // address of title of message box UINT uType // style of message box ); - Hàm này có chức năng: Cài đặt, hiển thị , và họat động trong 1 hộp thọai. Giá trị trở về của hàm bằng 0 khi ko có đủ bộ nhớ để cài đặt hộp thọai. Viết lạI hàm cho bạn dễ hình dung như trong các ngôn ngữ cấp cao Pascal, C…. như sau: Code: MessageBoxA (handle, messagestring, titlestring, msgboxtype); - Chúng ta thấy hàm này có 4 tham số. Như bạn biết đấy , trong ngôn ngữ lập trình cấp cao muốn hàm tính tóan phảI truyền tham số cho nó , ở đây phảI truyền 4 tham số. Trong ngôn ngữ ASM , để truyền tham số cho hàm người ta sẽ truyền tham số vào trong STACK bằng cách dùng lệnh PUSH, rồI khi họat động hàm này sẽ vào STACK lấy tham số ra mà dùng.Có bao nhiêu tham số thì sẽ có bao nhiêu lệnh PUSH trước hàm. - Nguyên lý cơ bản để giết NAG trong tut này là chúng ta NOP hàm MessageBoxA để ko cho nó họat động. Khi NOP hàm này chúng ta cũng phải NOP các lệnh PUSH nhập tham số của hàm vào STACK. Vì ko NOP các lệnh PUSH này thì STACK sẽ là thùng rác mà Computer của bạn ko thể kiểm soát được. Theo hướng dẫn trên ta sẽ NOP những dòng màu đỏ : Click chuột phải lên dòng cần NOP > Binary > Fill with NOPs. Save lại thay đổi: Click chuột phải vào dòng vừa NOP > Copy to Executable > All modifications > Save All Kết quả là NAG bị REMOVE :D. Xong rồi đó bạn! tui mệt đứt hơi luôn IV.The End Hai cách NOP trên tuy đều REMOVE được NAG nhưng cũng có những điểm khác nhau đó bạn, thử mở menu Help > About Servan của 2 bản patch bạn sẽ thấy ngay. Cái này là do logic của soft thôi cũng chẳng có gì khó hiểu: - Patch theo 3A tương đương với việc vô hiệu hóa hàm call tới NAG nhưng các tham số của NAG(các Push tới DialogBoxParamA) thì vẫn nguyên vẹn nên thông tin vẫn truyền được tới đích => vẫn thấy được hộp thoại của menu About Servan - Patch theo 3B tương đương với việc vô hiệu hóa các tham số truyền vào NAG và gây ngắt quãng ở đoạn nào đó trong code vì vậy thông tin ko truyền được đích dẫn đến không thấy được hộp thoại của menu About Servan Nếu các bác làm 1 lần ko được thì làm lại nhiều lần + đọc lại nhiều tut sẽ được :D. Chúc các bác newbie thành công. Quote: Patched file available at: here Trong tut có trích dẫn một số đoạn từ các bài viết: The Complete Cracking Guide For Newbiez / TUTORIAL 2C - Aug 25 2004, 01:33 PM or MỘT CÁCH KILL NAG DÙNG HÀM MESSAGEBOXA and Bài 2: Let's Patch Soft By Olly - 09-08-2004, 02:33 AM and Tut: Use Olly(pdf tiếng Việt) and more in REA 4rum Thanxxx for Your Coming! Bye n C ya in tuts later hurt_heart(REA) BÀI 2: LET’S PATCH THE SOFTS BY OLLDBG Ok, bây giờ chúng ta hảy bắt đầu làm quen với các chức năng của Oll nhé Softs ở đây tui chọn cái Patchme No.1 mới ra lò của bác QHQCrcker .Các bạn download ở đây: Link: http://www.reaonline.net/forum/showthread.php?t=163 I.Thu thập thông tin về chương trình cần crack: Chúng ta hảy chạy cái crackme.exe xem sau: -Nó bắn ra 1 cái Nag chào hỏi theo kiểu Tây: Hi Hello Newbiez wold Và thước yêu cầu: Rulez : 1. Patch nag (Bỏ cái Nag này) 2. Change bad text to GOODBOY text. (Thay đổi cái text trong Nag sau thành GOODBOY text) 3. Enable Exit button. (Cho nút button Exit có tác dụng) - Bấm Ok nó sẽ hiện cái Nag thứ 2: QHQ Patch me No.1 - Exit chương trình, bây giờ Patch nó thôi II Thực hành Pacth soft : Các bạn mở chương trình Oll, vào Menu File/Open : Load chương trình QHQPatchmeNo1.exe vào Oll(Hay bấm F3 cũng được) Chức năng đầu tiên tui muốn giới thiệu với các bạn là: 1.Run (F9) : Chạy chương trình trong Oll. Bấm F9 chạy thử chương trình trong Oll xem sau. Các bạn thấy sau, nó bắn Nag đầu tiên phải ko?.Bấm button OK chương trình bị crash chứ gì?. Đây cũng là 1 cách bảo vệ chương trình ko có các Cracker phá phách .Nguyên tắc của nó là khi phát hiện máy tính của bạn đang chạy chương trình debugger thì sẽ crash phá vỡ cấu trúc code của chương trình ko cho chạy tiếp , cơ chế này các cracker hay gọi là Anti-debugger gì đó Hìhì Vậy chúng ta pó tay sao?? Bình tỉnh nhé, chúng ta Load lại chương trình trong Oll xem sau. Tui muốn ghi chú các bạn ở đây 1 chút : Oll chạy qua 1 chương trình thì coi như một đi ko trở lại. Nó chỉ để lại những “dấu chân trên cát” mà thôi. Tức là nó sẽ báo ta nhưng gì nó đã đi qua chứ ko quay lại được.Muốn làm việc lại với nó ,chúng ta phải Load nó lại vào Oll . OK, bây giờ tui sẽ giới thiệu các bạn chức năng Load lại chương trình một cách nhanh chóng mà ko cần phải bấm F3 rồi chọn lại file cho rắc rối.Đó là: 2.CTRL+F2 : Đây là chức năng chạy lại chương trình. Hihi , các bạn thấy ko , tòan là các phím nóng. Làm sao mà nhớ hết đây trời!. Không sao, không sao, làm nhiều sẽ tự động nhớ thôi. Hy vọng thế!!!!!! Sau khi Load lại chương trình, tui có ý tưởng như sau: Vì tui biết chương trình patchme ko bị crash ở cái Nag đầu tiên nên sau ta ko tạm ngưng chương trình khi nó bắn cái Nag đầu tiên. Rồi vào cửa số code xem code nó ở đâu để patch cái Nag đó theo yêu cầu của tác giả.Vậy chúng ta phải tìm hiểu chức năng kế tiếp là : 3. Pause ̣F12 : Tạm ngưng chương trình. OK, bây giờ các bạn bấm F9, chạy chương trình.Khi bắn cái Nag đầu tiên các bạn khoan hả bấm nút OK mà hảy trờ lại Oll bằng cách click vào cửa sổ Oll. Sau đó bấm F12. Các bạn hảy nhìn cửa sổ code cửa window CPU xem sao. Tòan là mã code trong bộ nhớ , ko phải là mã code chương trình. Vậy là phá sản sao? Tui nghĩ lại có ý kiến thử cho chương trình tự động trace over (trace ko vào hàm Call để soi mói) từng dòng lệnh 1 cách chầm chậm khi muốn ngừng ở đâu thì ta pause ở đó để xem đọan code nó là gì. Mục đích ở đây là trong cái cửa sổ code của window CPU có đọan code của chương trình Ehèm, và thật sự Oll đã có chức năng này. Tui xin giới thiệu các bạn 4.Animate Over (CTRL+F8): Chức năng này như sau: Trace từng dòng lệnh mà ko vào hàm call ‘soi mói’ (trace over) một cách “chậm chậm “ và trong cửa sổ code của CPU hiện ra quá trình khi trace.Chức năng này tui gọi tóm tắc là TraceO động Tui hay sử dụng chức năng để đi dến các đọan code bắn Nag đó các bạn. OK, bây giờ thử xem sau: -Load lại chương trình CTRL+F2 -Bấm CTRL+F8 : traceO động. Nó bắn ra Nag đúng ko -Bây giờ trở lại Oll, đừng bấm F12 nhé. Ta thấy Oll ngừng tại đọan code sau để chờ ta bấm phím OK(chúng ta lợi dụng chức năng này để tìm ra Nag): Quote: 00401021 > 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL 00401023 68 EB304000 PUSH QHQPatch.004030EB ; |Title = "Hi" 00401028 68 56304000 PUSH QHQPatch.00403056 ; |Text = "Hello newbiez world. Try with me! Rulez : 1. Patch this nag.2. Patch the BADBOY static 3* Make Exit button is Visible. Hope you fun with me " 0040102D 6A 00 PUSH 0 ; |hOwner = NULL 0040102F E8 2E050000 CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA <<<<<<<<Ta dang o day 00401034 |. E8 0B050000 CALL <JMP.&kernel32.IsDebuggerPresent> ; [IsDebuggerPresent 00401039 |. 0BC0 OR EAX,EAX 0040103B |. 74 07 JE SHORT QHQPatch.00401044 0040103D >|. C605 01304000>MOV BYTE PTR DS:[403001],1 OK rồi nhé chúng ta đã tìm ra đọan code bắn Nag. Bây giờ tui sẽ chỉ bạn cách đánh dấu mã code này , để mỗi lần ta load lại chương trình muốn goto đến đọan code này thì sẽ rất dễ dàng . Chúng ta ko cần phải viết ra giấy addr cần nhớ như SI nữa. 5.Label : Đánh dấu dòng lệnh hay “gắn 1 cái nhãn” cho dòng lệnh nào đó. Bây giờ các bạn đang đứng tại đọan code bắn Nag trong Oll, nhắc lại đừng bấm F12 nhé. Các bạn hảy nhìn bên dưới màn hình Oll , góc tay phải hiển thị chế độ làm việc như sau: Animating đúng ko các bạn . Nếu đúng thế thì máy của bạn đang ở trạng thái như máy của tui. Các bạn hảy nhìn chổ này cho quen mắt nhé đây là nơi chúng ta biết thằng Oll đang làm gì. Tiếp theo các bạn click vào dòng dưới lệnh này: 00401034 |. E8 0B050000 CALL <JMP.&kernel32.IsDebuggerPresent> ; [IsDebuggerPresent Sau đó click phải vào nó, sẽ hiển thị 1 menu pop-up. Chọn Label. Đánh vào 1 cái tên nào đó cho dòng lệnh này.Ở đây tui đánh name: “point1”. Bấm Ok. Vậy là chúng ta đã đặt tên cho dòng lệnh trên là ‘point1’ OK, bây giờ các bạn bấm CTRL+F2 load lại chương trình. Đừng chạy chương trình, các bạn hảy click phải trong cửa sổ CPU, chọn Goto/Expression ( hay nhấn CTRL+G). Đánh vào name: ‘point1’. Con trỏ cửa cửa sổ CPU sẽ nhảy đến dòng lệnh mà ta đặt tên. Bây giờ tui sẽ chỉ các bạn cách NOP các dòng lệnh sau để patch cái Nag đầu tiên: Quote: 00401021 > 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL 00401023 68 EB304000 PUSH QHQPatch.004030EB ; |Title = "Hi" 00401028 68 56304000 PUSH QHQPatch.00403056 ; |Text = "Hello newbiez world. Try with me! Rulez : 1. Patch this nag.2. Patch the BADBOY static 3* Make Exit button is Visible. Hope you fun with me " 0040102D 6A 00 PUSH 0 ; |hOwner = NULL 0040102F E8 2E050000 CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA Vì sau chúng ta NOP các dòng này thì sẽ patch cái Nag đầu tiên , xin các bạn đọc tut “Một cách Kill Nag dùng hàm MessageBoxA” mà tui đã viết. Đầu tiên chúng ta click chọn dòng lệnh đầu tiên , bấm và giử nút Shift sau đó click vào dòng lệnh cuối cùng, Tòan bộ nhóm lệnh trên được chọn . Bây giờ chúng ta click phải vào nhóm lệnh đã chọn >> menu pop-up/Binary/ Fill with NOPs. Sau khi chọn như trên thì Oll sẽ NOP tòan bộ nhóm lệnh trên. (Rất nhẹ nhàng so với sử dụng HIEW).Các bạn hảy nhìn vào cửa sổ Code sẽ thấy được điều đó. Ở đây chúng ta chỉ NOP chương trình đang Load trong bộ nhớ chứ ko phải trên File chúng ta đang crack. Vậy nhiệm vụ kế tiếp là chúng ta phải “bức” cái chương trình đang nằm trong bộ nhớ lưu ra thành 1 file mới , việc này các cracker hay gọi là “dump” nó ra đó bạn. Chú ý: -Muốn làm được điều này bạn phải có Plugin OllDump , tức là cái Oll của bạn trên thanh menu có mục Plugin/OllDump. . <JMP.&kernel32.IsDebuggerPresent> ; [IsDebuggerPresent 00 4 01 0 39 |. 0BC0 OR EAX,EAX 00 4 01 0 3B |. 74 07 JE SHORT QHQPatch .00 4 01 0 44 00 4 01 0 3D >|. C 605 01 3 04 000 >MOV BYTE PTR DS:[ 403 0 01 ] ,1 OK rồi nhé chúng ta đã tìm. " 00 4 01 0 2D 6A 00 PUSH 0 ; |hOwner = NULL 00 4 01 0 2F E8 2E0 500 00 CALL <JMP.&user32.MessageBoxA> ; MessageBoxA <<<<<<<<Ta dang o day 00 4 01 0 34 |. E8 0B0 500 00. MB_OK|MB_APPLMODAL 00 4 01 0 23 68 EB 304 000 PUSH QHQPatch .00 403 0EB ; |Title = "Hi" 00 4 01 0 28 68 56 304 000 PUSH QHQPatch .00 403 056 ; |Text = "Hello newbiez world. Try with me! Rulez : 1. Patch

Ngày đăng: 03/07/2014, 17:21

Tài liệu cùng người dùng

Tài liệu liên quan