CTF逆向Re:零基础系统性入门教程-5-动态调试

news/2025/11/22 16:23:51/文章来源:https://www.cnblogs.com/penetr4t10n/p/19257062

目录

动态调试是什么

先说一些基础概念

为什么要动态调试

怎么动态调试

1.动态调试代替思考

2.动态调试劫持控制


动态调试是什么

简单说,就是运行程序,运行中监控程序的运行流程,数据变化,和静态分析的对比如下

场景 动态调试(推荐) 静态分析(推荐)
确认参数寄存器 / 调用约定 ✅ 直接观察寄存器值变化 ❌ 容易因编译器差异判断错误
提取解密后的中间数据 ✅ 内存中直接追踪字符串 ❌ 需逆向所有加密步骤,易出错
绕过校验 / 触发 flag ✅ 改内存 / 寄存器直接满足条件 ❌ 可能需要 patch 二进制,步骤繁琐
理解整体代码结构 ❌ 太细节,容易陷入指令级泥潭 ✅ 快速看函数调用、逻辑分支

先说一些基础概念

  • 断点:程序执行到此处会停下
  • 单步(F8):程序执行一步
  • 运行(F9):运行程序,到断点停下

为什么要动态调试

  • 快速观察程序运行流程,变量流向。
  • 程序有加密流程,追踪字符串,观察加密方法
  • 需要控制程序走向

怎么动态调试

今天我们只讲IDA的动态调试。首先我们要先明确一点,动态调试本质是要让程序运行,不同车保程序的运行平台也是不一样的,因此,IDA动态调试分为本地调试远程调试两种。具体怎么远程调试这里不展开,网上教程很多

1.动态调试代替思考

对于动态调试,我想用一题简单的例题来引入,这是一道十分基础的XOR

img

点击并拖拽以移动那么已知主函数如下,密文已经显示,且只存在XOR计算,如何最快解出flag。因为这个XOR函数计算比较简单,大多数人会选择用python写一个反推脚本(flag+1=x⬅️flag=x-1),这很好理解

如果从另一个角度来想,XOR运算是可逆运算(a异或b=c,a异或c=b),我们用动态调试会怎么样

这里为了方便大家观察,因此我下了两个断点,正常来说只要在图一的if判断处下一个就可以了

img

点击并拖拽以移动选择Local Window debugger后点击绿色小箭头(F9)执行程序

img

接着在弹出的命令窗输入主函数看到的密文回车,此时程序停止在我们的第一个断点,我们可以打开字符串表(Locals)更方便看变化的字符串。(菜单栏Debugger➡️debugger windows➡️Locals)此时我们可以看到Str1Str2内的值都是一样的,而下一步就是进行异或运算

img

此时我们点击F8,程序会执行下一步,边执行边观察Locals窗口,发现Str1的值变红,证明发生了变化,观察就是flag

img

点击并拖拽以移动

此时,你是否意识到,我们根本没有看XOR中的加密流程,而是直接利用动态调试绕过计算帮我们输出了结果,这就是动态调试最大的好处之一。回忆一下,自己品味一下为什么可以这样

2.动态调试劫持控制

接下来我们来看第二题,一道利用动态调试实现非预期解的题目,不过由于这题的base64加密没有魔改,因此直接解会更快,但是我们学习重点是如何用动态调试的方法来帮我们跳过加密的步骤。

看主函数,可以发现是base64加密,密文也摆在眼前了,但是注意到只执行了encode函数,还有一个decode的函数并没有被执行

img

那么,我们可不可以让这个decode函数帮我们解密呢,当然。那我们需要什么

1.decode函数地址

2.密文地址(打开shift+F12找)

提前准备好,准备开始劫持!

首先,我们在call encode函数处下个断点,先不让程序执行加密函数

img

点击并拖拽以移动接下来,来到decode函数,在其将解密的值传回处,下个断点,先不让程序结束

img

