全程Kali linux---CTFshow misc入门(25-37)

第二十五题:

提示:flag在图片下面。

直接检查CRC,检测到错误,就直接暴力破解。

暴力破解CRC的python代码。

import binascii
import struct

def brute_force_ihdr_crc(filename):
    # 读取文件二进制数据
    with open(filename, 'rb') as f:
        data = f.read()
    
    # 定位 IHDR 块的位置(跳过PNG签名和长度字段)
    ihdr_start = 8 + 4  # 8字节签名 + 4字节长度字段
    ihdr_type = data[ihdr_start:ihdr_start+4]  # 应为 b'IHDR'
    if ihdr_type != b'IHDR':
        print("[-] IHDR chunk not found!")
        return
    
    # 提取原始宽高和其他参数(假设宽度和高度各占4字节)
    width_bytes = data[ihdr_start+4 : ihdr_start+8]   # 篡改后的宽度
    height_bytes = data[ihdr_start+8 : ihdr_start+12] # 篡改后的高度
    other_params = data[ihdr_start+12 : ihdr_start+17] # 后续5字节参数
    
    # 提取存储的 CRC 值(位于IHDR数据块末尾)
    stored_crc_bytes = data[ihdr_start+17 : ihdr_start+21]
    stored_crc = struct.unpack('>I', stored_crc_bytes)[0]  # 大端解析

    print(f"[*] 目标 CRC: {hex(stored_crc)}")
    print(f"[* 原始篡改尺寸: 宽度={struct.unpack('>I', width_bytes)[0]}, 高度={struct.unpack('>I', height_bytes)[0]}")

    # 遍历可能的宽高范围(根据实际情况调整范围)
    max_width = 2000  # 假设宽度最大可能到2000像素
    max_height = 2000 # 假设高度最大可能到2000像素
    print(f"[*] 开始暴力破解宽高范围: 1-{max_width} x 1-{max_height}...")

    for width in range(1, max_width + 1):
        for height in range(1, max_height + 1):
            # 构造 IHDR 数据块(类型码 + 宽高 + 其他参数)
            ihdr_data = b'IHDR' + struct.pack('>I', width) + struct.pack('>I', height) + other_params
            # 计算 CRC
            computed_crc = binascii.crc32(ihdr_data) & 0xFFFFFFFF
            if computed_crc == stored_crc:
                print(f"\n[+] 成功匹配!真实宽高: {width}x{height}")
                print(f"    CRC: {hex(computed_crc)}")
                return
    
    print("[-] 未找到匹配的宽高组合,请扩大范围或检查参数!")

if __name__ == '__main__':
    brute_force_ihdr_crc('misc26.png')  # 替换为你的文件名

ctfshow{494f611cc5842dd597f460874ce38f57}

第二十六题:

加上高度“ 25e ”得到ctfshow{94aef125e087a7ccf2e28e742efd704c}

第二十七题:

修改高度

ctfshow{5cc4f19eb01705b99bf41492430a1a14}

第二十八题:

修改高度后使用Stegsolve查看

ctfshow{59c8bc525426166b1c893fe12a387fd7}

第二十九题:

ctfshow{03ce5be6d60a4b3c7465ab9410801440}

第三十题:

提升说正确的宽度是950,我们在010里修改一下就可以得到flag了。

ctfshow{6db8536da312f6aeb42da2f45b5f213c}

第三十一题:

使用010打开复制FF3A结束 所有字节是487253 减去文件头53个字节后再除3(RGB 每个像素由3个字节),最后再除150(高度)得到1082.6666666666667,即宽带为1082。

ctfshow{fb09dcc9005fe3feeefb73646b55efd5}

第三十二题:

ctfshow{685082227bcf70d17d1b39a5c1195aa9}

第三十三题:

ctfshow{03070a10ec3a3282ba1e352f4e07b0a9}

第三十四题:

这是python的脚本 用来修改宽度,每修改一个就保存一个,在出来的结果中使用肉眼找到正确的图片

这种方法只能在win系统下使用,利用windows忽略crc检验码的特性来完成题目,kali系统下我目前找不到平替的方法。

