文件操作

文件操作

文件类型识别

File命令(linux)

当然文件没有后缀名或者有后缀名无法正常打开时,根据识别出的文件类型,来修改后缀名即可正常打开文件。

使用场景:

  • 不知道后缀名,无法打开文件。

语法:

root@kali:~/桌面# file
Usage: file [-bcCdEhikLlNnprsSvzZ0] [--apple] [--extension] [--mime-encoding]
            [--mime-type] [-e <testname>] [-F <separator>]  [-f <namefile>]
            [-m <magicfiles>] [-P <parameter=value>] <file> ...
       file -C [-m <magicfiles>]
       file [--help]

演示:

root@kali:~/桌面# file test
test.php: PHP script, ASCII text

winhex(windows)

通过winhex程序中可以查看文件头类型,根据文件头类型判断出文件类型。

使用场景:

  • 文件头信息判断文件类型。

文件头残缺/错误

通常文件无法正常打开有两种情况,一种是文件头部残缺,另一种是文件头字段错误。针对文件头部残缺的情况,使用winhex程序添加相应的文件头,针对头部字段错误,可以找一个相同的文件进行替换。

使用场景:

  • 文件头部残缺或文件头部字段错误无法打开正常文件。

演示:

  • 原文件头部:

  • 修改后头部

  • 结果:

Administrator@DESKTOP-DKP66HJ MINGW64 ~/Desktop
$ file test.png
test.png: data

文件头类型

常见的文件头类型如图所示

文件类型文件头(hex)
JPEG(jpg)FFD8FFE1
PNG(png)89504E47
GIF(git)47494638
TIFF(tif)49492A00
Window Bitmap(bmp)424DC001
ZIP Archive(zip)504B0304
Adobe Photoshop(psd)38425053
Rich Text Format(rtf)7B5C727466
XML(xml)3C3F786D6C
HTML(html)68746D6C3E
Adobe Arcrobat(pdf)255044462D312E
Wave(wav)57415645
pcap(pacp)4D3C2B1A

文件分离操作

Binwalk命令(Linux)

Binwalk是用来分析和分离的工具,可以快速分辨文件是否多个文件合并而成,并将文件进行分离。如果分离成功会在目标文件的目录。

同目录下生产一个形如_文件名_extracted的文件目录,目录中有分离后的目录。

语法:

root@kali:/home/kali/Desktop# binwalk 

Binwalk v2.2.0
Craig Heffner, ReFirmLabs
https://github.com/ReFirmLabs/binwalk

Usage: binwalk [OPTIONS] [FILE1] [FILE2] [FILE3] ...

演示:

# 显示文件信息
root@kali:/home/kali/Desktop# binwalk abc.png 
(十进制)        (十六进制)        (说明)
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 1080 x 1920, 8-bit/color RGBA, non-interlaced
1376          0x560           Zlib compressed data, default compression
# 显示并导出文件
root@kali:/home/kali/Desktop# binwalk -e abc.png 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 1080 x 1920, 8-bit/color RGBA, non-interlaced
1376          0x560           Zlib compressed data, default compression

foremost命令(Linux)

如果binwalk无法分离出文件,可以使用foremost,将目标文件复制到kali中,成功执行后,会有目标文件的文件目录下生成我们设置的目录,目录会按照文件分离出来文件。

语法:

kali@kali:~/Desktopforemost -h
foremost version 1.5.7 by Jesse Kornblum, Kris Kendall, and Nick Mikus. foremost [-v|-V|-h|-T|-Q|-q|-a|-w-d] [-t <type>] [-s <blocks>] [-k <size>] 
        [-b <size>] [-c <file>] [-o <dir>] [-i <file] 

演示:

kali@kali:~/Desktopforemost abc.png -o abc
Processing: abc.png
|*|
kali@kali:~/Desktop ll abc
总用量 8
-rw-r--r-- 1 kali kali  680 12月 20 07:39 audit.txt
drwxr-xr-- 2 kali kali 4096 12月 20 07:39 png

