CTF练习-BUUCTF(1~25)

BUUCTF(新靶场,难度中上,搜集了很多大赛原题)

https://buuoj.cn/

https://buuoj.cn/challenges

Crypto

题目1 一眼就解密

题目

下面的字符串解密后便能获得flag:ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30=注意:得到的 flag 请包上 flag{} 提交

解题思路

题目后面有=就先猜一手base64编码,直接复制base64解码 解密即可得到flag

flag

flag{THE_FLAG_OF_THIS_STRING}

题目2 md5

题目

e00cf25ad42683b3df678c61f42c6bda

解题思路

题目名字就叫MD5,那我们直接把这个复制到md5在线解密 即可得到flag

md5在线查询

admin1

加上flag{},即flag{admin}提交

flag

flag{admin}

题目3 Url编码

题目

%66%6c%61%67%7b%61%6e%64%20%31%3d%31%7d

解题思路

老规矩这种题目直接复制url解码 里面解密即可得到flag

解码得and 1=1

flag

flag{and 1=1}

题目4 看我回旋踢

题目

看我回旋踢 synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}

注意:得到的 flag 请包上 flag{} 提交

解题思路1

直接复制到CTFcrackToolsv里面解密

Rot13解码: ★ flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}
Rot18解码: ★ flag{0cd6559d-31a0-91d3-b275-beb0ba5962e6}

解题思路2

可以看到,字符串基本是还是对应上了flag的格式,不难想到是单字母替换加密

这一题可以直接尝试爆破,令"synt" = "flag"即可,简单的暴力美学

常用的爆破网站 https://quipqiup.com/

先尝试了凯撒加密,代码如下:

import string

def kaisa(s, k): #定义函数 接受一个字符串s 和 一个偏移量k
    lower = string.ascii_lowercase #小写字母
    upper = string.ascii_uppercase #大写字母
    before = string.ascii_letters #无偏移的字母顺序 小写+大写
    after = lower[k:] + lower[:k] + upper[k:] + upper[:k]#偏移后的字母顺序 还是小写+大写
    #分别把小写字母和大写字母偏移后再加到一起 
    table = ''.maketrans(before, after)  #创建映射表
    return s.translate(table) #对s进行偏移 即加密
 
if __name__ == "__main__":
    s = "synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}"
    offset = ord('f') - ord('s')#计算偏移量
    #print(offset)
    print(kaisa(s, offset))
flag

flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}

题目5 摩丝

题目

摩丝 .. .-.. --- ...- . -.-- --- ..-

注意:得到的 flag 请包上 flag{} 提交

解题思路

摩斯密码在线解密

摩斯解码得ILOVEYOU

flag

flag{ILOVEYOU}

题目6 passwd

题目
姓名:张三 
生日:19900315

key格式为key{xxxxxxxxxx}

注意:得到的 flag 请包上 flag{} 提交

解题思路

看到key{xxxxxxxxxx}中key的长度为10位,联想到张三可能取密码的习惯,根据题目信息无非就那么几种

zs19900315
19900315zs
1990zs0315
稍作尝试可得到正确答案

flag

flag{zs19900315}

题目7 变异凯撒

题目
加密密文:afZ_r9VYfScOeO_UL^RWUc
格式:flag{ }

注意:得到的 flag 请包上 flag{} 提交

解题思路

看不出字符串是怎么处理的,但是标题给了提示,肯定是基于凯撒加密的

凯撒加密老规矩,先将前四个字符猜测为flag,然后仔细分析可以发现偏移量不是固定值

a -> f 移位5
f -> l 移位6
Z -> a 移位7
可以看出是一个递增的偏移量,那么直接上代码:

c = "afZ_r9VYfScOeO_UL^RWUc"
m = ''
for i in range(len(c)):
    m += chr(ord(c[i]) + 5 + i)
print(m)
flag

flag{Caesar_variation}

题目8 Quoted-printable

题目

=E9=82=A3=E4=BD=A0=E4=B9=9F=E5=BE=88=E6=A3=92=E5=93=A6
注意:得到的 flag 请包上 flag{} 提交

解题思路

首先这个题目就是试一加密编程
试一我们直接用Quoted-printable解密 即可
Quoted解码: 那你也很棒哦

flag

flag{那你也很棒哦}

知识拓展

quoted-printable 就是说用一些可打印常用字符,表示一个字节(8位)中所有非打印字符方法
任何一个8位的字节值可编码为3个字符:一个等号”=”后跟随两个十六进制数字(0–9或A–F)表示该字节的数值 例如,ASCII码换页符(十进制值为12)可以表示为”=0C”, 等号”=”(十进制值为61)必须表示为”=3D”. 除了可打印ASCII字符与换行符以外,所有字符必须表示为这种格式
所有可打印ASCII字符(十进制值的范围为33到126)可用ASCII字符编码来直接表示, 但是等号”=”(十进制值为61)不可以这样直接表示
ASCII的水平制表符(tab)与空格符, 十进制为9和32, 如果不出现在行尾则可以用其ASCII字符编码直接表示。如果这两个字符出现在行尾,必须QP编码表示为”=09″ (tab)或”=20″ (space).
如果数据中包含有意义的行结束标志,必须转换为ASCII回车(CR)换行(LF)序列,既不能用原来的ASCII字符也不能用QP编码的”=”转义字符序列。 相反,如果字节值13与10有其它的不是行结束的含义,它们必须QP编码为=0D与=0A.
quoted-printable编码的数据的每行长度不能超过76个字符. 为满足此要求又不改变被编码文本,在QP编码结果的每行末尾加上软换行,即在每行末尾加上一个”=”, 但并不会出现在解码得到的文本中

题目9 Rabbit

题目

U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI
注意:得到的 flag 请包上 flag{} 提交

解题思路

题目叫Rabbit这是一个加密,我们直接Rabbit在线解密 即可
Rabbit 在线解密 http://www.jsons.cn/rabbitencrypt/
Cute_Rabbit

flag

flag{Cute_Rabbit}

知识拓展

Rabbit
https://blog.csdn.net/l2645470582_/article/details/121372104
Rabbit 是一种高速流密码,Rabbit 使用一个 128 位密钥和一个 64 位初始化向量。 该加密算法的核心组件是一个位流生成器,该流生成器每次迭代都会加密 128 个消息位。

知识点

rabbit解密
密文特征与base64类似,末尾会有==
若base64等解不通,可以尝试rabbit解密

题目10 篱笆墙的影子

题目

felhaagv{ewtehtehfilnakgw}

星星还是那颗星星哟 月亮还是那个月亮 山也还是那座山哟 梁也还是那道梁 碾子是碾子 缸是缸哟 爹是爹来娘是娘 麻油灯呵还吱吱响 点的还是那么丁点亮 哦哦 注意:得到的 flag 请包上 flag{} 提交

解题思路

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

f l a g { w e t h i n k w
e h a v e t h e f l a g }

栅栏在线解密即可

栅栏密码
分为2栏,解密结果为:flag{wethinkwehavetheflag}

flag

flag{wethinkwehavetheflag}

题目11 RSA

题目
在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flga提交

注意:得到的 flag 请 将 noxCTF 替换为 flag ,格式为 flag{} 提交。

解题思路1
# -*- coding:utf-8 -*-

import gmpy2, libnum
from Crypto.Util.number import long_to_bytes

import gmpy2
p = 473398607161
q = 4511491
e = 17
d = gmpy2.invert(e,(p-1)*(q-1))
print(d)
# 125631357777427553
解题思路2

学习RSAtool2的使用:

1.Number Base 设置为十进制

2.注意:Public Exponent这里要使用16进制的数,如果公钥e=17的话,就应该填入十六进制的11

3.给出p,q,e的话直接填入,再点击Calc.D,获得d

