在二进制文件中解析静态链接库的符号

逆向工程 静态分析 符号
2021-07-10 12:28:53

假设我在某个二进制文件中有一个静态链接的库(例如,openssl)。

解决库符号的好方法是什么?是否有适合该工作的 IDA 插件?

我想我认识库名称和版本。

1个回答

你说的决心是什么意思?如果可以访问某种类型的 *nix,则可以在相关二进制文件上运行 nm 命令。

纳米-a

该命令将公开二进制文件中使用的任何符号。通常,如果您在符号旁边看到 T 或 Text 顺序的某些内容,则表示它可以被调用,并且可能是一个函数。通常,如果您在符号旁边看到 U,则通常意味着二进制文件正在调用该函数及其“未定义”,这就是为什么它旁边有一个 U。-- U 表示它需要在运行时解决。

如果您使用的是 *nix 风格,您可以在二进制文件上运行 file 命令来确定它们是 FAT 文件还是 16/32/64 或它们是什么类型的文件。您还可以使用 lipo 命令查看有关二进制文件的信息

如果它们碰巧是 64 位文件并且您有一个方便的调试器并选择一个感兴趣的符号。如果符号未记录在案,您可以通过将其加载到调试器中并在符号上设置断点,很容易地开始计算其运行时参数。当断点被击中时,查看寄存器,或者更好地查看断点之前的指令。通常(64 位)你会看到一些关于寄存器RDIRSI被设置的顺序——或者DISI 的某些部分一般来说,函数的第一个参数获取DI寄存器,第二个参数获取SI登记。如果您看到返回的结果,它们通常会通过RAX(或A寄存器)出来。您可以轻松制作自己的头文件。

如果您想知道,还有更多详细信息,但网络上有很多资源,只需稍微环顾四周即可找到。

我会发表评论,但没有足够的积分来发表评论。