首页 商业秘密侵权调查 软件著作权侵权 不正当竞争 尽职调查 法律百科 联系方式
QQ联系
电话联系
手机联系
QQ联系
电话联系
手机联系

目标代码司法鉴定的技术探讨

发布时间:2020-07-16 09:12
所属栏目:法律学堂
浏览次数:

[编者按]  知识产权鉴定,到目前为此还没有一个行之有效的标准,特别是面临计算机软件呈现出的新的问题,需要鉴定人不断探索。在遵循多数专业认可的鉴定方法的前提下,依据不同案件的特殊性,需要有针对性地解决鉴定中遇到的技术难题。本文就是一个很好地探索。希望大家踊跃投稿,一起参与谈论。
 
前言
Delphi是传奇软件公司Borland的一个伟大产品,第一版发布于1995年2月14日,由Anders Hejlsberg(微软.NET首席构架师,C#语言之父)主导开发,在九十年代和2000年初期是一款广泛使用的集成开发工具。当时在我国有大量的公司采用Delphi,开发了成千上万的各类软件。笔者2000年初大学实习在某公司就使用过Delphi,很可惜后来在竞争中失利。随后被Borland公司出售给了EMBARCADERO公司,虽然目前Delphi依然在推出新版本,但国内还采用Delphi进行开发的公司极少了。
由于最近接手了一个软件同一性的比对鉴定案件,样本与检材就是采用Delphi 7.0开发的。这是笔者最近十年接触到的唯一的,使用Delphi开发的商业软件。
一、初步分析
Delphi 7.0开发的软件最终会被编译成二进制的目标代码,类似于C/C++,因此常规的反编译分析方法对其也是适用的,笔者再此就不再赘述。但Delphi 有其特别的地方,它的程序源代码包含一种后缀为dfm的所谓窗体模块,这个模块非常特殊,是可以利用针对性的反编译工具从目标代码中提取,并且基本和原始代码中的内容一致。
二、工具选用
目前在网上搜索,针对Delphi 7.0的反编译工具,多数都是推荐DeDe。但这个工具过于老旧了,最新的由国内高手修改过的版本DarkDe4也是2004年的产品了,对于反编译Delphi 7.0开发的软件完全不适用,会漏掉部分代码甚至直接报错无法工作。
经过笔者寻找与对比,推荐使用IDR (InteractiveDelphi Reconstructor)作为反编译工具。目前最新版本可以支持从Delphi 2.0到XE4,一共15个版本。笔者在案件鉴定使用后,没有发现有遗漏的窗体模块,也没有错误发生,反编译效果良好。
三、dfm窗体模块源代码分析
经过IDR反编译以后窗体模块源代码会以.dfm后缀,文本文件格式保存,因此可以采用WinMerge 、UltraCompare等软件进行文字比较。
在进行文本比对的时候,还必须辅以人工分析。因为这些文本本质上还是程序源代码,是对各种控件对象的定义,以及对象的各种属性描述。
例1:
检材中有如下代码片段:
  object ButtonYes:TButton
    Left = 272
    Top = 160
    Width = 65
    Height = 30
    Caption =#30830#23450
    TabOrder = 0
  End
样本中有如下代码片段:
  object ButtonOK:TButton
    Left = 200
    Top = 150
    Width = 75
    Height = 25
    Caption =#30830#23450
    TabOrder = 0
  end
仅就这两个代码片段而言,笔者认为它们是实质相似的。因为这两个代码片段的核心功能是定义两个TButton类的对象,仅仅是名字不同,摆放的窗体上的位置(Left、Top)不同,宽度与高度(Width、Height)不同。一个人改名了,长高了,吃胖了,他就成另外一个人了?
那么,如果检材中代码是如下片段呢?
 例2:  
object ButtonOK: TLabel
    Left = 200
    Top = 150
    Width = 75
    Height = 25
    Caption =#30830#23450
  End
虽然第一行只有5个字母的差异,但它们却绝对是不同的。因为这是完全不同的两个类,双胞胎再像他们也是两个不同的人。
另外,需要指出IDR有窗体模拟显示功能,可惜由于多数情况会缺少部分第三方控件类显示不完全,但也不失为一种非常直观的鉴定辅助功能。
四、dfm窗体模块源代码中的字符编码
在前面举例的代码片段中,都有一行Caption = #30830#23450,这是对象的标题属性,等于符号后井号开头的数字,则是汉字“确定”二字的Unicode编码。使用JavaScript能非常容易的对这个编码进行还原。
新建一个html网页文件,将如下代码:
例3:
<html>
<body>
<script type="text/javascript">
document.write(String.fromCharCode(30830,23450))
</script>
</body>
</html>
录入,保存后用任意浏览器打开该文件即可。代码中的数字可按需修改。
五、dfm窗体模块源代码中的图片文件
在窗体模块源代码中有时会见到类似如下代码
例4:
Picture.Data = {
         FFD8FFE000104A46 ……
          6CAD3B2A4B3C6AA7……
          ……
          ……75FFFD9}
大括号中的代码一般会非常多,这里进行了省略。这是什么呢?这个是Delphi将图片文件按字节依次用十六进制文本模式转换后的结果。
一般来说这个属性后还会有对应的文件名属性:
Name = 1.jpg
只需以该文件名,将上述十六进制文本依次转换为二进制保存即可还原该图片。这可以自己编程实现也可以找一些现成的十六进制编辑工具来做。
  
     
 本文作者:孙朝伟
注:YESIPR商业秘密网转载,如有侵权,请联系本站!
 

本文链接:https://www.yesipr.com/baike/ask/0GA42020.html
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除!谢谢!
标签: