方法一:
Crypto不兼容python2, 写一个python3的解题writeup,用的是pyaes。
思路还是先给文件加上bmp头,然后打开后可以看到左上角模糊的二维码,和右边的提示,得知文件加密过,并且key就是文件名,然后将文件进行aes解密后,再加入头,即可得到清晰的二维码,扫描即可,代码如下。

import pyaes


def generate_bmp():
    bmp_header = b'\x42\x4d\x36\x0c\x30\x00\x00\x00\x00\x00' \
                 b'\x36\x00\x00\x00\x28\x00\x00\x00\x56\x05\x00' \
                 b'\x00\x00\x03\x00\x00\x01\x00\x18\x00\x00\x00' \
                 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' \
                 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

    key = b'bestwing12345678'
    new_bmp = b''
    with open('bestwing12345678.bmp', mode='rb')as f:
        byte_content = f.read()
        aes = pyaes.AESModeOfOperationECB(key)

        for i in range(0, len(byte_content), 16):
            byte16 = byte_content[i: i + 16]
            decrypt_byte = aes.decrypt(byte16)
            new_bmp += decrypt_byte
    with open('bmp.bmp', mode='wb')as f1:
        f1.write(bmp_header + new_bmp)


if __name__ == '__main__':
    generate_bmp()

方法二:

本题下载附件后虽然后缀是一个bmp,但打不开,如果按照bmp后缀却打不开的思路来想,就是缺少了头部,补充下头部,按bmp比较普遍的54个字节文件头补上去,可以打开。

西普CTF-我就是flag-以夕阳落款

但图片很模糊,尤其左上角应该是一个二维码,先整理自己能看清的就是key:filename,本图名字为bestwing12345678,一开始懵逼了。后来题主说key为密码,且提示用什么方法加密的。然后头脑清晰后,文件名长度为16,结合最常见的加密,就锁定AES了。于是写个脚本完事。

# -*- coding:utf-8 -*-
# author:pcat
# http://pcat.cnblogs.com

from Crypto.Cipher import AES

def getBMPheader():
	#bmp是LITTLE-ENDIAN(小字节序、低字节序)
	bfType='424d' #文件类型
	bfSize='360c 3000' #文件大小,本题3148800+54
	bfReserved1='0000' #保留,为0
	bfReserved2='0000' #保留,为0
	bfOffBits='3600 0000' #数据离文件头偏离量
	biSize='2800 0000' #位图信息头的大小
	biWidth='5605 0000' #宽度,本题1366
	biHeight='0003 0000' #高度,本题768
	biPlanes='0100' #颜色平面数,为1
	biBitCount='1800' #比特数/像素,本题24位
	biCompression='0000 0000' #压缩类型,0为不压缩
	biSizeImage='0000 0000' #图像的大小,本题多少无所谓
	biXPelsPerMeter='0000 0000' #水平分辨率,缺省
	biYPelsPerMeter='0000 0000' #垂直分辨率,缺省
	biClrUsed='0000 0000' #使用的颜色索引数,本题多少无所谓
	biClrImportant='0000 0000' #重要的颜色索引数,本题多少无所谓
	bmp_header=bfType+bfSize+bfReserved1+bfReserved2+bfOffBits
	bmp_header+=biSize+biWidth+biHeight+biPlanes+biBitCount+biCompression+biSizeImage
	bmp_header+=biXPelsPerMeter+biYPelsPerMeter+biClrUsed+biClrImportant
	bmp_header=bmp_header.replace(' ','')
	return bmp_header

def foo():
	ciphertext=open('bestwing12345678.bmp','rb').read() #记得有'b'
	key='bestwing12345678'
	obj=AES.new(key,AES.MODE_ECB)
	message=obj.decrypt(ciphertext)
	fsave=open('out.bmp','wb') #记得有'b'
	fsave.write(getBMPheader().decode('hex')+message)
	fsave.close()
	pass

if __name__ == '__main__':
	foo()
	print 'ok'

Flag:

温馨提示: 此处内容需要评论本文后刷新才能查看,支付2元即可直接查看所有Flag。

小广告:关于获取西普实验吧所有Flag请点击这里查看索引

查看所有Flag文章需要输入密码,需要获取文章密码的童鞋请扫描下面微信或支付宝二维码捐助至少2元(老哥,捐多捐少是个缘分)之后发送支付凭证号联系我获取,Flag大全地址:Flag大全

新功能:捐款的小伙伴请联系我把自己的注册邮箱加入网站白名单,可以免回复看到本站所有Flag

PS:本站不是实验吧的官方站点,纯粹是个人博客,收取Flag费用仅是维持服务器费用,做站不易,且行窃珍惜!

微信二维码:
支付宝二维码: