一种热点模块指令跟踪的方法及设备的制造方法

文档序号:9375467阅读:234来源:国知局
一种热点模块指令跟踪的方法及设备的制造方法
【技术领域】
[0001] 本发明属于软件分析技术领域,具体一种针对热点模块进行指令跟踪的方法,其 被指定的热点模块可以是用户自己指定的文件所在的内存页。
【背景技术】
[0002] 调试器是自从计算机诞生时就存在的,初期的调试器都是基于硬件直接实现的, 调试器的工作原理是基于中央处理器的异常机制,并由操作系统的异常分发\事件分发的 子系统(或模块)负责将其封装处理后,以比较友好的方式与调试器进行实时交互,调试是 软件维护与错误修正的一个最重要、最直接,也是必不可少的一种机制。
[0003] 调试器最基本的功能包括控制软件运行,查看软件运行中信息,修改软件执行流 程。控制软件运行就是指,将一个飞速运行的程序中断下来,并且使其按照用户的意愿执 行,调试器是靠迫使目标程序触发一个精心构造的异常来完成这些工作的;查看软件运行 中信息,这些信息包含但不限于当前线程的寄存器信息,堆栈信息,内存信息,当前EIP附 近的反汇编信息等;修改软件执行流程包括修改内存信息、反汇编信息、堆栈信息、寄存器 信息等。
[0004] 普通的调试器无法对指定的内存页进行全指令追踪,单步跟踪可以较好的跟踪线 程指令,但仍然无法处理系统回调触发的指令执行,单步跟踪的性能开销同时也是非常大; 断点跟踪可以较好的解决性能开销,但是断点的设置开销非常大,并且同样无法处理系统 回调触发的指令执行,因此断点跟踪往往只用有限数量指令的跟踪。

【发明内容】

