1.[网鼎杯 2020 青龙组]boom
用cmd打开,运行boom.exe
开始玩一个小游戏
1.第一关
md5 解密后就得到了答案
2.第二关
这里用到一个优秀的python第三方库,Python科学计算利器——SymPy库
from sympy import*
from sympy.abc import x,y,z
ABC = solve([3*x-y+z-185,2*x+3*y-z-321,x+y+z-173],[x,y,z])
print(ABC)
'''
m = solve([x*x+x-7943722218936282],[x])
print(m)
'''
{x: 74, y: 68, z: 31}
3.第三关
用上面的代码就行
flag{en5oy_746831_89127561}
2.[AFCTF2018]你听过一次一密么?
3.[BJDCTF2020]编码与调制
由题目可知,考的是曼彻斯特编码
密文:2559659965656A9A65656996696965A6695669A9695A699569666A5A6A6569666A59695A69AA696569666AA6
用网上找到曼彻斯特解码器,解密文,将解密得到后的16进制转文本,即可得到flag
flag{DifManchestercode}
4.[AFCTF2018]BASE
from base64 import *
s = ""
with open('flag_encode.txt', 'r') as file:
s = bytes(file.read(),'ascii')
file.close()
lis1 = [s]
lis2 = []
lis3 = []
lis4 = []
while(1):
for a in lis1:
ok = 0
try:
lis2.append(b64decode(a).decode('ascii'))
ok = 1
except:
pass
try:
lis2.append(b32decode(a).decode('ascii'))
ok = 1
except:
pass
try:
lis2.append(b16decode(a).decode('ascii'))
ok = 1
except:
pass
if not ok:
lis3.append(a)
if not len(lis2):
break
lis1=lis2.copy()
lis2.clear()
for a in range(0,len(lis3)):
ok = 1
for b in lis3[a]:
if ord(b)>126 or ord(b)<32:
ok = 0
break
if ok:
lis4.append(lis3[a])
print(lis4)
afctf{U_5h0u1d_Us3_T00l5}
5.[NPUCTF2020]Classical Cipher
Atbash加密, pvb 与 key 在字符表中的顺序正好是相对称的。
压缩包解压后得到的jpg图片,是猪圈密码的变体和古埃及象形文字。
猪圈变体
古埃及象形
flag{classicalcode}
6.[WUSTCTF2020]情书
题目
Premise: Enumerate the alphabet by 0、1、2、..... 、25
Using the RSA system
Encryption:0156 0821 1616 0041 0140 2130 1616 0793
Public Key:2537 and 13
Private Key:2537 and 937
flag: wctf2020{Decryption}
新建flag.txt文本
解密代码
from gmpy2 import*
n=2537
d=937
result = []
with open('flag.txt') as f:
for i in f:
result.append(pow(int(i),d,n))
print(result)
得到结果
[8, 11, 14, 21, 4, 24, 14, 20]
找到其对应 的英文,从0开始的。
flag{iloveyou}
8.[UTCTF2020]basic-crypto
解压后得到一堆二进制字符,尝试转为16进制,再转为文本。
通过提示我们可以知道,下面的那一段是base64编码。
base的解密结果提示下面的密文与罗马有关,用quipqiup进行词频分析。
爆破全部密文都是乱码,没有结果,我们只需要爆破与flag相关的那一段就行了。
得到utflag{n0w_th4ts_wh4t_i_c4ll_crypt0}
9.[UTCTF2020]hill
s='wznqcaduqopfkqnwofDbzgeu'
flag_pre='utflag'
def getit(a1,b1,c1,a2,b2,c2,a3,b3,c3):
for i in range(26):
for j in range(26):
if (a1 * i + b1 * j) % 26 == c1 and (a2 * i + b2 * j) % 26 == c2 and (a3 * i+b3*j) % 26 == c3:
return (i,j)
x1=getit(22,25,20,13,16,5,2,0,0)
x2=getit(22,25,19,13,16,11,2,0,6)
import string
flag=''
for i in range(0, len(s),2):
flag+=string.ascii_letters[(x1[0]*string.ascii_letters.index(s[i])+x1[1]*string.ascii_letters.index(s[i+1]))%26]
flag+=string.ascii_letters[(x2[0]*string.ascii_letters.index(s[i])+x2[1]*string.ascii_letters.index(s[i+1]))%26]
print(flag)
#utflagdngeruscphertextqq
10.四面八方
flag{youngandsuccessful}