图片隐写(一)

news2024/11/18 4:40:01

文件隐藏

binwalk

  • binwalk -e filename

foremost

  • foremost filename

steghide & stegseek

Install
  • sudo apt-get install steghide
  • stegseek
Use
  • steghide extract -sf filename -p password
  • time stegseek secret.file aaa.txt

dd

文本隐藏

  • 二进制文件末尾 or 文中(明文 & encode)
  • 属性
  • 010editor + 模板
  • xxd

WPS隐写

  • 背景色文字覆盖
  • 文字缩小
  • word隐藏文字
  • 文档加密

图片隐写

文件头

PNG

在这里插入图片描述

JPG
  • begin: FF D8
  • end: FF D9

在这里插入图片描述

BMP -----PS

在这里插入图片描述

GIF

在这里插入图片描述

考察形式
  • 虚假格式
  • 删除文件头
  • 文件逆写
  • exif信息 -----kali (exiftool filename)

拼图

ImageMagick

  • website:www.imagemagick.org
Use
  • magick.exe montage *.png -tile 宽x高 -geometry 被拼接图片宽高 输出文件位置

gaps

Install
git clone https://github.com/nemanja-m/gaps.git
cd gaps
pip install -r requirements.txt
sudo apt-get install python-tk
pip install -e .
Use
  • gaps --image=flag.jpg --generations=50 --population=180 --size=125 --verbose
  • gaps --image=图片名 --generations=拼图/迭代次数 --population=图片个数 --size=图片大小 --verbose实时显示

盲水印

  • 盲水印是一种特殊的图像水印,它利用光学技术将文字或图像的某一部分隐藏起来而形成特殊的水印

  • bwm

宽高隐藏

  • 一般来讲对于图像宽高不符的问题可以直接010修改
JPG

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VIe71GOJ-1684509046218)(\Pic\JPG1.png)]

BMP

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W9aHkycj-1684509046219)(\Pic\BMP1.png)]

png

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PJT5Qov1-1684509046219)(\Pic\PNG1.png)]

  • pngcheck

  • 在linux中,宽高有问题的png图片,也就是CRC校验错误的图片无法打开,会有如下报错

    shack.png  CRC error in chunk IHDR (computed 52e1fc4b, expected be917539)
    ERROR: shack.png
    
  • CRC32宽高爆破

import struct
import zlib

def hexStr2bytes(s):
    b = b""
    for i in range(0,len(s),2):
        temp = s[i:i+2]
        b +=struct.pack("B",int(temp,16))
    return b

str1="49484452"			# IHDR
str2="0806000000"
bytes1=hexStr2bytes(str1)
bytes2=hexStr2bytes(str2)
wid,hei = 1918,864		# W & h

crc32 = "0x7dc73f7f"	# CRC32

for w in range(wid,wid+2000):
    for h in range(hei,hei+2000):
        width = hex(w)[2:].rjust(8,'0')
        height = hex(h)[2:].rjust(8,'0')
        bytes_temp=hexStr2bytes(width+height)
        if eval(hex(zlib.crc32(bytes1+bytes_temp+bytes2))) == eval(crc32):
            print(hex(w),hex(h))

LSB

  • LSB
  • stegsolve.jar

GIF

单帧存放数据
  • 提取帧
  • Releases · evanolds/GIFFrame (github.com)
  • stegsolve
帧拼图
  • 提取帧 -----kali (convert)

  • 拼合 -----kali (montage)

  • GIF动态图片分解,多帧动态图分解成多张静态图片_图片工具网页版 (sioe.cn)

convert +adjoin glance.gif flag%03d.gif
convert +append flag*.gif res.gif

编码隐写

  • 对编码过程中无用的多余字节进行flag填充,从而打到隐藏数据的目的

Base64隐写

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r2xAnbyd-1684509046219)(C:\Users\27770\Desktop\meet\Pic\base64.png)]

  • 特征:加密解密后结果不同
def base64_stego(lines):
    alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    flag = ''
    temp = 0
    bit = 0
    for i in lines:
        if i[-1] != '=':			# 无等号
            continue
        elif i[-2] != '=':			# 单等号,取出倒数第二个字符的后两位
            bit += 2				
            temp = (temp << 2) + (alphabet.find(i[-2]) & 0x3)
        else:						# 双等号,取出倒数第三个字符的后四位
            bit += 4				
            temp = (temp << 4) + (alphabet.find(i[-3]) & 0xf)
        if bit == 8:				# 所取bit够一个字节,转为chr
            bit = 0
            flag += chr(temp)
            temp = 0
        elif bit > 8:				# 4+2+4,取8位,保存多余两位
            bit = 2
            flag += chr(temp >> 2)
            temp = temp & 0x3
    return flag

Else

像素提取
from PIL import Image
# open file
filename = 
image = Image.open(filename)
# select format
image = image.convert("RGB")
# Select coordinates
x = 
y = 
rgb = image.getpixel((x, y))
print(rgb)
01串转二维码
import qrcode
from PIL import Image

# 读取33*33的01矩阵
with open('matrix.txt', 'r') as f:
    matrix = [[int(x) for x in line.strip().split()] for line in f.readlines()]

# 根据01矩阵生成二维码图片
img = Image.new('RGB', (33, 33), color='white')
pixels = img.load()
for y in range(33):
    for x in range(33):
        if matrix[y][x] == 1:
            pixels[x, y] = (0, 0, 0)  # 黑色像素
# 保存二维码图片
img.save('qrcode.png')

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

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

相关文章

ffmpeg rtsp解析

一、 rtsp 协议说明 rtsp的协议层级 rtsp 属于应用层&#xff0c; 使用tcp传输&#xff0c;主要是传递服务器的一些信息&#xff0c;实现流连接。播放 暂停 销毁等控制 rtp 实现音视频数据包的发送&#xff0c;通过RTSP等协议的SDP信息协商好了RTP数据包的发送目的和传输方式…

UNIX网络编程卷一 学习笔记 第十四章 高级I/O函数

有3种方式可在涉及套接字的IO操作上设置超时方法&#xff1a; 1.调用alarm&#xff0c;它在指定超时期满时产生SIGALRM信号。此方法涉及信号处理&#xff0c;而信号处理在不同的实现上存在差异&#xff0c;且此方法可能干扰进程中已经执行过的alarm调用&#xff0c;可能使之前已…

【LLM系列之Tokenizer】如何科学地训练一个LLM分词器

1 背景与基础 1.1 为什么需要分词 对于人而言&#xff0c;在我们学会阅读之前&#xff0c;仍然可以理解语言。比如当你开始上学时&#xff0c;即使你不知道名词和动词之间的区别&#xff0c;但是你已经可以和你的同学交谈了&#xff0c;比如“我喜欢吃香蕉”&#xff0c;孩子…

vmware ubuntu突然无法联网的一种解决方案

记录一下vmware突然无法联网的一种解决方案。此法未必适用所有无法联网情形。Good Luck then. 今天使用vmware的ubuntu 18.04时&#xff0c;突然无法联网。Firefox在访问百度时显示“The proxy server is refusing connections”&#xff0c;随即检查了浏览器的proxy设置&#…

详解Jetpack Compose中的状态管理与使用

前言 引用一段官方描述&#xff0c;如下 由于 Compose 是声明式工具集&#xff0c;因此更新它的唯一方法是通过新参数调用同一可组合项。这些参数是界面状态的表现形式。每当状态更新时&#xff0c;都会发生重组。因此&#xff0c;TextField 不会像在基于 XML 的命令式视图中那…

头歌计算机组成原理实验—运算器设计(9)第9关:原码一位乘法器设计

第9关&#xff1a;原码一位乘法器设计 实验目的 学生掌握原码一位乘法运算的基本原理&#xff0c;熟练掌握 Logisim 寄存器电路的使用&#xff0c;能在 Logisim 平台中设计实现一个 8*8位的无符号数乘法器。 视频讲解 ####实验内容 在 alu.circ 文件中的原码一位乘法器子电…

分布式消息中间件RocketMQ概述

RocketMQ 概述 MQ概述 MQ简介 ​ MQ&#xff0c;Message Queue&#xff0c;是一种提供消息队列服务的中间件&#xff0c;也称为消息中间件&#xff0c;是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据。一般消息的体量不会很大。 MQ用途 在网络上上可以查…

React学习笔记五-props

此文章是本人在学习React的时候&#xff0c;写下的学习笔记&#xff0c;在此纪录和分享。此为第五篇&#xff0c;主要介绍react中的props。 目录 1.props的基本使用 2.props的批量传递 2.1展开运算符的复习 2.1.1数组中的展开运算符 2.1.2函数中的展开运算符 2.1.3构造字面…

部署图的画法

部署图画法 1.部署图 1.1含义 部署图是把软件制品装配到计算机节点以及配置软件环境的工作 软件部署包含环境部署和软件制品部署 1.2软件部署 软件部署通过部署图对软件进行建模 1.3部署图 部署图常见的有制品 节点 设备 运行环境和部署规范 1.4部署图关系 在UML&…

