假设我有一个我在GPL下发布的项目,任何人都可以使用这些项目。后来我发现了一个非常相似的产品,但作为封闭源,只有其他人分发二进制。
有没有一种好方法可以找出他们在产品中使用我的源代码?
如果解决方案是以某种方式对二进制文件进行逆向工程,是否有可能以某种方式自动化它?
编辑:澄清。 bug搜索是一种选择,但不是决定性的,特别是如果项目是一个库并且二进制文件已经添加了自己的GUI,例如。我感兴趣的情况是当代码被解除时并不明显。答案 0 :(得分:5)
错误。
如果关闭的源代码版本与您的项目共享大部分错误,那么可能会“解除”。
你也可以尝试用封闭源二进制文件的反编译版本反编译自己的二进制文件......虽然这可能不可靠。
答案 1 :(得分:3)
显然,如果怀疑二进制文件不是stripped
,您只需查找与您的代码名称相同的任何符号。
答案 2 :(得分:2)
在反编译和逆向工程二进制代码方面有大量工作。世界专家可能是Cristina Cifuentes。她在反编译方面做了很多。 写入Alex Aiken并询问他的Measure o f Software Similarity工具是否可以适应二进制代码也很有意思。
答案 3 :(得分:2)
一种显而易见的方法是搜索字符串。运行unix字符串工具,看看二进制文件是否包含代码中的任何文字字符串。主要是错误消息和消息框中的文本。
答案 4 :(得分:2)
寻找软件胎记。此方法尝试在基于二进制代码或动态行为的软件之间建立链接。 Christian Collberg是软件水印专家,从中衍生出胎记。这仍然在研究领域。
答案 5 :(得分:1)
您可以尝试反汇编这两个程序并比较程序集,但如果它们使用不同的编译器,那么它们的程序可能会有微小的差异。有一些免费的反汇编程序或调试程序也可以在程序集中逐步完成。
除此之外,确实没有一种简单的方法可以找到那种东西。
答案 6 :(得分:0)
我能想到的最可靠的方式与牛津字典中的'Esquivalience'字相似 只需在代码中的某处添加一些带有唯一内容的二进制数组,并且不要忘记对其进行简单的使用,以便链接器不会对其进行优化。你可能应该对它进行一些模糊处理,以便随意的读者不会明白它是多余的 然后用十六进制编辑器打开已编译的二进制文件并查找它。
答案 7 :(得分:0)
为什么不使用nm查看符号表?
$ nm a.out
...