首页 > 编程语言 >【MISC】一道假的二维码题目学习zxing库[python解读二维码]

【MISC】一道假的二维码题目学习zxing库[python解读二维码]

时间:2024-06-01 13:10:57浏览次数:22  
标签:img encoding python MISC zxing decode 二维码 parsed

引言

这道题目的考点是文件格式、双图差值、Ook!编码、PRC等,我做这题的重点是复习巩固python读取二维码zxing库的使用。

例题

┌───────────────────────────────────────────────────┐
│                   马老师的秘籍                      │
│                                                   │
│   DASCTF2020 圣诞赛 Misc题目                        │
│                                                   │ 
└───────────────────────────────────────────────────┘
ps:考虑到某公司的不分享精神或许会有版权之类的争端,文件的解密需要你ctf一下,哈哈!

提取码:pZrX

Writeup(WP)

  1. 打开图像《马老师的秘籍.png》是一排排的二维码,扫描一下看看:
    一排排二维码
    【注意】真正解题不要扫描这些二维码(网上流行马保国的一段话而已,跟做题没有关系),就是一个浪费时间的坑
    二维码批量扫描
  2. 查看图像《马老师的秘籍.png》二进制,发现PK压缩包,手动或者使用foremost分解出zip包《00002236.zip》,使用winrar可以看到里面有3个加密的文件,但用其它压缩软件如360zip查看却是乱码:
    压缩包
  3. 二进制查看《00002236.zip》发现伪加密,9改为0,zip包恢复:
    伪加密
  4. 解压出《马老师的奇妙棋盘.jpg》,折腾一会儿发现是双图差值,跟《马老师的秘籍.png》XOR:
    奇妙棋盘
    双图
  5. 根据提示md5(NianQingRenBuJiangWuDe)=c57988283c92f759585a0c1aebfdd743,得到解压密码解开《00002236.zip》
    md5
    prc
  6. 写脚本得到Ook!密文,解密得到flag:
    Ook

    本题得解。

相关脚本

图片分隔

from PIL import Image, ImageDraw

# 创建一个 400x400 的黑色像素图
#image = Image.new('RGB', (400, 400), (255, 255, 255))
img = Image.open("马老师的秘籍.png")
img_size = img.size
print(img_size) 
w = img_size[0]  # 图片宽度
h = img_size[1]  # 图片高度
# 数一数得到二维码的边长为99
'''
# 创建一个 ImageDraw 对象
draw = ImageDraw.Draw(img)

# 纵向
qidian=0
kuand=99
jiange=0
while qidian+kuand<w:
    draw.line((qidian,0,qidian,h),fill=(255, 0, 0),width=1)
    draw.line((qidian+kuand,0,qidian+kuand,h),fill=(0,255,0),width=1)
    qidian += (kuand+jiange)

# 横向
qidian=0
kuand=99
jiange=0
while qidian+kuand<h:
    draw.line((0,qidian,w,qidian),fill=(0, 0,255),width=1)
    draw.line((0,qidian+kuand,w,qidian+kuand),fill=(0,255, 0),width=1)
    qidian += (kuand+jiange)

# 保存图像
img.save('key.png')
'''
n=0
wq=hq=0
side =99
while side+hq<=h:
    wq=0
    while side+wq<=w:
        img_name = f'./qrcodes/'+str(n).zfill(3)+'.png'
        cropped = img.crop((wq, hq, wq+side, hq+side))
        cropped.save(img_name)
        n+=1
        # cropped.show()
        wq+=side
    hq+=side

二维码批量读取

import zxing    #导入解析包

reader = zxing.BarCodeReader()
imgs = glob.glob(r'./qrcodes/*.png')
#print(imgs)

# 测试【注意】zxing被我给修改了,直接安装的不能用,详见下方的扩展
#print(reader.decode(imgs[0],encoding='gb18030').parsed)

# 一个一个读,很慢!
'''
msg=''
for i in imgs:
    msg += reader.decode(i).parsed
'''
# 批量读取
info = reader.decode(imgs,encoding='gb18030')
msg =  ''.join([x.parsed for x in info])
print(msg)

一一替换

with open('GoodLuck.txt',encoding='utf-8') as k:
    key = k.read().split('\n')
with open('闪电五连鞭.txt',encoding='utf-8') as c:
    cipher = c.read()

k={}
for i in key:
    t=i.split(' -> ')
    k[t[0]]=t[1]
    cipher=cipher.replace(t[0],t[1])
print(cipher)

扩展知识点

zxing库在windows上整合

  1. zxing安装:
> pip install zxing
> pip list zxing | findstr "zxing"
zxing                              1.0.3
  1. zxing安装目录D:\\coding\\Anaconda3\\lib\\site-packages\\zxing
  2. 错误修正
