CN109145534A - 针对软件虚拟机保护的反混淆系统及方法 - Google Patents

针对软件虚拟机保护的反混淆系统及方法 Download PDF

Info

Publication number
CN109145534A
CN109145534A CN201810820633.5A CN201810820633A CN109145534A CN 109145534 A CN109145534 A CN 109145534A CN 201810820633 A CN201810820633 A CN 201810820633A CN 109145534 A CN109145534 A CN 109145534A
Authority
CN
China
Prior art keywords
program
virtual machine
analysis
instruction
software
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
Application number
CN201810820633.5A
Other languages
English (en)
Other versions
CN109145534B (zh
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.)
Shanghai Jiaotong University
Original Assignee
Shanghai Jiaotong University
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 Shanghai Jiaotong University filed Critical Shanghai Jiaotong University
Priority to CN201810820633.5A priority Critical patent/CN109145534B/zh
Publication of CN109145534A publication Critical patent/CN109145534A/zh
Application granted granted Critical
Publication of CN109145534B publication Critical patent/CN109145534B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Abstract

一种针对软件虚拟机保护的反混淆系统及方法,通过对程序追踪并获得追踪文件后,采用启发式分析策略分析trace文件得到软件虚拟机指令集;然后通过对虚拟机指令集提取语义;最后经重写和优化编译实现反混淆。本发明针对于受商业软件虚拟机vmprotect保护的程序,优化后得到的程序所执行的指令平均减少了2/3,并且易于修改,克服了现有的软件虚拟机逆向分析方法的缺陷。

Description

