如何通过静态分析从二进制文件中收集系统调用?

     2023-02-23     94

关键词:

【中文标题】如何通过静态分析从二进制文件中收集系统调用?【英文标题】:How to collect system calls from a binary with static analysis? 【发布时间】:2018-06-01 08:08:14 【问题描述】:

我想通过静态分析获取给定二进制文件 (x86_64) 中使用的系统调用列表。我尝试了 strace,但它不能保证它是一个完整的列表,因为在执行期间可能不会调用某些系统调用。

【问题讨论】:

外部链接表不够吗? 我真的不知道外部链接表是什么,但我一定会调查的。谢谢! 符号表(AKA 链接表或依赖表)是您的程序使用的另一个二进制模块中的符号列表。当操作系统加载您的可执行文件时,它还通过加载其他模块并连接它们来解决这些依赖关系。它的工作方式各不相同,但所有 COFF/PE 文件都包含此表。 我明白了,它可能只包含在二进制文件中调用的函数,但我正在寻找的是特定的系统调用。但是获取函数列表也有帮助,因为我可以分析这些函数并找到被调用的系统调用。我想知道是否有更好更快的方法来实现这一目标。 删除执行期间未调用的系统调用需要解决停机问题。 【参考方案1】:

对于 C/C++,您可以尝试CppDepend 来检测与外部库和系统调用的所有依赖关系。但是,您必须分析源代码而不是二进制文件。

【讨论】:

【参考方案2】:

在静态分析中,假设二进制文件没有被混淆,有几个工具可以提供对二进制文件的深入了解。最常用的是IDA。在单独分析二进制文件时,几个编译选项在挑战静态分析技术方面发挥着重要作用,即动态与静态链接、剥离二进制文件、优化选项等。

查找系统调用的一种方法是使用IDAPython API 创建一个脚本,以便根据此处X86 Assembly/Interfacing with Linux 和此处Linux Syscall Reference 的描述查找系统调用。 IDAPython 提供了一个“足够好”的 API 来查看每个基本块中的指令来推断正在调用的系统调用。

【讨论】:

【参考方案3】:

使用 NDepend 工具,您可以通过代码查询来做到这一点,但仅限于 .NET 程序集:

from x in ThirdParty.CodeElements
select new  x, callers = 
  x.IsMethod ? x.AsMethod.MethodsCallingMe.Cast<ICodeElement>() : 
  x.IsType   ? x.AsType.TypesUsingMe.Cast<ICodeElement>() : new ICodeElement[0] 

【讨论】:

其实,我关注的是像 C 或 C++ 这样的编译程序。【参考方案4】:

我认为较早的答案是解决此问题的最简单方法。一种选择是使用支持二进制文件并导航控制流图的静态分析工具。如果在死代码中调用它们,这可能允许您排除某些函数,但它也会复杂得多。 GrammaTech CodeSonar 是一个支持二进制文件的商业工具,或许可以在这里提供帮助。

【讨论】:

C - 从二进制文件中读取位

