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



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

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

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

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

我目前的想法是简单地打开二进制文件,只使用标准文件I/O进行读取,使用传递给程序的第一个参数(argv),即启动的可执行文件的名称,并对其应用检查算法,该算法与某些检查代码的位置无关。(简单校验和通过提供一个未使用的位置来满足这一要求,以使完整二进制值的总和为零。也可以使用CRC算法,但在二进制值的任意点插入合适的值并非易事)

尽管argv[0]中的信息可能足以可靠地找到可执行文件本身的二进制文件,但即使是这种技术也可能失败。

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

最新更新