OllyDbg Tut_12

Posted: October 15, 2008 in OllyDbg Tutorials, OllyDbg tut_12

Một cái đầu lạnh để vững vàng, một trái tim đỏ lửa để yêu và làm việc hết mình!

I. Giới thiệu chung

Chào các bạn, trong phần bài viết trước ở phần 11 tôi đã hướng dẫn các bạn tìm hiểu về hai dạng Break Points là Hardware BreakpointsConditional Breakpoints, cũng như các cách thiết lập cho hai dạng BP này. Lẽ ra trong phần 11 tôi cũng định giới thiệu luôn về dạng Message BreakPoints, nhưng thiết nghĩ nếu gộp luôn vào trong phần 11 sẽ khiến các bạn quá tải và dẫn đến “tẩu hỏa” mất J. Cho nên tôi cắt riêng phần Message Breakpoints ra và quyết định giới thiệu về nó trong phần 12 này. Rất nhiều điều thú vị đang nằm ở phía trước…. N0w….L3t’s G0!!!!!!!!!

II. BreakPoints in OllyDbg

1.Message Breakpoints :

Message Breakpoint là gì nhỉ? Sao lại lắm lọai BP đến thế J. Khi gặp bất kì những vấn đề nào mới, trong đầu tôi luôn xuất hiện những câu hỏi liên quan đến vấn đề đó. Sau đó, tôi tìm cách tiếp cận thông tin để giải quyết cho những câu hỏi của tôi. Trước tiên, tôi chẳng biết Message Breakoint nó là cái gì, cho nên tôi tra help của Olly trước, hi vọng sẽ tìm ra chút thông tin nào đó về nó. Đọc trong help file của Olly thì chỉ nhận được một chút thông tin như sau :

Message breakpoint is same as conditional logging except that OllyDbg automatically generates condition allowing to break on some message (like WM_PAINT) on the entry point to window procedure. You can set it in the Windows window

Thông tin đầu tiên gợi mở cho tôi là thằng Message breakpoint này gần tương tự như Conditional Log BP ngoài trừ việc khác ở chỗ Olly hoàn toàn tự động tạo ra các điều kiện cho phép dừng lại tại các Message. Mà cái Message ở đây chính là các Windows Message. Tôi không phải là dân chuyên lập trình cho nên tôi tìm hiểu tiếp các thông tin khác trên Net về Windows Message :

“The messages in Windows are used to communicate most of the events, at least in the basic levels. If you want a window or control (which is a specialized window) does something, you must send a message to him. If another window wants you do something, then it sends a message to you. If an event occurs, such as when the user moves the mouse, presses the keyboard, etc… the system sends a message to the affected window. This window receives the message and acts suitably.”

-Message là một trong những phương tiện giao tiếp quan trọng nhất trong môi trường Windows.

-Lập trình trong Windows chủ yếu là đáp ứng lại những sự kiện.

-Message có thể báo hiệu nhiều sự kiện gây ra bởi người sử dụng, hệ điều hành, hoặc chương trình khác.

-Có hai lọai message: window message và thread message.

Window Message:

-Tất cả các message đều được trữ trong một Message Queue(một nơi trong bộ nhớ). Những message này sau đó sẽ được luân chuyển giữa các ứng dụng.

Message Loop:

-Bạn có thể gọi những message bằng cách tạo ra một Message Queue.

-Message Loop là một vòng lặp kiểm tra những message trong Message Queue.

-Khi một message được nhận, Message Loop giải quyết nó bằng cách gọi Message Handler (một hàm được thiết kế để giúp Message Loop xử lý message)<hầu hết công việc lập trình của mình sẽ tập trung vào đây>

-Message Loop sẽ kết thúc khi nhận được message WM_QUIT (lúc người dùng chọn File/Exit || click vào nút Close || bấm Alt+F4)

-Khi bạn tạo cửa sổ (ứng dụng) Windows sẽ tạo cho bạn một Message Handler mặc định. Bạn sẽ vào đây để sửa chữa giúp ứng dụng phản hồi lại những sự kiện theo ý bạn muốn ->chương trình của bạn.

