首页
社区
课程
招聘
[IDA使用技巧]#170: 结构体的实例化
2024-2-12 08:57 2654

[IDA使用技巧]#170: 结构体的实例化

2024-2-12 08:57
2654

翻译:梦幻的彼岸

原文地址:https://hex-rays.com/blog/igors-tip-of-the-week-170-instantiating-structures/

MFC 消息映射

举例来说,我们来看看一个使用消息映射的 MFC 程序。这些映射存在于程序的常量数据区中,最初由 IDA 表示为数字和偏移量的混合体:

要理解它,我们可以参考 afxwin.h 中定义的 AFX_MSGMAP_ENTRY 结构:

struct AFX_MSGMAP_ENTRY
{
	UINT nMessage; // windows message
	UINT nCode; // control code or WM_NOTIFY code
	UINT nID; // control ID (or 0 for windows messages)
	UINT nLastID; // used for entries specifying a range of control id's
	UINT_PTR nSig; // signature type (action) or pointer to message #
	AFX_PMSG pfn; // routine to call (or special value)
};

为了快速将结构添加到数据库中,我们可以使用Local Types[本地类型]窗口,将 MFC 特有的 AFX_PMGS 类型替换为 void 指针:

对数据进行结构化处理

结构一旦同步到 IDB,就可以在反汇编列表中使用。在候选区域未定义且可用结构列表较小的情况下,可以使用上下文菜单:

如果候选数据太多,或者数据已经定义(例如通过自动分析转换为数组),可以直接使用Edit > Struct var…菜单项或快捷键 Alt-Q。

无论是哪种情况,IDA 都会使用结构布局将数据显示为相应字段:

请注意,位置的dummy name[虚拟名称]会发生变化,以反映这是一个结构体实例。

一旦定义了结构实例,就可以

  1. 创建结构数组(例如使用 * 快捷键):
  2. 在简洁和完整结构表示法之间切换:

通过重新键入来应用结构

除了 "Struct var...[结构变量]"操作或上下文菜单外,您还可以在 "Set type...[设置类型]"功能(Y 快捷键)中指定数据的名称,从而快速对数据应用结构。

这种方法也适用于尚未导入 IDB 或仅存在于已加载类型库中的结构。



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2024-2-12 08:58 被梦幻的彼岸编辑 ,原因:
收藏
免费 1
打赏
分享
最新回复 (1)
雪    币: 4058
活跃值: (5720)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
badboyl 2 2024-2-12 18:00
2
0
大过年的也没闲着啊
游客
登录 | 注册 方可回帖
返回