时间无关调试学习笔记

最近和Yenkoc聊天时听说了时间无关调试这个概念,赶紧找来文章学习一下

概述

目前各种保护技术愈演愈烈,像加壳、VM等。时间无关调试即记录调试过程中的寄存器和内存变化,使用记录的trace离线调试分析。

相关工具有qira,微软的TTD(Time Travel Debugging),mozilla的record-replay debugging

各种功能描述

以下为和传统调试器相同的功能

  • 指令流视图
  • 函数调用栈

以下功能和传统调试器不同

  • 内存视图:内存中某个数值,定义为写入它的指令地址

  • 交叉引用视图:不再是某一时刻的交叉引用,而是全局交叉引用

    • <- 定义链,写入内存的地方

    • -> 使用链,读取内存的地方

  • 字符串参考:全局字符串参考,让字符串加密无可遁形

  • 污点跟踪

    • 正向污点跟踪:分析某个寄存器或内存点对于后续指令或寄存器的影响

    • 反向污点跟踪:分析某个寄存器或内存点的来源

  • 控制流图

    • 使用了自定义的结构化算法

    • 有布局配置导航图

参考

[1] 使用时间无关调试高效调试代码--看雪