刘玉琴,桂 婕,雷孝平
(1.北京印刷学院 绿色印刷包装产业技术研究院,北京102600;2.工业和信息化部软件与集成电路促进中心知识产权司法鉴定所,北京100038;3.中国科学技术信息研究所,北京100038)
鉴定科学ResearchPaper
.NET平台软件知识产权司法鉴定中的跨语言鉴定方法研究
刘玉琴1,2,桂 婕3,雷孝平3
(1.北京印刷学院 绿色印刷包装产业技术研究院,北京102600;2.工业和信息化部软件与集成电路促进中心知识产权司法鉴定所,北京100038;3.中国科学技术信息研究所,北京100038)
目的 为明确微软.NET Framework跨语言编程平台下不同计算机编程语言设计的软件之间是否可以进行相似性鉴定以及具体的鉴定方案。方法 分析了.NET Framework平台下各种编程语言的编译运行机制,应用代码转换工具对C#.NET和VB.NET源代码进行自动转换验证。结果 结果显示在无任何人工干预条件下,可实现同一软件源代码在不同编程语言间自由的、自动的转换。结论 .NET Framework平台下跨语言的源代码相似性鉴定、编译为中间语言的目标代码相似性鉴定以及加密或混淆技术处理过的目标代码相似性鉴定是必要和可行的。
.NET平台;跨语言鉴定;知识产权司法鉴定
随着微软公司跨语言平台.NET Framework(.NET框架)技术的日趋成熟,采用.NET平台下的C#.NET、VB.NET、C++.NET、J#.NET、F#.NET等计算机编程语言进行设计开发的软件产品大量涌现,随之引起的软件知识产权纠纷逐渐增多。由于.NET平台的跨语言、跨平台特性使得相关纠纷的司法鉴定工作遇到了一些新的技术问题。其中最为关键的问题之一是. NET平台下不同语言之间是否可以进行相似性鉴定,以及具体的鉴定方法等。
为明确.NET平台下不同语言之间是否可以进行相似性鉴定以及具体的鉴定方案。本文通过对.NET平台运行机制的分析,以实例来探究确认.NET平台下不同语言的软件之间进行相似性鉴定的必要性,并提出相应的鉴定方案。
我国学者对于软件知识产权司法鉴定的学术研究主要集中在两方面:一是软件知识产权司法鉴定的相关概念、原则、方法等理论层面的探讨。例如,1998年,韩小燕[1]对软件知识产权侵权现象进行分类总结。2005年,冯金成[2]从计算机司法鉴定角度阐述计算机犯罪的定义与司法鉴定内容。2005年,罗苏平[3]探讨软件源程序在知识产权司法鉴定中的重要意义。2008年,李维[4]提出软件著作权的鉴定原则和方法。二是集中在针对软件产品同一性或相似性鉴定技术层面的研究。例如,2005年,陈雪[5]通过对一起经最高人民法院民事庭指令再审的软件侵权纠纷案进行述评,认为软件相似性鉴定应根据实际情况,采用最有效的鉴定方法,而不应只限于在编码层进行鉴定。2007年,赵丙秀等[6]研究利用软件流程比对、功能点比对、界面比对、文件比对和安装过程比对,对提供二进制代码的计算机软件产品进行鉴定的方法。2008年,张益成[7]从鉴定实践中总结软件产品的鉴定技术和方法,重点介绍了EXE、OCX、DLL、LIB、FBL文件的同一性鉴定。2013年,陈小静等[8]结合计算机软件技术信息的特殊性,以目标代码、源代码探讨计算机软件技术秘密鉴定和相似性鉴定方法。2013年,刘惠萍等[9]结合具体案例,从技术角度研究Microsoft PowerPoint演示文稿的同一性鉴定方法。
就目前的研究来说,对于.NET Framework平台下的软件知识产权司法鉴定,并没有针对性的展开。
以主张著作权为由的软件相似性鉴定的法律依据主要是我国的《著作权法》和《计算机软件保护条例》。《计算机软件保护条例》第二条、第三条给出了计算机软件的相关定义:“计算机软件,是指计算机程序及其有关文档。计算机程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。同一计算机程序的源程序和目标程序为同一作品。文档,是指用来描述程序的内容、组成、设计、功能规格、开发情况、测试结果及使用方法的文字资料和图表等,如程序设计说明书、流程图、用户手册等”。《计算机软件保护条例》第七条明确了软件著作权保护的客体:“本条例对软件著作权的保护不延及开发软件所用的思想、处理过程、操作方法或者数学概念等。”
因此,以往基于计算机软件著作权保护的软件知识产权司法鉴定实践中,对于由不同语言设计开发的软件,一般不对其进行相似性比对。比如,司法鉴定实践中很少从著作权的角度对分别由编程语言C++和JAVA设计的软件进行相似性鉴定。然而,在微软公司跨语言平台.NET出现后,这种情况产生了一些变化。由于.NET的跨平台、跨语言特性,同一个基于.NET平台进行设计开发的软件可以使用两种以上的编程语言进行开发,甚至可以借助一些转换工具将一种语言的代码转换为另外一种语言,且这种转换可以自动完成。因此,在基于.NET平台进行设计开发的软件知识产权纠纷案例中,经常遇到被控侵权方提交鉴定的软件源代码与控告方提交的软件源代码所使用的计算机编程语言不同,但都是基于.NET平台下的编程语言,而且双方的软件的目标代码相同或相似程度较高。被控侵权方力图通过软件源代码的编程语言不同,主张两款软件不同,以此逃避侵权责任。但这并不符合“同一计算机程序的源程序和目标程序为同一作品”的规定。这为软件知识产权司法鉴定技术、鉴定方法提出了新的挑战。以下分别从.NET的运行机制和代码实例来说明这种情况下进行相似性鉴定的必要性。
3.1 .NET平台下各种语言的编译运行机制
.NET Framework是微软公司2002年推出的一种跨语言平台,它是以公共语言运行库(Common Language Runtime,CLR)为核心前提的。.NET平台下各种语言的执行需要经过两个编译过程(图1)。
第一个编译过程是把源代码编译为微软中间语言IL,第二个编译过程是CLR把IL编译为平台专用的代码。其中微软中间语言是一种低级语言,使用数字代码,而不是文本代码,语法很简单,可快速地转换为本地机器码,具有平台无关性、提高性能和语言的互操作性等优点。
图1 .NET的运行机制示意图
通过上面编译运行机制的分析可以看出,.NET平台下各种编程语言设计的软件产品,最终执行的都是微软中间语言构成的代码,从而为不同语言设计的软件产品进行相似性鉴定提供了技术上的理论依据。
3.2 不同语言软件间的自动转化实例
.NET平台下不仅同一个软件可以由多种语言混合编写[10],而且利用一些第三方软件厂商的工具,如Developer Fusion[11]、Coder Converter[12]可以实现同一软件在不同语言间自由的、自动的切换。以下源代码函数分别由C#.NET和VB.NET编写(图2)。直观上看,两个代码的表现形式差别较大,但本质上,第二段代码是由Coder Converter在第一段代码的基础上自动转化过来的,没有进行任何人工干预。两个代码均实现与数据库连接进行数据查询的功能。
图2 源代码函数
这两段代码在计算机编译执行过程中,首先转化为相同的微软中间语言代码(图3)。
图3 中间语言代码
同时,以上这段中间语言代码可以由转换工具转换为上面两段代码中的任意一种形式。
通过这个转换实例可以看出,对于.NET平台软件知识产权司法鉴定,如果认为两款软件是由不同语言编写而拒绝进行相似性鉴定的依据显然是不科学的。
4.1 跨语言的源代码相似性鉴定
基于.NET平台下各种语言编译运行机制的分析,对.NET平台下跨语言的源代码相似性鉴定,可以按照如下三个步骤进行:
(1)利用第三方的转换工具把不同语言的代码转化为同一语言。
(2)找出鉴定双方代码的对应关系,利用Beyond Compare对转化后的代码进行统计,统计双方代码中相同、不同和独有的代码行数,以代码的表现形式来判断相似性。
(3)如果第(2)步中发现双方的代码表现形式差异较大,还要人工的按照文件、类、函数去进一步解读代码,从代码的含义来判断相似性。
4.2 编译为中间语言的目标代码相似性鉴定
在没有原始源代码的情况,可以采用三种方式对编译为中间语言的目标代码进行相似性鉴定。
(1)查看编译后的代码文件的二进制格式或十六进制格式,利用Beyond Compare统计双方代码中相同、不同和独有的字节数,以二进制或十六进制的表现形式来判断相似性。
(2)利用第三方工具,如.NET Reflector[13],直接查看双方中间代码,然后利用Beyond Compare统计双方代码中相同、不同和独有的代码行数,以中间语言代码的表现形式来判断相似性。
(3)如应用第(1)(2)种方法发现双方的代码表现形式差异较大,还要继续采用第三方的工具,如. NET Reflector,将中间语言的目标码反编译成同一种语言的源代码,从代码的含义来判断相似性。由于中间语言非机器码,反编译的准确率高。
5.3 加密或混淆技术处理过的目标代码相似性鉴定
由于编译为中间代码的目标代码容易进行反编译,很多软件产品在发布的时候,进行了加密或混淆处理,以防止程序被反编译。.NET平台下的典型加密工具有Remotesoft Protector、Maxtocode、CliProtector、Reactor等。这种情况下很难对其目标代码的相似性做出肯定或否定的判断。但在加密或混淆的过程中,仍会保留一些加密前的痕迹。比如,文件名称、类名称、函数名称、GUID(全局唯一标识符,Globally U-nique Identifier)等。在鉴定实践中,要根据其采用的加密或混淆技术做具体分析,从细微处寻找进行深入鉴定的依据,以使鉴定双方提供更加直接、更容易进行鉴定的材料。
例如,采用Reactor加密过的.NET目标代码,某些情况下通过反编译工具.NET Reflector反编译后,虽然不能得到全部的源代码,但是能够体现代码组织结构的类文件名称,部分函数名称是可以获得的。特别是目标代码文件的GUID加密前后保持不变。如果被比对双方的代码文件名称、类文件名称、函数名称相同,即便无法获取每个函数具体的源代码,也可以说明双方软件代码在组织结构安排上相同,在实际开发中这种可能性非常小,据此可以促使鉴定双方提供未经加密过的原始源代码或目标代码。
GUID是一个16字节的整数,其生成过程中用到了计算机的以太网卡地址、纳秒级时间、芯片标示码等信息。如果两个目标代码文件的GUID相同,无论其是否经过加密处理,都意味着这两个目标代码对应的源代码存在一定的关联性。这是因为GUID是在源代码设计开发时生成的,无论是不同机器还是同一机器上重复的机率非常小[14]。因此,如果两个目标代码文件的GUID相同,说明双方源代码具有共同的原始来源。
随着.NET平台的不断发展与日趋成熟,其影响和使用范围越来越广泛,.NET平台间的跨语言转换日趋普遍,甚至出现了.NET平台语言向RUBBY、PYTHON、DELPHI等非.NET平台语言进行转换的需求和工具。这种情况下,要求计算机软件的司法鉴定方法要与时俱进,适应新技术的发展需求,更加谨慎细致地对待跨语言的软件知识产权司法鉴定问题。
[1]韩小燕.软件侵权现象及其司法鉴定浅析[J].软件世界,1998,(10):77.
[2]冯金成.论计算机司法鉴定[J].政法学刊,2005,22(6):102-104.
[3]罗苏平.对软件侵权鉴定中的源程序作用的认识[J].广东交通职业技术学院学报,2005,4(1):55-57.
[4]李维.浅析计算机软件著作权技术鉴定[J].科技与法律,2008,(6):61-64.
[5]陈雪.软件作品的著作权司法鉴定——以“公安基层管理系统”著作权纠纷案为例[J].华南师范大学学报(社会科学版),2005,(3):24-30.
[6]赵丙秀,王坚.软件知识产权鉴定方法的初步研究与探索[J].计算机时代,2007,(4):4-7.
[7]张益成.计算机软件产品的司法鉴定技术[J].2008,(7):16-18. [8]陈小静,黄少晖,梁永宏.浅析计算机软件技术信息的商业秘密鉴定[J].中国发明与专利,2013,(8):31-33.
[9]刘惠萍,罗文华.从知识产权侵害案件看Microsoft Power-Point演示文稿鉴定实践[J].中国司法鉴定,2013,(3):62-65.
[10][美]Simon Robinson,Christian Nage.C#高级编程[M].李铭,译.北京:清华大学出版社,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—),男,高级工程师,博士,主要从事数据挖掘、信息可视化、软件知识产权研究。
E-mail:liuyuqin2004@126.com。