文件类型识别、取证

1、file命令
当文件没有后缀名或者有后缀名而无法正常打开时,根据识别出的文件类型来修改后缀名即可正常打开文件(在Linux操作系统下使用该命令)
格式: file 文件名

2、strings命令
打印文件中可打印的字符,经常用来发现文件中的一些提示信息或是一些特殊的编码信息,常常用来发现题目的突破口
配合grep命令探测指定信息:
strings 文件名 | grep -i XXCTF
例如:strings webshell.pcapng | grep { #查找带有{ 的字符串

3、十六进制查看器
通过winhex、010editor或notepad++可以查看文件头类型,根据文件头类型判断出文件类型

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
JPEG (jpg),                          文件头:FFD8FF              
PNG (png),    文件头:89504E47 文件尾:0000000049454E44AE426082
GIF (gif),   文件头:47494638
ZIP Archive (zip), 文件头:504B0304 文件尾:00000000
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
RIFF(后缀名不确定) 文件头:52494646

winhex试用期已过窗口绕过方法:点击details(详细),把打开的窗格最小化之后,即可正常使用winhex
notepad++查看十六进制需要下载一个HEX-Editor插件

4、文件头残缺/错误
通常文件无法正常打开有两种情况,一种是文件头部残缺,另一种是文件头部字段错误。针对文件头部残缺的情况,使用winhex程序添加相应的文件头,支队头部字段错误可以找一个相同类型的文件进行替换
一般使用file命令,只显示data,那么就极有可能是文件头残缺或错误


文件分离操作

1、Binwalk工具
binwalk是Linux下用来分析和分离文件的工具,可以快速分辨文件是否有多个文件合并而成,并将文件进行分离,如果分离成功会在目标文件的目录的同目录下生成一个形如
_文件名_extracted等文件目录,目录中有分离的文件
分析方法: binwalk filename
分离方法: binwalk -e filename

2、foremost
如果binwalk无法正确分离除文件,可以使用foremost,将目标文件复制到kali中,成功执行后,会在目标文件的文件目录下生成我们设置的目录,目录中会按文件类型分离出文件
用法: foremost 文件名 -o 输出目录名

3、dd
当文件自动分离出错或者因为其他原因无法自动分离时,可以使用dd实现文件手动分离
格式: dd if=源文件 of=目标文件名 bs=1 skip=开始分离的字节数
参数说明:
if=file #输入文件名,缺省为标准输入
of=file #输出文件名,缺省为标准输出
bs=bytes #同时设置读写块的大小为bytes,可代替ibs和obs
skip=blocks #从输入文件开头跳过blocks个块后再开始复制

这里最后2.txt中内容为12345

真正使用的时候需要配合binwalk使用,binwalk可以分析出文件分离的起始和终止位置

4、Winhex
除了使用dd外,还可以使用winhex实现手动文件分离,将目标文件拖入winhex中,找到要分离的部分,点击复制即可

当给定有个txt文件,里面是16进制的压缩包,这时可以使用010editor导入16进制,再保存成压缩包即可


文件合成操作

Linux下的文件合并
linux下通常对文件名相似的文件要进行批量合并
格式:cat 合并的文件>输出的文件

完整性检测:linux下计算文件md5
格式:md5sum 文件名
(这个操作的原因是因为,你不知道所给部分文件的合并顺序,出题人可能会给出最后合并文件的md5值,这样就可以达到检测合并顺序是否正确的效果)