dd命令(Linux)

当文件自动分离出错或者因为其他原因无法自动分离时,可以使用dd实现文件手动分离。

语法:

kali@kali:~/Desktop$ dd --help
用法:dd [操作数] ...                                                                                     
 或:dd 选项                                                                                             

演示:

# if=file 输入文件名,缺省为标准输入。
# of=file 输入文件名,缺省为标准输出。
# bs=bytes 同时设置读写块的大小为bytes,可以替代ibs和obs。
# skip=blocks 从输入文件开头跳过blocks个块后再开设复制。
Administrator@DESKTOP-DKP66HJ MINGW64 ~/Desktop
$ dd if=helloworld of=helloworld2 bs=3 count=1
1+0 records in
1+0 records out
3 bytes copied, 0.0011023 s, 2.7 kB/s

Winhex(Windows)

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

使用场景:

  • windows下利用winhex程序对文件进行手动分离。
  • 例:新建一个文件,文件大小1byte,在文件开头位置点击粘贴,弹出提示框选否,确定,将文件保存为想要的后缀名即可。

步骤:

  • 选择需要分离数据。

  • 在内容区右击点击编辑。

  • 然后点击至新文件,保存文件即可。

010Editor(Windows)

用法和winhex一样。

步骤:

  1. 选中需要分离的内容。
  2. 在内容区域右击。
  3. 鼠标滑到选择。
  4. 保存选择。

导出与导入hex数据

创建了一个文件,内容名为:“Hello World”,文件名为:“helloworld”。

Administrator@DESKTOP-DKP66HJ MINGW64 ~/Desktop
$ echo "Hello World">helloworld
导出:
  • 使用010Editer打开文件,点击“文件->导出十六进制”。

导入:
  • 打开010Editer,点击“文件->导入十六进制”。

文件合并

Linux下的文件合并

使用场景:

  • Linux下,通常对文件名相似的文件要进行批量合并。

语法:

Administrator@DESKTOP-DKP66HJ MINGW64 ~/Desktop
$ cat --help
Usage: cat [OPTION]... [FILE]...
Concatenate FILE(s) to standard output.

用法:

Administrator@DESKTOP-DKP66HJ MINGW64 /d/Administrator/Downloads/Compressed/gif
$ cat frame-* > frame.gif
校验MD5

语法:

Administrator@DESKTOP-DKP66HJ MINGW64 /d/Administrator/Downloads/Compressed/gif
$ md5sum  --help
Usage: md5sum [OPTION]... [FILE]...
Print or check MD5 (128-bit) checksums.

用法:

Administrator@DESKTOP-DKP66HJ MINGW64 /d/Administrator/Downloads/Compressed/gif
$ md5sum frame.gif
8c04531be5f967091889a7d73cd0847c *frame.gif

Windos下的文件合并

使用场景:

  • Windows下,通常要对文件名相似的文件进行批量合并。

语法:

copy [/d] [/v] [/n] [/y | /-y] [/z] [/a | /b] <source> [/a | /b] [+<source> [/a | /b] [+ ...]] [<destination> [/a | /b]]

用法:

D:\Administrator\Downloads\Compressed\gif>copy /B frame-01.png+frame-02.png+frame-03.png+frame-04.png+frame-05.png+frame-06.png+frame-07.png+frame-08.png+frame-09.png+frame-10.png+frame-11.png+frame-12.png+frame-13.png+frame-14.png frame.gif
frame-01.png
frame-02.png
frame-03.png
frame-04.png
frame-05.png
frame-06.png
frame-07.png
frame-08.png
frame-09.png
frame-10.png
frame-11.png
frame-12.png
frame-13.png
frame-14.png
已复制         1 个文件。
校验MD5

语法:

certutil [options] [-dump]
certutil [options] [-dump] file

用法:

D:\Administrator\Downloads\Compressed\gif>certutil -hashfile frame.gif
SHA1 的 frame.gif 哈希:
8c04531be5f967091889a7d73cd0847c
CertUtil: -hashfile 命令成功完成。