4.给出的是n和e的话,输入n和e,点击Factor N(分解),得到p,q,再重复第3步就能得到d了

注意e填进去是16进制,需要将17转hex得到11再填进去

用RSA-Tool 2 by 1E!即可
RSA-Tool下载链接

题目12 丢失的MD5

题目

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

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

注意:得到的 flag 请包上 flag{} 提交
已知部分明文和明文的部分MD5值,求解明文及MD5

解题思路

已知部分明文和明文的部分MD5值,求解明文及MD5
直接遍历缺失的字符,验证补全的字符串与泄露的部分MD5能否对上即可
附上代码:

看代码用python2.x的版本运行即可获得flag

# -*- coding:utf-8 -*-

import hashlib
for i in range(32,127):
    for j in range(32,127):
        for k in range(32,127):
            m=hashlib.md5()
            m.update(('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM').encode('utf8'))
            des=m.hexdigest()
            if 'e9032' in des and 'da' in des and '911513' in des:
                print(des)
flag

flag{e9032994dabac08080091151380478a2}

知识扩展

hashlib模块
(1)此模块支持多种摘要算法
(2)hashlib.md5()
通过构造函数获得一个hash对象
(3)hash.update()
更新hash对象。连续的调用该方法相当于连续的追加更新。例如m.update(a); m.update(b)相当于m.update(a+b)由于消息摘要是只针对当前状态产生的,所以每一次update后,再次计算hexdigest()的值都会不一样。
(4)hash.digest()
返回bytes格式的消息摘要
(5)hash.hexdigest()
与digest方法类似,不过返回的是两倍长度的字符串对象,所有的字符都是十六进制的数字。
(6)hash.copy()
返回一个hash对象的拷贝

题目13 Alice与Bob

题目

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

解题思路1

题目都说了分解素数,小前大后
素数分解

直接可以看出101999966233

按要求进行MD5,提交

import hashlib

# s = hashlib.md5(101999966233)
s = hashlib.md5('101999966233'.encode('utf8')).hexdigest().lower()  # 注意大小写
print(s)
解题思路2

里面涉及到扩展欧几里得算法、二分法计算平方根、费马检验等的实现,具体细节可参考代码

主要的分解思路是

假设p = x + y,q = x - y
则n = p * q = x2 - y2,在这个式子中,有x > sqrt(n)
所以从sqrt(n)开始往上寻找x,每步加一
验证x2 - n是否能开方,若能,则y = sqrt(x2 - n)
此时,必然有n = p * q
但仍不能保证n被分解为了两个素数,因此要进行素性检验,这里用了10轮费马检验
若不通过检验,重复上述步骤
若通过检验,则n = p * q分解成功

代码

from random import random

#扩展欧几里得算法
#返回值列表中,x是a的逆元(mod b),q是gcd(a,b),若x是0,则表示没有逆元,有x*a + y*b = 1

def Ex_Euclid(a,b):
  if 0==b:
    x=1;y=0;q=a
    return x,y,q
  xyq=Ex_Euclid(b,a%b)
  x=xyq[0];y=xyq[1];q=xyq[2]
  temp=x;x=y;y=temp-a//b*y
  return x,y,q
 
#获取a的逆元(mod b)的函数,目的是为了封装获取逆元的功能
def Get_Inverse(a,b):
  return Ex_Euclid(a,b)[0]
 
#获取a和b的最大公约数函数,目的是为了封装获取最大公约数的功能
def gcd(a,b):
  return Ex_Euclid(a,b)[2]
     
#快速模幂运算       
def quick_momi(a,b,c):
    a=a%c
    ans=1
    while b !=0:
        if b&1:
            ans=(ans*a)%c
        b>>=1
        a=(a*a)%c
    return ans