针对软件虚拟机保护的反混淆系统及方法
技术领域
本发明涉及的是一种信息安全领域的技术,具体是一种利用程序执行的记录文件提取程序语义,对受软件虚拟机保护的程序进行反混淆的软件系统及方法。
背景技术
软件混淆是一种增加软件逆向工程难度的技术,它被用于保护软件版权,防止软件被破解。软件混淆中的虚拟机保护技术在需要保护的程序(目标程序)中实现了一个指令集和虚拟机,该保护技术将目标程序中的指令转化为虚拟机中功能相同的一系列字节码,并通过虚拟机解释执行。被软件虚拟机保护的程序无法利用针对原有指令架构(例如x86)的分析工具进行分析,逆向工程难度会极大提高。
现有的分析软件虚拟机保护程序方法较为繁琐,这些方法首先对被保护程序中的字节码进行标注(这些标注形式类似于汇编代码),并对这些手工标注进行优化,最终对优化后的标注进行分析。该方法难以满足对受保护程序进行修改的需求。
发明内容
本发明针对现有技术存在的上述不足,提出一种针对软件虚拟机保护的反混淆系统及方法,使用启发式的方法对被保护程序进行结构分析,并利用符号执行的方法提取软件虚拟机指令集语义。对于得到的指令集语义,进一步地使用编译器技术进行优化编译,最终生成一个优化后的程序用于逆向工程分析。针对于受商业软件虚拟机vmprotect保护的程序,优化后得到的程序所执行的指令平均减少了2/3,并且易于修改,克服了现有的软件虚拟机逆向分析方法的缺陷。
本发明是通过以下技术方案实现的:
本发明涉及一种针对软件虚拟机保护的反混淆系统,包括:程序追踪模块、结构分析模块、语义分析模块以及优化编译模块,其中:程序追踪模块与结构分析模块相连并输出程序执行的记录信息,结构分析模块根据记录信息将原程序的结构进行拆分并提取受虚拟机保护的函数和虚拟机实现的指令集,结构分析模块分别与语义分析模块相连并输出虚拟机实现的指令集中每一个指令的代码实现、与优化编译模块相连并输出程序结构信息,语义分析模块从代码实现中分析得到指令语义后输出至优化编译模块,优化编译模块汇总程序结构信息和指令语义并输出受保护程序的语义表示,同时编译生成优化后的程序。
所述的程序执行的记录信息包括程序执行的所有指令。
本发明涉及上述系统的实现方法,通过对程序追踪并获得追踪文件(trace文件)后,采用启发式分析策略分析trace文件得到软件虚拟机指令集;然后通过对虚拟机指令集提取语义;最后经重写和优化编译实现反混淆。
所述的对程序追踪是指:确定分析目标后通过运行程序和调试的方法对于确定待分析程序达到分析目标所需要的输入,使用具有程序追踪功能的工具对程序执行过程进行记录,获取trace文件。
所述的利用启发式策略分析是指:利用待分析程序执行生成的trace文件,对程序进行控制流分析,还原其控制流图,从而在trace文件中识别并提取出受软件虚拟机保护的代码,并从提取的代码中分离得到分发器(dispatcher)及其对应的句柄(handlers),从而组合作为一个虚拟机指令的软件实现;然后使用一个程序执行窗口对trace文件进行顺序遍历,程序执行窗口中包含程序执行过程中的指令,对于每一个程序执行窗口,统计其中指令执行次数并进行排序,将高频指令所在的程序块作为疑似的dispatcher,对这些程序块附近的指令产生的控制流图进行模式匹配,符合之前所述虚拟机控制流特征的程序块即是软件虚拟机的指令集。
所述的虚拟机指令集中每条指令均为对软件虚拟机中虚拟寄存器或者虚拟堆栈进行的一定操作。每条指令功能都由软件代码实现,其语义即为虚拟机指令语义。
所述的提取语义是指:使用符号执行方法对虚拟机指令代码(dispatcher和handler组合)进行模拟执行,模拟执行结果为多个寄存器、内存值的表达式,使用特定的算法将这些表达式转化为底层虚拟机中间表示(Low Level Virtual Machine IntermediateRepresentation,LLVM IR)的形式,这些中间语言表示即代表了虚拟机指令集语义。
所述的重写和优化编译是指:将软件虚拟机指令语义转化为LLVM中的函数形式的语义表示,按照trace文件中执行虚拟机指令的顺序,调用虚拟机指令对应的LLVM函数,通过LLVM提供的编译器支持对生成的LLVM IR进行编译,得到一个重写后的程序。
技术效果
本发明能够处理Vmprotect等常见的商业软件虚拟机保护的程序,简化重写并保留语义和功能。
以使用Vmprotect进行加固的矩阵运算程序为例,通过反混淆系统进行重写,生成重写后的程序在使用intel i7,7700k,运行ubuntu 16.04的计算机上大约耗时5分钟,重写后的程序在main函数中执行代码指令数减少了2/3,同时保留了原程序矩阵运算的程序功能。
附图说明
图1为本发明系统结构示意图;
图2为实施例中软件虚拟机结构示意图。
具体实施方式
如图1所示,为本实施例涉及的一种针对软件虚拟机保护的符号执行反混淆系统,包括:程序追踪模块、结构分析模块、语义分析模块以及优化编译模块,其中:程序追踪模块与结构分析模块相连并传输程序追踪产生的trace文件信息,结构分析模块与语义分析模块相连并传输软件虚拟机中指令集的实现代码信息,并与优化编译模块相连并传输软件虚拟机中虚拟机指令执行顺序信息,语义分析模块与优化编译模块相连并提供软件虚拟机指令集的LLVM IR表示。
如图2所示,受软件虚拟机保护的程序通常可以分为两个部分,第一部分为软件虚拟机的解释执行模块,其接受字节码并对其进行解释执行,第二部分为软件虚拟机字节码,其对应了受保护程序在使用保护技术加固前的程序功能实现。在软件虚拟机解释执行过程中,虚拟机对字节码进行判断并分发给不同例程执行。每次分发执行过程都对应了执行软件虚拟机中的一条指令。进行判断并分发的程序部分称为dispatcher,实现字节码功能的例程称为handler。
软件虚拟机在执行过程中循环执行dispatcher和不同的handlers。在一个软件虚拟机中,dispatcher是唯一的,而执行的handlers因为字节码不同而区别。虚拟机解释执行时在循环执行同一段代码的同时在其间执行不同较短的handler代码,具有独特的控制流特征。
本实施例针对于windows xp 32位下使用商业软件虚拟机vmprotect加固的程序,实施例使用python语言实现,使用z3构建符号执行系统,并使用llvm 4.0构建语义生成和编译模块,实施例在测试中使用的程序为二阶矩阵乘法运算程序。
本实施例具体包括以下步骤:
1)执行受软件虚拟机保护的程序,使用pin tools或其他程序追踪工具获得程序trace文件,具体为:确定分析目标(例如需要分析程序中的某个函数实现或程序在一定状态下的行为),用运行程序和调试的方法对于确定待分析程序达到分析目标(调用分析目标中涉及的函数或达到一定状态)所需要的输入,使用具有程序追踪功能的工具对程序执行过程进行记录,获取trace文件。
2)利用启发式分析策略对trace文件进行程序结构分析,提取程序中受软件虚拟机保护的部分,然后利用启发式分析策略进行软件虚拟机结构分析,提取软件虚拟机中指令的软件实现,同时将指令编号,具体为:利用待分析程序执行生成的trace文件,对程序进行控制流分析,还原其控制流图。并使用上述的软件虚拟机控制流特征在trace文件中识别并提取出受软件虚拟机保护的代码,根据同样的控制流特征从提取的代码中分离dispatcher和handlers,将每一对dispatcher+handler的组合作为一个虚拟机指令的软件实现;然后使用一个程序执行窗口对trace文件进行顺序遍历,程序执行窗口中包含程序执行过程中一定数量的指令。对于每一个程序执行窗口,统计其中指令执行次数并进行排序,将一定数量的高频指令所在的程序块作为疑似的dispatcher,对这些程序块附近的指令产生的控制流图进行模式匹配,符合之前所述虚拟机控制流特征的程序块即是软件虚拟机相关代码。
3)利用符号执行方法提取软件虚拟机指令的语义并表示为底层虚拟机中间表示(Low Level Virtual Machine Intermediate Representation,LLVM IR)的形式;
所述的符号执行方法具有以下与通常使用的符号执行技术不同的特征:
①符号执行的目标为一个handler+dispatcher组合,它是软件虚拟机中一条指令的代码实现。
②在进行符号执行前,符号化全部用户态内存和通用寄存器。
③对于符号执行中遇到的条件跳转指令,默认使用trace文件中同样的条件判断结果处理。
④符号执行的结果表达为一个集合,集合中的每个元素都是一个键/值对,键为寄存器或者内存地址,对应的值为寄存器或内存中内容的符号表达式。这些键/值对将在后续被转化为LLVM IR形式的语义,用于表示该软件虚拟机指令执行的操作。
LLVM提供了读取内存和寄存器内容的语义表示,使用这些表示能够表达键/值对中涉及的寄存器和内存符号,通过进一步使用LLVM提供的运算语义,这些语义表示能够表达键/值对中表达式对应的全部语义。同样LLVM提供了写入内存和寄存器的语义表示。所有的语义在LLVM系统中均属于LLVM Value。
一个虚拟机指令的语义可以表示为对一定虚拟寄存器或者虚拟堆栈、内存进行读取,运算,并将运算结果写回虚拟机寄存器或堆栈、内存的一系列操作。
提取语义方法中使用下面的步骤将符号执行得到的键/值对集合转化为LLVM IR形式的虚拟机指令语义。
①使用程序结构分析模块提供的软件虚拟机寄存器使用信息,结合机器架构下寄存器的通常使用模式,对符号执行结果中的键/值对进行筛选和剔除,目的在于去除冗余的内存和寄存器写入。
②根据键/值对在符号执行过程中生成的时间顺序,依次使用LLVM提供的接口生成键/值对中表达式对应的LLVM Value,并结合LLVM写入寄存器或内存的接口将生成的LLVM Value写入对应寄存器或者内存中。在向寄存器或内存写入LLVM Value的过程中,需要确保寄存器或者内存的原值不被后续的LLVM Value生成过程所使用。此处得到的LLVMIR即为虚拟机指令语义。
5)分析受软件虚拟机保护的程序架构,将trace文件中受软件虚拟机保护部分表示为软件虚拟机指令的组合。
6)将LLVM IR形式的软件虚拟机指令的语义代入软件虚拟机指令的组合,将整个程序在特定控制流下的语义通过LLVM IR形式进行表达。
7)利用LLVM的优化器和优化编译模块对整个程序在特定控制流下的语义进行优化和编译,生成重写后的程序代码。
8)通过测试保证重写后的软件与原软件具有相同的功能。
在本实施例中,重写后的软件,相比于重写之前由vmprotect加固的程序,软件原有语义得到了保留的同时,执行指令数量减少了约2/3,能够有效地提高逆向工程效率。
上述具体实施可由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现方案均受本发明之约束。

