Bugku-不可破译的密码[wp]
一 题目分析
flag.txt
cipher.txt
(1)密码表形式和维吉尼亚密码一样
(2)看到504Q0304 很容易想到 504B0304 Zip文件头。
二 解题步骤
2.1 解密密文
根据分析(2)得知和压缩包有关,查看Q对应的明文,观察是否为B。
列对应的是明文,行是密钥。即 明文B + 密钥A -> 密文Q
该密码表和原维吉尼亚密码相比,映射的关系有所差别,所以考虑使用一个新的解密规则将cipher.txt文件中的字母解密出来替换掉。脚本如下:
from string import ascii_uppercase as uppercase
from itertools import cycle # 创建密码表
table = dict()
dictories=[['P', 'Q', 'L', 'N', 'E', 'Y', 'O', 'D', 'H', 'R', 'J', 'M', 'B', 'K', 'C', 'T', 'F', 'U', 'A', 'Z', 'S', 'X', 'I', 'W', 'V', 'G'],
['H', 'R', 'V', 'K', 'E', 'I', 'Y', 'B', 'J', 'G', 'M', 'Q', 'P', 'C', 'X', 'D', 'F', 'N', 'Z', 'T', 'U', 'O', 'L', 'A', 'W', 'S'],
['S', 'N', 'U', 'K', 'R', 'T', 'P', 'B', 'O', 'E', 'X', 'G', 'A', 'V', 'Z', 'Q', 'D', 'J', 'H', 'W', 'C', 'Y', 'I', 'M', 'L', 'F'],
['J', 'T', 'K', 'Q', 'V', 'F', 'L', 'X', 'D', 'Z', 'W', 'U', 'O', 'A', 'M', 'I', 'E', 'B', 'Y', 'G', 'P', 'R', 'S', 'H', 'C', 'N'],
['J', 'Z', 'B', 'L', 'E', 'P', 'K', 'G', 'N', 'O', 'A', 'C', 'R', 'U', 'I', 'S', 'D', 'M', 'F', 'V', 'X', 'H', 'Q', 'T', 'W', 'Y'],
['X', 'F', 'Y', 'Q', 'W', 'G', 'I', 'R', 'V', 'S', 'O', 'C', 'L', 'E', 'J', 'T', 'B', 'M', 'K', 'U', 'P', 'Z', 'A', 'N', 'H', 'D'],
['U', 'P', 'L', 'A', 'Y', 'T', 'Q', 'K', 'F', 'M', 'O', 'Z', 'I', 'G', 'S', 'H', 'J', 'B', 'E', 'N', 'X', 'R', 'W', 'D', 'V', 'C'],
['U', 'F', 'C', 'Q', 'P', 'A', 'I', 'W', 'R', 'Y', 'G', 'H', 'T', 'Z', 'V', 'B', 'K', 'S', 'J', 'O', 'M', 'X', 'D', 'N', 'L', 'E'],
['S', 'Q', 'A', 'T', 'P', 'R', 'N', 'X', 'Y', 'L', 'H', 'B', 'W', 'Z', 'F', 'U', 'O', 'K', 'E', 'C', 'G', 'V', 'I', 'M', 'J', 'D'],
['R', 'L', 'M', 'P', 'Z', 'Y', 'T', 'H', 'F', 'U', 'A', 'S', 'J', 'N', 'I', 'K', 'G', 'V', 'X', 'Q', 'B', 'E', 'W', 'C', 'D', 'O'],
['Y', 'U', 'I', 'K', 'S', 'Z', 'W', 'A', 'R', 'T', 'J', 'E', 'Q', 'C', 'P', 'M', 'L', 'D', 'H', 'B', 'G', 'O', 'N', 'V', 'X', 'F'],
['Q', 'W', 'J', 'S', 'T', 'K', 'R', 'P', 'B', 'O', 'V', 'U', 'L', 'N', 'H', 'F', 'X', 'D', 'G', 'A', 'M', 'Z', 'I', 'E', 'Y', 'C'],
['X', 'G', 'H', 'Y', 'Q', 'W', 'R', 'Z', 'K', 'M', 'P', 'N', 'E', 'V', 'L', 'C', 'D', 'U', 'J', 'F', 'T', 'S', 'I', 'A', 'O', 'B'],
['G', 'A', 'P', 'S', 'M', 'B', 'E', 'W', 'N', 'X', 'R', 'I', 'L', 'Y', 'C', 'F', 'O', 'K', 'Z', 'T', 'D', 'V', 'U', 'J', 'H', 'Q'],
['G', 'N', 'B', 'Z', 'Q', 'Y', 'U', 'R', 'C', 'H', 'L', 'V', 'E', 'A', 'I', 'O', 'M', 'F', 'P', 'X', 'W', 'S', 'K', 'T', 'D', 'J'],
['D', 'B', 'G', 'U', 'N', 'A', 'S', 'Q', 'F', 'R', 'E', 'Y', 'L', 'O', 'T', 'I', 'J', 'P', 'K', 'C', 'Z', 'X', 'H', 'M', 'W', 'V'],
['Z', 'V', 'S', 'X', 'C', 'G', 'J', 'Q', 'O', 'H', 'A', 'W', 'R', 'N', 'M', 'L', 'U', 'T', 'Y', 'P', 'D', 'K', 'I', 'B', 'F', 'E'],
['E', 'X', 'R', 'F', 'M', 'Y', 'W', 'L', 'P', 'H', 'C', 'N', 'B', 'J', 'Z', 'S', 'G', 'D', 'I', 'O', 'Q', 'V', 'U', 'A', 'T', 'K'],
['V', 'Q', 'M', 'K', 'A', 'X', 'R', 'S', 'Z', 'E', 'B', 'H', 'I', 'O', 'D', 'L', 'Y', 'T', 'N', 'C', 'G', 'F', 'J', 'W', 'U', 'P'],
['R', 'G', 'Y', 'D', 'F', 'A', 'J', 'L', 'B', 'V', 'K', 'P', 'H', 'Z', 'Q', 'S', 'O', 'X', 'E', 'C', 'T', 'M', 'U', 'N', 'W', 'I'],
['P', 'W', 'B', 'X', 'H', 'Q', 'E', 'J', 'I', 'G', 'A', 'D', 'S', 'F', 'O', 'U', 'T', 'V', 'C', 'Z', 'N', 'M', 'Y', 'K', 'L', 'R'],
['S', 'P', 'E', 'F', 'Q', 'N', 'R', 'X', 'U', 'D', 'M', 'Y', 'I', 'A', 'V', 'H', 'B', 'T', 'C', 'G', 'K', 'L', 'O', 'J', 'Z', 'W'],
['O', 'F', 'E', 'X', 'L', 'J', 'Z', 'I', 'B', 'G', 'Q', 'R', 'N', 'D', 'K', 'M', 'Y', 'S', 'P', 'V', 'A', 'T', 'C', 'W', 'H', 'U'],
['H', 'S', 'J', 'E', 'Q', 'L', 'I', 'R', 'N', 'O', 'C', 'F', 'V', 'T', 'B', 'G', 'Z', 'Y', 'D', 'A', 'W', 'U', 'P', 'M', 'K', 'X'],
['I', 'S', 'B', 'U', 'Z', 'R', 'L', 'V', 'Q', 'C', 'Y', 'E', 'K', 'P', 'J', 'G', 'F', 'T', 'W', 'O', 'A', 'H', 'X', 'D', 'M', 'N'],
['M', 'X', 'D', 'E', 'W', 'L', 'R', 'Q', 'V', 'S', 'U', 'I', 'F', 'G', 'N', 'P', 'C', 'A', 'O', 'Z', 'H', 'K', 'T', 'Y', 'B', 'J']]
lines=[]
cnt=0
for d in dictories:
# print(d)
tmp =''
for c in d:
tmp +=c
lines.append(tmp)
cnt +=1
# print(lines)
for ch in uppercase:
index = uppercase.index(ch)
table[ch] = lines[index]
print(table)
# print(uppercase) # # 加密/解密
def encrypt(plainText, key):
result = []
# 创建cycle对象,支持密钥字母的循环使用
currentKey = cycle(key)
# print(currentKey)
for ch in plainText:
if 'A' <= ch <= 'Z':
index = uppercase.index(ch)
# 获取密钥字母
ck = next(currentKey)
# print('ck:',ck)
for i in range(26):
if ch == table[ck][i]:
result.append(uppercase[i])
else:
result.append(ch)
return ''.join(result)
# 解密
fp = open(r'C:\Users\PC\Desktop\ctf\cipher_text.txt','r')#密文文件
op = open(r'C:\Users\PC\Desktop\ctf\res1.txt','w') #输出文件
q=fp.read()
# print(q)
key = 'ABCDE'
op.write(encrypt(q,key))
op.close()
fp.close()
将解密后的文件写入16进制编辑器,得到resul.zip
2.2 解压zip
思路 :
- 1.直接ARCHPR爆破密码
- 2.crc32爆破
- 遗憾的是都不行,后来请教其他师傅得知是根据crc32爆破得到的内容组成新字典进行爆破~
python main.py -f result.zip
#得到output.dic字典,再使用ARCHPR字典爆破即可.密码自行尝试就不贴了
2.3解密flag.txt
这个是base解密,网上找了个base循环解密脚本.
#-*- coding:utf-8 -*-
import base64 s=''
with open(r'C:\Users\PC\Desktop\ctf\flag1.txt', 'r', encoding='UTF-8') as f: #输入文件
s="".join(f.readlines()).encode('utf-8')
src=s
while True:
try:
src=s
s=base64.b16decode(s)
str(s,'utf-8')
continue
except:
pass
try:
src=s
s=base64.b32decode(s)
str(s,'utf-8')
continue
except:
pass
try:
src=s
s=base64.b64decode(s)
str(s,'utf-8')
continue
except:
pass
break
with open(r'C:\Users\PC\Desktop\ctf\flag2.txt','w', encoding='utf-8') as file: #输出文件
file.write(str(src,'utf-8'))
print("ok!")
得到flag2.txt
拿到flag!!
Bugku-不可破译的密码[wp]的更多相关文章
- bugku 密码学一些题的wp
---恢复内容开始--- 1.滴答滴 摩斯密码,http://tool.bugku.com/mosi/ 2.聪明的小羊 从提示猜是栅栏密码,http://tool.bugku.com/jiemi/ 3 ...
- ctf古典密码从0到
本文首发于“合天智汇”公众号 作者:淡灬看夏丶恋雨 古典密码和现代密码的区别: 代换密码 单表代换密码 字符或数学型 凯撒密码 仿射密码 四方密码 培根密码 图表 标准银河字母 圣堂武士密码 猪圈密码 ...
- 长理ACM 7-密码破译(闫博钊)
/* //题目标题: *密码破译(闫博钊) //题目描述: *某组织欲破获一个外星人的密码,密码由一定长度的字串组成.此组织拥有一些破译此密码的长度不同的钥匙,若两个钥匙的长度之和恰好为此密码的长度, ...
- BUUCTF 部分wp
目录 Buuctf crypto 0x01传感器 提示是曼联,猜测为曼彻斯特密码 wp:https://www.xmsec.cc/manchester-encode/ cipher: 55555555 ...
- 实验吧-杂项-你知道他是谁吗?(转盘密码、NTFS数据流检测及导出)
刚看到的时候听懵,没注意到重点,其实很多时候题目中的细节就是给我们线索的,所以审题和思考是很重要的. 在没做到点上的是,也做了一点努力,没有效果,科普一下这个人((*^▽^*))图片上是托马斯.杰斐逊 ...
- buu misc 1-32 wp
buuCTFwp(1~32) 1.签到题 题里就有flag flag{buu_ctf} 2.二维码 1.题目是一个二维码,用010发现提示四位数字,想到应该是暗藏压缩包 2.虚拟机foremost分离 ...
- 前端学HTTP之摘要认证
前面的话 上一篇介绍的基本认证便捷灵活,但极不安全.用户名和密码都是以明文形式传送的,也没有采取任何措施防止对报文的篡改.安全使用基本认证的唯一方式就是将其与SSL配合使用 摘要认证与基本认证兼容,但 ...
- NOIP2009潜伏者【B003】
[B003]潜伏者[难度B]—————————————————————————————————————————————————————————————————— [题目要求] R国和S国正陷入战火之中 ...
- 《CODE》读后笔记——第14~20章
14.反馈与触发器 振荡器不需要人的干涉即可自主且不断地实现断开和闭合.所有计算机都靠某种振荡器来使其他部件同步工作. 当两个开关都断开时,电路有两个稳定状态,这样的一个电路称为触发器.触发器具有记忆 ...
- AC日记——潜伏着 openjudge 1.7 11
11:潜伏者 总时间限制: 1000ms 内存限制: 65536kB 描述 R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动. 历经艰险后,潜伏于S国的R国间谍小C终于摸清了S国军 ...
随机推荐
- bugku-source-wp详解
bugku-source-wp详解 F12先看源代码 base64解码 提交flag 发现这个flag是假的 根据提示打开kali直接扫 命令:gobuster dir -u http://114.6 ...
- continue跳過循環(skippaart程序),接受設定的合法分數來進行平均分求值,并展現最高分,最低分
1 #include<stdio.h> 2 int main() 3 { 4 const float MIN = 0.0f; //分數下限是0分 5 const float MAX = 1 ...
- DQL_排序查询-DQL_聚合函数
DQL_排序查询 排序查询 语法: order by 子句 order by 排序字段1 排序方式1 , 排序字段2 排序方式2 , 排序字段3 排序方式3 ..... 排序方式 : A ...
- 基于AS2协议的EDI 系统
一款由JAVA语言开发的基于AS2 协议的EDI 轻量级系统 优点如下: 1.价格便宜.目前市场上一条gateway线路动辄数万,甚至数万/年. 2.功能强大.功能可以与主流EDI 软件媲美. 3.可 ...
- 财务精度:BigInteger 与 BigDecimal
财务精度:BigInteger 与 BigDecimal 每博一文案 师父说: 人这一辈子,真地好难. 有些人,好着好着,忽然就变陌生了,有些手,牵着牵着,瞬间就放开了,有些路,走着走着,就失去了方向 ...
- PHP判断访问来源是PC端还是移动端
一个方法轻松搞定,各种判断后当返回true为移动端,反之为PC端. function isMobile(){ // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($ ...
- Creo9.0 安装破解图文教程 【2022年12月29日亲测有效】
前言 creo9.0正式版是一款非常优秀的3D建模设计软件.该软件界面美观,提供了CAD 技术.模制造绘图.多实体建模.多体设计.实时仿真.框架和焊缝设计等一系列强大的辅助设计功能,通过这些功能,让用 ...
- 基于 Hugging Face Datasets 和 Transformers 的图像相似性搜索
基于 HuggingFace Datasets 和 Transformers 的图像相似性搜索 通过本文,你将学习使用 Transformers 构建图像相似性搜索系统.找出查询图像和潜在候选图像之间 ...
- Java 调用 PaddleDetection 模型
文章地址 介绍 训练好的模型要给业务调用,deepjavalibrary/djl:Java 中与引擎无关的深度学习框架 (github.com) 可以完成这件事,它支持使用 Java 调用 PyTor ...
- 0x04_My-OS实现自定义颜色
前言: 0x03我们提到: 把12(红色)用循环写入显存,每个像素点怎么显示都要看对应的显存地址,比如0xa0000到0xaffff就是每一个像素点的显存 你问为什么12就是红色,这些东西在主板出厂的 ...