基于基本块签名和跳转关系的二进制文件比对技(5)

时间:2025-04-21

崔宝江,等: 基于基本块签名和跳转关系的二进制文件比对技术1355

fo r(i=1;i<=20;i++)i=1;

{printf("%12ld%12ld",f1,f2);while(i<=20)

if(i%2==0)printf("\n");{printf("%12ld%12ld",f1,f2);

f1=f1+f2;if(i%2==0)pr int f("\n");

f2=f1+f2;f1=f1+f2;

}f2=f1+f2;

i++;

}

图3 f ortest.cpp中的for循环代码和whiletest.cpp中的while代码

表2 针对f or-while替换、for循环中增加冗余代码的相似度比对结果

测试用例源码语法比对/%源码文本比对/%二进制文件比对/%

for-w hile替换14.2968.899.22 for循环中增加冗余代码5096.9100

Addcomm ent.cpp和addco mment2.cpp同样是具有相同功能的2个源码文件;不同之处在于, addcomm ent2.cpp在addco mment.cpp的for循环中增加了一行不影响文件功能的冗余代码,如图4 所示。采用源码比对工具CodeCom pare和二进制文件比对工具BinCompar e进行文件相似度测试,其测试结果如表2。

综上可知,与源码比对技术相比,针对for-w hile

fo r(i=0;i<5;i++)for(i=0;i<5;i++)

{pr intf("\n please input N o.%d scor e:\n",i);{printf("\n please input No.%d sco re:\n",i); printf("stuN o:");flo at a,b,c;

scanf("%s",stu[i].num);pr intf("stuN o:");

scanf("%s",stu[i].num);

图4 addcomment.cpp和addcomment2.cpp中的部分代码

替换以及在源码for循环中增加冗余代码等语义不变,而源代码表现形式变化的抄袭情况,二进制比对技术的相似度检测准确度更高。

2.2 BinCompare与二进制补丁比对工具比较

Patchdiff2和BinDiff2是常见的2种二进制补丁比对工具。其中,Patchdiff2主要采用指令循环冗余校验和块地址信息技术;BinDiff2主要采用基本块结构化签名技术。为了检测本文提出的基于基本块签名和基本块之间跳转关系的二进制文件同源性检测技术的优略性,下面把BinCpmpar e与Patchdiff2、BinDiff2等几个二进制补丁比对工具进行比对。

为了进行更广泛的比较,本文构建了针对源代码中语句顺序变换、变量名变换、变量顺序变换、参数顺序变换、参数名变换、变量类型变换、函数名变换等情况的测试用例;然后把每组测试用例编译生成二进制文件,用以上二进制文件比对的工具分别进行文件相似度的比对实验,测试结果如表3所示。

表3 针对不同类型的测试用例BinC ompare与

二进制补丁比对工具的相似度比对结果/%

测试用例Patchdiff2BinDiff2BinCo mpar e 参数顺序变换86.3695.65100

变量名变换86.7695.74100

变量顺序变换86.7695.7499.7

参数顺序变换86.7695.7499.5

参数名变换73.38736.18100

函数名变换86.7690.4399.7

变量类型变换87.1495.83100

for-w hile替换86.3695.6599.22 for循环中增加冗余代码86.3695.65100

由表3可知,与几个常用的二进制补丁比对工具比较,基于基本块签名和基本块之间跳转关系技术的BinCompare对上述测试用例进行二进制文件同源性比对得出的相似度准确性更高。

3 结 论

为了研究应用于软件抄袭检测的二进制文件同

基于基本块签名和跳转关系的二进制文件比对技(5).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219