著录项信息
专利名称 | Windows应用程序内部固化数据的提取系统 |
申请号 | CN200810202643.9 | 申请日期 | 2008-11-13 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2009-03-25 | 公开/公告号 | CN101393521 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F9/44 | IPC分类号 | G;0;6;F;9;/;4;4查看分类表>
|
申请人 | 上海交通大学 | 申请人地址 | 上海市闵行区东川路800号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 上海交通大学 | 当前权利人 | 上海交通大学 |
发明人 | 谷大武;李卷孺;陆海宁;陈帆;张磊 |
代理机构 | 上海交达专利事务所 | 代理人 | 王锡麟;王桂忠 |
摘要
一种软件分析和信息安全技术领域的Windows应用程序内部固化数据的提取系统,可执行文件类型信息识别模块对可执行文件的格式、开发语言种类、保护类型进行识别;可执行文件反保护模块负责对受保护代码加壳保护的可执行文件进行反保护;可执行文件代码分析模块对可执行文件进行反汇编、反编译,得到汇编和高级语言代码,并给出结构和逻辑信息;密码学分析模块负责在可执行文件中有加密存储的固定的数据信息时,对可执行文件中采用的密码学算法进行识别;可执行文件调试与信息提取模块在其运行的中间过程中查看运行期间程序内部状态,从而提取信息。本发明能有效地提取和分析固定在程序中的数据信息,给出其产生方法和原始信息。
1.一种Windows应用程序内部固化数据提取系统,其特征在于,包括:可执行文件类型信息识别模块、可执行文件反保护模块、可执行文件代码分析模块、可执行文件调试与信息提取模块、密码学分析模块,其中:
可执行文件类型信息识别模块对可执行文件的格式、开发语言种类、保护类型进行识别,如果可执行文件受保护,选择可执行文件反保护模块,否则直接选择可执行文件代码分析模块;
可执行文件反保护模块负责对受保护代码加壳保护的可执行文件进行反保护,对受保护的可执行文件进行信息还原,使其呈现出普通的未受保护形态,并将反保护后的可执行文件输出到可执行文件代码分析模块;
可执行文件代码分析模块以未被保护的可执行文件或者可执行文件反保护模块输出的可执行文件作为输入,对其进行反汇编、反编译,得到汇编和高级语言代码,并给出结构和逻辑信息,并将经过分析处理后的可执行文件传输给可执行文件调试与信息提取模块;
密码学分析模块负责在可执行文件中有加密存储的固定的数据信息时,对可执行文件中采用的密码学算法进行识别,并将涉及密码学算法的代码位置信息传送给可执行文件调试和信息提取模块,进行信息提取;
可执行文件调试与信息提取模块加载并运行可执行文件代码分析模块或密码分析模块传输过来的可执行文件,在其运行的中间过程中查看运行期间程序内部状态,从而提取信息;
所述可执行文件类型信息识别模块,对可执行文件的如下信息进行识别:可执行文件的格式、开发语言种类、保护类型分析,其中,保护类型分为未受保护和受保护两种类型,受保护类型中主要分为压缩保护和加密保护两大类,可执行文件类型信息识别模块根据可执行文件定义的结构、定位程序的入口点,获取10-20字节代码,并调用特征模式库进行匹配,若模块分析机制判定可执行文件为未受保护的类型,则转入可执行文件代码分析模块,若模块分析机制判定可执行文件为受保护类型,则转入可执行文件反保护模块; 所述可执行文件反保护模块,包括:代码保护去除子模块和代码修复子模块,其中:
代码保护去除子模块 对受到代码保护的可执行文件,去除其正常运行代码之外存在的用于可执行文件保护的代码层,自动加载该可执行文件,从内存中获取可执行文件运行期的代码,此时用于保护的代码层已经执行完毕,获得并保存正常运行代码,并将其传输给代码修复子模块;
代码修复子模块针对代码保护去除子模块的输出数据,此时输出数据为软件的正常运行代码,但是程序结构受到破坏,代码修复子模块将根据原始可执行文件的信息,为其补充程序结构信息,并修复其中受到破坏的导入表结构,使得修复后的数据成为可以正常运行的可执行文件;
在上述两个子模块运行完毕后,将结果重新传入可执行文件类型信息识别模块,若仍然存在保护机制,则再次通过可执行文件反保护模块进行处理,若已经不存在保护机制,则将其传入可执行文件代码分析模块;
所述可执行文件调试与信息提取模块,其针对未经保护或已经进行反保护处理的可执行文件,在运行过程中通过外部记录的方式收集其输入输出数据,对于其中需要判定性质的部分进行筛选,然后通过调试器加载可执行文件运行,记录整个运行过程中,内存中代码、寄存器信息、内存信息、输入输出数据及其变化的完整集合,在数据的完整集合中,找到和需要判定性质的数据匹配的内容,然后分析所有和数据处理有关的指令,通过程序的运行流程和内存地址的变化,判断需要判定性质的数据的来源,对于来自于可执行文件本身的数据,将其提取出来。
2.根据权利要求1所述的Windows应用程序内部固化数据提取系统,其特征是,所述可执行文件代码分析模块,包括:通用代码分析子模块和专有代码分析子模块,其中:
通用代码分析子模块针对所有可执行文件二进制代码进行分析,通过调用反汇编和反编译工具,给出可执行文件的反汇编代码信息和程序内部基本结构,并给出一部分静态内部信息;
专有代码分析子模块根据可执行文件类型信息识别模块的分析结果决定是否执行,如果可执行文件中有特殊的开发语言种类特征,则在通用代码分析子模块 运行之后执行进行有针对性的信息识别,其中包括对Delphi、VB和.Net语言开发编译的可执行文件的识别,通过该开发语言编译特点,从中解码按照该语言编译编码的信息,从而比通用代码分析获得更多的信息。
3.根据权利要求1所述的Windows应用程序内部固化数据提取系统,其特征是,所述密码学分析模块,其对可执行文件中可能使用的加密解密算法进行识别,确定其影响的数据范围,同时给出可执行文件可能使用的解密算法和密钥,并分析可执行文件二进制代码中包含的数据常量,与已知密码学算法特征值进行匹配,同时导入已知密码学算法的标准测试向量,对涉及加密解密的代码进行输入输出测试,将代码输出数据和标准输出数据进行对比,若特征值和代码输出数据均与已知密码学算法的特征值和标准输出数据匹配,则确定可执行文件使用了已知密码学算法,并将涉及密码学算法的代码位置信息传送给可执行文件调试和信息提取模块,以便其能识别加密算法和数据。
Windows应用程序内部固化数据的提取系统\n技术领域\n[0001] 本发明涉及一种信息处理技术领域的系统,具体是一种Windows应用程序内部固化数据的提取系统。\n背景技术\n[0002] 软件产品通常是指编译后可执行的静态代码指令集合的抽象,而实际运行中,软件被加载到内存中,成为程序体或进程体,其中不仅包括静态的代码指令,还包括了动态的数据信息。在程序运行时,存在多种类型的数据信息,可能为程序接受外部输入的信息,可能为程序内部固定的信息,可能为程序以某种变换方式将输入变换为输出的信息。通常情况下,软件分析只能从外部视角观察程序的数据信息,不能判定信息的类型,也不能确定是否观察到所有的信息。\n[0003] 应用程序内部的固定数据信息,可以视为作为程序本身的性质,一方面,其在程序的正常运行中提供了数据源,另一方面,其在程序的安全分析和性质判定中具有重要的参考价值。如白盒密码学软件中的密钥信息、恶意软件中的IP地址信息等,都能为软件分析和理解提供重要的分析线索。此外,程序内部固化数据还是计算机取证的重要依据。\n[0004] 应用程序内部的固定数据信息,具有如下性质:首先,对于相同的软件产品拷贝,在不同的计算机上这些数据信息是不变的;其次,此类数据不依赖外部输入;第三,此类信息可能以明文或加密的形式存放在软件的发行文件中,但是如果以加密形式存放,其解密还原必须不依赖第三方而完成,满足软件自身即可运行的原子性。\n[0005] 对于应用程序的内部数据信息的分析,传统的黑盒分析方法无法应用,必须采用白盒分析方法对其进行分析。通常情况下,需要分析的软件并未提供高级语言的源代码,只有二进制编译的发布文件,存在若干技术/工具,可以对二进制编译形式的软件代码进行分析,例如DataRescue公司的IDA pro静态反汇编分析软件等,然而此类工具的局限性在于只能分析静态数据,对于软件的动态数据缺乏分析能力,并且无法提取加密形式的隐藏信息。尤其是涉及到密码学算法的应用,传统的分析方法难以处理加密数据的识别和还原。\n目前国内外软件分析的技术研究集中在对于代码的反汇编和反编译方面,主要针对代码的结构识别、软件运行流程和软件抽象重构造,而对于软件中包含数据的识别工作尚未有通用的方法。\n[0006] 经对现有技术 的文献检索发现,Mihai Christodorescu等 在the 6th ACMSIGPLAN-SIGSOFT workshop on Program analysis for software tools andengineering(第六届ACM软件工具和工程程序分析会议)上发表的StringAnalysis for x86 Binaries(x86二进制代码的字符串分析),文章中提出了一种x86体系下可执行的二进制代码中字符串的提取和恢复方法,该方法是一种针对二进制代码的静态分析技术,基于A.S.Chri stensen在the 10thInternational Static Analysis Symposium(第\n10届国际静态分析讨论学术交流会)上发表的文章Precise analysis of string expressions(字符串表达式的精确分析)中所用到的字符串流图(string flow graph)技术。该方法将二进制代码进行了建模,使得其能够构造出字符串流图,在此基础之上得到字符串信息的集合。该文中提出的方法基于静态代码分析,没有对运行期信息进行分析,其不足之处在于静态分析不能完全获得程序运行时产生的所有数据信息,尤其是经过加密变换存储的数据信息。\n发明内容\n[0007] 本发明的目的是针对上述现有技术的不足,提出了一种Windows应用程序内部固化数据的提取系统,本发明不依赖高级语言源代码,区分Windows应用程序运行时产生的数据信息类型,从中提取属于应用程序本身固化的数据(包括明文存储和加密变换存储),准确高效地提取其原始状态和产生方法。\n[0008] 本发明是通过如下技术方案实现的,本发明包括:可执行文件类型信息识别模块、可执行文件反保护模块、可执行文件代码分析模块、可执行文件调试与信息提取模块、密码学分析模块,其中:\n[0009] 可执行文件类型信息识别模块对可执行文件的格式、开发语言种类、保护类型进行识别,如果可执行文件受保护,选择可执行文件反保护模块,否则直接选择可执行文件代码分析模块;\n[0010] 可执行文件反保护模块负责对受保护代码加壳保护的可执行文件进行反保护,对受保护的可执行文件进行信息还原,使其呈现出普通的未受保护形态,并将反保护后的可执行文件输出到可执行文件代码分析模块;\n[0011] 可执行文件代码分析模块以未被保护的可执行文件或者可执行文件反保护模块输出的可执行文件作为输入,对其进行反汇编、反编译,得到汇编和高级语言代码,并给出结构和逻辑信息,并将经过分析处理后的可执行文件传输给可执行文件调试与信息提取模块;\n[0012] 密码学分析模块负责在可执行文件中有加密存储的固定的数据信息时,对可执行文件中采用的密码学算法进行识别,并将涉及密码学算法的代码位置信息传送给可执行文件调试和信息提取模块,进行信息提取;\n[0013] 可执行文件调试与信息提取模块加载并运行可执行文件代码分析模块或密码分析模块传输过来的可执行文件,在其运行的中间过程中查看运行期间程序内部状态,从而提取信息。\n[0014] 所述可执行文件类型信息识别模块,对可执行文件的如下信息进行识别:可执行文件的格式(可分为exe、dll、lib、sys、ocx等格式)、开发语言种类(可分为汇编、VC++、BC++、Delphi、VB、.Net等开发语言)、保护类型分析,其中,保护类型分为未受保护和受保护两种类型,受保护类型中主要分为压缩保护和加密保护两大类,可执行文件类型信息识别模块根据可执行文件定义的结构、定位程序的入口点,获取10-20字节代码,并调用特征模式库进行匹配,若模块分析机制判定可执行文件为未受保护的类型,则转入可执行文件代码分析模块,若模块分析机制判定可执行文件为受保护类型,则转入可执行文件反保护模块。\n[0015] 所述可执行文件反保护模块,包括:代码保护去除子模块和代码修复子模块,其中:\n[0016] 代码保护去除模块对受到代码保护的可执行文件,去除其正常运行代码之外存在的用于可执行文件保护的代码层,自动加载该可执行文件,从内存中获取可执行文件运行期的代码,此时用于保护的代码层已经执行完毕,获得并保存正常运行代码,并将其传输给代码修复子模块;\n[0017] 代码修复子模块针对代码保护去除子模块的输出数据,此时输出数据为软件的正常运行代码,但是程序结构受到破坏,代码修复子模块将根据原始可执行文件的信息,为其补充程序结构信息,并修复其中受到破坏的导入表结构,使得修复后的数据成为可以正常运行的可执行文件;\n[0018] 在上述两个子模块运行完毕后,将结果重新传入可执行文件类型信息识别模块,若仍然存在保护机制,则再次通过可执行文件反保护模块进行处理,若已经不存在保护机制,则将其传入可执行文件代码分析模块,进行进一步的分析。\n[0019] 所述可执行文件代码分析模块,包括:通用代码分析子模块和专有代码分析子模块,其中:\n[0020] 通用代码分析子模块针对所有可执行文件二进制代码进行分析,通过调用反汇编和反编译工具,给出可执行文件的反汇编代码信息和程序内部基本结构,并给出一部分静态内部信息;\n[0021] 专有代码分析子模块根据可执行文件类型信息识别模块的分析结果决定是否执行,如果可执行文件中有特殊的开发语言种类特征,则在通用代码分析子模块运行之后执行进行有针对性的信息识别,其中包括对Delphi、VB和.Net语言开发编译的可执行文件的识别,通过该开发语言编译特点,从中解码按照该语言编译编码的信息,从而比通用代码分析获得更多的信息。\n[0022] 所述可执行文件调试与信息提取模块,其针对未经保护或已经进行反保护处理的可执行文件,在运行过程中通过外部记录的方式收集其输入输出数据,对于其中需要判定性质的部分进行筛选,然后通过调试器加载可执行文件运行,记录整个运行过程中,内存中代码、寄存器信息、内存信息、输入输出数据及其变化的完整集合,在数据的完整集合中,找到和需要判定性质的数据匹配的内容,然后分析所有和数据处理有关的指令,通过程序的运行流程和内存地址的变化,判断需要判定性质的数据的来源,对于来自于可执行文件本身的数据,将其提取出来。\n[0023] 所述密码学分析模块,其对可执行文件中可能使用的加密解密算法进行识别,确定其影响的数据范围,同时给出可执行文件可能使用的解密算法和密钥,并分析可执行文件二进制代码中包含的数据常量,与已知密码学算法特征值进行匹配,同时导入已知密码学算法的标准测试向量,对涉及加密解密的代码进行输入输出测试,将代码输出数据和标准输出数据进行对比,若特征值和代码输出数据均与已知密码学算法的特征值和标准输出数据匹配,则确定可执行文件使用了已知密码学算法,并将涉及密码学算法的代码位置信息传送给可执行文件调试和信息提取模块,以便其能识别加密算法和数据。\n[0024] 本发明中,可执行文件类型信息识别模块、可执行文件反保护模块、可执行文件代码分析模块三者互为先后,顺序执行,连接为一个处理链,同时,该处理链又作为可执行文件调试与信息提取模块的基础,为调试和信息提取提供能够处理的文件格式和信息,密码学分析模块作为功能上独立的模块,为信息提取提供密码学方面的参考。\n[0025] 与现有技术相比,本发明具有如下有益效果:\n[0026] 1、本发明有效地从windows平台可执行文件中提取固化的数据信息,包括加密存贮和明文存贮的信息,同时能够有效地确定此类信息的作用,从而在软件安全性分析和计算机取证中给出了一类重要依据;\n[0027] 2、本发明通过将软件视为动态程序过程/进程,能够解决分析中二进制代码信息量缺失的困难问题,获取更丰富的信息量,使得分析工作更为明确;\n[0028] 3、本发明基于程序行为和动态调试的分析模块组合,能够准确地找到隐藏数据和程序代码的相关关系,同时排除和待分析数据不相关的代码部分,不仅实现了隐藏数据的搜索,同时减少需要分析的内容;\n[0029] 4、本发明应用密码学相关知识对程序加密解密代码进行分析,能够有效地处理加密数据给分析和识别带来的困难,将加密数据和普通数据的提取统一实现在本技术方案之中;\n[0030] 5、本发明可以有效地区分程序运行时的数据信息类型,提取和分析固定在程序中的数据信息,给出其产生方法和原始信息。\n[0031] 本发明对于软件运行期产生的数据,能够100%地确定其来源和性质,对于固化在软件内部的数据,能够100%的提取数据并给出其原始格式,同时,若数据以加密变换的形式进行保护,本发明能够高效地还原数据,尤其是以使用密码学算法进行保护的软件,本发明能够给出密钥来源和密码学算法的实现。\n具体实施方式\n[0032] 下面对本发明的实施例作详细说明:本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和过程,但本发明的保护范围不限于下述的实施例。\n[0033] 本实施例中,Windows应用程序可执行文件是指基于Intel x86架构下,Microsoft Windows平台下一类可运行二进制代码集合文件,包括32位PE(Portable Executable)可执行文件(EXE格式)、动态链接库文件(DLL格式),驱动文件(SYS格式),静态链接库文件(LIB格式)和可执行控件(OCX格式)。鉴于公知的原因,本实施例中不特别地描述可执行文件的结构、加载和执行机制等方面的内容,也不特别地描述已公开的逆向工程、调试等技术,以及一些公开的密码学算法及其应用。同样,对所使用的某些术语、名词和表达方式等不作显式的定义或说明,比如:反汇编(Disassembly)、调试(Debugging)、加壳(Packing),脱壳(Unpacking)、代码混淆(Obfuscation),密码学算法特征值、密码学算法测试向量等等。\n[0034] 对于Windows应用程序而言,通常指其运行在Windows XP操作系统下,而对于Windows2000,Windows2003和Windows Vista、Windows2008,软件运行机理是相同的,因此本实施例系统直接应用于这些操作系统环境下。而对于Windows95/98/ME操作系统,本实施例系统依然适用,但使用的工具有所不同,本实施例中如无特殊说明,讨论的具体实施方式不针对Windows95/98/ME操作系统运行环境。\n[0035] 本实施例包括:可执行文件类型信息识别模块、可执行文件反保护模块、可执行文件代码分析模块、可执行文件调试与信息提取模块、密码学分析模块,其中:\n[0036] 可执行文件类型信息识别模块对可执行文件的格式、开发语言种类、保护类型进行识别,如果可执行文件受保护,选择可执行文件反保护模块,否则直接选择可执行文件代码分析模块;\n[0037] 可执行文件反保护模块负责对受保护代码加壳保护的可执行文件进行反保护,对受保护的可执行文件进行信息还原,使其呈现出普通的未受保护形态,并将反保护后的可执行文件输出到可执行文件代码分析模块;\n[0038] 可执行文件代码分析模块以未被保护的可执行文件或者可执行文件反保护模块输出的可执行文件作为输入,对其进行反汇编、反编译,得到汇编和高级语言代码,并给出结构和逻辑信息,并将经过分析处理后的可执行文件传输给可执行文件调试与信息提取模块;\n[0039] 密码学分析模块负责在可执行文件中有加密存储的固定的数据信息时,对可执行文件中采用的密码学算法进行识别,并将涉及密码学算法的代码位置信息传送给可执行文件调试和信息提取模块,进行信息提取;\n[0040] 可执行文件调试与信息提取模块加载并运行可执行文件代码分析模块或密码分析模块传输过来的可执行文件,在其运行的中间过程中查看运行期间程序内部状态,从而提取信息。\n[0041] 所述可执行文件类型信息识别模块,对可执行文件的如下信息进行识别:可执行文件的格式(可分为exe、dll、lib、sys、ocx等格式)、开发语言种类(可分为汇编、VC++、BC++、Delphi、VB、.Net等开发语言)、保护类型分析,其中,保护类型分为未受保护和受保护两种类型,受保护类型中主要分为压缩保护和加密保护两大类,可执行文件类型信息识别模块根据可执行文件定义的结构、定位程序的入口点,获取10-20字节代码,并调用特征模式库进行匹配,若模块分析机制判定可执行文件为未受保护的类型,则转入可执行文件代码分析模块,若模块分析机制判定可执行文件为受保护类型,则转入可执行文件反保护模块。\n[0042] 所述可执行文件反保护模块,包括:代码保护去除子模块和代码修复子模块,其中:\n[0043] 代码保护去除模块对受到代码保护的可执行文件,去除其正常运行代码之外存在的用于可执行文件保护的代码层,自动加载该可执行文件,从内存中获取可执行文件运行期的代码,此时用于保护的代码层已经执行完毕,获得并保存正常运行代码,并将其传输给代码修复子模块;\n[0044] 代码修复子模块针对代码保护去除子模块的输出数据,此时输出数据为软件的正常运行代码,但是程序结构受到破坏,代码修复子模块将根据原始可执行文件的信息,为其补充程序结构信息,并修复其中受到破坏的导入表结构,使得修复后的数据成为可以正常运行的可执行文件;\n[0045] 在上述两个子模块运行完毕后,将结果重新传入可执行文件类型信息识别模块,若仍然存在保护机制,则再次通过可执行文件反保护模块进行处理,若已经不存在保护机制,则将其传入可执行文件代码分析模块,进行进一步的分析。\n[0046] 所述可执行文件代码分析模块,包括:通用代码分析子模块和专有代码分析子模块,其中:\n[0047] 通用代码分析子模块针对所有可执行文件二进制代码进行分析,通过调用反汇编和反编译工具,给出可执行文件的反汇编代码信息和程序内部基本结构,并给出一部分静态内部信息;\n[0048] 专有代码分析子模块根据可执行文件类型信息识别模块的分析结果决定是否执行,如果可执行文件中有特殊的开发语言种类特征,则在通用代码分析子模块运行之后执行进行有针对性的信息识别,其中包括对Delphi、VB和.Net语言开发编译的可执行文件的识别,通过该开发语言编译特点,从中解码按照该语言编译编码的信息,从而比通用代码分析获得更多的信息。特别地,可执行文件代码分析模块集成了一系列分析工具,对如下情况分别采用不同的工具:对原生Win32程序进行静态分析,选用IDA pro或者win32DASM软件工具;动态调试选用ollydbg或者windbg软件工具;对.net平台应用程序进行静态分析,选用ILDASM软件工具;对java平台应用程序进行静态分析,选用DJ Decompiler软件工具;对Delphi应用程序进行静态分析,选用DeDe软件工具;对VBasic应用程序进行静态分析,选用VB Decompi ler软件工具。\n[0049] 所述可执行文件调试与信息提取模块,针对未经保护或已经进行反保护处理的可执行文件,模块在运行过程中通过外部记录的方式收集其输入输出数据,对于其中需要判定性质的部分进行筛选,然后通过调试器加载可执行文件运行,记录整个运行过程中,内存中代码、寄存器信息、内存信息、输入输出数据及其变化的完整集合,在数据的完整集合中,使用Cheat Engine软件工具搜索,找到信息在内存中存放的地址,然后在调试器中对此地址设置断点,再次利用调试器加载重新运行程序,令程序在产生或者访问数据时产生中断并由调试器暂停,此时可以得到产生或者访问信息的相应代码,同时,根据此时堆栈调用情况,分析出相应代码被调用的层次关系;找到和需要判定性质的数据匹配的内容,然后根据代码分析模块对产生或者访问信息的相应代码进行处理给出的结果,判定出哪些指令和数据处理有关,通过程序的运行流程和内存地址的变化,判断需要判定性质的数据的来源,对于来自于可执行文件本身的数据,将其提取出来。若数据并非以明文形式直接存放在可执行文件中,存在两种情况,数据是从外部接收或者数据以加密变换的形式存放在可执行文件中,依照以下方法区分这两种情况:按照前述代码定位方法,用调试器加载程序并找到产生或访问数据信息的代码位置,并找到函数调用链,此函数调用链可能为Function A->FunctionB->Function C->...->Function D,其中每一个函数均在前一个函数中被调用,从调用链的最前端开始进行单步调试,在函数体中遇到函数调用时不跟踪进入,除非此函数调用为调用链中的函数。依此方法单步运行,直到找到数据生成的代码行,根据代码分析模块的分析结果,判定数据信息来自外部接收或内部固化生成。若数据以加密变换的形式存放在可执行文件中,可以观察运行时其在内存中的变化情况,找到明文的来源,并依照上述方法判断明文的来源是否固化在可执行文件中,若是固化在可执行文件中,则可以确定数据的来源并进行提取。\n[0050] 所述密码学分析模块,针对可执行文件中加密存储的固定的数据信息,这些数据存储在文件中,并使用密码学算法进行加密解密,使其在可执行文件调试与信息提取模块处理过程中不可辨识,然而确实是固定在可执行文件内部的数据。密码学分析模块的功能是分析可执行文件中可能使用的加密解密算法,确定其影响的数据范围,同时给出可执行文件可能使用的解密算法和密钥;模块能够分析可执行文件二进制代码中包含的数据常量,与已知密码学算法特征值进行匹配(常见的公开密码学算法中,AES,DES,IDEA等均有特殊的常数值),同时导入已知密码学算法的标准测试向量,对涉及加密解密的代码进行输入输出测试,利用调试器,在运行加密解密算法时修改输入数据和密钥值,将其更改为标准的测试向量和测试密钥,观察输出是否和此类算法所给出的测试标准相同将代码输出数据和标准输出数据进行对比。若特征值和代码输出数据均与已知密码学算法的特征值和标准输出数据匹配,则确定可执行文件使用了已知密码学算法,模块将涉及密码学算法的代码位置信息传送给可执行文件调试和信息提取模块,以便其能识别加密算法和数据。\n[0051] 本实施例应用于对自由门软件(FreeGate)6.62(2007年11月19日发布)进行信息提取,自由门软件主要功能是互联网加密通讯,经过使用后发现其中存在大量DNS查询请求,为确定此类请求的数据,对其进行数据信息的提取,过程具体如下:\n[0052] 首先,通过可执行文件类型信息识别模块对软件进行开发语言和保护类型识别,分析结果显示自由门软件被PECompact加壳保护。可执行文件类型信息识别模块自动将其转入可执行文件反保护模块,可执行文件反保护模块可以自动处理PECompact加壳保护技术,将其保护代码去除,得到新的可执行文件并送回可执行文件类型信息识别模块再次进行分析,分析结果显示自由门软件已经被解除了加壳保护,并显示自由门软件的开发语言是Visual C++6.0。此时可执行文件被转入可执行文件代码分析模块进行分析,根据可执行文件的开发格式,对其进行静态分析,使用IDA pro软件工具。分析结果表明可执行文件基于MFC框架结构,具有多个线程函数体,并且使用了Winsock2 API进行网络通讯。\n[0053] 其次,通过可执行文件调试与信息提取模块运行可执行文件并观察其输入输出数据,可以发现,程序进行了大量DNS查询,其中包括了以下一些域名:\n[0054] w61.ziyoulonglive.com w62.ziyoulonglive.com[0055] w63.ziyoulonglive.com w64.ziyoulonglive.com[0056] w65.ziyoulonglive.com\n[0057] 为了确定此类域名的数据来源,使用Cheat Engine工具搜索内存数据,可以发现内存地址0x00436CA0附近发现了数据信息,模块接下来使用ol lydbg调试器加载自由门软件可执行文件并在地址0x00436CA0上设置断点,同时运行可执行文件,当产生DNS请求时,在指令0040FAB7 TEST DL,DL处触发了断点,使得程序暂停。查看堆栈中函数调用链情况为:\n[0058] 调用堆栈:线程00000D08\n[0059] \n地址 堆栈 函数过程/参数 调用来自\n0100FEB0 0040F94E 0040F9E0 662.0040F949\n0100FEF0 0040F81D 0040F880 662.0040F818\n0100FF0C 0040F78C 0040F7B0 662.0040F787\n[0060] 从调用链中可以看到,函数调用关系为\n[0061] 0040F7B0->0040F880->0040F9E0\n[0062] 从函数调用链开始单步运行,到代码段\n[0063] 0040F939|.8D80 A06C4300||LEA EAX,DWORD PTR DS:[EAX+436CA0][0064] 0040F93F|.52 ||PUSH EDX\n[0065] 0040F940|.8B5424 34 ||MOV EDX,DWORD PTR SS:[ESP+34][0066] 0040F944|.50 ||PUSH EAX
法律信息
- 2012-04-25
- 2009-05-20
- 2009-03-25
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2006-08-16
|
2006-03-13
| | |
2
| |
1999-01-27
|
1998-07-16
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |