吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 27030|回复: 142
收起左侧

[Android 原创] 听说这叫隐写术

    [复制链接]
顺利毕业 发表于 2019-8-17 17:28
本帖最后由 顺利毕业 于 2019-8-19 16:29 编辑

前两天刚听说“隐写术”这个词,听着挺像火影忍者里的招数哇??
趁着好奇,边学边做了张“隐写术图片”,后面会一步一步分享做的过程。初次尝试,有丢丢激动。

据说CTF里常用隐写术,不过作为未接触CTF的人,还请各路大神轻喷。

目测依旧是比较啰嗦的一篇,所以不想看全文的同学可以根据目录挑着看呀。

那,我们一起来做一张隐写图片吧~



/*****    这里是目录******/
一、隐写术?
  • 载体有哪些
  • 如何隐藏
  • 如何发现有隐藏信息
  • 如何提取隐藏信息
二、工具、环境
三、制作基础图种
四、来骗骗binwalk呀
五、制作小混合隐写图片
六、总结


/*****    这里是分割线******/

一、隐写术?

隐写术,就是在载体里隐藏信息,使非目标接收者无法找到隐藏的信息,最好的状态当然是无法感知有隐藏的信息。

这就涉及到且不限于以下几个方面:
1、载体有哪些
2、如何隐藏
3、如何发现有隐藏信息
4、如何提取隐藏信息

1、载体有哪些
     贴一张从其他地方找来的图片(做学习笔记的时候没记录下链接,后续有发现来源再贴上出处)

      fenlei.png

     作为初学者,感觉隐写术是片海,所以先挑着学呗,先学个“图像隐写术”。本帖子涉及的内容,也仅限在这范围内。“抛砖引玉”,“举一反三”(咋这么像我中学老师呢。。)

2、如何隐藏
   
    (1)图种
      百度百科解释:
            “一种采用特殊方式将图片文件(如jpg格式)与压缩文件结合起来的文件。该文件一般输出为jpg图片文件,可以正常预览图片。”

      我的个人理解:
            图片具有“图片结束符”,利用“图片查看器会直接忽略图片结束符后面的数据”,将欲隐藏的信息藏于图片结束符后面,即可达到“骗过图片查看器”从而使人察觉不到数据隐藏的目的。

      隐藏方式:追加数据。

      检测工具:binwalk等。

      (2)LSB:
     LSB解释:https://www.jianshu.com/p/5d2b3f0edff1

     即Least Significant Bit,修改图片像素中三原色之一的颜色(如红色)所属的8bit中的最低有效位,将待隐藏的数据转化成二进制形式并写入,从而进行信息的隐藏。由于每个像素中改动的不多,人眼并无法区分出来“颜色差”,故无法察觉“信息隐藏”。

      隐藏方式:修改数据。

      检测工具:Stegsolv.e等。


      (3)更多:等待学习中。。。


如何发现有隐藏信息 + 如何提取隐藏信息,那就得具体情况具体分析了。隐写术的方法很多,对应的发现/提取的操作也不一样,这里就不多说啦(作为初学者,也多说不出来哇。)



/*****    这里是分割线******/

二、工具、环境

      电脑:windows 10
      实现隐写:“copy /b”命令,010Editor工具等。
      发现隐写:binwalk
      隐写提取:010Editor(十六进制分析器)


      附:binwalk的下载链接为https://github.com/ReFirmLabs/binwalk.git,需实现安装python,并在binwalk的下载目录下利用“python setup.py install”命令来进行binwalk安装,随后可在python安装路径下的Script文件夹下发现binwalk文件。




/*****    这里是分割线******/

三、制作基础图种

1、学习链接:https://zhuanlan.zhihu.com/p/30539398
      该链接里介绍了多种隐写术操作,挺适合萌新的。

2、事前准备
      载体照片,即可被别人看见的照片,将其命名为:originOne.jpg
      待隐藏数据,我采用的依旧是一张照片,即我要隐藏的是一张照,将其命名为:forHide.jpg


3、预期效果
      利用隐写术,将forHide.jpg与originOne.jpg进行融合得到output.jpg文件,使别人(即图片查看器)在查看output.jpg图片时仅能查看到originOne.jpg图片,而无法发觉forHide.jpg的存在。

4、进行隐写
      用命令“copy  /b originOne.jpg+forHide.jpg output.jpg”来实现“从二进制层面进行两个文件的拼接”。加号“+”后面的文件为要隐藏的数据。拼接后的文件大小等于两个原始文件的大小总和。

1.png



5、图片查看器查看结果
      利用图片查看器“画图”打开原始文件originOne.jpg与拼接后的文件output.jpg,无法看出两者的区别:

2.png



6、从十六进制层面看结果
      在010Editor工具打开output.jpg,搜索jpg结束符FFD9,可找到3个不同的位置。在知道2张原始文件均为jpg文件的情况下,是可以直接定位到originOne.jpg的文件结束符在第二张图片(因为forHide.jpg的文件开始符为FFD8),forHide.jpg的文件结束符在第三张图片:

01.png

02.png

03.png


7、从检测工具看结果
      output.jpg文件拷贝到binwalk的运行环境  xx\python\Scripts\目录中,执行命令“python binwalk output.jpg”,可以看出,output.jpg中包含了2张jpeg格式文件,两个文件的起始位置分别为0x0与0x30FE73,故并隐藏起来的图片forHide.jpg的起始位置应该为0x30FE73。

3.png


8、定位
      在010Editor工具中,定位到output.jpg的0x30FE73位置,在此位置可以找到jpg文件的开始符FFD8:

4.png


9、结果验证
      在010Editor工具中,将0x30FE73位置前的所有数据删除,并另存为extract.jpg文件,与原始的forHide.jpg相比,两者看起来一样,且哈希一致,说明已提取成功。

5.png



10、最基础的图种就做出来啦。撒花~


/*****    这里是分割线******/

四、来骗骗binwalk呀
1、目的
      上一步仅能“骗过图片查看器”,binwalk一下子就能发现output.jpg里是有两张图片的呀,那这里就看下如何骗过binwalk吧。

2、怎么骗呀
      从binwalk的输出结果来看,大胆猜测其工作原理之一为:从二进制数据层面,寻找普通文件的文件符(如jpg的文件开始符FFD8,结束符FFD9),从而判断是否存在该类型文件并对其进行定位。

3、实施操作
      010Editor工具中,打开output.jpg文件,删除0x30FE73处的FFD8jpg文件开始符),为了达到隐藏的目的则“保留”文件最尾部的FFD9jpg文件结束符),即用forHide.jpg的文件结束符伪装成originOne.jpg的文件结束符,生成文件noStartFlags.jpg。对比处理前的output.jpg与去除开始符的noStartFlags.jpg,两者从图片查看器上一致,但两者的哈希不同,且后者比前者少了2个字节(开始符2个字节):


6.png


4、查看初步结果
      noStartFlags.jpg放置到binwalk运行文件同目录\python\Scripts下,利用binwalk查看noStartFlags.jpgoutput.jpg文件结构,前者显示仅有一个JPEG数据,后者显示有两个JPEG数据,但两者均有2TIFF image data提示。可以得出两个结论:刚刚的猜测问题不大;还没成功骗过binwalk:
7.png


5、去除TIFF提示
      在010Editor工具中,将noStartFlags.jpg中forHide.jpg文件的APP0段(以FFE0为标识,共18个字节)与APP1段(以FFE1为标识,共18个字节)的数据删除,生成noAPPx.jpg文件:

8.png


9.png




6、查看结果
      将noAPPx.jpg、output.jpg、originOne.jpg的对比如下,此时已无法使用binwalk工具来发现noAPPx.jpg文件比originOne.jpg文件多隐藏了一份文件,即此时隐写术已骗过binwalk与图片查看器:

