2008-12-04 44 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 
...