平台建模的最新技术是什么?

逆向工程 代码建模
2021-06-28 01:18:34

当我们进行逆向工程时,我们有几个级别的模型。其中之一是指令语义模型,它告诉我们每条本机指令如何修改指令状态。我们正在那里取得进展。然而,另一个问题是平台语义的问题,这是一个更高层次的问题。

例如,用户空间 linux 程序的高级模型需要包含有关 mprotect 的信息,并且它可以改变某些代码区域的可见性。线程和回调语义也是一个平台建模问题,我们可以从它的头中发现一个程序入口点(这是另一种语义!但我们可能不会妥协),但其他入口点在程序中发布atexit、pthread_create 等的参数形式。

我们目前在以从业者理解的方式捕获这种高级平台信息方面的最大努力/最先进的技术是什么?机械/自动理解系统呢?我知道 IDA 有(或必须有)关于不同平台 API 的信息,它似乎知道当一个 immediate 是 pthread_create 的参数时,immediate 是一个指向代码的指针,应该这样对待。除此之外,我们还有什么?

2个回答

直接检测

在最低级别,您可以只拥有库的副本并检查它们是否被使用。

基于签名的检测

比这更高的级别是IDA FLIRT,它存储有关图书馆的足够信息以识别其用途。但它的主要好处是减少了磁盘使用量……值得注意的是,您可以为默认定义添加更多定义。

Hex-Rays在这里深入讨论了该技术

通用识别

Coverity 或Clang 静态分析器KLEE等工具更通用,更有可能包含用于编程习惯用法的模型。

我所知道的唯一接近开源的 IDA 是radare,它可能有一些库识别。也是radare主页我一直在寻找,因为我正在寻找像 IDA 这样的免费支持 SPARC 的东西,radare虽然我还没有时间试一试,但它看起来确实如此。

据我所知,REC 和 Boomerang 无法像 IDA 那样识别库,而是尝试反编译所有内容。BAP对二进制文件进行分析,并且源自 BitBlaze 项目的 Vine 组件,以下两个项目也是其中的一部分。

流量分析

这里的TEMU和Rudder看起来相当先进。并在执行时处理代码。TEMU 有助于将输入和输出与流程相关联。

还值得注意的是,Bitblaze 工具旨在提供在 IDA 中使用的跟踪,尽管它们可能会进行调整以用于其他用途。

脱离你提供的细节,TEMU听起来最接近你想要的......它允许你标记受污染的输入(内存位置、物理输入等......)并检测这些污点对执行的影响。如果您想试用 TEMU 并使用较新的 Linux 发行版(过去几年中大多数使用 GCC 4+ 的任何发行版),请按照此处说明进行操作

我不确定我是否理解这个问题,但是各种沙箱解决方案(Norman、Androguard)倾向于在系统上生成事件日志,我可以让您对平台及其状态有所了解。除此之外,我不知道有任何工具可以帮助您通过静态分析确定系统状态。我使用调试器在可能的情况下回答此类问题,否则使用手动静态分析。