Claims (8)

1.一种针对软件虚拟机保护的反混淆系统,其特征在于,包括:程序追踪模块、结构分析模块、语义分析模块以及优化编译模块,其中:程序追踪模块与结构分析模块相连并输出程序执行的记录信息,结构分析模块根据记录信息将原程序的结构进行拆分并提取受虚拟机保护的函数和虚拟机实现的指令集,结构分析模块分别与语义分析模块相连并输出虚拟机实现的指令集中每一个指令的代码实现、与优化编译模块相连并输出程序结构信息,语义分析模块从代码实现中分析得到指令语义后输出至优化编译模块,优化编译模块汇总程序结构信息和指令语义并输出受保护程序的语义表示,同时编译生成优化后的程序。
2.一种针对软件虚拟机保护的反混淆方法,其特征在于,通过对程序追踪并获得追踪文件后,采用启发式分析策略分析trace文件得到软件虚拟机指令集;然后通过对虚拟机指令集提取语义;最后经重写和优化编译实现反混淆。
3.根据权利要求2所述的方法,其特征是,所述的对程序追踪是指:确定分析目标后通过运行程序和调试的方法对于确定待分析程序达到分析目标所需要的输入,使用具有程序追踪功能的工具对程序执行过程进行记录,获取trace文件。
4.根据权利要求2所述的方法,其特征是,所述的利用启发式策略分析是指:利用待分析程序执行生成的trace文件,对程序进行控制流分析,还原其控制流图,从而在trace文件中识别并提取出受软件虚拟机保护的代码,并从提取的代码中分离得到分发器及其对应的句柄,从而组合作为一个虚拟机指令的软件实现;然后使用一个程序执行窗口对trace文件进行顺序遍历,程序执行窗口中包含程序执行过程中的指令,对于每一个程序执行窗口,统计其中指令执行次数并进行排序,将高频指令所在的程序块作为疑似的dispatcher,对这些程序块附近的指令产生的控制流图进行模式匹配,符合之前所述虚拟机控制流特征的程序块即是软件虚拟机的指令集。
5.根据权利要求2所述的方法,其特征是,所述的虚拟机指令集中每条指令均为对软件虚拟机中虚拟寄存器或者虚拟堆栈进行的一定操作。每条指令功能都由软件代码实现,其语义即为虚拟机指令语义。
6.根据权利要求2所述的方法,其特征是,所述的提取语义是指:使用符号执行方法对虚拟机指令代码进行模拟执行,模拟执行结果为多个寄存器、内存值的表达式,使用特定的算法将这些表达式转化为底层虚拟机中间表示的形式,这些中间语言表示即代表了虚拟机指令集语义。
7.根据权利要求2所述的方法,其特征是,所述的重写和优化编译是指:将软件虚拟机指令语义转化为LLVM中的函数形式的语义表示,按照trace文件中执行虚拟机指令的顺序,调用虚拟机指令对应的LLVM函数,通过LLVM提供的编译器支持对生成的LLVM IR进行编译,得到一个重写后的程序。
8.根据权利要求6所述的方法,其特征是,所述的符号执行方法包括:
①符号执行的目标为一个handler+dispatcher组合,它是软件虚拟机中一条指令的代码实现;
②在进行符号执行前,符号化全部用户态内存和通用寄存器;
③对于符号执行中遇到的条件跳转指令,默认使用trace文件中同样的条件判断结果处理;
④符号执行的结果表达为一个集合,集合中的每个元素都是一个键/值对,键为寄存器或者内存地址,对应的值为寄存器或内存中内容的符号表达式,这些键/值对将在后续被转化为LLVM IR形式的语义,用于表示该软件虚拟机指令执行的操作。
CN201810820633.5A 2018-07-24 2018-07-24 针对软件虚拟机保护的反混淆系统及方法 Active CN109145534B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810820633.5A CN109145534B (zh) 2018-07-24 2018-07-24 针对软件虚拟机保护的反混淆系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810820633.5A CN109145534B (zh) 2018-07-24 2018-07-24 针对软件虚拟机保护的反混淆系统及方法

