III. Let's Crack Quote: Note2: Các bác nhớ nhé ở đây mục tiêu là tìm ra vị trí NAG để patch nên sẽ tập trung vào đi tìm nó, cũng nói luôn trong tut có một số phần giới thiệu về các tính năng của OllyDbg v10 xen kẽ với quá trình crack nên hơi dài các bác đọc ko nên "sốt ruột":D Crack cũng tương tự như bạn chơi trò "Cross Words" tìm ra các từ hàng ngang, dọc, chéo có nghĩa trong một bảng chữ cái lộn xộn quá trình tìm kiếm đó gọi là Search. Trong Crack người ta gọi đó là Trace, trace không chỉ dựa vào tay, mắt và brain mà phải sử dụng các Tool có nó việc trace sẽ trở nên dễ dàng hơn rất nhiều cho dù khối code lớn đến đâu. Trong tut này ta s/d Olly để trace, với Olly bạn có 2 cách trace là Trace tĩnh trước lúc ấn F9 và Trace động sau lúc ấ n F9 hai kiểu trace này rất khác biệt. Ta s/d Trace tĩnh trong trường hợp cần search một address nào đó trong chương trình(lúc này trace = search) ấn Ctrl+G > nhập vào địa chỉ cần search > ấn Enter Olly sẽ đưa ta tới vị trí cần tìm, bạn nhảy tới nhảy lui bất cứ đâu trong soft đều như nhau. Còn Trace động! ta chủ yếu s/d nó để Crack bất kể bạn Patch hay Keygen khi này tức là sau khi ấn F9 bạn sẽ phải đi theo hướng nhất đị nh mà cái soft được lập trình từ từ lần mò theo nó xem nó làm những cái gì. OK vậy ta sẽ bắt đầu với: 1. Trace tĩnh(trước lúc ấn F9) Load soft = Olly xong bao giờ việc đầu tiên cũng là Search for > All reference text string để tìm vị trí cái NAG trong mớ code khổng lồ, click phải chuột chọn Search for text nhập một từ nào đó nằm trong NAG và ấn Enter -> nhưng ko thu được kết quả gì, có lẽ lão coder cố tình giấu nó đi(Note3: nên chọn từ đặc bi ệt ít x/h trong soft để nhận được kết quả chính xác nhất). Vậy là Trace kiểu này ko ổn chút nào chẳng lẽ chịu bó tay sao :blink1:? No!!! ta sẽ: 2.Trace động(sau lúc ấn F9) - Bắt đầu: Search for > All intermodular calls nhằm tìm ra lời gọi tới các hàm DialogBoxParamA, MessageBoxA vì đây là các hàm tạo thành NAG Screen tìm được các hàm này đồng nghĩa với việc tìm ra được vị trí NAG. Sau khi mở window này lên ta sẽ thấy vô vàn là lời gọi tới các hàm nằm lộn xộn, để dễ tìm các hàm bên trên bạn bấm vào thanh nhỏ phía trên có chữ Destination để sắp xếp lại các call theo thứ tự alphabe và ta tìm thấy 5 lời gọi hàm USER32.MessageBoxA nhưng có tới 5 lận :sleeping: biết đâu là cái cần tìm? Ta sẽ dùng phương pháp loại trừ để giải quyết vấn đề này! bạn bấm vào một trong số 5 dòng > click phải chuột chọn Set breakpoint on every call to MessagBoxA ngay lập tức ở cột address thấy 5 dòng này đỏ rực lên khi này ta đã bặt BP lên các lời gọi hàm MessageBoxA , mục đích của nó là sẽ dừng chương trình lại sau khi ấn F9 nếu gặp bất cứ lời gọi hàm nào trong 5 call trên để tìm ra hàm gọi NAG. Trở lại màn hình chính và ấn F9 nhưng khi NAG xuất hiện mà Olly chẳng dừng soft lại => chứng tỏ mấy lời gọi hàm trên không gọi NAG cần tìm(để chắc ăn tốt nhất bạn nên set BP trên tất cả các call tới hàm có chữ GetMessage và kiểm tra hơi thủ công nhưng biết đâu lại gặp may :D). Thật không dễ gì mà lần ra NAG, NAG ơi đuôi mày ở đâu để tao tóm Trace động là mảnh đất rất phong phú để ta khai thác các cách tìm NAG vì lúc trace nó đưa ta đến rất gần địa diểm cần tìm. Em xin trình bày cách patch theo 3A và 3B mà em học được từ REA : 3A. Animate Over(Ctrl+F8) kết hợp set BP - Giới thiệu tính năng Animate Over(Ctrl+F8)(reference ): Quote: 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) Sẽ có bác hỏi tại sao phải kết hợp với set BP câu trả lời là không phải lúc nào Ctrl+F8 cũng đưa ta đến đúng địa điểm mà cần phải qua thêm 2, 3 chặng BP nữa thì mới đến đích. - Bắt đầu: Ấn Ctrl+F2 để load lại soft trở về trang thái ban đầu(Note4: để tránh các BP lúc nãy set có thể gây kho khăn trong quá trình trace ta nên Remove nó = cách: ấn vào chữ B màu cyan trên thanh toolbar > click phải chuột vào của sổ BreakPoint > chọn Disable all hoặc Remove chúng đi cũng được) tiếp tục ấn Ctrl+F8 đợi vài giây Olly sẽ dừng tại: Quote: 0049D115 E8 BE6DFDFF CALL salamand.00473ED8 Rất có thể đây 0049D115 sẽ là address call trực tiếp tới NAG => NOP luôn: Click chuột phải > 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 Chạy file vừa tạo xem kết quả -> thấy gì? NAG vẫn còn chơ chơ :sick: thất vọng + mệt mỏi -> Bạn muốn buông xuôi không? Ấy chớ tôi khuyên bạn nên ngồi nghỉ 1 chút nghe nhạc, uống nước, tập mấy động tác cho đỡ mỏi nếu bạn đã sẵn sàng thì chúng ta tiế p tục thôi :-o nhưng tiếp theo ta sẽ phải làm gì đây? Olly đã dẫn ta tới đây 0049D115 một hàm call, call có nghĩa là gọi nhưng nó gọi cái gì? đây salamand.00473ED8 nó gọi tới địa chỉ này, mỗi bước đi theo hàm call ta lại tiến gần tới cái NAG một bước nhưng làm sao để tới được đó? Để tiếp tục hành trình patch NAG ta sẽ phải đặt BP ngay tại 0049D115 và sau đó: Làm lại các bước: "Ấn Ctrl+F2 " cho đến khi Olly dừng lại tại điểm ta đặt BP 0049D115 ta sẽ ấn F7(tut) để trace into vào hàm này sau đó ấn Ctrl+F8 để Olly trace hộ ta và nó dừng soft tại: Quote: 00473F0E . E8 02F3FFFF CALL salamand.00473215 Làm lại các bước: "Rất có thể " Chạy file vừa tạo xem kết quả -> thấy gì? NAG vẫn còn chơ chơ vậy là lại phải làm thêm 1 lần nữa: Làm lại các bước: "Ấn Ctrl+F2 " cho đến khi Olly dừng lại tại điểm ta đặt BP 00473F0E ta sẽ ấn F7 để trace into vào hàm này sau đó ấn Ctrl+F8 Olly sẽ dừng soft tại: Quote: 004734A7 E8 047A0200 CALL salamand.0049AEB0 Làm lại các bước: "Rất có thể " Chạy file vừa tạo xem kết quả -> thấy gì? :w00t: NAG mất tiêu rồi ăn mừng đi thôi sau bao chặng đường gian nan cuối cùng cũng đã thành công mặc dù chưa trọn vẹn lắm. 3B. Patch tham số tạo NAG Ở trên ta đã làm hàm gọi NAG ngưng hoạt động, sau đây ta sẽ vô hiệu hóa NAG kể cả có lời gọi trên hay không: - Bắt đầu: Ấn Ctrl+F2 để load lại soft trở về trang thái ban đầu(chú ý Note4:) ta đặt 1 BP tại 004734A7 là điểm patch cuối cùng lúc nãy để Olly dừng soft tại đó: Quote: 004734A7 E8 047A0200 CALL salamand.0049AEB0 Ấn F7 trace into ta sẽ ở ngay đầu đoạn code tạo NAG: Code: 0049AEB0 /$ 0FB741 18 MOVZX EAX, WORD PTR DS:[ECX+18] <- vệt sáng tại đây 0049AEB4 51 PUSH ECX ; /lParam 0049AEB5 68 16B04900 PUSH salamand.0049B016 ; |DlgProc = salamand.0049B016 0049AEBA FF71 1C PUSH DWORD PTR DS:[ECX+1C] ; |hOwner 0049AEBD C741 10 01000>MOV DWORD PTR DS:[ECX+10], 1 ; | 0049AEC4 50 PUSH EAX ; |pTemplate 0049AEC5 FF71 14 PUSH DWORD PTR DS:[ECX+14] ; |hInst 0049AEC8 FF15 7C954A00 CALL NEAR DWORD PTR DS:[<&USER32.Dial>; \DialogBoxParamA Để Patch ta sẽ làm như sau(reference ): Quote: - 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 Hurt_heart (http://www.reaonline.net) My own tricks to detect OllyDbg Tác giả : Pumqara Đích ngắm: OllyDbg Công cụ: tài liệu tham khảo Api, OllyDbg, mASM Giới thiệu: Các công cụ Debugger sử dụng ring3 được sử dụng bởi phần lớn các cracker một phần là do nó có giao diện thân thiện, và dễ sử dụng hơn rất nhiều so với công cụ debugger sử dụng ring0 ( như softice). Trong phần bài này, tôi xin nói về cách thức nhận dạng một công cụ debugger ring3 thuộc lại "xịn" nhấ t đó là OllyDbg. Bên cạnh một vài cách nhận dạng đã được biết như IsDebuggerPresent và fs:[20], tôi đã