一种面向关键软件二进制文件的特征码生成方法与流程

文档序号:14389743阅读:284来源:国知局
一种面向关键软件二进制文件的特征码生成方法与流程

本发明涉及一种面向关键软件二进制文件的特征码生成方法。属于计算机安全技术领域。



背景技术:

软件加载管理是属于gjb5000a-2008(《军用软件研制能力成熟度模型》)到gjb9001a-2001(《质量管理体系要求》)接续的工作;从适航体系来看,该问题属于d0-178c(机载系统和设备合格审定中的软件考虑)的一致性验证工作。安全关键软件,比如航空航天领域的关键软件,如果加载了错误的二进制文件,可能会造成机毁人亡等严重后果。软件加载过程管理的目的是为防止由于工作疏忽、作弊以及蓄意破坏等原因而加载错误的二进制文件。二进制文件的特征码相当于二进制文件的指纹,用来确定所加载的二进制文件是否正确,是软件加载管理的关键。

目前,二进制文件特征码的提取方法有三种:

第一种方法,选取用商用编程器的编译器得到的校验数的后几位作为二进制文件的特征码。其中,校验数一般是16至32位的一串16进制数,选取的特征码的位数不尽相同,比如有的单位是后四位,有的单位是后六位。然而该方法存在两个弊端,其一是由于不同的研制单位,甚至同一个研制单位不同的研制项目所使用的编程器的编译器并不一致,这就造成用来生成二进制文件特征码的工具不一致,因此难以做到统一管理;另一个弊端是,如果有人伪造和商用编程器的编译器相同特征码的二进制软件会造成信息泄露,后果不堪设想。

第二种方法是通过反编译二进制文件,从程序的结构特征提取特征码。然而,由于安全关键软件的硬件运行平台多种多样,编程机制也多种多样,很难对所有种类的二进制文件进行反编译,即使能够反编译,也很难保证质量的一致性和稳定性。

第三种方法是在通用计算领域广泛应用的,以md5码作为二进制文件的特征码。任何文件经过md5后,都可以得到一个32位的16进制数,称为md5码。通过比较md5码来判断是否是同样的一个文件。然而该方法存在安全漏洞。从理论上讲,世界上可能存在的文件有无数个,而md5码的编码空间是16的32次方是有限的,因此,必然有相同的文件,它们的md5码是一样的。据调研存在一种基于碰撞函数的软件,可以根据md5值得到一个和原文件一样大小,但是不同于原文件的二进制文件。如果直接以md5码作为二进制文件的特征码的话,显然这一漏洞可能被不法分子利用搞蓄意破坏。

针对目前我国航空航天等安全关键软件加载管理工作中,没有统一的二进制文件特征码生成方法,并由此造成的监管成本高,存在安全隐患等问题,本发明设计了一种新方法,该方法对二进制文件分两层进行三次求取md5码,并由这三个md5码生成一个六位16进制数作为二进制文件的特征码,该方法具有易于实现,同时又可以保证安全性的特点,可以有效的提高二进制文件加载管理的工作效率,保证其安全性。因此本发明提出一种面向关键软件二进制文件的特征码生成方法,可以克服现有方法的不足。



技术实现要素:

(1)目的:

本发明的目的是提供一种面向关键软件二进制文件的特征码生成方法,该方法具有易于实现,同时又可以保证安全性的特点,可以有效的提高二进制文件加载管理的工作效率,并确保其安全性。

(2)技术方案:

本发明提供一种面向关键软件二进制文件的特征码生成方法,以期通过求取二进制文件md5码得到一种二进制文件特征码,从而使得在提高二进制文件的安全性的同时,提高二进制文件加载管理的工作效率。

本发明提供一种面向关键软件二进制文件的特征码生成方法,该方法具体步骤如下:

步骤一:将目标二进制文件分割成两个子二进制文件,目标二进制文件的长度除以2得到的整数作为子二进制文件1的长度,目标二进制文件的长度减去子二进制文件1的长度作为子二进制文件2的长度,计算目标二进制文件的长度有许多的开源实现方法,这里不再赘述;