Publications (2)

Publication Number Publication Date
CN109145534A true CN109145534A (zh) 2019-01-04
CN109145534B CN109145534B (zh) 2022-11-11

Family

ID=64797636

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810820633.5A Active CN109145534B (zh) 2018-07-24 2018-07-24 针对软件虚拟机保护的反混淆系统及方法

Country Status (1)

Country Link
CN (1) CN109145534B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110727925A (zh) * 2019-08-23 2020-01-24 北京邮电大学 一种目标应用安全检测方法、装置与电子设备
CN111639312A (zh) * 2020-06-02 2020-09-08 腾讯科技(成都)有限公司 反调试方法、装置、存储介质及电子装置
CN111814120A (zh) * 2020-07-10 2020-10-23 北京嘀嘀无限科技发展有限公司 程序反混淆处理方法、装置、设备及存储介质
CN112199158A (zh) * 2020-10-16 2021-01-08 常熟理工学院 虚拟机保护的解释例程识别方法、装置、设备及存储介质
CN114327789A (zh) * 2022-01-07 2022-04-12 北京大学 一种基于llvm的虚拟机保护方法及系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106096338A (zh) * 2016-06-07 2016-11-09 西北大学 一种具有数据流混淆的虚拟化软件保护方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106096338A (zh) * 2016-06-07 2016-11-09 西北大学 一种具有数据流混淆的虚拟化软件保护方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
MINGYUE LIANG等: "《Deobfuscation of Virtualization-obfuscated Code through Symbolic Execution and Compilation Optimization》", 《INTERNATIONAL CONFERENCE ON INFORMATION AND COMMUNICATIONS SECURITY》 *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110727925A (zh) * 2019-08-23 2020-01-24 北京邮电大学 一种目标应用安全检测方法、装置与电子设备
CN111639312A (zh) * 2020-06-02 2020-09-08 腾讯科技(成都)有限公司 反调试方法、装置、存储介质及电子装置
CN111814120A (zh) * 2020-07-10 2020-10-23 北京嘀嘀无限科技发展有限公司 程序反混淆处理方法、装置、设备及存储介质
CN112199158A (zh) * 2020-10-16 2021-01-08 常熟理工学院 虚拟机保护的解释例程识别方法、装置、设备及存储介质
CN112199158B (zh) * 2020-10-16 2021-11-23 常熟理工学院 虚拟机保护的解释例程识别方法、装置、设备及存储介质
CN114327789A (zh) * 2022-01-07 2022-04-12 北京大学 一种基于llvm的虚拟机保护方法及系统
CN114327789B (zh) * 2022-01-07 2024-05-17 北京大学 一种基于llvm的虚拟机保护方法及系统

