CN101470620B - Pe文件源代码一致性的判定方法及装置 - Google Patents

Pe文件源代码一致性的判定方法及装置 Download PDF

Info

Publication number
CN101470620B
CN101470620B CN 200710033035 CN200710033035A CN101470620B CN 101470620 B CN101470620 B CN 101470620B CN 200710033035 CN200710033035 CN 200710033035 CN 200710033035 A CN200710033035 A CN 200710033035A CN 101470620 B CN101470620 B CN 101470620B
Authority
CN
China
Prior art keywords
section
file
information
resource
content
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN 200710033035
Other languages
English (en)
Other versions
CN101470620A (zh
Inventor
张康宗
王钊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhuhai Kingsoft Software Co Ltd
Original Assignee
Zhuhai Kingsoft Software Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhuhai Kingsoft Software Co Ltd filed Critical Zhuhai Kingsoft Software Co Ltd
Priority to CN 200710033035 priority Critical patent/CN101470620B/zh
Publication of CN101470620A publication Critical patent/CN101470620A/zh
Application granted granted Critical
Publication of CN101470620B publication Critical patent/CN101470620B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明公开了一种PE文件源代码一致性的判定方法及装置,通过对PE文件的公开结构进行分析,当各待分析PE文件所包含的段的数目相同、包含的关键段的内容相同时,即可判定各待分析PE文件是基于相同的源代码,这种PE文件源代码一致性的判定方法及装置,不依赖于原始源代码的内容,可以不访问源代码库,保证了源代码库的保密安全性。

Description

PE文件源代码一致性的判定方法及装置
技术领域
本发明涉及一种PE文件源代码一致性的判定方法及装置。
背景技术
在软件开发的过程中,开发人员会周期性或者不定期地对代码库中的源代码进行编译,而随着dailybuild(日常编译)技术的引入,产品可时刻不停地进行编译,从而产生大量的PE文件,由于编译时嵌入了一些与编译时间、编译器版本等相关的信息,这些信息被编译进入PE文件内部,导致即使是基于相同源代码的PE文件,多次编译以后的二进制文件对比也不尽相同,产品版本号也不停地发生变化,此外,在添加数字签名技术以后,数字签名机制及hash机制也会造成对PE文件的二进制格式基础上的修改。虽然可以通过自动化测试技术进行一些技术上的测试保障,测试人员还是需要确认在编译过程中有哪些模块进行了源代码级别的变更,以便于测试人员确定测试重点,此外,对于软件版本发布人员而言,需要确认测试通过的版本与当前准备发布的版本是不是基于相同的源代码,如果是基于相同的源代码,则可以进行发布。
在现有技术中,在判断两个PE文件是否基于相同的源代码时,通常是对比两次编译时两个PE文件所对应的所有的源代码文件,判断这些源代码的内容是否相同,若源代码相同,则是基于相同的源代码,这种判定方式,要访问生成PE文件的所有源代码,需要较高的源代码库的权限,甚至会威胁到源代码库的保密安全。
发明内容
本发明的目的在于提供一种基于PE文件,不需访问源代码库,即可判定PE文件内容是否基于相同的源代码的方法及装置,即PE文件源代码一致性的判定方法及装置,可以不影响源代码库的安全性。
为达到上述目的,本发明采用以下技术方案:
一种PE文件源代码一致性的判定方法,包括步骤:
步骤1:判断各PE文件所包含的段的数目是否相同,若相同,进入步骤2,若不相同,直接判定各所述PE文件是基于不同的源代码;
步骤2:枚举各所述PE文件所包含的段,判断当前枚举段是否包含调试信息,若包含,进入步骤3,若不包含,进入步骤4;
步骤3:判断各所述PE文件的当前枚举段的调试信息中除了第一非必要信息之外的信息是否相同,若相同,进入步骤4,若不相同,直接判定各所述PE文件是基于不同的源代码,所述第一非必要信息包括时间戳信息;
步骤4:判断当前枚举段是否为关键段,若是,进入步骤5,若否,返回所述步骤2对下一个段进行枚举和判断;
步骤5:判断各所述PE文件的该关键段的内容是否相同,若相同,则返回所述步骤2对下一个段进行枚举和判断,若不相同,直接判定各所述PE文件是基于不同的源代码;
在对各所述PE文件的段枚举和判定完成后,若各所述PE文件所包含的段的数目相同、调试信息相同且各关键段的内容相同,则判定各所述PE文件是基于相同的源代码。
一种PE文件源代码一致性的判定装置,包括:
段数目判别模块,用于判断各PE文件所包含的段的数目是否相同,若不相同,则比较结果处理模块判定各所述PE文件是基于不同的源代码;
段枚举模块,用于当所述段数目判别模块判断结果为相同时,对各所述PE文件所包含的段进行枚举;
调试信息判别模块,用于判断所述段枚举模块的当前枚举段是否包含调试信息,在包含时,判断调试信息中除了第一非必要信息之外的信息是否相同,若不相同,则所述比较结果处理模块判定各所述PE文件是基于不同的源代码,所述第一非必要信息包括时间戳信息;
关键段判别模块,用于判断所述段枚举模块所枚举的当前枚举段是否为关键段,若不是关键段,则不进行判断,若是关键段,则判断各关键段是否相同,若不相同,则所述比较结果处理模块判定各所述PE文件是基于不同的源代码;
比较结果处理模块,用于根据所述段数目判别模块、所述段枚举模块、所述调试信息判别模块、及所述关键段判别模块的判别结果,判断各所述PE文件是否基于相同的源代码,当各所述PE文件的段枚举完毕,所述段数目判别模块判定结果为相同、所述调试信息判别模块的判定结果为相同、且所述关键段判别模块的判定结果为相同时,所述比较结果处理模块判定各所述PE文件是基于相同的源代码。
根据本发明的PE文件源代码一致性的判定方法及其装置,其可以根据PE文件的公开结构,获得PE文件所包含的段的数目及类型,对于来源于相同的源代码的PE文件,其包含的段的数目相同,且所包含的关键段的内容也相同,即,当所对比的各待分析PE文件所包含的段的数目相同,且所包含的各关键段的内容也相同时,即可确定各待分析PE文件是基于相同的源代码,本发明的侦测方式不需要依赖于PE文件所对应的原始的源代码,操作方便,且不会影响源代码库的安全性。
附图说明
图1是本发明PE文件源代码一致性的判定方法的实施例一的流程示意图;
图2是本发明PE文件源代码一致性的判定方法的实施例二的流程示意图;
图3是本发明PE文件源代码一致性的判定装置的较佳实施例的结构示意图。
具体实施方式
本发明的PE文件源代码一致性的判定方法,可以对两个及两个以上的PE文件是不是基于相同的源代码进行判定。
根据PE文件的公开结构(通常是线性的数据流),可以获得PE文件所包含的段的数目及类型,对于由相同的源代码所生成的PE文件,其所包含的段的数目必须相同,因为段数目的制定需要修改源代码的内容,从而,当检测出各PE文件所包含的段的数目不相同时,即可直接判定各PE文件是来源于不同的源代码;此外,对于相同的源代码,即使其编译多次,其某些段的内容都是不会发生变化的,称之为关键段,通常情况下,这些段的名称是确定的,例如:
.text段,这个段为代码段,其所包含的内容是指令代码,如果这个段的内容发生了变化,其所对应的源代码也一定是被修改过,即,如果是基于相同的源代码,各PE文件所包含的该.text段必然包含相同的内容;
.data段,这个段为初始化数据段,包括了源代码编译时被初始化的全局和静态变量,因此,如果这个段的内容发生了变化,那么,源代码也必然被修改过;
.idata段,这个段相当于一个导入表,包含了外来模块的函数以及数据信息,因此,如果这个段的内容发生了变化,则必然对其所对应的源代码进行了修改。
基于此,本发明的PE文件源代码一致性的判定方法,包括以下步骤:
判断各PE文件所包含的段的数目是否相同;
若是,枚举所述各PE文件所包含的段,并判断所述各PE文件所具有的关键段的内容是否相同,若相同,则判定所述各PE文件内容是基于相同的源代码,若不相同,则判定所述各PE文件内容是基于不同的源代码;
若否,则判定所述各PE文件基于不同的源代码。
根据本发明的PE文件源代码一致性的判定方法,可以不需要依赖于PE文件所对应的源代码的内容,可直接根据PE文件的公开结构,对各待分析PE文件内容是不是基于相同的源代码进行判断,当检测出各PE文件所包含的段的数目不相同时,即可直接判定各PE文件是来源于不同的源代码;当各PE文件所包含的段的数目相同且所包含的各关键段的内容相同时,即可以判定各PE文件是基于相同的源代码,从而,应用本发明的判定方式,不需要依赖于原始的源代码内容,即可对PE文件的源代码的一致性进行判定,可以不影响源代码的安全性,操作便捷。
当判断了PE文件是否基于相同的源代码时,即可进行具体应用时的下一步应用操作过程,比如,当判定PE文件是基于不同的源代码时,可以对PE文件重新进行测试,当判定PE文件是基于相同的源代码时,则可以对确定的PE文件施行自动版本发布,或者做软件版本管理,或者是其他的应用操作过程,根据具体应用需要及环境的不同可以有所不同。
此外,由于PE文件中还包含有调试信息,而对于来自于相同源代码的PE文件,其各自所包含的调试信息中除了第一非必要信息之外的其他信息也必要相同,该第一非必要信息包括时间戳信息,根据编译器类型及编译时的控制策略的不同,调试信息可以位于关键段也可以位于非关键段,通常情况下,该调试信息可位于非关键段。当调试信息位于关键段时,可采用上述本发明的方法进行判断,即当各PE文件所包含的段的数目相同且所包含的关键段的内容相同时,所述各PE文件是基于相同的源代码,而当调试信息位于非关键段时,则还要对各PE文件所包含的调试信息是否相同进行判定。
故此,本发明的PE文件源代码一致性的判定方法,在判断各PE文件所具有的关键段的内容是否相同之前,还可以包括步骤:
检测当前枚举段是否包含调试信息;
若是,判断调试信息中除了第一非必要信息之外的其他信息是否相同,若不相同,则判定所述各PE文件内容是基于不同的源代码,若相同,则判断所述当前枚举段是否为关键段,所述第一非必要信息包括时间戳信息;
若否,则判断所述当前枚举段是否为关键段。
根据本发明的这种PE文件源代码一致性的判定方法,当无法确定调试信息是位于关键段还是位于非关键段时,或者是已经确定调试信息是位于非关键段时,则可以在已判定各PE文件的段的数目相同的情况下,可首先判定当前枚举段是否包含调试信息,若是,则首先判断各PE文件的调试信息中除了第一非必要信息之外的其他信息是否相同,若相同,则继续对关键段进行判定,若不同,则可直接判定各PE文件是基于不同的源代码,分析判断速度较快,节省了时间。
此外,在软件开发过程中,根据具体开发环境的需要、以及具体功能实现的不同,开发人员可能根据需要定义一些自定义段,在各PE文件是来源于相同源代码的情况下,其所包含的自定义段的数量和内容也必然相同。因此,本发明的PE文件源代码一致性的判定方法,还可以包括:
当所述各PE文件具有自定义段时,判断所述各PE文件的自定义段的数量和内容是否相同;
若不相同,则判定所述各PE文件内容是基于不同的源代码;
若相同,且所述各PE文件所包含的段的数目相同以及所包含的关键段的内容相同,则判定所述各PE文件是基于相同的源代码。
从而,若PE文件中包含有自定义段,或者无法确定PE文件中是否包含自定义段时,在对PE文件源代码的一致性进行判断时,还需判定各PE文件的自定义段是否相同,当各PE文件的自定义段的数量和/或内容不同时,则可直接判定各PE文件内容是基于不同的源代码,当各PE文件的自定义段的数量和内容相同时,则可以结合关键段的判定结果进行综合判断。
其中,对自定义段的分析判断过程可以是在任意时刻进行,即,可以在对关键段进行判别之前进行,也可以是在对关键段进行判别之后进行,还可以是在对调试信息进行判别的之前或者之后进行,根据需要的不同以及具体判别环境的不同可以有所不同。
此外,由于关键段可以是资源段,也可以是非资源段,而资源段必然是关键段,故而在对关键段进行判断时,可以将关键段分为资源段与非资源段来区别对待,即:
若关键段为资源段,例如.rsrc段,由于资源段包含了模块的全部资源数据,例如图片信息、位图信息、图表信息、波形信息以及版本信息等信息,而这些信息中,会包含一些即使源代码不发生变化、根据编译次数或者编译环境的不同会发生改变的第二非必要信息,比如版本信息,在使用相同的源代码的情况下,根据编译次数的不同,可以产生不同的版本信息,而图片信息、位图信息、图表信息等信息,则在基于相同源代码的情况下,即使编译多次也不会发生改变,因此,在对资源段进行比较时,可不考虑该第二非必要信息,即,可以对资源段所包含的资源信息进行遍历搜索,只要除了该第二非必要信息之外的其他信息相同,则可以判定当前枚举的关键段为相同,而当除了该第二非必要信息的其他任意一个信息不同时,则可以判定当前枚举的关键段不相同;
若关键段为非资源段,由于每一次编译时的时间及环境的不同,在生成PE文件时可能包含即使源代码相同、随着编译次数或者编译环境的不同仍会发生改变的第三非必要信息,比如时间戳信息,因此,在对非资源段进行比较时,可以不考虑该第三非必要信息,只要除了该第三非必要信息之外的其他信息相同,则可以判定当前枚举的关键段为相同,而当除了该第三非必要信息之外的其他任意一个信息不同时,则可以判定当前枚举的关键段不相同。
基于此,本发明的PE文件源代码一致性的判定方法,在对关键段是否相同进行判断时,具体可以包括:
当所述关键段为资源段时,比较该资源段中除了第二非必要信息之外的信息是否相同,若相同,则判定所述各关键段的内容相同,所述第二非必要信息包括版本信息;
当所述关键段为非资源段时,比较该资源段中除了第三非必要信息的信息是否相同,若相同,则判定所述各关键段的内容相同,所述第三非必要信息包括时间戳信息。
因此,根据本发明的方法,当关键段为资源段时,则可以对资源段所包含的资源信息进行遍历搜索,只要除了第二非必要信息的其他信息相同,则可以判定当前枚举的关键段为相同,而当除了该第二非必要信息的其他任意一个信息不同时,则可以判定当前枚举的关键段不相同;当关键段为非关键段时,只要除了第三非必要信息的其他信息相同,则可以判定当前枚举的关键段为相同,而当除了该第三非必要信息的其他任意一个信息不同时,则可以判定当前枚举的关键段不相同。其通过对关键段为资源段以及关键段为非资源段进行区别对待,有效提高对PE文件源代码的一致性判断的准确性。
下面针对本发明PE文件源代码一致性的判定方法的两个较佳实施例进行详细说明。
实施例一:
如图1所示,是本发明实施例一的流程示意图,在本实施例中,本发明方法包括步骤:
步骤S101:分析当前待分析文件是否为PE文件,若是,进入步骤S102,若否,则直接结束该分析过程;
由于本发明的目的在于对两个或者两个以上PE文件内容是否基于相同的源代码进行侦测,而在某些情况下,例如目的是需要找出与待定PE文件是来自于相同源代码的其他PE文件时,可能无法确定加入侦测队列的文件是不是PE文件,因此,可首先对当前待分析文件是否为PE文件进行判定,若不是,则可以直接结束对当前待分析文件的判断过程,以节省时间;
步骤S102:判断待分析各PE文件所包含的段的数目是否相同,若相同,则进入步骤S103,若否,则直接判定所述各PE文件是基于不同的源代码,这是因为,对于由相同的源代码所生成的PE文件,所包含的段的数目必然相同,若段的数目发生了改变,则必然是因为源代码的内容发生了改变;
步骤S103:依次枚举各PE文件所包含的段,当还存在需枚举的段时,进入步骤S104,若不再具有需要枚举的段,即各PE文件的段枚举完毕,则进入步骤S110;
步骤S104:判断调试信息是否位于当前枚举段,若是,进入步骤S105,若否,进入步骤S106;
步骤S105:判断各PE文件的当前枚举段的调试信息中除了第一非必要信息之外的其他信息是否相同,若是,进入步骤S106,若否,则直接判定所述各PE文件是基于不同的源代码,其中,所述第一非必要信息包括时间戳信息;
步骤S106:判断当前枚举段是否为关键段,若是,进入步骤S107,若否,返回步骤S103;
步骤S107:判断当前关键段是否为资源段,若是,进入步骤S108,若否,进入步骤S109;
步骤S108:使用资源段对比方式对资源段进行对比,即,不考虑资源段中所包含的第二非必要信息,对除了该第二非必要信息的其他信息进行比对,若该其他信息相同,则判定所对比的关键段内容相同,若该其他信息不同,则判定所对比的关键段的内容不同,并返回步骤S103,其中,该第二非必要信息包括版本信息;
步骤S109:使用非资源段对比方式对该非资源段进行对比,即,不考虑该非资源段中所包含的第三非必要信息,对除了该第三非必要信息之外的其他信息进行比较,若相同,则判定所对比的关键段内容相同,若不同,则判定所对比的关键段的内容不相同,并返回步骤S103,其中,该第三非必要信息包括时间戳信息;
在多次执行上述步骤S103至步骤S109后,即可对各PE文件所包含的多个段分别进行比较,然后,进入步骤S110;
步骤S110,处理上述各步骤的比较结果,判断各PE文件是否基于相同的源代码,即,在各PE文件所包含的段的数目相同、调试信息相同且各关键段的内容相同,则判定所述各PE文件是基于相同的源代码。
实施例二:
在本实施例中,与实施例一的不同在于,还对各PE文件中所包含的自定义段的内容进行判断,如图2所示,其包括步骤:
步骤S201:分析待分析文件是否为PE文件,若是,进入步骤S202,若否,结束当前判别进程;
步骤S202:判断当前各待分析PE文件所包含的段的数目是否相同,若相同,进入步骤S203,若不同,则直接判定各PE文件是基于不同的源代码;
步骤S203:枚举各待分析PE文件所包含的段,当还具有需要枚举的段时,进入步骤S204,若已经没有需要枚举的段,则进入步骤S212;
步骤S204:判断当前枚举段是否为自定义段,若是,进入步骤S205,若否,进入步骤S206;
步骤S205:判断各待分析PE文件所包含的自定义段的数量和内容是否相同,若相同,则进入步骤S206,若不同,则直接判定所述各待分析PE文件是基于不同的源代码;
步骤S206:判断调试信息是否位于当前枚举段,若是,进入步骤S207,若否,进入步骤S208;
步骤S207:判断当前所枚举的段所包含的调试信息中除了第一非必要信息之外的其他信息是否相同,若相同,则进入步骤S208,若不同,则直接判定所述各待分析PE文件是基于不同的源代码;
步骤S208:判断当前枚举段是否为关键段,若是,进入步骤S209,若否,返回步骤S203;
步骤S209,判断当前关键段是否为资源段,若是,进入步骤S210,若否,则进入步骤S211;
步骤S210:使用资源段对比方式对当前资源段进行对比,即,判断除了第二非必要信息之外的其他信息进行同异性比较,若相同,则判定所对应的各关键段的内容相同,若不同,则判定所对应的各关键段的内容不相同,并返回步骤S203,所述第二非必要信息包括软件版本信息;
步骤S211:使用非资源段对比方式对当前非资源段进行对比,即,判断除了第三非必要信息之外的其他信息进行同异性比较,若相同,则判定所对应的各关键段的内容相同,若不同,则判定所对应的各关键段的内容不相同,并返回步骤S203,所述第三非必要信息包括时间戳信息;
多次进行上述步骤S203至步骤S211后,可得到对各待分析文件的各个段的比较结果,从而可进入步骤S212,对各PE文件是不是基于相同的源代码进行综合性判定;
步骤S212:处理上述各步骤的比较结果,判断各待分析PE文件是否基于相同的源代码,即,在具有自定义段的情况下,若各PE文件所包含的段的数目相同、所包含的自定义段的数量和内容、调试信息相同且各关键段的内容相同,则判定所述各PE文件是基于相同的源代码。
本实施例的其他技术特征与实施例一相同,在此不予赘述。
由此可见,当软件开发优化在进行软件开发时,如果用户定义了自定义段,还可以对用户所定义的自定义段进行同异性分析,从而使对各PE文件内容是否基于相同源代码的各项分析更全面且更准确。
其中,在本实施例二中,对自定义段的同异性判断是在对调试信息的判定之前进行,实际上,对各PE文件所包含的自定义段的同异性判断,还可以是在对调试信息判别之后进行,可以是在对关键段的判别之前进行,也可以是在对关键段的内容进行判别之后进行,根据具体的需要及应用环境的不同可以有所不同。
此外,在上述各实施例中,均是针对判断各PE文件是否基于相同的源代码进行说明,本发明的PE文件源代码一致性的判定方法,还可以用于查找与某一个特定的PE文件是基于相同源代码的其他PE文件,也可以用来判定两个不同的目录中是否存在是基于相同的源代码的PE文件,在这种应用中,可在执行本发明方法之前,首先判定是否存在待分析文件,若存在,则执行本发明方法的步骤,若不存在,则可以直接结束,不进行判别。
如图3所示,是本发明PE文件源代码一致性的判定装置的一个较佳实施例的结构示意图,如图所示,在该较佳实施例中,本发明的装置包括:
段数目判别模块301,用于判断各PE文件所包含的段的数目是否相同,若不相同,则比较结果处理模块306直接判定所述各PE文件是基于不同的源代码;
段枚举模块302,用于当所述段数目判别模块301判断结果为相同时,对所述各PE文件所包含的段进行枚举;
关键段判别模块305,用于判断所述段枚举模块302所枚举的当前枚举段是否为关键段,若是,判断各关键段是否相同,若否,则不进行判断;;
比较结果处理模块306,用于根据所述段数目判别模块301及所述关键段判别模块305的判别结果,判断所述各PE文件内容是否基于相同的源代码,当所述段数目判别模块301的判定结果为相同且所述关键段判别模块305的判定结果为相同时,所述比较结果处理模块306判定所述各PE文件内容是基于相同的源代码。
根据本发明的PE文件源代码一致性的判定装置,其不需要依赖于各PE文件所对应的源代码内容,只需结合各PE文件所包含的段的数目、以及各PE文件所包含的内容的异同,即可对PE文件是不是基于相同的源代码进行判定,即,当各PE文件所包含的数目相同,且所包含的关键段的内容相同,则可以判定各分析PE文件是基于相同的源代码,从而不会破坏了源代码数据库的安全性,具有较大的便利性。
本发明的PE文件源代码一致性的判定装置,还可以包括:
调试信息判别模块303,用于判断所述段枚举模块301的当前枚举段是否包含调试信息,若是时,判断调试信息中除了第一非必要信息之外的其他信息是否相同,若不相同,则所述比较结果处理模块306直接判定所述各PE文件内容是基于不同的源代码,若相同,则由所述关键段判别模块进行判断;当所述段数目判别模块的判定结果为相同、所述关键段判别模块判定结果为相同以及所述调试信息判别模块的判定结果为相同时,所述比较结果处理模块判定所述各PE文件是基于相同的源代码,其中,所述第一非必要信息包括时间戳信息。
由于调试信息既可以位于关键段,也可以位于非关键段,若确定调试信息位于关键段,则可以采用上述装置进行判定,若无法确定调试信息所在段为关键段还是非关键段,则可以通过该调试信息判别模块303事先判定当前枚举段是否包含调试信息,若是,当枚举段所包含的调试信息中除了第一非必要信息之外的其他信息不相同时,则可以直接确定各PE文件是基于不同的源代码,仅当PE文件所包含的段的数目相同、调试信息中除了第一非必要信息之外的其他信息相同且各关键段相同时,判定PE文件是基于相同的源代码,判定速度更快,效率更高。
此外,本发明的PE文件源代码一致性的判定装置,还可以包括:
自定义段判别模块304,用于当PE文件具有自定义段时,判断各PE文件的自定义段的数量和内容是否相同,若不相同,则所述比较结果处理模块306可直接判定所述各PE文件内容是基于不同的源代码;
当所述段数目判别模块判定结果为相同、所述关键段判别模块判定结果为相同且所述自定义段判别结果为相同时,所述比较结果处理模块判定所述各PE文件内容是基于相同的源代码。
根据软件开发所采用的方法手段的不同,软件开发人员在进行开发时可能会增加自定义段,故在侦测PE文件是否基于相同源代码时,可通过自定义段判别模块304对自定义段进行判别,以完整地进行判断,当该自定义段判别模块304判断出各待分析文件的自定义段的数量和/或内容不同时,可直接判定各PE文件是基于不同的源代码,仅当各PE文件所包含的段的数目相同、关键段的内容相同、自定义段的内容相同,在具有调试信息判别模块303时,调试信息中除了第一非必要信息之外的其他信息也相同时,即可判定各PE文件是基于相同的源代码。
由于关键段可以包含资源段与非资源段,而资源信息可以包括图片信息、版本信息、位图信息、图标信息、波形信息等信息,而即使是对于相同的源代码,根据编译次数的不同,版本信息也可以有所不同,而图片信息、位图信息等信息,如果是对于相同的源代码,即使编译多次也不会发生改变,因此,在对资源段的同异性进行判断时,可以排除对版本信息等第二非必要信息的判断。
同理,由于非资源段可以包含时间戳信息,即使对于相同的源代码,其所生成的PE文件中所包含的时间戳信息可能不同,因此,在对非资源段的同异性进行判断时,可以排除对时间戳信息等信息的判断。
基于此,本发明中的关键段判别模块305具体可以包括:
资源段判别模块3051,用于当所述关键段为资源段时,比较该资源段中除了第二非必要信息之外的信息是否相同,若相同,则判定所述各关键段的内容相同,所述第二非必要信息包括版本信息;
非资源段判别模块3052,用于当所述关键段为非资源段时,比较该资源段中除了第三非必要信息之外的信息是否相同,若相同,则判定所述各关键段的内容相同,所述第三非必要信息包括时间戳信息。
从而,本发明的PE文件源代码的一致性的判别装置,在对资源段进行判断时,可以通过资源段判别模块3051对资源段所包含的资源信息进行遍历搜索,当除了第二非必要信息之外的其他信息相同时,即判定各资源段相同,而当除了该第二非必要信息之外的其他信息不相同时,则判定各资源段不相同;在对非资源段的同异性进行判断时,可以通过非资源段判别模块3052排除对时间戳信息的判断,即,当除了第三非必要信息之外的其他信息相同时,则判定各非资源段相同,而当除了该第三非必要信息之外的其他信息不相同时,则判定各非资源段不相同,其通过对关键段为资源段以及关键段为非资源段进行区别对待,有效提高对PE文件源代码的一致性判断的准确性,。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的权利要求保护范围之内。

Claims (6)

1.一种PE文件源代码一致性的判定方法,包括步骤:
步骤1:判断各PE文件所包含的段的数目是否相同,若相同,进入步骤2,若不相同,直接判定各所述PE文件是基于不同的源代码;
步骤2:枚举各所述PE文件所包含的段,判断当前枚举段是否包含调试信息,若包含,进入步骤3,若不包含,进入步骤4;
步骤3:判断各所述PE文件的当前枚举段的调试信息中除了第一非必要信息之外的信息是否相同,若相同,进入步骤4,若不相同,直接判定各所述PE文件是基于不同的源代码,所述第一非必要信息为相同源代码的PE文件包含的调试信息中、除了各调试信息中必然相同的信息之外的信息,所述第一非必要信息包括时间戳信息;
步骤4:判断当前枚举段是否为关键段,若是,进入步骤5,若否,返回所述步骤2对下一个段进行枚举和判断,所述关键段为相同源代码多次编译时内容不发生变化的段;
步骤5:判断各所述PE文件的该关键段的内容是否相同,若相同,则返回所述步骤2对下一个段进行枚举和判断,若不相同,直接判定各所述PE文件是基于不同的源代码;
在对各所述PE文件的段枚举和判定完成后,若各所述PE文件所包含的段的数目相同、调试信息中除了第一非必要信息之外的信息相同且各关键段的内容相同,则判定各所述PE文件是基于相同的源代码。
2.根据权利要求1所述的PE文件源代码一致性的判定方法,其特征在于,还包括步骤:
当各所述PE文件具有自定义段时,判断各所述PE文件的自定义段的数量和内容是否相同,所述自定义段为开发过程中研发人员定义的段;
若不相同,则判定各所述PE文件是基于不同的源代码;
若相同,且各所述PE文件所包含的段的数目相同、调试信息中除了第一非必要信息之外的信息相同以及各关键段的内容相同,则判定各所述PE文件是基于相同的源代码。
3.根据权利要求1或2所述的PE文件源代码一致性的判定方法,其特征在于,所述判断关键段的内容是否相同的方法具体包括:
当所述关键段为资源段时,比较所述资源段中除了第二非必要信息之外的信息是否相同,若相同,则判定各所述关键段的内容相同,若不相同,则判定各所述关键段的内容不相同,所述资源段为包含资源数据的段,所述第二非必要信息为资源段的资源信息中根据编译次数或者编译环境发生改变的信息,所述第二非必要信息包括版本信息;
当所述关键段为非资源段时,比较该非资源段中除了第三非必要信息之外的信息是否相同,若相同,则判定各所述关键段的内容相同,若不相同,则判定各所述关键段的内容不相同,所述非资源段为没有包含资源数据的段,所述第三非必要信息为非资源段中根据编译次数或者编译环境发生改变的信息,所述第三非必要信息包括时间戳信息。
4.一种PE文件源代码一致性的判定装置,包括:
段数目判别模块,用于判断各PE文件所包含的段的数目是否相同,若不相同,则比较结果处理模块判定各所述PE文件是基于不同的源代码;
段枚举模块,用于当所述段数目判别模块判断结果为相同时,对各所述PE文件所包含的段进行枚举;
调试信息判别模块,用于判断所述段枚举模块的当前枚举段是否包含调试信息,在包含时,判断调试信息中除了第一非必要信息之外的信息是否相同,若不相同,则所述比较结果处理模块判定各所述PE文件是基于不同的源代码,所述第一非必要信息为相同源代码的PE文件包含的调试信息中、除了各调试信息中必然相同的信息之外的信息,所述第一非必要信息包括时间戳信息;
关键段判别模块,用于判断所述段枚举模块所枚举的当前枚举段是否为关键段,若不是关键段,则不进行判断,若是关键段,则判断各关键段是否相同,若不相同,则所述比较结果处理模块判定各所述PE文件是基于不同的源代码,所述关键段为相同源代码多次编译时内容不发生变化的段;
比较结果处理模块,用于根据所述段数目判别模块、所述段枚举模块、所述调试信息判别模块、及所述关键段判别模块的判别结果,判断各所述PE文件是否基于相同的源代码,当各所述PE文件的段枚举完毕,所述段数目判别模块判定结果为相同、所述调试信息判别模块判断所述段枚举模块的当前枚举段包含调试信息且调试信息中除了第一非必要信息之外的信息相同、且所述关键段判别模块的判定结果为相同时,所述比较结果处理模块判定各所述PE文件是基于相同的源代码。
5.根据权利要求4所述的PE文件源代码一致性的判定装置,其特征在于,还包括:
自定义段判别模块,用于当所述各PE文件具有自定义段时,判断各所述PE文件的自定义段的数量和内容是否相同,若不相同,则所述比较结果处理模块判定各所述PE文件是基于不同的源代码,所述自定义段为开发过程中研发人员定义的段;
当所述段数目判别模块的判定结果为相同、所述调试信息判别模块判断所述段枚举模块的当前枚举段包含调试信息且调试信息中除了第一非必要信息之外的信息相同、所述关键段判别模块的判定结果为相同、且所述自定义段判别模块的判定结果为相同时,所述比较结果处理模块判定各所述PE文件是基于相同的源代码。
6.根据权利要求4或5所述的PE文件源代码一致性的判定装置,其特征在于,所述关键段判别模块包括:
资源段判别模块,用于当所述关键段为资源段时,比较该资源段中除了第二非必要信息之外的信息是否相同,若相同,则判定各所述关键段的内容相同,若不相同,则判定各所述关键段的内容不相同,所述资源段为包含资源数据的段,所述第二非必要信息为资源段的资源信息中根据编译次数或者编译环境发生改变的信息,所述第二非必要信息包括版本信息;
非资源段判别模块,用于当所述关键段为非资源段时,比较该非资源段中除了第三非必要信息之外的信息是否相同,若相同,则判定各所述关键段的内容相同,若不相同,则判定各所述关键段的内容不相同,所述第三非必要信息包括时间戳信息,所述非资源段为没有包含资源数据的段,所述第三非必要信息为非资源段中根据编译次数或者编译环境发生改变的信息。
CN 200710033035 2007-12-29 2007-12-29 Pe文件源代码一致性的判定方法及装置 Active CN101470620B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200710033035 CN101470620B (zh) 2007-12-29 2007-12-29 Pe文件源代码一致性的判定方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200710033035 CN101470620B (zh) 2007-12-29 2007-12-29 Pe文件源代码一致性的判定方法及装置

Publications (2)

Publication Number Publication Date
CN101470620A CN101470620A (zh) 2009-07-01
CN101470620B true CN101470620B (zh) 2013-01-16

Family

ID=40828112

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200710033035 Active CN101470620B (zh) 2007-12-29 2007-12-29 Pe文件源代码一致性的判定方法及装置

Country Status (1)

Country Link
CN (1) CN101470620B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103902905B (zh) * 2013-12-17 2017-02-15 哈尔滨安天科技股份有限公司 基于软件结构聚类的恶意代码生成器识别方法及系统
CN104866765B (zh) * 2015-06-03 2017-11-10 康绯 基于行为特征相似性的恶意代码同源性分析方法
CN111771187B (zh) * 2019-01-31 2021-12-10 华为技术有限公司 一种消除代码构建差异的方法及装置
CN112799649B (zh) * 2020-06-15 2023-09-12 中兴通讯股份有限公司 代码构建方法、装置、设备和存储介质
CN111858359B (zh) * 2020-07-23 2024-01-30 珠海豹趣科技有限公司 可执行文件的工程代码位置获取方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1731347A (zh) * 2004-08-06 2006-02-08 梁肇新 基于Linux的Windows软件兼容层体系结构
CN1818823A (zh) * 2005-02-07 2006-08-16 福建东方微点信息安全有限责任公司 基于程序行为分析的计算机防护方法
KR20070041800A (ko) * 2005-10-17 2007-04-20 이종일 응용프로그램의 실행 코드 영역 수정을 통한 응용프로그램제어 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1731347A (zh) * 2004-08-06 2006-02-08 梁肇新 基于Linux的Windows软件兼容层体系结构
CN1818823A (zh) * 2005-02-07 2006-08-16 福建东方微点信息安全有限责任公司 基于程序行为分析的计算机防护方法
KR20070041800A (ko) * 2005-10-17 2007-04-20 이종일 응용프로그램의 실행 코드 영역 수정을 통한 응용프로그램제어 방법

Also Published As

Publication number Publication date
CN101470620A (zh) 2009-07-01

Similar Documents

Publication Publication Date Title
Wang et al. Is there a" golden" feature set for static warning identification? an experimental evaluation
CN102054149B (zh) 一种恶意代码行为特征提取方法
CN104424402B (zh) 一种用于检测盗版应用程序的方法及装置
Cai et al. An empirical study of long-lived code clones
CN100456292C (zh) 合并电子文档的多个不同版本的方法和装置
CN101470620B (zh) Pe文件源代码一致性的判定方法及装置
CN102193810A (zh) 模块间内联候选标识
CN102567200A (zh) 基于函数调用图的并行化安全漏洞检测方法
CN106250769A (zh) 一种多级过滤的源代码数据检测方法及装置
Huang et al. Detecting sensitive data disclosure via bi-directional text correlation analysis
CN111400724A (zh) 基于代码相似性分析的操作系统脆弱性检测方法、系统及介质
CN110147235A (zh) 一种源代码与二进制代码间的语义比对方法和装置
Nam et al. Marble: Mining for boilerplate code to identify API usability problems
Solanki et al. Comparative study of software clone detection techniques
CN109801677A (zh) 测序数据自动化分析方法、装置和电子设备
CN111159697A (zh) 一种密钥检测方法、装置及电子设备
Azuma et al. An empirical study on self-admitted technical debt in dockerfiles
Rantala et al. Prevalence, contents and automatic detection of KL-SATD
Schlie et al. Clustering variation points in matlab/simulink models using reverse signal propagation analysis
Kirinuki et al. Splitting commits via past code changes
CN113805861B (zh) 基于机器学习的代码生成方法、代码编辑系统及存储介质
CN116401670A (zh) 一种无源码场景下的漏洞补丁存在性检测方法及系统
Mendonça et al. Test2feature: Feature-based test traceability tool for highly configurable software
Feng et al. NiCad+: Speeding the detecting process of nicad
Schaad et al. Deep-learning-based vulnerability detection in binary executables

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20090701

Assignee: BEIJING KINGSOFT INTERNET SECURITY SOFTWARE Co.,Ltd.

Assignor: Zhuhai Kingsoft Software Co.,Ltd.

Contract record no.: 2014990000718

Denomination of invention: Method and apparatus for judging PE file source code consistency

Granted publication date: 20130116

License type: Common License

Record date: 20140826

LICC Enforcement, change and cancellation of record of contracts on the licence for exploitation of a patent or utility model