CN105843667A - 在虚拟机管理器中动态无侵的应用进程函数调用监控方法 - Google Patents
在虚拟机管理器中动态无侵的应用进程函数调用监控方法 Download PDFInfo
- Publication number
- CN105843667A CN105843667A CN201610117437.2A CN201610117437A CN105843667A CN 105843667 A CN105843667 A CN 105843667A CN 201610117437 A CN201610117437 A CN 201610117437A CN 105843667 A CN105843667 A CN 105843667A
- Authority
- CN
- China
- Prior art keywords
- code
- trigger
- function call
- function
- eax
- 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
- 238000000034 method Methods 0.000 title claims abstract description 32
- 238000012544 monitoring process Methods 0.000 title claims abstract description 24
- 238000003780 insertion Methods 0.000 claims abstract description 34
- 230000037431 insertion Effects 0.000 claims abstract description 34
- 238000007689 inspection Methods 0.000 claims description 2
- 101001053395 Arabidopsis thaliana Acid beta-fructofuranosidase 4, vacuolar Proteins 0.000 claims 1
- 238000010276 construction Methods 0.000 abstract 1
- 238000005516 engineering process Methods 0.000 description 2
- 238000004088 simulation Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
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
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
本发明是在虚拟机管理器中动态无侵的应用进程函数调用监控方法,包括函数调用触发器插入算法、触发器代码的构造。在需要监控的时候,从被监控的应用程序的函数的入口地址开始处根据函数调用触发器插入算法选择的位置插入函数调用触发器代码,不需要监控时可以恢复原样,具有动态性和无侵性。优点:可在任何一个被监控函数的入口处开始寻找一个7字节或者9字节的位置,在这个位置根据这个位置原来的代码的情况选择长度分别为7字节和9字节两种函数调用触发代码之一进行插入。
Description
技术领域
本发明涉及的是一种在虚拟机管理器中动态无侵的应用进程函数调用监控方法,能够监控任何一个用户进程中任何一个函数的调用。监控行为是可以动态设置的,只有在管理者需要的时候才在被监控的应用程序的被调用函数中插入函数调用触发器,函数调用触发器插入后一旦需要被监控的函数被调用,则函数调用触发器触发异常、陷入虚拟机管理器;在应用程序中的函数不需要被监控时,这个函数的代码保持原样。因此,该监控方法是动态的和无侵的,属于计算机应用技术领域。
背景技术
现有的监控方法有的采用对注册的函数指针表进行修改,使得函数被调用的时候能跳转到监控函数处进行监控,这样的方法对没有注册的函数就无法监控;有的监控方法采用在函数调用处插入监控代码,这样的方法难以实现动态地进行配置,对应用程序要进行修改、编译等,不是无侵的。
在软件行为监控、软件测试中需要一种动态无侵的函数调用监控方法,本发明正是提供了这样一种方法。
发明内容
本发明提出的是一种在虚拟机管理器中动态无侵的应用进程函数调用监控方法,可在任何一个被监控函数的入口处开始寻找一个7字节或者9字节的位置,在这个位置根据这个位置原来的代码的情况选择长度分别为7字节
和9字节两种函数调用触发代码之一进行插入。
本发明的技术解决方案:在虚拟机管理器中动态无侵的应用进程函数调用监控方法,其特征是包括函数调用触发器插入算法、触发器代码的构造,在需要监控的时候,从被监控的应用程序的函数的入口地址开始处根据函数调用触发器插入算法选择的位置插入函数调用触发器代码,不需要监控时可以恢复原样,具有动态性和无侵性。
本发明的优点:
1)虚拟化机制用于触发器中的某些代码在具有硬件虚拟化机制的CPU上一定可以产生异常进而陷入虚拟机管理器中,不会被旁路;
2)动态无侵的监控方法可以只在管理者需要的时候才在被监控的应用程序的被调用函数中插入函数调用触发器。在应用程序中的函数不需要被监控时,这个函数的代码可以恢复到原样;
3)插入函数调用触发器后,一旦需要被监控的函数被调用,则触发器触发异常、陷入虚拟机管理器;在虚拟机管理器中进行分析与控制,具有更高的安全性;
4)函数调用触发器插入位置的选择是在被监控的函数的开始的一段代码中选择若干可以的被覆盖字节用于插入函数调用触发器,并且在虚拟机管理器中准确地模拟运行这些被覆盖的代码;
5)触发器代码的构造包括通常的产生陷入虚拟机管理器的代码和相关寄存器保存与恢复。这样可以保持应用程序的功能不收到任何影响,实现了无侵性;
6)可在任何一个被监控函数的入口处开始寻找一个7字节或者9字节的位置,在这个位置根据这个位置原来的代码的情况选择长度分别为7字节
和9字节两种函数调用触发代码之一进行插入。
具体实施方式
在虚拟机管理器中动态无侵的应用进程函数调用监控方法,包括函数调用触发器插入算法、触发器代码的构造,在需要监控的时候,从被监控的应用程序的函数的入口地址开始处根据函数调用触发器插入算法选择的位置插入函数调用触发器代码,不需要监控时可以恢复原样,具有动态性和无侵性。
在需要监控的时候,从被监控的应用程序的函数的入口地址开始处根据函数调用触发器插入算法选择的位置插入函数调用触发器代码,不需要监控时可以恢复原样,具有动态性和无侵性。
所述的函数调用触发器代码如下:
(1)如果在被监控的函数的入口代码到函数调用触发器代码插入点之前寄存器eax没有被改写,则触发器代码codeA为:
mov eax, constant;
cpuid
(2)在被监控的函数的入口代码到函数调用触发器代码插入点之前寄存器eax被改写,触发器代码codeB如下,其中register是从触发器插入点开始没有被改写过的一个通用寄存器:
mov register, eax
mov eax, constant
cpuid
mov eax, register 。
所述的函数调用触发器插入算法:
1)令插入点位置a=0,下一条被检查指令位置 b=0,检查通过的指令长度L=0,状态s=0,插入点之前被改写过的通用寄存器集合RW=∅,在插入点之前没有被该写过可以用来保存eax原来的值的通用寄存器集合R={ eax, ebx, ecx, edx, esi, edi };
2)在b处读取一条指令,设指令的长度为k,指令中的作为源操作数的通用寄存器的集合为rr,作为目的操作数的通用寄存器的集合为rw;L + k → L, b + k → b, RW ⋃ rw→RW;
3)如果rr ∩ R ≠⌽ 转VI
4)如果 L ≥ 7 并且 eax ∊ R,则令 s=1 转IX;
5)如果 L ≥ 9 则令 s=2 转IX;否则转II;
6)R \ ( rr ⋃ RW ) → R;
7)如果 R ≠⌽, 则转II;
8)L = 0, a = b, 转II;
9)如果s=1 则报警代码为代码序列codeA;如果s=2 则报警代码为代码序列codeB;报警代码插入位置a。
工作时,函数调用触发代码插入后,一旦这个函数被调用,函数调用触发代码就被执行,继而产生异常陷入虚拟机监控器,在虚拟机监控器中对函数被调用的情况进行分析与控制。同时,在返回前,为被监控的应用进程模拟执行被覆盖的相应的代码,使得应用进程在功能上与未被监控的情况完全一样。函数调用触发代码的插入可以进行动态地管理,在管理者发出监控命令时,执行函数调用触发代码插入算法,插入相应的函数调用触发代码。在管理者发出停止监控命令时,可以撤销插入的函数调用触发代码,被监控的函数的原样。
函数调用触发代码插入算法:
令插入点位置a=0,下一条被检查指令位置 b=0,检查通过的指令长度L=0,状态s=0,插入点之前被改写过的通用寄存器集合RW=∅,在插入点之前没有被该写过可以用来保存eax原来的值的通用寄存器集合R={ eax, ebx, ecx, edx, esi, edi };
在b处读取一条指令,设指令的长度为k,指令中的作为源操作数的通用寄存器的集合为rr,作为目的操作数的通用寄存器的集合为rw;L + k → L, b + k → b, RW ⋃ rw →RW;
如果rr ∩ R ≠ ⌽ 转VI
如果 L ≥ 7 并且 eax ∊ R,则令 s=1 转IX;
如果 L ≥ 9 则令 s=2 转IX;否则转II;
R \ ( rr ⋃ RW ) → R;
如果 R ≠ ⌽, 则转II;
L = 0, a = b, 转II;
如果s=1 则报警代码为代码序列codeA;如果s=2 则报警代码为代码序列codeB;报警代码插入位置a。
函数调用触发代码codeA:
mov eax, constant;
cupid
函数调用触发代码codeB:
mov register, eax
mov eax, constant
cupid
mov eax, register
Claims (3)
1.在虚拟机管理器中动态无侵的应用进程函数调用监控方法,其特征是包括函数调用触发器插入算法、触发器代码的构造,在需要监控的时候,从被监控的应用程序的函数的入口地址开始处根据函数调用触发器插入算法选择的位置插入函数调用触发器代码,不需要监控时可以恢复原样,具有动态性和无侵性。
2.根据权利要求1所述的在虚拟机管理器中动态无侵的应用进程函数调用监控方法,其特征是所述的函数调用触发器代码如下:
(1)如果在被监控的函数的入口代码到函数调用触发器代码插入点之前寄存器eax没有被改写,则触发器代码codeA为:
mov eax, constant;
cpuid
(2)如果在被监控的函数的入口代码到函数调用触发器代码插入点之前寄存器eax被改写,触发器代码codeB如下,其中register是从触发器插入点开始没有被改写过的一个通用寄存器:
mov register, eax
mov eax, constant
cpuid
mov eax, register 。
3.根据权利要求1所述的在虚拟机管理器中动态无侵的应用进程函数调用监控方法,其特征是所述的函数调用触发器插入算法:
1)令插入点位置a=0,下一条被检查指令位置 b=0,检查通过的指令长度L=0,状态s=0,插入点之前被改写过的通用寄存器集合RW=∅,在插入点之前没有被该写过可以用来保存eax原来的值的通用寄存器集合R={ eax, ebx, ecx, edx, esi, edi };
2)在b处读取一条指令,设指令的长度为k,指令中的作为源操作数的通用寄存器的集合为rr,作为目的操作数的通用寄存器的集合为rw;L + k → L, b + k → b, RW ⋃ rw→RW;
3)如果rr ∩ R ≠ ⌽ 转VI
4)如果 L ≥ 7 并且 eax ∊ R,则令 s=1 转IX;
5)如果 L ≥ 9 则令 s=2 转IX;否则转II;
6)R \ ( rr ⋃ RW ) → R;
7)如果 R ≠⌽, 则转II;
8)L = 0, a = b, 转II;
9)如果s=1 则报警代码为代码序列codeA;如果s=2 则报警代码为代码序列codeB;报警代码插入位置a。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610117437.2A CN105843667B (zh) | 2016-03-02 | 2016-03-02 | 在虚拟机管理器中动态无侵的应用进程函数调用监控方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610117437.2A CN105843667B (zh) | 2016-03-02 | 2016-03-02 | 在虚拟机管理器中动态无侵的应用进程函数调用监控方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105843667A true CN105843667A (zh) | 2016-08-10 |
CN105843667B CN105843667B (zh) | 2019-01-15 |
Family
ID=56586851
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610117437.2A Active CN105843667B (zh) | 2016-03-02 | 2016-03-02 | 在虚拟机管理器中动态无侵的应用进程函数调用监控方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105843667B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154257A (zh) * | 2007-08-14 | 2008-04-02 | 电子科技大学 | 基于漏洞特征的动态执行补丁方法 |
CN101162491A (zh) * | 2007-08-14 | 2008-04-16 | 电子科技大学 | 基于代码切片的虚拟执行系统与方法 |
US20080172499A1 (en) * | 2007-01-17 | 2008-07-17 | Toshiomi Moriki | Virtual machine system |
CN101814049A (zh) * | 2010-03-23 | 2010-08-25 | 北京大学 | 一种内存泄漏探测方法 |
US20110213687A1 (en) * | 2010-02-26 | 2011-09-01 | James Michael Ferris | Systems and methods for or a usage manager for cross-cloud appliances |
-
2016
- 2016-03-02 CN CN201610117437.2A patent/CN105843667B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080172499A1 (en) * | 2007-01-17 | 2008-07-17 | Toshiomi Moriki | Virtual machine system |
CN101154257A (zh) * | 2007-08-14 | 2008-04-02 | 电子科技大学 | 基于漏洞特征的动态执行补丁方法 |
CN101162491A (zh) * | 2007-08-14 | 2008-04-16 | 电子科技大学 | 基于代码切片的虚拟执行系统与方法 |
US20110213687A1 (en) * | 2010-02-26 | 2011-09-01 | James Michael Ferris | Systems and methods for or a usage manager for cross-cloud appliances |
CN101814049A (zh) * | 2010-03-23 | 2010-08-25 | 北京大学 | 一种内存泄漏探测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105843667B (zh) | 2019-01-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10380343B1 (en) | System and method for programmatic runtime de-obfuscation of obfuscated software utilizing virtual machine introspection and manipulation of virtual machine guest memory permissions | |
CN108090346B (zh) | 一种基于数据流监控的代码复用攻击防御方法及系统 | |
Kawakoya et al. | Memory behavior-based automatic malware unpacking in stealth debugging environment | |
US9195476B2 (en) | System and method for aggressive self-modification in dynamic function call systems | |
US8561033B2 (en) | Selective branch-triggered trace generation apparatus and method | |
US20090037888A1 (en) | Simulation of program execution to detect problem such as deadlock | |
US9459991B2 (en) | Heap dump object identification in a heap dump analysis tool | |
CN104077220A (zh) | Mips架构操作系统内核的调试方法和装置 | |
US10089474B2 (en) | Virtual machine introspection | |
US9244821B2 (en) | Latent defect indication | |
US7657792B2 (en) | Identifying race conditions involving asynchronous memory updates | |
CN113760770A (zh) | 基于自动静态资源检测的反调试方法和系统 | |
CN111913742B (zh) | 一种程序处理方法及相关设备 | |
CN110737888A (zh) | 虚拟化平台操作系统内核数据攻击行为检测方法 | |
Abrath et al. | Resilient self-debugging software protection | |
CN111931191A (zh) | Linux平台二进制软件堆溢漏洞动态检测方法及系统 | |
CN105843667A (zh) | 在虚拟机管理器中动态无侵的应用进程函数调用监控方法 | |
WO2020101928A1 (en) | Efficient register breakpoints | |
Shosha et al. | Digital forensic reconstruction of a program action | |
US6772372B2 (en) | System and method for monitoring unaligned memory accesses | |
Gu et al. | {COMRace}: detecting data race vulnerabilities in {COM} objects | |
KR102462864B1 (ko) | 멀티 코어를 이용한 동적 바이너리 인스트루멘테이션 장치 및 방법 | |
US10296432B2 (en) | Systems and methods for invasive debug of a processor without processor execution of instructions | |
BR102015030217A2 (pt) | método para monitoramento de processos independentes alocados em acesso a banco de dados de uma máquina virtual java | |
Lin et al. | VMRe: A reverse framework of virtual machine protection packed binaries |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |