隐写术的相关工具

##概述

隐写术是关于信息隐藏,即不让计划的接收者之外的任何人知道信息的传递事件(而不只是信息的内容)的一门技巧与科学。
通常我们隐写的对象是图片,音频,视频,文档等,为了方便,我们常常使用一些工具。
本文记录这些工具的安装过程以及简单用途。 本文实验环境为 linux(openSUSE 13.1), 而 windows 以及 os x 环境下类似。

##TrID

TrID File Identifier

TrID是一款根据文件二进制数据特征进行判断的文件类型识别工具。虽然也有类似的文件类型识别工具,但是大多数都是使用硬编码的识别规则,而TrID则没有固定的匹配规则,TrID具有灵活的可扩展性,可以通过训练来进行文件类型的快速识别。
TrID通过附加的文件类型指纹数据库来进行匹配,可用于取证分析、未知文件识别等用途。

linux 平台下载解压缩

1
2
3
$ cd trid_linux
$ chmod +x trid
$ ./trid binary_file

若检测失败,缺失 triddefs.trd ,从windows版的软件中将其复制过来即可。
windows 平台可以直接下载使用

P.S. linux 下的 file 命令与这个工具作用相似

##binwalk

BinWalk是一个固件的分析工具,旨在协助研究人员对固件进行分析,提取及逆向工程用处。简单易用,完全自动化脚本,并通过自定义签名,提取规则和插件模块,还重要一点的是可以轻松地扩展。在这里,binwalk 做内嵌文件数据分析。

在CTF竞赛中,很多情况下会把一个文件的二进制数据嵌入到另一个文件之中,对于嵌入ZIP之类的数据,我们可以尝试直接将文件名的后缀改为zip,然后使用WinRAR之类的解压缩工具打开即可,但是对于未知的文件类型,这样可能就显得力不从心了,这里介绍一种通用的内嵌文件识别方法,就是使用BinWalk工具。

下载地址:binwalk官网
下载后解压缩,进入该目录配置安装

1
2
3
$ ./configure
$ make
$ sudo make install

使用方法也很直接(如下图片是一个图种):

1
2
3
4
5
6
$ binwalk 9b48d91f3a292df51ad5ffbdbc315c6035a873ae.jpg 

DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------

0 0x0 JPEG image data, JFIF standard 1.01
151706 0x2509A End of Zip archive

更详细的安装文档参见 INSTALL.md
较清晰的使用指南参见 freebuf 的介绍
更详细的使用说明参见 官方文档

##JPocketKnife

这时一个编码转换神器,由 JAVA 编写,2008 年开发。
以下是程序内部的help说明:

JPK is mainly a conversion tool
When you hover the mouse over a function, you get some help what it does.
When your input is binary or number, make sure you have 1 number per line, and select the correct InRadix or BitsPerBlock.
It is a good idea to press Binary->Format, or Number->Format, before doing Number or Binary functions.

下载地址JPK_406.jar ( 感谢合天网安实验室 )
运行 java -jar JPK_406.jar
而在wechall上有一个在线使用方式

##Audacity

Audacity是一款免费的音频处理软件。它是在linux下发展起来的,一款遵循GNU协议的免费软件。
Audacity是一个跨平台的声音编辑软件,用于录音和编辑音频,是自由、开放源代码的软件。
通过此工具可以进行音频文件隐写取证分析(包括波形图分析、频谱图分析、音频反向等)。

从源代码安装 Audacity

要下载 Audacity 的源代码,使用 SourceForge 中的链接,并选择那里介绍的压缩存档文件。将有一个类似于 audacity-minsrc-2.0.xx.tar.xz 的名称,应该将它下载到您的 Download 目录。接下来,打开 terminal,将文件解压缩,并从源代码构建 Audacity:

1
2
$ cd src
$ tar -zxvpf ~/Download/audacity-minsrc-2.0.xx.tar.gz

创建源目录并将所有源模块放在该目录下。之后,按照下列内容配置、编译并安装 Audacity:

1
2
$ cd audacity-src-2.0.xx
$ ./configure

这时,提示缺少 wxWidgets 和 libsndfile 开发库。
打开YaST软件包管理器安装 wxWidgets-devel 和 libsndfile-devel ,重试。
假设配置阶段已经完成并且没有发现任何错误,则现在就可以运行 make 来编译和链接 Audacity:

1
2
$ make
$ sudo make install

启动程序

1
$ audacity

BTW:安装完才想起来可以在yast安装包管理器中安装的 ( Fedora,Gentoo,SuSE,Ubuntu这些发行版都可以在各自软件库中安装 )

参考资料
Audacity 音频编辑器教程
功能强大的 Audacity ( from IBM )

##StegHide

Steghide是一个隐秘的程序,它能够隐藏在图像和音频文件的各种数据。用颜色respectivly采样频率没有改变从而使对一阶统计测试嵌入性。

主要特点:

压缩嵌入数据
加密嵌入数据
嵌入数据的检查(checksum)
支持 JPEG, BMP, WAV and AU 文件

sourceforge 官网下载

需要的库有:

  1. libmhash Available at: http://mhash.sourceforge.net/
  2. libmcrypt Available at: http://mcrypt.sourceforge.net/
  3. libjpeg Available at: http://www.ijg.org/
  4. zlib Available at: http://www.gzip.org/zlib/

安装:

1
2
3
4
$ ./configure 
$ make
$ make check
$ sudo make install

使用方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ steghide embed -cf picture.jpg -ef secret.txt
Enter passphrase:
Re-Enter passphrase:
embedding "secret.txt" in "picture.jpg"... done

$ steghide extract -sf picture.jpg
Enter passphrase:
wrote extracted data to "secret.txt".

$ steghide info received_file.wav

"received_file.wav":
format: wave audio, PCM encoding
capacity: 3.5 KB
Try to get information about embedded data ? (y/n) y
Enter passphrase:
embedded file "secret.txt":
size: 1.6 KB
encrypted: rijndael-128, cbc
compressed: yes

$ steghide extract -sf received_file.wav
Enter passphrase:
wrote extracted data to "secret.txt".

P.S. 首次源码安装失败,缺少库,安装库后还是失败。后来尝试去openSUSE官方中找,使用 1 click install 成功。
openSUSE 官方下载 , 其他发行版可以在各自的软件库寻找。

##StegSolve

StegSolve是一款基于Java开发的流行图片隐写分析软件,其支持常见的图片文件格式,可以对不同的文件进行结合(包括XOR、ADD、SUB等操作),可以对图片文件格式进行分析,可以提取GIF文件中的帧等,覆盖了基本的图片隐写分析需求。

如果需要对不同的文件进行结合(包括XOR、ADD、SUB等操作),即通过对两张图片的像素点进行运算时。自己编写的脚本更加适合定制和扩展,下面是用 Python 实现的对两张图片进行像素点运算的 demo:

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
#!/usr/bin/env python
# this code is from heetian lab
# -*- coding:utf-8 -*-
from PIL import Image

def xorFun(x, y):
return x^y

def orFun(x, y):
return x|y

def andFun(x, y):
return x&y

def loadImage(filename):
img = Image.open(filename)
width, height = img.size
img = img.convert("RGB")
pixel = img.load()
return width, height, pixel

def combineImage(file1, file2, file3, func):
w1, h1, p1 = loadImage(file1)
w2, h2, p2 = loadImage(file2)
width = min(w1, w2)
height = min(h1, h2)
img = Image.new("RGB", (width, height))
pix = img.load()
for y in xrange(0, height):
for x in xrange(0, width):
r1, g1, b1 = p1[x, y]
r2, g2, b2 = p2[x, y]
pix[x, y] = func(r1,r2), func(g1,g2), func(b1,b2)
img.save(file3)

if __name__ == "__main__":
combineImage("pic1.jpg", "pic2.jpg", "xor.jpg", xorFun)
combineImage("pic1.jpg", "pic2.jpg", "or.jpg", orFun)
combineImage("pic1.jpg", "pic2.jpg", "and.jpg", andFun)

##StegDetect

Stegdetect是一个自动化的工具,用于检测图像中的隐写内容。它能够检测几种不同的隐写方法在JPEG图像中嵌入隐藏信息。

linux 版本的一个下载地址:http://www.codeforge.cn/article/149993

##其他windows平台工具

  • C32Asm (16进制编辑器)
  • MP3Stego (官网下载)
  • Invisible Secrets ( 可以在 JPG 文件里面附带加密文本信息,只有win版,官网下载)