BugCTF黄道十二宫

一、简述

BugkuCTF 的古典密码题目,复盘一下,依旧 C 语言实现。

题目地址:黄道十二官 - Bugku CTF平台

二、思路概括

1. 识别

看到题目名称"黄道十二宫"或图片中大量古怪符号(几何图形、天文符号、特殊字符),直接锁定为 Z340 密信套路。

2. 重排

按照"跳马步"(Knight's Move)规则,将字符重新组合。通常是 15列宽 的矩阵,采用"向下一行,向右两格"的路径读取。

3. 替换

利用词频分析或爬山算法(Hill-climbing),寻找最符合英文语言规律的字母映射表。

三、解密原理

1. 几何置换原理 (The 1,2-Shift Rule)

Z340 密信最精妙的地方在于它不是横着读或竖着读的。它将 340 个字符排成矩阵,读取规则如下:

  • 从左上角 开始。

  • 每读一个字符,坐标向下移动 1 行,向右移动 2 格。

  • 当触碰到右边界时,取模回绕到左边;当触碰到下边界时,回到顶行。

目的:打破单词的连续性,使得即便看破了符号代表什么字母,也读不出有意义的句子。

2. 同音替换原理 (Homophonic Substitution)

这是为了对抗传统的"频率分析":

  • 简单替换:E 永远对应 %。攻击者只要数哪个符号最多,就知道那是 E。

  • 同音替换:E 可以随机对应 %, *, #, @。这样每个符号出现的频率都会下降,变得平均,让简单的统计学失效。

破解原理:虽然单个字符频率平均了,但双字符组(Bigrams)或三字符组(Trigrams)(如 THE, ING)的联系依然存在。现代解密工具(如 AZdecrypt)通过计算这些组合的概率对数来强行"拼图"。

3. 编程实现逻辑 (C实现)

在编写时,本质上是在做坐标映射。

公式:Index = (Row * Width + Column)

通过循环控制 Row 线性增长,Column 以步长 2 循环增长,从而将二维的视觉矩阵拉平为一维的逻辑字符串。

通过程序获取到正确排列后使用 AZdecrypt工具将字符密文粘贴进去Solver解密即可

AZdecrypt工具可以在GitHub下载,下载后解压缩,运行.exe文件直接使用即可

地址:https://github.com/doranchak/azdecrypt

正确密文:

%%>%,,@3*

,#(#0+@#+

,@)8@7@*7

@@1#5&8=,

*9@=)#6#7

>0#7%%8$+

@-#5?*13@

?7-+(^(*=

=$$1*=+#=

=^4~@)8%=

%=0,*&*,+

8*1*1>@#)

8@76%=@%6

%,,?#1(%1

5@(#>%,,,

四、代码

cpp 复制代码
#include<stdio.h>
main(){
	int i,start,r,c;
	char str[135] = 
	{	'%',',',',','@','*','>','@','?','=','=','%','8','8','%','5',',','@','%','#','@','@',
	'9','0','-','7','$','^','=','*','@','1','7',',','(','>','(',')','1','@','#','#','-','$',
	'4','0','~',',','*','6','?','#','%','#','8','#','=','7','5','+','1','(','*','@','*','1',
	'%','#','>',',','0','@','5',')','%','?','%','*','^','=',')','&','>','=','1','%',',','+',
	'7','&','#','8','6','8','1','(','+','8','*','@','@','(',',','@','@','@','#','*','=','#',
	'$','3','*','#','%',',','#','%','%',',','3',',','*','+','7',',','7','+','@','=','=','=',
	'+',')','6','1'};
for(start= 0;start<15;start++){
	c = start;
	r = 0;
	for (i=0;i<9;i++){
	printf("%c",str[r*15+c]);
	r = (r+1);
	c = (c+2)%15;
	}
	printf("\n");
 }
}
相关推荐
复杂网络2 小时前
论最小 Agent 计算机的形态
算法
kisshyshy18 小时前
🍦 雪糕、食堂、火车厢:三幅漫画吃透栈、队列与链表
javascript·算法
猿人谷1 天前
不只是 CPU 阈值:STAR 如何用 GAT + Transformer 做容器级自动扩缩容?
人工智能·算法
复杂网络1 天前
Stable Diffusion 视觉大模型微调技术深度调研
算法
复杂网络1 天前
基于 Stable Diffusion 架构的视觉大模型代表性工作与原理深度解析
算法
MrZhao4001 天前
Agent Loop 如何用 Hook 扩展:权限、日志与工具拦截
算法
MrZhao4001 天前
Agent 为什么需要 Skills:别把所有知识都塞进 system prompt
算法
JieE2123 天前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
JieE2123 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack204 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法