[0005] 针对上述现有技术问题,本发明的目的在于提供一种针对热点模块进行指令追踪 的方法,该方法能够动态的分析进程所访问的内存页,对被调试进程进行有效追踪查看,并 有效检测恶意代码对内存页的访问,同时在指令跟踪的完备性和性能开销上都有良好的表 现。
[0006] 为了达到上述目的,本发明采用如下技术方案:
[0007] -种热点模块指令追踪的方法,其流程如图1所示,主要包括以下步骤:
[0008] 步骤1.标识感兴趣的页:用户根据需要标记感兴趣的文件为热点模块,将热点模 块所在代码页记为感兴趣的页并设置为PAGE_GUARD属性,标识并记录这些代码页的PAGE_ GUARD属性,执行步骤2 ;
[0009] 步骤2.被调试进程在运行时可能触发异常,其中,由于感兴趣的页已经被设置 PAGE_GUARD属性,若被调试进程的某一线程访问到标识为感兴趣的内存页,则会触发异常; 主程序接收到触发的异常后,对被调试进程进行挂起处理,执行步骤3 ;
[0010] 步骤3.处理PAGE_GUARD异常:异常处理进程接受到被调试进程发送的异常事件 后对异常进行判定及处理,处理后将被调试进程唤起,执行步骤4 ;
[0011] 步骤4. 一旦发现步骤3中线程所触发的异常为PAGE_GUARD异常,则被调试进程 唤起后,把该线程所访问的包含有该内存页PAGE_GUARD属性及其位置的信息写入一个链 表中,此时该内存页的PAGE_GUARD属性丢失,并将被调试进程的所有线程设置为单步调试 即一步一步的执行指令,执行步骤5 ;
[0012] 步骤5.当单步执行下个线程的指令后将触发单步异常,单步执行进程进行异常 处理,当前线程的单步标示位丢失,该线程不再单步;判断该线程下条指令所访问内存页位 置是否处于所设定感兴趣的页,如果处于感兴趣的页,并且该页具有PAGE_GUARD属性则重 新执行步骤4,若该页没有PAGE_GUARD属性就使该线程继续单步;如果线程未访问感兴趣 的页,则该线程不再单步,并针对此前已丢失PAGE_GUARD属性的内存页根据步骤4所述链 表重设其PAGE_GUARD属性并重新执行步骤2 ;
[0013] 步骤6.按照上述方法,即可实现进程在调试过程中热点模块是否被访问及访问 频率的实时跟踪。
[0014] 本发明还提供一种实现上述指令追踪方法的装置,其结构如图2所示,包括调试 循环模块,异常处理模块,读取寄存器及内存模块,断点功能模块,单步执行模块;
[0015] 调试循环模块:一个进程成为被调试进程之后,在完成了某些操作或者发生异常 时,它会发送通知给调试器,然后将自身挂起,直到调试器命令它继续执行;
[0016] 异常处理模块:通过异常的分发,对不同的异常事件进行处理,异常处理分离了接 收和处理错误代码,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中 出现的异常状况(即超出程序正常执行流程的某些特殊条件);
[0017] 读取寄存器及内存模块:线程都有一个上下文环境,它包含了有关线程的大部分 信息,例如线程栈的地址,线程当前正在执行的指令地址等;上下文环境保存在寄存器中, 系统进行线程调度的时候会发生上下文切换,实际上就是将一个线程的上下文环境保存到 内存中,然后将另一个线程的上下文环境装入寄存器;
[0018] 断点功能模块:在进行调试的时候,只有被调试进程暂停执行时调试器才可以对 它执行操作,例如观察内存内容等;如果被调试进程不停下来的话,调试器是什么也做不了 的;要使被调试进程停下来,除了几个在特定时刻才发生的调试事件外,唯一的途径就是引 发异常,断点就是达到以上目的的异常;
[0019] 单步执行模块:单步执行是最常见的调试手段之一,即每次执行一个指令,它也包 括逐语句、逐过程、跳出三种命令;
[0020] 通过使用Windows API函数CreateProcess启动被调试程序,通过调试循环模块, 调试程序循环等待被调试程序触发异常事件;所述异常处理模块对异常事件进行分发处 理;通过读取寄存器和内存这一模块,得到被调试进程访问页的位置信息,判断是否访问到 感兴趣的内存页,如果访问的是热点模块,则触发PAGE_GUARD异常;通过异常处理模块处 理PAGE_GUARD异常并将被调试进程唤起,被调试进程的所有线程通过单步执行模块被设 置为单步调试,一条一条的执行指令。
[0021] 单步调试模块还具有以下功能:在单步调试过程中,若当前指令访问感兴趣的内 存页即产生PAGE_GUARD异常,唤起进程后继续按单步调式方式执行指令;若当前指令出现 非PAGE_GUARD异常并唤醒进程后或未出现任何异常,则利用所述链表记录的信息,将此前 已丢失PAGE_GUARD属性的内存页重新设置相应的PAGE_GUARD属性,并取消当前指令对应 线程的单步调试方式;而断点功能模块可以在主程序进行调试时根据实际需要暂停程序执 行,使得调试过程更灵活。
[0022] 本发明同现有技术相比,其有益效果表现在:
[0023] -、使用PAGE_GUARD属性实时监控内存页,针对性强,确保了每条进入感兴趣页 面的线程指令都能被探测到;
[0024] 二、当触发PAGE_GUARD异常以后将对被调试进程的线程进行单步调试,所有线程 将进行临时的单步运行,确保了多线程环境下指令跟踪的完备性;
[0025] 三、对热点模块百分之百跟踪,对非热点模块几乎不跟踪,性能开销低,可用于大 型程序的分析;
【附图说明】
[0026] 图1是本发明提供的热点模块指令追踪的方法流程图。
[0027] 图2为本发明提供的热点模块指令追踪的装置结构示意图。
【具体实施方式】
[0028] 下面将结合附图及【具体实施方式】对本发明作进一步的描述。
[0029] 实施例
[0030] 具体实施是基于微软公司的Windows7系统。
[0031] 将开发的基于热点模块追踪的调试器在Wind〇ws7系统下进行调试,使用visual stdio2013对项目进行编译运行。调试器项目可以指定一个exe执行文件,并选定可能被 恶意攻击的内存页标识为PAGE_GUARD属性,随后调试器生成一个进程,指定为被调试的进 程,一旦被调
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1