题目:
思路:
题意:
给了一个zip的压缩包, 一张图片以及一个被加密的rar文件,rar中有一个txt文件。
首先尝试从图片入手,拖入01Edit发现末尾的提示。
然后从压缩包入手,从第一个PK开始到最后,分离出了一个加密的zip。
ARCHPR纯数字爆破该压缩包的密码。
解压后,找到压缩包里最大的图片,01Edit先看看。发现末尾有一串base64.
丢进扔CyberChef里,保存成png图片,得到一张全新的图
修改图片的高度,得到新的base64
抄下来,继续扔进去解密。
RmluZGluZy4uLg==
得到rar压缩包的密码,解压得到flag.txt中的flag文件内容
题意:
思路:
观察代码,发现加密只进行了位置对换,不知道Rail和offset,但是知道了flag的格式。
肯定是最后m = flag {_____ 长度已知 _______},然后经过两个参数加密后得到最终的字符串。
可以发现g,l,{},这些字符在整个加密结果中只有一个并且位置已经确定,因此可以爆破得到Rail和offset只有两种可能。
代码中的encrypt部分是不用改的,flag只保留长度和flag{}这几个字符,然后枚举rail和offset判断一下即可。
import hashlib
#m = 'reetdrvhns0eutbftafmeon}linnd=a1cOh!gcedos{neuwkYav0irOceytounw'
m = 'flag{_________________________________________________________}'
def encrypt(c,rails,offset):
c = '$' * offset + c
length = len(c)
result = {x: "" for x in range(rails)}
for a in range(length):
width = rails * 2 - 2
num = a % width
if (num < rails):
result.update({num: result[num] + c[a]})
else:
ll = 2 * rails - 2 - num
result.update({ll: result[ll] + c[a]})
d = ""
for k in range(rails):
d = d + result[k]
d = d.replace('$','')
return d
# print (d), encrypt就这里return, 其他不改
for Rail in range(2,20):
for Offset in range(0,30):
if encrypt(m, Rail , Offset)[23:25]=='}l':
print(Rail,Offset)
得到(13,5),(13,29)以后,丢到CyberChef里解码即可得到flag。
给出的是一个gif,可以用potplayer或ffmpeg分解一下,得到单个的图片。
ffmpeg -i qrimg.gif qrimg%d.png
将图片放入stegsolve中可以发现每一张图片在b0位都能看到一个二维码,扫码之后得到一个字母。
因此猜测是将所有二维码进行扫描后得到一串字符。
from PIL import Image
import pyzbar.pyzbar as pyzbar
for count in range(1,313):
img = Image.open('.//qrimg//'+str(count)+'.png')
img = img.convert('RGB')
width,height=img.size
result = ""
for i in range(0,height):
for j in range(0,width):
tmp = img.getpixel((j,i))
result += bin(tmp[2])[-1]
a = 0
pic = Image.new("RGB",(288,360))
for y in range(0,360):
for x in range(0,288):
if(result[a] == '0'):
pic.putpixel([x,y],(0,0,0))
else:
pic.putpixel([x,y],(255,255,255))
a += 1
img_size = pic.size
barcodes = pyzbar.decode(pic)
for barcode in barcodes:
barcodeDATA = barcode.data.decode("utf-8")
print(barcodeDATA,end="")
Vm0xd1NtUXlWa1pPVldoVFlUSlNjRlJVVGtOalZsSlZWR3RPVlUxWGVIcFdiVFZyWVd4S2MxTnNXbFpOYmxJelZrUkdTMlJIVWtWV2JHUnBWa1ZaZWxaclkzaFdNbEpJVm10c1ZXSkdXbTlVVmxaM1ZWWmtWMVpzV214U2EzQllWMnRhYzFsV1NsVldiazVhWWtkU2RscEhlR0ZTVmtwMFpFWm9hR1ZzV2xoV1IzaHZVakpHUmsxSWJHeFNWR3hZV1ZSS1VtUXhVbFZTYkU1clVsUldTbGRyV2tkV2JGcEZVVlJWUFE9PQ==
最后多次base64解密可以得到flag。