写在前面:本文包含在windows和在kali下使用的工具,win下已做标注,其中若有问题可联系我~

0x01 图片相关

1.1 jpg

1.1.1 f5-steganography (F5隐写,需要passwd)

安装

kali中安装: git clone https://github.com/matthewgao/F5-steganography

> git clone https://github.com/matthewgao/F5-steganography
......
使用(解密)

进入 F5-steganography 文件夹 打开终端

> java Extract 1.jpg -p 123456
# -p后接f5的key

打开 output.txt 文件即可

使用(加密)
> java Embed 原图.jpg 生成图.jpg -e 隐藏的文件.txt -p 密码

1.1.2 outguess (可需要passwd)

安装

打开终端输入: git clone https://github.com/crorvick/outguess

> git clone https://github.com/crorvick/outguess
......

下载成功后进入outguess文件夹,在文件夹中打开终端输入

> ./configure && make && make install
......

成功后即可使用

使用(加密)

右键打开终端

> outguess -k 12345 -d hidden.txt 1.jpg 2.jpg
......
# -k后接密码
# -d后接要隐藏的内容
# 加密后1.jpg会覆盖2.jpg
使用(解密)

右键打开终端(接上述)

> outguess -k 12345 -r 2.jpg out.txt
......

out.txt 中内容即为想要隐藏的 hidden.txt 中内容

也可不需要密码,即

> outguess -r 2.jpg out.txt

1.1.3 stegdetect(检查jpg图片隐写方法_win)

使用

将图片复制到 stegdetect.exe 所在文件夹,打开 cmd 输入:

stegdetect.exe -tjopi -s 10.0 [stego_file]

-s 修改检测算法的敏感度,该值的默认值为1。检测结果的匹配度与检测算法的敏感度成正比,算法敏感度的值越大,检测出的可疑文件包含敏感信息的可能性越大。
-t 设置要检测哪些隐写工具(默认检测jopi),可设置的选项如下:
j 检测图像中的信息是否是用jsteg嵌入的。
o 检测图像中的信息是否是用outguess嵌入的。
p 检测图像中的信息是否是用jphide嵌入的。
i 检测图像中的信息是否是用invisible secrets嵌入的。

如果显示为 [stego_file]:jphide(***),则可以用 stegbreak 破解密码

stegbreak -r rules.ini -f password.txt -t p [stego_file]
#password.txt为自带字典
Loaded 1 files...
[stego_file]:jphide[v5](2333)
#2333为该文件jphide的密码

1.1.4 steghide(jpg隐藏信息)

安装(kali中)
apt-get install steghide

有需要按 Y 即可

使用(加密)

将 flag.txt 文件隐藏到 out.jpg 中:

steghide embed -cf out.jpg -ef flag.txt [-p 123456] # -p后接密码,可无
使用(解密)

查看图片中嵌入的文件信息:

steghide info out.jpg

提取含有密码的隐藏内容:

steghide extract -sf out.jpg -p 123456

提取不含有密码的隐藏内容:

steghide extract -sf out.jpg

直接按回车即可

steghide爆破密码

有些题目用steghide加密文件但是不给密码,此时就需要爆破,steghide本身并不支持爆破,需要一些其他的方法:https://github.com/Va5c0/Steghide-Brute-Force-Tool

python steg_brute.py -b -d [字典] -f [jpg_file]

需要安装的库:progressbar

pip install progressbar2

1.2 png & bmp

1.2.1 BlindWaterMark (盲水印)

第一种 正常的bwm
安装

github上下载脚本,网址: https://github.com/chishaxie/BlindWaterMark

安装 python前置模块

> pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
 ......
> sudo pip install matplotlib
 ......
使用(解密)

安装成功后打开 bwm.py 所在文件夹,在文件夹中打开终端

# 1.png 为无水印原图
# 2.png 为有盲水印的图
# flag.png 为解出来的图片
> python bwm.py decode 1.png 2.png flag.png

查看 flag.png 即可

使用(加密)

安装成功后打开 bwm.py 所在文件夹,在文件夹中打开终端

# 1.png 为无水印原图
# water.png 为水印图
# 2.png 为有盲水印图
> python bwm.py encode 1.png water.png 2.png

查看 2.png 即可

第二种 频域盲水印
脚本
import cv2
import numpy as np
import random
import os
from argparse import ArgumentParser

ALPHA = 5

