[NCTF 2022]qrssssssssqrssssssss_revenge WP

news/2025/2/27 22:49:13/文章来源:https://www.cnblogs.com/C4rp/p/18742232

[NCTF 2022]qrssssssss&qrssssssss_revenge WP

本来最近是想练习写 python 脚本的,无意之中刷到了这道题,看到是关于二维码的,于是正好研究一下。

看了官方 WP有些概念没怎么懂,又去借鉴了别人的二维码学习笔记,不过最终还是没看懂官方 Wp 的脚本中的 marklist 是怎么回事。

以下是我的解法:

qrssssssss_revenge

先脚本全部扫描二维码之后,

import os
import cv2
import datetime
import pyzbar.pyzbar as pyzbar# 获取文件的修改时间
def get_modification_time(file_path):return datetime.datetime.fromtimestamp(os.path.getmtime(file_path))# 解码二维码
def decode_qr_code(image_path):image = cv2.imread(image_path)barcodes = pyzbar.decode(image)for barcode in barcodes:return barcode.data.decode("utf-8")return Nonedef main(folder_path):images = []for file in os.listdir(folder_path):if file.lower().endswith((".png", ".jpg", ".jpeg")):file_path = os.path.join(folder_path, file)modification_time = get_modification_time(file_path)images.append((file_path, modification_time))# 按修改时间排序images.sort(key=lambda x: x[1])results = []for image_path, _ in images:qr_content = decode_qr_code(image_path)if qr_content:results.append(qr_content)# 输出到文本文件with open("output.txt", "w", encoding="utf-8") as f:f.write("\n".join(results))print("识别完成,结果已保存到 output.txt")if __name__ == "__main__":folder = input("请输入图片所在文件夹路径: ")main(folder)#这个脚本有一点特殊,是按照图片的修改时间扫码排序输出内容的,因为最开始看的另外一个博主的[WP](http://www.andynoel.xyz/?p=601)#不过不影响下一步操作

将输出内容进行词频分析统计,发现所有字符的频率都是 16 的倍数,所以推断二维码有重复的堆放,

![](D:\Pictures\Screenshots\屏幕截图 2025-02-27 223029.png)

所以我就让 chat 写了个算图片哈希的脚本嘻嘻,删掉相同的冗余的哈希的图片。

import os
import hashlib
from PIL import Image# 计算图片文件的哈希值
def get_image_hash(image_path):hash_md5 = hashlib.md5()  # 使用MD5哈希算法try:with open(image_path, "rb") as f:while chunk := f.read(8192):  # 每次读取8192字节hash_md5.update(chunk)return hash_md5.hexdigest()except Exception as e:print(f"Error processing file {image_path}: {e}")return None# 删除重复的图片文件
def remove_duplicates(folder_path):seen_hashes = set()  # 用来存储已见过的哈希值for root, _, files in os.walk(folder_path):for file in files:# 只处理图片文件if file.lower().endswith(('jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff')):file_path = os.path.join(root, file)file_hash = get_image_hash(file_path)if file_hash is None:continue  # 如果计算哈希时出现错误,则跳过该文件if file_hash in seen_hashes:# 如果哈希值重复,删除该文件D:\exercise\NSS\qrssssssss\qrssssssssprint(f"Duplicate found, removing: {file_path}")os.remove(file_path)else:seen_hashes.add(file_hash)if __name__ == "__main__":folder_path = input("Enter the folder path to check for duplicate images: ")if os.path.isdir(folder_path):remove_duplicates(folder_path)print("Duplicate images removal completed.")else:print("The provided path is not a valid directory.")

