IDA 转储内存

逆向工程 艾达 Python
2021-06-12 05:40:21

我正在学习如何在 IDA 中使用 IDC Scripting 或 IDAPython 来反转二进制文件。有一天我遇到了这个问题:

给你一个随机整数数组(4字节整数)位于内存中。随机数只在调试时计算。

任务是:从该数组中提取每个 4 字节整数并将它们放入一个新数组中,在控制台上打印新数组。

根据我所了解的,IDA 十六进制视图在内存中为每个地址仅显示 1 个十六进制数。

例如:在地址 00791A00 包含一个整数 1134,00791A04 包含一个迭代器 4567。在十六进制视图中它会是这样的

                     00791A00 : 34
                     00791A01 : 11
                     00791A02 : 00
                     00791A03 : 00
                     00791A04 : 67
                     00791A05 : 45
                     00791A06 : 00
                     00791A07 : 00

假设新数组名为“arr”。所以 arr[0] = 0x1134,arr[1] = 0x4567。这就是我想要的!所以,我想知道如何使用 IDAPython 或 IDC 做到这一点?到目前为止,我所知道的关于 IDC 或 IDAPython 的唯一一件事就是编写一个脚本来将内存转储到一个文件中。

这是我学习转储内存的链接:https : //stackoverflow.com/questions/42744445/how-in-ida-can-save-memory-dump-with-command-or-script

如果有人能给我一个提示或引导我了解如何解决这个问题的基本想法,我将不胜感激。

1个回答

根据我的记忆,Ida 要么在 Ida 视图中显示带有 db 前缀的字节,要么
在十六进制视图中
显示为一组 16 个字节我不确定你在哪里看到这样的显示

在此处输入图片说明

如果您的意思是 Ida 视图按 d 两次将使 db(定义字节)前缀为 dd(定义 dword)
并且选择一个 dd 将在十六进制视图中突出显示相应的 dword,如下图所示

在此处输入图片说明

您可以使用 MakeDword(),MakeArray() idc 命令创建数组

在此处输入图片说明

如果你想用地址打印双字,你可以使用这样的脚本

auto i;
for(i =0; i<5 ; i++) {
Message("%08x\t:%08x\n",(ScreenEA() + (i*4))Dword(ScreenEA() +(i*4)));
} 

在此处输入图片说明