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");
 }
}
相关推荐
炽烈小老头25 分钟前
【每天学习一点算法 2026/04/20】除自身以外数组的乘积
学习·算法
skilllite作者1 小时前
AI agent 的 Assistant Auto LLM Routing 规划的思考
网络·人工智能·算法·rust·openclaw·agentskills
py有趣2 小时前
力扣热门100题之不同路径
算法·leetcode
_日拱一卒3 小时前
LeetCode:25K个一组翻转链表
算法·leetcode·链表
啊哦呃咦唔鱼3 小时前
LeetCodehot100-394 字符串解码
算法
小欣加油3 小时前
leetcode2078 两栋颜色不同且距离最远的房子
数据结构·c++·算法·leetcode·职场和发展
我真不是小鱼3 小时前
cpp刷题打卡记录30——轮转数组 & 螺旋矩阵 & 搜索二维矩阵II
数据结构·c++·算法·leetcode
逻辑驱动的ken4 小时前
Java高频面试考点场景题09
java·开发语言·数据库·算法·oracle·哈希算法·散列表
帅小伙―苏5 小时前
力扣42接雨水
前端·算法·leetcode
AI科技星5 小时前
精细结构常数α的几何本源:从第一性原理的求导证明、量纲分析与全域验证
算法·机器学习·数学建模·数据挖掘·量子计算