CN105843667B - 在虚拟机管理器中动态无侵的应用进程函数调用监控方法 - Google Patents
在虚拟机管理器中动态无侵的应用进程函数调用监控方法 Download PDFInfo
- Publication number
- CN105843667B CN105843667B CN201610117437.2A CN201610117437A CN105843667B CN 105843667 B CN105843667 B CN 105843667B CN 201610117437 A CN201610117437 A CN 201610117437A CN 105843667 B CN105843667 B CN 105843667B
- Authority
- CN
- China
- Prior art keywords
- code
- function call
- trigger
- eax
- function
- 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
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 (1)
1.在虚拟机管理器中动态无侵的应用进程函数调用监控方法,其特征是包括函数调用触发器插入位置的选择算法、触发器代码的构造,在需要监控的时候,从被监控的应用程序的函数的入口地址开始处根据函数调用触发器插入算法选择的位置插入函数调用触发器代码,不需要监控时恢复原样,具有动态性和无侵性;
所述的函数调用触发器代码如下:
(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 ≠ ⌽ 转步骤6);
4)如果 L ≥ 7 并且 eax ∊ R,则令 s=1,转步骤9);
5)如果 L ≥ 9 则令 s=2 转步骤9);否则转步骤2);
6)R \ ( rr ⋃ RW ) →R;
7)如果 R ≠ ⌽,则转步骤2);
8)L = 0,a = b,转步骤2);
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 CN105843667A (zh) | 2016-08-10 |
CN105843667B true 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 (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154257A (zh) * | 2007-08-14 | 2008-04-02 | 电子科技大学 | 基于漏洞特征的动态执行补丁方法 |
CN101162491A (zh) * | 2007-08-14 | 2008-04-16 | 电子科技大学 | 基于代码切片的虚拟执行系统与方法 |
CN101814049A (zh) * | 2010-03-23 | 2010-08-25 | 北京大学 | 一种内存泄漏探测方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4996929B2 (ja) * | 2007-01-17 | 2012-08-08 | 株式会社日立製作所 | 仮想計算機システム |
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 (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154257A (zh) * | 2007-08-14 | 2008-04-02 | 电子科技大学 | 基于漏洞特征的动态执行补丁方法 |
CN101162491A (zh) * | 2007-08-14 | 2008-04-16 | 电子科技大学 | 基于代码切片的虚拟执行系统与方法 |
CN101814049A (zh) * | 2010-03-23 | 2010-08-25 | 北京大学 | 一种内存泄漏探测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105843667A (zh) | 2016-08-10 |
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 | |
JP6516870B2 (ja) | プログラム命令を安全に実行する方法及び該方法用プログラム | |
US8561033B2 (en) | Selective branch-triggered trace generation apparatus and method | |
JP7377812B2 (ja) | トランザクションにおける例外ハンドリング | |
US9965631B2 (en) | Apparatus and method for analyzing malicious code in multi-core environment using a program flow tracer | |
US9836386B2 (en) | Automatic switch to debugging mode | |
JP2020511727A5 (zh) | ||
US20140289726A1 (en) | Function exit instrumentation for tail-call optimized code | |
Zhao et al. | How to do a million watchpoints: Efficient debugging using dynamic instrumentation | |
CN104077220A (zh) | Mips架构操作系统内核的调试方法和装置 | |
US6978399B2 (en) | Debug thread termination control points | |
EP3063692B1 (en) | Virtual machine introspection | |
CN109471800A (zh) | 一种基于Windows操作系统的软件无限断点设置方法 | |
CN108090352B (zh) | 检测系统及检测方法 | |
CN111444504A (zh) | 一种用于软件运行时自动识别恶意代码的方法及装置 | |
CN111913742B (zh) | 一种程序处理方法及相关设备 | |
CN105550575B (zh) | 一种未导出的函数地址和数据结构偏移的获取方法及装置 | |
CN105205391A (zh) | 一种基于完整性验证的净室实时监控方法 | |
US20100125830A1 (en) | Method of Assuring Execution for Safety Computer Code | |
US7657792B2 (en) | Identifying race conditions involving asynchronous memory updates | |
CN105843667B (zh) | 在虚拟机管理器中动态无侵的应用进程函数调用监控方法 | |
CN111931191A (zh) | Linux平台二进制软件堆溢漏洞动态检测方法及系统 | |
KR101995176B1 (ko) | 프로그램 실행 컨텍스트 기반의 빅데이터를 활용한 역공학 방법 및 시스템 | |
CN110673899B (zh) | 一种程序处理方法及相关设备 | |
CN107844703B (zh) | 一种基于Android平台Unity3D游戏的客户端安全检测方法及装置 |
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 |