MISC:图片隐写的破解方法.

news/2024/11/6 7:43:01/

MISC:图片隐写的破解方法.

Misc即杂项,是信息隐藏又称信息伪装,就是通过减少载体的某种冗余,如空间冗余、数据冗余等,来隐藏敏感信息,达到某种特殊的目的。
信息隐藏打破了传统密码学的思维范畴,从一个全新的视角审视信息安全。与传统的加密相比,信息隐藏的隐蔽性更强,在信息隐藏中,可以把这两项技术结合起来,先将秘密信息进行加密预处理,然后再进行信息隐藏,则秘密信息的保密性和不可觉察性的效果更佳。


目录:

MISC:图片隐写的破解方法.

图片隐写的破解方法:

JPG文件格式.

(1)损坏的文件.

(2)JPG | Exif

(3)JPG | Steghide

(4)JPG | Outguess

(5)JPG | F5

(6)JPG | Jphide

PNG 文件格式.

(1)PNG | 图片高度.

(2)PNG | 图片宽度

(3)PNG | LSB

(4)PNG | 盲水印

GIF 文件格式.

(1)GIF | 空间

(2)GIF | 时间


通过观察二进制中隐含的文件头信息来判断图片中附加的文件类型,常见的文件头、文件尾分别如下:

◆ JPEG (jpg): 文件头,FF D8 FF; 文件尾,FF D9◆ PNG (png) : 文件头,89 50 4E 47; 文件尾,AE 42 60 82◆ GIF (gif) : 文件头,47 49 46 38; 文件尾,00 3B◆ ZIP Archive (zip): 文件头,50 4B 03 04; 文件尾,50 4B◆ RAR Archive (rar) ,文件头: 52 617221◆ Wave (wav) : 文件头,57 41 5645◆ AVI (avi) : 文件头,41 56 49 20◆ MPEG (mpg): 文件头,00 00 01 BA◆ MPEG (mpg): 文件头,00 00 01 B3◆ Quicktime (mov) : 文件头,6D 6F 6F76

使用的工具:


图片隐写的破解方法:

JPG文件格式.

◆ JPEG (jpg): 文件头,FF D8 FF; 文件尾,FF D9标记码+压缩数据:标记码: 由两个字节构成,第一个字节是固定值OXFF,后一个字节则根据不同意义有不同数值压缩数据:前两个字节保存整个段的长度,包括这两个字节在内,以及后面所有内容组成

(1)损坏的文件.


(2)JPG | Exif


(3)JPG | Steghide

Steghide 是一个可以将文件隐藏到图片或音频中的工具.
apt install steghide        //下载 steghide 工具.

 steghide embed -cf 图片文件载体 -ef 待隐藏文件 [-p 密码也可以不设]        //隐藏文件//把 待隐藏文件 隐藏在图片文件载体中.

steghide extract -sf 图片文件载体 [-p 密码也可能不设]        //提取文件//在 图片文件载体 中提取隐藏的文件.


(4)JPG | Outguess

Outguess 也是一个可以将文件隐藏到图片或音频中的工具.
apt install outguess        //下载 Outguess 工具.

outguess -k 秘钥 -d 隐藏文件 原始图片 加密后的图片[自己命名]         //隐藏文件

outguess -k 秘钥 -r 加密后的图片 输出文件名[自己命名]                //提取文件


(5)JPG | F5


(6)JPG | Jphide 


PNG 文件格式.

◆ PNG (png) : 文件头,89 50 4E 47; 文件尾,AE 42 60 82PNG文件格式:PNG文件署名域+标准数据块(+辅助数据块)


(1)PNG | 图片高度.

经常会去更改一张图片的高度或者宽度使得一张图片显示不完整从而达到隐藏信息的目的.图片正常显示,将图片拖入到 010 Editor 中,出现CRC 报错,说明图片的高度被修改了。可以简单
粗暴地将图片的高度修改为较大值.


(2)PNG | 图片宽度 

图片不正常显示,色彩失调,将图片拖入到 010 Editor 中,出现 CRC 报错,说明图片的宽度被修改了
文件宽度不能任意修改,需要根据 HDR 块的 CRC 值爆破得到宽度,否则图片显示错误不能得到 flag.

import os
import binascii
import struct
crcbp = open("5.png", "rb").read()
for i in range(1024):for j in range(1024):data = crcbp[12:16] + struct.pack('>i',i) + struct.pack('>i',j) + crcbp[24:29]crc32 = binascii.crc32(data) & 0xffffffffif crc32 == 0xcbd6df8a :print(i,j)print("hex",hex(i),hex(j))


(3)PNG | LSB

