软件识别方法及装置的制造方法

文档序号:8361190阅读:171来源:国知局
软件识别方法及装置的制造方法【
技术领域
】[0001]本发明涉及软件识别领域,特别涉及一种软件识别方法及装置。【
背景技术
】[0002]随着科学技术的高速发展,纷繁众多的电子设备对人们工作和生活的影响越来越大。同时,软件规模的日益庞大以及繁琐的分工使得软件产品的质量往往难以得到保证,从而带来了日益严重的软件安全隐患问题。因此,用于识别正常软件和恶意软件的软件识别方法一直是备受关注的。[0003]现有的软件识别方法是将经过反汇编处理后的可执行文件分为若干代码段,从代码段中提取特征值,并与预先依据恶意软件所构建的特征库中的特征值进行匹配,根据匹配结果来确定识别结果。[0004]但是,现有的软件识别方法中,特征泛型较低,导致通用性较差。同时,恶意软件制造者可以通过对可执行文件进行加壳、加花、乱序、或修改入口等方式来更改代码段,以对抗现有软件识别方法;甚至,恶意软件制造者只需在原代码基础上随意加一些新功能,原来的特征就会消失,最终导致该恶意软件无法被识别出。[0005]综上所述,现有的软件识别方法对软件识别的准确性不高。【
发明内容】[0006]基于上述问题,本发明实施例公开了一种软件识别方法及装置,以提高识别软件的准确性。技术方案如下:[0007]第一方面,本发明实施例提供了一种软件识别方法,包括:[0008]将待识别软件的可执行文件进行反汇编处理;[0009]确定所述反汇编处理后的可执行文件所利用的编译程序的类型;[0010]根据所述编译程序的类型,提取所述反汇编处理后的可执行文件中的用户定义函数;[0011]生成所述用户定义函数对应的待识别特征值;[0012]确定所述待识别特征值与特征库中所存储的特征值的匹配数量,其中,所述特征库存储有从恶意软件中提取的用户定义函数所对应的特征值,且所述特征库中所存储的特征值与所述待识别特征值具有相同的数据长度;[0013]依据所述匹配数量与所述待识别特征值的总数量的比值,确定所述待识别软件的属性。[0014]可选的,所述生成所述用户定义函数对应的待识别特征值,包括:[0015]对所述用户定义函数进行至少一次编译,获得所述用户定义函数对应的命令序列;[0016]从所述命令序列中确定出所述用户定义函数所调用的第一函数的地址,其中,所述第一函数包括:库函数和/或API函数;[0017]通过所述第一函数的地址,确定所述第一函数的名称;[0018]将所述命令序列中的第一函数的地址替换为相应的第一函数的名称;[0019]对第一函数的地址替换为相应的第一函数的名称的所述命令序列运用预设的算法,以形成所述用户定义函数对应的待识别特征值。[0020]可选的,通过提取程序入口函数或PE(PortableExecutable,可移植可执行)字节表的方式,确定所述反汇编处理后的可执行文件所利用的编译程序的类型。[0021]可选的,所述待识别软件的属性包括:正常软件、恶意软件、偏正常软件或偏恶意软件。[0022]可选的,当确定出所述反汇编处理后的可执行文件所利用的编译程序为MFC类型时,所述根据所述编译程序的类型,提取所述反汇编处理后的可执行文件中的用户定义函数,包括:[0023]确定所述反汇编处理后的可执行文件中的rdata节;[0024]确定所述rdata节中的虚表;[0025]从虚表对应的虚函数中,去除重写的MFC类虚函数;[0026]将所剩余的虚函数作为反汇编处理后的可执行文件中的用户定义函数。[0027]可选的,所述根据所述编译程序的类型,提取所述反汇编处理后的可执行文件中的用户定义函数,还包括:[0028]确定rdata节中的消息循环列表;[0029]依据所述消息循环列表,确定出消息循环处理函数结构体,进而依据消息循环处理函数结构体,提取出消息循环处理函数;[0030]在从虚表对应的虚函数中,去除重写的MFC类虚函数之后,遍历所述消息循环处理函数和所剩余的虚函数,获取被调用的函数;[0031]所述将所剩余的虚函数作为反汇编处理后的可执行文件中的用户定义函数,包括:[0032]将所述被调用的函数和所剩余的虚函数作为反汇编处理后的可执行文件中的用户定义函数。[0033]可选的,当确定出所述反汇编处理后的可执行文件所利用的编译程序为VB类型时,所述根据所述编译程序的类型,提取所述反汇编处理后的可执行文件中的用户定义函数,包括:[0034]依据所述反汇编处理后的可执行文件的程序入口代码,确定出文件头结构体;[0035]解析所述文件头结构体,确定出所述反汇编处理后的可执行文件的事件处理函数结构体;[0036]依据所述事件处理函数结构体,提取所述反汇编处理后的可执行文件中的事件处理函数;[0037]遍历所述事件处理函数,获取被调用的函数;[0038]将所获取的被调用的函数作为所述反汇编处理后的可执行文件中的用户定义函数。[0039]可选的,当确定出所述反汇编处理后的可执行文件所利用的编译程序为Delphi类型时,所述根据所述编译程序的类型,提取所述反汇编处理后的可执行文件中的用户定义函数,包括:[0040]确定所述反汇编处理后的可执行文件的第一个节表;[0041]从所述第一个节表处开始扫描,以确定文件头结构体;[0042]解析所述文件头结构体,确定事件处理函数结构体;[0043]依据所述事件处理函数结构体,提取所述反汇编处理后的可执行文件中的事件处理函数;[0044]遍历所述事件处理函数,获取被调用的函数;[0045]将所获取的被调用的函数作为所述反汇编处理后的可执行文件中的用户定义函数。[0046]可选的,当确定出所述反汇编处理后的可执行文件所利用的编译程序为易语言类型时,所述根据所述编译程序的类型,提取所述反汇编处理后的可执行文件中的用户定义函数,包括:[0047]确定属于易语言类型的编译程序的链接方式;[0048]当确定出所述链接方式为静态链接时,在开始地址至结束地址的地址范围内扫描,确定事件处理函数的开始点;依据所述开始点,确定出所述反汇编处理后的可执行文件中的事件处理函数;遍历所述事件处理函数,获取被调用的函数;将所述被调用的函数作为反汇编处理后的可执行文件中的用户定义函数;其中,所述开始地址为所述反汇编处理后的可执行文件的入口代码节地址,所述结束地址为第二序列所在的地址;[0049]当确定出所述链接方式为动态链接时,对每一代码节执行特定操作,所述特定操作包括:通过预定特征码,确定入口结构体;解析入口结构体,在所述入口结构体所指向的开始地址至当前代码节的结尾地址的地址范围内扫描,确定事件处理函数的开始点;依据所述开始点,确定出所述反汇编处理后的可执行文件中的事件处理函数;遍历所述事件处理函数,获取被调用的函数;将所述被调用的函数作为反汇编处理后的可执行文件中的用户定义函数;其中,所述预定特征码为确定出所述链接方式为动态链接方式时对代码节所做的标记。[0050]可选的,当确定出所述反汇编处理后的可执行文件所利用的编译程序为非框架类型时,所述根据所述编译程序的类型,提取所述反汇编处理后的可执行文件中的用户定义函数,包括:[0051]从所述反汇编处理后的可执行文件的入口代码节开始,对每一代码节执行如下操作:[0052]扫描所述代码节中的函数;其中,当扫描出的函数为导出函数时,继续扫描所述导出函数所调用的函数;[0053]从所扫描出的函数中,去除属于库函数的函数,并将剩余的函数确定为所述反汇编处理后的可执行文件中的用户定义函数。[0054]第二方面,本发明实施例还提供了一种软件识别装置,包括:[0055]反汇编模块,用于将待识别软件的可执行文件进行反汇编处理;[0056]类型确定模块,用于确定所述反汇编处理后的可执行文件所利用的编译程序的类型;[0057]用户定义函数提取模块,用于根据所述编译程序的类型,提取所述反汇编处理后的可执行文件中的用户定义函数;[0058]特征值生成模块,用于生成所述用户定义函数对应的待识别特征值;[0059]匹配数量确定模块,用于确定所述待识别特征值与特征库中所存储的特征值的匹配数量,其中,所述特征库存储有从恶意软件中提取的用户定义函数所对应的特征值,且所述特征库中所存储的特征值与所述待识别特征值具有相同的数据长度;[0060]属性确定模块,用于依据所述匹配数量与所述待识别特征值的总数量的比值,确定所述待识别软件的属性。[0061]可选的,所述特征值生成模块,包括:[0062]命令序列获得单元,用于对所述用户定义函数进行至少一次编译,获得所述用户定义函数对应的命令序列;[0063]第一函数地址确定单元,用于从所述命令序列中确定出所述用户定义函数所调用的第一函数的地址,其中,所述第一函数包括:库函数和/或API函数;[0064]第一函数名称确定单元,用于通过所述第一函数的地址,确定所述第一函数的名称;[0065]替换单元,用于将所述命令序列中的第一函数的地址替换为相应的第一函数的名称;[0066]特征值生成单元,用于对第一函数的地址替换为相应的第一函数的名称的所述命令序列运用预设的算法,以形成所述用户定义函数对应的具有预设数据长度的待识别特征值。[0067]可选的,所述类型确定模块,包括:[0068]第一类型确定单元,用于通过提取程序入口函数的方式,确定所述反汇编处理后的可执行文件所利用的编译程序的类型;[0069]或者,[0070]第二类型确定单元,用于通过提取PE字节表的方式,确定所述反汇编处理后的可执行文件所利用的编译程序的类型。[0071]可选的,所述用户定义函数提取模块,包括:MFC类型的编译程序所对应的第一用户定义函数提取子模块;[0072]其中,所述第一用户定义函数提取子模块,包括:[0073]rdata节确定单元,用于确定所述反汇编处理后的可执行文件中的rdata节;[0074]虚表确定单元,用于确定所述rdata节中的虚表;[0075]虚函数去除单元,用于从虚表对应的虚函数中,去除重写的MFC类虚函数;[0076]用户定义函数确定单元,用于将所剩余的虚函数作为反汇编处理后的可执行文件中的用户定义函数。[0077]可选的,所述第一用户定义函数提取子模块,还包括:[0078]消息循环列表确定单元,用于确定rdata节中的消息循环列表;[0079]消息循环处理函数提取单元,用于依据所述消息循环列表,确定出消息循环处理函数结构体,进而依据消息循环处理函数结构体,提取出消息循环处理函数;[0080]被调用的函数提取单元,用于在从虚表对应的虚函数中当前第1页1 2 3 4 5 
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1