3.1. 报错:zxing.BarCodeReaderException: ('Java JARs not found in classpath ...)
找到__init__.py文件中的class BarCodeReader(object):
里面关于文件路径分隔符的判断:classpath_sep = ';' if sys.platform == 'nt' else ':'  # https://stackoverflow.com/a/60211688
【修正】 因为我们是在windows里面用,直接改为 classpath_sep = ';' 即可。

3.2. 报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xdf in position 0: invalid continuation byte
找到__init__.py文件中的class BarCodeReader的decode函数中codes = [BarCode.parse(result) for result in file_results]
使用了BarCode.parse(result)中有两处bytes.decode()调用,显然是utf-8与中文编码GB18030/GBK/GB2312 不兼容导致
        parsed = parsed[:-1].decode()
        raw = raw[:-1].decode()
【修正】 增加一个参数,改动如下:
BarCode.parse(cls, zxing_output, encoding='utf-8'):
        parsed = parsed[:-1].decode(encoding)
        raw = raw[:-1].decode(encoding)
BarCodeReader.(self, filenames, try_harder=False, possible_formats=None, pure_barcode=False, products_only=False, encoding='utf-8'):
        codes = [BarCode.parse(result, encoding=encoding) for result in file_results]
【使用】可以传参编码方式:zxing.BarCodeReader().decode(imgs[0],encoding='GBK')

PS使用之图层操作

  1. 打开ps,文件>打开:
    open
  2. 打开第一张图片,新建一个图层(Ctrl+Shfit+N),隐藏“背景”图层,放大编辑窗口:
    img1
    big
  3. 再打开第二张图片,Ctrl+A复制图层:
    copy
  4. 回到第一张图片,图层1中Ctrl+V粘贴:
    paste
  5. 图层1选择“差值”
    diff
    info

结束语

今天是儿童节又是周末,天公作美,一早就下起了大雨,吃过早饭,写点代码,把zxing搞定了,也把这两周的负面情绪扫扫空。

落之~

标签:img,encoding,python,MISC,zxing,decode,二维码,parsed
From: https://www.cnblogs.com/folio/p/18225843

相关文章

  • python 卡尔曼滤波算法
    卡尔曼滤波(KalmanFilter)是一种有效的递归滤波器,用于线性动态系统的状态估计。它通过考虑先前的估计和当前的观测来提供下一个状态的最佳估计。卡尔曼滤波器广泛应用于导航系统、机器人定位、信号处理等领域。下面是一个简单的Python实现卡尔曼滤波算法的例子,用于估计一个一维......
  • Python依据遥感影像的分幅筛选出对应的栅格文件
      本文介绍基于Python语言,结合已知研究区域中所覆盖的全部遥感影像的分幅条带号,从大量的遥感影像文件中筛选落在这一研究区域中的遥感影像文件的方法。  首先,先来明确一下本文所需实现的需求。现已知一个研究区域(四川省),且已知覆盖这一研究区域所需的全部遥感影像的分幅条带号......
  • 基于Python+OpenCV高速公路行驶车辆的速度检测系统
    欢迎大家点赞、收藏、关注、评论啦,由于篇幅有限,只展示了部分核心代码。文章目录一项目简介二、功能三、系统四.总结一项目简介  一、项目背景与意义随着交通流量的增加和高速公路的快速发展,高速公路上的车辆速度管理成为了保障道路安全和提升通行效率的重......
  • SockJS Python 客户端
    SockJS是一个用于浏览器和服务器之间建立全双工连接的库,它允许在不支持原生WebSocket的浏览器中提供类似WebSocket的API。Python中也有很多SockJS客户端库,例如`python-socketio`和`sockjs-client-py`。以下是如何使用Python客户端(在这个例子中,我们将使用`pytho......
  • 【多进程并发笔记】Python-Multiprocess
    目录调用函数后,函数内的变量如何释放?python2.7怎么使用多线程加速forloop多进程进程池,函数序列化错误的处理Time模块计算程序运行时间使用多进程,Start()后,如何获得返回值?使用多进程并行,每个进程都将结果写入sqlite3数据库,可以么python创建进程池进程池的最大进程数怎么确......
  • 【计算机毕业设计】谷物识别系统Python+人工智能深度学习+TensorFlow+卷积算法网络模
    谷物识别系统,本系统使用Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经算法网络模型,通过对11种谷物图片数据集('大米','小米','燕麦','玉米渣','红豆','绿豆','花生仁','荞麦','黄豆','黑米','黑豆')进行训练......
  • 为什么 python 会出现这种行为?
    我试图在Python中将数字动态追加到2D数组中。temp=[]arr=[tempforiinrange(2)]Arr[0].append("erg;erg)arr[0].append("ergse")print(arr)我得到的输出结果是......
  • 记一次读取halcon二维码模型文件的报错
    C#中使用的halcon的dll版本为17.12二维码模型是通过halcon软件保存的,halcon软件版本为20.05.前后使用的halcon版本不一致,导致程序中读取模型一直报错“HALCONerror#8860:Invalidheaderin2ddatacodemodelfileinoperatorread_data_code_2d_model”  ChatG......
  • 基于python美食网站的设计与实现论文
    目录摘要IAbstractII第1章绪论11.1项目研究的背景11.2开发目的和意义11.3国内外研究现状1第2章系统开发工具32.1Python编程语言32.2B/S模式32.3MySQL数据库42.4Django框架介绍42.5Vue开发技术52.6JavaScript简介5第3章系统分析73.......
  • 基于Python高校成绩分析的设计与实现论文
    目录1绪论11.1开发背景11.2国内外研究现状和发展趋势综述11.3开发设计的意义及研究方向12系统开发技术32.1Python可视化技术32.2Django框架32.3IDEA介绍32.4B/S架构42.5MySQL数据库介绍43系统分析53.1整体分析53.2功能需求分析53.3系......