CN101393521A - Windows应用程序内部固化数据的提取系统 - Google Patents
Windows应用程序内部固化数据的提取系统 Download PDFInfo
- Publication number
- CN101393521A CN101393521A CNA2008102026439A CN200810202643A CN101393521A CN 101393521 A CN101393521 A CN 101393521A CN A2008102026439 A CNA2008102026439 A CN A2008102026439A CN 200810202643 A CN200810202643 A CN 200810202643A CN 101393521 A CN101393521 A CN 101393521A
- Authority
- CN
- China
- Prior art keywords
- executable file
- code
- information
- protection
- data
- 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.)
- Granted
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
一种软件分析和信息安全技术领域的Windows应用程序内部固化数据的提取系统,可执行文件类型信息识别模块对可执行文件的格式、开发语言种类、保护类型进行识别;可执行文件反保护模块负责对受保护代码加壳保护的可执行文件进行反保护;可执行文件代码分析模块对可执行文件进行反汇编、反编译,得到汇编和高级语言代码,并给出结构和逻辑信息;密码学分析模块负责在可执行文件中有加密存储的固定的数据信息时,对可执行文件中采用的密码学算法进行识别;可执行文件调试与信息提取模块在其运行的中间过程中查看运行期间程序内部状态,从而提取信息。本发明能有效地提取和分析固定在程序中的数据信息,给出其产生方法和原始信息。
Description
技术领域
本发明涉及一种信息处理技术领域的系统,具体是一种Windows应用程序内部固化数据的提取系统。
背景技术
软件产品通常是指编译后可执行的静态代码指令集合的抽象,而实际运行中,软件被加载到内存中,成为程序体或进程体,其中不仅包括静态的代码指令,还包括了动态的数据信息。在程序运行时,存在多种类型的数据信息,可能为程序接受外部输入的信息,可能为程序内部固定的信息,可能为程序以某种变换方式将输入变换为输出的信息。通常情况下,软件分析只能从外部视角观察程序的数据信息,不能判定信息的类型,也不能确定是否观察到所有的信息。
应用程序内部的固定数据信息,可以视为作为程序本身的性质,一方面,其在程序的正常运行中提供了数据源,另一方面,其在程序的安全分析和性质判定中具有重要的参考价值。如白盒密码学软件中的密钥信息、恶意软件中的IP地址信息等,都能为软件分析和理解提供重要的分析线索。此外,程序内部固化数据还是计算机取证的重要依据。
应用程序内部的固定数据信息,具有如下性质:首先,对于相同的软件产品拷贝,在不同的计算机上这些数据信息是不变的;其次,此类数据不依赖外部输入;第三,此类信息可能以明文或加密的形式存放在软件的发行文件中,但是如果以加密形式存放,其解密还原必须不依赖第三方而完成,满足软件自身即可运行的原子性。
对于应用程序的内部数据信息的分析,传统的黑盒分析方法无法应用,必须采用白盒分析方法对其进行分析。通常情况下,需要分析的软件并未提供高级语言的源代码,只有二进制编译的发布文件,存在若干技术/工具,可以对二进制编译形式的软件代码进行分析,例如DataRescue公司的IDA pro静态反汇编分析软件等,然而此类工具的局限性在于只能分析静态数据,对于软件的动态数据缺乏分析能力,并且无法提取加密形式的隐藏信息。尤其是涉及到密码学算法的应用,传统的分析方法难以处理加密数据的识别和还原。目前国内外软件分析的技术研究集中在对于代码的反汇编和反编译方面,主要针对代码的结构识别、软件运行流程和软件抽象重构造,而对于软件中包含数据的识别工作尚未有通用的方法。
经对现有技术的文献检索发现,Mihai Christodorescu等在the 6th ACMSIGPLAN-SIGSOFT workshop on Program analysis for software tools andengineering(第六届ACM软件工具和工程程序分析会议)上发表的StringAnalysis for x86 Binaries(x86二进制代码的字符串分析),文章中提出了一种x86体系下可执行的二进制代码中字符串的提取和恢复方法,该方法是一种针对二进制代码的静态分析技术,基于A.S.Christensen在the 10thInternational Static Analysis Symposium(第10届国际静态分析讨论学术交流会)上发表的文章Precise analysis of string expressions(字符串表达式的精确分析)中所用到的字符串流图(string flow graph)技术。该方法将二进制代码进行了建模,使得其能够构造出字符串流图,在此基础之上得到字符串信息的集合。该文中提出的方法基于静态代码分析,没有对运行期信息进行分析,其不足之处在于静态分析不能完全获得程序运行时产生的所有数据信息,尤其是经过加密变换存储的数据信息。
发明内容
本发明的目的是针对上述现有技术的不足,提出了一种Windows应用程序内部固化数据的提取系统,本发明不依赖高级语言源代码,区分Windows应用程序运行时产生的数据信息类型,从中提取属于应用程序本身固化的数据(包括明文存储和加密变换存储),准确高效地提取其原始状态和产生方法。
本发明是通过如下技术方案实现的,本发明包括:可执行文件类型信息识别模块、可执行文件反保护模块、可执行文件代码分析模块、可执行文件调试与信息提取模块、密码学分析模块,其中:
可执行文件类型信息识别模块对可执行文件的格式、开发语言种类、保护类型进行识别,如果可执行文件受保护,选择可执行文件反保护模块,否则直接选择可执行文件代码分析模块;
可执行文件反保护模块负责对受保护代码加壳保护的可执行文件进行反保护,对受保护的可执行文件进行信息还原,使其呈现出普通的未受保护形态,并将反保护后的可执行文件输出到可执行文件代码分析模块;
可执行文件代码分析模块以未被保护的可执行文件或者可执行文件反保护模块输出的可执行文件作为输入,对其进行反汇编、反编译,得到汇编和高级语言代码,并给出结构和逻辑信息,并将经过分析处理后的可执行文件传输给可执行文件调试与信息提取模块;
密码学分析模块负责在可执行文件中有加密存储的固定的数据信息时,对可执行文件中采用的密码学算法进行识别,并将涉及密码学算法的代码位置信息传送给可执行文件调试和信息提取模块,进行信息提取;
可执行文件调试与信息提取模块加载并运行可执行文件代码分析模块或密码分析模块传输过来的可执行文件,在其运行的中间过程中查看运行期间程序内部状态,从而提取信息。
所述可执行文件类型信息识别模块,对可执行文件的如下信息进行识别:可执行文件的格式(可分为exe、dll、lib、sys、ocx等格式)、开发语言种类(可分为汇编、VC++、BC++、Delphi、VB、.Net等开发语言)、保护类型分析,其中,保护类型分为未受保护和受保护两种类型,受保护类型中主要分为压缩保护和加密保护两大类,可执行文件类型信息识别模块根据可执行文件定义的结构、定位程序的入口点,获取10-20字节代码,并调用特征模式库进行匹配,若模块分析机制判定可执行文件为未受保护的类型,则转入可执行文件代码分析模块,若模块分析机制判定可执行文件为受保护类型,则转入可执行文件反保护模块。
所述可执行文件反保护模块,包括:代码保护去除子模块和代码修复子模块,其中:
代码保护去除模块对受到代码保护的可执行文件,去除其正常运行代码之外存在的用于可执行文件保护的代码层,自动加载该可执行文件,从内存中获取可执行文件运行期的代码,此时用于保护的代码层已经执行完毕,获得并保存正常运行代码,并将其传输给代码修复子模块;
代码修复子模块针对代码保护去除子模块的输出数据,此时输出数据为软件的正常运行代码,但是程序结构受到破坏,代码修复子模块将根据原始可执行文件的信息,为其补充程序结构信息,并修复其中受到破坏的导入表结构,使得修复后的数据成为可以正常运行的可执行文件;
在上述两个子模块运行完毕后,将结果重新传入可执行文件类型信息识别模块,若仍然存在保护机制,则再次通过可执行文件反保护模块进行处理,若已经不存在保护机制,则将其传入可执行文件代码分析模块,进行进一步的分析。
所述可执行文件代码分析模块,包括:通用代码分析子模块和专有代码分析子模块,其中:
通用代码分析子模块针对所有可执行文件二进制代码进行分析,通过调用反汇编和反编译工具,给出可执行文件的反汇编代码信息和程序内部基本结构,并给出一部分静态内部信息;
专有代码分析子模块根据可执行文件类型信息识别模块的分析结果决定是否执行,如果可执行文件中有特殊的开发语言种类特征,则在通用代码分析子模块运行之后执行进行有针对性的信息识别,其中包括对Delphi、VB和.Net语言开发编译的可执行文件的识别,通过该开发语言编译特点,从中解码按照该语言编译编码的信息,从而比通用代码分析获得更多的信息。
所述可执行文件调试与信息提取模块,其针对未经保护或已经进行反保护处理的可执行文件,在运行过程中通过外部记录的方式收集其输入输出数据,对于其中需要判定性质的部分进行筛选,然后通过调试器加载可执行文件运行,记录整个运行过程中,内存中代码、寄存器信息、内存信息、输入输出数据及其变化的完整集合,在数据的完整集合中,找到和需要判定性质的数据匹配的内容,然后分析所有和数据处理有关的指令,通过程序的运行流程和内存地址的变化,判断需要判定性质的数据的来源,对于来自于可执行文件本身的数据,将其提取出来。
所述密码学分析模块,其对可执行文件中可能使用的加密解密算法进行识别,确定其影响的数据范围,同时给出可执行文件可能使用的解密算法和密钥,并分析可执行文件二进制代码中包含的数据常量,与已知密码学算法特征值进行匹配,同时导入已知密码学算法的标准测试向量,对涉及加密解密的代码进行输入输出测试,将代码输出数据和标准输出数据进行对比,若特征值和代码输出数据均与已知密码学算法的特征值和标准输出数据匹配,则确定可执行文件使用了已知密码学算法,并将涉及密码学算法的代码位置信息传送给可执行文件调试和信息提取模块,以便其能识别加密算法和数据。
本发明中,可执行文件类型信息识别模块、可执行文件反保护模块、可执行文件代码分析模块三者互为先后,顺序执行,连接为一个处理链,同时,该处理链又作为可执行文件调试与信息提取模块的基础,为调试和信息提取提供能够处理的文件格式和信息,密码学分析模块作为功能上独立的模块,为信息提取提供密码学方面的参考。
与现有技术相比,本发明具有如下有益效果:
1、本发明有效地从windows平台可执行文件中提取固化的数据信息,包括加密存贮和明文存贮的信息,同时能够有效地确定此类信息的作用,从而在软件安全性分析和计算机取证中给出了一类重要依据;
2、本发明通过将软件视为动态程序过程/进程,能够解决分析中二进制代码信息量缺失的困难问题,获取更丰富的信息量,使得分析工作更为明确;
3、本发明基于程序行为和动态调试的分析模块组合,能够准确地找到隐藏数据和程序代码的相关关系,同时排除和待分析数据不相关的代码部分,不仅实现了隐藏数据的搜索,同时减少需要分析的内容;
4、本发明应用密码学相关知识对程序加密解密代码进行分析,能够有效地处理加密数据给分析和识别带来的困难,将加密数据和普通数据的提取统一实现在本技术方案之中;
5、本发明可以有效地区分程序运行时的数据信息类型,提取和分析固定在程序中的数据信息,给出其产生方法和原始信息。
本发明对于软件运行期产生的数据,能够100%地确定其来源和性质,对于固化在软件内部的数据,能够100%的提取数据并给出其原始格式,同时,若数据以加密变换的形式进行保护,本发明能够高效地还原数据,尤其是以使用密码学算法进行保护的软件,本发明能够给出密钥来源和密码学算法的实现。
具体实施方式
下面对本发明的实施例作详细说明:本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和过程,但本发明的保护范围不限于下述的实施例。
本实施例中,Windows应用程序可执行文件是指基于Intel x86架构下,Microsoft Windows平台下一类可运行二进制代码集合文件,包括32位PE(Portable Executable)可执行文件(EXE格式)、动态链接库文件(DLL格式),驱动文件(SYS格式),静态链接库文件(LIB格式)和可执行控件(OCX格式)。鉴于公知的原因,本实施例中不特别地描述可执行文件的结构、加载和执行机制等方面的内容,也不特别地描述已公开的逆向工程、调试等技术,以及一些公开的密码学算法及其应用。同样,对所使用的某些术语、名词和表达方式等不作显式的定义或说明,比如:反汇编(Disassembly)、调试(Debugging)、加壳(Packing),脱壳(Unpacking)、代码混淆(Obfuscation),密码学算法特征值、密码学算法测试向量等等。
对于Windows应用程序而言,通常指其运行在Windows XP操作系统下,而对于Windows 2000,Windows 2003和Windows Vista、Windows 2008,软件运行机理是相同的,因此本实施例系统直接应用于这些操作系统环境下。而对于Windows95/98/ME操作系统,本实施例系统依然适用,但使用的工具有所不同,本实施例中如无特殊说明,讨论的具体实施方式不针对Windows95/98/ME操作系统运行环境。
本实施例包括:可执行文件类型信息识别模块、可执行文件反保护模块、可执行文件代码分析模块、可执行文件调试与信息提取模块、密码学分析模块,其中:
可执行文件类型信息识别模块对可执行文件的格式、开发语言种类、保护类型进行识别,如果可执行文件受保护,选择可执行文件反保护模块,否则直接选择可执行文件代码分析模块;
可执行文件反保护模块负责对受保护代码加壳保护的可执行文件进行反保护,对受保护的可执行文件进行信息还原,使其呈现出普通的未受保护形态,并将反保护后的可执行文件输出到可执行文件代码分析模块;
可执行文件代码分析模块以未被保护的可执行文件或者可执行文件反保护模块输出的可执行文件作为输入,对其进行反汇编、反编译,得到汇编和高级语言代码,并给出结构和逻辑信息,并将经过分析处理后的可执行文件传输给可执行文件调试与信息提取模块;
密码学分析模块负责在可执行文件中有加密存储的固定的数据信息时,对可执行文件中采用的密码学算法进行识别,并将涉及密码学算法的代码位置信息传送给可执行文件调试和信息提取模块,进行信息提取;
可执行文件调试与信息提取模块加载并运行可执行文件代码分析模块或密码分析模块传输过来的可执行文件,在其运行的中间过程中查看运行期间程序内部状态,从而提取信息。
所述可执行文件类型信息识别模块,对可执行文件的如下信息进行识别:可执行文件的格式(可分为exe、dll、lib、sys、ocx等格式)、开发语言种类(可分为汇编、VC++、BC++、Delphi、VB、.Net等开发语言)、保护类型分析,其中,保护类型分为未受保护和受保护两种类型,受保护类型中主要分为压缩保护和加密保护两大类,可执行文件类型信息识别模块根据可执行文件定义的结构、定位程序的入口点,获取10-20字节代码,并调用特征模式库进行匹配,若模块分析机制判定可执行文件为未受保护的类型,则转入可执行文件代码分析模块,若模块分析机制判定可执行文件为受保护类型,则转入可执行文件反保护模块。
所述可执行文件反保护模块,包括:代码保护去除子模块和代码修复子模块,其中:
代码保护去除模块对受到代码保护的可执行文件,去除其正常运行代码之外存在的用于可执行文件保护的代码层,自动加载该可执行文件,从内存中获取可执行文件运行期的代码,此时用于保护的代码层已经执行完毕,获得并保存正常运行代码,并将其传输给代码修复子模块;
代码修复子模块针对代码保护去除子模块的输出数据,此时输出数据为软件的正常运行代码,但是程序结构受到破坏,代码修复子模块将根据原始可执行文件的信息,为其补充程序结构信息,并修复其中受到破坏的导入表结构,使得修复后的数据成为可以正常运行的可执行文件;
在上述两个子模块运行完毕后,将结果重新传入可执行文件类型信息识别模块,若仍然存在保护机制,则再次通过可执行文件反保护模块进行处理,若已经不存在保护机制,则将其传入可执行文件代码分析模块,进行进一步的分析。
所述可执行文件代码分析模块,包括:通用代码分析子模块和专有代码分析子模块,其中:
通用代码分析子模块针对所有可执行文件二进制代码进行分析,通过调用反汇编和反编译工具,给出可执行文件的反汇编代码信息和程序内部基本结构,并给出一部分静态内部信息;
专有代码分析子模块根据可执行文件类型信息识别模块的分析结果决定是否执行,如果可执行文件中有特殊的开发语言种类特征,则在通用代码分析子模块运行之后执行进行有针对性的信息识别,其中包括对Delphi、VB和.Net语言开发编译的可执行文件的识别,通过该开发语言编译特点,从中解码按照该语言编译编码的信息,从而比通用代码分析获得更多的信息。特别地,可执行文件代码分析模块集成了一系列分析工具,对如下情况分别采用不同的工具:对原生Win32程序进行静态分析,选用IDA pro或者win32DASM软件工具;动态调试选用ollydbg或者windbg软件工具;对.net平台应用程序进行静态分析,选用ILDASM软件工具;对java平台应用程序进行静态分析,选用DJ Decompiler软件工具;对Delphi应用程序进行静态分析,选用DeDe软件工具;对VBasic应用程序进行静态分析,选用VB Decompiler软件工具。
所述可执行文件调试与信息提取模块,针对未经保护或已经进行反保护处理的可执行文件,模块在运行过程中通过外部记录的方式收集其输入输出数据,对于其中需要判定性质的部分进行筛选,然后通过调试器加载可执行文件运行,记录整个运行过程中,内存中代码、寄存器信息、内存信息、输入输出数据及其变化的完整集合,在数据的完整集合中,使用Cheat Engine软件工具搜索,找到信息在内存中存放的地址,然后在调试器中对此地址设置断点,再次利用调试器加载重新运行程序,令程序在产生或者访问数据时产生中断并由调试器暂停,此时可以得到产生或者访问信息的相应代码,同时,根据此时堆栈调用情况,分析出相应代码被调用的层次关系;找到和需要判定性质的数据匹配的内容,然后根据代码分析模块对产生或者访问信息的相应代码进行处理给出的结果,判定出哪些指令和数据处理有关,通过程序的运行流程和内存地址的变化,判断需要判定性质的数据的来源,对于来自于可执行文件本身的数据,将其提取出来。若数据并非以明文形式直接存放在可执行文件中,存在两种情况,数据是从外部接收或者数据以加密变换的形式存放在可执行文件中,依照以下方法区分这两种情况:按照前述代码定位方法,用调试器加载程序并找到产生或访问数据信息的代码位置,并找到函数调用链,此函数调用链可能为Function A->FunctionB->Function C->...->Function D,其中每一个函数均在前一个函数中被调用,从调用链的最前端开始进行单步调试,在函数体中遇到函数调用时不跟踪进入,除非此函数调用为调用链中的函数。依此方法单步运行,直到找到数据生成的代码行,根据代码分析模块的分析结果,判定数据信息来自外部接收或内部固化生成。若数据以加密变换的形式存放在可执行文件中,可以观察运行时其在内存中的变化情况,找到明文的来源,并依照上述方法判断明文的来源是否固化在可执行文件中,若是固化在可执行文件中,则可以确定数据的来源并进行提取。
所述密码学分析模块,针对可执行文件中加密存储的固定的数据信息,这些数据存储在文件中,并使用密码学算法进行加密解密,使其在可执行文件调试与信息提取模块处理过程中不可辨识,然而确实是固定在可执行文件内部的数据。密码学分析模块的功能是分析可执行文件中可能使用的加密解密算法,确定其影响的数据范围,同时给出可执行文件可能使用的解密算法和密钥;模块能够分析可执行文件二进制代码中包含的数据常量,与已知密码学算法特征值进行匹配(常见的公开密码学算法中,AES,DES,IDEA等均有特殊的常数值),同时导入已知密码学算法的标准测试向量,对涉及加密解密的代码进行输入输出测试,利用调试器,在运行加密解密算法时修改输入数据和密钥值,将其更改为标准的测试向量和测试密钥,观察输出是否和此类算法所给出的测试标准相同将代码输出数据和标准输出数据进行对比。若特征值和代码输出数据均与已知密码学算法的特征值和标准输出数据匹配,则确定可执行文件使用了已知密码学算法,模块将涉及密码学算法的代码位置信息传送给可执行文件调试和信息提取模块,以便其能识别加密算法和数据。
本实施例应用于对自由门软件(FreeGate)6.62(2007年11月19日发布)进行信息提取,自由门软件主要功能是互联网加密通讯,经过使用后发现其中存在大量DNS查询请求,为确定此类请求的数据,对其进行数据信息的提取,过程具体如下:
首先,通过可执行文件类型信息识别模块对软件进行开发语言和保护类型识别,分析结果显示自由门软件被PECompact加壳保护。可执行文件类型信息识别模块自动将其转入可执行文件反保护模块,可执行文件反保护模块可以自动处理PECompact加壳保护技术,将其保护代码去除,得到新的可执行文件并送回可执行文件类型信息识别模块再次进行分析,分析结果显示自由门软件已经被解除了加壳保护,并显示自由门软件的开发语言是Visual C++ 6.0。此时可执行文件被转入可执行文件代码分析模块进行分析,根据可执行文件的开发格式,对其进行静态分析,使用IDA pro软件工具。分析结果表明可执行文件基于MFC框架结构,具有多个线程函数体,并且使用了Winsock2 API进行网络通讯。
其次,通过可执行文件调试与信息提取模块运行可执行文件并观察其输入输出数据,可以发现,程序进行了大量DNS查询,其中包括了以下一些域名:
w61.ziyoulonglive.com w62.ziyoulonglive.com
w63.ziyoulonglive.com w64.ziyoulonglive.com
w65.ziyoulonglive.com
为了确定此类域名的数据来源,使用Cheat Engine工具搜索内存数据,可以发现内存地址0x00436CA0附近发现了数据信息,模块接下来使用ollydbg调试器加载自由门软件可执行文件并在地址0x00436CA0上设置断点,同时运行可执行文件,当产生DNS请求时,在指令0040FAB7 TEST DL,DL处触发了断点,使得程序暂停。查看堆栈中函数调用链情况为:
调用堆栈: 线程 00000D08
地址 | 堆栈 | 函数过程/参数 | 调用来自 |
0100FEB0 | 0040F94E | 0040F9E0 | 662.0040F949 |
0100FEF0 | 0040F81D | 0040F880 | 662.0040F818 |
0100FF0C | 0040F78C | 0040F7B0 | 662.0040F787 |
从调用链中可以看到,函数调用关系为
0040F7B0->0040F880->0040F9E0
从函数调用链开始单步运行,到代码段
0040F939 |. 8D80 A06C4300 ||LEA EAX,DWORD PTR DS:[EAX+436CA0]
0040F93F |. 52 ||PUSH EDX
0040F940 |. 8B5424 34 ||MOV EDX,DWORD PTR SS:[ESP+34]
0040F944 |. 50 ||PUSH EAX
0040F945 |. 51 ||PUSH ECX
0040F946 |. 52 ||PUSH EDX
0040F947 |. 8BCD ||MOV ECX,EBP
0040F949 |. E8 92000000 ||CALL 662.0040F9E0
发现代码0040F939 LEA EAX,DWORD PTR DS:[EAX+436CA0]令EAX寄存器
的数值成为指向数据的指针。因此,数据来自0x00436CA0,而该地址的数据直
接来自于可执行文件的数据段中,因此可以确定
w61.ziyoulonglive.com w62.ziyoulonglive.com
w63.ziyoulonglive.com w64.ziyoulonglive.com
w65.ziyoulonglive.com
为程序内置的数据。
本实施例对于软件运行期产生的数据,能够100%地确定其来源和性质,对于固化在软件内部的数据,能够100%的提取数据并给出其原始格式,同时,若数据以加密变换的形式进行保护,本实施例能够高效地还原数据,尤其是以使用密码学算法进行保护的软件,能够给出密钥来源和密码学算法的实现。
Claims (6)
1、一种Windows应用程序内部固化数据提取系统,其特征在于,包括:可执行文件类型信息识别模块、可执行文件反保护模块、可执行文件代码分析模块、可执行文件调试与信息提取模块、密码学分析模块,其中:
可执行文件类型信息识别模块对可执行文件的格式、开发语言种类、保护类型进行识别,如果可执行文件受保护,选择可执行文件反保护模块,否则直接选择可执行文件代码分析模块;
可执行文件反保护模块负责对受保护代码加壳保护的可执行文件进行反保护,对受保护的可执行文件进行信息还原,使其呈现出普通的未受保护形态,并将反保护后的可执行文件输出到可执行文件代码分析模块;
可执行文件代码分析模块以未被保护的可执行文件或者可执行文件反保护模块输出的可执行文件作为输入,对其进行反汇编、反编译,得到汇编和高级语言代码,并给出结构和逻辑信息,并将经过分析处理后的可执行文件传输给可执行文件调试与信息提取模块;
密码学分析模块负责在可执行文件中有加密存储的固定的数据信息时,对可执行文件中采用的密码学算法进行识别,并将涉及密码学算法的代码位置信息传送给可执行文件调试和信息提取模块,进行信息提取;
可执行文件调试与信息提取模块加载并运行可执行文件代码分析模块或密码分析模块传输过来的可执行文件,在其运行的中间过程中查看运行期间程序内部状态,从而提取信息。
2、根据权利要求1所述的Windows应用程序内部固化数据提取系统,其特征是,所述可执行文件类型信息识别模块,对可执行文件的如下信息进行识别:可执行文件的格式、开发语言种类、保护类型分析,其中,保护类型分为未受保护和受保护两种类型,受保护类型中主要分为压缩保护和加密保护两大类,可执行文件类型信息识别模块根据可执行文件定义的结构、定位程序的入口点,获取10-20字节代码,并调用特征模式库进行匹配,若模块分析机制判定可执行文件为未受保护的类型,则转入可执行文件代码分析模块,若模块分析机制判定可执行文件为受保护类型,则转入可执行文件反保护模块。
3、根据权利要求1所述的Windows应用程序内部固化数据提取系统,其特征是,所述可执行文件反保护模块,包括:代码保护去除子模块和代码修复子模块,其中:
代码保护去除模块对受到代码保护的可执行文件,去除其正常运行代码之外存在的用于可执行文件保护的代码层,自动加载该可执行文件,从内存中获取可执行文件运行期的代码,此时用于保护的代码层已经执行完毕,获得并保存正常运行代码,并将其传输给代码修复子模块;
代码修复子模块针对代码保护去除子模块的输出数据,此时输出数据为软件的正常运行代码,但是程序结构受到破坏,代码修复子模块将根据原始可执行文件的信息,为其补充程序结构信息,并修复其中受到破坏的导入表结构,使得修复后的数据成为可以正常运行的可执行文件;
在上述两个子模块运行完毕后,将结果重新传入可执行文件类型信息识别模块,若仍然存在保护机制,则再次通过可执行文件反保护模块进行处理,若已经不存在保护机制,则将其传入可执行文件代码分析模块。
4、根据权利要求1所述的Windows应用程序内部固化数据提取系统,其特征是,所述可执行文件代码分析模块,包括:通用代码分析子模块和专有代码分析子模块,其中:
通用代码分析子模块针对所有可执行文件二进制代码进行分析,通过调用反汇编和反编译工具,给出可执行文件的反汇编代码信息和程序内部基本结构,并给出一部分静态内部信息;
专有代码分析子模块根据可执行文件类型信息识别模块的分析结果决定是否执行,如果可执行文件中有特殊的开发语言种类特征,则在通用代码分析子模块运行之后执行进行有针对性的信息识别,其中包括对Delphi、VB和.Net语言开发编译的可执行文件的识别,通过该开发语言编译特点,从中解码按照该语言编译编码的信息,从而比通用代码分析获得更多的信息。
5、根据权利要求1所述的Windows应用程序内部固化数据提取系统,其特征是,所述可执行文件调试与信息提取模块,其针对未经保护或已经进行反保护处理的可执行文件,在运行过程中通过外部记录的方式收集其输入输出数据,对于其中需要判定性质的部分进行筛选,然后通过调试器加载可执行文件运行,记录整个运行过程中,内存中代码、寄存器信息、内存信息、输入输出数据及其变化的完整集合,在数据的完整集合中,找到和需要判定性质的数据匹配的内容,然后分析所有和数据处理有关的指令,通过程序的运行流程和内存地址的变化,判断需要判定性质的数据的来源,对于来自于可执行文件本身的数据,将其提取出来。
6、根据权利要求1所述的Windows应用程序内部固化数据提取系统,其特征是,所述密码学分析模块,其对可执行文件中可能使用的加密解密算法进行识别,确定其影响的数据范围,同时给出可执行文件可能使用的解密算法和密钥,并分析可执行文件二进制代码中包含的数据常量,与已知密码学算法特征值进行匹配,同时导入已知密码学算法的标准测试向量,对涉及加密解密的代码进行输入输出测试,将代码输出数据和标准输出数据进行对比,若特征值和代码输出数据均与已知密码学算法的特征值和标准输出数据匹配,则确定可执行文件使用了已知密码学算法,并将涉及密码学算法的代码位置信息传送给可执行文件调试和信息提取模块,以便其能识别加密算法和数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008102026439A CN101393521B (zh) | 2008-11-13 | 2008-11-13 | Windows应用程序内部固化数据的提取系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008102026439A CN101393521B (zh) | 2008-11-13 | 2008-11-13 | Windows应用程序内部固化数据的提取系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101393521A true CN101393521A (zh) | 2009-03-25 |
CN101393521B CN101393521B (zh) | 2012-04-25 |
Family
ID=40493830
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008102026439A Active CN101393521B (zh) | 2008-11-13 | 2008-11-13 | Windows应用程序内部固化数据的提取系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101393521B (zh) |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102184363A (zh) * | 2011-05-21 | 2011-09-14 | 电子科技大学 | 基于综合处理的软件壳自动脱壳方法 |
CN103631573A (zh) * | 2012-08-24 | 2014-03-12 | 中兴通讯股份有限公司 | 可迁移函数执行时间的获得方法及系统 |
CN103870752A (zh) * | 2012-12-18 | 2014-06-18 | 百度在线网络技术(北京)有限公司 | 一种用于检测Flash XSS漏洞的方法、装置与设备 |
CN104484175A (zh) * | 2014-12-16 | 2015-04-01 | 上海交通大学 | Android应用程序密码学误用检测方法 |
CN104756107A (zh) * | 2012-10-22 | 2015-07-01 | 起元科技有限公司 | 采用位置信息剖析数据 |
CN105044653A (zh) * | 2015-06-30 | 2015-11-11 | 武汉大学 | 一种智能电表的软件一致性检测方法 |
CN105391716A (zh) * | 2015-11-13 | 2016-03-09 | 上海斐讯数据通信技术有限公司 | 一种识别加密算法的方法及系统 |
CN106126983A (zh) * | 2016-08-30 | 2016-11-16 | 珠海金山网络游戏科技有限公司 | 一种防范预发布游戏盗版的数字指纹系统和方法 |
CN106203007A (zh) * | 2015-05-08 | 2016-12-07 | 腾讯科技(深圳)有限公司 | 一种代码处理方法、装置及计算设备 |
CN104063664B (zh) * | 2014-06-26 | 2017-04-05 | 北京奇虎科技有限公司 | 软件安装包的安全检测方法、客户端、服务器以及系统 |
CN106648676A (zh) * | 2016-12-28 | 2017-05-10 | 哈尔滨安天科技股份有限公司 | 一种利用运行时库识别编译器的方法及系统 |
CN106855926A (zh) * | 2015-12-08 | 2017-06-16 | 武汉安天信息技术有限责任公司 | 安卓系统下的恶意代码检测方法、系统及一种移动终端 |
CN103856481B (zh) * | 2012-11-30 | 2017-09-22 | 辉达公司 | 使用在线认证和经加密代码执行的代码保护方法和系统 |
CN110245464A (zh) * | 2018-10-10 | 2019-09-17 | 爱信诺征信有限公司 | 保护文件的方法和装置 |
CN110569403A (zh) * | 2019-09-11 | 2019-12-13 | 腾讯科技(深圳)有限公司 | 一种字符串提取的方法以及相关装置 |
CN110990056A (zh) * | 2019-11-01 | 2020-04-10 | 北京三快在线科技有限公司 | 逆向分析方法、装置、电子设备及存储介质 |
CN111158996A (zh) * | 2019-12-17 | 2020-05-15 | 京东数字科技控股有限公司 | 一种信息处理方法、装置和计算机可读存储介质 |
CN114020278A (zh) * | 2020-07-19 | 2022-02-08 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备及存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6016556A (en) * | 1997-07-17 | 2000-01-18 | Tektronix, Inc. | System for identifying an acquisition sample corresponding to a source code statement |
CN1818863A (zh) * | 2006-03-13 | 2006-08-16 | 浙江大学 | 嵌入式软件反编译中的静态库函数识别实现方法 |
-
2008
- 2008-11-13 CN CN2008102026439A patent/CN101393521B/zh active Active
Cited By (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102184363B (zh) * | 2011-05-21 | 2013-09-25 | 电子科技大学 | 基于综合处理的软件壳自动脱壳方法 |
CN102184363A (zh) * | 2011-05-21 | 2011-09-14 | 电子科技大学 | 基于综合处理的软件壳自动脱壳方法 |
CN103631573B (zh) * | 2012-08-24 | 2017-12-08 | 中兴通讯股份有限公司 | 可迁移函数执行时间的获得方法及系统 |
CN103631573A (zh) * | 2012-08-24 | 2014-03-12 | 中兴通讯股份有限公司 | 可迁移函数执行时间的获得方法及系统 |
CN104756107A (zh) * | 2012-10-22 | 2015-07-01 | 起元科技有限公司 | 采用位置信息剖析数据 |
CN104756107B (zh) * | 2012-10-22 | 2019-01-01 | 起元科技有限公司 | 采用位置信息剖析数据 |
CN103856481B (zh) * | 2012-11-30 | 2017-09-22 | 辉达公司 | 使用在线认证和经加密代码执行的代码保护方法和系统 |
CN103870752A (zh) * | 2012-12-18 | 2014-06-18 | 百度在线网络技术(北京)有限公司 | 一种用于检测Flash XSS漏洞的方法、装置与设备 |
CN103870752B (zh) * | 2012-12-18 | 2018-04-20 | 百度在线网络技术(北京)有限公司 | 一种用于检测Flash XSS漏洞的方法、装置与设备 |
CN104063664B (zh) * | 2014-06-26 | 2017-04-05 | 北京奇虎科技有限公司 | 软件安装包的安全检测方法、客户端、服务器以及系统 |
CN104484175A (zh) * | 2014-12-16 | 2015-04-01 | 上海交通大学 | Android应用程序密码学误用检测方法 |
CN104484175B (zh) * | 2014-12-16 | 2017-11-28 | 上海交通大学 | Android应用程序密码学误用检测方法 |
CN106203007A (zh) * | 2015-05-08 | 2016-12-07 | 腾讯科技(深圳)有限公司 | 一种代码处理方法、装置及计算设备 |
CN105044653A (zh) * | 2015-06-30 | 2015-11-11 | 武汉大学 | 一种智能电表的软件一致性检测方法 |
CN105391716A (zh) * | 2015-11-13 | 2016-03-09 | 上海斐讯数据通信技术有限公司 | 一种识别加密算法的方法及系统 |
CN105391716B (zh) * | 2015-11-13 | 2018-06-19 | 上海斐讯数据通信技术有限公司 | 一种识别加密算法的方法及系统 |
CN106855926A (zh) * | 2015-12-08 | 2017-06-16 | 武汉安天信息技术有限责任公司 | 安卓系统下的恶意代码检测方法、系统及一种移动终端 |
CN106855926B (zh) * | 2015-12-08 | 2019-08-20 | 武汉安天信息技术有限责任公司 | 安卓系统下的恶意代码检测方法、系统及一种移动终端 |
CN106126983A (zh) * | 2016-08-30 | 2016-11-16 | 珠海金山网络游戏科技有限公司 | 一种防范预发布游戏盗版的数字指纹系统和方法 |
CN106648676A (zh) * | 2016-12-28 | 2017-05-10 | 哈尔滨安天科技股份有限公司 | 一种利用运行时库识别编译器的方法及系统 |
CN110245464B (zh) * | 2018-10-10 | 2021-08-27 | 爱信诺征信有限公司 | 保护文件的方法和装置 |
CN110245464A (zh) * | 2018-10-10 | 2019-09-17 | 爱信诺征信有限公司 | 保护文件的方法和装置 |
CN110569403A (zh) * | 2019-09-11 | 2019-12-13 | 腾讯科技(深圳)有限公司 | 一种字符串提取的方法以及相关装置 |
CN110569403B (zh) * | 2019-09-11 | 2021-11-02 | 腾讯科技(深圳)有限公司 | 一种字符串提取的方法以及相关装置 |
CN110990056A (zh) * | 2019-11-01 | 2020-04-10 | 北京三快在线科技有限公司 | 逆向分析方法、装置、电子设备及存储介质 |
CN111158996A (zh) * | 2019-12-17 | 2020-05-15 | 京东数字科技控股有限公司 | 一种信息处理方法、装置和计算机可读存储介质 |
CN114020278A (zh) * | 2020-07-19 | 2022-02-08 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备及存储介质 |
CN114020278B (zh) * | 2020-07-19 | 2024-06-18 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN101393521B (zh) | 2012-04-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101393521B (zh) | Windows应用程序内部固化数据的提取系统 | |
Banescu et al. | A tutorial on software obfuscation | |
US7254586B2 (en) | Secure and opaque type library providing secure data protection of variables | |
CN106096338B (zh) | 一种具有数据流混淆的虚拟化软件保护方法 | |
Collberg et al. | Sandmark-a tool for software protection research | |
CN102598017B (zh) | 提高Java字节码的防窜改能力的系统和方法 | |
US20130125243A1 (en) | Method for preventing software reverse engineering, unauthorized modification, and runtime data interception | |
US10671758B2 (en) | Redacting core dumps by identifying modifiable parameters | |
TW200837604A (en) | Obfuscating computer program code | |
Guo et al. | Eliminating the hardware-software boundary: A proof-carrying approach for trust evaluation on computer systems | |
Kim et al. | Avengers, Assemble! survey of WebAssembly security solutions | |
You et al. | A Comparative Study on Optimization, Obfuscation, and Deobfuscation tools in Android. | |
Suk et al. | UnThemida: Commercial obfuscation technique analysis with a fully obfuscated program | |
Kuang et al. | Exploiting dynamic scheduling for VM-based code obfuscation | |
Kochberger et al. | SoK: automatic deobfuscation of virtualization-protected applications | |
Cipresso et al. | Software reverse engineering | |
Luo et al. | Code confusion in white box crowdsourced software testing | |
Li et al. | Chosen-instruction attack against commercial code virtualization obfuscators | |
Lee et al. | VODKA: Virtualization obfuscation using dynamic key approach | |
Buzatu | Methods for obfuscating Java programs | |
CN109344577A (zh) | 一种art下使用自修改技术进行软件保护的方法 | |
Wang et al. | Invalidating analysis knowledge for code virtualization protection through partition diversity | |
Hwang et al. | Identifying Input-Dependent Jumps from Obfuscated Execution using Dynamic Data Flow Graphs | |
Kiperberg et al. | System for executing encrypted Java programs | |
Lopez et al. | Hardware root-of-trust based integrity for shared library function pointers in embedded systems |
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 |