点击并拖拽以移动接下来观察,输入encode函数Str的哪个寄存器,一般来说是RDI,不过这里是RCX

img

点击并拖拽以移动F9运行程序,随便输点东西。程序停在call encode前,这时候我们要让它执行call decode。在register窗口找到RIP,(储存程序要跳转的下一个地址)双击并修改地址为decode的地址

img

点击并拖拽以移动此时成功就会跳转到decode函数,记得刚刚说过RCX是要输入到Str的寄存器吗,双击它,将地址改成密文的地址

img

点击并拖拽以移动F9执行程序,我们就会发现,RDX寄存器的内容已经发生变化,这就是我们要的结果。看起来不像flag是因为,题目还有一步调换字符,这里就不展示了。

img

点击并拖拽以移动至此,我们又能发现动态调试一个强大的功能,就是控制流劫持。我们可以构造有利于我们解题的条件。

img

动态调试是 “让程序‘说话’” 的工具 —— 它将静态代码转化为可交互的运行过程,既能验证分析结论,又能直接获取关键数据绕过复杂逻辑,是逆向中 “从理论到实操” 的核心桥梁,尤其在静态分析陷入困境时,动态调试往往是破局的关键

相信你已经掌握动态调试了,快去练几题试试吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/973213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF1817B Fish Graph

题目大意 定义了一个鱼图,求是否存在并输出环和两点的边。 题意分析 直接暴力,但是需要加一点点小优化,具体如下:环的检测:我们首先需要在图中找到一个环,如果遇到了一个已经访问过的节点,并且该节点不是当前路…

CF1630C Paint the Middle

最简题意 给定一个长度为 \(n\) 的数组,数组中的元素初始值都为零。可以通过以下操作来修改颜色:选择三个元素 \((i,j,k)\) 满足 \(1\leq i<j<k \leq n\),并且保证 \(a_i=a_k\),同时 \(c_i=c_k=0\),那么可以…

CF1707B Difference Array

题目大意 题目大意非常简短,就是给你一个数组。每次同时进行 \(a_i=a_{i+1}-a_i\) 的操作,求最后留下的一个数是什么,如下:计算数组中相邻两个元素的差值,得到新的数组。 对新数组排序,然后将其替换。 重复此过程…

P3113 [USACO14DEC] Marathon G

题目大意 马拉松路线由 \(N\) 个检查点组成,选手必须按顺序经过每个检查点。有两种操作:更新某个检查点的坐标。 查询从检查点 \(X\) 到 \(Y\) 的最短路径长度,允许跳过其中一个中间。要求高效处理这些操作。 思路分…

封装map和set(红黑树作为底层结构如何完成map和set插入遍历)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

淮安市一对一辅导机构权威排行榜推荐:2026家教机构穿透式测评!

为贴合淮安市小学、初中、高中学生对语文、数学、英语、理化生、史地政全部学科一对一家教课外补习的核心需求,解决家长选择辅导培训教育机构的核心困扰——教师资质虚实难辨、教学方案千篇一律、隐形消费层出不穷、孩…

崖山数据库导出 - 华

崖山数据库导出将F:\A_MAZ\A_package\yashandb-client-23.4.1.102-windows-amd64\binF:\A_MAZ\A_package\yashandb-client-23.4.1.102-windows-amd64\lib放入环境变量 然后在F:\A_MAZ\A_package\yashandb-client-23.4.…

南昌航空大学-软件学院-23207201-吕玉英

题目集 1-3电梯调度程序实践与反思 一、前言 过去这些天里,我们开始了为期三周的电梯调度大作业学习,这三次题目集围绕电梯调度系统展开渐进式设计,体现了从基础到复杂、从单一功能到系统架构的完整学习路径。第一次…

AI Compass前沿速览:Nano Banana Pro、Gemini 3 、 HunyuanVideo 1.5 、Meta SAM 3D生成