10.png


11.png



7、稍作处理的图种已经能骗过binwalk跟图片查看器啦。撒花~
欲提取的话,只要把forHide.jpg的头部填充回去就可以了哇。



/*****    这里是分割线******/

五、制作小混合隐写图片
1、目的
      若近有noAPPx.jpg文件,而不知道forHide.jpg的头部,那也无法重新将forHide.jpg复原提取(如果大神们有其他方法的话,欢迎指教呀),故此阶段将forHide.jpg作为待隐藏的数据,一同防止在最终图片final.jpg中(此时还未制作出final.jpg图片)。


2、思路
      从final.jpg中复原forHide.jpg图片<----  需要从final.jpg中提取到forHide.jpg头部信息<------- 故需提前在final.jpg中隐藏forHide.jpg头部信息。
      “在final.jpg中隐藏forHide.jpg头部信息”,目前有两个想法:
      (1)在noAPPx.jpg图片中originOne.jpg的Exif位置写入forHide.jpg头部信息,从而得到final.jpg文件;
            但该方法容易被发现,即只要点击final.jpg文件,右键查看属性就能发现啦。

      (2)将forHide.jpg头部信息藏于一张新的不相关图片third.png中,再将third.png拼接到noAPPx.jpg后,从而得到final.jpg文件。
            使用该方法,还能将third.png伪装成“目标文件”,让人误以为它就是被隐藏的文件,从而没发现真正被隐藏的forHide.jpg文件。(自我觉得是这样,哈哈哈哈哈哈哈哈)
      
      在这里,我采用的是(2)这个方法,先剧透一下步骤:
            使用一个可推测出来的KEY作为密钥,加密forHide.jpg头部信息并利用LSB保存到third.png图片从而生成withKEY2.png图片;以KEY为密钥,加密KEY本身并保存到output.jpg中forHide.jpg的头部从而生成withKEY.jpg图片;将withKEY.jpg与withKEY2.jpg进行拼接并达到隐藏withKEY2.png的目的,生成final.jpg问津。


3、实施操作
(1)KEY值的确定
      KEY值采用固定格式:firstFileis+第一个文件格式
      即,当目标接收者拿到final.jpg文件时,他能知道KEY值为:firstFileisJPG

(2)加密forHide.jpg头部信息
      forHide.jpg头部信息为:文件开始符(2个字节) + APP0段(18个字节) + APP1段(18个字节),共38个字节。
      使用AES加密,加密算法为CBC,密钥为KEY,加密结果采用base64编码,从而得到加密后的数据位“P2y8vkjd5K5na4hOnxIaIoPpOokXhutio0uOnndKg5D6YzBngWtQkevsvkbXZlPgAwzw8MZvYyZnf5HzgQFFaZ3nuXaq0KLP45C17uFU7htR1Ajm0VnIynouo+XpYWOw”,记为KEY2:
12.png


(3)保存KEY2
      LSB的python脚本:https://www.jianshu.com/p/0875b388428f

      使用LSB脚本,将KEY2写入third.PNG照片并生成withKEY2.png,两者的哈希不同,但从图片查看器的角度无差别。


13.png

(4)加密KEY值并保存
      对KEY使用AES加密,加密算法为CBC,密钥为KEY本身,加密结果采用base64编码,从而得到“5M6ezC8G7w140LyOKlPJ3w==”。将其放置在output.jpg中forHide.jpg文件的文件开始符+APP0段+APP1段的数据(共38个字节)替换成所得的“5M6ezC8G7w140LyOKlPJ3w==”,剩余位置用00补齐,生成文件withKEY.jpg:
14.png

15.png
16.png



