是否有工具可以扫描可以解释不同编译器的代码/函数?

逆向工程 艾达 部件 反汇编者 十六进制
2021-06-26 12:32:45

我有一个库 DLL 和一个使用该库的程序(静态;DLL 是独立的)。

我的目标是从程序中的库中找到一堆函数,但不幸的是,看起来它们是用不同的编译器/非常不同的选项编译的,使得十六进制扫描不成功。我通过字符串/顺序发现的那些不同,因为程序有一个 push/pop ebp shell,经常使用不同的寄存器,有时使用不同的操作码,但它们最终完成了相同的事情。

是否有任何工具/技术可以帮助我找到其他一些功能?当然,在 DLL 中,函数在大多数情况下彼此相邻,但在程序中它们是混合的,因此很难找到任何不包含字符串的函数。

2个回答

有几种工具可以实现这一点。

国际开发协会

首先,IDA 具有识别编译器(和编译器属性)的机制。这不是主要功能,但可能提供您正在寻找的功能。 Options -> Compiler...将打开一个对话框,允许您手动设置编译器相关属性,以及为某些广泛使用的编译器使用预配置的默认值。

如果 IDA 识别出正在使用的编译器,则在打开对话框时将相应地填充这些值。

这是一个屏幕截图:

IDA 的编译器选项对话框

PEID

PEiD是最广为人知和使用最广泛的封隔器检测工具之一。它有多个插件和额外的可下载签名。它(与许多封隔器检测器一样)具有的功能之一是编译器识别。

PEID

轻松检测

Detect It Easy (AKA DiE) 是另一种非常先进的包装器检测,具有非常好的编译器检测签名和算法。虽然 PEiD 感觉有点被遗弃,但 DiE 仍然受到开发人员的关注。

死

语言 2000

与此处提到的其他工具不同,Language 2000是一个旧的(但功能强大的)工具,专为编译器检测而构建。我从来没有用过它,但它应该是好的。

语言 2000

其他封隔器探测器

大多数包装器检测工具至少具有某种编译器检测功能,因此我还包括了包装器检测工具列表

我认为西比尔可以帮助你。

它是一个功能占卜工具。这个想法是为了识别函数的副作用。这样,识别就独立于所使用的实现。