简单的二进制(可执行)自检的跨平台方式

标签 c security cross-platform

所以问题是:如何使用标准 C 库以跨平台方式实现简单的自检可执行文件?

在这里,我正在寻找技术,而不是特定的检查方法(如 CRC 或哈希码),但该技术可能包含更适合某些方法的元素(例如见下文)。

目的是提供方法来表明二进制文件可能因某些病毒的操作或传输失败而被破坏,并且可能无法按预期执行。它并不是为了防止故意篡改目标,尤其是有问题的可执行文件。

它应该是相当跨平台的。理想情况下,它应该仅使用标准 C 库,但如果不是通过无关的条件编译来实现,则能够在大多数使用的系统(Linux 变体、Android、Mac OS、Windows)上运行的方法也可能适用。

我当前的想法是简单地打开二进制文件以仅使用标准文件 I/O 进行读取,使用传递给程序的第一个参数(argv)(即启动的可执行文件的名称),并对独立的参数应用检查算法一些校验码的位置。 (简单的校验和通过提供一个未使用的位置来满足此要求,以使完整二进制评估的总和为零。也可以使用 CRC 算法,但在二进制的任意点插入合适的值并不是那么简单)

即使是这种技术could fail不过,尽管 argv[0] 中的信息可能足以始终可靠地找到可执行文件本身的二进制文件。

最佳答案

我认为您应该在代码中插入一个静态字符缓冲区,用于存储二进制文件的 CRC。您应该用一些已知的 MAGIC 序列包围您的缓冲区,以便您在扫描二进制文件时识别它......这样您就可以跳过二进制文件中的 CRC 数据,以便您的 CRC 检查不依赖于它。

关于简单的二进制(可执行)自检的跨平台方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17510945/

相关文章:

c - 带开关的字符串指针?

php - Ajax 登录和 javascript cookie,这安全吗?

C++ 跨平台开发(Windows 和 Mac OS)

c# - Xamarin PCL库和Sqlite数据存储

c - XMEGA AVR 中的按钮去抖动

c - C 中的服务器套接字,错误为 "\n"

java - 从 C 客户端向 Java 服务器发送字符串时出错

security - 浏览器中带有绿色条的域验证/级别 SSL 证书

security - HTTP 授权 header - 不记名 token 安全

cross-platform - 跨平台构建环境