#费马检验
#n为待检验的整数,rounds为检验的重复轮数
#返回值为1时代表通过检验
def fermat_test(n, rounds):
    for i in range(rounds):
        b = int((n - 4) * random() + 2)#生成一个[2,n-2]之间的随机整数
        if gcd(b, n) > 1:
            return 0
        r = quick_momi(b, n - 1, n)
        if r != 1:
            return 0
    return 1

#经过十轮检验的费马测试
def fermat10(n):
    return fermat_test(n, 20)

#二分法计算平方根
def recursion(num, low, high):
    if high - low == 1:
        return high
    mid = (high + low) // 2
    if pow(mid, 2) > num:
        return recursion(num, low, mid)
    elif pow(mid, 2) < num:
        return recursion(num, mid, high)
    else:
        return mid

#计算平方根,返回值为真实值向上取整
def sqrt(n):
    return recursion(n, 0, n)
    
#判断n是否为平方数
def Is_Square_number(n):
    s = sqrt(n)
    if s * s == n:
        return 1
    return 0

#检验
def check(n, p, q):
    m = q * p
    if fermat10(p) and fermat10(q) and m == n:
        return 1
    return 0

#因数分解,返回值(x, y)分别为n的因数
def Factorization(n):
    x = sqrt(n)
    while(True):
        y2 = x * x - n
        if(Is_Square_number(y2)):
            y = sqrt(y2)
            if check(n, x + y, x - y):
                return (x + y, x - y)
        x = x + 1
       
n = 98554799767
(p, q) = Factorization(n)
print("N的分解结果为 : ")
print("%d = %d * %d" % (n, p, q))

再根据题目要求,小的放前面,大的放后面,合成一个新的数字,进行md5的32位小写哈希:
MD5(101999966233) = d450209323a847c8d01c6be47c81811a
代码比较冗长,使用gmpy2优化代码

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
flag

flag{d450209323a847c8d01c6be47c81811a}

题目14 大帝的密码武器

题目
公元前一百年,在罗马出生了一位对世界影响巨大的人物,他生前是罗马三巨头之一。他率先使用了一种简单的加密函,因此这种加密方法以他的名字命名。
以下密文被解开后可以获得一个有意义的单词:FRPHEVGL
你可以用这个相同的加密向量加密附件中的密文,作为答案进行提交。

密文: ComeChina
解题思路1

“罗马三巨头” + “加密以名字命名” = 凯撒加密

直接对FRPHEVGL进行凯撒枚举

import string

def kaisa(s, k): #定义函数 接受一个字符串s 和 一个偏移量k
    lower = string.ascii_lowercase #小写字母
    upper = string.ascii_uppercase #大写字母
    before = string.ascii_letters #无偏移的字母顺序 小写+大写
    after = lower[k:] + lower[:k] + upper[k:] + upper[:k]#偏移后的字母顺序 还是小写+大写
    #分别把小写字母和大写字母偏移后再加到一起 
    table = ''.maketrans(before, after)  #创建映射表
    return s.translate(table) #对s进行偏移 即加密
 
s = "FRPHEVGL"
for i in range(26): 
    print(kaisa(s, i).lower())

运行结果如下:

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

在其中找到一个有意义的单词security
而从FRPHEVGL->SECURITY 偏移13
同样的用偏移13去加密附件中的内容,得到
ComeChina->PbzrPuvan

flag

flag{PbzrPuvan}

解题思路2

使用[随波逐流]CTF编码工具 解密,观察数字
key1 #13: SECURITY

按照偏移量13 ,使用加密解密编码解码工具SENCODE , 计算ComeChina明文,得到PbzrPuvan
flag{PbzrPuvan}

方法二:python脚本

str1 = 'FRPHEVGL'
str2 = str1.lower()                                 #转换为小写方便识别
num = 1                                             #偏移量
for i in range(26):
    print("{:<2d}".format(num),end = ' ')
    for temp in str2:
        if(ord(temp)+num > ord('z')):               #如果超出'z',需要重新映射会a~z这26个字母上
            print(chr(ord(temp)+num-26),end = '')
        else:
            print(chr(ord(temp)+num),end = '')
    num += 1
    print('')
    str = 'ComeChina'
    for temp in str:
        if (ord(temp) + 13 > ord('z')):
            print(chr(ord(temp) + 13 - 26), end='')
        else:
            print(chr(ord(temp) + 13), end='')
    print('')
