CTF-RE-文件数据修复

题目大致意图是:解密CTF.ctf文件,然后再从中找到flag。

由于.ctf文件损坏,并且解密程序可以判断.ctf文件损坏,因此首先选择逆向这个判断条件。

由于有打开文件的操作,所以可以ollydbg打开,找到CreateFile函数下断点

 

F9在CreateFile函数停止,发现下面有一串Readfile函数,这个函数被多次调用。显然是在读取文件中的信息。

找到离我们最近的一个ReadFile函数进行查看。

 

 

读完这个文件的头四个数据之后就直接开始判断文件是否符合条件了。从上图很容易看到解密程序判断.ctf文件的条件是看前4个字节是否为0x33465443,所以我们把这四个字节补进文件头部即可。注意一下小端序

补全文件头之后,用ida打开找到相应的地方。发现一共有这几个ReadFile函数

  

大致流程是:
1.读4个字节,这四个字节当作文件头(即刚才我们补进去的四个字节)

2.读4个字节,得到一个数a。

3.读a个字节,得到一串东西不知道干嘛的。

4.读16个字节,作为key进行校验。

5.读4个字节,当作读取文件数据的字节数b。

6.读b个字节,为文件数据,猜测和对文件的解密有关。

16进制编辑器将.ctf文件打开

知道数据总长度为0x61C0,而上图中有一个0x619C很接近数据的总长度,比较可疑。

计算发现0x619C之后的文件数据长度刚好为0x619C字节,因此可以知道0x619C为读取的文件字节数b。

那么说明0x619C前面6个字节的就是16个字节的key的后六位,我们查看一下和校验有关的函数

 

可以搜常数,发现是一个md5,并且对我们输入的加密密码执行了md5加密两次,然后再和.ctf文件中的key进行逐位验证。

题目中说明了是8位纯数字,因此我们跑脚本即可,算出来解密密码为20160610,然后我们把文件补全。

注意从文件开始的第5个字节,因为后面的长度都已知,因此可以推断出第二次Readfile得到的值为0x11

 

输入正确的key之后可以进行解密文件了,但是会弹出错误窗口,仔细看发现CTF\之后的路径没有名字,而我们文件的头部正好还有一块是没填充的,所以有理由相信这一块是解密后文件的名称,所以我们再修改一下文件头。

比如我在后面填上99,那么文件就会被解密到名为99的文件中,查看发现99文件是PK,所以加后缀名.rar,打开之后某个文件夹中会有一个图片格式的文件,点开就能有flag

 

