正如问题所说,我需要使用radare2. 这个二进制文件也是静态链接的。我已经通过使用IDA提供lscan的.sig文件识别静态链接库并将其导入lscanIDA 以解析函数名称,从而在 IDA 中反转了它。
我不知道如何将这些文件导入到radare2. 另外我不知道相同的解决方案是否适用于radare2.
正如问题所说,我需要使用radare2. 这个二进制文件也是静态链接的。我已经通过使用IDA提供lscan的.sig文件识别静态链接库并将其导入lscanIDA 以解析函数名称,从而在 IDA 中反转了它。
我不知道如何将这些文件导入到radare2. 另外我不知道相同的解决方案是否适用于radare2.
似乎lscan是为了与IDA. 但是,lscan基于FLIRT签名文件,它也可以由radare2 读取(请参阅此答案的Zignatures部分)。您可以通过多种方式radare2来获得类似的结果:
您可以使用radare2ida存储库中存在的简单脚本轻松地将IDC 和IDB 文件从IDA 导入radare2。
该存储库包含一系列文档、脚本和实用程序,可让您使用 IDA 和 R2,将项目元数据从一种工具转换为另一种工具,并提供以更有用的方式集成它们的工具。
从 IDA 导出
要将 IDA 数据库导出到 IDC 文件,请单击 File >> Produce file >> Dump databse to IDC file...
要将当前数据库保存为 IDB 文件,请单击File >> Take database snapshot...或使用快捷方式Ctrl+ Shift+W
导入到 Radare2
要将 IDC 元数据导入radare2,请使用附带的idc2r.pyradare2ida:
idc2r.py file.idc > file.r2
该命令读取从 IDA Pro 数据库导出的 IDC 文件并生成包含相同注释、函数名称等的 r2 脚本。您可以file.r2使用.radare的 dot命令导入结果:
[0x00000000]> . file.r2
该.命令用于解释来自外部来源的雷达命令,包括文件和程序输出。例如,要省略中间文件的生成并直接导入脚本,您可以使用以下组合:
[0x00000000]> .!idc2r.py < file.idc
radare2 有自己的签名格式,称为Zignatures,允许加载/应用和动态创建签名。它们在z命令命名空间下可用:
[0x00000000]> z?
|Usage: z[*j-aof/cs] [args] # Manage zignatures
| z show zignatures
| z* show zignatures in radare format
| zj show zignatures in json format
| z-zignature delete zignature
| z-* delete all zignatures
| za[?] add zignature
| zo[?] manage zignature files
| zf[?] manage FLIRT signatures
| z/[?] search zignatures
| zc check zignatures at address
| zs[?] manage zignspaces
zf每当您处理 FLIRT 签名时,子命令都会很方便。因此,您可以从文件中导入 FLIRT 签名:
[0x00000000]> zf?
|Usage: zf[dsz] filename # Manage FLIRT signatures
| zfd filename open FLIRT file and dump
| zfs filename open FLIRT file and scan
| zfz filename open FLIRT file and get sig commands (zfz flirt_file > zignatures.sig)
不管 FLIRT,您还可以使用zos [filename]fromradare2 将签名转储到 sdb 文件并zo [filename]加载它。
与list命令类似dgb,radare 允许您打印源代码文件中的行。下面是一个例子:
$ gcc -m32 -g megabeets.c -o megabeets.bin
$ r2 megabeets.bin
[0x08048420]> aa
[x] Analyze all flags starting with sym. and entry0 (aa)
[0x08048420]> s main
[0x080486cd]> CL
file .//megabeets.c
line 36
022
023 int main(int argc, char *argv[])
> 024 {
025 char *input;
026 puts("Megabeets\n");
该
C命令用于管理注释和数据转换。您可以定义要解释为代码、二进制数据或字符串的程序字节范围。还可以在每个指定的标志位置执行外部代码,以便从外部文件或数据库中获取一些元数据,例如评论。
要了解更多信息,我建议您阅读: