MISC总结

1.CTF中的压缩包

CTF中常见的压缩包套路(这些套路也不一定是单独出现,大多数情况都是组合出现的)

(1) 利用进制转换隐藏信息

(2) 作为冗余信息或隐藏信息藏在其他文件中,一般是图片

(3) 简单密码爆破

(4) 字典爆破/掩码攻击

(5) 伪加密

(6) 明文攻击

(7) CRC32碰撞

(8) 文件修复

(9) 冗余信息拼接

(10)注释隐藏密码4. ZIP文件格式

ZIP文件一般分为数据区与目录区。数据区的开头标识为504B0304,而目录区开始的标识为504B0102,以下两图以上面图片显示的压缩包为例,对文件格式进行解析。
在这里插入图片描述
在这里插入图片描述

1.1.练习1

在这里插入图片描述
看见开始为504B0304是zip的特征头,
判断为压缩包后,将其保存为ZIP文件。可以编写脚本进行十六进制解码后保存为ZIP文件,也可以直接使用winhex,这里我使用winhex进行保存。打开winhex后,新建一个空文件,将十六进制字符串复制,右键点击winhex的十六进制数据区,选择“Edit”->“Clipboard Data”->“Paste”->“ASCII hex”,保存为ZIP文件即可。

1.2.练习2

了解常见套路二,作为冗余信息隐藏在其他文件中,将压缩包提取出来。
在这里插入图片描述
其中flag.jpg为已经隐藏了压缩包的图片,timg.jpg为原图片,heetian_LSB.png为使用了LSB算法隐藏压缩包的图片

如何实现:使用windows的copy命令即可
在这里插入图片描述
或者直接改后缀名,解压

若是使用隐写算法隐藏在图片中,则需要借助相应的工具,这里以LSB隐写算法为例。
使用StegSolve找到隐藏的信息。
在这里插入图片描述

1.3.练习3

简单密码爆破
在这里插入图片描述
可以看见压缩包被加密了
使用工具进行爆破,一般需要爆破的压缩包密码不会复杂,大部分情况都是纯数字,这里使用ziperello对压缩包进行爆破。
打开ziperello,选择要解密的压缩包。
在这里插入图片描述
破解成功!

1.4.练习4

基于掩码的攻击
在这里插入图片描述
给出了解压密码的提示,打开Ziperello使用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
破解成功!

1.5.练习5

在这里插入图片描述
伪加密只需要将目录区的09改为00即可

1.6.练习6

了解明文攻击
明文攻击是一种较为高效的攻击手段,大致原理是当你不知道一个zip的密码,但是你有zip中的一个已知文件(文件大小要大于12Byte)时,因为同一个zip压缩包里的所有文件都是使用同一个加密密钥来加密的,所以可以用已知文件来找加密密钥,利用密钥来解锁其他加密文件。在压缩文件时输入的密码,首先被转换成3个32bit的key,所以可能的key的组合是2^96,如果用暴力穷举的方式是不太可能的,除非密码比较短或者有个厉害的字典。压缩软件用这3个key加密所有包中的文件,所有文件的key是一样的,如果我们能够找到这3个key,就能解开所有的文件。如果我们找到加密压缩包中的任意一个文件,这个文件和压缩包里的文件是一样的,我们把这个文件用同样的压缩软件同样的压缩方式进行无密码的压缩包(这里可以通过比较压缩后文件的CRC32值来判断,如果一样,则使用的是同样的压缩方式和软件),得到的文件就是我们的Known plaintext(已知明文)。用这个无密码的压缩包和有密码的压缩包进行比较,分析两个包中相同的那个文件,抽取出两个文件的不同点,就是那3个key了,如此就能得到key。两个相同文件在压缩包中的字节数应该相差12个byte,就是那3个key了。虽然我们还是无法通过这个key还原出密码,但是我们已经可以用这个key解开所有的文件,所以已经满足我的要求了,得到其中加密的其他文件。
在这里插入图片描述
可以看到已知明文是明文攻击中的一个文件

第一步:无加密压缩已知明文
我们对“已知明文.jpg”进行无加密的压缩,然后对比两个压缩文件中“已知明文.jpg”的CRC32值,如果一致,就可以进行明文攻击,如果不一致,则换一种压缩方式继续比较。(记住已知明文在明文攻击的第二个文件,我们查找明文攻击.zip的CRC的时候应该从第二个特征头开始查)

第二步:使用工具进行明文攻击,这里使用AZPR进行明文工具
在这里插入图片描述
在这里插入图片描述
得到未压缩文件

1.7.练习7

了解CRC碰撞
CRC32:CRC本身是“冗余校验码”的意思,CRC32则表示会产生一个32bit(8位十六进制数)的校验值。在产生CRC32时,源数据块的每一位都参与了运算,因此即使数据块中只有一位发生改变也会得到不同的CRC32值,利用这个原理我们可以直接爆破出加密文件的内容,但是CRC32值也存在被碰撞的可能,也就是会出现内容不一样但是CRC32值一样的情况,所以利用CRC32碰撞的方法得知压缩文件的内容,一般是在被压缩的文件很小的情况下,在CTF中一般为4个字节。
使用下面的python脚本进行破解

# -*- coding:utf-8 -*-
import zipfile
import string
import binascii
#构造字符集,因为题目提及是base64字符串,所以使用大小写字母+数字+‘+/=’
dic = string.ascii_letters + string.digits + '+/='
#具体碰撞CRC的函数
def CrackCRC32(crc_str):
	#从字符集中依次取出字符组成四位字符串进行碰撞
	for i in dic:
		for j in dic:
			for p in dic:
				for q in dic:
					s = i + j + p + q
					if crc_str == (binascii.crc32(s) & 0xffffffff):
						print "Cracking Successfuly"
						#碰撞成功后将碰撞出的内容写入flag.txt文件中
						flag.write(s)
						return 
#选择ZIP文件的函数
def CrackZIP():
	for i in range(1,5):
		file = str(i) + ".zip"
		#获取压缩包中文件的CRC32值
		f = zipfile.ZipFile(file,'r')
		GetCRC32 = f.getinfo(str(i) + ".txt")
		crc_str = GetCRC32.CRC
		print "Cracking........" + file
		CrackCRC32(crc_str)

flag = open('flag.txt','wb')
CrackZIP()
flag.close()

1.8.练习8

打开压缩文件发现文件损坏,需要修复文件
打开发现文件头异常, 将文件头修改后解压
在这里插入图片描述

1.9.练习9

