参加国际学术会议总结(3)

时间:2021-08-31

  系统级处理机制,SEH作为系统内部处理异常的一种机制,其工作主要在系统级完成,因此掌握系统内部异常处理的工作原理是研究基于SEH的软件反跟踪的关键。下面围绕异常处理例程深入分析系统级异常处理机制。异常发生时,系统执行KiUserExceptionDispatcher函数并调用RtlDispatchException启动对注册的异常处理例程的查找。如果找到的处理例程处理了异常并继续执行,则对RtlDispatchException的调用不再返回。否则,有两种可能:调用NtContinue使程序继续或产生另一个异常。若是后者,异常不再继续,进程必须终止。

  RtlDispatchException函数遍历异常帧,利用获得的指向EXCEPTION_REGISTRATIONS链表的指针遍历每一个节点查找异常处理例程,并通过RtlpExecuteHandlerForException完成异常处理例程的调用,根据RtlpExecuteHandlerForException的反馈信息,RtlDispatchException或者继续遍历异常帧,或者产生另一个异常,最终将控制送至ExecuteHandler函数,由该函数通过EXCEPTION_REGISTRATION的handler域调用异常处理例程,对程序执行中产生的异常进行处理。

  SEH在软件反跟踪中的主要应用方式是调试工具的检测、硬件断点的去除、改变程序执行顺序等,但这些反跟踪技术相对比较成熟,很容易被破解者发现并成功破解。本文所介绍的是一种更加隐蔽,效果更好的反跟踪方式:单步异常-抽取代码法。

  在程序的正常执行序列中设置功能请求标志位,之后触发单步异常,进入异常处理例程后根据标志位完成所抽取的相应的功能,继续程序的运行。这样,如果破解者不能发现异常处理例程的存在,将无法实现该功能。这是因为异常发生后,调试器接管了异常,而不会去调用作者安装的实现具体功能的异常处理例程,从而达到反跟踪的目的。