CN114757163A - 基于资源的pe文件相似性比对方法 - Google Patents

基于资源的pe文件相似性比对方法 Download PDF

Info

Publication number
CN114757163A
CN114757163A CN202210356639.8A CN202210356639A CN114757163A CN 114757163 A CN114757163 A CN 114757163A CN 202210356639 A CN202210356639 A CN 202210356639A CN 114757163 A CN114757163 A CN 114757163A
Authority
CN
China
Prior art keywords
resource
file
image
directory
resources
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.)
Pending
Application number
CN202210356639.8A
Other languages
English (en)
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.)
Beijing Institute of Computer Technology and Applications
Original Assignee
Beijing Institute of Computer Technology and Applications
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 Beijing Institute of Computer Technology and Applications filed Critical Beijing Institute of Computer Technology and Applications
Priority to CN202210356639.8A priority Critical patent/CN114757163A/zh
Publication of CN114757163A publication Critical patent/CN114757163A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/194Calculation of difference between files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • G06F8/751Code clone detection

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及一种基于资源的PE文件相似性比对方法,属于软件二进制代码溯源分析技术领域。该比对方法通过PE文件解析,提取并比对PE文件中位图、图标、字符串等资源,完成了PE文件相似性比对和相似度计算。该方法主要是为Windows操作系统下可执行程序、动态链接库、ActiveX控件等PE格式二进制文件溯源提供技术手段,具有良好的鲁棒性、较高的准确性和可用性。

Description

