CN112199159B - 对操作数栈和变量表的读写方法、装置、设备及存储介质 - Google Patents
对操作数栈和变量表的读写方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112199159B CN112199159B CN202011110316.8A CN202011110316A CN112199159B CN 112199159 B CN112199159 B CN 112199159B CN 202011110316 A CN202011110316 A CN 202011110316A CN 112199159 B CN112199159 B CN 112199159B
- Authority
- CN
- China
- Prior art keywords
- operand stack
- variable table
- reading
- local variable
- writing
- 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.)
- Active
Links
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/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
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
-
- 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)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Computer Security & Cryptography (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明实施例公开了一种对操作数栈和变量表的读写方法、装置、设备及存储介质,其中,所述对操作数栈和变量表的读写方法,包括:获取每个解释例程的操作数栈和局部变量表所对应的寄存器;以所述寄存器作为查找条件即可找到每个解释例程中对操作数栈和局部变量表读操作的指令集合。针对虚拟机软件保护的逆向工程分析,通过标记解释例程中对操作数栈和局部变量表读写的汇编指令,以达到准确计算每个解释例程对局部变量区的读次数和对操作数栈的读次数目的。
Description
技术领域
本发明涉及读写操作数栈和变量表技术领域,也涉及信息安全、软件分析、逆向工程和计算机软件技术领域,特别指一种对操作数栈和变量表的读写方法、装置、设备及存储介质,尤指一种标记解释例程中对操作数栈和局部变量表读写的汇编指令方法、装置、设备及存储介质。
背景技术
虚拟机保护是指将基于CPU的机器码转换为字节码并嵌入相应虚拟机解释器的一种软件保护技术。当受虚拟机保护的软件运行时,由嵌入的虚拟机解释器对转换后的字节码进行解释执行,完成原CPU机器码一样的功能。然而,越来越多的木马等恶意程序却利用虚拟机保护来逃避对它们的查杀。如何逆向分析和检测虚拟机保护的恶意程序成为软件安全面临的新挑战。
目前,虚拟机保护软件通常采虚假指令、控制流混淆、指令替换等方式对虚拟机解释器自身进行保护,使得CPU的机器码经过虚拟化保护后,其指令数量会膨胀成百上千倍。通过现有静态分析与动态调试技术对虚拟机进行分析,得到的是虚拟机解释器的逻辑,并不能获取被保护指令的语义信息。因此深入研究虚拟机保护技术,实现有效虚拟机解释器的虚拟指令逆向分析方法意义重大。
发明内容
本发明实施例提供了一种对操作数栈和变量表的读写方法、装置、设备及存储介质,针对虚拟机软件保护的逆向工程分析,通过标记解释例程中对操作数栈和局部变量表读写的汇编指令,以达到准确计算每个解释例程对局部变量区的读次数和对操作数栈的读次数目的。
本发明实施例提供了一种对操作数栈和变量表的读写方法,包括:
获取每个解释例程的操作数栈和局部变量表所对应的寄存器;
以所述寄存器作为查找条件即可找到每个解释例程中对操作数栈和局部变量表读操作的指令集合。
进一步的,所述对操作数栈和局部变量表读操作的指令集合为:
vm_handler.op_stack_insts={I1,I2,…Ii,…,IM},1<i<M;
vm_handler.local_var_table_insts={I1,I2,…Ij,…,IN},1<j<N。
进一步的,所述判定解释例程中对操作数栈和局部变量表读写的指令的方法,包括:
遍历所有的解释例程集合,在每个解释例程中进一步遍历其中的指令序列;
然后分别以操作数栈对应的寄存器和局部变量表对应的寄存器作为模式被匹配数据去匹配指令序列中对它们的读操作。
进一步的,每次匹配前需要取对应的寄存器来组装被匹配数据。
进一步的,一旦匹配成功,就把这些指令添加至对应的读操作集合中;添加结束后,可以分别得到对操作数栈和局部变量表读操作的指令集合。
本发明实施例还提供一种对操作数栈和变量表的读写装置,包括:
获取模块,用于获取每个解释例程的操作数栈和局部变量表所对应的寄存器;
查找模块,用于以所述寄存器作为查找条件即可找到每个解释例程中对操作数栈和局部变量表读操作的指令集合。
本发明实施例还提供一种对操作数栈和变量表的读写设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述对操作数栈和变量表的读写方法。
本发明实施例还提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行所述对操作数栈和变量表的读写方法。
本发明实施例,其方法通过获取每个解释例程的操作数栈和局部变量表所对应的寄存器;以所述寄存器作为查找条件即可找到每个解释例程中对操作数栈和局部变量表读操作的指令集合;由此通过标记解释例程中对操作数栈和局部变量表读写的汇编指令,准确计算每个解释例程对局部变量区的读次数和对操作数栈的读次数,有助于后续的虚拟指令语法和语义分析。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
图1是本发明实施例的所述对操作数栈和变量表的读写方法的整体流程图;
图2是本发明实施例的所述对操作数栈和变量表的读写装置的结构图。
具体实施方式
下文中将结合附图对本发明的实施例进行详细说明。
在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机***中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在虚拟机解释器解释例程的虚拟指令逆向分析中,在虚拟机解释器的解释例程进行解释执行时,根据字节码,会将操作数在操作数栈中计算,并保存在局部变量区。就会发现不同的操作指令对局部变量区的读写次数和对操作数栈的读次数有差异,它们对虚拟指令的逆向分析具有重要价值,但是目前为止尚未发现有人标记每个解释例程中对操作数栈和局部变量表读的汇编指令的方法,也未见有人提出利用每个虚指令实现块的指令对局部变量区的读次数和对操作数栈的读次数特性实现对虚指令的逆向分析和识别。因此,本发明实施例提出一种标记解释例程中对操作数栈和局部变量表读写的汇编指令方法,并分析每个虚指令实现块的指令对局部变量区的读次数和对操作数栈的读次数,从而为逆向分析虚拟机保护提供帮助。
针对上述情况,如图1所示,本发明实施例提出一种对操作数栈和变量表的读写方法,包括:
步骤101,获取每个解释例程的操作数栈和局部变量表所对应的寄存器。
步骤102,以所述寄存器作为查找条件即可找到每个解释例程中对操作数栈和局部变量表读操作的指令集合。
其中,在一个实施例中,所述对操作数栈和局部变量表读操作的指令集合为:
vm_handler.op_stack_insts={I1,I2,…Ii,…,IM},1<i<M;
vm_handler.local_var_table_insts={I1,I2,…Ij,…,IN},1<j<N。
其中,vm_handler.op_stack_insts表示处理函数中对操作数栈读操作的指令集合,vm_handler.local_var_table_insts表示处理函数中对局部变量表读操作的指令集合。
而判定解释例程中对操作数栈和局部变量表读写的汇编指令伪代码逻辑如下所示:
如上述伪代码所示,所述‘读操作’在汇编层面的表示即为mov指令,使用mov指令从对应的操作数栈或者局部变量表区域将数据读出来。
根据判定解释例程中对操作数栈和局部变量表读写的汇编指令伪代码,其流程如图1所示。
具体而言,在一个实施例中,所述判定解释例程中对操作数栈和局部变量表读写的指令的方法,包括如下步骤:
步骤201,遍历所有的解释例程集合,在每个解释例程中进一步遍历其中的指令序列。
步骤202,然后分别以操作数栈对应的寄存器和局部变量表对应的寄存器作为模式被匹配数据去匹配指令序列中对它们的读操作。
其中,由于不同的解释例程的入口操作数栈对应的寄存器可能不同,所以在一个实施例中,每次匹配前需要取对应的寄存器来组装被匹配数据。
在一个实施例中,一旦匹配成功,就把这些指令添加至对应的读操作集合中;添加结束后,可以分别得到对操作数栈和局部变量表读操作的指令集合。
根据上面获取的指令集合可知:
vm_handler.op_stack_read_times=length(vm_handler.op_stack_insts)
vm_handler.local_var_table_read_times=length(vm_handler.local_var_table_insts)。
其中,vm_handler.op_stack_read_times表示对操作数栈的读次数。vm_handler.local_var_table_read_times表示对局部变量区的读次数。
本发明实施例使用mov指令从对应的操作数栈或者局部变量表区域将数据读出来;而用入口操作数栈寄存器组装操作数栈的读匹配特征。
如图2所示,本发明实施例还提供一种对操作数栈和变量表的读写装置,包括:
获取模块71,用于获取每个解释例程的操作数栈和局部变量表所对应的寄存器;
查找模块72,用于以所述寄存器作为查找条件即可找到每个解释例程中对操作数栈和局部变量表读操作的指令集合。
本发明实施例还提供一种对操作数栈和变量表的读写设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述对操作数栈和变量表的读写方法。
本发明实施例还提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行所述对操作数栈和变量表的读写方法。
在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,ReadOnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、***、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号。
Claims (6)
1.一种对操作数栈和变量表的读写方法,其特征在于,包括:
获取每个解释例程的操作数栈和局部变量表所对应的寄存器;
以所述寄存器作为查找条件即可找到每个解释例程中对操作数栈和局部变量表读操作的指令集合;
其中查找解释例程中对操作数栈和局部变量表读写的指令的方法,包括:
遍历所有的解释例程集合,在每个解释例程中进一步遍历其中的指令序列;
然后分别以操作数栈对应的寄存器和局部变量表对应的寄存器作为模式被匹配数据去匹配指令序列中对操作数栈和局部变量表的读操作。
2.根据权利要求1所述的对操作数栈和变量表的读写方法,其特征在于,每次匹配前需要取对应的寄存器来组装被匹配数据。
3.根据权利要求2所述的对操作数栈和变量表的读写方法,其特征在于,一旦指令匹配成功,就把指令添加至对应的读操作集合中;添加结束后,分别得到对操作数栈和局部变量表读操作的指令集合。
4.一种对操作数栈和变量表的读写装置,其特征在于,包括:
获取模块,用于获取每个解释例程的操作数栈和局部变量表所对应的寄存器;
查找模块,用于以所述寄存器作为查找条件即可找到每个解释例程中对操作数栈和局部变量表读操作的指令集合;
其中查找解释例程中对操作数栈和局部变量表读写的指令的方法,包括:
遍历所有的解释例程集合,在每个解释例程中进一步遍历其中的指令序列;
然后分别以操作数栈对应的寄存器和局部变量表对应的寄存器作为模式被匹配数据去匹配指令序列中对操作数栈和局部变量表的读操作。
5.一种对操作数栈和变量表的读写设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1~3中任意一项所述对操作数栈和变量表的读写方法。
6.一种计算机可读存储介质,其特征在于,存储有计算机可执行指令,所述计算机可执行指令用于执行权利要求1~3中任意一项所述对操作数栈和变量表的读写方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011110316.8A CN112199159B (zh) | 2020-10-16 | 2020-10-16 | 对操作数栈和变量表的读写方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011110316.8A CN112199159B (zh) | 2020-10-16 | 2020-10-16 | 对操作数栈和变量表的读写方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112199159A CN112199159A (zh) | 2021-01-08 |
CN112199159B true CN112199159B (zh) | 2022-03-25 |
Family
ID=74009248
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011110316.8A Active CN112199159B (zh) | 2020-10-16 | 2020-10-16 | 对操作数栈和变量表的读写方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112199159B (zh) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6075942A (en) * | 1998-05-04 | 2000-06-13 | Sun Microsystems, Inc. | Encoding machine-specific optimization in generic byte code by using local variables as pseudo-registers |
GB2409059B (en) * | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | A data processing apparatus and method for moving data between registers and memory |
WO2011120216A1 (zh) * | 2010-03-29 | 2011-10-06 | 华为技术有限公司 | 对指令执行次数进行计数的方法、***及处理器 |
CN109491918B (zh) * | 2018-11-22 | 2020-05-01 | 中国人民解放军战略支援部队信息工程大学 | 一种汇编冗余指令的检测方法及装置 |
-
2020
- 2020-10-16 CN CN202011110316.8A patent/CN112199159B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112199159A (zh) | 2021-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10460099B2 (en) | System and method of detecting malicious code in files | |
CN109478217B (zh) | 使用基于偏移的虚拟地址映射对目标应用功能的基于内核的检测 | |
CN108090346B (zh) | 一种基于数据流监控的代码复用攻击防御方法及*** | |
CN109583200B (zh) | 一种基于动态污点传播的程序异常分析方法 | |
CN107506622B (zh) | 一种基于内存对象访问序列的软件动态胎记及抄袭检测方法 | |
CN103955649A (zh) | 一种安全启动终端设备的方法 | |
CN109933986B (zh) | 恶意代码检测方法及装置 | |
CN111625833A (zh) | 一种高效的软件程序释放后重用漏洞判定方法和装置 | |
US9678886B2 (en) | Processing page fault exceptions in supervisory software when accessing strings and similar data structures using normal load instructions | |
CN112199159B (zh) | 对操作数栈和变量表的读写方法、装置、设备及存储介质 | |
US20170116417A1 (en) | Apparatus and method for detecting malicious code | |
US20140283060A1 (en) | Mitigating vulnerabilities associated with return-oriented programming | |
KR102507189B1 (ko) | 멜트다운 취약점을 이용한 인공신경망 추출 방법 | |
US11256786B2 (en) | Method to secure a software code | |
CN116244706A (zh) | 一种无人***嵌入式处理器隐藏指令防御方法 | |
CN109426702B (zh) | iOS平台文件读取保护方法、存储介质、电子设备及*** | |
CN112199116B (zh) | 操作数栈寄存器识别方法、装置、设备及存储介质 | |
CN112486723B (zh) | 数据校验方法、装置、处理器及电子设备 | |
CN113760193B (zh) | 用于资源受限制装置的数据读写方法、装置及指令集 | |
CN112199163B (zh) | 分析解释例程的虚拟指令方法、装置、设备及存储介质 | |
CN112966258B (zh) | 控制流完整性保护方法、***、装置及可读存储介质 | |
CN111898120B (zh) | 控制流完整性保护方法及装置 | |
CN111310184A (zh) | 基于rich头部标识的pe文件特征码生成方法、***、电子设备及存储介质 | |
CN112199160B (zh) | 虚拟指令还原方法、装置、设备及存储介质 | |
Isawa et al. | Generic unpacking method based on detecting original entry point |
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 |