图2 清除RAM操作语句
基于上述的分析,进一步进行实验和比对。
第一种正向编译比对。使用Keil uVision4软件,打开原告源代码工程目录,使用调试功能,选中“Generate Assembler SRC File”,即生成汇编代码(图3),执行后将生成的汇编代码与被告汇编源代码进行比对,比对结果为:
两个程序均包含11个功能相同的函数,且在main函数中均调用了五个功能相同的函数,调用逻辑相同,因此两个程序整体结构相同。两个程序的11个函数中的汇编语句顺序,以及每条语句的操作码完全相同,部分操作数的变量命名不同但变量值相同。如两个程序中的寄存器初始化函数,其中汇编语句的操作码比对见图4,而进一步对其中相应操作数的变量命名进行比对分析,仍然存在对应关系,如LoVBUS_ Ctrl BIT 090H.4与P1.4,09H对应P1 DATA 090H。
图3 设置输出汇编代码
第二种逆向工程比对。通过IDA6.6反汇编工具,将原告产品代码hex文件反汇编生成汇编代码,将反汇编获得的汇编代码与被告源代码进行比对,比对结果相同,即两个程序均包含11个功能相同的函数,且在main函数中均调用了五个功能相同的函数,调用逻辑相同,因此两个程序整体结构相同。两个程
序的11个函数中的汇编语句顺序,以及每条语句的操作码完全相同,部分操作数的变量命名不同但变量值相同。
而笔者在网上到一个个人编写的针对单片机的反编译工具,将原告产品目标代码反编译,能生成与被告源代码更为接近的汇编代码,即连操作数的变量命名都几乎一致,由于其软件的可靠性问题不再详述。
综上所述,经过验证,无论是将目标代码反汇编获得的
图4 汇编语句的比对
最终,基于对上述目标代码和源代码的双重论证分析,形成一致的意见,认为原被告的软件目标代码相同,原被告的源代码虽然是不同编程语言编写的,但被告的源代码与C 语言源代码通过工具输出成汇编语言代码或者是目标代码通过工具反汇编输出的汇编代码实质性相同,且存在工具自动生成的痕迹。因此原被告软件实质性相同。
4 结 语
本案由于涉及的是单片机软件,较为简单,不具有广泛意义。但是此案件也说明,相同的目标代码来源于形式上不同的源代码是可能的,但是这种形式上不同的源代码本质上是相同的。那么实践中到底
会不会存在本质都不相同的源代码目标代码却相同的情况,只能说这种情况或许存在,但应是小概率事件,而作为技术鉴定,每个案件都不尽相同,鉴定人员在实践中,还是要以科学的态度对待每一个案件,本着中立客观以及科学严谨的态度进行鉴定,抽丝剥茧论证清楚案件背后的技术事实。由此,也提供了一个鉴定思路,软件在进行相似性比对时也要进行分类,例如C与汇编、目标代微软开发平台下的VB源代码与C#源代码之间,这些源代码语言之间本身存在转换关系,在鉴定过程中,可把两种语言进行转换成同一种语言进行比对。
参考文献
[1]北京市高级人民法院.北京高院侵害著作权案件审理指南[EB/OL].(2018-04-20)[2019-02-14]./Contents/ Channel_3585/2018/0423/991783/content_991783.htm.
c语言中文网汇编语言[2]李维朝.计算机软件著作权侵权程序鉴定问题分析[D].南京:南京大学,2011:142.
李夫光.计算机软件著作权侵权行为的认定[D].长春:吉林大学法学院,2015:362.
[3]刘玉琴,桂婕,雷孝平..NET平台软件知识产权司法鉴定中的跨语言鉴定方法研究[J].中国司法鉴定,2017(1):56-59.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论