为什么当我们有反编译器时,需要检测二进制文件?

问题描述 投票:0回答:1

我正在研究二进制检测技术,我发现许多论文声称当源代码不可用时,二进制检测是必需的。

虽然也许我们无法获得原始源代码,但可以从反编译器中获取语义上等效的代码(例如RetDec),在我看来,这足以完成以前由二进制工具完成的许多任务,例如软件故障隔离。有时我们甚至不必将二进制文件反编译为源代码-LLVM IR足以用于许多代码检测和分析。而且性能可能会更好,因为此后我们仍然在中端进行了优化。

我的猜测是(1)反编译器无法很好地恢复代码以执行大多数二进制检测任务,或者(2)反编译器只能解码一小部分二进制文件,或者(3)反编译器恢复大库需要很长时间,而二进制检测仅需要很短时间。

我的猜测之一正确吗?这是什么事实?

编辑:在许多二进制检测任务中,我主要关注内存地址隔离,这通常是通过屏蔽地址或在程序集中设置保护区来完成的。只是很好奇,如果我们可以将二进制文件反编译为这种表示形式,为什么不在LLVM IR级别中添加一些检查代码。

compilation llvm instrumentation decompiler
1个回答
0
投票

[基本上,问题在于反编译器“不完整”,因为它们无法处理所有可能的二进制文件。然后,对于反编译器和二进制工具,也存在确定二进制文件中的什么是代码以及数据是什么的问题-通常这是不确定的,您只想检测代码,而不更改数据。

使用二进制工具,您可以更轻松地逐步处理此问题,仅使用“工具”来对您知道的代码进行工具化,在“工具”中执行可能会使已知代码中断并进行更多的处理(或当被认为是代码的情况下,作为数据访问,请“撤消”用于访问的工具。

与所有内容一样,在性能上也要取舍-最极端的手段是在提取信息的同时使用仿真器执行代码,但是这样做的成本很高。通过插入断点或插入代码进行部分检测的成本较低,但不完整。反编译和重新编译可能会降低运行时成本,但会增加前期成本。

© www.soinside.com 2019 - 2024. All rights reserved.