import zlib
import struct
filename = "misc34.png"
with open(filename, 'rb') as f:
    all_b = f.read()
    #w = all_b[16:20]
    #h = all_b[20:24]
    for i in range(901,1200):
        name = str(i) + ".png"
        f1 = open(name,"wb")
        im = all_b[:16]+struct.pack('>i',i)+all_b[20:]
        f1.write(im)
        f1.close()

ctfshow{03e102077e3e5de9dd9c04aba16ef014}

第三十五题:

与三十四题一样,只能在win系统下使用,kali暂无平替方法。

import os
import binascii
import struct
bp = open("misc35.jpg", "rb").read()    
for i in range(901,1500):
    #根据题目给的图片格式修改后缀
    image_name='test/misc35/'+str(i)+'.jpg'
    image=open(image_name,"wb")
    #png
    #data=bp[:16] + struct.pack('>i', i)+bp[20:24]+bp[24:]#png
    #jpg
    data=bp[:157]+bp[157:159] + struct.pack('>h', i)+bp[161:]  #jpg
    image.write(data)
    image.close()

ctfshow{ca35201ca9ed607e5a68f44ef573fbc3}

第三十六题:

与三十四题一样,只能在win系统下使用,kali暂无平替方法。

import os
import binascii
import struct
bp = open("misc36.gif", "rb").read()    
#for i in range(901,1500):
for i in range(920,951):
    #根据题目给的图片格式修改后缀
    image_name='test/misc36/'+str(i)+'.jpg'
    image=open(image_name,"wb")
    #png
    #data=bp[:16] + struct.pack('>i', i)+bp[20:24]+bp[24:]#png
    #jpg
    #data=bp[:157]+bp[157:159] + struct.pack('>h', i)+bp[161:]  #jpg
    #gif
    data=bp[:38]+ struct.pack('>h', i)[::-1]+bp[40:42] +bp[42:]#gif
    image.write(data)
    image.close()

ctfshow{1ebf739f832906d60f57436b8179166f}

第三十七题:

第8、13、20、30、33个图都有部分flag,需要一个一个提取。

ctfshow{2056782cd57b13261dcbbe3d6eecda17}

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

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

相关文章

MySQL数据库(二)- SQL