基于资源的PE文件相似性比对方法
技术领域
本发明属于软件二进制代码溯源分析技术领域,具体涉及一种基于资源的PE文件相似性比对方法。
背景技术
软件代码溯源分析是开展软件组成和自主性分析的重要手段。软件代码溯源分析的核心和关键是代码相似性比对技术。代码溯源分析包括源代码溯源和二进制代码溯源两种方法。软件源代码是按照程序设计语言规范书写的文本文件,是一系列人可读的计算机语言指令,源代码溯源方法已经非常成熟。然而,商业软件普遍采用“闭源”方式,只提供编译后的二进制代码,软件源代码通常无法获取,从而无法通过源代码相似性比对,实现目标软件和商业“闭源”软件的溯源。
PE(Portable Execute)文件是Windows下编译后二进制代码文件的总称,常见的有可执行程序(*.exe),动态链接库(*.dll),ActiveX控件(*.ocx)等。商业“闭源”软件大多将软件核心功能和关键算法封装成可执行程序、动态链接库或ActiveX控件等PE文件,对外仅提供调用接口,而不开放源代码,从而起到保护软件的目的。
PE文件通常都无法反编译出源代码,只能反汇编出汇编代码。基于PE文件反汇编后的汇编代码溯源存在较大问题,如同一份软件源代码经过不同编译器或编译选项后得到PE文件,再经过反汇编得到的汇编代码就存在不同程度的差异;软件源代码在编译过程中往往会链接许多公共库代码,反汇编后会增加许多代码量,这无疑会给基于汇编代码的软件溯源造成巨大干扰。
资源是加速键(Accelerator)、位图(Bitmap)、光标(Cursor)、对话框(DialogBox)、图标(Icon)、菜单(Menu)、字符串(String)、工具栏(Toolbar)和版本信息(VersionInformation)等数据的统称,PE文件为这类数据指定一个特定的节进行存储。位图、图标、字符串等资源具有统一性、唯一性、可识别性等特点。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何提供一种PE文件相似性比对方法,为windows操作系统下可执行程序、动态链接库、ActiveX控件等PE格式二进制文件溯源提供技术手段,解决无法通过源代码溯源“闭源”软件的问题。
(二)技术方案
为了解决上述技术问题,本发明提供了一种基于资源的PE文件相似性比对方法,包括以下步骤:
第一步、按照PE文件的组织结构解析PE文件;
第二步、基于第一步从PE文件中提取位图、图标、字符串这些资源;
第三步、通过分别比对位图、图标、字符串这些资源,获取相应类型的相同资源列表;
第四步、基于第三步计算PE文件相似度。
优选地,第一步中,依据PE文件的组织结构,按照顺序对MS-DOS头、PE头、节表、节进行解析。
优选地,第一步中解析的具体过程如下:
(1)MS-DOS头:所有PE文件都以MS-DOS头开始,这是一个IMAGE_DOS_HEADER结构;MS-DOS头包含两个域,一个是e_magic,包含字符串“MZ”;另一个是e_lfanew,用于定位PE头;解析过程中直接跳过由汇编器或编译器自动生成的DOS_STUB;
(2)PE头:PE头是PE相关结构NT映像头IMAGE_NT_HEADERS的简称,其中包含许多PE加载器需要用到的字段;PE标记Signature值为5045h,则表示为PE文件是可执行文件;接下来是一个固定长度的IMAGE_FILE_HEADER结构,该IMAGE_FILE_HEADER结构包含PE文件的一些信息,其中一个域指明了IMAGE_OPTIONAL_HEADER结构的大小,接下来是一个可选的IMAGE_OPTIONAL_HEADER结构,包含了与PE加载、执行相关的一些信息,包括程序的入口点地址、加载PE文件时应使用的基地址、内存中PE文件映像的大小、对齐信息;
(3)节表:节表是PE文件的第三部分,它是一个IMAGE_SECTION_HEADER结构的数组,数组元素个数由PE头中结构体IMAGE_FILE_HEADER中的NumberOfSection字段指定;每一个IMAGE_SECTION_HEADER结构包含其所对应节的一些信息,包括节的属性、在磁盘和内存的位置和大小;
(4)节:该部分由各个具体数据内容的节构成,包括“.text”节存储程序指令代码;“.rsrc”节存储资源,包括位图、图标、字符串;通过查询节表可获得每个节的具体位置,然后读取PE文件中的数据。
优选地,第二步是通过进一步解析PE文件所包含的“.rsrc”节信息,获取PE文件中位图、图标、字符串这些资源。
优选地,第二步中,设定PE文件按照“资源类型->资源ID->资源代码页”的三层树型目录结构组织资源,其中,资源类型包括位图、图标、字符串三种,每一层资源目录都以IMAGE_RESOURCE_DIRECTORY结构开始,后面紧跟一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构数组;PE文件中资源的提取过程如下:
(1)解析第一层目录
第一层资源目录以IMAGE_RESOURCE_DIRECTORY结构开始,后面紧跟一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构数组,数组维数由IMAGE_RESOURCE_DIRECTORY结构中以字符串命名的资源数量NumberOfNamedEntries字段与以整型数字命名的资源数量NumberOfIdEntries字段之和决定;
第一层资源目录中IMAGE_RESOURCE_DIRECTORY_ENTRY结构中Name和OffsetToDirectory有效,分别代表资源类型和第二层资源目录的偏移地址;
(2)解析第二层目录
第二层资源目同样以IMAGE_RESOURCE_DIRECTORY结构开始,后面同样紧跟一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构数组,数组维数由IMAGE_RESOURCE_DIRECTORY结构中NumberOfNamedEntries字段与NumberOfIdEntries字段之和决定;
第二层中IMAGE_RESOURCE_DIRECTORY_ENTRY结构中NameIsString、NameOffset、Id和OffsetToDirectory有效,其中,OffsetToDirectory字段代表第三层资源目录的偏移地址;如果NameIsString字段为0,说明该第二层资源是以ID定义的,ID号为Id字段的值;如果NameIsString字段为1,则说明该第二层资源是以名称定义的,NameOffset字段是一个相对于整个资源结构的偏移地址,指向IMAGE_RESOURCE_DIR_STRING_U结构体,按照该IMAGE_RESOURCE_DIR_STRING_U结构解析,即可提取出资源名称;
(3)解析第三层目录
与前两层相同,第三层资源目同样以IMAGE_RESOURCE_DIRECTORY结构开始,后面同样紧跟一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构体数组,不同的是数组维数固定为1;
第三层中IMAGE_RESOURCE_DIRECTORY_ENTRY结构体中Name和OffsetToData有效,分别代表资源语言类型和资源数据相对地址;OffsetToData是相对整个资源结构的偏移地址,指向IMAGE_RESOURCE_DATA_ENTRY结构,按照该IMAGE_RESOURCE_DATA_ENTRY结构即可提取出PE文件中的各种资源;IMAGE_RESOURCE_DATA_ENTRY结构中OffsetToData和Size分别代表资源数据的偏移地址和长度。
优选地,第三步是通过比对分别找出不同PE文件中相同位图、相同图标、相同字符串的3个相同资源列表。
优选地,第三步中PE文件的资源的相似性比对过程如下:
(1)针对从不同PE文件中提取的位图、图标、字符串资源,计算每一个资源的md5码,每一个资源都生成与之对应的唯一md5码;
(2)按照位图、图标、字符串这3类资源,分别求取不同PE文件存在的相同md5码列表,得到位图、图标、字符串的3个相同md5码列表;
(3)将步骤(2)中得到的位图、图标、字符串的3个相同md5码列表,转换成对应的相同位图、相同图标、相同字符串的3个资源列表。
优选地,第四步是分别针对位图、图标、字符串这3类资源计算不同PE文件之间位图、图标、字符串等三类资源的相似度,最后求取PE文件的相似度。
优选地,第四步中,资源的相似度的计算公式如下:
Figure BDA0003574957500000051
其中,similarity(Ai,Bi)表示PE文件A和B的资源i的相似度,i=2表示位图资源,i=3表示图标资源,i=6表示字符串资源,Ai、Bi分别表示PE文件A和B的资源i的列表,|Ai|、|Bi|分别表示PE文件A和B的资源i的总数量,|Sim(Ai,Bi)|表示PE文件A和B的资源i相同部分的数量。
优选地,第四步中,两个PE文件A和B的相似度similarity(PA,PB)采用PE文件中位图、图标、字符串等资源的最大相似度来表示:
Figure BDA0003574957500000052
(三)有益效果
本发明提出的一种基于资源的PE文件相似性比对方法具有如下特点:
(1)具备良好的鲁棒性。位图、图标、字符串等资源不会随着软件编译环境、编译选项的变化而变化(主要影响PE文件代码段中的指令代码),编译链接过程中插入的代码(主要是库文件代码)不会影响位图、图标、字符串等资源数据。因此,本发明通过比对资源实现PE文件相似性比较,能够规避软件编译环境、编译选项、编译链接等对于编译后PE文件相似性比对结果的影响。
(2)具备较高的准确性。位图、图标是图形化界面非常重要的元素之一,通常都具有统一性、唯一性、可识别性等特点。软件产品往往会结合软件用户和特征,设计不同风格的位图和图标,软件代码层面的修改并不会改变PE文件中位图和图标等资源。不同PE文件中存在相同位图、图标等资源,则可以判定PE文件必然存在某种关联关系。因此,本发明通过比对位图和图标等资源实现PE文件相似性比较,具有较高的准确性。
(3)具备较高的可用性。PE文件反汇编后的文件大小是原文件的10倍,这不仅增加了代码处理过程中的出错的几率,而且随着处理数据量的增长,处理复杂度和时间都将相应增加。本发明通过直接解析PE原文件,提取位图、图标、字符串等资源,而不必对PE文件进行反汇编,这不仅降低了处理复杂度,也提高了比对速度,从而也具备较高的可用性。
附图说明
图1为本发明的方法流程图;
图2为PE文件的基本组织结构示意图;
图3为PE文件的三层树型目录结构示意图;
图4为PE文件每一层资源目录结构定义示意。
具体实施方式
为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
针对无法通过源代码溯源“闭源”软件的问题,本发明给出了一种基于资源的PE文件相似性比对方法,该比对方法就是将位图、图标、字符串等资源作为可执行程序、动态链接库或ActiveX控件等PE文件的表征特性,通过比对位图、图标、字符串等资源的相似性,实现PE文件相似性比对,进而实现PE文件溯源。
如图1所示,该基于资源的PE文件相似性比对方法包括以下步骤:
第一步 按照PE文件的组织结构解析PE文件,为下一步从PE文件中提取位图、图标、字符串等资源提供基础和条件;
Windows是当下使用最为广泛的桌面操作系统,其可执行文件采用的是PE文件格式。PE文件是以线性结构组织成的数据流,由MS-DOS头开始,接着是PE头、节表,紧接着的是所有节实体,PE文件基本组织结构如图2所示。PE文件解析就是依据PE文件的组织结构,按照顺序对MS-DOS头、PE头、节表、节进行解析,具体过程如下:
(1)MS-DOS头:所有PE文件都必须以MS-DOS头开始,这是一个IMAGE_DOS_HEADER结构;MS-DOS头包含两个比较重要的域,一个是e_magic,包含字符串“MZ”;另一个是e_lfanew(偏移量),用于定位PE头;DOS_STUB一般由汇编器/编译器自动生成,解析过程中可以直接跳过。
(2)PE头:PE头是PE相关结构NT映像头(IMAGE_NT_HEADERS)的简称,其中包含许多PE加载器需要用到的字段;PE标记Signature值为5045h,则表示为PE文件是可执行文件;接下来是一个固定长度的IMAGE_FILE_HEADER结构,该IMAGE_FILE_HEADER结构包含PE文件的一些基本信息,其中最重要的一个域指明了IMAGE_OPTIONAL_HEADER结构的大小。接下来是一个可选的IMAGE_OPTIONAL_HEADER结构,包含了与PE加载、执行相关的一些重要信息,如程序的入口点地址、加载PE文件时应使用的基地址、内存中PE文件映像的大小、对齐信息等。
(3)节表:节表是PE文件的第三部分,它是一个IMAGE_SECTION_HEADER结构的数组,数组元素个数可由PE头中结构体IMAGE_FILE_HEADER中的NumberOfSection字段指定;每一个IMAGE_SECTION_HEADER结构包含其所对应节的一些必要信息,如节的属性、在磁盘和内存的位置和大小等。
(4)节:该部分由各个具体数据内容的节构成,如“.text”节存储程序指令代码;“.rsrc”节存储资源,如位图、图标、字符串等;通过查询节表,可以获得每个节的具体位置,然后读取PE文件中的数据。
第二步 从PE文件中解析提取位图、图标、字符串等资源
PE文件通常包含“.text”、“.data”、“.edata”、“.rsrc”、“.idata”等常见节,其中“.rsrc”节存储所有资源,如位图、图标、字符串等。“提取资源”就是通过进一步解析“.rsrc”节信息,获取PE文件中位图、图标、字符串等资源。
PE文件按照“资源类型->资源ID->资源代码页”的三层树型目录结构组织资源,如图3所示,其中,资源类型包括位图、图标、字符串三种。每一层资源目录都以IMAGE_RESOURCE_DIRECTORY结构开始,后面紧跟一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构数组,结构定义如图4所示。PE文件中资源的提取过程如下:
(1)解析第一层目录
第一层资源目录以IMAGE_RESOURCE_DIRECTORY结构开始,后面紧跟一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构数组,数组维数由IMAGE_RESOURCE_DIRECTORY结构中以字符串命名的资源数量NumberOfNamedEntries字段与以整型数字命名的资源数量NumberOfIdEntries字段之和决定;
第一层资源目录中IMAGE_RESOURCE_DIRECTORY_ENTRY结构中Name和OffsetToDirectory有效,分别代表资源类型和第二层资源目录的偏移地址。
(2)解析第二层目录
第二层资源目同样以IMAGE_RESOURCE_DIRECTORY结构开始,后面同样紧跟一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构数组,数组维数由IMAGE_RESOURCE_DIRECTORY结构中NumberOfNamedEntries字段与NumberOfIdEntries字段之和决定;
第二层中IMAGE_RESOURCE_DIRECTORY_ENTRY结构中NameIsString、NameOffset、Id和OffsetToDirectory有效,其中,OffsetToDirectory字段代表第三层资源目录的偏移地址;如果NameIsString字段为0,说明该第二层资源是以ID定义的,ID号为Id字段的值;如果NameIsString字段为1,则说明该第二层资源是以名称定义的,NameOffset字段是一个相对于整个资源结构的偏移地址,指向IMAGE_RESOURCE_DIR_STRING_U结构体,按照该IMAGE_RESOURCE_DIR_STRING_U结构解析,即可提取出资源名称。
(3)解析第三层目录
与前两层相同,第三层资源目同样以IMAGE_RESOURCE_DIRECTORY结构开始,后面同样紧跟一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构体数组,不同的是数组维数固定为1。
第三层中IMAGE_RESOURCE_DIRECTORY_ENTRY结构体中Name和OffsetToData有效,分别代表资源语言类型(语言内码)和资源数据相对地址;OffsetToData是相对整个资源结构的偏移地址,指向IMAGE_RESOURCE_DATA_ENTRY结构,按照该IMAGE_RESOURCE_DATA_ENTRY结构即可提取出PE文件中的各种资源;IMAGE_RESOURCE_DATA_ENTRY结构中OffsetToData和Size分别代表资源数据的偏移地址和长度。
第三步 通过分别比对位图、图标、字符串等资源,获取相应类型的相同资源列表
经过前两步,已经分别获取到了不同PE文件的位图、图标、字符串等资源列表,PE文件的相似性比对可以转换为位图、图标、字符串等三类资源的相似性比对,接下来就是通过比对分别找出不同PE文件中相同位图、相同图标、相同字符串等3个相同资源列表。PE文件的资源的相似性比对过程如下:
(1)针对从不同PE文件中提取的位图、图标、字符串等资源,计算每一个资源的md5码,每一个资源都可以生成与之对应的唯一md5码;
(2)按照位图、图标、字符串等3类资源,分别求取不同PE文件存在的相同md5码列表,得到位图、图标、字符串等3个相同md5码列表;
(3)将(2)中得到的位图、图标、字符串等3个相同md5码列表,转换成对应的相同位图、相同图标、相同字符串等3个资源列表。
第四步 计算PE文件相似度,解决PE文件相似性定量计算和表示问题
经过前三步,已经分别求取到不同PE文件A和B中的相同位图、相同图标、相同字符串等3个资源列表。接下来,分别针对位图、图标、字符串等3类资源计算不同PE文件之间位图、图标、字符串等三类资源的相似度,最后求取PE文件的相似度,资源的相似度的计算公式如下:
Figure BDA0003574957500000101
其中,similarity(Ai,Bi)表示PE文件A和B的资源i的相似度(i=2表示位图资源,i=3表示图标资源,i=6表示字符串资源),Ai、Bi分别表示PE文件A和B的资源i的列表,|Ai|、|Bi|分别表示PE文件A和B的资源i的总数量,|Sim(Ai,Bi)|表示PE文件A和B的资源i相同部分的数量。
位图、图标、字符串等资源都不是PE文件必不可少的组成部分。因此,两个PE文件A和B的相似度similarity(PA,PB)采用PE文件中位图、图标、字符串等资源的最大相似度来表示:
Figure BDA0003574957500000102
可以看出,本发明给出了一种基于资源的PE文件相似性比对方法,该比对方法通过PE文件解析,提取并比对PE文件中位图、图标、字符串等资源,完成了PE文件相似性比对和相似度计算。该方法主要是为Windows操作系统下可执行程序、动态链接库、ActiveX控件等PE格式二进制文件溯源提供技术手段,具有良好的鲁棒性、较高的准确性和可用性。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