Also Published As

Publication number Publication date
CN109145534B (zh) 2022-11-11

Similar Documents

Publication Publication Date Title
CN109145534A (zh) 针对软件虚拟机保护的反混淆系统及方法
CN109739755B (zh) 一种基于程序追踪和混合执行的模糊测试系统
CN103678110B (zh) 提供修改相关信息的方法和装置
CN106021103B (zh) 一种基于代码变更的移动应用测试脚本自动维护方法
Wang et al. Uroboros: Instrumenting stripped binaries with static reassembling
Brooks Survey of automated vulnerability detection and exploit generation techniques in cyber reasoning systems
CN108027748B (zh) 指令集模拟器及其模拟器生成方法
CN108197027B (zh) 软件性能优化方法、可存储介质、计算机、计算机程序
CN109491918A (zh) 一种汇编冗余指令的检测方法及装置
CN101154259A (zh) 通用自动化脱壳引擎与方法
CN106354630A (zh) 一种基于动态符号执行的软件缺陷检测方法
CN103678747B (zh) 适用于多类型cpu的联合仿真工具
JP3822044B2 (ja) 設計検証システム、設計検証方法および設計検証プログラムを格納したコンピュータ読取り可能な記録媒体
Gerasimov et al. Anxiety: A dynamic symbolic execution framework
CN105487983A (zh) 基于智能路径引导的敏感点逼近方法
CN104050069A (zh) 一种基于Mars评判Verilog实现MIPS处理器正确性的自动化测试方法
CN101593094B (zh) 用于检测和处理未对齐数据访问的设备、系统和方法
CN106126225B (zh) 一种基于程序演进模型的目标代码逆向工程方法
CN102495795B (zh) 一种基于中间语言分析的软件脆弱性测试方法
Zhao et al. H-fuzzing: A new heuristic method for fuzzing data generation
CN107885504B (zh) 一种异构的多平台系统控制逻辑一致性校验的方法
CN114816435A (zh) 一种基于逆向技术的软件开发方法
CN114546836A (zh) 基于下推自动机引导的公共组件库自动化测试方法及装置
CN113535545A (zh) 一种用于程序动态分析的二进制插桩方法
CN103049302B (zh) 由程序生成优化的strcpy标准库函数汇编代码的方法

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
GR01 Patent grant
GR01 Patent grant