Bugku MISC做题笔记

news2024/9/22 19:31:51

简单套娃DX

这一题需要对png图片的结构有所了解。详细可参考https://www.w3.org/TR/png/

幸好每一张图片只有一个错误,逐步调试,就可以发现所有错误,修正即可。具体错误参看python程序中的注释:

import  os

src_dir = '.\\XD\\'
des_dir = '.\\out\\'
src_files = os.listdir(src_dir)
des_files = os.listdir(des_dir)

f_count={0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0}
for fname in src_files:
    if fname in des_files:
        continue
    with open(src_dir+fname,'rb') as f:
        srcdata = f.read()
    #丢掉了文件头标识
    if srcdata[1:4] != b'PNG':
        desdata = 0x89504E470D0A1A0A.to_bytes(8,'big') + srcdata
        f_count[1] += 1

    #IHDR块长度和标识码被清零
    elif srcdata[8:0x10] == 0x0000000000000000.to_bytes(8, 'big'):  
        desdata = srcdata[:8] + 0x0000000D49484452.to_bytes(8,'big') + srcdata[16:]
        f_count[2] += 1

    #IHDR宽高值不对
    elif srcdata[0xc:0x10] == b'IHDR' and srcdata[0x10:0x18] != 0x0000000500000005.to_bytes(8,'big'):  
        desdata = srcdata[:0x10] +0x5.to_bytes(4,'big') + 0x5.to_bytes(4,'big') + srcdata[0x18:]
        f_count[3] += 1

    #IDAT块长度被清零
    elif srcdata[0x21:0x29] == 0x00000000.to_bytes(4, 'big')+b'IDAT':  
        if srcdata.index(b'eXIf') >= 0:
            IDAT_len = srcdata.index(b'eXIf') - 0x29 - 4 -4
        else:
            print('[!] Error!! %s'%fname)
            break
        desdata = srcdata[:0x21] + IDAT_len.to_bytes(4,'big') + srcdata[0x25:]
        f_count[4] += 1
    
    #IDAT块标识被删除
    elif srcdata[0xc:0x10] == b'IHDR' and srcdata[0x25:0x29] != b'IDAT':  
        desdata = srcdata[:0x25] + b'IDAT' + srcdata[0x25:]
        f_count[5] += 1

    #IHDR头的颜色类型错误
    elif srcdata[0xC:0x10] == b'IHDR' and srcdata[0x18:0x1A] != 0x0100.to_bytes(2,'big'): 
        desdata = srcdata[:0x18] + 0x0100.to_bytes(2,'big') + srcdata[0x1A:]
        f_count[6] += 1
    
    #IHDR块被放到了倒数第二块,IDAT变为第一块
    elif srcdata[0xc:0x10] == b'IDAT':  
        IHDR_block_begin = srcdata.index(b'IHDR') - 4 
        IHDR_block = srcdata[IHDR_block_begin:IHDR_block_begin+25]
        desdata = srcdata[:8] + IHDR_block + srcdata[8:IHDR_block_begin] + srcdata[IHDR_block_begin+25:]
        f_count[7] += 1
    else:
        desdata = srcdata
        f_count[0] += 1
    with open(des_dir+fname,'wb') as f:
        f.write(desdata)
print(f_count)

图片修正以后,观察图片内容,应该是二维码碎片。查看每个图片的exif信息,发现数据:

import os
from PIL import Image

basedir = '.\\out\\'
list = []
for fname in os.listdir(basedir):
    image = Image.open(basedir+fname)
    exif = image.getexif()
    list.append([ int(exif[282]),int(exif[283]) ])
    image.close()
list.sort(key=lambda x: [x[0], x[1]])
print(list)

#[[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [0, 6], [0, 7], [0, 8], [0, 9], [0, 10], [0, 11], [0, 12], [0, 13], [0, 14], [0, 15], [0, 16], [0, 17], [0, 18], [0, 19], 
#...
# [449, 0], [449, 1], [449, 2], [449, 3], [449, 4], [449, 5], [449, 6], [449, 7], [449, 8], [449, 9], [449, 10], [449, 11], [449, 12], [449, 13], [449, 14], [449, 15], [449, 16], [449, 17], [449, 18], [449, 19]]

