Misc学习笔记
Misc学习笔记
😺图片隐写
![]() |
![]() |
如上图上述的信息都可以隐藏信息,我们可以通过右键属性,查看详细信息,也可以通过https://exif.tuchong.com/ 在线exif中查看
🎈图片修复式隐写
此隐写可分为图片头修复、图片尾修复、长宽高修复
文件头文件尾总结
JPEG (jpg), 文件头:FFD8FF 文件尾: FFD9
PNG (png), 文件头:89504E470D0A1A0A 文件尾:AE 42 60 82
GIF (gif), 文件头:47494638 文件尾:00 3BZIP Archive (zip), 文件头:504B0304 文件尾:50 4B
TIFF (tif), 文件头:49492A00
Windows Bitmap (bmp), 文件头:424D
CAD (dwg), 文件头:41433130
Adobe Photoshop (psd), 文件头:38425053
Rich Text Format (rtf), 文件头:7B5C727466
XML (xml), 文件头:3C3F786D6C
HTML (html), 文件头:68746D6C3E
Email [thorough only] (eml), 文件头:44656C69766572792D646174653A
Outlook Express (dbx), 文件头:CFAD12FEC5FD746F
Outlook (pst), 文件头:2142444E
MS Word/Excel (xls.or.doc), 文件头:D0CF11E0
MS Access (mdb), 文件头:5374616E64617264204A
WordPerfect (wpd), 文件头:FF575043
Adobe Acrobat (pdf), 文件头:255044462D312E
Quicken (qdf), 文件头:AC9EBD8F
Windows Password (pwl), 文件头:E3828596RAR Archive (rar), 文件头:52617221
Wave (wav), 文件头:57415645
AVI (avi), 文件头:41564920
Real Audio (ram), 文件头:2E7261FD
Real Media (rm), 文件头:2E524D46
MPEG (mpg), 文件头:000001BA
MPEG (mpg), 文件头:000001B3
Quicktime (mov), 文件头:6D6F6F76
Windows Media (asf), 文件头:3026B2758E66CF11
MIDI (mid), 文件头:4D546864图片头尾修复
在一些ctf题目中,出题人会把图片的文件头或是文件尾去掉,这时我们就要手动添加文件头,尾。
如图,我们加上文件头后即可查看图片
长宽高修复
一般会有一些信息隐藏在图片的下面,但由于图片高度限定,导致我们看不见,这时我们便可以通过更改宽高的方法进行修复。
如上图我们更改图片的高度
在 unit32 height 中修改高度,改的高一点即可
于是flag就出来了
🎈隐藏信息到十六进制区域
因为在文件尾添加一串编码并不会影响显示,所以一些赛题会采用这样的方式隐藏
或者会把flag藏到文本里,这时我们 ctrl+f 进行搜索即可。
如上图,我们用010打开后发现文件尾有一串编码,分析后得知该编码为Unicode
我们用在线网站 http://tool.chinaz.com/tools/unicode.aspx
即可得到flag
🎈LSB隐写
简介
LSB全称为 least significant bit,是最低有效位的意思。Lsb图片隐写是基于lsb算法的一种图片隐写术。机器并不是通过像素识别,而是通过该像素点的数值大小识别,所以在人类眼中一样的,在机器那不一样。一个像素点占8位,每位有3个颜色,每个像素点能隐藏3个信息。
所以低有效位的数据改变在人眼看来是一样的,所以在最后一位隐藏数据是一个有效的方法。
对于lsb隐写 我们用Stegsolve.jar工具查看即可
打开点击Stegsolve.jar工具 点击 Analyse 再点击 Data Extract
因为是LSB,利用最低有效位,所以我们将RGB的色素都调为0
即可得到一些信息
🎈Jphide隐写
🎈outguess隐写
🎈F5隐写
F5隐写全称F5-steganography,
在kail系统命令端输入以下代码来下载:
git clone https://github.com/matthewgao/F5-steganography
如图:可以看到左边生成了一个名为F5的文件包
结果一看 使用不了,需要java环境,那好吧 整一个。
配置java环境
去java官网下载jdk,然后粘贴到虚拟机中 https://www.oracle.com/java/technologies/javase-jdk16-downloads.html
因为kali自带的java版本是Openjdk,因此需要卸载,在终端中输入命令
apt-get remove openjdk*
将不再需要的java软件卸载,输入命令:
apt autoremove
然后解压缩并移动至/opt文件夹
cp jdk-16.0.1_linux-x64_bin.tar.gz /opt
将压缩包移动至/opt文件夹tar -xvzf jdk-16.0.1_linux-x64_bin.tar.gz
将压缩包解压至当前文件夹cd jdk-16.0.1
进入解压好的文件夹设置环境变量
vi /etc/profile
并在尾部加入如下信息
#install JAVA JDK
export JAVA_HOME=/opt/jdk-16.0.1
export CLASSPATH=.:${JAVA_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
接下来安装并注册 依次输入下列命令
update-alternatives –install /usr/bin/java java /opt/jdk-16.0.1/bin/java 1
update-alternatives –install /usr/bin/javac javac /opt/jdk-16.0.1/bin/javac 1
update-alternatives –set java /opt/jdk-16.0.1/bin/java
update-alternatives –set javac /opt/jdk-16.0.1/bin/javac完毕后,输入
java -version
查看是否安装完毕,如果出现以下结果则表示安装完毕
使用方法
🎈盲水印隐写
简介
隐藏式的水印是以数字数据的方式加入音频、图片或影片中,但在一般的状况下无法被看见。
当有两张图片一模一样时,多半是盲水印加密过的
这里我们用到 blind-watermark工具解密
安装cv2库
**这个工具需要安装 cv2 的库 **
使用命令安装
pip install opencv-python
在安装这个库的时候试错了无数次,一直显示没有模板cv2,在网上也查找了许多资料,但都无法解决,无奈之下只能在windows环境下部署
https://github.com/chishaxie/BlindWaterMark 安装盲水印工具,
并放入python site-packages文件下
使用方法
这一部分也试错了许多,因为我是在python3环境下解密的,所以在使用常用的命令解密时,会出现下图的情况
查找大量资料才知道,主要原因是python2和python3 random的算法不同,如果要让python3兼容python2的random算法请加
--oldseed
参数。以下为python3解密:
首先cd到盲水印工具安装目录下,然后输入
python bwmforpy3.py decode 0.png 1.png flag.png --oldseed
0.png 和 1.png为两张相同的图片
flag.png为解密后的结果
运行脚本后提取查看解密结果
😺压缩包破解
zip伪加密是在文件头的加密标志位做修改,进而再打开文件时识被别为加密压缩包。
一个 ZIP 文件由三个部分组成:
压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志
而伪加密就是在压缩源文件目录区中进行修改数据达到伪加密的效果。
把 压缩源文件目录区 的 全局方式位标记 的 01 00 或 09 00 改为 00 00 就可以去除密码
把 压缩源文件目录区 的 全局方式位标记 的 00 00 改为 01 00 或 09 00 就可以添加密码
经验告诉我一般是在倒数第二个的文件头中更改。找到文件头第九第十个字符,将其修改为0000即可解密
🤦♂️举个栗子吧
我们用010打开压缩包
然后用ctrl+f进行寻找文件头为 504B0102的
然后我们将第九个字符改为09
如下图可发现 压缩包已经上锁了
如果要打开,也是同样的道理,将09改为00即可
这里我们用到windows下的软件 advanced zip password recovery
我们将软件打开后,选择统计类型为暴力
设置完毕后点击开始,即开始爆破
如图,暴力破解已找到答案
👱♂️举个例子
如图 下面是一个压缩包 但是我们可以发现,里面还有一个11.zip,并且内容也是加密的,但是我们已知一张图片,可以看到这张图片的CRC值和压缩包里面的图片CRC值一样
接下来我们放入 ARCHPR 中进行明文攻击,如下图,注意几个框框
注意:虽然显示一直在爆破,但我们只要中断爆破,然后就会弹出一个压缩包,这时已经解密成功了。
如图 从注释中我们得知 password 为:jhc????!@#$
很显然掩码攻击,如下图,注意框框中的信息。
解密结果已经出来
🎈CRC32碰撞
4位字节CRC32碰撞
简单地说就是在一个压缩包中,有两个加密文件字节是一样的,而文件的内容只有相同的时候,他的crc校验才会一样,这时我们可以通过获取他的crc32值来与我们的内容计算得到的值进行相互比较。
上脚本!! 此脚本具有多线程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48import string
import threading
import binascii
import sys
def crc(_crc):
l = 1
dic = string.printable
_input = _crc
_input = "0X" + _input
for i in dic:
for n in dic:
for h in dic:
for m in dic:
s = i + n + h + m
s = s.encode()
# print(str(binascii.crc32(s)), _input)
if hex(binascii.crc32(s)).upper() == _input.upper():
print(_crc, ':', s.decode())
print(l)
sys.exit() #直接退出,不进行接下来的碰撞了,一般在做题的时候,碰撞不会重复
l = l + 1
def crc32():
print("四字节碰撞!!!")
num = int(input("你可能需要多个线程同时进行碰撞,请输入线程数:"))
_thread = []
_args = []
print("输入参数")
for i in range(num):
print(i+1, end=':')
_args.append(input())
# print(_args)
for i in range(num):
t = threading.Thread(target=crc, args=(_args[i],))
_thread.append(t) #如果在这里开始线程会出一点小bug,虽然不要紧,但是不好看,不信的话你们自己试试
# print(_thread)
for i in range(num):
_thread[i].start()
for i in range(num):
_thread[i].join()
input()
if __name__ == '__main__':
crc32()结果如下,Asr3 和 Tp01 则分别是两个txt文件的内容,拼起来即是压缩包密码
相比于4字节,6字节会更难爆破一些,我在github上找了个工具
在windows命令行中进入crc32文件夹中
输入命令
python crc32.py reverse 0x(为文件CRC32值)
如图我们已经将txt密码穷举出来了,这代表碰撞成功,接下来就是进行密码穷举,然后爆破,这里不多赘述了
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 A.binのBlog!