Hiện nay có rất nhiều công cụ dịch ngược mã máy,chắc hẳn bất cứ ai trong lĩnh vực dịch ngược đều biết đến công cụ quen thuộc OllyDbg. Ngoài ra, còn có 1 một công cụ rất mạnh mẽ và trực quan khác đó là IDA. Để có cái nhìn tổng quan về IDA các bạn có thể xem tại đây. Trong bài viết này tôi sẽ tập trung nói về chức năng rất quan trọng của IDA có thể thay thế cho OllyDbg. Chắc hẳn đa số người dùng IDA đều tập trung chính vào chức năng hiển thị mã code theo dạng đồ thị (Graph), nhưng còn một chức năng quan trọng nữa đó chính là Debug trong IDA. Bắt đầu từ phiên bản 4.5 IDA cung cấp thêm tính năng Debug và được cải thiện trong các phiên bản kế tiếp.
Bắt đầu với IDA Debugger
Sau khi đã load chương trình vào IDA, để bắt đầu quá trình debug trong IDA ta vào menu và chọn Debugger:
Lựa chọn loại debugger mà chúng ta sẽ sử dụng để Debug. Các bộ này để sử dụng được cần có plugins tương ứng. Bao gồm việc debug tại máy cụ bộ hoặc điều khiển từ xa tới một máy khác. Ở bài này, trước tiên tôi sẽ chọn Local Win32 debugger để giới thiệu tới các bạn.
Sau khi bạn đã chọn loại Debugger xong, sau đó bạn cũng có thể lựa chọn lại trình Debugger khác bằng cách vào mục Debug > Switch Debugger, khi đó bảng Select a Debugger sẽ hiển thị lại. Sau đó sẽ hiện ra cảnh báo như sau:
Đây là cảnh báo việc phân tích virus, trojans có thể ảnh hưởng tới hệ thống của bạn, nên bạn cẩn thận. Chọn Yes, vì chương trình của chúng ta hiện tại phân tích hoàn toàn an toàn. Ta tiếp tục vào Debugger chọn như hình dưới, để bắt đầu chạy chương trình:
Thực hiện F9 để chạy thử Debugger, giao diện Debugger cũng tương tự và chứa đầy đủ các cửa sổ như OllyDbg:
Ở trên bao gồm đầy đủ các cửa sổ tương tự trong OllyDbg, nếu bạn nào sử dụng quen với OllyDbg thì không còn lạ lẫm với những cửa sổ này nữa. Còn những ai chưa từng sử dụng OllyDbg thì có thể hiểu ý nghĩa của các cửa sổ như sau :
- IDA View EIP : Hiển thị code của chương trình, có 2 dạng là hiển thị code hoặc kiểu đồ thị, ta có thể dùng phím space để chuyển đổi qua lại
- Hex-View 1: Cửa sổ về bộ nhớ
- Stack View: Cửa sổ về bộ nhớ của stack
- General registers: Cửa sổ chứa các thanh ghi cơ bản EAX, EBX, ECX, …
- FPU registers: Cửa sổ về các thanh ghi của bộ tính toán với số thực
Ngoài những cửa sổ mặc định, ta cũng có thể thêm hoặc bớt 1 số cửa sổ cần thiết hoặc không cần thiết. Ta vào Debugger > Debugger windows
Ở đây có nhiều loại cửa sổ tương tự như trong OllyDbg. Bạn có thể tùy chọn những cửa sổ phù hợp với nhu cầu để hiển thị lên giao diện chính. Khi ta đã bắt đầu quá trình debugger, ta sử dụng thanh điều khiển để điều khiển quá trình debugger như hình dưới:
Các chức năng:
- Continue(F9): Tiếp tục thực thiện 1 process đang bị dừng. Thực hiện cho tới khi gặp 1 breakpoint hoặc bị người dùng tạm dừng hoặc tới khi kết thúc thúc.
- Pause: Tạm dừng một process đang chạy.
- Terminate(Ctrl+F2): Kết thúc một process đang chạy.
- Step Into(F7): Thực hiện câu lệnh kế tiếp. Nếu lệnh kế tiếp là một lời gọi hàm thì đi vào trong hàm và thực hiện lệnh đầu tiền trong hàm.
- Step Over(F8): Thực hiện câu lệnh kế tiếp. Nếu lệnh kế tiếp là một lời gọi hàm thì chương trình sẽ tự động chạy hàm và nhận giá trị trả về rồi chuyển xuống câu lệnh tiếp theo sau lời gọi hàm. Cách này giúp tiết kiệm thời gian, tránh việc đi sâu vào những hàm không cần thiết.
- Run Until Return(Ctrl+F7): Tiếp tục thực hiện lệnh trong hàm cho tới khi nhận được giá trị trả về hoặc gặp 1 breakpoint. Hữu ích khi chúng ta muốn vào xem 1 hàm, và muốn ra khỏi hàm luôn khi đã có thông tin hàm. Không phải F7 nhiều lần.
- Run to Cursor(F9): Tiếp tục chạy và dừng cho tới khi gặp con trỏ vị trí hiện tại hoặc gặp 1 breakpoint
Một việc quan trọng nữa là đặt breakpoint, để chương trình có thể đừng và phân tích. Nếu bạn không đặt breakpoint thì khi bắt đầu debugger thì chương trình sẽ chạy luôn không dừng lại. Trong IDA chúng ta có thể đặt breakpoint bằng 3 cách:
- Sử dụng phím tắt F2 ( giống như trong OllyDbg)
- Debugger > Breakpoints > Add breakpoint
- Chuột phải và chọn Add breakpoint.
Khi đó địa chỉ tại vị trí đặt breakpoint sẽ được hiển thị màu đỏ theo mặc định. Bạn cũng có thể loại bỏ breakpoint bằng cách nhấn thêm F2 một lần nữa.
- Sau khi thiết lập xong breakpoint thì địa chỉ các breakpoint sẽ được lưu trữ tại một danh sách, để có thể xem danh sách đặt breakpoint bạn có thể vào Debugger > Breakpoints > Breakpoint List hoặc phím tắt Ctrl + Alt + B
Ngoài ra IDA cũng hỗ trợ đặt conditional breakpoints và hardware breakpoints. Mặc định thì breakpoints chưa có điều kiện gì. Để đặt conditional breakpoints và hardware breakpoints thì ta cần vào mục edit hoặc insert trong Breakpoints List. Sau đó hộp thoại Breakpoint settings sẽ hiện lên, chúng ta có thể thêm một số điều kiện hoặc tùy chọn .
Trên đây là những khái niệm cơ bản nhất để chúng ta có thể nắm bắt được cách để khởi động và sử dụng 1 debugger IDA để phân tích. Trong bài sau tôi sẽ demo thử cho các bạn một chương trình được debugger bằng IDA, để xem có sự khác biệt gì với OllyDbg.