BuuCTF之Crypto解题记录

2024-02-28 19:33:57 浏览数 (1)

1 md 5

题如其名就是md5,这里推荐一个md5在线解码网站,直接解码就行了,答案admain1

2 一眼就解密

考察的是base64编码,下面的字符串解密后便能获得flag:ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30=

3 url编码

url编码是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码作为URL的一部分或者分离地发给服务器。

URL编码遵循下列规则: 每对name/value由&;符分开;每对来自表单的name/value由=符分开。 如果用户没有输入值给个name,那么这个name还是出现,只是无值。任何特殊的字符(如汉字)将以百分符%用十六进制编码,当然也包括象 =,&;,和 % 这些特殊的字符。其实url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如“”,它的ascii码是92,92的十六进制是5c,所以“”的url编码就是。

4 看我回旋踢

考的是凯撒密码,偏移量我们不知道,所以直接上枚举,得到flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}

5 摩斯

.. .-.. --- ...- . -.-- --- ..-确实是摩斯密码直接导入解码工具中,他们给我了ᎊf9这个仔细一看这个是用 来分割的,解码后得到flagILOVEYOU

6 password

姓名:张三 生日:19900315 key格式为key{xxxxxxxxxx} 其实很容易猜到key{zs19900315}

这个提示给的不错了,这个是考察的简单的社会工程系,或者说是弱密码,过段时间关于弱密码做一个专题讲一讲。 7 变异凯撒

凯撒密码是一种通过移位进行加密的方式,也叫做凯撒移位,这个对比一下afz_flag的ascall码。

差值

a

f

5

f

l

6

Z

a

7

_

g

8

代码语言:javascript复制
c = "afZ_r9VYfScOeO_UL^RWUc"
move = 5
flag = ""
for i in c:
    flag  = chr(ord(i)   move)
    move  = 1
print(flag)

得到flagflag{Caesar_variation}

8 Quoted-printable

确实是一种我没见过的编码方式,在别人的博客上看到这些介绍:博客在此奉上 http://blog.chacuo.net/494.html

Quoted-printable 可译为“可打印字符引用编码”、“使用可打印字符的编码”,我们收邮件,查看信件原始信息,经常会看到这种类型的编码! 它是多用途互联网邮件扩展(MIME) 一种实现方式。其中MIME是一个互联网标准,它扩展了电子邮件标准,致力于使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。目前http协议中,很多采用MIME框架!quoted-printable 就是说用一些可打印常用字符,表示一个字节(8位)中所有非打印字符方法!

上网找到了一个解码工具注意要使用iso-8859-1单字符集解码。

9 Rabbit

确实有个rabbit加密算法通过在线解码工具就能完成解码,得到flag。

10 栅栏的影子

