Misc学习笔记

😺图片隐写

  • 🎈Exif信息隐藏

    • Exif是什么?

      ​ Exif就是用来记录拍摄图像时的各种信息:图像信息(厂商,分辨率等),相机拍摄记(ISO,白平衡,饱和度,锐度等),缩略图(缩略图宽度,高度等),gps(拍摄时的经度,纬度,高度)等,将这些信息按照JPEG文件标准放在图像文件头部。

​ 如上图上述的信息都可以隐藏信息,我们可以通过右键属性查看详细信息,也可以通过https://exif.tuchong.com/ 在线exif中查看

  • 🎈图片修复式隐写

    • 此隐写可分为图片头修复图片尾修复长宽高修复

    • 文件头文件尾总结

      JPEG (jpg), 文件头:FFD8FF  文件尾: FFD9               
      PNG (png), 文件头:89504E470D0A1A0A 文件尾:AE 42 60 82
      GIF (gif), 文件头:47494638 文件尾:00 3B

      ZIP 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), 文件头:E3828596

      RAR 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隐写

    • 简介

      Jphide是基于最低有效位LSB的JPEG格式图像隐写算法,使用JPEG图像作为载体是因为相比其他图像格式更不容易发现隐藏信息,因为JPEG图像在DCT变换域上进行隐藏比空间域隐藏更难检测,并且鲁棒性更强,同时Blowfish算法有较强的抗统计检测能力。

    • 我们采用JPHS软件解密(用于对 JPEG 文件进行 Jhide 算法的隐写或提取)

      点击hide 输入对应密码即可解密。(有些也可不输)

      输入完毕则会在桌面上创建一个文件。内容则是隐藏的信息

  • 🎈outguess隐写

    • 简介

      Outgusee算法是Niels Provos针对Jsteg算法的缺陷提出的一种方法:

      对应的,也有针对该算法的隐写工具,名字也叫Outguess。

    • 安装outguess

      1. Kail终端命令输入git clone https://github.com/crorvick/outguess

      2. 下载完毕进入outguess文件夹中

      3. 在终端中输入./configure && make && make install 即可安装

      如上图已经安装完毕,输入outguess可查看指令

      • 使用方法

        outguess -r “图片位置” -t 11.txt

        其中 r 为解密指令

        11.txt 为导出的文件

        如下图为成功结果

  • 🎈F5隐写

    F5隐写全称F5-steganography,

    在kail系统命令端输入以下代码来下载:

    git clone https://github.com/matthewgao/F5-steganography

  • ​ 如图:可以看到左边生成了一个名为F5的文件包

    ​ 结果一看 使用不了,需要java环境,那好吧 整一个。

    • 配置java环境

      • 然后解压缩并移动至/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查看是否安装完毕,如果出现以下结果则表示安装完毕

    • 使用方法

      1. cd到安装目录下

      2. 输入java Extract “待提取的图片路径”

        还是出现了错误

        心态炸了🧨

        网上一查发现是因为我jdk版本太高而在较低版本的文件下运行造成的

        靠🧨

        行吧,那我在windows里下,windows里jdk版本,好趴

        输入java Extract “待提取的图片路径”

        终于完成了 我的天
        解密结果会在当前文件夹的 output.txt 中

        结束 F5

    • 🎈盲水印隐写

      • 简介

        隐藏式的水印是以数字数据的方式加入音频、图片或影片中,但在一般的状况下无法被看见。

        当有两张图片一模一样时,多半是盲水印加密过的

        这里我们用到 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

    我们将软件打开后,选择统计类型为暴力

    设置完毕后点击开始,即开始爆破

    如图,暴力破解已找到答案

    • 🎈明文攻击

      明文攻击真的学到了超级多知识

      • 简介

        所谓明文攻击就是已经通过其他手段知道zip加密文件中的某些内容,比如在某些网站上发现它的readme.txt文件,或者其他文件,这时就可以尝试破解了

      • 前提!!

        明文文件要和加密文件的格式相同,所以这里需要压缩–这里一定要注意我们的压缩方式要相同

    👱‍♂️举个例子

    ​ 如图 下面是一个压缩包 但是我们可以发现,里面还有一个11.zip,并且内容也是加密的,但是我们已知一张图片,可以看到这张图片的CRC值和压缩包里面的图片CRC值一样

    ​ 接下来我们放入 ARCHPR 中进行明文攻击,如下图,注意几个框框

    注意:虽然显示一直在爆破,但我们只要中断爆破,然后就会弹出一个压缩包,这时已经解密成功了。

    • 🎈掩码攻击

      我的理解: 当我们记得密码的部分,或者几个字符或者长度时,这时我们可以用掩码攻击来爆破,穷举。

      这里我们还是用到 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
      48
      import 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文件的内容,拼起来即是压缩包密码

      • 6位字节CRC32碰撞

      相比于4字节,6字节会更难爆破一些,我在github上找了个工具

      在windows命令行中进入crc32文件夹中

      输入命令 python crc32.py reverse 0x(为文件CRC32值)

      如图我们已经将txt密码穷举出来了,这代表碰撞成功,接下来就是进行密码穷举,然后爆破,这里不多赘述了