记录一些有意思的题目
7-2
下载解压得到一个文件夹,里面有一堆文件,对所有文件名进行 base64 解码
# coding=utf-8
import os
import base64
for name in os.listdir("/root/桌面/problem"):
print name
# 由于文件名不是4的倍数,需要在后面补‘=’
missing_padding = 4 - len(name) % 4
if missing_padding:
name += '=' * missing_padding
print str(base64.b64decode(name.encode()))
看到输出的信息里只有这个文件解码后不是乱码:YWluaWRleGluZ3podWFuZw
打开文件后看到里面存在一对花括号,那么很有可能这些数字解码后就是flag
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 74 94 22 42 91 23 {82 42 82 52 63 21 42 22 73 21 }00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
这次使用的是9键加密,第一个数字代表9键键盘下的数字,第二个数字代表该数字下的第几个字母。解密后再用一次凯撒加密即可得到 flag
wdflag{ylyoselfve}
ewm
下载解压后得到一个文件夹,打开看到里面是一堆二维码的部分图块,按大小被分为了 small 和 big 两部分,总共两个二维码,可以把图片拖到 word 里拼图,拼完的二维码扫出来就是 flag,而且两组图片拼图的结果都是一样的,这里给一个拼图的脚本(并不能完美的拼出来,但已经可以扫出来了)
import os
from PIL import Image
# 由于二维码并没有被完整的切开,都保留了一部分边缘
# 所以可以遍历所有图片来找到两个边缘符合的图片进行拼图
# 设置已知的图片
def set_image(in_file, x, y):
code[y][x] = in_file
file.remove(in_file)
# 找到一张图片的右边一张
def find_right(in_file):
result = ''
pixes = Image.open(os.path.join(current_path, in_file)).load()
# 计算出已知图片的右侧像素值(以二进制存储)
pix = 0
for row in range(width):
r, g, b = pixes[width-1, row]
pix <<= 1
if r + g + b > 255:
pix += 1
# 用同样的方法在剩下的图片里找到与已知图片边缘相符的图片
for fi in file:
pixes = Image.open(os.path.join(current_path, fi)).load()
pix2 = 0
for row in range(width):
r, g, b = pixes[0, row]
pix2 <<= 1
if r + g + b > 255:
pix2 += 1
if pix