情况如下:

我正在反转一个应用程序,在其中我找到了许多属于OpenSSL库的函数。由于我具有该模块的源代码,所以我想知道是否有可能从源代码中“提取”变量名称,结构,函数名称,并将其同步/映射到IDA?

评论

很有可能不会。为了执行任何简单的匹配,您可能必须在相同的编译器的相同版本和相同的设置下构建相同版本的OpenSSL,以获取与您要使用的二进制文件足够接近的二进制文件。 br />
或者,您可以只编译包含所有符号的源代码并对其进行分析,然后将其与所拥有的内容进行比较。我很确定,即使编译后的二进制文件不会完全相同,但也非常接近。为了更加紧密,可以尝试使用与原始二进制文件相同的编译器进行编译。

即使您使用不同的设置进行编译,功能的顺序也将相同。因此,如果您可以识别一个功能,则以下功能应与源模块中之前/之后的功能相同。

@Devolus Okey,但是如何使该过程自动化?我的意思是我编译了上述模块,可以识别功能,但是无法手动命名所有变量和功能名称。

我认为您无法自动执行此操作,因为不确定变量与结果代码之间是否存在映射关系,尤其是在使用优化程序进行编译的情况下。我不明白为什么这很重要。对于反转,知道库的签名就足够了,如果您要编写可编译的代码,则无论如何都可以使用源代码,除非代码依赖于该特定版本的某些特定行为,这无疑是imo。 。

#1 楼


使用调试符号构建模块
将构建的模块加载到IDA Pro中并导入调试符号
使用BinDiff将所构建模块的IDB中的函数名称等移植到目标模块的IDB