软件目标代码同一性司法鉴定方法概述
首先,进行目标代码预处理。如果目标代码进行了加壳/加密,首先要对目标代码进行脱壳处理。由于加壳技术手段多种多样,所以必须了解目何种技术才能有效地进行脱壳处理。如果目标代码经过特殊具转化,那么还要对目标代码进行还原。例如,在嵌入式软件开发中,由源代码编译生成的目标代码,经过特殊的工具转化后烧录到芯片中。那么在对芯片中提取的目标代码进行同一性鉴定时,就要进行相应的转化操乍。还有在特殊的情况下,通过技术手段读取的嵌入在芯片中的目标代码是多个目标代码的混合体,提取后进行同一性比对,应进行各部分的拆分。
其次,进行目标代码的二进制比对,比对采用Beyond Compare。二进制代码相同,目标代码具有同一性;二进制代码不完全相同,但相同部分占整体代码的比例较高,达到90%以上,且不同代码集中在代码文件的头部或尾:,这种情况目标代码差异不显著,—一般认为目标代码具有同一性。
以二进制进行代码比对时,通过计算双方目标代码中相同字节占总字节的比例来判断目标代码是否具有同一性。图最后,如果目标代码二进制内容相同或相同的字节比例较高,可认为目标代码具有同一性。如果目标代码二进制具有明显的差异,并不能直接含足目标代码的同一性,应结合软件的编译运行环境进行分析判断。这是因为相同的源代码在不同的操作系统上进行编译,或者在不同的编译器下进行编译,都可能会产生不同的二进制内容。因此,在二进制代码具有明显差异的情况下,应结合编译运行环境进行分析,适当采用反编译的技术手段获取反编译代码进行比对。
需要指出的是,不同计算机语言反编译的技术、工具及反编译得到的代码,可读性差异较大。采用C/C++语言编写的目标代码能够反编译为汇编语言,可读性高于二进制代码;但与原始源代码相比,可读性仍然较低。采用JAVA/C婀吾言编写的目标代码反编译,可以得到与原始源代码完全相同或高度相似的代码,可读性较高。然而,反编译也是有条件的,当目标代码进行加密或加壳处理,反编译难度增加,甚至无法反编译。这时,要结合加密技术做具体技术处理。