1

我正在尝试反汇编基于 arm64 的二进制文件我想知道如何重新格式化结构,因为我的意思不是字符串,而是至少放置在代码中的值?举个例子

static struct mystruct cmn = {
      { 0xFF, 0x03, {0x98, 0x81, 0x03} },
      { 0x01, 0x01, {0x00} },
      { 0x02, 0x01, {0x00} },
      { 0x03, 0x01, {0x53} },
};

但是在二进制中它实际上很难记住,而且我有时在反转时会出错。那么,是否有可能在 ida pro 7.2 或radare 2 中获得完全相同的排列字符?

https://del.dog/raw/fomukovata

4

1 回答 1

0

环境

  • 雷达2:雷达2 4.2.0-git 23519@linux-x86-64 git.4.1.1-84-g0c46c3e1e 提交:0c46c3e1e30bb272a5a05fc367d874af32b41fe4 构建:2020-01-08__09:49:0
  • 系统: Ubuntu 18.04.3 LTS

解决方案

  • 正如@David Hoelzer 提到的,您必须首先导出内存中数据的格式。
  • 如果您知道数据的结构,我们可以使用radare2 中的两个命令来构建该内存区域。
    • 命令1:pf.name [0|cnt]fmt #定义一个新的命名格式
    • 命令2:Cf[?][-] [sz] [0|cnt][fmt] [a0 a1...] [@addr] #格式化内存(见pf?)

例子

遵循与您提供的结构接近的结构。

user@host:~$ r2 /bin/ls
[0x1000011e8]> pf.mystruct [5]c[3]c[3]c[3]c
[0x1000011e8]> Cf 14 ? (mystruct)example
[0x1000011e8]> pd 1
            ;-- rip:
            0x1000011e8 format ? (mystruct)example {
 example :
                struct<mystruct>
0x1000011e8 = [ 'U', 'H', '.', '.', 'A' ]
0x1000011ed = [ 'W', 'A', 'V' ]
0x1000011f0 = [ 'A', 'U', 'A' ]
0x1000011f3 = [ 'T', 'S', 'H' ]
} 14
[0x1000011e8]> q
user@host:~$ 
于 2020-01-13T19:55:04.920 回答