回答参考qwen. 你好,同学!首先想告诉你:**你一点都不差,也不孤独。** 你现在经历的这种“刷题到第二页还能咬牙坚持,第三页直接天书”的感觉,是每一个 CTF 逆向选手都必须跨过的门槛 —— 这不是天赋问题,而是 **成长曲线的必然阶段**。 你已经做了非常棒的选择: - 有编程基础(ACM 经验) - 会前端开发(说明逻辑清晰、动手能力强) - 主动转方向、进实验室、定赛道(逆向) - 坚持学了 50 天,还在用 angr 解题(这已经超过大多数新人) 👏 你已经在路上了,只是现在进入了“平台期”,需要的是方法和节奏调整。 --- ## 🎯 先说结论:怎么坚持下去? > **不要追求“刷完 BuuCTF”,而要追求“每天比昨天懂多一点”**。 ### ✅ 正确目标应该是: - 看懂一道题的套路 → 记下来 - 学会一种分析技巧 → 能复现 - 遇到类似题时能认出来 → 形成肌肉记忆 这才是真正的进步。 --- ## 🧱 一、为什么第三页像“天书”?—— 因为你缺的是“知识地图” BuuCTF 的题目顺序并不是按知识点递进设计的,很多第三页的题涉及以下高级主题: | 类型 | 新手看不懂的原因 | |------|------------------| | `VM Protect` 虚拟化保护 | 没学过控制流平坦化、字节码解释器 | | `UPX + 自定义壳` | 不了解加壳原理、脱壳手法 | | `Obfuscation 强混淆` | IDA 反汇编乱七八糟,变量全丢 | | `C++ STL / vtable 调用` | 对 C++ 编译机制不熟 | | `SEH / TLS / TLS Callback` | Windows 高级加载机制没接触过 | 👉 所以你觉得“像天书”,其实是因为你缺少这些前置知识。 📌 **解决办法不是硬啃,而是系统补课 + 分类刷题**! --- ## 🗺️ 二、推荐学习路径(适合你当前水平) 你现在相当于“刚学会走路”,下一步不该去跑马拉松,而是: ### 第一步:建立你的「逆向知识树」 ```text 逆向工程 ├── 基础技能 │ ├── 熟悉 IDA/Ghidra 使用 │ ├── x86/x64 汇编基础 │ ├── 函数调用约定 (cdecl, stdcall, fastcall) │ ├── 栈帧结构与参数传递 │ └── 动态调试 (OllyDbg/x64dbg) ├── PE 文件格式 │ ├── 区段表、导入表、导出表 │ ├── IAT/EAT 分析 │ └── TLS、资源段等特殊节 ├── 常见保护机制 │ ├── Stack Canary / GS │ ├── DEP/NX / ASLR │ └── 控制流保护 (CFG) ├── 加壳与脱壳 │ ├── UPX 手动/自动脱壳 │ ├── 常见壳识别 (FSG, ASPack, Petite) │ └── 内存 dump & 重建 IAT ├── 算法还原 │ ├── Base64 编码识别 │ ├── RC4/AES/MD5 自实现检测 │ └── 自定义加密逻辑提取 └── 高级主题(后期) ├── 虚拟机保护 (VMProtect, Themida) ├── 混淆技术 (OLLVM, Tinfol) └── 符号执行 (angr, Triton) ``` 🎯 **你现在应该集中在前 3 层,尤其是“算法还原”和“PE基础”** --- ## 🔍 三、具体怎么做?—— 实战建议 ### ✅ 1. 别再从头刷 BuuCTF!改用「分类刷题法」 推荐网站替代方案: | 网站 | 特点 | 推荐理由 | |------|------|---------| | [pwnable.kr](https://pwnable.kr) | 韩国经典入门题 | 由浅入深,附带 hint | | [ROP Emporium](https://ropemporium.com) | 专练 ROP 技术 | 每道题教你一个 gadget 技巧 | | [Crackmes.one](https://crackmes.one) | 用户上传 crackme | 按难度分级,适合找“刚好不会但能学”的题 | | [reversing.wtf](https://reversing.wtf) | 教程+挑战结合 | 社区活跃,有 writeup | 📌 建议你现在先暂停 BuuCTF,去 `pwnable.kr` 把前 10 道做完,你会发现自己突然“开窍”。 --- ### ✅ 2. 每做一道题,写一份自己的 Writeup(哪怕只有三句话) 格式如下: ```markdown ## 题目:buu-re-[name] ### 关键点: - 发现 main 中调用了 sub_XXXX,里面有一个 for 循环对输入进行异或 - 异或密钥是 0x13,长度为 8 字节 - 输出是 "flag{...}" 的形式,可以爆破 ### 工具使用: - IDA 查看流程图 - Python 写解密脚本 ### 收获: 学会了如何识别简单的 XOR 加密,并通过静态分析还原算法。 ``` 📌 这个过程比做十道题还重要!它帮你把“临时理解”变成“长期记忆”。 --- ### ✅ 3. 学会看汇编 ≠ 要背指令,而是学会“模式匹配” 比如看到这些代码片段,你要能立刻反应: | 汇编模式 | 含义 | |--------|------| ```asm mov eax, 5 imul eax, eax, 3 add eax, 7 ``` → 计算 `x * 3 + 7` ```asm xor ecx, ecx loop: cmp cl, 8 jge end mov dl, [esi+ecx] xor dl, 0x13 mov [edi+ecx], dl inc ecx jmp loop ``` → 对 8 字节数据做 `XOR 0x13` 加密 📌 多看别人 writeup 中的“伪代码还原”部分,慢慢你就有了“语感”。 --- ### ✅ 4. angr 不是用来“通杀”的,而是用来“验证思路”的 你说你花一周学 angr,很好!但 angr 更适合: - 已知约束条件,懒得手动解方程 - 输入空间小(<10 字符),可以直接符号执行 - 验证某个函数的功能(如:这个函数是不是 base64?) 🚫 不要用 angr 去碰加壳、反调试、大程序。 💡 正确姿势: 1. 先用 IDA 分析清楚逻辑 2. 提取关键约束(比如 `v1 + v2 == 0x1234`) 3. 用 angr 或 z3 写 solver 快速求解 --- ## 💡 四、心态建设:别怕“痛苦”,那是大脑在生长 你说“好痛苦啊”,我告诉你: > **所有厉害的人,都在某个阶段觉得“根本学不会”**。 - 我第一次看 VMProtect 直接关电脑睡觉 - 第一次遇到 TLS callback 完全不知道那是个入口点 - 第一次读 C++ vtable 调用以为自己电脑中毒了…… 但后来发现:**只要持续暴露在“稍微难一点”的环境中,三个月后回头看,全是基础题**。 --- ## 📅 五、给你一个可执行的学习计划(未来一个月) | 时间 | 目标 | 行动 | |------|------|------| | 第1周 | 打好基础 | - 完成 pwnable.kr 前10题<br>- 学会 IDA 静态分析基本操作<br>- 写 5 篇简易 writeup | | 第2周 | 理解常见加密 | - 刷 10 道 XOR/Base64/ROT 类题<br>- 学会用 Python 写解密脚本<br>- 学 PEiD 和 ExeInfoPe 识别壳 | | 第3周 | 动态调试入门 | - 用 x64dbg 跟进函数调用<br>- 设置断点观察寄存器变化<br>- 学会 dump 内存 | | 第4周 | 尝试脱壳 | - 下载 UPX 打包的程序练习脱壳<br>- 使用 Scylla 或 ImportREC 修复 IAT<br>- 回归 BuuCTF 做几道简单壳题 | 📌 每天投入 1~2 小时足够,关键是 **持续 + 总结**。 --- ## 🤝 最后送你几句话 1. **你不是没有天赋,你是还没积累够**。 2. **前端无聊?那你现在找到了更有趣的事 —— 逆向就像解密游戏,每一行汇编都是线索**。 3. **ACM 没坚持下来不代表你不行,CTF 是另一种思维模式,你完全有机会逆袭**。 4. **实验室扩招选你,说明他们看到了潜力 —— 别辜负那个愿意相信你的人**。 --- ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值