目录 ​编辑 一 DDL (一 数据库操作 1 查询-数据库(所有/当前) 2 创建-数据库 3 删除-数据库 4 使用-数据库 (二 表操作 1 创建-表结构 2 查询-所有表结构名称 3 查询-表结构内容 4 查询-建表语句 5 添加-字段名数据类型 6 修改-字段数据类…

Android记事本App设计开发项目实战教程2025最新版Android Studio

平时上课录了个视频,从新建工程到打包Apk,从头做到尾,没有遗漏任何实现细节,欢迎学过Android基础的同学参加,如果你做过其他终端软件开发,也可以学习,快速上手Android基础开发。 Android记事本课…

STM32调试手段:重定向printf串口

引言 C语言中经常使用printf来输出调试信息,打印到屏幕。由于在单片机中没有屏幕,但是我们可以重定向printf,把数据打印到串口,从而在电脑端接收调试信息。这是除了debug外,另外一个非常有效的调试手段。 一、什么是pr…

如何使用 ChatBox AI 简化本地模型对话操作

部署模型请看上一篇帖子:本地部署DeepSeek教程(Mac版本)-CSDN博客 使用 ChatBox AI 简化本地模型对话操作: 打开 ChatBox AI 官网:Chatbox AI官网:办公学习的AI好助手,全平台AI客户端&#xf…

C++ Primer 自定义数据结构

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

鸿蒙物流项目之基础结构

目录: 1、项目结构2、三种包的区别和使用场景3、静态资源的导入4、颜色样式设置5、修改项目名称和图标6、静态包基础目录7、组件的抽离8、在功能模块包里面引用静态资源包的组件 1、项目结构 2、三种包的区别和使用场景 3、静态资源的导入 放在har包中,那…

RK3568使用QT搭建TCP服务器和客户端

文章目录 一、让RK3568开发板先连接上wifi二、客户端代码1. `widget.h` 文件2. `widget.cpp` 文件**详细讲解**1. **`Widget` 类构造函数 (`Widget::Widget`)**2. **UI 布局 (`setupUI`)**3. **连接按钮的槽函数 (`onConnectClicked`)**4. **发送消息按钮的槽函数 (`onSendMess…

Redis|前言

文章目录 什么是 Redis?Redis 主流功能与应用 什么是 Redis? Redis,Remote Dictionary Server(远程字典服务器)。Redis 是完全开源的,使用 ANSIC 语言编写,遵守 BSD 协议,是一个高性…

【算法设计与分析】实验8:分支限界—TSP问题

目录 一、实验目的 二、实验环境 三、实验内容 四、核心代码 五、记录与处理 六、思考与总结 七、完整报告和成果文件提取链接 一、实验目的 掌握分支界限求解问题的思想;针对不同的问题,能够利用分支界限法进行问题拆分和求解以及时间复杂度分析…

2025年大年初一篇,C#调用GPU并行计算推荐

C#调用GPU库的主要目的是利用GPU的并行计算能力,加速计算密集型任务,提高程序性能,支持大规模数据处理,优化资源利用,满足特定应用场景的需求,并提升用户体验。在需要处理大量并行数据或进行复杂计算的场景…

2025:影刀RPA使用新实践--CSDN博客下载

文章目录 一键CSDN博客下载器程序说明指导说明使用步骤 获取方法 一键CSDN博客下载器 程序说明 配置信息:CSDN账号(手机号/邮箱/用户名)、密码、博客文件类型支持markdown格式、html格式(默认值markdown格式)、博客保…

游戏引擎 Unity - Unity 启动(下载 Unity Editor、生成 Unity Personal Edition 许可证)

Unity Unity 首次发布于 2005 年,属于 Unity Technologies Unity 使用的开发技术有:C# Unity 的适用平台:PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域:开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…

【Postman接口测试】Postman的安装和使用

在软件测试领域,接口测试是保障软件质量的关键环节之一,而Postman作为一款功能强大且广受欢迎的接口测试工具,能够帮助测试人员高效地进行接口测试工作。本文将详细介绍Postman的安装和使用方法,让你快速上手这款工具。 一、Pos…

边缘检测算法(candy)

人工智能例子汇总:AI常见的算法和例子-CSDN博客 Canny 边缘检测的步骤 1. 灰度转换 如果输入的是彩色图像,则需要先转换为 灰度图像,因为边缘检测通常在单通道图像上进行。 2. 高斯滤波(Gaussian Blur) 由于边缘…

WinDBG查找C++句柄泄露

C代码(频繁点击About按钮导致Mutex句柄泄露) HANDLE _mutexHandle;LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {switch (message){case WM_COMMAND:{int wmId LOWORD(wParam);// 分析菜单选择:switch (wmId){c…

基于微信小程序的酒店管理系统设计与实现(源码+数据库+文档)

酒店管理小程序目录 目录 基于微信小程序的酒店管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1) 用户信息管理 (2) 酒店管理员管理 (3) 房间信息管理 2、小程序序会员模块的实现 (1)系统首页 &#xff…

大白话讲清楚embedding原理

Embedding(嵌入)是一种将高维数据(如单词、句子、图像等)映射到低维连续向量的技术,其核心目的是通过向量表示捕捉数据之间的语义或特征关系。以下从原理、方法和应用三个方面详细解释Embedding的工作原理。 一、Embe…

mysql中in和exists的区别?

大家好,我是锋哥。今天分享关于【mysql中in和exists的区别?】面试题。希望对大家有帮助; mysql中in和exists的区别? 在 MySQL 中,IN 和 EXISTS 都是用于子查询的操作符,但它们在执行原理和适用场景上有所不…

MySQL高可用

一、mysql路由 1.利用路由器的连接路由特性,用户可以编写应用程序来连接到路由器,并令路由器使用响应的路由策略来处理连接来使其连接到正确的mysql数据库服务器 2.mysql route的部署方式 需要在所有数据库主机之外再打开一台主机mysql-router 配置mysql…

DDD - 微服务架构模型_领域驱动设计(DDD)分层架构 vs 整洁架构(洋葱架构) vs 六边形架构(端口-适配器架构)

文章目录 引言1. 概述2. 领域驱动设计(DDD)分层架构模型2.1 DDD的核心概念2.2 DDD架构分层解析 3. 整洁架构:洋葱架构与依赖倒置3.1 整洁架构的核心思想3.2 整洁架构的层次结构 4. 六边形架构:解耦核心业务与外部系统4.1 六边形架…