def build_parser():
    parser = ArgumentParser()
    parser.add_argument('--original', dest='ori', required=True)
    parser.add_argument('--image', dest='img', required=True)
    parser.add_argument('--result', dest='res', required=True)
    parser.add_argument('--alpha', dest='alpha', default=ALPHA)
    return parser

def main():
    parser = build_parser()
    options = parser.parse_args()
    ori = options.ori
    img = options.img
    res = options.res
    alpha = options.alpha
    if not os.path.isfile(ori):
        parser.error("original image %s does not exist." % ori)
    if not os.path.isfile(img):
        parser.error("image %s does not exist." % img)
    decode(ori, img, res, alpha)

def decode(ori_path, img_path, res_path, alpha):
    ori = cv2.imread(ori_path)
    img = cv2.imread(img_path)
    ori_f = np.fft.fft2(ori)
    img_f = np.fft.fft2(img)
    height, width = ori.shape[0], ori.shape[1]
    watermark = (ori_f - img_f) / alpha
    watermark = np.real(watermark)
    res = np.zeros(watermark.shape)
    random.seed(height + width)
    x = range(height / 2)
    y = range(width)
    random.shuffle(x)
    random.shuffle(y)
    for i in range(height / 2):
        for j in range(width):
            res[x[i]][y[j]] = watermark[i][j]
    cv2.imwrite(res_path, res, [int(cv2.IMWRITE_JPEG_QUALITY), 100])

if __name__ == '__main__':
    main()
使用
python pinyubwm.py --original 1.png --image 2.png --result out.png

查看 out.png 即可,如果无法得到正常图片,可将 1.png2.png 调换位置再次尝试

1.2.2 lsb的py脚本解密(lsb隐写+需要passwd)

下载:https://github.com/livz/cloacked-pixel

使用
python lsb.py extract [stego_file] [out_file] [password]

其余详见: https://github.com/livz/cloacked-pixel

1.2.3 zsteg(lsb隐写)

安装
gem install zsteg
使用
#查看全部信息
zsteg -a 1.bmp

#提取固定通道的内容
zsteg -e b8,a,lsb,xy 1.png -> out.png

1.2.4 pngcheck(检查IDAT块_win)

使用

pngcheck.exe 所在文件夹打开cmd

pngcheck.exe -v 123.png

可检查 pngIDAT 块是否有问题

相关题目可参考:https://blog.csdn.net/u010391191/article/details/80818785

有关解题脚本可参考 FzWjScJ 师傅的blog:http://www.fzwjscj.xyz/index.php/archives/17/

1.3 WebP(webp文件操作)

安装(kali中)
apt install webp

需要的时候按 Y 即可

使用

cwebp - 编码器工具:可将png转为webp

cwebp 1.png -o 2.webp

dwebp - 解码器工具:可将webp转为png

dwebp 1.webp -o 2.png

vwebp - 查看器工具:可直接查看webp格式图片

vwebp 1.webp

webpinfo - 格式查看工具:可打印出WebP文件的块级结构以及基本完整性检查

webpinfo 1.webp