从预备知识中我们知道,ZIP压缩文件目录结束标识位为“504B0506”,且通常带有18字节(在预备知识中我们将每个偏移量视作一位,也是一个字节)的冗余数据,总共长度一般为22个字节,所以这个套路就是将隐藏信息分为多片隐藏在多个压缩包的结尾。
在这里插入图片描述

1.10.练习10

双击打开flag.zip,会发现旁边多出了一个注释框,而这个注释框只有在这个压缩文件存在注释的情况下才会显示。
在这里插入图片描述

2.基于BinWalk实现文件提取

2.1.预备知识

BinWalk

BinWalk是一款固件分析工具,旨在协助研究人员对固件进行分析、提取及逆向工程之用。BinWalk简单易用,支持自动化脚本、自定义签名、提取规则和插件模块。BinWalk的使用方法十分简单,提供待分析的文件路径即可。

BinWalk常用于识别任意二进制数据块中所包含的指定类型的文件数据。

AES算法

AES(高级加密标准)是一个对称分组密码算法,旨在取代DES(数据加密标准)成为广泛使用的标准,其加密过程比较复杂,分为字节代替、行移位、列混淆、轮密钥加四个步骤,具体的实现过程大家可以参考《密码编码学与网络安全——原理与实践》(第五版)一书第五章的内容。

AES加密算法明文分组的长度为16字节(即128位),密钥的长度可以是16,24或32字节(即128,192或256位)。根据密钥的长度,算法相应的最称之为AES-128、AES-192或AES-256。

AesKeyFind

AesKeyFind是一款用于搜寻文件中可能存在的AES key的工具,在Linux下可以通过sudo apt-get install aeskeyfind快速进行安装,Windows版本可以从页面http://jessekornblum.livejournal.com/269749.html下载到。

PyCrypto库

PyCrypto是一个密码学相关的Python扩展库,支持AES、DES、RSA等各种主流加密算法的加解密操作。

2.2.镜像文件提取数据

看到文件夹里有个data.7z解压后为data.img是镜像文件,我们用binwalk进行分析
在这里插入图片描述
等待扫描完毕之后我们就可以打开res.txt来查看扫描结果了。通常来说在数据文件中可能会存在Zip文件或者Rar文件,这里使用Notepad++打开res.txt文件,搜索关键字Zip archive data,一共找到四个搜索结果,如下图所示:
在这里插入图片描述
仔细对比可以看出,这四个压缩包中的文件名都是data_encrypted,而且大小都是一样的,所以这四个文件的数据可能是一样的。我们定位到第一个Zip文件,从BinWalk的扫描结果可以看出数据的起始地址为0xE69AD04,数据的结束地址为0xE69ADD0。不过这里再次强调一下,Windows下安装的BinWalk扩展包对Zip结束位置的扫描结果并不完全准确,Zip末尾22字节的数据会被忽略,所以这里正确的结束位置应该是0xE69ADD0 + 22 = 0xE69ADE6,即Zip文件的数据范围为0xE69AD04 ~ 0xE69ADE6。

现在我们可以编写一个Python脚本来提取这一段数据,Python脚本位于C:\CTF\DiskForensics\1\extract.py,源代码如下所示:

