18/09/2018, 13:29

IDA công cụ hoàn hảo cho các chuyên gia Reverse Engineering

IDA ( I nteractive D is A ssembler): đây là một trong những phần mềm disasembler thông minh và đầy đủ tính năng nhất, được sử dụng bởi rất nhiểu chuyên gia nghiên cứu về bảo mật sử dụng.. IDA được viết bằng C++, chạy trên 3 hệ điều hành chính: Microsolt Windows, Mac OS X, Linux. IDA ...

IDA (Interactive DisAssembler): đây là một trong những phần mềm disasembler thông minh và đầy đủ tính năng nhất, được sử dụng bởi rất nhiểu chuyên gia nghiên cứu về bảo mật sử dụng.. IDA được viết bằng C++, chạy trên 3 hệ điều hành chính: Microsolt Windows, Mac OS X, Linux.

IDA được phát triển bởi Hexrays: https://www.hex-rays.com/index.shtml

Trong bài này sẽ tôi tập trung làm rõ một số phần như sau:

  • Bắt đầu với IDA
  • Một số cửa sổ quan trọng trong IDA
  • Ý nghĩa sử dụng IDA trong phân tích, dịch ngược

Bắt đầu với IDA

IDA_start

Đây là cửa sổ đầu tiên hiển thị khi chạy IDA, có thể bỏ qua cửa sổ này và vào thẳng giao diện IDA từ các lần sau bằng cách bỏ chọn phần khoanh màu đỏ. Trong giao diện này, người dùng sẽ được cung cấp một số tuỳ chọn:

  • New: mở một file mới để phân tích
  • Go: Đi thẳng vào giao diện làm việc chính
  • Previous: Load lại một file đã phân tích trước đó để tiến hành phân tích lại

main_ui

Ngoài việc chọn New để mở một file mới để phân tích, trên giao diện chính, người dùng có thể vào menu File → Open để mở file cần phân tích. Trong phạm vi bài này, chúng ta sẽ mở chương trình LordPE trong các ví dụ.

Khi chọn được file cần phân tích, IDA sẽ hiển thị dialog liệt kê danh sách các loại file cần thiết. Ở đây chúng ta có thể chọn tài nguyên được load lên hoặc chọn hình thức load. Thông thường các giá trị này nên để mặc định theo IDA.

load_lib

Sau khi click OK, IDA sẽ tự động load các tài nguyên cần thiết theo thông số cấu hình đã chọn. Sau quá trình load, IDA sẽ bố trí các vùng cửa sổ khác nhau với các thông tin tương ứng.

loaded

Một số cửa sổ quan trọng trong IDA

Phần dưới đây sẽ giới thiệu một số cửa sổ chính, có chứa các tính năng quang trọng và cần thiết khi disasembler.

  • Function Windows: Cửa sổ này liệt kê tất cả các hàm của chương trình. Sau quá trình phân tích , IDA sẽ liệt kê và đưa ra danh sách hàm với địa chỉ bắt đầu, kết thúc, các tham số và đặc tính của từng hàm.

function_windows

  • Output Windows: Cửa sổ này hiển thị một số thông tin đầu ra trong quá trình xử lý của IDA, cửa sổ này không cần quan tâm quá nhiều khi tiến hành làm việc cùng IDA
  • IDA View: Cửa sổ này có hai chế độ hiển thị: Hiển thị dạng mã Asembly hoặc chia thành từng khối lệnh có sự liên kết giữa các khối lệnh để thực hiện các cấu trúc lặp, rẽ nhánh.

ida_view

  • Graph Overview: Cửa sổ này xuất hiện cùng cửa sổ IDA View ở chế độ hiển thị theo các khối. Cửa sổ này cung cấp cho người dùng cái nhìn tổng quan về một hàm hoặc toàn bộ chương trình. Thông qua cửa sổ này người dùng có thể biết được mức độ đơn giản/phức tạp của một hàm/chương trình đang theo dõi, đồng thời có thể di chuyển nhanh tới các vị trí trong toàn bộ hàm/chương trình để quan sát tổng quan và chi tiết các module. Khi di chuyển trên Graph Overview, chúng ra sẽ xem được các khối lệnh ở vị trí tương ứng trên cửa sổ IDA View

graph_view

  • Hex View: Cửa sổ này cung cấp các thông tin dưới dạng mã HEX, phần này cũng cho phép người dùng có khả năng chỉnh sửa trực tiếp mã HEX.

hex_view

  • Import View: Cửa sổ này cho biết các module mà chương trình đã sử dụng và từng module cụ thể được load lên từ thư viện nào

import_view

Ý nghĩa sử dụng IDA trong phân tích, dịch ngược

IDA cung cấp rất nhiều thông tin cũng như tính năng hỗ trợ cho người phân tích, tuy nhiên nếu không biết cách sử dụng một cách hợp lý và hiệu quả thì rất dễ làm cho người dùng bị nhiễu thông tin và cảm thấy khó khăn. Mục đích của IDA là để người phân tích có một cái nhìn tổng quan về toàn bộ chương trình, tiếp theo đó, người dùng có thể thấy được cấu trúc chi tiết của các module trong chương trình, mối quan hệ giữa các module, các khối lệnh nằm trong từng hàm.

Kết hợp với quá trình sử dụng  OllyDBG, người phân tích có thể biết được luồng đi của chương trình tương ứng với từng giá trị và loại dữ liệu. Đồng thời với quá trình đó, người phân tích cũng có thể xác định các chức năng của từng hàm, tạo các ghi nhớ cho từng khối lệnh để làm việc hiệu quả hơn.

0