MISC-二维码图片

前言

可以上网查查了解一下二维码的原理,能学到一些知识也对我们做CTF二维码题有一定帮助。二维码出现在CTF题中一般都是穿插在其他题中,或者整体就是考查都是二维码,整体来说不算太难,如果会PS会更容易一些。推荐文章:CTF中二维码题目及答题技巧总结(二)

题目复现

实验吧 - 复杂的QR_code

题目地址:http://www.shiyanbar.com/ctf/1856解题链接:http://ctf5.shiyanbar.com/stega/QR_code.png

打开链接,发现是一张二维码,尝试扫一下

1

扫出来是:secret is here

然后放在winhex里看一下,发现有一个隐藏的zip文件,zip里面有一个txt文件

2

所以binwalk一下,得到一个压缩包打开,是一个加密的txt文件,文件名叫4number.txt,密码应该就是4个数字了,那就暴力破解,可以用archpr(也可以用kali带的叫fcrackzip的工具)

3

密码就是7639了,打开文件输入密码得到flag:CTF{vjpw_wnoei}

bugkuCTF - 图穷匕见

解题链接:https://ctf.bugku.com/files/f6697e1f904a0c30b56f72fcf0023434/paintpaintpaint.jpg

4

保存图片,用winhex打开找到jpg文件尾FF D9发现后有一长串数字

5

观察下应该是16进制,将之后的数据保存到txt中,用notepad++打开,有一个插件可以解码

6

7

得到很多坐标,所以就要“画图”了,用gnuplot(下载)这个工具将这些坐标做成一张图即可,不过要先将坐标改成gnuplot能识别的坐标

8

把txt文件放到gnuplot的bin目录下,运行gnuplot

9

10

得到一个二维码

11

扫描得到flag:flag{40fc0a979f759c8892f4dc045e28b820}

bugkuCTF - 很普通的数独

题目地址:https://ctf.bugku.com/challenges#%E5%BE%88%E6%99%AE%E9%80%9A%E7%9A%84%E6%95%B0%E7%8B%AC(ISCCCTF)

下载压缩包后缀名改成.zip,打开后发现有25张数独的图片

12

然后呢??看了大佬wp才明白这题是个啥

把这25张图片弄成5x5排列发现这其实是张二维码。1.png、5.png、21.png仔细看看就是是二维码的定位形状,三个角上的方形块,1.png是二维码右上角、5.png是二维码左下角、21.png是二维码左上角,所以把这三张换下顺序,1.png、5.png、21.png重命名成:5.png、21.png、1.png。

然后把有数字的格记为数字1(代表黑色),没有的记为0(代表白色),保存为txt文件

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
44
45
111111101010101000101000001111110000101111111
100000101100111101010011101100011001001000001
101110101110011111010011111101000101001011101
101110101101100010001010000011110001101011101
101110100011100100001111101111111011101011101
100000101100100000011000100001110100001000001
111111101010101010101010101010101011101111111
000000000011001101001000110100110011100000000
110011100100100001111111100100101000000101111
101001001011111111101110101011110101101001100
100000111100100100000110001101001101010001010
001100010011010001010011000100000010110010000
010110101010001111110100011101001110101101111
100011000100011100111011101101100101101110001
001100110100000000010010000111100101101011010
101000001011010111110011011111101001110100011
110111110111011001101100010100001110000100000
110101000010101000011101101101110101101001100
010011111110001011111010001000011011101101100
011001011001010101100011110101001100001010010
010111111111101011111111101101101111111111100
011110001100000100001000101000100100100011110
111110101110011100111010110100110100101010010
110010001011101011101000111100000011100010000
101011111011100111101111111100001010111110010
110100011000111000100111101101111101000100010
111101111110001001000011010110001111110111110
011001010101000110010100010001000101101010001
011101110101101101100100001101101000111101001
110110001001101100010101101111110100101100110
000011100111000000000100001010101111100010010
111010010011110011101110010100001011111010010
101001100010111111110100000100001010101010100
000010011001001101110101001111100101111101101
000010111101110001101011000001000101110100110
011110011010100010100000011011000001110010000
100110100100001101111111101100101110111110011
000000001111110101101000101011100100100011010
111111100011111011011010101101110011101011110
100000101110101101101000111110010001100010001
101110101011100001111111101101001000111111011
101110100110111101101000001001101100011101101
101110100000011101100001101010110010010010001
100000101011001011111011001011000011010110000
111111101010101001111011110101101110000101101

再把这些数字用python脚本画出二维码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from PIL import Image
x = 45
y = 45

im = Image.new('RGB', (x, y))
white = (255, 255, 255)
black = (0, 0, 0)

with open('file.txt') as f:
for i in range(x):
ff = f.readline()
for j in range(y):
if ff[j] == '1':
im.putpixel((i, j), black)
else:
im.putpixel((i, j), white)
im.save("1.jpg")

把txt文件放到python目录下,运行python脚本,得到二维码(如果运行python脚本是出现UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xfe in position 0: illegal multibyte sequence错误,用notepad++打开txt文件将编码改为utf-8编码就行了)

13

扫描二维码,得到

1
Vm0xd1NtUXlWa1pPVldoVFlUSlNjRlJVVGtOamJGWnlWMjFHVlUxV1ZqTldNakZIWVcxS1IxTnNhRmhoTVZweVdWUkdXbVZHWkhOWGJGcHBWa1paZWxaclpEUmhNVXBYVW14V2FHVnFRVGs9

多次base64解码应该是7次,得到flag:flag{y0ud1any1s1}

参考文章:https://blog.csdn.net/zz_Caleb/article/details/88800201

bugkuCTF - 闪的好快

解题链接:https://ctf.bugku.com/files/6dcac03199e58749725cbcd9cc958a9b/masterGO.gif

打开后是一个二维码的gif动图

14

那就把每帧分开,可以用WPS图片查看也可以用stegsolve的Analysis->Frame Browser查看,有18张图片,挨个扫下得到flag:SYC{F1aSh_so_f4sT}

bugkuCTF - 多种方法解决

解题链接:http://123.206.87.240:8002/misc/3.zip

题目内容:在做题过程中你会得到一个二维码图片

下载压缩包打开发现是一个exe文件,放到winhex里面查看发现

15

16

所以这里要base64编码还原成图片,将文件后缀名改成.txt复制内容,在线转换,得到二维码

17

扫描二维码得到flag:KEY{dca57f966e4e4e31fd5b15417da63269}

bugkuCTF - 普通的二维码

题目地址:https://ctf.bugku.com/challenges#%E6%99%AE%E9%80%9A%E7%9A%84%E4%BA%8C%E7%BB%B4%E7%A0%81

下载压缩包打开有一张二维码图片

18

扫描得到:哈哈!就不告诉你flag就在这里!

没有什么用,那应该有隐藏的文件,放到winhex中查看

19

末尾有一串数字,观察右边数字只有0~7,所以可能是八进制,查下ASCII码表发现146就是f,然后就是3个数字一组,由八进制转换成字符了,可以使用python脚本:

1
2
3
4
5
a=[146,154,141,147,173,110,141,166,145,137,171,60,125,137,120,171,137,163,143,162,151,160,164,137,117,164,143,137,124,157,137,124,145,156,137,101,163,143,151,151,41,175]
j=''
for i in a:
j = j+chr(int(str(i),8))
print (j)

运行脚本得到flag:flag{Have_y0U_Py_script_Otc_To_Ten_Ascii!}