AI Compass前沿速览:Nano Banana Pro、Gemini 3 、 HunyuanVideo 1.5 、Meta SAM 3D生成AI Compass前沿速览:Nano Banana Pro、Gemini 3 、 HunyuanVideo 1.5 、Meta SAM 3D生成 AI-Compass 致力于构建最全面、最实用…

Prufer序列与Cayley公式

Cayley公式:n个节点的带标号的无根树有n^(n-2)个。 证明 Prufer序列与树的转换 重要性质: prufer序列中某个编号出现的次数+1就等于这个编号的节点在无根树中的度数。

MX Round 27 解题报告

MX Round 27 解题报告 T1 观察一:对于区间 \([l,l]\),它如果不为 \(1\),那么有 \(a_i=w_{l,l}\);否则有 \(a_i=0\) 或 \(a_i=1\)。 观察二:对于第 \(i\) 个和第 \(i+1\) 个无法被确定的数,通过查询区间内已知的最…

11.22模拟赛

T1 给定一棵 \(n\) 个点的树,点有颜色,问有哪些 \(u\) 满足,对于任意的 \(v\),路径 \((u,v)\) 上不出现重复颜色。 对于所有数据,满足 \(1 \leq n \leq 2 \times 10^5, 1 \leq c_i \leq n\)。 题解 考虑用样的颜色…

从超时到秒杀:三路快排解决数组排序的完整实战与反思

从超时到秒杀:三路快排解决数组排序的完整实战与反思在算法学习中,“数组排序”是绕不开的基础问题,但看似简单的需求,却藏着对时间复杂度、空间复杂度的深度考量。本文结合我在 LeetCode “数组升序排列” 问题中…

2025年光伏安装厂家权威推荐榜单:光伏施工/光伏/光伏发电源头厂家精选

在能源转型战略的推动下,光伏产业迎来爆发式增长,专业的光伏安装服务正成为保障系统高效稳定运行的关键环节。 根据行业统计数据,2024年中国光伏新增装机量达277.57GW,同比增长28.3%,相当于2010年到2020年11年的累…

机房夸夸乐

前言 先开坑…… 咱们来写一个机房夸夸乐吧,争取 \(noip\) 前更完。 可能会有一些外号,自己猜猜是谁吧~~ 注:按照座位顺序来的。

2025年镀锌水沟盖板订做厂家权威推荐榜单:雨水沟盖板/污水沟盖板/镀锌排水沟盖板源头厂家精选

在城市化建设和工业基础设施升级的推动下,镀锌水沟盖板凭借其优异的防腐性能和承载能力,正成为市政工程、工业园区和道路排水系统的关键部件。 根据市场调研数据显示,2024年中国钢格板市场规模达到85亿元,年均增长…

完整教程:【Deepseek OCR】重磅测试,mac环境下的体验【本人已经本地实验成功】

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

使用C# Channel实现工位流水线调度系统

在现代制造业中,流水线生产需要精确的工位协作。本文将介绍如何使用C#的Channel实现一个高效的工位流水线调度系统。 1、首先我们准备一个工位接口public interface IWorkstation{string WorkName { get; }Task Start…

福星福袋助手,抖音福袋扭蛋机,抖音抢福袋工具

抖音福星福袋助手,抖音福袋扭蛋机,抖音抢福袋工具 DY福袋工具 抖音福袋福星福袋助手 最新版本群里下载 [2025-11-20] 抖音福星福袋助手,抖音抢福袋工具,抖音无水印视频下载器,抖音直播间录制下载器,抖音批量取消…

2025年发电机制造厂权威推荐榜单:康姆勒原装发电机组/康姆勒发电机组/全自动柴油发电机组源头厂家精选

在能源安全与应急供电需求日益重要的今天,发电机组作为各行业关键电力保障设备,其性能优劣直接关系到企业运营的连续性与稳定性。 发电机组作为重要的电力供应设备,在工业备用电源、基础设施建设、应急救援等领域发…