PbzrPuvan
flag

flag{PbzrPuvan}

题目15 rsarsa

题目
Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters for the RSA algorithm.


p =  9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q =  11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e =  65537
c =  83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034

Use RSA to find the secret message
解题思路

RSA 已知p、q、e、密文c,求m ,直接上脚本

代码1-gmpy2
# -*- coding:utf-8 -*-

import gmpy2
import binascii
from Crypto.Util.number import long_to_bytes
p=9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q=11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e=65537
c=83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
n=p*q

phi = (p-1)*(q-1)
#2.求d
d = gmpy2.invert(e,phi)
#3.m=pow(c,d,n)
m = gmpy2.powmod(c,d,n)

print(m)
# 5577446633554466577768879988
代码2-libnum
# -*- coding:utf-8 -*-

import libnum
import binascii
from Crypto.Util.number import long_to_bytes
p=9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q=11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e=65537
c=83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
n=p*q

phi = (p-1)*(q-1)
#2.求d
d =libnum.invmod(e,phi)
m=pow(c,d,n)
print(m)
flag

flag{5577446633554466577768879988}

题目16 Windows系统密码

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

注意:得到的 flag 请包上 flag{} 提交

解题思路

这道题看上去是windows系统中存储的账户密钥文件,pass_hash.txt提示出信息经过hash处理,常用的hash函数有md5、sha1等

里面共出现有5个32位hash值,应该是md5

aad3b435b51404eeaad3b435b51404ee

31d6cfe0d16ae931b73c59d7e0c089c0

06af9108f2e1fecf144e2e8adef09efd

a7fcb22a88038f35a8f39d503e7f0062

bef14eee40dffbc345eeb3f58e290d56

在网站上分别进行hash查询

查询md5 https://www.somd5.com/
其中,a7fcb22a88038f35a8f39d503e7f0062(ctf第二串32位字符)解得
flag{good-luck}

flag

flag{good-luck}

题目17 信息化时代的步伐

题目

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

解题思路

看到是整数,先尝试用base36进行编码,得到

yzdawx0tzyyevldy1ooxx7m

题目提示flag答案是中文,那么这个答案显然不对

但是十进制数据没有对应的常用汉字编码

上网学习一波后,由"清政府拒绝进入信息化时代"->中文电码

606046152623600817831216121621196386用中文电码编码得到:

http://code.mcdvisa.com/

中文电码反查汉字结果:

  • 6060:计
  • 4615:算
  • 2623:机
  • 6008:要
  • 1783:从
  • 1216:娃
  • 1216:娃
  • 2119:抓
  • 6386:起

计算机要从娃娃抓起

flag

flag{计算机要从娃娃抓起}

知识点

来源
  中文电码,又称中文商用电码、中文电报码或中文电报明码,原本是于电报之中传送中文信息的方法。它是第一个把汉字化作电子讯号的编码表。
  自摩尔斯电码在1835年发明后,一直只能用来传送英语或以拉丁字母拼写的文字。1873年,法国驻华人员威基杰(S·A·Viguer)参照《康熙字典》的部首排列方法,挑选了常用汉字6800多个,编成了第一部汉字电码本,名为《电报新书》。后由我国的郑观应将其改编成为《中国电报新编》。这是中国最早的汉字电码本。中国人最早研制的电报机华侨商人王承荣从法国回国后,与福州的王斌研制出我国第一台电报机,并呈请政府自办电报。清政府拒不采纳。

