隐写术教学
把一张图片拖进十六进制编辑器,隐写你会发现文件末尾多出一串莫名其妙的术教字节。这串字节不是隐写图片数据,但图片照样能正常打开。术教这就是隐写隐写术最朴素的样子——把秘密藏在别人眼皮底下,而不是术教锁进保险箱。 大多数人第一次接触隐写术,隐写是术教在CTF比赛里。一道题给你一张美女照片,隐写让你找flag。术教你用StegoSolve跑一遍,隐写没结果。术教用binwalk看,隐写也没嵌套文件。术教最后有人告诉你,隐写把每个像素的最低有效位提取出来,拼成二进制,再转ASCII。你试了一下,屏幕上跳出一行字: 为什么是最低有效位?因为图片的每个像素由RGB三个通道组成,每个通道的值在0到255之间。把255改成254,肉眼根本看不出来。但254和255的二进制只差最后一位。这一位就是藏东西的地方。一张1920×1080的图片,有1920×1080×3个通道,每个通道藏1 bit,就能藏约777KB的数据。塞一部短篇小说绰绰有余。 我最早自己动手做隐写,是用Python的PIL库。读入一张图,把要藏的文字转成二进制字符串,然后逐像素替换最低位。代码不到二十行。跑完保存,打开图片看,和原图一模一样。但用同样的脚本反向提取,文字就回来了。那种感觉很奇怪——你明明知道图里藏着东西,却什么都看不出来。 后来才知道,LSB隐写只是入门。真正难检测的是DCT域隐写。JPEG压缩会把图片从空间域转到频率域,量化后再转回来。在这个过程中修改某些频率系数,对视觉影响更小,而且能抵抗有损压缩。F5算法、OutGuess这些工具就是干这个的。它们不改变文件大小,不留下明显的统计痕迹。你想用卡方分析检测,它还会故意调整系数分布来骗过你。 隐写术和加密是两回事。加密是把内容变成乱码,别人知道你在传秘密,但读不懂。隐写是让别人根本不知道你在传秘密。两者可以叠加:先加密再隐写。这样即使有人发现图里有东西,拿到的也是一团加密数据。 有个真实的案例。2010年,FBI抓到一名俄罗斯间谍。他用的就是隐写术,把指令藏在公共图片网站的照片里。FBI查了很久才意识到,那些看似普通的风景照,其实每张都带着加密信息。这个案子后来成了隐写术的经典教学案例。 如果你现在想试试,最简单的办法是用 隐写术的核心从来不是“藏得深”,而是“藏得自然”。一张图看起来正常,文件大小正常,统计特征正常,那它就是安全的。一旦你为了藏更多数据而大幅修改像素,或者留下明显的文件尾部附加数据,就等于在脑门上写了“这里有鬼”。 最后说个坑。很多人以为把文件追加到图片后面就算隐写。用flag{ you_found_me}。steghide。命令行敲一行:steghide embed -cf photo.jpg -ef secret.txt。输入密码,秘密就进去了。提取的时候反过来。它支持JPEG、BMP、WAV,用起来没什么门槛。但别拿它藏太重要的东西——steghide的算法早就被分析透了,取证工具一抓一个准。copy /b image.jpg+secret.zip out.jpg,图片能打开,zip也能解压。但这根本不叫隐写,叫文件拼接。任何用binwalk扫一下的人都能看到。真正的隐写,是让数据成为载体本身的一部分,而不是贴在背面的便签纸。
-
上一篇
-
下一篇
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-