首页 > 其他分享 >CTFshow-Crypto(13-16)

CTFshow-Crypto(13-16)

时间:2024-05-31 23:45:46浏览次数:16  
标签:00110110 13 00110100 16 base64 字符串 CTFshow print 00100000

13crypto12

image-20240531204408398

跟字母替换有关

uozt{Zgyzhv_xlwv_uiln_xguhsld}

26个英文字母和对应的编号_word文档在线阅读与下载_无忧文档

u-21   f-6
o-15   l-12
z-26   a-1
t-20   g-7

发现对应两个字母加起来为27

查资料发现这是埃特巴什码

埃特巴什码

最后一个字母替换第一个字母,倒数第二个字母替换第二个字母。

明文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文替换明文
密文:Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
在线网站解码

image-20240531205244346

注意手动替换大小写

脚本解码
a = 'uozt{Zgyzhv_xlwv_uiln_xguhsld}'
b = ''
for i in a:
    if i.islower():
        b += chr((26- (ord(i) - 96))  + 97)
    elif i.isupper():
        b += chr((26- (ord(i) - 64)) + 65)
    else :
        b += i
print(b)

14crypto13

image-20240531210401811

下载附件是两个文件,第一个是macOS操作系统的,选择适合自己系统的就行

打开base.txt发现有非常长的密文(千万级别),提示是base家族,肯定是base嵌套

脚本一
import base64
filename = r"C:\Users\86157\Desktop\base家族\base.txt"
with open(filename) as f:
    s = f.read()
while True:
    try:
        s = base64.b16decode(s)
        continue
    except:
        pass
    try:
        s = base64.b32decode(s)
        continue
    except:
        pass
    try:
        s = base64.b64decode(s)
        continue
    except:
        pass
    break
print(s)

前缀rR用于定义一个原始字符串(raw string)。原始字符串不会处理反斜杠(\)为转义字符。

base64.b16decode()

获得二进制形式的解码字符串。

读取文件

Python文件读写详解(非常详细)_python 了解文件读写-CSDN博客

read方法

【Python】一文详细介绍 File对象的read()方法_python file.read(buffer)-CSDN博客

脚本二
import re, base64 //导入正则表达式模块re和Base64编码/解码模块base64
s = open("base.txt", "rb").read()
//使用二进制模式("rb")打开名为base.txt的文件,并读取其全部内容。读取的内容存储在字节串s中。
\# 正则表达式,用来尽可能多的匹配字符串
base16_dic = r'^[A-F0-9]*$'
base32_dic = r'^[A-Z2-7=]*$'
base64_dic = r'^[A-Za-z0-9/+=]*$'
\# 循环解码
while True:
    t = s.decode() #将字节串s解码为字符串t 
    if '{' in t:  #如果字符串t中包含字符'{',则打印t并退出循环  
        print(t)
        break
     # 否则,根据t的格式使用不同的解码方法
    elif re.match(base16_dic, t):
        s = base64.b16decode(s)
        print(16)
    elif re.match(base32_dic, t):
        s = base64.b32decode(s)
        print(32)
    elif re.match(base64_dic, t):
        s = base64.b64decode(s)
        print(64)

image-20240531215741147

在处理二进制文件时,打开文件时需要指定'rb'模式。

正则表达式(脚本中出现的)

正则表达式 – 语法 | 菜鸟教程 (runoob.com)

[A-Z] 表示一个区间,匹配所有大写字母
[^ABC]匹配除了 [...] 中字符的所有字符,例如 [^aeiou] 匹配字符串 "google runoob taobao" 中除了 e o u a 字母的所有字符。
runoo*b,可以匹配 runob、runoob、runoooooob 等,* 号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)
base32_dic = r'^[A-Z2-7=]*$
匹配一个字符串,该字符串完全由大写字母 A 到 Z、数字 2 到 7 和等号 = 组成,并且这个字符串没有其他任何字符。
  1. r 前缀:这是一个原始字符串前缀,它告诉Python不要解释反斜杠(\)为转义字符。这在正则表达式中特别有用,因为反斜杠在正则表达式中通常用作转义字符。
  2. ^:匹配字符串的开始位置。
  3. [A-Z2-7=]:这是一个字符集,它匹配任何在括号内的字符。具体来说,它匹配以下字符:
    • 大写字母 A 到 Z
    • 数字 2 到 7
    • 等号 =
  4. *:表示前面的字符集([A-Z2-7=])可以出现零次或多次。
  5. $:匹配字符串的结束位置。