Claims (10)

1.一种基于资源的PE文件相似性比对方法,其特征在于,该包括以下步骤:
第一步、按照PE文件的组织结构解析PE文件;
第二步、基于第一步从PE文件中提取位图、图标、字符串这些资源;
第三步、通过分别比对位图、图标、字符串这些资源,获取相应类型的相同资源列表;
第四步、基于第三步计算PE文件相似度。
2.如权利要求1所述的方法,其特征在于,第一步中,依据PE文件的组织结构,按照顺序对MS-DOS头、PE头、节表、节进行解析。
3.如权利要求2所述的方法,其特征在于,第一步中解析的具体过程如下:
(1)MS-DOS头:所有PE文件都以MS-DOS头开始,这是一个IMAGE_DOS_HEADER结构;MS-DOS头包含两个域,一个是e_magic,包含字符串“MZ”;另一个是e_lfanew,用于定位PE头;解析过程中直接跳过由汇编器或编译器自动生成的DOS_STUB;
(2)PE头:PE头是PE相关结构NT映像头IMAGE_NT_HEADERS的简称,其中包含许多PE加载器需要用到的字段;PE标记Signature值为5045h,则表示为PE文件是可执行文件;接下来是一个固定长度的IMAGE_FILE_HEADER结构,该IMAGE_FILE_HEADER结构包含PE文件的一些信息,其中一个域指明了IMAGE_OPTIONAL_HEADER结构的大小,接下来是一个可选的IMAGE_OPTIONAL_HEADER结构,包含了与PE加载、执行相关的一些信息,包括程序的入口点地址、加载PE文件时应使用的基地址、内存中PE文件映像的大小、对齐信息;
(3)节表:节表是PE文件的第三部分,它是一个IMAGE_SECTION_HEADER结构的数组,数组元素个数由PE头中结构体IMAGE_FILE_HEADER中的NumberOfSection字段指定;每一个IMAGE_SECTION_HEADER结构包含其所对应节的一些信息,包括节的属性、在磁盘和内存的位置和大小;
(4)节:该部分由各个具体数据内容的节构成,包括“.text”节存储程序指令代码;“.rsrc”节存储资源,包括位图、图标、字符串;通过查询节表可获得每个节的具体位置,然后读取PE文件中的数据。
4.如权利要求3所述的方法,其特征在于,第二步是通过进一步解析PE文件所包含的“.rsrc”节信息,获取PE文件中位图、图标、字符串这些资源。
5.如权利要求4所述的方法,其特征在于,第二步中,设定PE文件按照“资源类型->资源ID->资源代码页”的三层树型目录结构组织资源,其中,资源类型包括位图、图标、字符串三种,每一层资源目录都以IMAGE_RESOURCE_DIRECTORY结构开始,后面紧跟一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构数组;PE文件中资源的提取过程如下:
(1)解析第一层目录
第一层资源目录以IMAGE_RESOURCE_DIRECTORY结构开始,后面紧跟一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构数组,数组维数由IMAGE_RESOURCE_DIRECTORY结构中以字符串命名的资源数量NumberOfNamedEntries字段与以整型数字命名的资源数量NumberOfIdEntries字段之和决定;
第一层资源目录中IMAGE_RESOURCE_DIRECTORY_ENTRY结构中Name和OffsetToDirectory有效,分别代表资源类型和第二层资源目录的偏移地址;
(2)解析第二层目录
第二层资源目同样以IMAGE_RESOURCE_DIRECTORY结构开始,后面同样紧跟一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构数组,数组维数由IMAGE_RESOURCE_DIRECTORY结构中NumberOfNamedEntries字段与NumberOfIdEntries字段之和决定;
第二层中IMAGE_RESOURCE_DIRECTORY_ENTRY结构中NameIsString、NameOffset、Id和OffsetToDirectory有效,其中,OffsetToDirectory字段代表第三层资源目录的偏移地址;如果NameIsString字段为0,说明该第二层资源是以ID定义的,ID号为Id字段的值;如果NameIsString字段为1,则说明该第二层资源是以名称定义的,NameOffset字段是一个相对于整个资源结构的偏移地址,指向IMAGE_RESOURCE_DIR_STRING_U结构体,按照该IMAGE_RESOURCE_DIR_STRING_U结构解析,即可提取出资源名称;
(3)解析第三层目录
与前两层相同,第三层资源目同样以IMAGE_RESOURCE_DIRECTORY结构开始,后面同样紧跟一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构体数组,不同的是数组维数固定为1;
第三层中IMAGE_RESOURCE_DIRECTORY_ENTRY结构体中Name和OffsetToData有效,分别代表资源语言类型和资源数据相对地址;OffsetToData是相对整个资源结构的偏移地址,指向IMAGE_RESOURCE_DATA_ENTRY结构,按照该IMAGE_RESOURCE_DATA_ENTRY结构即可提取出PE文件中的各种资源;IMAGE_RESOURCE_DATA_ENTRY结构中OffsetToData和Size分别代表资源数据的偏移地址和长度。
6.如权利要求5所述的方法,其特征在于,第三步是通过比对分别找出不同PE文件中相同位图、相同图标、相同字符串的3个相同资源列表。
7.如权利要求6所述的方法,其特征在于,第三步中PE文件的资源的相似性比对过程如下:
(1)针对从不同PE文件中提取的位图、图标、字符串资源,计算每一个资源的md5码,每一个资源都生成与之对应的唯一md5码;
(2)按照位图、图标、字符串这3类资源,分别求取不同PE文件存在的相同md5码列表,得到位图、图标、字符串的3个相同md5码列表;
(3)将步骤(2)中得到的位图、图标、字符串的3个相同md5码列表,转换成对应的相同位图、相同图标、相同字符串的3个资源列表。
8.如权利要求7所述的方法,其特征在于,第四步是分别针对位图、图标、字符串这3类资源计算不同PE文件之间位图、图标、字符串等三类资源的相似度,最后求取PE文件的相似度。
9.如权利要求8所述的方法,其特征在于,第四步中,资源的相似度的计算公式如下:
Figure FDA0003574957490000041
其中,similarity(Ai,Bi)表示PE文件A和B的资源i的相似度,i=2表示位图资源,i=3表示图标资源,i=6表示字符串资源,Ai、Bi分别表示PE文件A和B的资源i的列表,|Ai|、|Bi|分别表示PE文件A和B的资源i的总数量,|Sim(Ai,Bi)|表示PE文件A和B的资源i相同部分的数量。
10.如权利要求9所述的方法,其特征在于,第四步中,两个PE文件A和B的相似度similarity(PA,PB)采用PE文件中位图、图标、字符串等资源的最大相似度来表示:
Figure FDA0003574957490000042
CN202210356639.8A 2022-03-31 2022-03-31 基于资源的pe文件相似性比对方法 Pending CN114757163A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210356639.8A CN114757163A (zh) 2022-03-31 2022-03-31 基于资源的pe文件相似性比对方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210356639.8A CN114757163A (zh) 2022-03-31 2022-03-31 基于资源的pe文件相似性比对方法

