劉玉琴,桂 婕,雷孝平
(1.北京印刷學(xué)院 綠色印刷包裝產(chǎn)業(yè)技術(shù)研究院,北京102600;2.工業(yè)和信息化部軟件與集成電路促進(jìn)中心知識(shí)產(chǎn)權(quán)司法鑒定所,北京100038;3.中國科學(xué)技術(shù)信息研究所,北京100038)
鑒定科學(xué)ResearchPaper
.NET平臺(tái)軟件知識(shí)產(chǎn)權(quán)司法鑒定中的跨語言鑒定方法研究
劉玉琴1,2,桂 婕3,雷孝平3
(1.北京印刷學(xué)院 綠色印刷包裝產(chǎn)業(yè)技術(shù)研究院,北京102600;2.工業(yè)和信息化部軟件與集成電路促進(jìn)中心知識(shí)產(chǎn)權(quán)司法鑒定所,北京100038;3.中國科學(xué)技術(shù)信息研究所,北京100038)
目的 為明確微軟.NET Framework跨語言編程平臺(tái)下不同計(jì)算機(jī)編程語言設(shè)計(jì)的軟件之間是否可以進(jìn)行相似性鑒定以及具體的鑒定方案。方法 分析了.NET Framework平臺(tái)下各種編程語言的編譯運(yùn)行機(jī)制,應(yīng)用代碼轉(zhuǎn)換工具對(duì)C#.NET和VB.NET源代碼進(jìn)行自動(dòng)轉(zhuǎn)換驗(yàn)證。結(jié)果 結(jié)果顯示在無任何人工干預(yù)條件下,可實(shí)現(xiàn)同一軟件源代碼在不同編程語言間自由的、自動(dòng)的轉(zhuǎn)換。結(jié)論 .NET Framework平臺(tái)下跨語言的源代碼相似性鑒定、編譯為中間語言的目標(biāo)代碼相似性鑒定以及加密或混淆技術(shù)處理過的目標(biāo)代碼相似性鑒定是必要和可行的。
.NET平臺(tái);跨語言鑒定;知識(shí)產(chǎn)權(quán)司法鑒定
隨著微軟公司跨語言平臺(tái).NET Framework(.NET框架)技術(shù)的日趨成熟,采用.NET平臺(tái)下的C#.NET、VB.NET、C++.NET、J#.NET、F#.NET等計(jì)算機(jī)編程語言進(jìn)行設(shè)計(jì)開發(fā)的軟件產(chǎn)品大量涌現(xiàn),隨之引起的軟件知識(shí)產(chǎn)權(quán)糾紛逐漸增多。由于.NET平臺(tái)的跨語言、跨平臺(tái)特性使得相關(guān)糾紛的司法鑒定工作遇到了一些新的技術(shù)問題。其中最為關(guān)鍵的問題之一是. NET平臺(tái)下不同語言之間是否可以進(jìn)行相似性鑒定,以及具體的鑒定方法等。
為明確.NET平臺(tái)下不同語言之間是否可以進(jìn)行相似性鑒定以及具體的鑒定方案。本文通過對(duì).NET平臺(tái)運(yùn)行機(jī)制的分析,以實(shí)例來探究確認(rèn).NET平臺(tái)下不同語言的軟件之間進(jìn)行相似性鑒定的必要性,并提出相應(yīng)的鑒定方案。
我國學(xué)者對(duì)于軟件知識(shí)產(chǎn)權(quán)司法鑒定的學(xué)術(shù)研究主要集中在兩方面:一是軟件知識(shí)產(chǎn)權(quán)司法鑒定的相關(guān)概念、原則、方法等理論層面的探討。例如,1998年,韓小燕[1]對(duì)軟件知識(shí)產(chǎn)權(quán)侵權(quán)現(xiàn)象進(jìn)行分類總結(jié)。2005年,馮金成[2]從計(jì)算機(jī)司法鑒定角度闡述計(jì)算機(jī)犯罪的定義與司法鑒定內(nèi)容。2005年,羅蘇平[3]探討軟件源程序在知識(shí)產(chǎn)權(quán)司法鑒定中的重要意義。2008年,李維[4]提出軟件著作權(quán)的鑒定原則和方法。二是集中在針對(duì)軟件產(chǎn)品同一性或相似性鑒定技術(shù)層面的研究。例如,2005年,陳雪[5]通過對(duì)一起經(jīng)最高人民法院民事庭指令再審的軟件侵權(quán)糾紛案進(jìn)行述評(píng),認(rèn)為軟件相似性鑒定應(yīng)根據(jù)實(shí)際情況,采用最有效的鑒定方法,而不應(yīng)只限于在編碼層進(jìn)行鑒定。2007年,趙丙秀等[6]研究利用軟件流程比對(duì)、功能點(diǎn)比對(duì)、界面比對(duì)、文件比對(duì)和安裝過程比對(duì),對(duì)提供二進(jìn)制代碼的計(jì)算機(jī)軟件產(chǎn)品進(jìn)行鑒定的方法。2008年,張益成[7]從鑒定實(shí)踐中總結(jié)軟件產(chǎn)品的鑒定技術(shù)和方法,重點(diǎn)介紹了EXE、OCX、DLL、LIB、FBL文件的同一性鑒定。2013年,陳小靜等[8]結(jié)合計(jì)算機(jī)軟件技術(shù)信息的特殊性,以目標(biāo)代碼、源代碼探討計(jì)算機(jī)軟件技術(shù)秘密鑒定和相似性鑒定方法。2013年,劉惠萍等[9]結(jié)合具體案例,從技術(shù)角度研究Microsoft PowerPoint演示文稿的同一性鑒定方法。
就目前的研究來說,對(duì)于.NET Framework平臺(tái)下的軟件知識(shí)產(chǎn)權(quán)司法鑒定,并沒有針對(duì)性的展開。
以主張著作權(quán)為由的軟件相似性鑒定的法律依據(jù)主要是我國的《著作權(quán)法》和《計(jì)算機(jī)軟件保護(hù)條例》?!队?jì)算機(jī)軟件保護(hù)條例》第二條、第三條給出了計(jì)算機(jī)軟件的相關(guān)定義:“計(jì)算機(jī)軟件,是指計(jì)算機(jī)程序及其有關(guān)文檔。計(jì)算機(jī)程序,是指為了得到某種結(jié)果而可以由計(jì)算機(jī)等具有信息處理能力的裝置執(zhí)行的代碼化指令序列,或者可以被自動(dòng)轉(zhuǎn)換成代碼化指令序列的符號(hào)化指令序列或者符號(hào)化語句序列。同一計(jì)算機(jī)程序的源程序和目標(biāo)程序?yàn)橥蛔髌?。文檔,是指用來描述程序的內(nèi)容、組成、設(shè)計(jì)、功能規(guī)格、開發(fā)情況、測(cè)試結(jié)果及使用方法的文字資料和圖表等,如程序設(shè)計(jì)說明書、流程圖、用戶手冊(cè)等”?!队?jì)算機(jī)軟件保護(hù)條例》第七條明確了軟件著作權(quán)保護(hù)的客體:“本條例對(duì)軟件著作權(quán)的保護(hù)不延及開發(fā)軟件所用的思想、處理過程、操作方法或者數(shù)學(xué)概念等?!?/p>
因此,以往基于計(jì)算機(jī)軟件著作權(quán)保護(hù)的軟件知識(shí)產(chǎn)權(quán)司法鑒定實(shí)踐中,對(duì)于由不同語言設(shè)計(jì)開發(fā)的軟件,一般不對(duì)其進(jìn)行相似性比對(duì)。比如,司法鑒定實(shí)踐中很少從著作權(quán)的角度對(duì)分別由編程語言C++和JAVA設(shè)計(jì)的軟件進(jìn)行相似性鑒定。然而,在微軟公司跨語言平臺(tái).NET出現(xiàn)后,這種情況產(chǎn)生了一些變化。由于.NET的跨平臺(tái)、跨語言特性,同一個(gè)基于.NET平臺(tái)進(jìn)行設(shè)計(jì)開發(fā)的軟件可以使用兩種以上的編程語言進(jìn)行開發(fā),甚至可以借助一些轉(zhuǎn)換工具將一種語言的代碼轉(zhuǎn)換為另外一種語言,且這種轉(zhuǎn)換可以自動(dòng)完成。因此,在基于.NET平臺(tái)進(jìn)行設(shè)計(jì)開發(fā)的軟件知識(shí)產(chǎn)權(quán)糾紛案例中,經(jīng)常遇到被控侵權(quán)方提交鑒定的軟件源代碼與控告方提交的軟件源代碼所使用的計(jì)算機(jī)編程語言不同,但都是基于.NET平臺(tái)下的編程語言,而且雙方的軟件的目標(biāo)代碼相同或相似程度較高。被控侵權(quán)方力圖通過軟件源代碼的編程語言不同,主張兩款軟件不同,以此逃避侵權(quán)責(zé)任。但這并不符合“同一計(jì)算機(jī)程序的源程序和目標(biāo)程序?yàn)橥蛔髌贰钡囊?guī)定。這為軟件知識(shí)產(chǎn)權(quán)司法鑒定技術(shù)、鑒定方法提出了新的挑戰(zhàn)。以下分別從.NET的運(yùn)行機(jī)制和代碼實(shí)例來說明這種情況下進(jìn)行相似性鑒定的必要性。
3.1 .NET平臺(tái)下各種語言的編譯運(yùn)行機(jī)制
.NET Framework是微軟公司2002年推出的一種跨語言平臺(tái),它是以公共語言運(yùn)行庫(Common Language Runtime,CLR)為核心前提的。.NET平臺(tái)下各種語言的執(zhí)行需要經(jīng)過兩個(gè)編譯過程(圖1)。
第一個(gè)編譯過程是把源代碼編譯為微軟中間語言IL,第二個(gè)編譯過程是CLR把IL編譯為平臺(tái)專用的代碼。其中微軟中間語言是一種低級(jí)語言,使用數(shù)字代碼,而不是文本代碼,語法很簡單,可快速地轉(zhuǎn)換為本地機(jī)器碼,具有平臺(tái)無關(guān)性、提高性能和語言的互操作性等優(yōu)點(diǎn)。
圖1 .NET的運(yùn)行機(jī)制示意圖
通過上面編譯運(yùn)行機(jī)制的分析可以看出,.NET平臺(tái)下各種編程語言設(shè)計(jì)的軟件產(chǎn)品,最終執(zhí)行的都是微軟中間語言構(gòu)成的代碼,從而為不同語言設(shè)計(jì)的軟件產(chǎn)品進(jìn)行相似性鑒定提供了技術(shù)上的理論依據(jù)。
3.2 不同語言軟件間的自動(dòng)轉(zhuǎn)化實(shí)例
.NET平臺(tái)下不僅同一個(gè)軟件可以由多種語言混合編寫[10],而且利用一些第三方軟件廠商的工具,如Developer Fusion[11]、Coder Converter[12]可以實(shí)現(xiàn)同一軟件在不同語言間自由的、自動(dòng)的切換。以下源代碼函數(shù)分別由C#.NET和VB.NET編寫(圖2)。直觀上看,兩個(gè)代碼的表現(xiàn)形式差別較大,但本質(zhì)上,第二段代碼是由Coder Converter在第一段代碼的基礎(chǔ)上自動(dòng)轉(zhuǎn)化過來的,沒有進(jìn)行任何人工干預(yù)。兩個(gè)代碼均實(shí)現(xiàn)與數(shù)據(jù)庫連接進(jìn)行數(shù)據(jù)查詢的功能。
圖2 源代碼函數(shù)
這兩段代碼在計(jì)算機(jī)編譯執(zhí)行過程中,首先轉(zhuǎn)化為相同的微軟中間語言代碼(圖3)。
圖3 中間語言代碼
同時(shí),以上這段中間語言代碼可以由轉(zhuǎn)換工具轉(zhuǎn)換為上面兩段代碼中的任意一種形式。
通過這個(gè)轉(zhuǎn)換實(shí)例可以看出,對(duì)于.NET平臺(tái)軟件知識(shí)產(chǎn)權(quán)司法鑒定,如果認(rèn)為兩款軟件是由不同語言編寫而拒絕進(jìn)行相似性鑒定的依據(jù)顯然是不科學(xué)的。
4.1 跨語言的源代碼相似性鑒定
基于.NET平臺(tái)下各種語言編譯運(yùn)行機(jī)制的分析,對(duì).NET平臺(tái)下跨語言的源代碼相似性鑒定,可以按照如下三個(gè)步驟進(jìn)行:
(1)利用第三方的轉(zhuǎn)換工具把不同語言的代碼轉(zhuǎn)化為同一語言。
(2)找出鑒定雙方代碼的對(duì)應(yīng)關(guān)系,利用Beyond Compare對(duì)轉(zhuǎn)化后的代碼進(jìn)行統(tǒng)計(jì),統(tǒng)計(jì)雙方代碼中相同、不同和獨(dú)有的代碼行數(shù),以代碼的表現(xiàn)形式來判斷相似性。
(3)如果第(2)步中發(fā)現(xiàn)雙方的代碼表現(xiàn)形式差異較大,還要人工的按照文件、類、函數(shù)去進(jìn)一步解讀代碼,從代碼的含義來判斷相似性。
4.2 編譯為中間語言的目標(biāo)代碼相似性鑒定
在沒有原始源代碼的情況,可以采用三種方式對(duì)編譯為中間語言的目標(biāo)代碼進(jìn)行相似性鑒定。
(1)查看編譯后的代碼文件的二進(jìn)制格式或十六進(jìn)制格式,利用Beyond Compare統(tǒng)計(jì)雙方代碼中相同、不同和獨(dú)有的字節(jié)數(shù),以二進(jìn)制或十六進(jìn)制的表現(xiàn)形式來判斷相似性。
(2)利用第三方工具,如.NET Reflector[13],直接查看雙方中間代碼,然后利用Beyond Compare統(tǒng)計(jì)雙方代碼中相同、不同和獨(dú)有的代碼行數(shù),以中間語言代碼的表現(xiàn)形式來判斷相似性。
(3)如應(yīng)用第(1)(2)種方法發(fā)現(xiàn)雙方的代碼表現(xiàn)形式差異較大,還要繼續(xù)采用第三方的工具,如. NET Reflector,將中間語言的目標(biāo)碼反編譯成同一種語言的源代碼,從代碼的含義來判斷相似性。由于中間語言非機(jī)器碼,反編譯的準(zhǔn)確率高。
5.3 加密或混淆技術(shù)處理過的目標(biāo)代碼相似性鑒定
由于編譯為中間代碼的目標(biāo)代碼容易進(jìn)行反編譯,很多軟件產(chǎn)品在發(fā)布的時(shí)候,進(jìn)行了加密或混淆處理,以防止程序被反編譯。.NET平臺(tái)下的典型加密工具有Remotesoft Protector、Maxtocode、CliProtector、Reactor等。這種情況下很難對(duì)其目標(biāo)代碼的相似性做出肯定或否定的判斷。但在加密或混淆的過程中,仍會(huì)保留一些加密前的痕跡。比如,文件名稱、類名稱、函數(shù)名稱、GUID(全局唯一標(biāo)識(shí)符,Globally U-nique Identifier)等。在鑒定實(shí)踐中,要根據(jù)其采用的加密或混淆技術(shù)做具體分析,從細(xì)微處尋找進(jìn)行深入鑒定的依據(jù),以使鑒定雙方提供更加直接、更容易進(jìn)行鑒定的材料。
例如,采用Reactor加密過的.NET目標(biāo)代碼,某些情況下通過反編譯工具.NET Reflector反編譯后,雖然不能得到全部的源代碼,但是能夠體現(xiàn)代碼組織結(jié)構(gòu)的類文件名稱,部分函數(shù)名稱是可以獲得的。特別是目標(biāo)代碼文件的GUID加密前后保持不變。如果被比對(duì)雙方的代碼文件名稱、類文件名稱、函數(shù)名稱相同,即便無法獲取每個(gè)函數(shù)具體的源代碼,也可以說明雙方軟件代碼在組織結(jié)構(gòu)安排上相同,在實(shí)際開發(fā)中這種可能性非常小,據(jù)此可以促使鑒定雙方提供未經(jīng)加密過的原始源代碼或目標(biāo)代碼。
GUID是一個(gè)16字節(jié)的整數(shù),其生成過程中用到了計(jì)算機(jī)的以太網(wǎng)卡地址、納秒級(jí)時(shí)間、芯片標(biāo)示碼等信息。如果兩個(gè)目標(biāo)代碼文件的GUID相同,無論其是否經(jīng)過加密處理,都意味著這兩個(gè)目標(biāo)代碼對(duì)應(yīng)的源代碼存在一定的關(guān)聯(lián)性。這是因?yàn)镚UID是在源代碼設(shè)計(jì)開發(fā)時(shí)生成的,無論是不同機(jī)器還是同一機(jī)器上重復(fù)的機(jī)率非常小[14]。因此,如果兩個(gè)目標(biāo)代碼文件的GUID相同,說明雙方源代碼具有共同的原始來源。
隨著.NET平臺(tái)的不斷發(fā)展與日趨成熟,其影響和使用范圍越來越廣泛,.NET平臺(tái)間的跨語言轉(zhuǎn)換日趨普遍,甚至出現(xiàn)了.NET平臺(tái)語言向RUBBY、PYTHON、DELPHI等非.NET平臺(tái)語言進(jìn)行轉(zhuǎn)換的需求和工具。這種情況下,要求計(jì)算機(jī)軟件的司法鑒定方法要與時(shí)俱進(jìn),適應(yīng)新技術(shù)的發(fā)展需求,更加謹(jǐn)慎細(xì)致地對(duì)待跨語言的軟件知識(shí)產(chǎn)權(quán)司法鑒定問題。
[1]韓小燕.軟件侵權(quán)現(xiàn)象及其司法鑒定淺析[J].軟件世界,1998,(10):77.
[2]馮金成.論計(jì)算機(jī)司法鑒定[J].政法學(xué)刊,2005,22(6):102-104.
[3]羅蘇平.對(duì)軟件侵權(quán)鑒定中的源程序作用的認(rèn)識(shí)[J].廣東交通職業(yè)技術(shù)學(xué)院學(xué)報(bào),2005,4(1):55-57.
[4]李維.淺析計(jì)算機(jī)軟件著作權(quán)技術(shù)鑒定[J].科技與法律,2008,(6):61-64.
[5]陳雪.軟件作品的著作權(quán)司法鑒定——以“公安基層管理系統(tǒng)”著作權(quán)糾紛案為例[J].華南師范大學(xué)學(xué)報(bào)(社會(huì)科學(xué)版),2005,(3):24-30.
[6]趙丙秀,王堅(jiān).軟件知識(shí)產(chǎn)權(quán)鑒定方法的初步研究與探索[J].計(jì)算機(jī)時(shí)代,2007,(4):4-7.
[7]張益成.計(jì)算機(jī)軟件產(chǎn)品的司法鑒定技術(shù)[J].2008,(7):16-18. [8]陳小靜,黃少暉,梁永宏.淺析計(jì)算機(jī)軟件技術(shù)信息的商業(yè)秘密鑒定[J].中國發(fā)明與專利,2013,(8):31-33.
[9]劉惠萍,羅文華.從知識(shí)產(chǎn)權(quán)侵害案件看Microsoft Power-Point演示文稿鑒定實(shí)踐[J].中國司法鑒定,2013,(3):62-65.
[10][美]Simon Robinson,Christian Nage.C#高級(jí)編程[M].李銘,譯.北京:清華大學(xué)出版社,2005:2-7.
[11]Developer Fusion[EB/OL].(2008-10-13)[2014-12-15]. http://www.developerfusion.com/tools/convert/csharp-to-vb/
[12]Code Converter[EB/OL].(2014-01-01)[2014-12-15].http:// www.codechanger.com/.
[13].NET Reflector[EB/OL].(1999-01-01)[2014-12-15].http:// www.reflector.net/.
[14]Guid Structure[EB/OL].(2012-08-15)[2014-12-15].https:// msdn.microsoft.com/en-us/library/system.guid.aspx.
(本文編輯:盧啟萌)
Cross Language Examination Method for.NET Framework Software in Intellectual Property Forensics
LIU Yu-qin1,2,GUI Jie3,LEI Xiao-ping3
(1.Academic of Printing and Packaging Industrial Technology,Beijing Institute of Graphic Communication, Beijing 102600,China;2.Intellectual Property Expertise Center of Judicature,Ministry of Industry and Information Technology Software and Integrated CircuitPromotionCenter,Beijing 100038,China;3.Institute of Scientific and Technical Information of China,Beijing 100038,China)
Objective To clarify whether it is feasible to identify similarities between different programming languages within the.NET framework.Method The operation mechanism of the.NET framework was analysed;an example was given to explore and confirm the necessity of similarity identification between different languages within the.NET framework. Results The same software source code could be converted freely and automatically between different programming languages without any human intervention.Conclusion Similarity identification of cross-language source code,target language compiled to intermediate language and object-code which is processed by encryption or obfuscation technology are necessary and feasible within the.NET framework.
.NET platform;cross language examination;forensic expertise of intellectual property
DF794;D923.4
A
10.3969/j.issn.1671-2072.2017.01.007
1671-2072-(2017)01-0056-04
2016-02-01
劉玉琴(1979—),男,高級(jí)工程師,博士,主要從事數(shù)據(jù)挖掘、信息可視化、軟件知識(shí)產(chǎn)權(quán)研究。
E-mail:liuyuqin2004@126.com。