因此这些应该是每个图片的坐标,依据这些坐标进行拼接图片,得到flag:

import os
from PIL import Image
basedir = '.\\out\\'
list = []
newimg = Image.new('RGB',(450*5,20*5),(255,255,255)) #白底
for fname in os.listdir(basedir):
    image = Image.open(basedir+fname)
    exif = image.getexif()
    x,y = int(exif[282])*5,int(exif[283])*5
    newimg.paste(image,(x,y,x+5,y+5))   
    image.close()
newimg.save('new.png')

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7-Eleven用工数字化:零售哲学下的人效管理实践

2014年,一本《零售的哲学》在中国掀起热潮,揭示了7-Eleven便利店的新零售坪效管理秘诀。而对大部分零售企业来说,劳动力效率是坪效背后的主要支柱。近期,国内领先的劳动力管理云服务提供商盖雅工场发布了《聚焦人效、重塑组织&…

香港理工大学主办!2024年第八届电力能源系统与应用国际会议(ICoPESA 2024)即将召开!

2024年第八届电力能源系统与应用国际会议(ICoPESA 2024) 2024年6月24日-26日 中国香港 ICoPESA 2024-Hong Kong (icpesa.org)https://icpesa.org/index.html 会议组织单位 会议出版及检索: 会议录用并注册的论文将由IEEE出版,…

聚酰亚胺PI材料难于粘接,用什么胶水粘接?那么让我们先一步步的从认识它开始(一)

聚酰亚胺PI的基本概念 聚酰亚胺(Polyimide,简称PI)是一种重要的高性能聚合物材料。是指主链上含有酰亚胺环的一类聚合物,是综合性能最佳的有机高分子材料之一。它具有最高的阻燃等级(UL-94),以及…

OpenCV 将rgb图像转化成字符图像

将RGB图像转换成字符图像&#xff08;ASCII art&#xff09;通常涉及到灰度化、降采样、映射字符等一系列步骤。以下是一个简化的OpenCVC实现示例&#xff1a; #include <opencv2/opencv.hpp> #include <iostream> #include <string>// 字符映射表&#xff…

MySQL—redo log、undo log以及MVCC

MySQL—redo log、undo log以及MVCC 首先回忆一下MySQL事务的四大特性&#xff1a;ACID&#xff0c;即原子性、一致性、隔离性和持久性。其中原子性、一致性、持久性实际上是由InnoDB中的两份日志保证的&#xff0c;一份是redo log日志&#xff0c;一份是undo log日志&#xff…

国产Copilot--通义灵码安装教程

文章目录 在 Visual Studio Code 中安装通义灵码步骤1步骤2步骤3步骤4 参考 在 Visual Studio Code 中安装通义灵码 通义灵码&#xff0c;是一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解…

LLM - 大语言模型(LLM) 概述

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/136617643 大语言模型(LLM, Large Language Model)的发展和应用是一个非常广泛的领域&#xff0c;涉及从早期的统计模型到现代基于深度学…

获取淘宝商品详情API数据指南(item_get-获得淘宝商品详情)

获取淘宝商品详情API数据是一个复杂的过程&#xff0c;涉及到多个步骤和可能的权限问题。以下是一个基本的指南&#xff0c;帮助你了解如何使用item_get接口获取淘宝商品详情。 1. 注册淘宝开放平台账号 首先&#xff0c;你需要在淘宝开放平台注册一个账号。这是获取API权限和…

【Java 并发】AbstractQueuedSynchronizer

1 AQS 简介 在同步组件的实现中, AQS 是核心部分, 同步组件的实现者通过使用 AQS 提供的模板方法实现同步组件语义。 AQS 则实现了对同步状态的管理, 以及对阻塞线程进行排队, 等待通知等一些底层的实现处理。 AQS 的核心也包括了这些方面: 同步队列, 独占式锁的获取和释放, 共…

数据结构之链式二叉树续

1.获取叶节点个数 获取叶子结点个数&#xff0c;我们这里也用递归的方法 利用分治思想去解决这个问题 ●代码思想&#xff1a; 1. 当遇到空树或者遇到空的节点时&#xff0c;也就是说这是的叶子为NULL&#xff0c;这是我们返回0 2. 当遇到左节点或者右节点为空&#xff0c…

