我正在尝试改善对ida / hexrays的使用...我有一个x86 linux elf二进制二进制文件,未剥离,带有ws / openssl的静态链接。因此,您可以在二进制文件中看到所有OpenSSL函数名称。

我使用tilib cli工具从bio.h标头中创建类型库。看起来很有效,.til有很多结构和函数定义。我将其复制并添加到ida的“类型库”对话框中。我知道有很多东西,因为我在从int到BIO *的hexrays中重新键入了函数中的参数,并固定了对struct成员的所有引用。例如即使til的格式为(BIO * bp,const char * buf),BIO_puts仍然是(int,int)。伊达?在此先感谢!

#1 楼

IDA的til文件基本上是IDA存储特定功能的类型信息的方式。 AFAIK是一个.til文件,它没有告诉IDA如何实际识别该函数以应用函数原型信息。对于该部分,您将需要使用IDA的Flirt实用程序生成必需的.sig文件。

默认情况下,除非IDA在初始分析时是“自动生成的”,否则它不会替换现有的类型信息;因此,您必须重置IDA的类型字段以填写类型信息。由于名称已经存在,因此它不会算作IDA(即sub_XXXX)的“自动生成”。你生产的。
转到OpenSSL函数之一,然后将光标放在名称上。按Y。这将显示您的类型声明。清除字段,然后单击确定。然后按N,确保名称与在header / .til文件中拼写的名称完全相同,然后按Enter。然后应填充正确的类型信息。

显然,这对于整个图书馆来说都是痛苦的。我假设所有OpenSSL函数都在同一区域。因此,如果您知道起始地址和结束地址,则可以执行以下操作来修复所有问题(假设名称已经与头文件匹配):

for func_ea in Functions(openssl_start_ea, openssl_end_ea):
    func_name = GetFunctionName(func_ea) #Get Current Name
    SetType(func_ea, "") #Reset Type Info
    MakeName(func_ea, func_name) #Recreate Name to get new type info