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");
 }
}
相关推荐
geats人山人海3 小时前
数据结构第六章c语言 树的存储下二叉树的概念和存储
c语言·数据结构·算法
漂流瓶jz3 小时前
UVA-12627 奇怪的气球膨胀 题解答案代码 算法竞赛入门经典第二版
算法·图论·递归·aoapc·算法竞赛入门经典·uva·12627
jarvisuni3 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
kobesdu4 小时前
流形上的优化:SO(3)与SE(3)的广义加减法在FAST-LIO中如何简化状态估计
人工智能·算法·fastlio
白狐_7984 小时前
408 数据结构算法题 01:线性表暴力求解保分指南
java·数据结构·算法
乐观勇敢坚强的老彭4 小时前
C++信奥:开关门、开关灯问题
开发语言·c++·算法
冻柠檬飞冰走茶4 小时前
PTA基础编程题目集 7-31 字符串循环左移(C语言实现)
c语言·开发语言·数据结构·算法
Hi李耶4 小时前
【LeetCode】4-寻找两个正序数组的中位数
算法·leetcode·职场和发展
图灵机z5 小时前
【算法提高课】AcWing 1027. 方格取数 长期攻克提高课-day3(3/219)
算法
hans汉斯5 小时前
计算机科学与应用|改进MeanShift算法在智能监控视频中的应用研究
图像处理·人工智能·功能测试·深度学习·算法·音视频