4.6
Chuỗi
Cửa
sổ chuỗi trong IDA có thể được truy cập sử dụng SDK,
thông thường mỗi chuỗi trong tập tin nhị phần (được
xác định khi tập tin được mở) được đại diện bởi
một cấu trúc string_info_t, định nghĩa trong tập tin
strlist.hpp. Bên dưới là một trích đoạn ngắn của cấu
trúc này.
struct
string_info_t
{
ea_t ea; //
Address of the string
int
length; // String length
int type;
// String type (0=C, 1=Pascal, 2=Pascal 2 byte
//
3=Unicode, etc.)
...
};
|
Chú
ý rằng cấu trúc ở trên có thể không thật sự chứa
một chuỗi. Để lấy chuỗi, bạn cần tríc nó từ tập
tin nhị phân sử dụng get_bytes() hoặc get_many_bytes(). Để
duyệt qua danh sách của chuỗi, bạn có thể sử dụng
đoạn mã sau:
for (int
i = 0; i < get_strlist_qty(); i++)
{
char
string[MAXSTR];
string_info_t
si; // Get the string item
get_strlist_item(i, &si);
if
(si.length < sizeof(string))
{
//
Retrieve the string from the binary
get_many_bytes(si.ea, string, si.length);
if
(si.type == 0) // C string
msg("String %d: %s\n", i, string);
if
(si.type == 3) // Unicode
msg("String %d: %S\n", i, string);
}
}
|
5.
Hàm
Phần
này sẽ được chia thành nhiều chuyên mục tương ứng
với những nhóm hàm của IDA SDK. Tôi sẽ bắt đầu từ
những hàm đơn giản và được sử dụng thường xuyên
cho đến nhứng hàm phức tạp và hiếm dùng. Tôi cũng sẽ
cung cấp những ví dụ cơ bản với mỗi hàm và ví dụ
trong phần Ví dụ sẽ cung cấp ngữ cảnh nhiều hơn. Hiển
nhiên, đây không phải tài liệu tham khảo toàn bộ (hãy
dựa vào những tập tin tiêu đề trong SDK để làm điều
đó), nhưng có ý nghĩa tổng quan hơn về những hàm được
dùng nhiều và có ích.
Chú ý quan trọng về ví dụ : Tất cả các hàm bên dưới
có thể được gọi từ IDAP_run(), IDAP_init() hoặc
IDAP_term(), trừ khi chúng được xác định rõ. Mỗi ví dụ
có thể được dán thẳng vào hàm IDAP_run() từ khuông mẫu
plugin trong phần 3.5 và sẽ làm việc. Những tập tin tiêu
đề cần thiết cho mỗi chức năng của ví dụ sẽ được
xác định khi cần thiết.
5.1
Thay thế những hàm thường dùng
IDA
cung cấp nhiều hàm thay thế cho những hàm thường dùng
trong thư viện C. Tôi đề nghị bạn nên sử dụng những
hàm thay thế bên dưới thay vì những hàm được cung cấp
bởi thư viện C của bạn. Với phiên bản 4.9, rất nhiều
hàm trong thư viện C không còn được sử dụng – bạn
phải sử dụng những hàm tương đương trong IDA.
C Library Functions |
IDA Replacements |
Defined In |
fopen, fread, fwrite, fseek, fclose |
qfopen, qfread, qfwrite, qfseek,qfclose |
fpro.h |
fputc, fgetc, fputs, fgets |
qfputc, qfgetc, qfputs, qfgets |
fpro.h |
vfprintf, vfscanf, vprintf |
qfprintf, qfscanf, qvprintf |
fpro.h |
strcpy, strncpy, strcat, strncat |
qstrncpy, qstrncat |
pro.h |
sprintf, snprintf, wsprintf |
qsnprintf |
pro.h |
open, close, read, write, seek |
qopen, qclose, qread, qwrite, qseek |
pro.h |
mkdir, isdir, filesize |
qmkdir, qisdir, qfilesize |
pro.h |
exit, atexit |
qexit, qatexit |
pro.h |
malloc, calloc, realloc, strdup, free |
qalloc, qcalloc, qrealloc, qstrdup, qfree |
pro.h |
Tôi
thật sự khuyên bạn nên sử dụng những hàm ở trên,
tuy nhiên, nếu bạn chuyển đổi một plugin cũ và vì một
vài lý do cần sử dụng những hàm của thư viện C, bạn
có thể dịch plugin của bạn với tham số:
-DUSE_DANGEROUS_FUNCTIONS
or –DUSE_STANDARD_FILE_FUNCTIONS.
No comments:
Post a Comment