IDA 中自定义结构体及其使用

以一道 Pwn 题 2016_seccon_tinypad 为例。

分析结构体组成

下图1为 main 函数中的一个片段,下图2为 tinypad 在 bss 段上的信息。

大致逆向后,可以知道 tinypad 的结构如下:

struct chunk_size_and_ptr
{
   long chunk_size;
   void *chunk_ptr;
};

struct tinypad_struct
{
    char buffer[256];
    struct chunk_size_and_ptr[4];
};

自定义结构体

创建 chunk_size_and_ptr 结构体

于是可在 IDA 的 Structures 窗口中创建结构体,按 Insert 键创建结构体。

选中该结构体,再按 D 键可添加结构体成员。

选中结构体成员,按 N 键可对其重命名。

选中箭头所指区域,按 D 键可修改成员变量的类型。其中 dq 代表该变量大小为 8 字节。

选中 chunk_size_and_ptr ends 这一行,再按 D 键可创建其他的成员变量。

chunk_size_and_ptr 结构体创建完毕。

创建 tinypad_struct 结构体

右键上图中的 buffer 后点击 Array 可将 buffer 设置为字符数组,数组大小设置为 256。下图2中的 dup 意思为 duplicate,即重复次数。

创建一个 chunk_size_ptr 成员变量后按 Y 键将其声明为 chunk_size_and_ptr 结构体类型。

最后将其设置为结构体数组。

使用自定义结构体

在 bss 段中将 tinypad 声明(按 Y 键)为 tinypad_struct 类型,再按 F5 重新生成伪代码即可。

2019-2020 @lukbash