其余(gif2webp、img2webp等可见官方文档

1.4 exiftool(查看图片exif信息)

安装(kali中)
apt-get install exiftool

需要的时候按 Y 即可

使用
exiftool 1.jpg   # 显示图片所有信息
exiftool 1.jpg | grep flag   # 查看图片有关‘flag’字符的信息
exiftool *   # 查看此文件夹所有图片信息
exiftool -b -ThumbnailImage attachment.jpg >flag.jpg   # 提取缩略图

其余详细: https://segmentfault.com/a/1190000018032048?utm_source=tag-newest

1.5 stegpy(支持多种文件加密)

此种加密支持对PNG、BMP、GIF、WebP和WAV格式加密,同时可以选择有无password

安装(kali中)
pip3 install stegpy
使用(加密)

不含有密码

stegpy 'hello_world' image.png

含有密码

stegpy "hello_world" image.png -p
Enter password (will not be echoed): # 输入密码(不显示)
Verify password (will not be echoed): # 确认密码(不显示)
使用(解密)

不含有密码

stegpy _image.png

含有密码

stegpy _image.png -p
Enter password (will not be echoed): # 输入密码(不显示)

0x02 压缩包相关

2.1 Fcrackzip (zip暴力破解)

安装

kali中安装: sudo apt-get install fcrackzip

> sudo apt-get install fcrackzip
......

使用

参数说明:

-c 指定字符集,格式 -c 'aA1!:'
a 表示小写字母[a-z]
A 表示大写字母[A-Z]
1 表示阿拉伯数字[0-9]
! 表示特殊字符集[!:$%&/()=?{[]}+*~#]
: 表示包含冒号之后的字符(不能为二进制的空字符),例如 a1:$% 表示 字符集包含小写字母、数字、$ 和 % 

打开终端

> fcrackzip -b -c 'a1A' -l 1-10 -u 123.zip

PASSWORD FOUND!!!!: pw == qsb

参数说明:

-b 表示使用暴力破解方式
-c 'a1A' 表示使用大小写字母和数字混合破解的方式
-l 1-10  表示需要破解的密码长度为1-10
-u 表示只显示破解出来的密码,其他错误密码不显示

添加字典:

frcackzip -D -p zidian.txt -u 123.zip

PASSWORD FOUND!!!!: pw == qsb

参数说明:

-D 表示要使用字典破解
-p 表示要使用的那个字典

2.2 crc值爆破(zip包碰撞crc值)

下载脚本:https://github.com/theonlypwner/crc32

使用

python crc32.py reverse 你的crc32密文

2.3 ZipCenOp(zip伪加密)

下载:https://files.cnblogs.com/files/ECJTUACM-873284962/ZipCenOp.zip

使用(解密)

在工具所在文件夹打开cmd,输入

java -jar ZipCenOp.jar r xxx.zip

如果显示success则表示成功,之后再直接解压压缩包即可

使用(加密)

同样打开cmd,输入

java -jar ZipCenOp.jar e xxx.zip

压缩包就被伪加密了

2.4 bkcrack(zip明文攻击)

项目地址:https://github.com/kimci86/bkcrack

安装

前置条件:安装cmake

安装方法:https://my.oschina.net/u/4231975/blog/3187835

比较推荐第一种方法,快捷方便

apt install cmake

在安装好cmake后,在GitHub上将项目压缩包下载下来并解压,进入解压得到的文件夹,依次执行

cmake .
make

可执行文件在/bkcrack-master/src目录下,名为bkcrack

使用

参考项目已有的用法即可

2.5 p7zip改(可根据key直接解压)

项目地址:https://github.com/Aloxaf/p7zip

安装

下载后解压,进入文件夹,执行sudo bash install.sh

使用

7za e cipher.zip '-p[d4f34b9d_a6ba3461_dcd97451]'

0x03 pyc文件相关

3.1 uncompyle6(pyc文件反编译)

安装

pip install uncompyle6

使用

uncompyle6 test.pyc > test.py

3.2 Stegosaurus(pyc隐写_win)

版本:Python 3.6 or later

使用

stegosaurus.py 所在文件夹打开cmd,输入:

python stegosaurus.py -x [pyc_file]

0x04 音频相关

4.1 DeepSound(音频中隐藏加密文档)

下载

附件链接:https://pan.baidu.com/s/11fIWgDovj_x4rsrKHyUMhQ

提取码:wnzu

使用

可见:INSHack2018 (not) so deep

4.2 MP3stego(MP3隐写_win)

使用

在MP3stego文件夹中打开cmd,然后将 Decode.exe 拖到命令行里,将要解密的文件放在文件夹中

...\Decode.exe -X -P [password] [stego_mp3]

执行后会在该文件夹中生成一个 txt 文件,打开查看即可

4.3 steghide(wav隐藏信息)

安装(kali中)

apt-get install steghide

有需要按 Y 即可

使用(加密)

将 flag.txt 文件隐藏到 out.jpg 中:

steghide embed -cf out.jpg -ef flag.txt [-p 123456] # -p后接密码,可无

使用(解密)

查看图片中嵌入的文件信息:

steghide info out.jpg

提取含有密码的隐藏内容:

steghide extract -sf out.jpg -p 123456

提取不含有密码的隐藏内容:

steghide extract -sf out.jpg

直接按回车即可

steghide爆破密码

有些题目用steghide加密文件但是不给密码,此时就需要爆破,steghide本身并不支持爆破,需要一些其他的方法:https://github.com/Va5c0/Steghide-Brute-Force-Tool

python steg_brute.py -b -d [字典] -f [jpg_file]

需要安装的库:progressbar

pip install progressbar2

0x05 其他

5.1 aircrack-ng(爆破wifi密码)

  • 创建字典

kali下自带有一份无线密码字典:/usr/share/wordlists/rockyou.txt.gz,我们需要将其解压:

img

img

  • 爆破
aircrack-ng -w /usr/share/wordlists/rockyou.txt -b [MAC] [capfile]

-w 后加字典的位置(kali中自带字典的位置)
-b 后加路由器的MAC地址(应该也就是BSSID)

5.2 xortool(猜测xor加密的密码长度及值)

安装

安装环境基于python3

python3 -m pip install --user xortool

python2似乎也可以……

pip install xortool

使用

在想要解密的文件所在目录打开终端:

xortool (-x) -c 20 123.txt
#-x:代表文件内容为十六进制
#-c:后加出现频率最高的字符,文本内容一般是空格(20),二进制文件一般是00

这里只列出了最简单的使用方法,其余可见: https://pypi.org/project/xortool/

5.3 mimikatz(抓取lsass密码)

下载:https://pan.baidu.com/s/1qZmnPar-gfqT9OaWO_DS3g

提取码:svp9

使用

lsass.dmp 文件放在 mimikatz.exe 所在目录下,关闭杀软后打开 mimikatz.exe

执行以下三条命令:

privilege::debug
sekurlsa::minidump lsass.dmp
sekurlsa::logonpasswords full

image-20200318172912228

5.4 gaps(拼图)

安装

依次执行以下五条命令

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 .

使用

详细:https://www.zhuanzhi.ai/document/282c8a2293a31361d4c15b4451b5406a

  • 创建拼图
create_puzzle [图片绝对路径] --size=[尺寸] --destination=[创建拼图名称]

得到的拼图所有图在一张大图上,可以配合convert命令将其切开

  • 还原拼图

如果还原的是被切开成一小块一小块的拼图,需要先将其拼在一张大图上(可用montage命令),之后再用gaps将其还原:

gaps --image=out.jpg --generations=50 --population=120 --size=50

--image            指向拼图的路径
--size            拼图块的像素尺寸
--generations    遗传算法的代的数量
--population    个体数量
--verbose        每一代训练结束后展示最佳结果
--save            将拼图还原为图像

如果不能明确提供--size的参数,拼图块尺寸将自适应调整,经过我的多次试验,提供--size参数效果会更好

5.5 dtmf-decoder(电话音解码)

下载:https://github.com/hfeeki/dtmf

使用

先将其中dtmf-decoder.py这个脚本中读入文件的部分按照个人需求进行修改

修改后直接运行脚本即可

python dtmf-decoder.py

注:如果在py3环境下运行失败的话请换成py2环境再次运行

5.6 snow(空格制表符隐写)

使用(加密)

将信息flag{1234}隐藏在data.txt中,结果另存为out.txt,密码为123

snow.exe -C -m "flag{1234}" -p "123" data.txt out.txt

打开out.txt,其中就有隐写的结果,也可以不指定密码进行无密钥隐写

使用(解密)

假设out.txt中有隐写的内容,密码为123

snow.exe -C -p "123" out.txt

如果不需要密码,就把-p省略掉

  • 其余使用方法请参照官方文档

5.7 VirtualDub2(视频隐写)

5.8 stegsnow(空白字符隐写)

安装

apt install stegsnow

使用

-C : 加密时压缩数据,解密时解压数据
-f [message-file] : 将该文件中的内容隐藏在输入文本文件中
-m [message-string] : 将该字符串隐藏在输入文本文件中
-p [password] : 加解密可用密钥

其他:http://manpages.ubuntu.com/manpages/bionic/man1/stegsnow.1.html

  • 例子
以"hello world"作为密钥,将infile文件中的"I am lying"压缩隐藏在outfile中
stegsnow -C -m "I am lying" -p "hello world" [infile] [outfile]

提取上述加密的信息
stegsnow -C -p "hello world" [outfile]

5.9 zbarimg(命令行扫码)

安装

apt-get install zbar-tools

使用

usage: zbarimg [options] <image>...

scan and decode bar codes from one or more image files

options:
-h, --help      display this help text
--version       display version information and exit
-q, --quiet     minimal output, only print decoded symbol data
-v, --verbose   increase debug output level
--verbose=N     set specific debug output level
-d, --display   enable display of following images to the screen
-D, --nodisplay disable display of following images (default)
--xml, --noxml  enable/disable XML output format
--raw           output decoded symbol data without converting charsets
-1, --oneshot   exit after scanning one bar code
-S<CONFIG>[=<VALUE>], --set <CONFIG>[=<VALUE>]
                set decoder/scanner <CONFIG> to <VALUE> (or 1)

--nodbus        disable dbus message

例题:[hackgame2020 来自未来的信笺]

官方wp

本题利用zbarimg扫码,编写shell脚本

#!/bin/sh

for i in ./frames/frame-*.png;
do
   #echo $i
   zbarimg -q --raw -Sbinary $i >> out
done;
  • -q:安静模式,只输出扫码内容
  • --raw:输出原始数据,不经过任何处理与字符转换

5.10 aa3d(生成3d字符画)

安装

apt-get install aa3d

使用

可使用选项

Options:
-w width   Image width (Default:80)
-s step    Size of repeating sequence (Default:12)
-t text    Text used to generate background
-r         Disable random text placement
-f file    Use file as input for raster
-d         Use digits instead of letters

首先构造一个字符画,假设文件命名为 1.txt

                                        111        111                        
                                        111        111                        
                                        111                                   
111111111111     111111    111  111  111   1111111    111    111111    1111111   
111 1111 1111   111  111   111  111  111   111 1111   111   111  111   111       
111  111  111   11111111   111  111  111   111  111   111   11111111   11111111  
111  111  111   1111       1111 111 1111   111 1111   111   1111            111  
111  111  111    111111     11111111111    1111111    111    111111     1111111  

在终端调用aa3d

aa3d -w 100 < 1.txt

GJTR`KMJN[LSGJTR`KMJN[LSGJTR`KMJN[LSGJTR`KMJN[LSGJTR`KMJN[LSGJTR`KMJN[LSGJTR`KMJN[LSGJTR`KMJN[LSGJTR
K[\JRGF]]UVYK[\JRGF]]UVYK[\JRGF]]UVYK[\JRGF]]UVYK[\JRGF]]UYK[[\JRGF]]YK[[[\JRGF]]YK[[[\JRGF]]YK[[[\J
TVKOIYSYAZN^TVKOIYSYAZN^TVKOIYSYAZN^TVKOIYSYAZN^TVKOIYSYAZ^TVVKOIYSYA^TVVVKOIYSYA^TVVVKOIYSYA^TVVVKO
ADFM\SHEUMLZADFM\SHEUMLZADFM\SHEUMLZADFM\SHEUMLZADFM\SHEUMZADDFM\SHEUMZADDFM\SHEUMZADDFM\SHEUMZADDFM
CEYZIHVFQ[K`CEYIHVFQ[K`CEYIIHVFQK`CEYIIIHVQK``CYIIIIVQKK``YIIIIVQQKK`YIIIIIVQKK`YIIIIIVQKK`YIIIIIIVQ
RFWBU`VKCKMJRFWU`VVCKMJJFWU``VVKMJJJWU```VKMJJJWU```VKMMJJWU```VKMMMJWU````KMMMMWU````KMMMMMWU````KM
[VHPWK_E`BLB[VHWK__EBLBB[HWKK__BLBB[HWKKK_BLBBBHWKKK_BLLBBHWKKK_BLLLBHWKKKKBLLLBHWKKKKBLLLBHWKKKKKBL
B\BHNY^LWCBEB\BNY^^LCBEEBBNYY^^CBEEEBBNYY^CBEEEBBNNY^CBBEEBBNNY^CBBBEBBNNNYCBBBBEBBNNNYCBBBEBBBNNNYC
ANCNH^N\HYWVANCH^NN\YWVVACH^^NN\WVVACHH^^NNWVVACHH^^NNNWVVCHH^^NNNNWVCHHH^^NNNWVCHHHH^^NNWVCHHHHH^^N
^SWXCUEMEVIX^SWXCUEMEVIX^SWXCUEMEVIX^SWXCUEMEVIX^SWXCUEMEVIX^SWXCUEMEVIX^SWXCUEMEVIX^SWXCUEMEVIX^SWX
MVE]KO[`ZCVHMVE]KO[`ZCVHMVE]KO[`ZCVHMVE]KO[`ZCVHMVE]KO[`ZCVHMVE]KO[`ZCVHMVE]KO[`ZCVHMVE]KO[`ZCVHMVE]

如何查看由aa3d生成的立体图

立体图可以通过两个相同的图片偏移取差值的方法看到信息

先将生成的字符串截图出来

image-20210508213656825

然后使用 stegsolve 的 stereogram solver 选项,依次查看图片的偏移

image-20210508214005882

可以看到当偏移为96时就能还原出近乎一模一样的字符画

5.11 bftools(可以从图片解brainfuck)

要用cmd

bftools.exe decode braincopter flag.png > 1.txt
bftools.exe run 1.txt > 2.png
bftools.exe decode brainloller 2.png > 3.txt
bftools.exe run 3.txt