密码杂项复现
不要尝试爆破呦!
将题目中下载的文件解压后得到一张图片和一个压缩包,压缩包里面的文本需要密码
那就解析这张图片,从而获得密码
这里可以看到Key{}
将没用的数字和空格删掉即为密码
密码yUnxiwlGF@604..S_ET-up,解开后发现文本的开头,这是base64解码
解码后得到这样一个残缺的二维码,把它补充完整进行扫描便可以得到flag
留个后门
将下载的文件用D盾扫描,发现这个文件
将其打开一个一个打开去找flag
发现了flag,Yunxi{This is flag!!!}
师姐的旅游照片
根据题目的提示,打开后发现一张图片,然后解析图片
得到一串base64码,进行解码
得到了一半的flag
再把他压缩后再进行解压,修改他的宽高度得到flag
来听一首music
解压下载的文件后发现1个文件和一个压缩包,压缩包需要密码
将yunxi.MP3文件拖到这个MP3tego的目录里面,执行cmd命令
得到了passwd.txt,打开它
尝试解码
发现一个密码,是另一个压缩包的,解开尝试一下
打开后得到一个文本,进行摩斯密码解密将A用-代替,B用.代替
%u7b 和 %u7d 是 unicode 字符的十六进制编码.%u7b 对应{,%u7d 对应 }
转换得到flag
Yunxi{HHHTHIS_IS_F1AG+20240306}
Fuck!
进行两次解码得到flag
MD5
运行python脚本得到flag
脚本:
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(('Yunxi{' + chr(i) + '_real' + chr(j) + 'y_k' + chr(k) + '0w_md5}').encode('utf-8'))
des = m.hexdigest()
if des == '42db61d26c6541e30314cafc60f93113':
print('Yunxi{' + chr(i) + '_real' + chr(j) + 'y_k' + chr(k) + '0w_md5}')
break
XX+KS
进行xxencode解码,再运行脚本得到flag
ciphertext = "afZ_rj]]fQZcN1[^kXhTjTdZQcW\Zh"
plaintext = ""
part1_offset = 5
part2_offset = 6
# 第一部分解密
for i in range(len("flag{this_is_}")):
char = ciphertext[i]
plaintext += chr(ord(char) + part1_offset)
part1_offset += 1
# 第二部分解密
for i in range(len("flag{this_is_}"), len(ciphertext)):
char = ciphertext[i]
plaintext += chr(ord(char) + part2_offset)
part2_offset += 1
print(plaintext)
EZ-rsa
n= [5567000486226353254524673454357147076118077122275789480555238584552332526459181641567858429587222587683345901310468140782420858931709570476562698953112801, 6982887363645354856540867035629441781549999700006363403940951376485517460506822033812812263179663875843737953430050436453298336104404304183964162702612863, 5569628780521526092136759047774448808289588145127191213956593902336353172559905282602383716258500935021056393917971164303539941268395159953652768614304911]
c= [4112523544883480830903403452517516825703078902670926405984774762024235980767805538947466914193950835488469608756778569692190967901730207690525300247682815, 4181292472036270897593568708931413787888488621274030741130549434467976405476555130890722346319549396800183827305452019796119873044279138566837264814627098, 3857434270788621361517349247277347831953021241414984430770586220424214110700999615785879462771584952744049357875753754209006439028080870626012342467148773]
from functools import reduce #用于对序列进行累积操作
def CRT(mi, ai): #中国剩余定理,用于合并c中的加密结果,mi模数列表,ai加密列表
assert(reduce(gmpy2.gcd,mi)==1) #模数是互质(它们的最大公约数)
assert (isinstance(mi, list) and isinstance(ai, list))
M = reduce(lambda x, y: x * y, mi)#计算所有模数的乘积M
ai_ti_Mi = [a * (M // m) * gmpy2.invert(M // m, m) for (m, a) in zip(mi, ai)]#m对应的加密结果a储存在ai_ti_mi列表中,x模m的乘法逆元
return reduce(lambda x, y: x + y, ai_ti_Mi) % M#将所有a相加,并对m取模得到crt结果
e=0x3#公钥指数
m=gmpy2.iroot(CRT(n, c), e)[0]#第一个元素是整数部分,用[0]获取
print(binascii.unhexlify(hex(m)[2:].strip("L")))#将明文从十六进制转成二进制
#互质。例如,3和11、相邻的自然数、相邻的奇数、1和任何数、两个不同的质数、2和任何奇数等都是互质的。
#中国剩余定理和取小次方根
然后将{}MD5加密后得到flag
结果:Yunxi{30a01dc5542751497477c601093dd201}