】C-从二进制文件中读取位【英文标题】:C-readingbitsfrombinaryfile【发布时间】:2021-09-0705:54:54【问题描述】:我看到了熟悉的问题,但没有任何东西可以帮助我解决问题。假设我有一个二进制文件。我想收集每3个写入位(在我们... 查看详情

使用 c++ 时从二进制文件中读取 int 不正确

...文件非常大(即20+Gb)并且需要很多小时来解析。我试图通过在c++中实现 查看详情

如何从二进制文件中删除 HomeKit API

】如何从二进制文件中删除HomeKitAPI【英文标题】:HowtoremovetheHomeKitAPIfromwithinyourbinary【发布时间】:2019-11-0716:49:39【问题描述】:我在解决中心收到了来自苹果的这条拒绝消息:指南2.5.1-性能-软件要求您的应用以未经批准的方... 查看详情

如何从二进制文件中获取应用程序的版本号?

】如何从二进制文件中获取应用程序的版本号?【英文标题】:Howtogettheversionnumberofanapplicationfromthebinaryfile?【发布时间】:2017-08-0411:01:27【问题描述】:我正在Linux上为一些嵌入式设备构建Qt/C+应用程序,我想从二进制ELF文件中... 查看详情

如何从二进制文件中删除开始换行符或开始新行?

】如何从二进制文件中删除开始换行符或开始新行?【英文标题】:Howtoremovestartingnewlinesorthestartingnewfromabinaryfile?【发布时间】:2020-05-0419:46:30【问题描述】:我看到有关于删除尾随换行符的讨论。HowcanIdeleteanewlineifitisthelastcharac... 查看详情

如何从二进制文件安装 memcached 并包含在 c 文件中

】如何从二进制文件安装memcached并包含在c文件中【英文标题】:Howtoinstallmemcachedfrombinariesandincludeincfile【发布时间】:2019-05-3001:37:14【问题描述】:我正在尝试在ubuntu16.04上安装memcached。我需要手动安装它,因为我想修改文件。... 查看详情

如何使用sort c ++从二进制文件中对结构进行排序

】如何使用sortc++从二进制文件中对结构进行排序【英文标题】:Howtosortastructfrombinaryfilewithsortc++【发布时间】:2021-12-1608:52:04【问题描述】:编译器报错:Expression:invalidoperator#include<iostream>#include<fstream>#include<algorithm>... 查看详情

在python中如何从二进制文件中读取信息

参考技术A你是指读入二进制文件吧?可以使用numpy.fromfile(),也可以使用open(filename,'rb'),其中的'b'就是二进制的意思,然后使用文件类型的read方法,读取一些字节,再用struct.unpack()方法来解析二进制。第一种方法是... 查看详情

python - 使用结构从二进制文件中解析数据

...9-2409:39:16【问题描述】:我有一个保存游戏文件,我试图通过使用十六进制偏移读取文件来解析所有字符属性。从纯文本开始,我能够正确提取所有字符串,但我在解析我正在使用的二进制部分时遇到问题。我很确定我正在读取... 查看详情

如何从二进制文件中读取块并使用 Python 或 Perl 解包提取结构?

】如何从二进制文件中读取块并使用Python或Perl解包提取结构?【英文标题】:HowcanIreadablockfromabinaryfileandextractstructsusingunpackusingPythonorPerl?【发布时间】:2012-06-2822:26:36【问题描述】:我有一个二进制文件,它有4KB的标头信息,... 查看详情

在 MFC 中从二进制文件加载图像

...。但是现在目标图像资源存储在数据库(SQLite)中。那么如何直接使用(避免存储临时文件)从MFC中的db中检索到的二进制数据?【问题讨论】:查看thisquestion的第一个答案【参考方案1】 查看详情

从二进制文件读取时将大端转换为小端

...发布时间】:2011-04-1822:40:05【问题描述】:我一直在寻找如何将大端转换为小端。但是我没有找到任何可以解决我问题的好方法。似乎有很多方法可以进行这种转换。无论如何,下面的代码在大端系统中工作正常。但是我应该如... 查看详情

在 Node.js 和 Mongoose 中从二进制文件重新创建图像

...的二进制文件,还有一个GET请求返回该图像。但我不知道如何使用该响应,它是一个数字数组,不知道如何 查看详情

使用 ifstream 从二进制文件中读取 4 个字节

...二进制文件,因此每4个字节都是一个浮点数。我不确定如何以每四个字节存储为浮点数的方式进行读取,这样我就可以用它做任何我需要的事情。这是我的代码:intmain()floati;std::ifstreaminFil 查看详情

从二进制文件中读取矩阵

】从二进制文件中读取矩阵【英文标题】:Readamatrixfromabinaryfile【发布时间】:2013-08-1218:03:47【问题描述】:我正在尝试从二进制文件(256x256x2)中读取两个矩阵,但如果不迭代256x256x2次就无法做到,这需要太长时间。现在我只想... 查看详情

在 Swift 中从二进制文件中读取整数

】在Swift中从二进制文件中读取整数【英文标题】:ReadintegersfrombinaryfileinSwift【发布时间】:2019-11-2516:50:25【问题描述】:我有一个代表旧打孔卡的二进制文件。该文件有以下数据:Function(unsignedint8min:0,max:+255),VerticalMovement(signedi... 查看详情

用python从二进制文件中读取32位带符号的ieee 754浮点?

...有被任何东西隔开,只是一个接一个地出现,直到EOF。我如何从这个文件中读取并将它们正确 查看详情

Dask 从二进制文件中读取数据

】Dask从二进制文件中读取数据【英文标题】:DaskReadDatafromBinaryFile【发布时间】:2018-06-2513:55:59【问题描述】:我正在尝试在python中实现k-means聚类算法的核心处理版本。我从这个git项目K-MeanParallel...Dask...中了解了dask我使用相同... 查看详情