不难看出字符串仍具有类似flag的格式,由于’{‘前面并非四个字符,首字符’f’也没有被替换,所以应该不是凯撒加密,或单字母替换再根据标题提示信息,猜测是栅栏密码。

felhaagv{ewtehtehfilnakgw}

1

2

1

f

e

2

l

h

3

a

a

4

g

v

通过对比这是两组文字,可以解出flag{wethinkwehavetheflag} 11 RSA

简单介绍一下RSA吧,这个也是现在密码学题目的一个重点方向

RSA公钥密码体制 RSA公钥算法是由MIT的Rivest, Shamir和Adleman在I 978年提出来的。RSA方案是被最广泛接受并实现的通用公开密钥密码算法,目前已成为公钥密码的国际标准。该算法的数学基础是初等数论中的欧拉定理,其安全性建立在大整数因子分解的困难性之上。

RSA的算法描述 密钥的生成

  1. 选择两个大素数 p,q,(p,q为互异素数,需要保密),
  2. 计算n = p×q, (n) = (p-1)×(q-1)
  3. 选择整数 e 使 ((n),e) =1, 1<e< (n)
  4. 计算d,使d = e-1mod (n),得到:公钥 为{e,n}; 私钥为{d}

题目给了这个tip 注意:得到的 flag 请 将 noxCTF 替换为 flag ,格式为 flag{} 提交。

代码语言:javascript复制
import gmpy2
p=473398607161
q=4511491
e=17
d=gmpy2.invert(e,(q-1)*(p-1))
print (d)

写一个脚本就行,值得注意的是noxCTF就没有出现。

12 丢失的md5

我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4DAB???08???51?80??8A?,请猜出神秘字符串的原本模样,并且提交这个字串的32位MD5码作为答案。

解题思路:

通过脚本补全MD5的值,解码得到flag{}

代码语言:javascript复制
import hashlib  

for i in range(32,127):
    for j in range(32,127):
        for k in range(32,127):
            m=hashlib.md5()
            s = 'TASC' chr(i) 'O3RJMV' chr(j) 'WDJKX' chr(k) 'ZM'
            # TASC J O3RJMV K WDJKX L ZM
            m.update(s.encode())
            des=m.hexdigest()
            if 'e9032' in des and 'da' in des and '911513' in des:
                print(s)
               # print(m)   
                print(des)

13 Alice与Bob(大模数分解)

密码学历史中,有两位知名的杰出人物,Alice和Bob。他们的爱情经过置换和轮加密也难以混淆,即使是没有身份认证也可以知根知底。就像在数学王国中的素数一样,孤傲又热情。下面是一个大整数:98554799767,请分解为两个素数,分解后,小的放前面,大的放后面,合成一个新的数字,进行md5的32位小写哈希,提交答案。 注意:得到的 flag 请包上 flag{} 提交

大素数分解,这一种问题我还是习惯通过在线的工具进行分解,虽然接下来的比赛禁止访问外网……所以找了个这东西。

代码语言:javascript复制
import gmpy2
    
#因数分解,返回值分别为n的因数
def Factorization(n):
    x = gmpy2.iroot(n,2)[0]   1 #gmpy2.iroot(x,n) #x开n次根
    while(True):
        y2 = x * x - n
        y = gmpy2.iroot(y2,2)[0]
        p, q = x   y, x - y
        if (p) * (q) == n:
            if gmpy2.is_prime(p) and gmpy2.is_prime(q): #素性检测
                return (p, q)
        x = x   1

当然我还是喜欢用在线的分解工具解题…….

14 大帝的密码武器

罗马,大帝,密码学………就差报身份证了,凯撒加密,对FRPHEVGL进行枚举,得到

frphevgl,gsqifwhm,htrjgxin,iuskhyjo,jvtlizkp,kwumjalq,lxvnkbmr,mywolcns,nzxpmdot,oayqnepu,pbzrofqv,qcaspgrw,rdbtqhsx,security,tfdvsjuz,ugewtkva,vhfxulwb,wigyvmxc,xjhzwnyd,ykiaxoze,zljbypaf,amkczqbg,bnldarch,comebsdi,dpnfctej,eqogdufk

英语有问题的硬生生不知道哪个是正确的偏移量,不过直接对秘文进行解密,也就多试几次就行。

代码语言:javascript复制
flag{PbzrPuvan}

15 Windows系统密码(md5)

Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: ctf:1002:06af9108f2e1fecf144e2e8adef09efd:a7fcb22a88038f35a8f39d503e7f0062::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: SUPPORT_388945a0:1001:aad3b435b51404eeaad3b435b51404ee:bef14eee40dffbc345eeb3f58e290d56:::

对这些全部进行一遍md5解密, 对a7fcb22a88038f35a8f39d503e7f0062解得一个正常的**good-luck 得到flag{ good-luck}**

16 信息化时代的步伐

606046152623600817831216121621196386 也许中国可以早早进入信息化时代,但是被清政府拒绝了。附件中是数十年后一位伟人说的话的密文。请翻译出明文(答案为一串中文!)

yzdawx0tzyyevldy1ooxx7m这东西是啥?在了解之后,这个是 中文电码通过解码工具解码得到,计算机要从娃娃抓起 。得到flag{计算机要从娃娃抓起}

17 传统知识 古典密码

小明某一天收到一封密信,信中写了几个不同的年份:辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳。信的背面还写有“ 甲子”,请解出这段密文。

在古代采用干支纪年法,即使用10天干12地支的组合记录年号,60年完成一个循环周期(60是10和12的最小公倍数),称一个”甲子”。

辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳分别对应:28,30,23,08,17,10,16,30再加上一甲子(60),得到88,90,83,68,77,70,76,90对应Ascll文本为:XZSDMFLZ

栅栏密码 凯撒密码解出正确答案,XZSDMFLZ只有8位字符,栏数只能是2或者4。2栏解密:XMZFSLDZ4栏解密:XSMLZDFZ再进行凯撒枚举。

对第一栏XMZFSLDZ进行凯撒枚举,得到一堆其中又一个双鱼**(shuangyu)**得到**flag{shuangyu}**

18 传感器(曼彻斯特编码)

5555555595555A65556AA696AA6666666955这是某压力传感器无线数据包解调后但未解码的报文(hex) 已知其ID为0xFED31F,请继续将报文完整解码,提交hex。提示1:曼联

曼联– 曼彻斯特联足球俱乐部 ,重点在于曼彻斯特这是一种编码方式。

曼彻斯特编码(Manchester Encoding),也叫做相位编码(PE)是一个同步时钟编码技术,被物理层用来编码一个同步位流的时钟和数据;常用于局域网传输。在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作时钟信号,又作数据信号,就是说主要用在数据同步传输的一种编码方式。

代码语言:javascript复制
def GE(s):
    #GE标准
    c2bin = {'5':'00', '9':'10', '6':'01', 'A':'11', 'a':'11'}
    s_bin = ''
    for i in s:
        s_bin  = c2bin[i]
    #print(s_bin)
    s_bin_re = ''
    #下面是做了数据报文大小端处理,即每个字节内部倒序
    for i in range((len(s_bin) 7)//8):
        s_bin_re  = s_bin[i*8:(i 1)*8][::-1]
    return hex(int(s_bin_re, 2)).upper()
    
def IEE(s):
    #IEE标准
    c2bin = {'5':'11', '9':'01', '6':'10', 'A':'00', 'a':'00'}
    s_bin = ''
    for i in s:
        s_bin  = c2bin[i]
    #print(s_bin)
    s_bin_re = ''
    #下面是做了数据报文大小端处理,即每个字节内部倒序
    for i in range((len(s_bin) 7)//8):
        s_bin_re  = s_bin[i*8:(i 1)*8][::-1]
    return hex(int(s_bin_re, 2)).upper()

c = "5555555595555A65556AA696AA6666666955"
print(GE(c))
print(IEE(c))

解码后得到 0X12CE09BAFAA060XFFFFFED31F645055F9两个答案,其中的0XFFFFFED31F645055F9的形式是对应题目的ID得到flag

19 凯撒?替换?呵呵

……这个真的不是凯撒加密,这个是替换。还是https://quipqiup.com/ 进行暴力破解。**MTHJ=flag**爆破得到

代码语言:javascript复制
flag substitution cipher decryption is always easy just like a piece of cake

得到flag{substitutioncipherdecryptionisalwayseasyjustlikeapieceofcake}

20 萌萌哒八戒(猪圈密码)

看到图片底下这些符号,很明显是猪圈密码,解密可得whenthepigwanttoeat。

flag{whenthepigwanttoeat}

21 old-fashion(字母替换)

Os drnuzearyuwn, y jtkjzoztzoes douwlr oj y ilzwex eq lsdexosa kn pwodw tsozj eq ufyoszlbz yrl rlufydlx pozw douwlrzlbz, ydderxosa ze y rlatfyr jnjzli; mjy gfbmw vla xy wbfnsy symmyew (mjy vrwm qrvvrf), hlbew rd symmyew, mebhsymw rd symmyew, vbomgeyw rd mjy lxrzy, lfk wr dremj. Mjy eyqybzye kyqbhjyew mjy myom xa hyedrevbfn lf bfzyewy wgxwmbmgmbrf. Wr mjy dsln bw f1_2jyf-k3_jg1-vb-vl_l

还是暴力破解,dsln bw应该就是flag is的移位,暴力破解得到结果:

代码语言:javascript复制
flag{n1_2hen-d3_hu1-mi-ma_a}

22 获得权限的第一部

代码语言:javascript复制
Administrator:500:806EDC27AA52E314AAD3B435B51404EE:F4AD50F57683D4260DFD48AA351A17A8:::

对md5值进行解码,得到flag{3617656}

23 世上无难事(字母替换)

这个依旧是字母替换。PIO=key KQ=IS

COULD JOIN US TODAY AND WE WANT TO THANK WAKEFIELD FOR BEING SUCH AN OUTSTANDING HOST GIVE YOURSELVES A BIG ROUND OF APPLAUSE AND THE KEY IS 640E11012805F211B0AB24FF02A1ED09

flag{640e11012805f211b0ab24ff02a1ed09}

23 异性相吸

key:asadsasdasdasdasdasdasdasdasdasdqwesqf 密文:ἇ̀Ј唒ဃ塔屋䩘卖剄䐃堂ن䝔嘅均ቄ䩝ᬔ

这里密文是乱码,我们转换成二进制查看。

key: 01100001 01110011 01100001 01100100 01110011 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01110001 01110111 01100101 01110011 01110001 01100110

密文:00000111 00011111 00000000 00000011 00001000 00000100 00010010 01010101 00000011 00010000 01010100 01011000 01001011 01011100 01011000 01001010 01010110 01010011 01000100 01010010 00000011 01000100 00000010 01011000 01000110 00000110 01010100 01000111 00000101 01010110 01000111 01010111 01000100 00010010 01011101 01001010 00010100 00011011

代码语言:javascript复制
key = '01100001 01110011 01100001 01100100 01110011 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01100001 01110011 01100100 01110001 01110111 01100101 01110011 01110001 01100110'
msg = '00000111 00011111 00000000 00000011 00001000 00000100 00010010 01010101 00000011 00010000 01010100 01011000 01001011 01011100 01011000 01001010 01010110 01010011 01000100 01010010 00000011 01000100 00000010 01011000 01000110 00000110 01010100 01000111 00000101 01010110 01000111 01010111 01000100 00010010 01011101 01001010 00010100 00011011'
s = ''
key = key.replace(" ", '')
msg = msg.replace(" ", '')
for i in range(len(key)):
    if key[i] == msg[i]:
        s  = '0'
    else:
        s  = '1'
L = s.split(' ')#分离每一个字节
flag = ''
for i in L:
    flag  = chr(int(i, 2))#转化为Ascll字符
print(flag)

得到flag{ea1bc0988992276b7f95b54a7435e89e}

24 Unencode

由标题很容易想到这是UUencode直接**UUencode**解码得到: flag{dsdasdsa99877LLLKK}

25 [AFCTF2018]Morse

直接就莫斯电码了61666374667B317327745F73305F333435797D,}这个就是},由此对莫斯电码转为16进制,得到afctf{1s't_s0_345y}

26 佛说:只能四天

0 人点赞