工具

感兴趣的可以下载

mufeedvh/basecrack: Decode All Bases - Base Scheme Decoder (github.com)

15crypto14

题目:

00110011 00110011 00100000 00110100 00110101 00100000 00110101 00110000 00100000 00110010 01100110 00100000 00110011 00110011 00100000 00110101 00110110 00100000 00110100 01100101 00100000 00110100 00110110 00100000 00110100 00110110 00100000 00110110 01100100 00100000 00110100 01100101 00100000 00110100 00110101 00100000 00110100 00110001 00100000 00110110 01100101 00100000 00110110 01100011 00100000 00110100 00111000 00100000 00110100 00110100 00100000 00110011 00110101 00100000 00110110 00110100 00100000 00110100 00110011 00100000 00110100 01100100 00100000 00110110 01100100 00100000 00110101 00110110 00100000 00110100 00111000 00100000 00110100 00110100 00100000 00110011 00110101 00100000 00110110 00110001 00100000 00110110 00110100 00100000 00110011 00111001 00100000 00110111 00110101 00100000 00110100 00110111 00100000 00110000 01100001

一串二进制数,先转成字符串

字符串二进制转换 (lddgo.net)

33 45 50 2f 33 56 4e 46 46 6d 4e 45 41 6e 6c 48 44 35 64 43 4d 6d 56 48 44 35 61 64 39 75 47 0a

baseX特征

base16:字母A-F、数字0-9
base32:字母A-Z、数字2-7、符号=
base64:字母A-Z、a-z、数字0-9、符号/+=

判断为base64进行解码

3EP/3VNFFmNEAnlHD5dCMmVHD5ad9uG

或者直接一步到位

image-20240531223655976

直接base64解码不行,需要根据base64编码表 对这串代码进行移位替换

base64编码表

image-20240531223803755

密文开头是 3EP/ 而flag的base64编码为:ZmxhZw==

3-55  Z-25    55-30=25
E-4   m-38    4-30+64=38

偏移量为30

脚本
import base64
s = '3EP/3VNFFmNEAnlHD5dCMmVHD5ad9uG'
a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
flag = ''
for i in s:
    flag += a[(a.index(i) - 30) % 64]
if len(flag) % 4 != 0:
    flag += '=' * (4 - len(flag) % 4)
print(flag)
print(base64.b64decode(flag).decode('UTF-8'))

index()

a.index(i) 会返回 i 第一次出现在 a 中的索引(从0开始计数)

python取模

在Python中,% 运算符用于取模,并且对于负数被除数,结果的符号与被除数相同。

使用Python的%运算符,-26 % 64 的结果是:38

16萌新_密码5

image-20240531225353340

由田中 由田井 羊夫 由田人 由中人 羊羊 由由王 由田中 由由大 由田工 由由由 由由羊 由中大
工具梭哈

image-20240531225556184

当铺密码

当前汉字有多少笔画出头,就是转化成数字几,再Ascii解码

例如:口 0 田 0 由 1 中 2 人 3 工 4 大 5 王 6 夫 7 井 8 羊 9

由田中 由田井 羊夫 由田人 由中人 羊羊 由由王 由田中 由由大 由田工 由由由 由由羊 由中大
102   108   97   ...  
脚本
dh = '田口由中人工大土士王夫井羊壮'
ds = '00123455567899'

