python - 将唯一指纹附加到文件

标签 python windows bash powershell jenkins

我有一组文件(编译软件),我想在分发之前为其提供唯一的指纹。这个想法是编写一个脚本:

  1. 随机生成字符序列
  2. 将字符序列附加到项目中的文件
  3. 将指纹与收件人一起存储在数据库中
  4. 将软件分发给收件人

指纹处理的要求是:

  • 指纹难以检测(即未存储在文件元数据或易于访问的区域中)
  • 指纹不会损坏序列添加到的文件的数据
  • 指纹可以添加到可执行文件或 dll 文件
  • 如果您知道往哪里看,就可以轻松读取指纹

是否有任何专为指纹文件而构建的开源解决方案?

最佳答案

在文件中存储信息而不破坏它并且以不易检测的方式是 steganography 中的一项练习。 ,而且相当困难。这个理论工具需要能够解析可执行结构,并正确修改它,根据需要编辑偏移量,或者检测填充咏叹调,或者基本上完成编译器正在做的一些工作。我怀疑它是否存在或是否可靠。

但是,有很多隐写工具可以通过巧妙地改变像素的颜色来存储图片中的信息,也许您可​​以将信息存储在 exe 文件或任何包含的资源的图标中。

另一种方法是在编译时隐藏数据,在可执行文件的性能非关键部分的优化级别中,以便编译器生成略有不同的代码,但保证行为保持一致。您现在可以使用文件哈希作为您的指纹。

另一种方法是在某个随机函数中创建未使用的字符串,将其标记为 volatile 或您选择的语言中的模拟,以防止编译器从您的程序中优化它并放置一些值得注意的内容其中,例如 REPLACE_ME。现在您可以打开该文件,搜索该字符串并将其替换为您生成的标识符。如果标识符和字符串的长度相同 - 您就不会损坏您的软件。

另一种更微妙的方法是在应用程序中为相同消息创建多个不同的措辞,并将它们换入和换出,作为区分版本的一种方式。如果您的编程语言存储以空结尾的字符串,那么这非常简单,只需使代码中的字符串与最长的改写一样长即可。如果您的语言存储字符串的长度,那么您也必须动态地重新计算它。

或者,如果您在代码中使用 Unicode 字符串,那么您可以在某些字符串中使用外观相似的字形,作为先前想法的更省力的版本。基本上你正在执行 homograph attack在你的弦上。或者,您可以使用不影响大多数语言且不可见的 unicode 控制字符(ZWJ、ZWNJ 等)。

通过比较软件的两个不同发行版,可以轻松发现所有方案,具有不同优化级别的发行版可以合理地视为软件的不同版本,但持续的攻击者仍然可以弄清楚。

关于python - 将唯一指纹附加到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51101594/

相关文章:

bash - 移动 "n"文件,每个文件在 ubuntu 中使用命令行或 bash 移动到特定文件夹

css - 如何使用shell脚本分别计算所有css、js和html页面的总大小?

python - numpy 数组的最快保存和加载选项

python - numpy.ndarray,其形状(高度、宽度、n)来自每个图像像素的 n 个值

python - 在 Ubuntu Linux 上运行一个 python 文件

windows - Windows 7 上可执行文件的 MySQLDump

windows - 如何防止Windows程序以:Command from opening a popup?进程启动

windows - 使用 "KexAlgorithms diffie-hellman-group1-sha1"没有解决 "no matching key exchange method found"错误

python - Tensorflow:使用沿第二轴的索引列表对 3D 张量进行切片

bash - glassfish死了并且不再重新开始