2008-12-04 52 views
0

假设我有一个项目,我已经在GPL下发布了,并且任何人都可以使用这些源代码。后来我发现了一个非常相似的产品,但是作为封闭源代码,只能由其他人分发。在二进制产品中搜索我的源代码

有没有一种很好的方法来发现他们在他们的产品中使用我的源代码?

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

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

+0

林迪格的答案被选中,因为这是我以后的事情。显然它还没有准备好解决方案,但我认为它最好地解决了这个问题。大多数其他答案都假设被盗代码几乎是按原样分发的,是相同的副本。也许我不清楚。继续发布更多选项! – Tuminoid 2008-12-12 06:42:46

回答

2

寻找软件胎记。该方法试图建立基于二进制代码或动态行为的软件之间的链接。 Christian Collberg是软件水印方面的专家,从中推导出胎记。这一切仍在研究领域。

+0

lindig发送了一封私信给我,并附上他们论文的链接,我认为它也可以在这里分享: http://www.st.cs.uni-sb.de/birthmarking/schuler-ase -2007.pdf – Tuminoid 2008-12-08 10:14:03

5

错误。

如果封闭源码版本与您的项目共享大部分漏洞,则可能会“解除”。

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

1

您可以尝试反汇编这两个程序并比较程序集,但如果他们使用了不同的编译器,那么他们的程序可能会有细微的差异。有几个免费的反汇编程序或一个调试程序也可以通过组装。

除此之外,真的不是一个简单的方法来找出这样的事情。

3

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

+0

不幸的是,通常的二进制版本只有符号和调试剥离:/ – Tuminoid 2008-12-04 09:06:40

2

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

+0

也是一个很好的理由把许多错误信息放在代码中! :) – 2008-12-04 10:52:33

0

我能想到的最确切的方式与牛津字典中的单词'Esquivalience'相似。
只需在代码的某处添加一些带有唯一内容的二进制数组,不要忘记对其进行一些简单的使用,这样链接器就不会优化它。你可能应该对它进行一些混淆处理,这样对于偶然的读者来说,这是多余的。
然后用hex编辑器打开编译后的二进制文件并查找它。

0

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

$ nm a.out 
...