Phần 1:
http://vcyberwarface.blogspot.com/2014/02/xay-dung-trinh-cam-cho-ida-pro-phan-1.html
2. Bộ công cụ phát triển của IDA
http://vcyberwarface.blogspot.com/2014/02/xay-dung-trinh-cam-cho-ida-pro-phan-1.html
2. Bộ công cụ phát triển của IDA
Bản thân IDA là một trình đảo mã
tuyệt vời cùng với một số lượng lớn các trình gỡ rối. Khi mà bản thân IDA đã có
một lượng lớn các chức năng, thì luôn có những thứ mà bạn muốn nó được thực hiện
tự động hoặc là làm việc theo những cách mà IDA không hỗ trợ. Thật may mắn là
nhà phát triển Hex-Rays đã cho phát hành IDA SDK, đây là cách để bạn kết nối những
chức năng mà bạn phát triển với IDA.
Có 4 loại modun mà bạn có thể viết
cho IDA sử dụng IDA SDK, modun trình cắm là chủ đề của bài viết này
Kiểu Modun
|
Mục đích
|
Trình xử lý
|
Hỗ trợ thêm cho những kiến trúc ví sử lý khác. Được biết như là các
Modun IDP.
|
Trình cắm
|
Mở rộng các chức năng khác cho IDA
|
Trình nạp
|
Hỗ trợ nạp nhiều định dạng tập tin thực thi
|
Trình gỡ rối
|
Hỗ trợ việc dò lỗi trên nhiều nền tảng khác nhau và tương tác với các
trình gỡ rối, cho phép gỡ rối từ xa.
|
Từ đây trở đi, thuật ngữ “trình cắm”
sẽ được sử dụng để thay thế cho “plugin modun”, ngoại trừ những trường hợp cần
thiết phải nói rõ.
IDA SDK đã bao gồm tất cả những tập
tin tiêu đề và thư viện cần thiết để viết trình cắm cho IDA. Nó hỗ trợ một số
trình biên dịch trên Linux, Mac và Windows, và cũng kèm theo nhiều ví dụ minh họa
những chức năng cơ bản.
Cho dù bạn là một nhà đảo mã, một
người nghiên cứu lỗ hồng, phân tích phần mềm độc hại, hoặc làm tất cả những việc
trên, SDK cho bạn một sức mạnh lớn và sự mềm dẻo. Bạn có thể tự viết một trình
gỡ rối hoặc trình đảo mã mà chỉ sử dụng SDK, và đó chỉ là sự hỗn độn bề ngoài.
Đây là một trong những ví dụ nhỏ dễ hiểu về những điều mà bạn có thể làm với
SDK.
§ Tự
động hóa việc phân tích và giải nén cho những tập tin nhị phân được đóng gói.
§ Tự
động hóa việc tìm kiếm việc sử dụng những hàm cụ thể (ví dụ, LoadLibrary(),
strcopy(), và bất cứ thứ gì mà bạn có thể nghĩ ra)
§ Phân
tích luồng chương trình và dữ liệu, xem xét những thứ mà bạn thấy thích thú.
§ So
sánh sự khác biệt giữa 2 tập tin nhị phân
§ Viết
một trình dịch ngược.
Vv
Để thấy được ví dụ về những gì mà
một số người đã viết sử dụng IDA SDK, tham khảo IDA Palace website hoặc tại
trang tải về của ida để biết thêm.
2.1 Cài đặt
Rất dễ dàng. Một khi bạn đã có được
SDK (mà thường được nén trong một tập tin dạng .zip), giải nén nó vào một nơi
mà bạn chọn. Nơi tôi thường đặt SDK là trong thư mục cài đặt IDA và đặt tất cả
mọi thứ vào trong này, nhưng điều này không quan trọng.
2.2 Cấu trúc thư mục
Thay vì đi qua tất cả những thư mục
và tập tin trong SDK. Tôi dự định sẽ đi qua các thư mục cần thiết để viết
plugin và những gì mà chúng chứa.
Thư mục
|
Nội dung
|
/ (Thư mục gốc)
|
Thư mục gốc chứa các tập tin hướng dẫn biên dịch (makefile) hỗ trợ
nhiều môi trường khác nhau, bạn có thể đọc qua tập tin readme.txt trong cùng
thư mục để có được cái nhìn tổng thể về SDK, và thấy những thay đổi qua các
phiên bản.
|
Include/
|
Những tập tin tiêu đề được phân loại theo nhóm tùy theo chức năng.
Tôi khuyên bạn nên đọc qua tất cả các tập tin và ghi chú lại những hàm mà bạn
thấy cần thiết sau khi đọc qua tài liệu này.
|
Libbor.wXX/
|
Đây là những thư viện hàm được IDA sử dụng khi liên kết với trình
biên dịch Borland C
|
LibgccXX.lnx/
LibgccXX.mac/
|
Các thư viện được sử dụng khi liên kết với trình biên dịch GCC trên nền
Mac hoặc Linux
|
Libgcc.wXX
|
Các thư viện được sử dụng khi liên kết với GCC sử dụng trong nền
Windows
|
Libvc.wXX
|
Thư viện IDA sử dụng khi liên kết với trình biên dịch Visual C++ trên
nền Windows
|
Plugins/
|
Thư mục chứa các trình cắm mẫu
|
XX là 32 (bit) hoặc 64 (bit), tùy
thuộc vào kiến trúc vi sử lý mà bạn đang sử dụng.
2.3 Những tập tin tiêu đề
Có 52 tập tin tiêu đề trong thư mục
include, tôi thấy những tập tin sau là cần thiết nhất khi viết plugins cho IDA.
Nếu bạn muốn thông tin về tất cả các tập tin tiêu đề, hãy đọc tập tin
readme.txt trong thư mục gốc của SDK, hoặc trực tiếp trong tập tin tiêu đề.
Danh sách này chỉ cung cấp một tra cứu ngắn gọn khi tìm kiếm một chức năng cụ
thể nào đó – nhiều chi tiết hơn sẽ được trình bày trong những phần sau.
Tập tin
|
Nội dung
|
area.hpp
|
Chứa lớp area_t và areacb_t được sử dụng để đại diện cho một “khối”mã,
hai lớp này sẽ được trình bày chi tiết ở phần sau.
|
bytes.hpp
|
Chứa các định nghĩa và hàm làm việc với những byte trong tập tin được
đảo mã.
|
dbg.hpp & idd.hpp
|
Chứa những lớp làm việc với trình gỡ rối và các hàm chức năng
|
diskio.hpp & fpro.h
|
Chứa các hàm bao cho những hàm chuẩn của ngôn ngữ C như fopen(),
open() và một số hàm hỗ trợ để làm việc với tập tin và thư mục.
|
entry.hpp
|
Những hàm trong này được dùng để lấy thông tin và thao tác với các điểm
nhập (entry point) của tập tin thực thi.
|
frame.hpp
|
Những hàm này hỗ trợ làm việc với bộ nhớ như ngăn xếp, ngăn xếp cục bộ
hàm, các biến và nhãn cục bộ.
|
funcs.hpp
|
Chứa lớp func_t và các hàm làm việc với lớp này.
|
ida.hpp
|
Chứa cấu trúc idainfo, cấu trúc này chứa hầu hết thông tin về tập tin
được đảo mã.
|
kernwin.hpp
|
Các lớp và hàm dùng giao tiếp với IDA.
|
lines.hpp
|
Các định nghĩa và hàm làm việc với văn bản được đảo mã, màu sắc mã.
|
loader.hpp
|
Chứa hầu hết các hàm có nhiệm vụ nạp tập tin thực thi và thao tác với
IDB.
|
name.hpp
|
Các hàm và định nghĩa được dùng để thao tác và thiết lập tên gọi cho
các byte (tên biến, tên hàm …)
|
pro.h
|
Chứa rất nhiều các hàm tiện ích, các định nghĩa
|
search.hpp
|
Chứa rất nhiều hàm và định nghĩa dùng để tìm kiếm văn bản, dữ liệu,
mã trong tập tin bị đảo mã và nhiều hàm hữu dụng khác.
|
segment.hpp
|
Chứa lớp segment_t và tất cả các hàm làm việc với các đoạn nhị phân
và các vùng.
|
strlist.hpp
|
Cấu trúc về thông tin chuỗi string_info_t và các hàm liên quan để đại
diện cho mỗi chuỗi trong một danh sách chuỗi của IDA.
|
ua.hpp
|
Chứa lớp insn_t, op_t và optype_t mô tả các chỉ thị của hợp ngữ, các
toán tử, kiểu toán tử cùng với các hàm để thao tác với trình phân tích IDA.
|
xref
|
Các hàm làm việc với các tham chiếu văn bản và tham chiếu dữ liệu.
|
2.4 Sử dụng SDK
Nói một cách tổng quát, bất cứ
hàm nào trong tập tin tiêu đề có tiền tố là ida_export thì sẵn sàng để bạn sử dụng,
cũng như những biến toàn cục có tiền tố là ida_export_data. Nguyên tắc là nên bỏ
qua những hàm ở mức thấp (những hàm đó được xác định trong tập tin header) và sử
dụng những hàm ở mức giao diện cao cung cấp. Bất cứ định nghĩa lớp, cấu trúc,
và liệt kê thì sẵn sàng cho bạn sử dụng.
(Còn tiếp)
(Còn tiếp)
No comments:
Post a Comment