然后就根据提示 LMQH,二维码的纠错等级+掩码版本的大小来排列二维码内容,具体是纠错等级->掩码版本大小,手撕得到 flag(之后学会写脚本了再进阶一下吧嘿嘿_

二维码知识借鉴QRcode

qrssssssss

同上思路,也可解得。

不过还可以在这个基础上换一种去除冗余数据的方法,也是一开始就是利用哈希删掉冗余图片,再去爆破。

耶~收工

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/890891.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

昆明理工大学25年材料工程考研预计调剂158人

--材测材料物理与化学材料学材料表征与分析材料工程F001现代材料测试技术F002材料成型技术基础864材料科学基础

7.4.1 Inception 块

白色的\(1\times 1\)卷积层是用来降低通道数的,蓝色的卷积层是用来学习特征的 大致解释一下这些数字是怎么分配的。现在我们的通道数是\(192\),于是我们假设最后输出的通道数是\(256\);考虑这些通道如何分配:我们知道\(3\times 3\)的卷积层性质很好(参数不算太多,学习能力…

Windows安装ollama运行deep seek R1模型+Page Assist浏览器插件本地使用

在Windows系统上安装Ollama并运行DeepSeek R1模型,同时结合Page Assist浏览器插件实现本地使用,可以按照以下步骤操作: 一、安装Ollama 下载Ollama: 访问Ollama官方网站,下载适用于Windows的版本。安装路径默认在c盘创建符号链接 原路径:C:\Users\18368\.ollama目标路径:…

上海海洋大学软件开发与创新课程设计作业

我给上学期其他同学的大作业添加了一些功能,已有的功能只有用户注册并填写账号密码,然后点击登录按钮成功登录 现在添加的新功能如下: 1,添加了一个真正可以选课的页面,添加了一些课程选项 2,可以存储用户选课的历史和方案 3,添加了一个管理员页面用于查看用户账号密码以…

Qwen2.5-0.5B siglip 预训练 / 微调实验

前言视频 | 仓库跟着教程做的,记录学习过程。 环境双卡 3090 24G CUDA 12.2 transformers 4.49概述 通过在 Qwen2.5-0.5B 和 siglip 之间训练一个中间层构造 VLM。作者提到首次微调时,只冻结了视觉模型的参数,导致阶梯状的 loss 曲线,即发生过拟合。应冻结文本和视觉模型的…

2025.2.27(Java的输出换行)

如图输出println,这个ln相当于输出完后自动换一次行。如图输出print,去掉ln不换行。

优化职工信息系统文件读写错误

该系统取自于大一时期的一个同班同学的期末大作业,该职工信息系统分别实现了职工信息的增删改查,以及计算职工的总工资和平均工资等功能。但是在编写了该系统之后,出现了一些问题,其中一个文件读写的问题我觉得需要进行改进,这个代码不能自己创建文本文档在指定的文件夹,…

PL端DDR4的MIG IP核配置及example design分析(个人记录)

第一种配置方法如下。按最高2666MHz配置,这边输入的参考时钟看个人板卡情况,我这边输入是200MHz。第二种配置方法如下。按2400MHz配置(需要换芯片型号),这边输入的参考时钟看个人板卡情况,我这边输入是200MHz。这边是输入时钟设置及输出时钟设置。我这边输入是差分时钟,…

Linux上部署deepseek-r1:7b模型

通过ollama在debian上安装部署deepseek-r1:7b模型。一、安装ollama框架 访问 ollama 官网,点击下载,选择 Linux,复制安装命令执行即可。二、下载并运行模型 选择 deepseek:7b 模型,复制安装命令执行即可。 (这里的模型参数大小,可根据自己的显存大小选择,可简单安装 0.5b…

LVI_SAM虚拟机安装复现(二)

0. 前言 前一篇文章里面,已经完成了 Ubuntu 18.04 和 ROS Melodic 的安装。 还没有安装好的读者,可以回去看这一篇文章。 前情概要: LVI_SAM虚拟机安装复现(一) 本文主要记录了GTSAM源码编译安装过程中经历的坑 警告:并非从零开始零基础教你安装 GTSAM 哦 GTSAM是一个开源…

逆向软件设计—网上购书结账系统

一、作业要求找一个已有的项目(同学、高年级同学、网络下载),阅读分析,找出软件尚存的缺陷, 改进其软件做二次开发,并将这个过程整理成一份博客。 二、原项目介绍 本次课程设计我逆向开发的软件是一个使用c++编写的网上购书结账系统,原作者是22软工2班的熊知宇学长,学号…

学生管理系统二次开发与优化实践

在软件开发中,对现有项目进行优化和二次开发是一种常见的任务。本次实验中,我选择了一个基于C++开发的学生管理系统作为优化对象。该系统实现了学生信息的增删改查功能,并支持学号排序和模糊查找等功能。通过分析原项目,我发现了几个可以改进的地方,并对系统进行了优化。以…