步骤二:分别对目标二进制文件和步骤一分割后得到的两个子二进制文件求取md5码,对二进制文件取32位小写的md5码有许多的开源实现方法,这里不再赘述,可得到三个二进制文件的md5码,即三个32位小写的16进制数;

步骤三:采取截取特定位置和特定位数的md5码的方法来缩短特征码,提高比对效率,假如采用得到的三个32位小写的16进制数,即96位小写的16进制数作为目标二进制文件的特征码的话,按照现有的密码学理论,虽然是无法被破解的,但二进制文件的特征码长达96位,会给人工比对带来很大的麻烦,实际上也没有必要如此复杂,因为,若三个16进制数各取1位,重复率为1/162,若三个16进制数各取2位,重复率为1/165,在一个系统中软件的数量远远达不到165,因此可以确定分别从步骤二中得到的3个md5码中截取特定位置的两位数,截取位置可以选择md5码的任意位置,3组两位数的组合也可以是排列组合的任意一种,为了方便,本发明规定截取二进制文件的md5码的位数为两位且截取位置为md5码的最后两位数,然后以“子二进制文件1-子二进制文件2-目标二进制文件”的顺序组合在一起,并通过分隔符“-”将前三个数和后三个数连接起来,最终得到目标二进制文件的特征码;

在步骤一中所述“将目标二进制文件分割成两个子二进制文件”的计算方法是:假设文件对象为file,文件从file.begin()开始,file.end()结尾,其大小可以由file.lenght()函数获得;将文件file分成file1和file2两个,其中file1从file.begin()开始到file.begin()+file.length()/2结尾,其大小由file1.lenght()函数获得;其中file2由file文件截取file1后得到,其大小由file.lenght()-file1.lenght()获得。

在步骤二中所述“分别对目标二进制文件和步骤一分割后得到的两个子二进制文件求取32位小写的md5码”的计算方法是:将目标二进制文件和两个子二进制文件以二进制的形式打开,用开源的实现方法对其进行md5码加密得到三个32位小写的md5码。

在步骤三中所述的“采取截取特定位置和特定位数的md5码的方法来缩短特征码”的计算方法是:为了方便,本发明规定分别截取三个md5码的两位数且截取位置为md5码的最后两位。

在步骤三中所述的“以“子二进制文件1-子二进制文件2-目标二进制文件”的顺序组合在一起,并通过分隔符“-”将前三个数和后三个数连接起来”的计算方法是:将子二进制文件1的md5码的最后两个数字和子二进制文件2的md5码的倒数第二个数字顺序排列成uvw的形式,将子二进制文件2的md5码的倒数第一个数字和目标二进制文件的md5码的最后两个数字顺序排列成xyz的形式,然后用分隔符“-”连接,形成uvw-xyz便于阅读的形式。

通过以上所述步骤,能得到目标二进制文件和由目标二进制文件分割的两个子二进制文件的md5码,并通过将截取的三个md5码的后两位数字,即6位小写的16进制数顺序组合,并通过分隔符“-”连接最终得到目标二进制文件的特征码,需要保证最后得到的特征码是来自于三个二进制文件的md5码。

(3)优点及功效:

本发明设计的一种面向关键软件二进制文件的特征码生成方法,该发明的优点是:通过目标二进制文件分割得到两个子二进制文件,运用md5方法得到目标二进制文件和两个子二进制文件的三个md5码,截取三个md5码的后两位数,为了便于阅读,通过分隔符“-”将前三个数和后三个数分隔,并按照“子二进制文件1-子二进制文件2-目标二进制文件”的顺序重新组合成一个6位小写的16进制数,并将生成的结果作为目标二进制文件的特征码。该方法具有简单明了,易于实现,同时又可以保证安全性的特点,采取截取特定位置和位数的md5码的方法来缩短特征码,可以提高比对效率,进而有效地提高二进制文件加载管理的工作效率,保证其安全性,为软件的一致性验证工作提供了有效且可靠的依据。因此本发明提出一种面向关键软件二进制文件的特征码生成方法,可以克服现有方法的不足。

