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

文档序号:8361190阅读:来源:国知局
,包括: 将所述被调用的函数和所剩余的虚函数作为反汇编处理后的可执行文件中的用户定义函数。
7.根据权利要求1-4任意一项所述的方法,其特征在于,当确定出所述反汇编处理后的可执行文件所利用的编译程序为VB类型时,所述根据所述编译程序的类型,提取所述反汇编处理后的可执行文件中的用户定义函数,包括: 依据所述反汇编处理后的可执行文件的程序入口代码,确定出文件头结构体; 解析所述文件头结构体,确定出所述反汇编处理后的可执行文件的事件处理函数结构体; 依据所述事件处理函数结构体,提取所述反汇编处理后的可执行文件中的事件处理函数; 遍历所述事件处理函数,获取被调用的函数; 将所获取的被调用的函数作为所述反汇编处理后的可执行文件中的用户定义函数。
8.根据权利要求1-4任意一项所述的方法,其特征在于,当确定出所述反汇编处理后的可执行文件所利用的编译程序为Delphi类型时,所述根据所述编译程序的类型,提取所述反汇编处理后的可执行文件中的用户定义函数,包括: 确定所述反汇编处理后的可执行文件的第一个节表; 从所述第一个节表处开始扫描,以确定文件头结构体; 解析所述文件头结构体,确定事件处理函数结构体; 依据所述事件处理函数结构体,提取所述反汇编处理后的可执行文件中的事件处理函数; 遍历所述事件处理函数,获取被调用的函数; 将所获取的被调用的函数作为所述反汇编处理后的可执行文件中的用户定义函数。
9.根据权利要求1-4任意一项所述的方法,其特征在于,当确定出所述反汇编处理后的可执行文件所利用的编译程序为易语言类型时,所述根据所述编译程序的类型,提取所述反汇编处理后的可执行文件中的用户定义函数,包括: 确定属于易语言类型的编译程序的链接方式; 当确定出所述链接方式为静态链接时,在开始地址至结束地址的地址范围内扫描,确定事件处理函数的开始点;依据所述开始点,确定出所述反汇编处理后的可执行文件中的事件处理函数;遍历所述事件处理函数,获取被调用的函数;将所述被调用的函数作为反汇编处理后的可执行文件中的用户定义函数;其中,所述开始地址为所述反汇编处理后的可执行文件的入口代码节地址,所述结束地址为第二序列所在的地址; 当确定出所述链接方式为动态链接时,对每一代码节执行特定操作,所述特定操作包括:通过预定特征码,确定入口结构体;解析入口结构体,在所述入口结构体所指向的开始地址至当前代码节的结尾地址的地址范围内扫描,确定事件处理函数的开始点;依据所述开始点,确定出所述反汇编处理后的可执行文件中的事件处理函数;遍历所述事件处理函数,获取被调用的函数;将所述被调用的函数作为反汇编处理后的可执行文件中的用户定义函数;其中,所述预定特征码为确定出所述链接方式为动态链接方式时对代码节所做的T 己 O
10.根据权利要求1-4任意一项所述的方法,其特征在于,当确定出所述反汇编处理后的可执行文件所利用的编译程序为非框架类型时,所述根据所述编译程序的类型,提取所述反汇编处理后的可执行文件中的用户定义函数,包括: 从所述反汇编处理后的可执行文件的入口代码节开始,对每一代码节执行如下操作:扫描所述代码节中的函数;其中,当扫描出的函数为导出函数时,继续扫描所述导出函数所调用的函数; 从所扫描出的函数中,去除属于库函数的函数,并将剩余的函数确定为所述反汇编处理后的可执行文件中的用户定义函数。
11.一种软件识别装置,其特征在于,包括: 反汇编模块,用于将待识别软件的可执行文件进行反汇编处理; 类型确定模块,用于确定所述反汇编处理后的可执行文件所利用的编译程序的类型;用户定义函数提取模块,用于根据所述编译程序的类型,提取所述反汇编处理后的可执行文件中的用户定义函数; 特征值生成模块,用于生成所述用户定义函数对应的待识别特征值; 匹配数量确定模块,用于确定所述待识别特征值与特征库中所存储的特征值的匹配数量,其中,所述特征库存储有从恶意软件中提取的用户定义函数所对应的特征值,且所述特征库中所存储的特征值与所述待识别特征值具有相同的数据长度; 属性确定模块,用于依据所述匹配数量与所述待识别特征值的总数量的比值,确定所述待识别软件的属性。
12.根据权利要求11所述的装置,其特征在于,所述特征值生成模块,包括: 命令序列获得单元,用于对所述用户定义函数进行至少一次编译,获得所述用户定义函数对应的命令序列; 第一函数地址确定单元,用于从所述命令序列中确定出所述用户定义函数所调用的第一函数的地址,其中,所述第一函数包括:库函数和/或API函数; 第一函数名称确定单元,用于通过所述第一函数的地址,确定所述第一函数的名称;替换单元,用于将所述命令序列中的第一函数的地址替换为相应的第一函数的名称;特征值生成单元,用于对第一函数的地址替换为相应的第一函数的名称的所述命令序列运用预设的算法,以形成所述用户定义函数对应的具有预设数据长度的待识别特征值。
13.根据权利要求11所述的装置,其特征在于,所述类型确定模块,包括: 第一类型确定单元,用于通过提取程序入口函数的方式,确定所述反汇编处理后的可执行文件所利用的编译程序的类型; 或者, 第二类型确定单元,用于通过提取PE字节表的方式,确定所述反汇编处理后的可执行文件所利用的编译程序的类型。
14.根据权利要求11-13所述的装置,其特征在于,所述用户定义函数提取模块,包括:MFC类型的编译程序所对应的第一用户定义函数提取子模块; 其中,所述第一用户定义函数提取子模块,包括: rdata节确定单元,用于确定所述反汇编处理后的可执行文件中的rdata节; 虚表确定单元,用于确定所述rdata节中的虚表; 虚函数去除单元,用于从虚表对应的虚函数中,去除重写的MFC类虚函数; 用户定义函数确定单元,用于将所剩余的虚函数作为反汇编处理后的可执行文件中的用户定义函数。
15.根据权利要求14所述的装置,其特征在于,所述第一用户定义函数提取子模块,还包括: 消息循环列表确定单元,用于确定rdata节中的消息循环列表; 消息循环处理函数提取单元,用于依据所述消息循环列表,确定出消息循环处理函数结构体,进而依据消息循环处理函数结构体,提取出消息循环处理函数; 被调用的函数提取单元,用于在从虚表对应的虚函数中,去除重写的MFC类虚函数之后,遍历所述消息循环处理函数和所剩余的虚函数,获取被调用的函数; 所述用户定义函数确定单元,用于将所述被调用的函数和所剩余的虚函数作为反汇编处理后的可执行文件中的用户定义函数。
16.根据权利要求11-13所述的装置,其特征在于,所述用户定义函数提取模块,包括:VB类型的编译程序所对应的第二用户定义函数提取子模块; 其中,所述第二用户定义函数提取子模块,包括: 文件头结构体确定单元,用于依据所述反汇编处理后的可执行文件的程序入口代码,确定出文件头结构体; 事件处理函数结构体确定单元,用于解析所述文件头结构体,确定出所述反汇编处理后的可执行文件的事件处理函数结构体; 事件处理函数提取单元,用于依据所述事件处理函数结构体,提取所述反汇编处理后的可执行文件中的事件处理函数; 被调用的函数获取单元,用于遍历所述事件处理函数,获取被调用的函数; 用户定义函数确定单元,用于将所获取的被调用的函数作为所述反汇编处理后的可执行文件中的用户定义函数。
17.根据权利要求11-13所述的装置,其特征在于,所述用户定义函数提取模块,包括:Delphi类型的编译程序所对应的第三用户定义函数提取子模块; 其中,所述第三用户定义函数提取子模块,包括: 第一个节表确定单元,用于确定所述反汇编处理后的可执行文件的第一个节表; 文件头结构体确定单元,用于从所述第一个节表处开始扫描,以确定文件头结构体; 事件处理函数结构体确定单元,用于解析所述文件头结构体,确定事件处理函数结构体; 事件处理函数提取单元,用于依据所述事件处理函数结构体,提取所述反汇编处理后的可执行文件中的事件处理函数; 被调用的函数获取单元,用于遍历所述事件处理函数,获取被调用的函数; 用户定义函数确定单元,用于将所获取的被调用的函数作为所述反汇编处理后的可执行文件中的用户定义函数。
18.根据权利要求11-13所述的装置,其特征在于,所述用户定义函数提取模块,包括:易语言类型的编译程序所对应的第四用户定义函数提取子模块; 其中,所述第四用户定义函数提取子模块,包括: 链接方式确定单元,用于确定属于易语言类型的编译程序的链接方式,当确定出所述链接方式为静态链接时,触发第一用户定义函数确定单元;当确定出所述链接方式为动态链接时,触发第二用户定义函数确定单元; 所述第一用户定义函数确定单元,用于在开始地址至结束地址的地址范围内扫描,确定事件处理函数的开始点;依据所述开始点,确定出所述反汇编处理后的可执行文件中的事件处理函数;遍历所述事件处理函数,获取被调用的函数;将所述被调用的函数作为反汇编处理后的可执行文件中的用户定义函数;其中,所述开始地址为所述反汇编处理后的可执行文件的入口代码节地址,所述结束地址为第二序列所在的地址; 所述第二用户定义函数确定单元,用于对每一代码节执行特定操作,所述特定操作包括:通过预定特征码,确定入口结构体;解析入口结构体,在所述入口结构体所指向的开始地址至当前代码节的结尾地址的地址范围内扫描,确定事件处理函数的开始点;依据所述开始点,确定出所述反汇编处理后的可执行文件中的事件处理函数;遍历所述事件处理函数,获取被调用的函数;将所述被调用的函数作为反汇编处理后的可执行文件中的用户定义函数;其中,所述预定特征码为确定出所述链接方式为动态链接方式时对代码节所做的己 O
19.根据权利要求11-13所述的装置,其特征在于,所述用户定义函数提取模块,包括:非框架类型的编译程序所对应的第五用户定义函数提取子模块; 其中,所述第五用户定义函数提取子模块,用于从所述反汇编处理后的可执行文件的入口代码节开始,对每一代码节执行如下操作: 扫描所述代码节中的函数;其中,当扫描出的函数为导出函数时,继续扫描所述导出函数所调用的函数; 从所扫描出的函数中,去除属于库函数的函数,并将剩余的函数确定为所述反汇编处理后的可执行文件中的用户定义函数。
【专利摘要】本发明实施例公开了一种软件识别方法及装置。该软件识别方法包括:将待识别软件的可执行文件进行反汇编处理;确定反汇编处理后的可执行文件所利用的编译程序的类型;根据编译程序的类型,提取反汇编处理后的可执行文件中的用户定义函数;生成用户定义函数对应的待识别特征值;确定待识别特征值与特征库中所存储的特征值的匹配数量,其中,特征库存储有从恶意软件中提取的用户定义函数所对应的特征值,且特征库中所存储的特征值与所述待识别特征值具有相同的数据长度;依据匹配数量与所述待识别特征值的总数量的比值,确定待识别软件的属性。相对于现有技术,本方案提取特征值的方式使得特征性更强,从而提高了识别软件的准确性。
【IPC分类】G06F9-44, G06F17-30
【公开号】CN104679495
【申请号】CN201310632296
【发明人】王鑫, 姚辉, 刘桂峰
【申请人】贝壳网际(北京)安全技术有限公司, 北京金山网络科技有限公司
【公开日】2015年6月3日
【申请日】2013年12月2日
当前第5页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1