应用
  中文电码可用作电脑里的中文输入法,但因中文电码是“无理码”,记忆困难,一般用户几乎无法熟练地掌握使用。
  在香港,每个有中文姓名的市民的身份证上,均会在他的姓名下面,印有中文电码,外国人取得的入港签证亦有印上。在很多政府或商业机构的表格中,都会要求填写者填写他的中文电码,以便输入电脑。
  美国签证申请表(DS-160表)中,要求申请人填写姓名的中文电码,一些生僻字没有对应的中文电码时,可用“0000”代替。

原理
  中文电码表采用了四位阿拉伯数字作代号,从0001到9999按四位数顺序排列,用四位数字表示最多一万个汉字、字母和符号。汉字先按部首,后按笔划排列。字母和符号放到电码表的最尾。后来由于一万个汉字不足以应付户籍管理的要求,又有第二字面汉字的出现。在香港,两个字面都采用同一编码,由输入员人手选择字面;在台湾,第二字面的汉字会在开首补上“1”字,变成5个数字的编码。

题目18 凯撒 替换 呵呵!

题目

MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO} 注意:得到的 flag 请包上 flag{} 提交, flag{小写字母}

解题思路

MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO}

这里flag基本格式还在,明显是一个单字母替换的题

分析mthj->flag偏移分别为7、8、7、3,没有规律,所以应该不是凯撒加密

直接上网站进行爆破:https://quipqiup.com/

令mthj = flag,爆破得到

FLAG{ SUBSTITUTION CIPHER DECRYPTION IS ALWAYS EASY JUST LIKE A PIECE OF CAKE}得到结果即为flag,大写还是小写忘了,这是大小写转换 的在线网页

删除空格

flag{substitutioncipherdecryptionisalwayseasyjustlikeapieceofcake}

flag

flag{substitutioncipherdecryptionisalwayseasyjustlikeapieceofcake}

网址记录

爆破网站

https://quipqiup.com/#google_vignette

大小写转换

https://www.iamwawa.cn/daxiaoxie.html

题目19 萌萌哒的八戒

题目

萌萌哒的八戒原来曾经是猪村的村长,从远古时期,猪村就有一种神秘的代码。请从附件中找出代码,看看萌萌哒的猪八戒到底想说啥 注意:得到的 flag 请包上 flag{} 提交
在这里插入图片描述

解题思路

http://www.metools.info/code/c90.html

一看就是猪圈密码

在这里插入图片描述

flag

flag{whenthepigwanttoeat}

补充知识-猪圈密码

在这里插入图片描述
在这里插入图片描述

补充知识-圣堂武士密码

在这里插入图片描述

题目20 传统知识+古典密码

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

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

提示1:曼联

注意:得到的 flag 请包上 flag{} 提交

解题思路

在古代采用干支纪年法,即使用10天干12地支的组合记录年号,60年完成一个循环周期(60是10和12的最小公倍数),称一个"甲子",天干地支表如下:
在这里插入图片描述

辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳分别对应:

28,30,23,08,17,10,16,30

再加上一甲子(60),得到

88,90,83,68,77,70,76,90

88(X) 90(Z) 83(S) 68(D) 77(M) 70(F) 76(L) 90(Z)

对应Ascll文本为:XZSDMFLZ

作为flag提交,答案不对

根据标题提示:传统知识+古典密码

可能还需要用古典密码破译

尝试过几种不同的古典密码,都没有看到正确结果,那么可能是两种以上古典密码的结合

最终通过栅栏密码+凯撒密码解出正确答案

XZSDMFLZ只有8位字符,栏数只能是2或者4

分为2栏时,解密结果为:XMZFSLDZ

分为4栏时,解密结果为:XSMLZDFZ

将这两个栅栏解密得到的字符串分别凯撒爆破
发现此时shungyu能读懂可能是flag

也可以用代码爆破,附上代码:

import string

