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 ...
随机推荐
- Kubernetes 入门与安装部署
一.简介 参考:Kubernetes 官方文档.Kubernetes中文社区 | 中文文档 Kubernetes 是一个可移植的.可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自 ...
- python之对元组的初步了解
元组: 元组与列表类似但是又有不同,主要的不同就是元组属于不可变序列,一旦创建,任何方法都不可以修改元素. 元组使用小括号( )表示,这与列表不一样,列表是用方括号表示[ ]. a=('a','b') ...
- beef抓包简析
搭建完了beef就想简答的抓下包分析下 这是第一个包,追踪它 返回demo页面,并发现其中的脚本 window.location.protocol表示协议http, window.location.h ...
- js替换div里的内容
<!DOCTYPE html><html><head><meta charset="utf-8"><title>< ...
- bWAPP----Mail Header Injection (SMTP)
Mail Header Injection (SMTP) 本地没有搭环境,没法演示,附上转载的 https://www.acunetix.com/blog/articles/email-header- ...
- ①SpringCloud 实战:引入Eureka组件,完善服务治理
简介 Netflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心,用于提供服务发现功能.Spring Cloud Eureka 是 Spring Cloud Netf ...
- Hadoop大数据平台节点的动态增删
环境:CentOS 7.4 (1708 DVD) 工具:MobaXterm 一. 节点的动态增加 1. 为新增加的节点(主机)配置免密码登录.使用ssh-keygen和ssh-copy-id命令(详 ...
- 思维导图MindManager有新手引导功能吗
无论是对于初次使用Mindmanager思维导图软件的新手来说,还是对于有一定软件使用基础的进阶者来说,Mindmanager思维导图软件的帮助功能都能给予用户很大的指导作用. Mindmanager ...
- mongodb 副本集之入门篇
作者: 凹凸曼-军军 前言:mongodb 因为高性能.高可用性.支持分片等特性,作为非关系型数据库被大家广泛使用.其高可用性主要是体现在 mongodb 的副本集上面(可以简单理解为一主多从的集群) ...
- 5. Idea集成Git
5.1 引入本地安装的Git 5.2 本地库的初始化操作 5.3 本地库的基本操作 add与commit 控制台查看commit记录 查看Log 5.4 远程库的基本操作 远程库第一次pull到本地库 ...