def extract_file(src, dst, beg, end):
# 打开data.img文件
f = open(src, "rb")
# 移动文件指针到zip起始位置
f.seek(beg)
# 读取zip文件的数据
data = f.read(end - beg
# 关闭文件
f.close()
# 打开目标文件
f = open(dst, "wb")
# 写入zip文件的数据
f.write(data)
# 保存文件
f.close()

if __name__ == "__main__":
extract_file("data.img", "res.zip", 0xE69AD04, 0xE69ADE6)

解压提取出来的ZIP文件,使用Notepad++打开之后发现是乱码,那么可以使用十六进制编辑器来看看文件中的数据。选中data_encrypted文件后单击右键,选择发送到C32Asm,就可以使用C32Asm来打开文件了,打开后可以看出文件的长度为48字节,但是从文件的内容看不出来是什么加密算法。

考虑到AES加密算法分组的长度为16字节,所以这里可能是AES加密算法(3个分组长度),但是AES加解密是需要KEY的,我们可以使用AesKeyFind工具来扫描一下data.img文件。打开CMD命令提示符并切换到C:\CTF\DiskForensics\1目录,执行aeskeyfind data.img命令开始扫描,可以看到扫描出了3个结果,其中前面2个结果是一样的,如下图所示:
在这里插入图片描述
现在我们编写一段Python脚本来进行解密:

from Crypto.Cipher import AES

def decrypt(filename, keys):
    # 读取密文数据
    data = open(filename, "rb").read()
    # 遍历密钥列表
    for key in keys:
        # 去除空格
        key = "".join(key.split(" "))
        # 16进制解码
        key = key.decode("hex")
        # 打印解密结果
        print AES.new(key, AES.MODE_ECB).decrypt(data)  

if __name__ == "__main__":
    # aeskeyfind扫描到的密钥
    keys = ["3a e3 83 e2 16 3d d4 42 70 28 4f 15 54 d9 be 8d",
            "cd a2 bd c8 f2 0c 46 db 21 6c 0a 61 6c d1 1e 11"]
    # AES解密
    decrypt("data_encrypted", keys)

3.结构化文件信息隐藏

3.1.预备知识

1、结构化信息隐藏概述
结构化文件信息隐藏的特点是利用结构化文件的特点,通过人为改变结构化文件的某部分来隐藏信息,可利用的载体有超文本文件、PDF文件等。结构化文件信息隐藏的位置相对比较固定,因此隐藏算法的鲁棒性较差,通过对文件结构特征分析就能判断载体中是否隐藏信息。
2、wbStego软件介绍
wbStego软件可在TXT、HTML和PDF等文件中隐藏秘密信息,而且秘密信息在嵌入载体文件之前就已经加密。wbStego中基于PDF文档的隐写算法原理是:按字节搜索PDF文件,在PDF文档的两个间接对象的字节之间,把需嵌入的秘密信息按照字节加密后放置其中。
表1和表2说明wbStego算法嵌入数据后的PDF隐藏文件的物理结构。
在这里插入图片描述
表1 PDF文档的物理结构
在这里插入图片描述
表2 嵌入数据后的PDF隐藏文件的物理结构

(1)选择encode
在这里插入图片描述
(2)选择要隐藏的信息
在这里插入图片描述

4.隐写

4.1.图片隐写

注意在PNG图片格式中,PNG数据由一个一个数据块(Data Chunk)组成。每个数据块都有一个4字节长度的标识,典型的有IHDR、IDAT、IEND等。完整的PNG数据总是以一个IHDR块开头,最终以一 个IEND块结束的,而真正表示图像数据的IDAT块则嵌在IHDR块和IEND块之间。这里可以猜测在BMP图片的末尾附加了一个PNG图片,那么继续往上查找,我们看到了IHDR标志,找到IHDR前面的PNG标志,复制出PNG数据。

TrID

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

TrID通过附加的文件类型指纹数据库来进行匹配,可用于取证分析、未知文件识别等用途。

BinWalk

BinWalk是一个固件的分析工具,旨在协助研究人员对固件进行分析,提取及逆向工程用处。简单易用,完全自动化脚本,并通过自定义签名,提取规则和插件模块,还重要一点的是可以轻松地扩展。最简单的使用方法很直接,提供文件路径和文件名即可。

StegHide

Steghide是一个隐写程序,其可以将数据隐藏在各种图片文件以及音频文件之中。Steghide可以对隐写的数据进行加密和压缩操作。
在这里插入图片描述
看到有passphrase知道要用stegHide提取隐写数据
在这里插入图片描述

def SaveFile(filename, data):
    f = open(filename, "wb")
    f.write(data)
    f.close()

def SplitFile():
    f = open("Misc200.jpg", "rb")
    data = f.read()
    f.close()
    SaveFile("1.jpg", data[:0x3416A])
    SaveFile("2.zip", data[0x3416A:0x8AB5F])
    SaveFile("3.jpg", data[0x8AB5F:])
    
if __name__ == "__main__":
    SplitFile()

StegDetect
Stegdetect通过统计测试来分析图像文件中是否包含隐藏内容,它运行静态测试以判断隐藏的内容是否存在。此外,它还会尝试识别隐藏内容是通过哪个隐写工具嵌入的。

如果检测结果显示该文件可能包含隐藏信息,那么Stegdetect会在检测结果后面使用1~3颗星来标识隐藏信息存在的可能性大小,3颗星表示隐藏信息存在的可能性最大。

InvisibleSecrets
Invisible Secrets是一套简单易用的文件加密软件,可以使用它为重要文件或是整个文件夹进行加密。该软件可以在 JPG 文件里面附带加密文本信息。

4.1.1.matlab图像处理

MATLAB命令窗口中常见的命令及功能:
在这里插入图片描述
矩阵处理主要有以下几种方式:
(1)矩阵代数运算。矩阵的代数运算包括矩阵的基本运算和点运算,这部分内容需要重点区分基本运算和点运算。其中基本运算包括常见的矩阵加减运算、乘运算、除运算和乘方运算。点运算是MATLAB中的一种特殊运算,点运算符有“.*(点乘)”、“./(点右除)”、“.(点左除)”、“.^”。两个矩阵的点运算是指它们的对应元素进行相关运算,要求两矩阵的维数相同。
(2)特殊矩阵。MATLAB还为用户提供了若干特殊函数用于创建特殊矩阵,用户根据需要设置参数,并调用函数命令,即可快捷地得到所需矩阵。常用的特殊矩阵函数如下表所示。
在这里插入图片描述
(3)矩阵访问。当用户创建各种矩阵后,需要在各个场合中访问矩阵。矩阵的子矩阵访问类似于向量的子向量访问,常用的子矩阵访问指令如下:
在这里插入图片描述
图像信息查询:
MATLAB中imfinfo函数用于查询图像文件的信息,其调用格式有两种:
(1)info=imfinfo(‘filename,fmt’):获取指定文件filename的相关信息,并指定其文件格式为fmt。如果图片的路径和MATLAB的工作路径不一致,就要写成下面(2)中的格式;
(2)info=imfinfo(‘路径’):获取指定路径的文件。

图像读取:
MATLAB中提供的imread函数用于实现图像文件的读取操作,其调用格式为:A=imread(‘filename,fmt’),其中,filename为需要读入的图像文件名,fmt为图像格式,如果不指定fmt参数,则系统根据文件名自动判别图像类型,如果要读取的图像路径与工作路径不一致则需将函数参数修改为图像具体路径。具体实例如下:
>>A=imread(‘picture.jpg’); %图片路径与工作路径一致,图片类型为jpg
>>A=imread(‘D:\matlab\picture.jpg’); %图片路径与工作路径不一致

图像显示:
MATLAB中提供的imshow函数用于显示一幅图像,该函数将自动调用图像窗口、坐标和图像属性。在读入整张图片之后,我们可以在命令行窗口用imshow( )命令将图片显示出来:
>> clear all
figure(1); %显示一个窗口
figure(2); %显示两个窗口
I=imshow(‘D:\matlab\picture.jpg’);%显示图像
title(‘picture’);%图像标题
在命令行窗口输入命令时,直接按Enter键将会执行这一行的指令,按Shift+Enter可以换行输入多个指令再执行。MATLAB中figure( )函数用于生成多个图像显示窗口,如果想把好几张图像显示在一个窗口里面,可以用subplot( )函数实现:
>> clear all
figure(1); %显示一个窗口
subplot(2,2,1); %将窗口分为2x2共四部分,在第一个位置上显示图像
I=imshow(‘D:\matlab\picture.jpg’);%显示图像
title(‘picture’);%图像标题
subplot(2,2,4); %在第4个位置显示图像
I=imshow(‘D:\matlab\autumn.jpg’); %显示图像
title(‘autumn’);

为了查看图片上某点坐标的GBG值(或者灰度值),我们可以使用下面的函数:
impixelinfo;
在显示图像后输入impixelinfo命令,图片左下角会出现一行信息,随着鼠标的滑动,显示不同点的坐标和RGB信息(或灰度值信息)

图像写入:
MATLAB中提供的imwrite函数用于实现图像文件的写入操作,其调用格式如下:
imwrite(A,filename,fmt):用于把图像数据A写入到由finame指定的输出文件中,存储格式由fmt指定。
可以用来转换图片格式,jpg->png,实例如下:
>>I=imread(‘D:\matlab\picture.jpg’);
imwrite(I,‘newpicture.png’,‘png’);
也可以写入到指定的路径当中,实例如下:
>>I=imread(‘D:\matlab\picture.jpg’);
imwrite(I,‘D:\matlab\newpicture.jpg’);

灰度图像转换为二值图像、索引图像:
(1)MATLAB中提供的gray2ind函数用于将灰度图像转换为索引图像,其调用格式如下:
[X,map]=gray2ind(I,n):表示按指定的灰度级数n将灰度图像I转换为索引图像X,n的默认值为64。
(2)grayslice函数也用于将灰度图像转换为索引图像,但与gray2ind函数有所不同,其调用格式为:
X=grayslice(I,n):将灰度图像I均匀量化为n个等级,然后转换成索引图像
(3)im2bw函数通过设定亮度阈值将灰度、真彩、索引图像转换为二值图像,其调用格式为:
BW=im2bw(I):将灰度图像I转换成二值图像

索引图像转换为灰度图像、二值图像、真彩色图像
(1)ind2gray函数用于将索引图像转换为灰度图像,其调用格式为:
I=ind2gray(X,map):表示把索引图像X(色图map)转换成灰度图像。ind2gray函数其实就是从输入图像中删除色彩和位置信息,只保留亮度。
(2)im2bw函数用于将索引图像转换为二值图像,调用格式为:
BW=im2bw(X,map):将索引图像X转换成二值图像。
(3)ind2rgb函数用于将索引图像转换为真彩色图像,其调用格式如下:
RGB=ind2rgb(X,map):输入图像X可以是uint8、uint16或者double类型,输出图像是double类型的mn3矩阵。

真彩色图像转换为灰度图像、索引图像、二值图像:
(1)MATLAB中提供的rgb2gray函数用于将真彩色图像转换为灰度图像,其调用格式如下:
I=rgb2gray(RGB):将真彩色图像RGB转换成灰度图像I
(2)rgb2ind函数用于将真彩色图转换为索引图像,其调用格式如下:
[X,map]=rgb2ind(RGB,n):表示以最小量化把真彩色图像(RGB)转换成索引图像,n必须不大于65536,map至多有n中颜色。
(3)im2bw函数通过设定亮度阈值将灰度、真彩、索引图像转换为二值图像,其调用格式为:
BW=im2bw(RGB):将RGB图像转换成二值图像

图像加密:
(1)基于像素点RGB值放大加密

a=imread('D:\matlab\color.jpg'); %读取要加密的图像,
r=rand(size(a))*100; %size(a)是获取矩阵的大小,返回矩阵行数列数,这里用rand()函数随机生成一个和a大小相同的矩阵并且乘以100,可尝试修改加密倍数观察加密效果
rgbd=im2double(a); %将a转为双精度,因为rand()函数身材的r矩阵精度较高,a矩阵与r矩阵相乘就需要提升a矩阵的精度
rgbs=rgbd.*r; %通过矩阵的点乘运算实现grb值放大加密
%b=imwrite(rgbs,'D:\matlab\encrypt1.jpg');
%如有需要可将加密后图像用imwrite()函数保存
rgbe=rgbs./r; %通过矩阵的点除运算实现rgb值缩小解密
%显示图像
subplot(1,3,1);imshow(a);title('原图'); %subplot()函数用于将多个图画到一个平面上,前两个参数1,3表示分为1行3列,第三个参数1,表示1行3列中第一个位置
subplot(1,3,2);imshow(rgbs);title('加密后');
subplot(1,3,3);imshow(rgbe);title('解密后');

(2)基于行列像素点置乱加密。
比如有一个4行6列的矩阵,初始行顺序是(1,2,3,4),生成的行随机数列为(2,4,3,1),则重新排列时将矩阵的第1行置于第四行,依次类推,得到行加密后的图像,在行加密的基础上再用同样的方法进行列加密。一个图像的像素大小就是它的矩阵大小,由于一般图像的矩阵行数列数都比较多,因此可以用这样的加密方法来隐藏图像信息。

Lena = imread('D:\matlab\color.jpg'); %读取图像
subplot(2,3,2);imshow(Lena);%显示原图    
title('原图')
[M,N]   = size(Lena);%获取原图的行数和列数,M为行数,N为列数。
Rm      = randsample(M,M)';%随机产生M个不相同的不大于M的数   
Mchange = [1:1:M;Rm];
Rn      = randsample(N,N)';%随机产生N个不相同的不大于N的数
Nchange = [1:1:N;Rn];
%打乱行顺序
Lena (Mchange(1,:),:) =Lena (Mchange(2,:),:);%按照随机生成的Rm序列中的顺序对原图矩阵的行重新排列
subplot(2,3,3);imshow(Lena);
title('行加密')
%打乱列顺序
Lena (:,Nchange(1,:)) =Lena (:,Nchange(2,:));%按照随机生成的Rn序列中的顺序对原图矩阵的列重新排列
subplot(2,3,4);imshow(Lena);
title('列加密')
%列变换还原
Lena (:,Nchange(2,:)) =Lena (:,Nchange(1,:));%逆向还原
subplot(2,3,5);imshow(Lena);
title('列解密')
%行变换还原
Lena (Mchange(2,:),:) =Lena (Mchange(1,:),:);%逆向还原
subplot(2,3,6);imshow(Lena);
title('解密')

(3)基于灰度置乱加密
灰度图片被看成是许多个由值在0~255之间的像素点组成的图像,255表示白色,0表示黑色,黑白之间存在256个灰度级。灰度置乱加密是对图像的灰度值进行一定的运算操作来打乱重置,以此隐藏原图的信息。该算法适用于灰度图像,在实际应用中可将彩色图像转化为灰度图像使用。

I=imread('D:\matlab\girl.bmp');%读取原图,原图大小为256*256
%I=imread('D:\matlab\color.jpg');
A=rgb2gray(I);%将图像转为灰度图像,如果读入的图像本身就是灰度图像,此句没有意义   
subplot(1,3,1);%最终显示图像为一行三列,原图保存在第一个位置
imshow(I);     %显示原图
title('原图'); %在显示的图像上面加上标题“原图”
[x,y]=size(A);%获取原图A矩阵的大小,返回行数和列数,x表示函数,y表示列数
Gadd=fix(255*rand(x,y));%生成与原图大小相同的随机矩阵

%灰度值置乱加密
 for m=1:x
    for n=1:y
        A1(m,n)=0.1*A(m,n)+0.9*Gadd(m,n);%重置每个像素点的灰度值
    end
end
subplot(1,3,2);%加密后的图像显示在一行三列的第二个位置
imshow(A1); %显示加密后的图像
title('加密后');%将图像标题显示为“加密后”

%逆向解密
for m=1:x
    for n=1:y
        A2(m,n)=(A1(m,n)-0.9*Gadd(m,n))/0.1;%逆向恢复每个像素点的灰度值
    end
end
subplot(1,3,3);
imshow(A2);
title('解密后');

4.1.2.LSB算法

全称为Least Significant Bit,在二进制数中意为最低有效位,一般来说,MSB(最高有效位)位于二进制数的最左侧,LSB位于二进制数的最右侧。
由于图像的每一个像素点都是由RGB(红、绿、蓝)三原色组成,而这三种颜色又可以组合成各种其它颜色,每个颜色占8位(如#FFFFFF),LSB隐写即是修改每个颜色值的最低一位,将其替换为我们想要嵌入的信息中的内容,以此来实现数据隐藏。
一个像素点包含三种颜色,每个颜色修改最后1位,这样一个像素点就可以携带3位信息。
应用LSB算法的图像格式需为位图形式,即图像不能经过压缩,如LSB算法多应用于png、bmp等格式,而jpg格式较少。

4.2.音频隐写

S-Tools是一个时(空)域数字水印软件,支持WAV格式的音频文件、GIF和BMP格式的图像文件,本节介绍基于音频文件的隐藏原理和使用方法。
WAV格式的音频文件在Windows 中存储为8或16位值,对于8位样本,这意味着取值范围介于0和255之间。 16位的样本取值范围介于0和65535之间 。S-Tools在WAV格式的音频文件中隐藏信息时,首先用密码加密,然后根据密码决定要嵌入信息的位置,采用LSB(least significant bits)方法,把秘密信息代替载体音频文件的最不重要比特位。
例如,假设一个音频文件有以下8个字节的信息,分别为:
132 134 137 141 121 101 74 38
二进制表示为:
10000100 10000110 10001001 10001101 01111001 01100101 01001010 00100110
如果要隐藏二进制字节11010101 ( 213 )在这个序列。简单地取代了音频文件的LSB (最低有效位)进行信息隐藏。因此上述顺序将变更为:
133 135 136 141 120 101 74 39
二进制表示为:
10000101 10000111 10001000 10001101 01111000 01100101 01001010 00100111
这样,秘密信息就隐藏在载体音频文件中,音频文件在听觉效果上和原始文件几乎没有区别。
在这里插入图片描述

二、MP3Stego

MP3Stego可以把任何敏感数据压缩隐藏到MP3音乐文件中,数据首先被进行压缩和加密处理,然后将其隐藏到MP3音乐流数据中。
在这里插入图片描述

Audacity

三、Audacity
是一款自由且免费的音频编辑器和录音器。它是在Linux下发展起来的,有着傻瓜式的操作界面和专业的音频处理效果。使用Audacity可以帮助我们快速解决CTF中一些音频相关的题目。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.流量分析

5.1.wireshark基本操作

Filter表达式规则
在这里插入图片描述
可以使用多个表达式,表达式之间的逻辑运算符为 AND/ OR。
常用的过滤表达式:
在这里插入图片描述
点击Filter,就会弹出如下窗口,这里面默认就有一些常用规则了。可以添加,也可以修改。
在这里插入图片描述

5.2.wireshark文件还原

(1)先筛选过滤 HTTP.request.method=“POST”
(2)跟随TCP流
(3)保存为bin文件
(4)使用winhex提取图片

5.3.SSL取证

SSL(Secure Socket Layer)安全套接层是Netscape公司率先采用的网络安全协议。它是在传输通信协议(TCP/IP)上实现的一种安全协议,采用公开密钥技术。SSL广泛支持各种类型的网络,同时提供三种基本的安全服务,它们都使用公开密钥技术。

SSL协议交互过程中,服务器返回的ServerHello消息中会包含有SessionID。客户端(浏览器端)通过一个名为ssl_session_st的结构体存储SSL相关的密钥参数,其中ssl_session_st的部分数据结构表示如下:
在这里插入图片描述
其中session_id_length表示session_id的长度,而session_id存储的就是服务器返回的SessionID。

(1)SessionID:去ServerHello包中找
在这里插入图片描述
(2)找到SSL通信的MasterKey
打开通信dump文件,搜索SessionID所在的位置
我们搜索到SessionID之后,可以对附近的内存进行分析。其中SessionID之前20 00 00 00即0x00000020,为SessionID的长度,而我们知道SessionID长度之前就是MasterKey的长度以及MasterKey,其中长度为0x30,内容为191E5042E6B31371AA65258E13B2DC714D984DF8D68FAD678FF0A2FC49476D65C3A161F718572C3F5DB8566A0DE89E58,如下图所示:
在这里插入图片描述
(3)构造SSL解密文件
RSA Session-ID:19ab5edc02f097d5074890e44b483a49b083b043682993f046a55f265f11b5f4 Master-Key:191E5042E6B31371AA65258E13B2DC714D984DF8D68FAD678FF0A2FC49476D65C3A161F718572C3F5DB8566A0DE89E58

将上面的内容保存为key.txt,注意文件末尾一定要有一个换行符,不然无法正确解析HTTPS通信内容。然后在Wireshark中依次选择菜单项“Edit”、 “Preferences”、“Protocols”、“SSL”,在“(Pre)-Master-Secret log filename”右侧的Browser按钮选中key.txt文件,然后点击确定按钮,如下图所示:
在这里插入图片描述
现在选中任意一条TLS通信记录,然后右键选择“Follow SSL Stream”,就可以看到明文通信内容了

6.编码解码

6.1.base64编码

Bash64编码的应用:

Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。

然而,标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。

为解决此问题,可采用一种用于URL的改进Base64编码,它不仅在末尾去掉填充的’='号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。

另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“/”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。

此外还有一些变种,它们将“+/”改为“-”或“.”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。

其他应用:

Mozilla Thunderbird和Evolution用Base64来保密电子邮件密码

Base64 也会经常用作一个简单的“加密”来保护某些数据,而真正的加密通常都比较繁琐。

垃圾讯息传播者用Base64来避过反垃圾邮件工具,因为那些工具通常都不会翻译Base64的讯息。

在LDIF档案,Base64用作编码字串。

6.2.摩斯电码

摩尔斯密码是替换密码的一种,通过特定的密码置换表对相应的字符进行转换就是摩尔斯密码的编码原理,由于转换方式太过于简单以及编码之后特征太明显,到了今天我们已经很难从影视作品或是简单的ctf竞赛题目之外来找到摩尔斯密码的应用了,但不可否认他在密码学的发展过程中所起到的作用,通过学习摩尔斯密码我们也可以初步体会到替换密码的魅力。
以下就是摩尔斯密码的替换表。
26个字母的摩斯密码表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.3.栅栏密码

我们以2栏栅栏密码为例来讲解它的加密和解密过程。

比如明文:THERE IS A CIPHER

两个一组,得到:(TH) (ER) (E ) (IS) ( A) © (IP) (HE) (R )

先取出第一个字母:TEEI IHR

再取出第二个字母:HR SACPE

连在一起就是:TEEI IHRHR SACPE

还原为所需密码。

而解密的时候,我们先把密文从中间分开,变为两行:

TEEI IHR

HR SACPE

再按上下上下的顺序组合起来:

THERE IS A CIPHER

6.4.二维码

6.4.1.二维码基础知识

首先,我们先说一下二维码一共有40个尺寸。官方叫版本Version(版本)。Version 1是21 x 21的矩阵,Version 2是 25 x 25的矩阵,Version 3是29的尺寸,每增加一个version,就会增加4的尺寸,公式是:(V-1)*4 + 21(V是版本号) 最高Version 40,(40-1)*4+21 = 177,所以最高是177 x 177 的正方形。

二维码格式示例如下:
在这里插入图片描述

6.4.2.定位图案

Position Detection Pattern是定位图案,就是每个二维码都有的左上、左下和右上三个角的“回”字形的标志。用于标记二维码的矩形大小。这三个定位图案有白边叫Separators for Postion Detection Patterns。之所以三个而不是四个意思就是三个就可以标识一个矩形了,扫描器在进行二维码扫描的时候会根据这三个定位标识符来更正二维码的坐标,方便进行扫描。这块区域的尺寸固定,无论是哪个版本的二维码,他的尺寸都是77的模块。
在这里插入图片描述
Alignment Patterns 只有在Version 2以上(包括Version2)的二维码中需要这个东西,同样是为了定位用的。它的尺寸也是固定的,为5
5的模块。
在这里插入图片描述
Timing Patterns也是用于定位的,是一单位宽的黑白交替点带,由黑色起始和结束。原因是二维码有40种尺寸,尺寸过大了后需要有根标准线,不然扫描的时候可能会扫歪了。

6.4.3. 功能性数据

Format Information 存在于所有的尺寸中,用于存放一些格式化数据的,主要内容为“纠错码等级(3bit)+掩码类别(2bit)+BCH code(10bit,用于纠错)”,然后这15个bits还要与101010000010010做XOR操作,主要是为了如果选用了00的纠错级别和000的Mask,从而造成全部为白色,这会增加扫描器的图像识别的困难。比如:
在这里插入图片描述
而这15个bit在format information区域内的分布如下
在这里插入图片描述
Version Information 在 >= Version 7以上,需要预留两块3 x 6的区域存放一些版本信息。

6.4.4.数据码和纠错码

除了上述的那些地方,剩下的地方存放 Data Code 数据码 和 Error Correction Code 纠错码。就是最前面两张图的深灰色区域,一般数据都是从右下角开始填充,先填充数据码,数据码填充完毕之后再填充纠错码,以version1为例,数据的填充顺序,是这样的:
在这里插入图片描述

6.5.JSFuck

JSFuck是一种基于JavaScript原子部分的晦涩的编程风格,它只有6种字符:[]()!+ ,也可以来编写程序并执行,可以做到所有JavaScript能做的事情,并且它还不依赖浏览器。使用JSFuck对JavaScript进行编码,一定条件可以绕过黑名单系列的过滤。

对于经过JSFuck编码后的JavaScript代码,要查看其运行结果非常简单,直接在页面中进行调用即可,或者在Chrome浏览器的开发者工具中的Console中执行即可。

6.6.BrainFuck

Brainfuck,是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。由于fuck在英语中是脏话,这种语言有时被称为brainfck或brainf**,甚至被简称为BF。

网上提供了许多BrainFuck编程语言的解释器,把代码贴上去就可以看到执行结果了。

++++++++++++++++++++++++++.>

6.7.uuencode

UUencode是一种二进制到文字的编码,它不是MIME编码中一员。最早在Unix 邮件系统中使用,全称Unix-to-Unix encoding。它也是定义了用可打印字符表示二进制文字一种方法,并不是一种新的编码集合。Uuencode将输入文本以每三个字节为单位进行编码,如果最后剩下的资料少于三个字节,不够的部份用零补齐。三个字节共有24个Bit,以6-bit为单位分为4个组,每个组以十进制来表示所出现的字节的数值。这个数值只会落在0到63之间。然后将每个数加上32,所产生的结果刚好落在ASCII字符集中可打印字符的范围之中。跟Base64具有非常多的类似,也做了一些特殊转码说明。

网上提供了许多进行uuencode编码和解码的在线页面。

如begin 644以及end等,因此我们可以尝试在Google中搜索begin 644这个关键词,我们很快就可以知道这是uuencode编码

6.8.凯撒密码

在密码学中,凯撒密码是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。

6.9.ROT13

ROT13是凯撒密码的一种变体,即移位数为13。ROT13是它自己本身的逆反,也就是说,要还原ROT13,应用加密同样的算法即可得,故同样的操作可用再加密与解密。

6.10.QWERTY键盘编码

目前使用最广泛的键盘布局是QWERTY键盘布局,有时在CTF比赛中出现一些比较奇怪的字符串,这些字符串的特性是每个单词的组成字符都是集中在QWERTY键盘布局中的某一个位置,这些单词通常都可以识别为一个单一的字符。

6.11.Exif

Exif是一种图象文件格式,它的数据存储与JPEG格式是完全相同的。实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及全球定位系统(GPS)、缩略图等。简单地说,Exif=JPEG+拍摄参数。

注意:Windows XP自带的文件属性选项可能无法正常查看Exif信息。

6.12.MD5反查

所谓MD5反查,就是指通过MD5哈希值查找出原始的明文字符串,因为MD5是不可逆的,对于比较短的内容我们可以通过暴力破解的方式来还原,对于比较长的内容基本上就只能通过反查网站来实现了。常见的MD5反查网站有:

http://www.cmd5.com/

http://www.xmd5.com/

并不是所有的MD5哈希值都可以反查得到原始内容,以上网站能查找到常见的MD5值,当然部分需要付费才能看到。

6.13.JavaScript escape()

JavaScript escape()函数采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码。编码的字符串可对通过unescape()进行解码函数。

7.文件恢复

硬盘存储原理
硬盘存储是指以硬盘为存储介质的存储方式,是一种采用磁介质的数据存储设备,数据存储在密封于洁净的硬盘驱动器内腔的若干个磁盘片上。这些盘片一般是在以铝为主要成分的片基表面涂上磁性介质所形成,在磁盘片的每一面上,以转动轴为轴心、以一定的磁密度为间隔的若干个同心圆就被划分成磁道(track),每个磁道又被划分为若干个扇区(sector),数据就按扇区存放在硬盘上。在每一面上都相应地有一个读写磁头(head),所以不同磁头的所有相同位置的磁道就构成了所谓的柱面(cylinder)。

传统的硬盘读写都是以柱面、磁头、扇区为寻址方式的(CHS寻址)。硬盘在上电后保持高速旋转(5400转/min以上),位于磁头臂上的磁头悬浮在磁盘表面,可以通过步进电机在不同柱面之间移动,对不同的柱面进行读写。所以在上电期间如果硬盘受到剧烈振荡,磁盘表面就容易被划伤,磁头也容易损坏,这都将给盘上存储的数据带来灾难性的后果。

硬盘的第一个扇区(0道0头1扇区)被保留为主引导扇区。在主引导区内主要有两项内容:主引导记录和硬盘分区表。主引导记录是一段程序代码,其作用主要是对硬盘上安装的操作系统进行引导;硬盘分区表则存储了硬盘的分区信息。计算机启动时将读取该扇区的数据,并对其合法性进行判断(扇区最后两个字节是否为0x55AA或0xAA55 ),如合法则跳转执行该扇区的第一条指令。所以硬盘的主引导区常常成为病毒攻击的对象,从而被篡改甚至被破坏。可引导标志:0x80为可引导分区类型标志;0表示未知;1为FAT12;4为FAT16;5为扩展分区等等。

Final data
FinalData具有强大的数据恢复功能当文件被误删除(并从回收站中清除)、FAT表或者磁盘根区被病毒侵蚀造成文件信息全部丢失、物理故障造成FAT表或者磁盘根区不可读,以及磁盘格式化造成的全部文件信息丢失之后,FinalData都能够通过直接扫描目标磁盘抽取并恢复出文件信息(包括文件名、文件类型、原始位置、创建日期、删除日期、文件长度等),用户可以根据这些信息方便地查找和恢复自己需要的文件。甚至在数据文件已经被部分覆盖以后,专业版FinalData也可以将剩余部分文件恢复出来。

DiskGenius
DiskGenius是一款专家级数据恢复软件,集数据恢复、硬盘分区、系统备份还原等多种功能于一身。有免费版、标准版与专业版三个版本,其中免费版存在诸多功能上的限制,标准版和专业版需要付费购买,相应的功能也更加全面。
关于DiskGenius的详细用法可以参考官方提供的系列教程,教程地址为http://www.diskgenius.cn/help/index.php。

Linux 文件恢复的原理
在 ext3 和 ext4 文件系统中,每个文件都是通过 inode 来描述其数据存放的具体位置,当文件被删除以后,inode 的数据指针部分被清零,文件目录区没有太多变化。文件的读写都是通过 inode 来实现,当 inode 数据指针被清零以后,即便文件内容还在,也没有办法把文件内容组合出来。当 ext3 和 ext4 文件系统中的元数据 metadata 发生变化时,相应的元数据 metadata 在日志文件会有一份拷贝。比如一个文件被删除了,它的 inode 信息会在日志文件中先保存一份,然后把要删除文件 inode 相关信息清零。这个日志文件是循环使用的,当操作过多时,删除的文件的 inode 日志记录会被新的数据替换,这就彻底丧失了根据 inode 找回数据的机会了。如果是大量文件的删除,这个日志文件会被反复循环利用多次,只留给最后删除的那些文件的恢复机会。

extundelete
extundelete 是一个开源的数据恢复工具,支持 ext3、ext4 文件系统。
执行/usr/local/extundelete/bin/extundelete --restore-all disk2.img来恢复文件;

PhotoRec
PhotoRec是一款用于恢复硬盘、光盘中丢失的视频、文档、压缩包等文件,或从数码相机存储卡中恢复丢失图片的数据恢复软件(因此,该软件命名为Photo Recovery这个名字)。 PhotoRec忽略文件系统,能直接从介质底层恢复数据,因此,在介质的文件系统严重破坏或被重新格式化后,它也能进行数据恢复。
PhotoRec是一款免费的开源、跨多平台的数据恢复软件,受GNU General Public License (GPLV v2+) 的保护. PhotoRec 是TestDisk的伴侣程序, Testdisk是一款支持多种文件系统的丢失分区恢复,并能修复不可启动的磁盘的数据恢复软件。
出于安全考虑, PhotoRec以只读方式来访问您要恢复数据所在的磁盘或存储卡介质。
重要提示:一旦发现丢失或意外删除了某个图片、文件, 请不要继续往该存储设备或磁盘保存新文件;否则您可能会覆盖原来的数据。 这意味着您在使用PhotoRec时,您千万不要将恢复的文件写入到原数据所存储的同一分区。

RamDiskNT
RamDiskNT是一款利用内存模拟技术产生和1.44MB/2.88MB软驱功能一样的虚拟软驱,该工具支持创建以及加载软盘镜像。

软盘镜像是可以直接使用7Zip来打开的,因此我们可以尝试使用7Zip来打开disk1.img文件。鼠标选中disk1.img之后,单击鼠标右键,在弹出的右键菜单中依次选择“7Zip”、“打开压缩包”,7Zip提示“无法作为压缩包打开文件”,如下图所示:
在这里插入图片描述
出现这样的提示可能是因为软盘的文件头数据损坏,我们可以尝试恢复软盘的文件头数据,只需要复制一个正常的软盘文件的头部数据覆盖掉disk1.img头部的数据即可。因此,首先需要找到一个正常的软盘镜像文件,这里使用ramdiskNT来创建一个。

8.取证

8.1.网络验证

NetworkMiner是一款windows平台下开放源代码的网络取证分析工具,同时也是一款比较好的协议分析工具,它通过数据包嗅探或解析PCAP 文件能够检测操作系统,主机名和网络主机开放的端口。
除了能够进行基本的数据包抓取分析NetWorkMiner支持以下功能:
以节点形式展示针对某个主机的通讯信息。
可以通过数据包详细信息查看主机的IP地址、端口、使用协议以及服务器版本、数据包大小等。
可以设置以IP地址或者主机名或者操作系统等其他类别显示数据包。
可以自动通过数据包分析出里面的文件,例如图片、js以及css等其他传输的文件。
可以分析出数据包中的证书信息。
可以分析出http协议中的Session信息和cookie以及其他参数。
支持根据关键词查找功能。
支持对FTP, TFTP, HTTP, SMB 和 SMTP协议的文件提取。

一直以来,大多数人都是使用wireshark进行流量分析、取证等,流量分析当然是wireshark更好,至于流量取证,其实更适合用xplico
1.关于xplico
xplico可以从pcap包中还原出每一封邮件(POP,IMAP,SMTP协议),所有的http内容等等.Xplico并不是协议分析工具,而是网络取证工具。
2.xplico系统构成
一个解码管理器叫做DeMa
一个IP解码器叫做Xplico
一组主要应用解码器(HTTP解码器,SMTP解码器等)
一个结果输出界面
使用之前需要启动apache2服务和xplico服务
在这里插入图片描述
此时浏览器输入ip:9876/users/login即可

关于wireshark
Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

关于p0f
p0f是一款被动探测工具,能够通过捕获并分析目标主机发出的数据包来对主机上的操作系统进行鉴别,即使是在系统上装有性能良好的防火墙的情况下也没有问题。目前最新版本为3.09b。同时p0f在网络分析方面功能强大,可以用它来分析NAT、负载均衡、应用代理等。p0f是万能的被动操作系统指纹工具。p0f对于网络攻击非常有用,它利用SYN数据包实现操作系统被动检测技术,能够正确地识别目标系统类型。和其他扫描软件不同,它不向目标系统发送任何的数据,只是被动地接受来自目标系统的数据进行分析。因此,一个很大的优点是:几乎无法被检测到,而且p0f是专门系统识别工具,其指纹数据库非常详尽,更新也比较快,特别适合于安装在网关中。

关于geoip
可以识别互联网用户的地点位置与其他特征,应用范围广泛。

tshark
wireshark命令行工具

capinfos
wireshark套件中的一个工具软件,它的作用是输出文件的信息capinfos支持所有wireshark支持的文件格式。

8.2.数字取证

关于Autopsy
它是首屈一指的端到端开源数字取证平台。由Basis Technology构建,具有您在商业取证工具中所期望的核心功能,Autopsy是一种快速,全面,高效的硬盘调查解决方案,可根据您的需求而发展。


关于foremost
Foremost是基于文件开始格式,文件结束标志和内部数据结构进行恢复文件的程序
Foremost参数说明
$ foremost[-v|-V|-h|-T|-Q|-q|-a|-w-d] [-t ] [-s ] [-k]
[-b ] [-c ] [-o<dir>] [-i <file]

-V - 显示版权信息并退出

-t - 指定文件类型. (-t jpeg,pdf …)

-d -打开间接块检测 (针对UNIX文件系统)

-i - 指定输入文件 (默认为标准输入)

-a - 写入所有的文件头部, 不执行错误检测(损坏文件)

-w - 向磁盘写入审计文件,不写入任何检测到的文件

-o - 设置输出目录 (默认为为输出)

-c - 设置配置文件 (默认为foremost.conf)

-q - 启用快速模式. 在512字节边界执行搜索.

-Q - 启用安静模式. 禁用输出消息.

-v - 详细模式. 向屏幕上记录所有消息


Scalpel
对那些没有日志机制的旧有文件系统,scalpel 工具是一个很好的选择。scalpel 是快速文件恢复工具,通过读取文件系统的数据库来恢复文件。它是独立于文件系统的。

Bulk_exetractor
一个计算机取证工具,可以扫描磁盘映像、文件、文件目录,并在不解析文件系统或文件系统结构的情况下提取有用的信息,由于其忽略了文件系统结构,程序在速度和深入程度上都有了很大的提高

8.3.内存取证

关于volatility
Volatility是开源的Windows,Linux,MaC,Android的内存取证分析工具,由python编写成,命令行操作,支持各种操作系统。
注册表
注册表是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。早在Windows 3.0推出OLE技术的时候,注册表就已经出现。随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统。

为了选择格式的profile,我们先用imageinfo插件查看一下系统的版本等信息
volatility -f cridex.vmem imageinfo
选择好合适的profile之后我们就可以进行下一步的分析了

为了识别内存镜像中的相关的进程、PID、开始时间等信息我们可以ps相关的插件
volatility --profile=WinXPSP3x86 -f cridex.vmem pslist
volatility --profile=WinXPSP3x86 -f cridex.vmem psscan
psscan命令可以显示出被恶意软件比如rootkit为了躲避用户或杀毒软件而隐藏的进程

volatility可以用来分析和识别隐藏的、终止的、活跃的连接以及相应的端口和进程。可以使用下列的命令
volatility --profile=WinXPSP3x86 -f cridex.vmem connections
volatility --profile=WinXPSP3x86 -f cridex.vmem connscan
connscan比之上一条命令,能列出已经被终止的连接。

volatility --profile=WinXPSP3x86 -f cridex.vmem sockets
sockets插件可以被用来展示出额外的连接信息监听的sockets,sockets插件支持所有的协议。

volatility --profile=WinXPSP3x86 -f cridex.vmem verinfo
verinfo插件可以列出PE文件的版本信息

volatility --profile=WinXPSP3x86 -f cridex.vmem dlllist
dlllist插件可以列出所有正在运行的dll。

关于用户、设置、程序以及操作系统的信息都可以在注册表中找到,甚至被散列了的密码也可以找到,在分析windows注册表时,我们可以使用下面的插件
volatility --profile=WinXPSP3x86 -f cridex.vmem hivescan
hivescan插件显示了可用的注册表配置单元的物理地址
volatility --profile=WinXPSP3x86 -f cridex.vmem hivelist
更加详细的信息可以通过hivelist命令查看,这条命令会显示虚拟地址、物理地址的细节以及更容易识别的路径等
volatility --profile=WinXPSP3x86 -f cridex.vmem timeliner
timeliner插件可以通过提供所有时间发生时的时间线来帮助取证。
volatility --profile=WinXPSP3x86 -f cridex.vmem malfind
malfind插件用于寻找可能注入到各种进程中的恶意软件。使用malfind时也可以使用-p直接指定进程,比如
volatility --profile=WinXPSP3x86 -f cridex.vmem malfind -p 608

mimikatz
mimikatz是一个常用的渗透测试工具,可以直接从lsass.exe进程中抓取Windows密码,同时支持从lsass.exe的dmp文件中分析出Windows密码。
在这里插入图片描述

  • 4
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值