radare2 从地址获取 API 库和名称

逆向工程 雷达2
2021-06-16 03:01:08

当我拆卸 a 时,jmp我得到:

[0x004073d4]> pd 1
            0x004073d4      ff2584804000   jmp dword [sym.imp.kernel32.dll_GetModuleHandleA] ; 0x408084 ; "j\x85"

有没有命令我可以sym.imp.kernel32.dll_GetModuleHandleA通过提供地址来获取其中包含的信息 0x408084最好在 Json 中,因为我将它用于脚本。

我搜索了一下,但找不到任何东西。

2个回答

sym.imp.kernel32.dll_GetModuleHandleA为此地址定义标志radare2。

此标志名称由 4 个部分组合而成:

  • sym 对于符号
  • imp 进口
  • kernel32.dll 是图书馆的名字
  • GetModuleHandleA 是库中导入函数的名称

要使用radare2 处理标志,您应该使用该f命令及其子命令。使用f?列出所有的人。

对于您的情况,获取给定地址的标志名称的正确方法是使用如下fd命令:

[0x004073d4]> fd 0x408084 
sym.imp.kernel32.dll_GetModuleHandleA

您可以将它拆分为函数和 DLL 名称,方法是使用用于编写雷达脚本的编程语言进行简单的字符串操作。


就个人而言,我会说使用radare2编写脚本的最佳方法是使用r2pipe,它是radare2的一个非常简单的接口。您可能已经开始使用它,但为了以防万一,以下是使用 Python 的简单方式:

import r2pipe

r2 = r2pipe.open("/bin/ls")
r2.cmd("aa")
print(r2.cmd("afl"))
print(r2.cmdj("aflj"))  # evaluates JSONs and returns an object
r2.quit()

我建议您阅读Radare2 Book以了解有关radare2 及其使用方法的更多信息。

[0x01012d6c]> pd 1 @ 0x1012d89

| 0x01012d89    ff154c110001  call dword [sym.imp.KERNEL32.dll_GetStartupInfoA]; 0x100114c

[0x01012d6c]> pxrj  4 @ 0x100114c

[{"addr":16781644,"value":2011045392,"ref":"reloc.KERNEL32.dll_GetStartupInfoA_16"}]
[0x01012d6c]>