MISC-吹着贝斯扫二维码
题目
解压附件,有36个文件和一个压缩包,压缩包带密码和备注

分析
文件类型
随便打开一个不明文件,是jpg图片啊(FF D8 FF)

改一个试试,有一个小块二维码

后面的估计是是二维码碎片,脚本统一改一下
# coding=utf-8 import os #将无后缀的文件加上.jpg
dir_list = os.listdir('./')
#print(dir_list)
for file in dir_list:
if '.' not in file:
# print(file)
os.rename(file, file+'.jpg')
果不其然,就是二维码碎片了,一共36张

图片拼接
可以手动ps拼一下图,也就36张嘛
但是本人比较懒,不想干看起来不是很聪明的行为
于是学习了一下图片拼接的脚本
分析一下文件原始数据可以发现,最后告诉我们的序号,比如这张是第34张

思路:
- 将文件按顺序排列成一个列表 all_path
- 定义横纵图片个数,以及排列方式(横到纵)
脚本如下,虽然成功了,但不大简洁优化,欢迎大佬帮忙指点一二
# coding=utf-8
# python2 import os
from PIL import Image #图片压缩后的大小
width_i = 134
height_i = 130 #每行每列显示图片数量
row_max = 6
line_max = 6 all_path = list()
num = 0
pic_max = line_max * row_max #文件夹路径
dir_name = r"./" #获取文件夹下文件名的列表
dir_list = os.listdir('./') #将文件列表重新排序(按文件原始数据末尾的数字)
for i in range(36,0,-1):
# print(i)
for file in dir_list:
if '.jpg' in file:
f=open(file ,'rb')
n1 = f.read()
n2 = n1[-2:]
# print()
if i > 9:
if str(i) in n2:
# all_path.append(os.path.join(file))
all_path.insert(0,os.path.join(file))
# print(all_path)
break
else:
if 'd9' in n1.encode('hex')[-4:] and str(i) in n2:
# print(file)
all_path.insert(0,os.path.join(file))
break
print(all_path) toImage = Image.new('RGBA',(width_i*line_max,height_i*row_max)) #拼接图片
for i in range(row_max):
for j in range(line_max):
# 每次打开图片绝对路路径列表的第一张图片
pic_fole_head = Image.open(all_path[num])
# 获取图片的尺寸
wihth,height = pic_fole_head.size
# 按照指定的尺寸,给图片重新赋值,<PIL.Image.Image image mode=RGB size=200x200 at 0x127B7978>
tmppic = pic_fole_head.resize((width_i, height_i))
# 计算每个图片的左上角的坐标点(0, 0),(0, 200),(0, 400),(200, 0),(200, 200)。。。。(400, 400)
loc = (int(j % line_max * width_i), int(i % line_max * height_i))
print(loc)
# print("第{}张图的存放位置".format(num),loc)
toImage.paste(tmppic, loc)
num = num + 1 if num >= len(all_path):
break
if num >= pic_max:
break # print(toImage.size)
toImage.save('merged.png')
拼接结果如下,还算整齐:

密码
flag.zip里的备注:
GNATOMJVIQZUKNJXGRCTGNRTGI3EMNZTGNBTKRJWGI2UIMRRGNBDEQZWGI3DKMSFGNCDMRJTII3TMNBQGM4TERRTGEZTOMRXGQYDGOBWGI2DCNBY
二维码扫描结果:
BASE Family Bucket ??? 85->64->85->13->16->32