附图说明

图1本发明所述方法流程图。

图2飞行控制软件的二进制形式1。

图3飞行控制软件的二进制形式2。

图4飞行控制软件的二进制形式3。

图5飞行控制软件的二进制形式4。

图6计算目标二进制文件的md5码。

图7计算子二进制文件1的md5码。

图8计算子二进制文件2的md5码。

图9飞行控制软件的特征码的示例图。

具体实施方式

下面结合附图和实施例,对本发明所述的一种面向关键软件二进制文件的特征码生成方法进行详细描述,本发明所述方法流程图如图1所示,其具体实施步骤如下:

步骤一:将目标二进制文件分割成两个子二进制文件,目标二进制文件的长度除以2得到的整数作为子二进制文件1的长度,目标二进制文件的长度减去子二进制文件1的长度作为子二进制文件2的长度,计算文件的长度有许多的开源实现方法,这里不再赘述;本实施例中以我国航空航天中安全关键软件之一的飞行控制软件fksetup.exe为例,将该飞行控制软件作为目标二进制文件,用winhex软件打开目标二进制文件fksetup.exe,观察offset的最后的值即可得到目标二进制文件的长度,如图5所示,方框所标记的16进制数对应的offset为40302280,即该文件的长度为40302280,且该目标二进制文件以如图2所示的圆圈所标记的位置开始,以如图5所示的方框所标记的位置结束;该目标二进制文件的子二进制文件1的长度为40302280除以2取整得20151140,如图3所示,圆圈所标记的16进制数对应的offset为20151140,且子二进制文件1以如图2所示的圆圈所标记的位置开始,以如图3所示的圆圈所标记的位置结束;该目标二进制文件的子二进制文件2的长度为40302280减去20151140得20151140,如图5所示的方框所标记的16进制数对应的offset为40302280,如图3所示的圆圈所标记的16进制数对应的offset为20151140,两个offset做差对应得到子二进制文件2的长度为20151140,且子二进制文件2以如图4所示的方框所标记的位置开始,以如图5所示的方框所标记的位置结束;

步骤二:分别对目标二进制文件和步骤一分割后得到的两个子二进制文件求取md5码,对二进制文件取md5码有许多的开源实现,这里不再赘述;本实施例中采用winhex软件中的tools栏中的computehash计算得到目标二进制文件和两个子二进制文件的32位小写md5码,如图6所示,点击图中的ok键,便可以得到目标二进制文件的md5码为88f8c474a3f924da19e114fa6cdc249e;采用winhex软件选中子二进制文件1,即用该软件中的edit栏中的defineblock定义起始位置0,结束位置为20151140,如图7所示,并用tools栏中的computehash,并按照图6所示的步骤,点击ok键,得到子二进制文件1的md5码为f7874772a1c5841883c0230c92d09ce6;采用winhex软件选中子二进制文件2,即采用该软件中的edit栏中的defineblock定义起始位置20151141,结束位置为40302280,如图8所示,并用tools栏中的computehash,并按照图6所示的步骤,点击ok键,得到子二进制文件2的md5码为edbaf67393f9f6a6047a4ac545f09f80,即得到三个32位,共96位小写的16进制数;

步骤三:采取截取特定位置和特定位数的md5码的方法来缩短特征码,提高比对效率,为了方便,本发明规定截取二进制文件的md5码的位数为两位且截取位置为md5码的最后两位数,然后以“子二进制文件1-子二进制文件2-目标二进制文件”的顺序组合在一起,并通过分隔符“-”将前三个数和后三个数连接起来,最终得到目标二进制文件的特征码;本实施例中分别从步骤二中得到的3个md5码中截取后2位16进制数,即分别为9e、e6和80,按照本步骤所述规则,如图9所示,6位特征码用分隔符“-”连接为e68-09e即为生成的目标二进制文件的特征码。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1