-Tất cả những control chuẩn đều như thế. Lấy một button làm ví dụ: khi nó nhận WM_PAINT message nó sẽ vẽ button; khi bạn click chuột trái lên nó sẽ nhận WM_LBUTTONDOWN message và nó sẽ vẽ hình button bị nhấn xuống; khi buông chuột ra nó nhận WM_LBUTTONUP message và sẽ vẽ lại button bình thường.

-Tên của window message thường có dạng WM_ và hàm để xử lý message đó thường có dạng On. Ví dụ hàm xử lý WM_SIZE message là OnSize.

-Message thường có hai tham số lưu trữ thông tin về sự kiện(32 bit): lParam kiểu LONG và wParam kiểu WORD. Ví dụ: WM_MOUSEMOVE sẽ trữ tọa độ chuột trong một tham số còn tham số kia sẽ có cờ hiệu để ghi nhận trạng thái của phím ATL, Shift, CTRL và những nút trên con chuột.

-Message có thể trả về một giá trị giúp bạn gửi dữ liệu ngược trở về chương trình gửi nó. Ví dụ: WM_CTLCOLOR message chờ bạn trả về một HBRUSH (khi dùng AppWizard để tạo nhanh ứng dụng bạn chú ý những hàm có dạng On… và nhận xét những kiểu trả về của nó, bạn sẽ hiểu hơn về cơ chế liên kết giữa các thành phần ứng dụng với nhau)

Nguồn : http://www.eco-blue.net/index.php?showtopic=571&mode=threaded&pid=2527

……….
……….

Download toàn bộ bài viết :

ollydbg_tut12

Best Regards

kienmanowar

Advertisements
Comments
  1. Mol says:

    Em chào bác Kiên, ở bài tut 12 này, phần cuối tút có nói đến việc đặt breakpoint ở hai hàm API là TranslateMessage và DefWindowProcA nhưng em chỉ thực hiện được lệnh BP TranslateMessage, còn lệnh BP DefWindowProcA thì không thực hiện được, thông báo Unknown identifier. Em đã nhập đúng, cũng đã xem bảng Name (Ctrl +N), thấy là có hàm DefWindowProcA nhưng lại không thể đặt breakpoint, mong bác giúp em. Win em vọc là win7 64bit, không biết nó có liên quan đến không ạ 🙂

  2. Mol says:

    Cả việc thực hiện lệnh BPX DefWindowProcA cũng không được @@

  3. Mol says:

    Thằng NtdllDefWindowProc_A với thằng DefWindowProcA là 1 phải không ạ, em thấy follow disassemble thằng DefWindowProcA thì tới địa chỉ trùng với địa chỉ của thằng NtdllDefWindowProc_A khi breakpoint. Em hỏi hơi nhiều nhưng mong bác giải đáp giùm em :v

  4. Mol says:

    À không hẳn là trùng, breakpoint NtdllDefWindowProc_A thì tới địa chỉ là 1 lệnh nhảy jmp tới địa chỉ trùng với địa chỉ khi breakpoint DefWindowProcA 🙂

  5. Mol says:

    Em phát hiện ra là, không có DefWindowProcA trong module user32, nó nằm trong module khác 🙂 Thảo nào em đặt breakpoint không được :))

  6. kienmanowar says:

    OK em, anh viết bài trên và debug trên XP nên có thể sẽ khác khi em làm trên Win7. Trên Win7 khả năng em dùng OllyDBG v2 nên chắc cũng sẽ khác so với v1.

    Regards,

  7. Mol says:

    Em vẫn dùng OllyDBG v1.10 😀 Có điều là em chỉnh về chế độ tương thíchXP sp3 (vẫn trên win7) thì OllyDBG load thẳng vào EP 401000, còn nếu chạy ở môi trường win7 thì nó dừng ở địa chỉ 76F101C8, và tự động thêm breakpoint auto-shot tại địa chỉ 401000 (EP). Bác giải thích chỗ này giúp em được ko ạ 😀

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.