图片隐写(一)
文件隐藏
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)]](https://img-blog.csdnimg.cn/57026ba4f4704baea6c12ef6ddefffdb.png)
BMP
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W9aHkycj-1684509046219)(\Pic\BMP1.png)]](https://img-blog.csdnimg.cn/b0eb60dac9934175a8d28b17cfe43279.png)
png
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PJT5Qov1-1684509046219)(\Pic\PNG1.png)]](https://img-blog.csdnimg.cn/2b025807ac384ebc8173d80446bc5d11.png)
-
pngcheck
-
在linux中,宽高有问题的png图片,也就是CRC校验错误的图片无法打开,会有如下报错
shack.png CRC error in chunk IHDR (computed 52e1fc4b, expected be917539) ERROR: shack.png -
CRC32宽高爆破
import struct
import zlibdef 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 bstr1="49484452" # IHDR
str2="0806000000"
bytes1=hexStr2bytes(str1)
bytes2=hexStr2bytes(str2)
wid,hei = 1918,864 # W & hcrc32 = "0x7dc73f7f" # CRC32for 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)]](https://img-blog.csdnimg.cn/a8a1e289b2064b5cac556e54e769ffbe.png)
- 特征:加密解密后结果不同
def base64_stego(lines):alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'flag = ''temp = 0bit = 0for i in lines:if i[-1] != '=': # 无等号continueelif 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够一个字节,转为chrbit = 0flag += chr(temp)temp = 0elif bit > 8: # 4+2+4,取8位,保存多余两位bit = 2flag += chr(temp >> 2)temp = temp & 0x3return 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')
相关文章:
图片隐写(一)
文件隐藏 binwalk binwalk -e filename foremost foremost filename steghide & stegseek Install sudo apt-get install steghidestegseek Use steghide extract -sf filename -p passwordtime stegseek secret.file aaa.txt dd 文本隐藏 二进制文件末尾 or 文…...
Vivado 下 IP核 之ROM 读写
目录 Vivado 下 IP核 之ROM 读写 1、实验简介 2、ROM IP 核简介 3、ROM IP 核配置 3.1、创建 ROM 初始化文件 3.2、单端口 ROM 的配置 3.3、双端口 ROM 的配置 3.4、ROM IP 核的调用 (1)ROM 顶层模块代码 (2)ROM IP 核仿…...
朗诵素材-《诵四季诗韵,咏师恩师德》
女:中华五千年的悠久历史,孕育了底蕴深厚的民族文化。 男:华夏源远流长的经典诗文, 女:是文化艺苑中经久不衰的瑰宝。 男:在那些脍炙人口的诗句里,凝聚着华光熠熠的民族精魂。 女࿱…...
CHB-麻省理工学院头皮脑电图数据库
数据库介绍 该数据库在波士顿儿童医院收集,包括患有顽固性癫痫发作的儿科受试者的脑电图记录。受试者在停用抗癫痫药物后被监测长达几天,以表征他们的癫痫发作并评估他们手术干预的候选资格。 数据库链接:https://physionet.org/content/chb…...
传输层协议
目录 传输层 端口号 端口号范围划分 认识知名端口号(Well-Know Port Number) netstat pidof UDP协议UDP协议端格式编辑 UDP的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 TCP协议 TCP协议段格式 确认应答(ACK)机制 超时重传机制 连…...
公司新招了个字节拿36K的人,让我见识到了什么才是测试扛把子......
5年测试,应该是能达到资深测试的水准,即不仅能熟练地开发业务,而且还能熟悉项目开发,测试,调试和发布的流程,而且还应该能全面掌握数据库等方面的技能,如果技能再高些的话,甚至熟悉分…...
pytorch rpc如何实现分物理机器的model parallel
因为业务需要,最近接到一项任务,是如何利用pytorch实现model parallel以及distributed training。搜罗了网上很多资料,以及阅读了pytorch官方的教程,都没有可参考的案例。讲的比较多的是data parallel,关于model paral…...
APP服务端架构的演变
大家好,我是易安! 早期2013年的时候,随着智能设备的普及和移动互联网的发展,移动端逐渐成为用户的新入口,各个电商平台都开始聚焦移动端App,如今经历了10年的发展,很多电商APP早已经没入历史的洪…...
EasyRecovery16适用于Windows和Mac的专业硬盘恢复软件
无论你对数据恢复了解多少, 我们将为您处理所有复杂的流程并简化恢复!适用于Windows和Mac的 专业硬盘恢复软件 硬盘数据无法保证绝对安全。有时会发生数据丢失,需要使用硬盘恢复工具。支持恢复不同存储介质数据:硬盘、光盘、U盘/移动硬盘、数…...
详解Jetpack Compose中的状态管理与使用
前言 引用一段官方描述,如下 由于 Compose 是声明式工具集,因此更新它的唯一方法是通过新参数调用同一可组合项。这些参数是界面状态的表现形式。每当状态更新时,都会发生重组。因此,TextField 不会像在基于 XML 的命令式视图中那…...
改进YOLOv7 | 头部解耦 | 将YOLOX解耦头添加到YOLOv7 | 涨点杀器
改进YOLOv7 | 头部解耦 | 将YOLOX解耦头添加到YOLOv7 论文地址:https://arxiv.org/abs/2107.08430 文章目录 改进YOLOv7 | 头部解耦 | 将YOLOX解耦头添加到YOLOv71. 解耦头原理2. 解耦头对收敛速度的影响3. 解耦头对精度的影响4. 代码改进方式第一步第二步第三步第四步第五步参…...
第七章 中断
中断是什么,为什么要有中断 并发是指单位时间内的累积工作量。 并行是指真正同时进行的工作量。 一个CPU在一个时间只能执行一个进程,任何瞬间任务只在一个核心上运行。 而CPU外的设备是独立于CPU的,它与CPU同步运行,CPU抽出一点…...
1116 Come on! Let‘s C(38行代码+详细注释)
分数 20 全屏浏览题目 作者 CHEN, Yue 单位 浙江大学 "Lets C" is a popular and fun programming contest hosted by the College of Computer Science and Technology, Zhejiang University. Since the idea of the contest is for fun, the award rules are f…...
深入学习《c语言函数》
📕博主介绍:目前大一正在学习c语言,数据结构,计算机网络。 c语言学习,是为了更好的学习其他的编程语言,C语言是母体语言,是人机交互接近底层的桥梁。 本章学习函数。 让我们开启c语言学习之旅吧…...
Pytorch从零开始实现Vision Transformer (from scratch)
Pytorch从零开始实现Vision Transformer 前言一、Vision Transformer架构介绍1. Patch Embedding2. Multi-Head Attention3. Transformer BlockFeed Forward 二、预备知识1. Einsum2. Einops 三、Vision Transformer代码实现0. 导入库1. Patch Embedding2. Residual & Norm…...
ES6函数新增了哪些扩展?
目录 一、参数二、属性函数的length属性name属性 三、作用域四、严格模式五、箭头函数 一、参数 ES6允许为函数的参数设置默认值 function log(x, y World) {console.log(x, y); }console.log(Hello) // Hello World console.log(Hello, China) // Hello China console.log(…...
【firewalld防火墙】
目录 一、firewalld概述二、firewalld 与 iptables 的区别1、firewalld 区域的概念 三、firewalld防火墙默认的9个区域四、Firewalld 网络区域1、区域介绍2、firewalld数据处理流程 五、firewalld防火墙的配置方法1、使用firewall-cmd 命令行工具。2、使用firewall-config 图形…...
CNNs: ZFNet之CNN的可视化网络介绍
CNNs: ZFNet之CNN的可视化网络介绍 导言Deconvnet1. Unpooling2. ReLU3. Transpose conv AlexNet网络修改AlexNet Deconv网络介绍特征可视化 导言 上一个内容,我们主要学习了AlexNet网络的实现、超参数对网络结果的影响以及网络中涉及到一些其他的知识点࿰…...
云原生之深入解析Airbnb的动态Kubernetes集群扩缩容
一、前言 Airbnb 基础设施的一个重要作用是保证我们的云能够根据需求上升或下降进行自动扩缩容,我们每天的流量波动都非常大,需要依靠动态扩缩容来保证服务的正常运行。为了支持扩缩容,Airbnb 使用了 Kubernetes 编排系统,并且使…...
Django框架之模板其他补充
本篇文章是对django框架模板内容的一些补充。包含注释、html转义和csrf内容。 目录 注释 单行注释 多行注释 HTML转义 Escape Safe Autoescape CSRF 防止csrf方式 表单中使用 ajax请求添加 注释 单行注释 语法:{# 注释内容 #} 示例: {# 注…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
