IDA之修复结构体

修复结构体有两种方法
一是C语言式修复(麻烦)
二是直接设置(更简单,更推荐)

首先学会设置IDB快照(其实本人很少使用)
IDB快照:.idb文件,可快速帮我们恢复某个时间点的快照,可以防止错误太多

View - Database snapshot manager


其中Take snapshot 即保存当前的结构体 等等
当要恢复此快照时,直接双击即可

C语言语法定义结构体(比较慢,不推荐)

适用于已知C语言完整结构体类型和变量

通过

view - open subviews - Structures
打开Local types窗口

再Insert快捷键 或者右键Insert

就可以输入想要设定的结构体了

举个例子

点击Ok

出现说明成功输入

但是此时IDA没有导入结构体,Ctrl + F5搜索,选择要导入的结构体,双击

点击Yes即可成功导入
但IDA并不会去自动匹配变量,后续只需自己修改变量类型即可
变量具体怎么匹配后文详细讲解,以及有什么用

如果我们不知道结构体名称之类的取什么,但发现是一个结构体(常见,通用情况)

可以打开结构体窗口

菜单点击View - structures


右键选择Add struct type或者直接快捷键Insert

可以命个名字,然后点击OK即可
具体的设置变量类型dq之类的后面再写

现在来补一下:
用的IDA9.0SP1 52破解上有版本
image
现在IDA9.0

View-> Open Subviews -> Local Types

233
将原先的Local Types和Structures合并在一起了,中间那个
可以移动(不同IDA版本不同,可能也没合在一起)

235

236

两个窗口都可以点Add Types

237

由于前后我使用的版本不一样,这里是将Struct和Enum和C syntax都在一起了,更方便
之前介绍的方法在C syntax里写即可
现在介绍的就是struct,里面的内容默认即可,点击OK
(我图中不知道为什么是name是A,一般是struct_xx)(其实没影响,反正后面都会改名hh)
image
image
比如我设置了如下的
image
在你想更改的变量,对着它的类型按Y
暂时没有很好的例子,
总之按了Y之后
原本是DWORD * a1;
改成tree *a1;
那么C伪代码中原本
*(DWORD *)a1
*((DOWRD *)a1+2)
就可以识别a1->lchid *a1->rchild

当然还有一种常见的情况,比如内存中一块数据发现它们是结构体
也可以,但是博主还不太会,待补充

参考博客
https://bbs.kanxue.com/thread-266419.htm

posted @ 2025-04-20 02:01  LingWann  阅读(187)  评论(0)    收藏  举报