cip = '由田中 由田井 羊夫 由田人 由中人 羊羊 由由王 由田中 由由大 由田工 由由由 由由羊 由中大'
s = ''
for i in cip:
	if i in dh:
		s += ds[dh.index(i)]
	else:
		s += ' '
print(s)

ll = s.split(" ")
print(ll)
t = ''
for i in range(0,len(ll)):
	t += chr(int(ll[i]))
print(t)

标签:00110110,13,00110100,16,base64,字符串,CTFshow,print,00100000
From: https://www.cnblogs.com/Mchacha/p/18225444

相关文章

  • L2-013 红色警报(并查集)
    1.题目L2-013红色警报分数25全屏浏览切换布局作者陈越单位浙江大学战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城......
  • P2167 [SDOI2009] Bill的挑战
    P2167[SDOI2009]Bill的挑战状压dp/二项式反演先说状压,考虑怎么刻画\(S\)和\(T\)匹配这个东西。实质上就是从前往后匹配每一位,直到哪一位不匹配了,那么就不匹配,也就是每一位字符匹配的并集。同样,对于多个串的匹配,设第\(i\)位字符为\(j\)时匹配的串集合为\(g_{i,j}\),对......
  • Android高通 12/13 录屏流程代码位置
     需求如下图实现系统录屏功能 frameworks/base/packages/SystemUI/src/com/android/systemui/screenrecord涉及代码ScreenRecordDialog#startBtnRecordingService#start#end ScreenMediaRecorder.java1、点击开始录屏frameworks/base/packages/SystemUI/src/......
  • CSP历年复赛题-P1980 [NOIP2013 普及组] 计数问题
    原题链接:https://www.luogu.com.cn/record/160821231题意解读:统计1~n中x的个数。解题思路:枚举每个数,提取每一位,判断是否等于x。100分代码:#include<bits/stdc++.h>usingnamespacestd;intn,x,ans;intmain(){cin>>n>>x;for(inti=1;i<=n;i++)......
  • OpenAI 或将重组为营利性公司;世界首款类脑互补视觉芯片问世丨 RTE 开发者日报 Vol.216
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,......
  • Educational Codeforces Round 166 (Rated for Div. 2)
    目录写在前面ABCD写在最后写在前面比赛地址:https://codeforces.com/contest/1976满课,并且48小时之内只睡了8h。本来不想打的,但是手痒就上小号打了,然而唐唐唐掉大分呃呃A签到。感谢isdigit函数。///*By:Luckyblock*/#include<bits/stdc++.h>#defineLLlonglon......
  • AP3213 降压恒压恒流BUCK控制器
    产品描述AP3214是一系列外围电路简洁的宽输入电压降压BUCK恒压恒流驱动器,适用于8-100V输入电压范围的DC-DC降压应用。AP3214输出电压通过FB管脚设置,输出电流通过CS电阻设置,外围简洁,具备高效率,低功耗,低纹波,优异的线性调整率和负载调整率等优点。支持输出线损补偿......
  • AP3213降压恒压恒流BUCK控制器
    产品描述AP3213是一系列外围电路简洁的宽输入电压降压BUCK恒压恒流驱动器,适用于8-60V输入电压范围的DC-DC降压应用。AP3213输出电压通过FB管脚设置,输出电流通过CS电阻设置,外围简洁,具备高效率,低功耗,低纹波,优异的线性调整率和负载调整率等优点。支持输出线损补......
  • ubuntu20.04跑通slambook2 ch13编译
    这里记录如何跑通slambook2ch13的代码1.依赖说明在原书代码的3rdparty下大部分的依赖,只需要对每一个库源码安装即可,在CMakeists.txt目录下打开命令行输入:mkdirbuildcdbuildcmake..makesudomakeinstall但sophus和opencv比较麻烦,单独拿出来讲一下。2.sophus安装3r......
  • ORA-600 2131故障处理---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:ORA-6002131故障处理作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]数据库启动报ORA-6002131错误,查看alert日志发现是在mount过程报错FriMay1720:58:282024Startin......