【问题标题】:How in IDA can save memory dump with command or script?IDA 中如何使用命令或脚本保存内存转储?
【发布时间】:2017-08-02 08:04:37
【问题描述】:
  1. IDA,十六进制视图
  2. 我用鼠标选择从 StartAddress 到 EndAddress 的字节区域
  3. 右键->保存到文件
  4. 得到内存转储。

如何用命令做同样的事情?比如: 保存转储(开始地址,结束地址) 保存转储(0x00001000 , 0x00002000)

【问题讨论】:

  • 这里没有黑客?太糟糕了。

标签: python debugging reverse-engineering ida


【解决方案1】:

是的,这是可行的,但是一次写入一个字节非常慢。 试试这个即时倾销:

auto fname      = "C:\\dump_mem.bin";
auto address    = 0x0400000;
auto size       = 0x0300000;
auto file= fopen(fname, "wb");

savefile(file, 0, address, size);
fclose(file);

【讨论】:

    【解决方案2】:

    使用 IDA Python API,您可以使用以下脚本保存内存区域,该脚本将提示您指定结果文件的保存位置:

    filename = AskFile(1, "*.bin", "Output file name")
    address = 0x009DD5B8
    size = 0x37a0
    dbgr = False
    with open(filename, "wb") as out:
        data = GetManyBytes(address, size, use_dbg=dbgr)
        out.write(data)
    

    如果要保存与图形界面中突出显示的内存区域相对应的字节,可以在上面的脚本中使用以下内容:

    address = idc.read_selection_start()
    if address == idc.BADADDR:
        raise Exception("No memory region selected")
    size = idc.read_selection_end() - address
    

    如果脚本在调试器会话期间运行,请将 dbgr 设置为 True

    【讨论】:

      【解决方案3】:

      在 IDA 中按 Shift + F2,然后粘贴此脚本:

      auto file, fname, i, address, size, x;
      address = 0x0159ADB0;
      size = 0xEA90;
      fname = "C:\\dump_mem.bin";
      file = fopen(fname, "wb");
      for (i=0; i<size; i++, address++)
      {
       x = DbgByte(address);
       fputc(x, file);
      }
      fclose(file);
      

      运行脚本,你会从 0x0159ADB0 和大小 0xEA90 得到 dump_mem.bin 文件

      【讨论】:

      • 如果不启动可执行文件进行调试,DbgByte 不起作用?
      猜你喜欢
      • 2019-10-26
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      相关资源
      最近更新 更多