CN112527457A - 一种通用Unicorn模拟指令执行的虚拟机实现方法 - Google Patents
一种通用Unicorn模拟指令执行的虚拟机实现方法 Download PDFInfo
- Publication number
- CN112527457A CN112527457A CN202011438234.6A CN202011438234A CN112527457A CN 112527457 A CN112527457 A CN 112527457A CN 202011438234 A CN202011438234 A CN 202011438234A CN 112527457 A CN112527457 A CN 112527457A
- Authority
- CN
- China
- Prior art keywords
- instruction
- software
- virtual machine
- simulation
- unicorn
- 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.)
- Pending
Links
- 238000004088 simulation Methods 0.000 title claims abstract description 27
- 238000000034 method Methods 0.000 title claims abstract description 17
- 230000001419 dependent effect Effects 0.000 claims description 6
- 230000006870 function Effects 0.000 description 4
- 101100348848 Mus musculus Notch4 gene Proteins 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005336 cracking Methods 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/4557—Distribution of virtual machine instances; Migration and load balancing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45587—Isolation or security of virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开一种通用Unicorn模拟指令执行的虚拟机实现方法,步骤10、CPU指令集分类:将目标二进制代码分类为模拟指令和软件指令并分别进行编码,如目标二进制代码为模拟指令,进入步骤20,如目标二进制代码为软件指令,进入步骤30;步骤20、模拟指令处理:保持硬件指令类型不变,用Unicorn模拟执行CPU,进入步骤40;步骤30、软件指令处理:将软件指令拆分成自定义的编码格式,在执行过程中利用软件代码模拟其对应的功能,进入步骤40;步骤40、虚拟机:调取当前CPU对等的寄存器上下文、步骤20中处理完成的模拟指令和步骤30中处理完成的软件指令并进行组合,得到所述的虚拟机。本发明能快速准确的实现CPU指令模拟执行式的虚拟机化。
Description
技术领域
本发明属于软件安全领域,具体涉及一种通用Unicorn模拟指令执行的虚拟机实现方法。
背景技术
在软件安全领域,代码保护效果最好的形式即为虚拟机代码保护。这种方案由于存在私有的指令编码和CPU解释器,所以可以很好的保护目标代码不被逆向工程。在Windows平台,由于只需要考虑x86/x64架构,因此实现自定义的虚拟机相对容易,典型的产品如VMProtect。而在移动平台比如iOS/Android,需要考虑x86/x64/arm/arm64/arm64e等一系列架构,因此需要设计一种相对通用的虚拟机实现方案。
发明内容
本发明所要解决的技术问题便是针对上述现有技术的不足,提供一种通用Unicorn模拟指令执行的虚拟机实现方法,能快速准确的实现CPU指令模拟执行式的虚拟机化。
本发明所采用的技术方案是:一种通用Unicorn模拟指令执行的虚拟机实现方法,包括以下步骤:
步骤10、CPU指令集分类:将目标二进制代码分类为模拟指令和软件指令并分别进行编码,如目标二进制代码为模拟指令,进入步骤20,如目标二进制代码为软件指令,进入步骤30;
步骤20、模拟指令处理:保持硬件指令类型不变,用Unicorn模拟执行CPU,进入步骤40;
步骤30、软件指令处理:将软件指令拆分成自定义的编码格式,在执行过程中利用软件代码模拟其对应的功能,进入步骤40;
步骤40、虚拟机:调取当前CPU对等的寄存器上下文、步骤20中处理完成的模拟指令和步骤30中处理完成的软件指令并进行组合,得到所述的虚拟机。
其中一个实施例中,步骤10中,所述的软件指令包括断点指令、结束指令和PC依赖指令。
其中一个实施例中,步骤10中,将所述的目标二进制代码按照逻辑控制指令、普通指令和依赖PC的普通指令进行分类。
其中一个实施例中,步骤40中,调取当前CPU对等的寄存器上下文使用Unicorn模拟执行指令时去掉Unicorn内置Qemu的MMU功能。
本发明的有益效果在于:
1、可以快速的实现出一个完备的虚拟机;
2、可以快速迁移至不同计算机体系架构。
附图说明
图1为本发明虚拟机实现原理图。
具体实施方式
下面将结合附图及具体实施例对本发明作进一步详细说明。
如图1所示,本发明公开了一种通用Unicorn模拟指令执行的虚拟机实现方法,包括以下步骤:
步骤10、CPU指令集分类:将目标二进制代码分类为模拟指令和软件指令并分别进行编码,如目标二进制代码为模拟指令,进入步骤20,如目标二进制代码为软件指令,进入步骤30;
步骤20、模拟指令处理:保持硬件指令类型不变,用Unicorn模拟执行CPU,进入步骤40;
步骤30、软件指令处理:将软件指令拆分成自定义的编码格式,在执行过程中利用软件代码模拟其对应的功能,进入步骤40;
步骤40、虚拟机:调取当前CPU对等的寄存器上下文、步骤20中处理完成的模拟指令和步骤30中处理完成的软件指令并进行组合,得到所述的虚拟机。
本实施例中,步骤10中,所述的软件指令包括断点指令、结束指令和PC依赖指令。
本实施例中,步骤10中,将所述的目标二进制代码按照逻辑控制指令、普通指令和依赖PC的普通指令进行分类。
本实施例中,步骤40中,调取当前CPU对等的寄存器上下文使用Unicorn模拟执行指令时去掉Unicorn内置Qemu的MMU功能。
本发明中,所述的Unicorn指一个基于qemu实现的虚拟cpu;所述的Qemu指一个纯软件实现的多架构模拟器;所述的模拟指不依靠外部实现,而仅仅靠自身的翻译功能实现指令集的功能;所述的指令执行指CPU的单条指令的执行,比如add、sub等指令的执行;所述的虚拟机指使用纯软件模拟出的带执行上下文和指令集的虚拟处理器;所述的PC指CPU执行时的程序地址计数器Program Counter;所述的MMU指Memory Management Unit的缩写,中文名是内存管理单元,有时称作分页内存管理单元(英语:paged memory managementunit,缩写为PMMU)。它是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。本文特指Unicorn集成的qemu自带的软件实现的MMU。
本发明所述的模拟指令如add、sub或xor,利用Unicorn模拟执行;所述的断点指令如int 3或bkpt#8;所述的结束指令如ret或retn;所述的PC依赖指令如call、jmp、bl、adr或adrp。
本发明应用于软件安全攻防领域,同时也可用于应用程序性能剖析。
软件安全攻击一方,可以利用该指令级虚拟机逐条执行目标程序,则可完全掌握目标程序的运行情况,进而可以逆向破解目标程序。软件安全防守一方,可以利用该指令级虚拟机将核心的软件代码用本虚拟机编码保护起来,进而可以阻止逆向破解的人分析核心代码。
应用程序性能剖析时,可以利用该指令级虚拟机逐条采样程序的运行过程,达到100%精确分析程序运行情况的目的。
以上所述实施例仅表达了本发明的具体实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。
Claims (4)
1.一种通用Unicorn模拟指令执行的虚拟机实现方法,其特征在于,包括以下步骤:
步骤10、CPU指令集分类:将目标二进制代码分类为模拟指令和软件指令并分别进行编码,如目标二进制代码为模拟指令,进入步骤20,如目标二进制代码为软件指令,进入步骤30;
步骤20、模拟指令处理:保持硬件指令类型不变,用Unicorn模拟执行CPU,进入步骤40;
步骤30、软件指令处理:将软件指令拆分成自定义的编码格式,在执行过程中利用软件代码模拟其对应的功能,进入步骤40;
步骤40、虚拟机:调取当前CPU对等的寄存器上下文、步骤20中处理完成的模拟指令和步骤30中处理完成的软件指令并进行组合,得到所述的虚拟机。
2.根据权利要求1所述的一种通用Unicorn模拟指令执行的虚拟机实现方法,其特征在于,步骤10中,所述的软件指令包括断点指令、结束指令和PC依赖指令。
3.根据权利要求1或2所述的一种通用Unicorn模拟指令执行的虚拟机实现方法,其特征在于,步骤10中,将所述的目标二进制代码按照逻辑控制指令、普通指令和依赖PC的普通指令进行分类。
4.根据权利要求1或2所述的一种通用Unicorn模拟指令执行的虚拟机实现方法,其特征在于,步骤40中,调取当前CPU对等的寄存器上下文使用Unicorn模拟执行指令时去掉Unicorn内置Qemu的MMU功能。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011438234.6A CN112527457A (zh) | 2020-12-11 | 2020-12-11 | 一种通用Unicorn模拟指令执行的虚拟机实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011438234.6A CN112527457A (zh) | 2020-12-11 | 2020-12-11 | 一种通用Unicorn模拟指令执行的虚拟机实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112527457A true CN112527457A (zh) | 2021-03-19 |
Family
ID=74999922
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011438234.6A Pending CN112527457A (zh) | 2020-12-11 | 2020-12-11 | 一种通用Unicorn模拟指令执行的虚拟机实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112527457A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022237098A1 (zh) * | 2021-05-14 | 2022-11-17 | 统信软件技术有限公司 | 一种异构程序执行方法、装置、计算设备及可读存储介质 |
CN115480871A (zh) * | 2022-09-14 | 2022-12-16 | 北京计算机技术及应用研究所 | 一种通用的tms320c3x处理器指令集虚拟化仿真方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101438529A (zh) * | 2004-12-06 | 2009-05-20 | 微软公司 | 经由动态转换的主动计算机恶意软件保护 |
CN102831006A (zh) * | 2012-07-25 | 2012-12-19 | 北京奇虎科技有限公司 | 虚拟机实现方法与虚拟机 |
US20160171212A1 (en) * | 2014-12-16 | 2016-06-16 | Kyndi, Inc. | Method and apparatus for randomizing computer instruction sets, memory registers and pointers |
CN108509250A (zh) * | 2017-02-28 | 2018-09-07 | 英特尔公司 | 具有受保护的访客机验证主机控制的安全公共云 |
CN109684794A (zh) * | 2018-12-07 | 2019-04-26 | 成都盈海益讯科技有限公司 | 一种代码保护虚拟机kvm系统实现方法、装置、计算机设备及存储介质 |
CN110348204A (zh) * | 2019-06-17 | 2019-10-18 | 海光信息技术有限公司 | 一种代码保护系统、认证方法、装置、芯片及电子设备 |
CN111123737A (zh) * | 2018-11-30 | 2020-05-08 | 中国航空工业集团公司沈阳飞机设计研究所 | 一种数字硬件虚拟仿真系统 |
-
2020
- 2020-12-11 CN CN202011438234.6A patent/CN112527457A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101438529A (zh) * | 2004-12-06 | 2009-05-20 | 微软公司 | 经由动态转换的主动计算机恶意软件保护 |
CN102831006A (zh) * | 2012-07-25 | 2012-12-19 | 北京奇虎科技有限公司 | 虚拟机实现方法与虚拟机 |
US20160171212A1 (en) * | 2014-12-16 | 2016-06-16 | Kyndi, Inc. | Method and apparatus for randomizing computer instruction sets, memory registers and pointers |
CN108509250A (zh) * | 2017-02-28 | 2018-09-07 | 英特尔公司 | 具有受保护的访客机验证主机控制的安全公共云 |
CN111123737A (zh) * | 2018-11-30 | 2020-05-08 | 中国航空工业集团公司沈阳飞机设计研究所 | 一种数字硬件虚拟仿真系统 |
CN109684794A (zh) * | 2018-12-07 | 2019-04-26 | 成都盈海益讯科技有限公司 | 一种代码保护虚拟机kvm系统实现方法、装置、计算机设备及存储介质 |
CN110348204A (zh) * | 2019-06-17 | 2019-10-18 | 海光信息技术有限公司 | 一种代码保护系统、认证方法、装置、芯片及电子设备 |
Non-Patent Citations (6)
Title |
---|
51CTO博客: ""【代码安全】ARM平台代码保护之虚拟化"", Retrieved from the Internet <URL:URL:https://blog.51cto.com/u_11642030/1788315> * |
BLAZYTKO, TIM, ET AL.: ""Syntia: Synthesizing the semantics of obfuscated code"", 《26TH USENIX SECURITY SYMPOSIUM (USENIX SECURITY 17). 2017》 * |
刘柏江: ""IoT时代LLVM编译器防护的艺术"", 《2018中国互联网安全大会》 * |
博客园: ""vmp壳基础原理"", Retrieved from the Internet <URL:URL:https://www.cnblogs.com/jingcaixf/p/13035849.html> * |
张晓寒, 张源, 池信坚等.: ""基于指令虚拟化的安卓本地代码加固方法"", 《电子与信息学报》 * |
杜春来;孔丹丹;王景中;谭兴邦;: ""一种基于指令虚拟化的代码保护模型"", 《信息网络安全》, no. 02 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022237098A1 (zh) * | 2021-05-14 | 2022-11-17 | 统信软件技术有限公司 | 一种异构程序执行方法、装置、计算设备及可读存储介质 |
CN115480871A (zh) * | 2022-09-14 | 2022-12-16 | 北京计算机技术及应用研究所 | 一种通用的tms320c3x处理器指令集虚拟化仿真方法 |
CN115480871B (zh) * | 2022-09-14 | 2023-04-28 | 北京计算机技术及应用研究所 | 一种通用的tms320c3x处理器指令集虚拟化仿真方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
RU2686552C2 (ru) | Системы и способы предоставления результата текущей команды процессора при выходе из виртуальной машины | |
US10127381B2 (en) | Systems and methods for switching emulation of an executable file | |
EP1939754B1 (en) | Providing protected access to critical memory regions | |
CN109684794B (zh) | 一种代码保护虚拟机kvm系统实现方法、装置、计算机设备及存储介质 | |
TW202240383A (zh) | 用以保護影子堆疊之處理器、方法、系統和指令 | |
CN105046117A (zh) | 一种具有指令集随机化的代码虚拟化软件保护系统 | |
CN112527457A (zh) | 一种通用Unicorn模拟指令执行的虚拟机实现方法 | |
JPH07287659A (ja) | コンピュータシステムにおいてクロスドメイン通話を検出及び実行するための方法及び装置 | |
CN101964040B (zh) | 一种基于PE Loader的软件加壳保护方法 | |
JP2004517390A (ja) | 解析仮想マシン | |
Stüttgen et al. | Acquisition and analysis of compromised firmware using memory forensics | |
TW201227394A (en) | Security through opcode randomization | |
US10127137B2 (en) | Methods and systems for increased debugging transparency | |
CN112163195B (zh) | 一种基于堆栈隐藏的虚拟机软件保护方法 | |
CN106815524B (zh) | 恶意脚本文件的检测方法及装置 | |
CN107368739B (zh) | 一种内核驱动的监视方法和装置 | |
CN112148636A (zh) | 对面向返回的编程利用的缓解 | |
CN102831334A (zh) | 一种目标地址定位方法和系统 | |
CN103106356B (zh) | 一种在安全环境中生成代码提高软件保护强度的方法 | |
EP3341834B1 (en) | Exception handling | |
US20030115578A1 (en) | PC platform simulation system employing efficient memory access simulation in a direct execution environment | |
Ferguson | Reverse engineering code with IDA Pro | |
CN112540828A (zh) | 一种通用cpu自解释指令执行的虚拟机实现方法 | |
KR102430335B1 (ko) | 가상화 코드의 난독화를 강화하는 방법 및 그 장치 | |
CN110909347B (zh) | 一种基于Mcsema的Remill库栈污染分析方法及装置 |
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 |