def kaisa(s, k): #定义函数 接受一个字符串s 和 一个偏移量k
    lower = string.ascii_lowercase #小写字母
    upper = string.ascii_uppercase #大写字母
    before = string.ascii_letters #无偏移的字母顺序 小写+大写
    after = lower[k:] + lower[:k] + upper[k:] + upper[:k]#偏移后的字母顺序 还是小写+大写
    #分别把小写字母和大写字母偏移后再加到一起 
    table = ''.maketrans(before, after)  #创建映射表
    return s.translate(table) #对s进行偏移 即加密

if __name__ == "__main__":
    s1 = "XMZFSLDZ"
    s2 = "XZSDMFLZ"
    for i in range(26): 
        print("s1:" + kaisa(s1, i).lower())
    for i in range(26): 
        print("s2:" + kaisa(s2, i).lower())

最终在XMZFSLDZ的基础上,凯撒枚举出一个有意义的字符串SHUANGYU

(代码里边我让结果用小写字母输出,是我觉得小写更容易读,flag最后还是大写)

flag

flag{SHUANGYU}

题目21 权限获得第一步

题目
Administrator:500:806EDC27AA52E314AAD3B435B51404EE:F4AD50F57683D4260DFD48AA351A17A8:::

你猜这是什么东西,记得破解后把其中的密码给我。答案为非常规形式。 注意:得到的 flag 请包上 flag{} 提交

F4AD50F57683D4260DFD48AA351A17A8 MD5解码为3617656

https://www.somd5.com/

flag

flag{3617656}

题目22 RSA1

题目
p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229 
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469 
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929 
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041 
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852

注意:得到的 flag 请包上 flag{} 提交

# -*- coding:utf-8 -*-

p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852

import gmpy2
I = gmpy2.invert(q,p)
mp = pow(c,dp,p)
mq = pow(c,dq,q)               #求幂取模运算

m = (((mp-mq)*I)%p)*q+mq       #求明文公式
print(m)
print(hex(m))                  #转为十六进制

# 11630208090204506176302961171539022042721137807911818876637821759101
# 0x6e6f784354467b57333163306d335f37305f4368316e343730776e7d

再十六进制转字符

https://www.bejson.com/convert/ox2str/#google_vignette

noxCTF{W31c0m3_70_Ch1n470wn}

flag{W31c0m3_70_Ch1n470wn}

Dp、Dq泄露
https://blog.csdn.net/m0_51507437/article/details/122440936
https://blog.csdn.net/weixin_45369385/article/details/109208109
dp ≡ d % (p - 1)
dq ≡ d % (q - 1)
已知dp、dq、p、q、c
在这里插入图片描述

flag

flag{W31c0m3_70_Ch1n470wn}

题目23 世上无难事

题目

以下是某国现任总统外发的一段指令,经过一种奇异的加密方式,毫无规律,看来只能分析了。请将这段语句还原成通顺语句,并从中找到key作为答案提交,答案是32位,包含小写字母。 注意:得到的 flag 请包上 flag{} 提交

VIZZB IFIUOJBWO NVXAP OBC XZZ UKHVN IFIUOJBWO HB XVIXW XAW VXFI X QIXN VBD KQ IFIUOJBWO WBKAH NBWXO VBD XJBCN NKG QLKEIU DI XUI VIUI DKNV QNCWIANQ XN DXPIMKIZW VKHV QEVBBZ KA XUZKAHNBA FKUHKAKX XAW DI VXFI HBN QNCWIANQ NCAKAH KA MUBG XZZ XEUBQQ XGIUKEX MUBG PKAWIUHXUNIA NVUBCHV 12NV HUXWI XAW DI XUI SCQN QB HZXW NVXN XZZ EBCZW SBKA CQ NBWXO XAW DI DXAN NB NVXAP DXPIMKIZW MBU JIKAH QCEV XA BCNQNXAWKAH VBQN HKFI OBCUQIZFIQ X JKH UBCAW BM XLLZXCQI XAW NVI PIO KQ 640I11012805M211J0XJ24MM02X1IW09
解题思路

https://quipqiup.com/ 直接爆破

