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");
 }
}
相关推荐
菜菜的顾清寒9 分钟前
力扣HOT100(50)动态规划-零钱兑换
算法·leetcode·动态规划
周末也要写八哥12 分钟前
三分钟读懂:如何解决做题数量不足的问题?
算法
8Qi813 分钟前
LeetCode 148. 排序链表 —— 解法二:自底向上归并(迭代,O(1) 空间)
数据结构·算法·leetcode·链表·归并·迭代
嘿黑嘿呦16 分钟前
数据结构-图论-最小生成树
数据结构·算法·图论
Justice Young24 分钟前
算法分析与设计实验:贪心法求解0/1背包问题的局限性
算法
黎阳之光29 分钟前
无感定位·智管全域:黎阳之光人员无感定位管理系统,重新定义安全与效率
人工智能·物联网·算法·安全·数字孪生
小许同学记录成长43 分钟前
网格简化算法 — Edge Collapse(边塌缩)
qt·算法
凯瑟琳.奥古斯特1 小时前
力扣1001网格照明解法
算法·leetcode·职场和发展
fengenrong1 小时前
20260601
算法·深度优先·图论
晚笙coding1 小时前
从“看起来像双指针”到真正的动态规划 —— 最长公共子序列
算法·动态规划