Publications (1)

Publication Number Publication Date
CN114757163A true CN114757163A (zh) 2022-07-15

Family

ID=82328441

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210356639.8A Pending CN114757163A (zh) 2022-03-31 2022-03-31 基于资源的pe文件相似性比对方法

Country Status (1)

Country Link
CN (1) CN114757163A (zh)

Similar Documents

Publication Publication Date Title
US7634720B2 (en) System and method for providing context to an input method
CN108139891B (zh) 用于生成建议以纠正未定义标记错误的方法和系统
US6305008B1 (en) Automatic statement completion
US7937688B2 (en) System and method for context-sensitive help in a design environment
US8464207B2 (en) System and method for tracking software changes
US7840939B1 (en) Method for managing annotation inheritance
Sharp Microsoft Visual C# step by step
US20050198624A1 (en) Method and system for program transformation
JP6241352B2 (ja) コンパイラ、コンパイル方法、およびコンパイル装置
US5960197A (en) Compiler dispatch function for object-oriented C
US8332833B2 (en) Procedure control descriptor-based code specialization for context sensitive memory disambiguation
US10599852B2 (en) High performance software vulnerabilities detection system and methods
JP2020119348A (ja) 解析プログラム、解析方法および解析装置
CN100454244C (zh) 在标记中用于定义和使用子类说明的系统和方法
US7096463B2 (en) System and apparatus for dynamically upgrading concentrated executable computer software code
US8935657B2 (en) Model-to-model transformation by kind
JP2002527814A (ja) コンポーネント・ベース型ソース・コード・ジェネレータ
US11036478B2 (en) Automated determination of transformation objects
JPH01161563A (ja) コンピユータ・システム及びオペレーテイング・システムへのコマンド適合方法
US7657869B2 (en) Integration of external tools into an existing design environment
US10983771B1 (en) Quality checking inferred types in a set of code
Schröder et al. An empirical investigation of command-line customization
US20050028152A1 (en) Method and apparatus for identifying a Java class package name without disassembling Java bytecodes
CN116893809A (zh) 用于代码可解释性的代码富集的方法、存储介质和系统
CN114757163A (zh) 基于资源的pe文件相似性比对方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination