BUUCTF 编码与调制实战:从曼彻斯特到差分曼彻斯特的CTF信号解码

发布时间:2026/9/22 3:41:30

BUUCTF 编码与调制实战:从曼彻斯特到差分曼彻斯特的CTF信号解码
1. 曼彻斯特编码的CTF实战解码技巧第一次在BUUCTF遇到曼彻斯特编码的题目时我盯着那串5555555595555A65556AA696AA6666666955的十六进制数据发了半天呆。后来才发现这类题目其实有规律可循只要掌握几个关键点就能轻松破解。曼彻斯特编码最让人头疼的就是它的两种不同约定标准。我在实际解题过程中发现第一种标准GE Thomas提出将01对应010对应1而第二种标准IEEE 802.3/802.4使用则正好相反10对应001对应1。这个区别直接影响到最终解码结果是否正确。这里分享一个我总结的快速识别技巧当密文中只出现5、6、9、A这几个十六进制字符时基本可以确定是曼彻斯特编码。因为0101二进制对应十六进制50110对应61001对应91010对应A解码时我通常分三步走将每个十六进制字符转为4位二进制每两位二进制按编码规则转换01→1或10→1取决于采用哪种标准将转换后的二进制数据按8位一组转为十六进制txt 5555555595555A65556AA696AA6666666955 plain for i in txt: plain bin(int(i,16))[2:].zfill(4) # 十六进制转4位二进制 temp for i in range(0,len(plain),2): temp plain[i1] # 按第二种标准转换取每对的第二位 flag for i in range(0,len(temp),8): flag hex(eval(0btemp[i:i8][::-1]))[2:] # 8位一组转十六进制 print(flag.upper())2. 差分曼彻斯特编码的识别与处理差分曼彻斯特编码比普通曼彻斯特更复杂一些但CTF题目中出现的频率也不低。我遇到的一道典型题目是[BJDCTF2020]编码与调制题目给出了NRZ、曼彻斯特和差分曼彻斯特三种编码的对比图。差分曼彻斯特的特点是每个比特周期开始时都会有一次电平跳变比特中间根据数值决定是否跳变0有跳变1无跳变解码时不依赖绝对电平而是看跳变沿实战中我发现一个快速判断方法如果数据中出现大量连续的5或A很可能是差分曼彻斯特编码。因为稳定的时钟信号会表现为规律的电平变化。解码差分曼彻斯特时我常用的Python脚本如下from Crypto.Util.number import * txt 2559659965656A9A65656996696965A6695669A9695A699569666A5A6A6569666A59695A69AA696569666AA6 temp for i in txt: pd bin(int(i,16))[2:].zfill(4) temp pd[0] pd[2] # 特殊处理差分曼彻斯特 flag for i in range(0,len(temp),8): flag hex(eval(0btemp[i:i8]))[2:] print(long_to_bytes(eval(0xflag)))这个脚本的关键在于对每4位二进制数的特殊处理方式通过取特定位来还原原始数据。在实际比赛中如果一种解码方式不奏效可以尝试将二进制数据反转后再解码有时会有意外收获。3. CTF中常见的编码混合题型很多CTF题目不会直接告诉你使用哪种编码方式而是将多种编码方式混合使用。我遇到过最棘手的一道题是将NRZ、曼彻斯特和ASCII编码混合在一起。解题时我总结了一套流程先观察数据特征长度、字符分布、特殊字符尝试常见编码转换hex、base64、ASCII检查是否有规律的电平变化模式用Python脚本批量尝试不同解码方式例如下面这段数据48 65 6C 6C 6F 20 57 6F 72 6C 64 21 5A 5A 5A 5A A6 A6 A6 A6前半部分明显是ASCII码后半部分突然变成5A和A6交替这就提示可能需要切换解码方式。对于混合编码题目我建议准备一个多功能的解码脚本import binascii from Crypto.Util.number import * def try_decodings(data): # 尝试ASCII try: print(ASCII:, bytes.fromhex(data).decode(ascii)) except: pass # 尝试Base64 try: print(Base64:, b64decode(bytes.fromhex(data)).decode()) except: pass # 尝试曼彻斯特解码 manchester_decoded manchester_decode(data) print(Manchester:, manchester_decoded) # 其他解码方式...4. 实战中的二进制处理技巧在信号解码类题目中二进制处理是最基础也是最重要的技能。我总结了几种常见场景的处理方法二进制反转问题 很多传感器数据传输时会采用LSB-first或MSB-first的不同约定。如果解码后发现数据不对可以尝试反转二进制位序binary 11001010 reversed_bin binary[::-1] # 反转位序二进制与十六进制转换 Python的bin()函数生成的二进制字符串会带0b前缀记得去掉hex_str 5A binary bin(int(hex_str, 16))[2:].zfill(8) # 转8位二进制处理不完整字节 当二进制数据长度不是8的倍数时需要特别处理binary_data 110101001 # 补零到完整字节 if len(binary_data) % 8 ! 0: binary_data binary_data.zfill((len(binary_data)//8 1)*8)多进制转换技巧 有时需要直接在十六进制、十进制和二进制间转换# 十六进制转十进制 dec int(FF, 16) # 十进制转二进制字符串 bin_str format(255, 08b)在实际比赛中我通常会准备一个包含这些常用函数的工具脚本遇到编码题目时快速尝试各种可能性。记住信号解码类题目的关键就是多尝试、多验证不要被表面的复杂度吓倒。

相关新闻

Golang实现高可靠进程保活:基于Linux文件锁的双进程互保与托孤机制

Golang实现高可靠进程保活:基于Linux文件锁的双进程互保与托孤机制

2026/9/22 3:39:51

1. 项目概述:当渗透测试遇上进程永生在安全研究和软件开发领域,有两个看似不相关,实则底层逻辑相通的技术方向常常让从业者着迷:一个是Metasploit这类强大的渗透测试框架所代表的“攻防艺术”,另一个则是应用层&#x…

小程序集成腾讯智能地址服务:从地址清洗到结构化解析的实战避坑指南

小程序集成腾讯智能地址服务:从地址清洗到结构化解析的实战避坑指南

2026/9/22 3:39:25

1. 为什么需要智能地址服务?在小程序开发中,处理用户输入的地址信息是个常见但棘手的问题。用户填写的地址往往五花八门:有人写"北京市海淀区中关村大街",有人写"中关村大街(海淀区)"&…

AI内容检测技术解析:社交媒体长文超25%为AI生成

AI内容检测技术解析:社交媒体长文超25%为AI生成

2026/8/24 18:36:33

这次我们来看一个关于AI内容检测的重要研究。Pangram Labs最近发布了一份基于100多万条社交媒体帖子的分析报告,揭示了当前网络内容生态的严峻现实:超过四分之一的长文内容完全由AI生成,而LinkedIn成为AI内容泛滥的重灾区。这份研究通过Pangr…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/21 18:38:46

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/21 18:41:09

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/21 18:36:40

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/21 18:37:26

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/21 18:40:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/21 18:36:17

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/22 0:19:28

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/21 23:38:13

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/22 0:48:53

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…