(4)生成final.jpg
      利用“copy /b withKEY.jpg+withKEY2.pngfinal.jpg”,生成最终的图片final.jpg。此时,binwalk仅发现final.jpg藏有2张照片(originOne.jpg与third.png),而未发现隐藏图片forHide.jpg。且图片查看器依旧发现不了originOne.jpg与final.jpg的区别,但看两者哈希是完全不一样的。
17.png
18.png





/*****    这里是分割线******/

六、总结
final.jpg的生成过程
(1)隐藏文件为forHide.JPG,显示文件为originOne.jpg,迷惑文件为third.PNG。
(2)将originOne.jpg与forHide.JPG以二进制形式进行拼接,得到output.jpg;
(3)设置指定格式的加密密钥KEY,对forHide.JPG头38个字节用AES加密,并利用LSB将其保存到withKEY2.png文件,即隐藏在third.PNG后面;
(4)以KEY为密钥,对KEY本身进行AES加密,将其保存在output.jpg中属于forHide.JPG头38个字节的位置处,用00补足,生成文件withKEY.jpg;
(5)将withKEY.jpg与withKEY2.png进行拼接,得到final.jpg(此时final.jpg真实含有3张图片,但binwalk仅可发现2张)。



(写完才自己发现,其实没必要对KEY再加密了呢,不过个人感觉问题不大,反正这次的目的是学习“隐写”~)



      
      









免费评分

参与人数 86威望 +2 吾爱币 +85 热心值 +79 收起 理由
UJumpINoJump + 1 热心回复!
victos + 1 热心回复!
abcdpm + 1 + 1 谢谢@Thanks!
bzhjl + 1 + 1 用心讨论,共获提升!
叶隽 + 1 学习到了,谢谢
踽踽独行 + 1 虽然看不明白,但觉得好厉害,膜拜
hexio + 1 + 1 谢谢@Thanks!
Behindyours + 1 + 1 我很赞同!
zqc8 + 1 + 1 热心回复!
大器晚成0125 + 1 + 1 有些犀利了。
laoda1228 + 1 + 1 牛叉的一塌糊涂,完全看不懂。
jiuliuge + 1 + 1 虽然看不懂,还是顶一个
哎呦嘿 + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
bingohwy + 1 + 1 用心讨论,共获提升!
asongElson + 1 + 1 热心回复!
it1024 + 1 + 1 不懂,先占坑。。
xiaoguoan111 + 1 + 1 我以为是隐身术
wyh1 + 1 + 1 我很赞同!
xuexiyixiaxia + 1 + 1 我很赞同!
yywapj + 1 谢谢@Thanks!
极地企鹅 + 1 + 1 用心讨论,共获提升!
jzp555 + 1 用心讨论,共获提升!
墨染流年 + 1 用心讨论,共获提升!
zy0426 + 1 + 1 谢谢@Thanks!
lyslxx + 1 + 1 我很赞同!
pkmoln + 1 用心讨论,共获提升!
长歌暖 + 1 我很赞同!
kai.wu + 1 + 1 我很赞同!
qtfreet00 + 2 + 12 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lk19870906 + 1 我很赞同!
Insert + 1 + 1 用心讨论,共获提升!
liuxiaoxiang + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
枫溪逸 + 1 + 1 谢谢@Thanks!
wowowowo + 1 + 1 我很赞同!
喜欢打酱油 + 1 + 1 一脸懵逼的进来,又出去了
ticketgod + 1 我很赞同!
SF-10086 + 1 + 1 热心回复!
cg1937 + 1 + 1 我很赞同!
kwan8888 + 1 + 1 我很赞同!
明世隐 + 1 + 1 谢谢@Thanks!
forward_ + 1 谢谢@Thanks!
夕林 + 1 + 1 谢谢@Thanks!
dreamlivemeng + 1 + 1 厉害厉害
zqguang3708 + 1 热心回复!
wangch1 + 1 + 1 我很赞同!
Mr_Linear + 1 我很赞同!
onething + 1 + 1 热心回复!
p0428 + 1 + 1 我很赞同!
yuum + 1 + 1 我很赞同!
suyuewen + 1 + 1 用心讨论,共获提升!感谢分享
Codewind + 1 + 1 热心回复!
人海中一簌 + 1 + 1 用心讨论,共获提升!
rodger1999 + 1 + 1 我很赞同!
絕情 + 1 谢谢@Thanks!
weakchicken + 1 + 1 谢谢@Thanks!
Asphodelus + 1 + 1 谢谢@Thanks!
万物皆空 + 1 + 1 我很赞同!
akckchen + 1 热心回复!
majia4075669072 + 1 我很赞同!
柑桔 + 1 我很赞同!
笙若 + 1 + 1 谢谢@Thanks!
归晚 + 1 + 1 用心讨论,共获提升!
ycqqq + 1 + 1 谢谢@Thanks!
遇日不归 + 1 + 1 我很赞同!
光头鸠摩智 + 1 + 1 我很赞同!
spll6 + 1 + 1 用心讨论,共获提升!
Pear + 1 + 1 吾爱有你更精彩!
jiangcs98 + 1 + 1 用心讨论,共获提升!
我是小白123 + 1 + 1 热心回复!
达云兮 + 1 我很赞同!
Honey丶Linux + 2 + 1 详细
kilkilo502 + 1 多年前当黑客下木马就这样执行!!!
mycc + 1 + 1 我很赞同!
涛之雨 + 2 + 1 热心回复!
我德屁谁莱文 + 1 + 1 用心讨论,共获提升!
独行风云 + 1 + 1 用心讨论,共获提升!
wangxp + 1 + 1 谢谢@Thanks!
tuk + 1 + 1 很不错
shiqiang45 + 1 + 1 用心讨论,共获提升!
ynweamdsc + 1 比摩斯密码还要复杂
灵影 + 1 + 1 这是用来干嘛的?
akkkh + 1 学到了知识!
有礼貌的牛 + 1 + 1 谢谢@Thanks!
smile1110 + 3 + 1 谢谢@Thanks!
sxhytds + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
haoren9062 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Whitte 发表于 2019-8-17 18:21
支持一个
ymbkxc 发表于 2019-8-20 15:27
因涉嫌窃取商业秘密,国家“千人计划”专家、通用电气主任工程师(Principal Engineer at GE Power)郑小清被FBI逮捕。值得注意的是郑小清的“隐写术”:通过对电脑上的数据文件进行加密,然后将机密文件隐藏在一张“日落”的数码照片的代码中,他巧妙避开了公司限制。
康儿 发表于 2019-8-17 17:40