◆ PNG 文件中的图像像素一般是由 RGB 三原色(红绿蓝)组成,每一种颜色占用 8 位LSB 隐写就是修改了
像数中的最低的 1 bit,而人类的眼睛不会注意到这前后的变化,每个像素最多可以携带3比特的信息.◆ Stegsolve 通过下方的按钮可以观察每个通道的信息,查看各个通道时一定要细心捕捉异常点,抓住 LSB 
隐写的蛛丝马迹.◆ 例如:
通过观察RGB三个通道的最低位发现上面都有模糊的信息,借助 Stegsolve-->Analyse-->
Data Extract可以指定通道进行提取。Preview 可以预览信息,Save Text保存成文本,Save Bin 
保存成二进制(保存形式由信息内容决定)
解密过程:打开 StegSolve


(4)PNG | 盲水印 

盲水印是利用二维傅里叶变换,给文件添加肉眼无法直接看到的水印数据。盲水印不仅仅用于图片,也可应用于像音频这种数据流。当出现两张看起来一模一样的图片,可以用盲水印
解密工具试一下
工具下载:
https://gitcode.net/mirrors/chishaxie/blindwatermark?utm_source=csdn_github_accelerator
安装脚本的依赖库:pip install opencv-pythonpip install matplotlib==2.1.1
 python3 bwmforpy3.py encode 原图 信息文件 盲水印图片        //合成盲水印

python3 bwmforpy3.py decode 原图 盲水印图片 信息文件        //提取盲水印


GIF 文件格式.

(1)GIF | 空间

由于 GIF 的动态特性,由一的图片构成,所以每一的图片,多图片间的结合,都成了隐藏信息的一种载体
通过 Stegsolve 工具一一分析,加载该 gif 图片 Analyse -> Frame Browser


(2)GIF | 时间

下载 Imagemagick 工具:apt-get install imagemagick

常用指令:convert: 转换图像格式和大小,模糊,裁剪,驱除污点,抖动,临近,图片上画图片,加入新
图片生成缩略图等。identify:描述一个或较多图像文件的格式和特性.composite:根据一个图片或多个图片组合生成图片.
identify -format "%T \n" 查看的图片 > 保存的数据.identify -format "%T \n" 3.gif > bgxg.txt

一般只会隐藏二种:摩斯密码和二进制.

然后再用在线解密工具:
http://www.all-tool.cn/Tools/morse/?&rand=f6023065909f54a18ec7c6a3b6ba9e3e

   

   

     

学习链接:3-CTF隐写术基础_哔哩哔哩_bilibili


http://www.ppmy.cn/news/68101.html

相关文章

MySQL数据库用户管理以及数据库用户授权

一、数据库用户管理 1、新建用户 CREATE USER 用户名来源地址 [IDENTIFIED BY [PASSWORD] 密码]; ---------------------------------------------------------------------------------------------------------- 用户名:指定将创建的用户名 来源地址&#xff1a…

java 调用 python 方法

目录 1.JPython 1.1 JPython介绍 1.2 JPython实践 2.使用Runtime.getRuntime()执行python脚本文件,推荐使用 一个项目可能需要用到人工智能算法,在java后端中需要调用python算法,这篇文章就简单介绍一下其中的两种java调用python方法。 …

你真的理解分布式数据的分区吗?

分布式数据存储是指将数据分散存储在多个节点或服务器上的技术。而分区是将数据划分为逻辑上的片段或部分,每个分区可以在分布式系统中的不同节点上存储。分区主要是为了可扩展性。不同的分区可以放在不共享集群中的不同节点上,可以帮助实现负载均衡、高…

总结852

学习目标: 月目标:5月(张宇强化前10讲,背诵15篇短文,熟词僻义300词基础词) 周目标:张宇强化前5讲并完成相应的习题并记录,英语背3篇文章并回诵 每日必复习(5分钟&#…

Python每日一练(20230515) 只出现一次的数字 I\II\III

目录 1. 只出现一次的数字 Single Number 2. 只出现一次的数字 II Single Number II 3. 只出现一次的数字 III Single Number III 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 leetcod…

c++速查备忘录Ctrl+f键关键字查

// c //<vector> 数组 vector<int> v{7,5,10,12}; v.push_back(26); //类似js的push &#xff0c; pop_back 删最后一个数 //循环打印 for(auto e:arr) cout<<e<<" "; // 日期 <ctime> time_t nowtime(0); tm *ltm localtime(&…

甘特图控件DHTMLX Gantt入门使用教程【引入】:dhtmlxGantt 与Node.js(上)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求&#xff0c;具备完善的甘特图图表库&#xff0c;功能强大&#xff0c;价格便宜&#xff0c;提供丰富而灵活的JavaScript API接口&#xff0c;与各种服务器端技术&am…

(动态规划,分治)leetcode53. 最大子数组和

文章目录 一、题目1、题目描述2、基础框架3、原题链接 二、解题报告1、思路分析2、时间复杂度3、代码详解 三、本题小知识 一、题目 1、题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&…