【问题标题】:Searching for my source code in a binary-only product [closed]在纯二进制产品中搜索我的源代码 [关闭]
【发布时间】:2010-09-25 06:52:36
【问题描述】:

假设我有一个在 GPL 下发布的项目,任何人都可以使用源代码。后来我发现了一个非常相似的产品,但是作为封闭源代码,仅由其他人分发二进制文件。

有什么好的方法可以发现他们在他们的产品中使用我的源代码吗?

如果解决方案是以某种方式对二进制文件进行逆向工程,是否有可能以某种方式自动化它?

编辑:澄清。寻找错误是一种选择,但不是确定的,特别是如果项目是一个库并且二进制文件添加了自己的 GUI,例如。我感兴趣的情况是代码被解除的情况并不明显。

【问题讨论】:

  • 选择了 lindig 的答案,因为这是我所追求的。显然它不是现成的解决方案,但我认为它最好地解决了这个问题。大多数其他答案都假设被盗代码几乎是按原样分发的,是相同的副本。也许我不清楚。继续发布更多选项!

标签: binary reverse-engineering gpl


【解决方案1】:

错误。

如果封闭源版本与您的项目共享大部分错误,则可能已“解除”。

您也可以尝试使用封闭源代码二进制文件的反编译版本来反编译您自己的二进制文件...尽管这可能不可靠。

【讨论】:

    【解决方案2】:

    显然,如果可疑的二进制文件不是stripped,您只需查找与您的代码同名的任何符号。

    【讨论】:

    • 遗憾的是,通常的仅二进制版本有符号和调试被剥离:/
    【解决方案3】:

    寻找软件胎记。这种方法试图建立基于二进制代码或动态行为的软件之间的链接。 Christian Collberg 是软件水印方面的专家,胎记就是由此而来。这一切都还在研究领域。

    【讨论】:

    【解决方案4】:

    在反编译和逆向工程二进制代码方面有大量工作。世界专家大概是Cristina Cifuentes。她在反编译方面做了很多工作。 写信给Alex Aiken 并询问他的Measure o f Software Similarity 工具是否可以适应二进制代码也会很有趣。

    【讨论】:

      【解决方案5】:

      一个明显的方法是搜索字符串。运行 unix 字符串工具并查看二进制文件是否包含代码中的任何文字字符串。主要是错误消息和消息框中的文本。

      【讨论】:

      • 也是在代码中放置许多错误消息的好理由! :)
      【解决方案6】:

      您可以尝试反汇编这两个程序并比较程序集,但如果他们使用不同的编译器,那么他们的程序可能会有细微的差异。有一些免费的反汇编器或调试器也可以在汇编中单步执行。

      除此之外,确实没有一种简单的方法可以找出这种事情。

      【讨论】:

        【解决方案7】:

        我能想到的最可靠的方式类似于牛津词典中的 'Esquivalience' 一词。
        只需在代码的某处添加一些具有唯一内容的二进制数组,不要忘记对其进行一些简单的使用,这样链接器就不会对其进行优化。您可能应该对它进行一些混淆,以便不经意的读者不会明显看出它是多余的。
        然后用十六进制编辑器打开编译好的二进制文件并查找它。

        【讨论】:

          【解决方案8】:

          为什么不用nm看符号表呢?

          $ nm a.out
          ...
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-03-12
            • 1970-01-01
            • 2017-06-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-24
            • 1970-01-01
            相关资源
            最近更新 更多