留个沙发

貌似很不错,留个沙发回家坐下来慢慢看。
152a 发表于 2019-8-17 17:44
本帖最后由 152a 于 2019-8-17 17:50 编辑

可以上反色的。你把图片写成jpg格式的只能用文本编辑器一类的东西才能找得到的。只需要使用winrar加密一下文件‘就可以了。就看不到了。如此隐藏的东西时间长了就不能找到了。会给自己带来麻烦的。
 楼主| 顺利毕业 发表于 2019-8-17 18:02
152a 发表于 2019-8-17 17:44
可以上反色的。你把图片写成jpg格式的只能用文本编辑器一类的东西才能找得到的。只需要使用winrar加密一下 ...

学技术的过程,不就是一个给自己找麻烦的过程吗?
cj13888 发表于 2019-8-17 18:06
研究分析一下
mzussle 发表于 2019-8-17 18:49
这个不错 , 感谢分享 , 点赞
抱歉、 发表于 2019-8-17 19:10
表示看不懂!2333   还是顶一下!
霸天泣血 发表于 2019-8-17 19:16
发现朋友电脑上一张小图片,大小4.5个G,隐写了吧,有猫腻
hkent 发表于 2019-8-17 19:19
不明觉厉,这个是不是把私密性的文件隐藏在图片里
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-4 01:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表