0x00 BMP文件格式

关于BMP文件的详细格式信息请看这个链接
http://www.cnblogs.com/tiandsp/archive/2012/10/22/2734552.html
BMP文件的数据按照从文件头开始的先后顺序分为四个部分:
◆ 位图文件头(bmp file header): 提供文件的格式、大小等信息
◆ 位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息
◆ 调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表
◆ 位图数据(bitmap data):图像数据区

Alt text
下面是一道实验吧的题,需要自己补全bmp图片文件头,这是一个大神写的具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def header():
btype='424d' #头标识
bsize='360c 3000' #大小
bapp1='0000' #指定应用
bapp2='0000' #指定应用
boffset='3600 0000' #偏移量这里是54
biSize='2800 0000' #位图信息头的大小40
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' #重要的颜色索引数,本题多少无所谓
BMPheader=btype+bsize+bapp1+bapp2+boffset+biSize+biWidth+biHeight+biPlanes+biBitCount+biCompression
BMPheader=BMPheader+biSizeImage+biXPelsPerMeter+biYPelsPerMeter+biClrUsed+biClrImportant
return BMPheader.replace(' ','')
ciphertext=open('./bestwing12345678.bmp','rb').read()
f=open('out.bmp','wb')
f.write(header().decode('hex')+ciphertext)
f.close()

以上代码会补全会生成图片
x
这道题实际是AES加密大神代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# -*- coding:utf-8 -*-
# author:pcat
# http://pcat.cnblogs.com

from Crypto.Cipher import AES

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

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

if __name__ == '__main__':
truefoo()
trueprint 'ok'

扫描二维码拿到flag:
x
相关链接
http://www.cnblogs.com/l2rf/p/5643352.html

Author:FreeV

未经本人允许,禁止转载

文章目录
  1. 1. 0x00 BMP文件格式
  2. 2. 未经本人允许,禁止转载