0	-1.534	HELLO EVERYBODY THANK YOU ALL RIGHT EVERYBODY GO AHEAD AND HAVE A SEAT HOW IS EVERYBODY DOING TODAY HOW ABOUT TIM SPICER WE ARE HERE WITH STUDENTS AT WAKEFIELD HIGH SCHOOL IN ARLINGTON VIRGINIA AND WE HAVE GOT STUDENTS TUNING IN FROM ALL ACROSS AMERICA FROM KINDERGARTEN THROUGH 12TH GRADE AND WE ARE JUST SO GLAD THAT ALL 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
1	-4.124	HALLE AWARDVEZD THINK DEU ILL ROGHT AWARDVEZD GE IHAIZ INZ HIWA I SAIT HEM OS AWARDVEZD ZEONG TEZID HEM IVEUT TOY SCOBAR MA IRA HARA MOTH STUZANTS IT MIKAPOALZ HOGH SBHEEL ON IRLONGTEN WORGONOI INZ MA HIWA GET STUZANTS TUNONG ON PREY ILL IBRESS IYAROBI PREY KONZARGIRTAN THREUGH 12TH GRIZA INZ MA IRA JUST SE GLIZ THIT ILL BEULZ JEON US TEZID INZ MA MINT TE THINK MIKAPOALZ PER VAONG SUBH IN EUTSTINZONG HEST GOWA DEURSALWAS I VOG REUNZ EP ICCLIUSA INZ THA KAD OS 640A11012805P211V0IV24PP02I1AZ09

THE KEY IS 640E11012805F211B0AB24FF02A1ED09

转成小写

flag{640e11012805f211b0ab24ff02a1ed09}

flag

flag{640e11012805f211b0ab24ff02a1ed09}

题目24 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

注意:得到的 flag 请包上 flag{} 提交

解题思路

https://quipqiup.com/ 直接爆破

0	-3.426	Xl fogkvryoeksg, e hjdhvxvjvxrl fxksao xh e zavsrb rc alfrbxly dg wsxfs jlxvh rc knexlvaiv eoa oaknefab wxvs fxksaovaiv, effrobxly vr e oayjneo hghvaz; the units may be single letters (the most common), pairs of letters, triplets of letters, mixtures of the above, and so forth. The receiver deciphers the text by performing an inverse substitution. So the flag is n1_2hen-d3_hu1-mi-ma_a
1	-3.477	Kl fogzvryoezsg, e hwdhvkvwvkrl fkzsao kh e javsrb rc alfrbkly dg xskfs wlkvh rc zneklvaiv eoa oaznefab xkvs fkzsaovaiv, effrobkly vr e oaywneo hghvaj; the units may be single letters (the most common), pairs of letters, triplets of letters, miktures of the above, and so forth. The receiver deciphers the tekt by performing an inverse substitution. So the flag is n1_2hen-d3_hu1-mi-ma_a
2	-3.483	Xl fogyvrzoeysg, e hwdhvxvwvxrl fxysao xh e javsrb rc alfrbxlz dg ksxfs wlxvh rc ynexlvaiv eoa oaynefab kxvs fxysaovaiv, effrobxlz vr e oazwneo hghvaj; the units maz be single letters (the most common), pairs of letters, triplets of letters, mixtures of the above, and so forth. The receiver deciphers the text bz performing an inverse substitution. So the flag is n1_2hen-d3_hu1-mi-ma_a

So the flag is n1_2hen-d3_hu1-mi-ma_a

flag{n1_2hen-d3_hu1-mi-ma_a}

题目25 Unencode

题目

89FQA9WMD<V1A<V1S83DY.#<W3$Q,2TM]

注意:得到的 flag 请包上 flag{} 提交

解题思路

由标题很容易想到这是UUencode

直接UUencode解码得到: flag{dsdasdsa99877LLLKK}

使用[随波逐流]CTF编码工具一键解码

UUencode解码: ★ flag{dsdasdsa99877LLLKK}

flag

flag{dsdasdsa99877LLLKK}

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值