意思应该是 base全家桶?85->64->85->13->16->32加密
那我们就倒过来解一下,这里13是Rot13吧,似乎没见过base13
strings:
GNATOMJVIQZUKNJXGRCTGNRTGI3EMNZTGNBTKRJWGI2UIMRRGNBDEQZWGI3DKMSFGNCDMRJTII3TMNBQGM4TERRTGEZTOMRXGQYDGOBWGI2DCNBY
base32_decode:
3A715D3E574E36326F733C5E625D213B2C62652E3D6E3B7640392F3137274038624148
base16_decode:
:q]>WN62os<^b]!;,be.=n;v@9/17'@8bAH
Rot13_decode:
:d]>JA62bf<^o]!;,or.=a;i@9/17'@8oNU
base85_decode:
PCtvdWU4VFJnQUByYy4mK1lraTA=
base64_decode:
<+oue8TRgA@rc.&+Yki0
base85_decode:
ThisIsSecret!233
解压一下,flag{Qr_Is_MeAn1nGfuL}
MISC-吹着贝斯扫二维码的更多相关文章
- 网页授权——扫二维码获取openid
最近做微信公众平台开发项目时遇到这样一个功能需求:生成一个特定url的二维码,用户扫描二维码后跳转到这个url指定的页面,并在这个页面获得用户的openid.这个功能主要涉及到两方面的技术:生成二维码 ...
- 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo
有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...
- 扫二维码下载apk并统计被扫描次数(及微信屏蔽下载解决方案)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5395715.html 需求:想让用户扫描一个二维码就能下载APP,并统计被扫描次数. 两种实现方法: 1.一 ...
- android DialogFragment 实现Dialog展示扫二维码图片展示
近期开发项目,做个按钮点击弹出展示微信二维码关注微信公众号的展示框,于是想到DialogFragment,期间对Dialog的title的底框字体颜色做出相关设置,记录如下: 下面是 DialogFr ...
- vue 实现 扫二维码 功能
前段时间一直在研究,如何通过 vue 调用 相机 实现 扫一扫的功能,但是查看文档发现,需要获取 getUserMedia 的属性值,但存在兼容性问题. 退而求其次,通过 h5plus 来实现. 1. ...
- 扫二维码登录实现原理,php版
基础的逻辑图就是这样,但是实际情况还是有几种可能 比如QQ登录,微信登录,微博登录,基本设计都差不多,根据实际情况会有一些差异 问题是,如果设计合理的接口在保证数据的安全性和快速性 设计到的技术不复杂 ...
- uniapp 扫二维码跳转
在h5和wxapp中 生成qrcode的组件 https://ext.dcloud.net.cn/plugin?id=39 wx小程序扫二位码文档 生成链接时 computed: { ...mapSt ...
- Android | 教你如何开发扫二维码功能
前言 最近要做一个停车场扫码收费的app,在网上搜了一圈,首先接触到了ZXing,上手试了下,集成过程不复杂,但是感觉效果欠佳,比如距离稍微远点儿就扫不出来了,另外角度对的不好,反光或者光线比较暗 ...
- ios ZBar扫二维码奇奇怪怪的错误
Undefined symbols for architecture armv7: "_CVPixelBufferGetHeight", referenced from: -[ZB ...
随机推荐
- p5.js基本[一] T型高斯分布的小星星
样例 <script src="./p5/p5.js"></script> <script> function setup() { // 只写一 ...
- 面试官:你说你精通源码,那你知道ArrayList 源码的设计思路吗?
Arraylist源码分析 ArrayList 我们几乎每天都会使用到,但是通常情况下我们只是知道如何去使用,至于其内部是怎么实现的我们不关心,但是有些时候面试官就喜欢问与ArrayList 的源码相 ...
- pandas 对时间索引进行分割
截取最近1个月时间,截取最近一段时间,进行统计分析 df.loc["2016-01-05":"2016-02-05",:].tail() 在index为有序数据 ...
- CorelDRAW X7 X8 2017 2018是什么关系?
从CorelDRAW 2017版本开始我们叫习惯了的X几系列的CorelDRAW毅然决然的就换了称呼,所以有时候很多朋友对于软件版本,经常会傻傻分不清,还有人认为X8版本比2017版本高,究竟为什么会 ...
- 从Guarded Block来看Java中的wait和notify方法
目录 预备知识 概览 线程同步 wait()方法 wait() wait(long timeout) wait(long timeout, int nanos) notify() & noti ...
- 浅谈 van Emde Boas 树——从 u 到 log log u 的蜕变
本文参考算法导论完成. 模板题在此 QwQ 优化的过程比较长,还请读者耐心阅读,认真理解. 最初的想法 我会暴力! 用一个 \(size\) 数组维护每个元素出现的次数. 不细讲,时间复杂度 \(O( ...
- 第四代Express框架koa简介
目录 简介 koa和express koa使用介绍 中间件的级联关系 koa的构造函数 启动http server 自定义中间件 异常处理 简介 熟悉Spring MVC的朋友应该都清楚Spring ...
- go语言数据类型值--整型和浮点型
一.整型 1.整型的分类: 有符号整型: int8.int16.int32.int64 对应的无符号整型: uint8.uint16.uint32.uint64 uint就是我们熟知的byte类型,i ...
- 对称加密之---AES加密
工作中常会需要让数据传输前进行加密处理.这次用到的是AES加密.AES加密中,需要注意到坑还是挺多的.对AES也进行了一番了解,发现里面的东西真的是注意的太多了.今天只是整理了一种简单的加密格式,工作 ...
- 区块链学习7:超级账本项目Fabric中的背书、背书节点、背书策略、背书签名
☞ ░ 前往老猿Python博文目录 ░ 在Hyperledger Fabric区块链中,有背书节点进行背书,Hyperledger Fabric 使用背书策略来定义哪些节点需要执行交易. Hyper ...