精酿啤酒与咖喱饭的异国风味

当醇厚的Fendi Club啤酒与香浓的咖喱饭相遇&#xff0c;一场味蕾的异国之旅就此展开。Fendi Club啤酒以其与众不同的麦香和细腻的泡沫&#xff0c;为咖喱饭增添了别样的风味&#xff0c;而咖喱饭的香辣与丰富口感&#xff0c;又为啤酒带来了更多的层次感。 Fendi Club啤酒&…

docker的常用指令

docker的常用指令 从docker镜像仓库&#xff0c;搜索所有和mysql有关的镜像 docker search mysql 从docker仓库拉取mysql docker pull mysql这里的mysql是指使用search搜索出来的所有容器的NAME 如果和我一样遇到以下问题&#xff1a; 我可以登录阿里云的官网&#xff0c;找…

点成分享 | 了解您的健康指标:血细胞沉降率(ESR)

一、背景介绍 当我们在体检或进行临床血液检验时&#xff0c;时常会在检验单上看到这样一个指标&#xff1a;ESR。 有时检验单上只有一个简单的箭头&#xff0c;那么这个结果代表什么含义呢&#xff1f;这个指标又能如何反映我们的健康状况呢&#xff1f; 今天点成生物就带大…

Mysql 无法启动,mysql-bin.日志丢失删除处理

在linux操作系统中&#xff0c;当mysql无法启动时候&#xff0c;先看日志 2024-03-15T05:20:16.352075Z 0 [Warning] [MY-000081] [Server] option max_allowed_packet: unsigned value 107374182400 adjusted to 1073741824. 2024-03-15T05:20:16.352156Z 0 [Warning] [MY-010…

三种方式使用纯 CSS 实现星级评分

本文介绍三种使用纯 CSS 实现星级评分的方式。每种都值得细品一番~ 五角星取自 Element Plus 的 svg 资源 <svg xmlns"http://www.w3.org/2000/svg" viewBox"0 0 1024 1024" style""><pathfill"currentColor"d"M283.84 …

ctfshow-XXE(web373-web378)

目录 XXE&#xff08;外部实体注入攻击&#xff09; web373 web374 web375 web376 web377 web378 知识点 XXE&#xff08;外部实体注入攻击&#xff09; XXE这几关有个前提flag在根目录下文件名为flag web373 <?php error_reporting(0); libxml_disable_entity_…

定制红酒:定制流程中的专业建议与指导,帮助客户做出理想选择

在云仓酒庄洒派&#xff0c;云仓酒庄洒派深知消费者在定制红酒时可能会面临诸多选择和困惑。因此&#xff0c;云仓酒庄洒派提供专业的建议和指导&#xff0c;帮助消费者在定制流程中做出理想选择。 云仓酒庄洒派的专业团队会为消费者提供红酒品种和产区的举荐。云仓酒庄洒派会根…

基于udp协议的网络通信(windows客户端版+简易聊天室版),重定向到终端

目录 和windows通信 引入 思路 WSADATA 代码 运行情况 简单的聊天室 思路 重定向 代码 terminal.hpp -- 重定向函数 服务端 客户端 运行情况 和windows通信 引入 linux和windows都需要联网,虽然他们系统设计不同,但网络部分一定是相同的,所以套接字也是一样的 这…

Diffblue生成单元测试

什么是Diffblue Diffblue Cover 是一个强化学习 AI 平台&#xff0c;可自动编写全面的、类似人类的 Java 单元测试&#xff0c;从而节省开发人员时间、提高测试覆盖率并降低回归风险。Cover 以 IntelliJ IDE 插件&#xff08;Cover Plugin&#xff09;、CLI 应用程序&#xff…

中等职业学校人工智能技术与应用(710212)专业解决方案

一、专业背景 1.1人工智能确立为国家战略 近年来&#xff0c;人工智能技术取得了显著进展&#xff0c;不仅在理论层面有所突破&#xff0c;更在实际应用中展现出强大的潜力和价值。其发展趋势日益明显&#xff0c;展现出多方面的特点。“深度学习”与“大数据”的结合成为当前…