全程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.mzph.cn/news/894313.shtml

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

相关文章

解决Django非ORM模型提示初始化request问题

提问 Django在DRF时候自定义显示一些非model的字段提示TypeError: Field.__init__() got an unexpected keyword argument request 解答1 错误提示 TypeError: Field.__init__() got an unexpected keyword argument request 显示在创建序列化器实例时,传递了一个…

pytorch实现简单的情感分析算法

人工智能例子汇总:AI常见的算法和例子-CSDN博客 在PyTorch中实现中文情感分析算法通常涉及以下几个步骤:数据预处理、模型定义、训练和评估。下面是一个简单的实现示例,使用LSTM模型进行中文情感分析。 1. 数据预处理 首先,我…

【C语言指针】指针和函数

文章目录 一、前言二、指针函数2.1 概念2.2 定义2.3 具体例子 三、函数指针3.1 概念3.2 定义3.3 具体例子3.4 回调函数3.4.1 概念3.4.2 例子13.4.3 例子2 四、函数指针数组4.1 概念4.2 定义4.3 具体例子 五、函数指针数组的指针5.1 概念5.2 定义5.3 具体例子 一、前言 关于指针…

初识c语言(关键字)

前言: 注意: 变量的名称不能是关键字 变量的命名: 1、有意义 int age; flat salary; 2、名字必须是字母、数字、下划线组成,不能有特殊字符, 同时不能以数字开头 3、变量的命名不能是关键字 内容: …

FFmpeg(7.1版本)编译:Ubuntu18.04交叉编译到ARM

一、本地编译与交叉编译 1.本地编译 ① 本地编译:指的是在目标系统上进行编译的过程 , 生成的可执行文件和函数库只能在目标系统中使用。 如 : 在 Ubuntu中,本地编译的可执行文件只能在Ubuntu 系统中执行 , 无法在 Windows / Mac / Android / iOS 系统中使用 ; 在 Ubuntu…

对比DeepSeek、ChatGPT和Kimi的学术写作撰写引言能力

引言 引言部分引入研究主题,明确研究背景、问题陈述,并提出研究的目的和重要性,最后,概述研究方法和论文结构。 下面我们使用DeepSeek、ChatGPT4以及Kimi辅助引言撰写。 提示词: 你现在是一名[计算机理论专家]&#…

LabVIEW微位移平台位移控制系统

本文介绍了基于LabVIEW的微位移平台位移控制系统的研究。通过设计一个闭环控制系统,针对微位移平台的通信驱动问题进行了解决,并提出了一种LabVIEW的应用方案,用于监控和控制微位移平台的位移,从而提高系统的精度和稳定性。 项目背…

javaEE-6.网络原理-http

目录 什么是http? http的工作原理: 抓包工具 fiddler的使用 HTTP请求数据: 1.首行:​编辑 2.请求头(header) 3.空行: 4.正文(body) HTTP响应数据 1.首行:​编辑 2.响应头 3.空行: 4.响应正文…

开启 AI 学习之旅:从入门到精通

最近 AI 真的超火,不管是工作还是生活里,到处都能看到它的身影。好多小伙伴都跑来问我,到底该怎么学 AI 呢?今天我就把自己学习 AI 的经验和心得分享出来,希望能帮到想踏入 AI 领域的朋友们! 一、学习内容…

【JAVA基础】双亲委派

双亲委派可以简单理解为, 当收到加载请求时, 会依次向上加载 ; 只有当父类加载器无法完成加载请求时,子类加载器才会尝试自己去加载。 工作原理 类加载请求传递:当应用程序需要加载一个类时,比如通过ClassLoader.loadClass()方法&#xff0…

嵌入式经典面试题之操作系统(一)

文章目录 1 请你说说常用的Linux命令有哪些?2 在linux中如何创建一个新的目录?3 Linux中查看进程运行状态的指令、tar解压文件的参数。4 在linux中,文件权限如何修改?5 怎样以root权限运行某个程序?6 在linux里如何查看…

排查定位jar包大文件

解压 JAR 包: mkdir jar_contents unzip your-jar-file.jar -d jar_contents统计各文件大小: du -ah jar_contents | sort -rh | head -n 20这会列出 JAR 包中最大的文件或目录,方便你定位大文件。 方法 2:使用 jar 工具查看文件…

OpenCV:闭运算

目录 1. 简述 2. 用膨胀和腐蚀实现闭运算 2.1 代码示例 2.2 运行结果 3. 闭运算接口 3.1 参数详解 3.2 代码示例 3.3 运行结果 4. 闭运算的应用场景 5. 注意事项 相关阅读 OpenCV:图像的腐蚀与膨胀-CSDN博客 OpenCV:开运算-CSDN博客 1. 简述…

Python-基于PyQt5,pdf2docx,pathlib的PDF转Word工具

前言:日常生活中,我们常常会跟WPS Office打交道。作表格,写报告,写PPT......可以说,我们的生活已经离不开WPS Office了。与此同时,我们在这个过程中也会遇到各种各样的技术阻碍,例如部分软件的PDF转Word需要收取额外费用等。那么,可不可以自己开发一个小工具来实现PDF转…

C++中的类与对象(下)

上一节我们将类与对象中一个比较难的也是一个比较重要的模块学习了,在这节主要是一些细节上的补充。 文章目录 目录 前言 一、初始化列表 初始化列表的性质 初始化列表的总结 二、类型转换 C中的类型转换 三、static成员 static的特点 一般情况下构造函数调用顺序&a…

rust跨平台调用动态库

动态库在不同的操作系统&#xff0c;扩展名是不一样的&#xff0c;所以要做处理: static LIB: Lazy<Mutex<Option<Library>>> Lazy::new(|| Mutex::new(None));type CreateFunc unsafe extern "C" fn(*const c_char, *const c_char) -> c_int…

四、jQuery笔记

(一)jQuery概述 jQuery本身是js的一个轻量级的库,封装了一个对象jQuery,jquery的所有语法都在jQuery对象中 浏览器不认识jquery,只渲染html、css和js代码,需要先导入jQuery文件,官网下载即可 jQuery中文说明文档:https://hemin.cn/jq/ (二)jQuery要点 1、jQuery对象 …

Versal - 基础4(VD100+Versal IBERT)

1. 简介 在之前的一篇博文中&#xff0c;我分享了在 Zynq Ultrascale MPSoC 中使用 IBERT 的方法。 《Vivado - 集成眼图分析仪 Serial I/O IBERT 误码率_vivado ibert-CSDN博客》 本文进一步探讨 Versal 中使用 IBERT 的方法。 2. 硬件平台 芯片&#xff1a;XCVE2302-SF…

《HelloGitHub》第 106 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

英语语法 第一天

I’m a student. 我是个学生 我是个新东方的学生 I’m a student of New Oriental School 我爱你 I love you 我在心中爱你 I love you in my heart. 这是一朵花 This is a flower 这是一朵在公园里的花 This is a flower in the park.(修饰部分在修饰词后面) 主干…