题目描述题目名称test your Debugger题目类型Reverse题目链接[NSSRound#16 Basic]test your Debugger - NSSCTF1. 解题过程本文通过调试器对程序进行动态追踪以及对于静态分析时的代码理解获得关键flag。调试工具选用 x64dbg 以及 idaprowindows平台。1.1 ida静态分析先把程序拖到ida里分析一下在左边function找到main函数进去F5反编译能直接看到逻辑。关键在于可以看到如果不是调试器启动会直接暂停运行下面的逻辑无法体现。直接打开这个程序也能有直观体现。接着看后面的代码有个明显的提示BreakPoint。直接告诉你了在这个地方下断点。这个位置之后44 个正确答案已经由 GetNum 循环生成完毕即将与用户输入比较。在断点处向后看会找到循环比较的部分rsi 此时正指向正确值的数组而 rdi 指向我们输入的 44 个字节。现在思路就明白了调试器设置断点动态运行程序随意输入44个字节再去rsi里面取正确答案就行。1.2 关键断点与跟踪拖入x64dbg现在问题是到哪里去找到那个断点位置最简单的办法是直接找关键字符串,搜索BreakPoint右键搜索所有模块字符串搜索双击就能到指定位置在 call 的下一行按 F2 设断点。当然普适情况是在 IDA 中打开程序找到 call printf 的下一条指令例如 xor eax, eax。在 IDA 窗口的左下角状态栏可以看到这条指令的 文件偏移File Offset 和 虚拟地址VA。你需要的是 RVA即 VA - 基址。假设 IDA 的基址是 0x140000000该指令 VA 为 0x1400212F0则 RVA 0x212F0。在 x64dbg 中按 CtrlShiftB 打开断点窗口点添加。地址栏输入test_your_debugger.exe 0x212F0把你的 RVA 代入确定。这样无论程序加载到哪个基址断点都会自动计算正确。1.3 动态分析过程按F9运行程序你可能会看到多个断点不关键按F9继续运行到运行到要求你输入的地方输入任意44个字符例如AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAenter之后见到我们设置的断点断下后查看寄存器 RSI 的值。在左下角内存窗口 CtrlG输入 rsienter。从该地址起 44 个字节就是 flag 明文.复制出来排个版完事。NSSCTF{44d52a77-92ea-413e-98c4-ff5846fd3874}本题的静态解法详见[NSSRound#16 Basic] test your Debugger — Writeup-静态调试-CSDN博客