UnityVR--Managers--对象池2

目录 前言 基本结构 对象池代码 对象池管理器代码 使用 总结 前言 经过上一篇对象池1的了解&#xff0c;已经做到了使用Unity自带的ObjectPool进行内存优化。本篇自己构建一个对象池管理器&#xff08;Manager&#xff09;&#xff0c;实现对象池的创建、删除、加载资源…

机器视觉工程师很苦吗?年轻人不怕苦,就怕学不到东西,机器视觉销售>项目经理>视觉>电气>机械>老板

年轻人不怕苦&#xff0c;就怕学不到东西。 对于年轻人来说&#xff0c;需要规划&#xff0c;更需要发展。如果学不到东西&#xff0c;就会限制其发展&#xff0c;最重要的体现就是限制待遇上限。 一个非标自动化公司出差的频次&#xff08;各个公司略有差别&#xff0c;大多…

062:cesium设置泛光折线材质(material-6)

第062个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置泛光折线材质,请参考源代码,了解PolylineGlowMaterialProperty的应用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共89行)相关API参考:专…

蓝桥:前端开发笔面必刷题——Day2 数组(三)

文章目录 &#x1f4cb;前言&#x1f3af;两数之和 II&#x1f4da;题目内容✅解答 &#x1f3af;移除元素&#x1f4da;题目内容✅解答 &#x1f3af;有序数组的平方&#x1f4da;题目内容✅解答 &#x1f3af;三数之和&#x1f4da;题目内容✅解答 &#x1f4dd;最后 &#x…

Cloud Studio 内核升级之持续优化

前言 Cloud Studio 是基于浏览器的集成式开发环境&#xff08;IDE&#xff09;&#xff0c;为开发者提供了一个永不间断的云端工作站。用户在使用 Cloud Studio 时无需安装&#xff0c;随时随地打开浏览器就能使用。云端开发体验与本地几乎一样&#xff0c;上手门槛更低&#…

Xcode 14.3 和 iOS 16.4 为 SwiftUI 带来了哪些新功能?

0. 概览 今年年初&#xff0c;Apple 推出了最新的 Xcode 14.3 以及对应的 iOS 16.4 。 与此同时&#xff0c;它们对目前最新的 SwiftUI 4.0 也添加了一些新功能&#xff1a; sheet 弹窗后部视图&#xff08;Interact with a view Behind a sheet&#xff09;可交互&#xff…

头歌计算机组成原理实验—运算器设计(7) 第7关:6位有符号补码阵列乘法器

第7关&#xff1a;6位有符号补码阵列乘法器 实验目的 帮助学生掌握补码阵列乘法器的实现原理。 视频讲解 实验内容 在 Logisim 中打开 alu.circ 文件&#xff0c;在6位补码阵列乘法器中利用5位阵列乘法器以及求补器等部件实现补码阵列乘法器&#xff0c;实验框架如图所示&a…

Linux - Shell 权限 权限管理 权限修改 权限身份的认证 目录的权限 粘滞位

shell命令以及运行原理 我们来输入指令的本质就是 输入字符串。 而指令的本质&#xff0c;就是编译好的文件和脚本&#xff0c;而只要是文件&#xff0c;就会在系统的特定路径下存放。 我们使用所有的指令最终都要在 OS &#xff08;操作系统&#xff09;内部运行&#xff0c;…

〖Python网络爬虫实战㉖〗- Selenium库和ChromeDriver驱动的安装

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;目前专栏免费订阅&#xff0c;在转为付费专栏前订阅本专栏的&#xff0c;可以免费订阅付…

【C++】内存泄漏 智能指针

目录 一、什么是内存泄漏二、如何检测内存泄漏1、内存占用变化排查法2、valgrind定位法3、mtrace定位法 三、智能指针分类及作用1、unique_ptr2、shared_ptr3、weak_ptr 一、什么是内存泄漏 在实际的 C 开发中&#xff0c;我们经常会遇到诸如程序运行中突然崩溃、程序运行所用…

关于 HTTPS 的加密流程

目录 HTTP 与 HTTPS 的区别加密方式HTTPS 基本工作过程1. 仅使用对称密钥2. 引入非对称密钥对 key 进行加密3. 引入证书, 破解中间人攻击 HTTP 与 HTTPS 的区别 其实 HTTPS 与 HTTP 一样都是应用层协议, HTTPS 只是在 HTTP 的基础上再加上了一个加密层. 为啥要对 HTTP 进行加密…