1.bat特征
2.dll
PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)
和其它可执行文件格式一样,PE文件在众所周知的地方有一些定义文件其余部分面貌的域
Signature字段设置为0x00004550,ANCII码字符是“PE00
3.exe
dll和EXE都是PE格式的文件
特征:以MZ开头,中间有PE(0x50 0x45 0x00 0x00) ,紧接着是CPU类型(0x00 0x00 | 0x4c 0x01 | 0x64 0x86),后续是PE
头大小,默认情况下32位PE文件对应值位0xE0,64位PE文件对应值为0xF0(0xe0 0x00| 0xf0 0x00)
exe:0x22 0x00:IMAGE_FILE_EXECUTABLE_IMAGE|IMAGE_FILE_LARGE_ADDRESS_AWARE
0x02 0x01:IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_32BIT_MACHINE
dll:0x22 0x20:IMAGE_FILE_EXECUTABLE_IMAGE|IMAGE_FILE_LARGE_ADDRESS_AWARE | IMAGE_FILE_DLL
0x26 0x20:IMAGE_FILE_EXECUTABLE_IMAGE| IMAGE_FILE_LINE_NUMS_STRIPPED |IMAGE_FILE_LARGE_ADDRESS_AWARE| IMAGE_FILE_DLL
0x26 0x22:IMAGE_FILE_EXECUTABLE_IMAGE| IMAGE_FILE_LINE_NUMS_STRIPPED |IMAGE_FILE_LARGE_ADDRESS_AWARE|IMAGE_FILE_DEBUG_STRIPPED | IMAGE_FILE_DLL
0x2e 0x22:
exe必须带 IMAGE_FILE_EXECUTABLE_IMAGE,且没有IMAGE_FILE_DLL
第一个字节 .... ..1. 第二字节 ..0. ....
dll必须带 IMAGE_FILE_DLL
第一个字节 .... .... 第二字节 ..1. ....
4.lib
lib文件是很多obj文件合在一起得到的一个静态库文件。
lib文件最开头,由8个字符串开始,值为“!<arch>\n”,文件
第一种是静态lib库:静态lib库,包含了所有的代码实现的,是源代码文件.c或.cpp文件编译生成的,这个lib库就是文本形式的源代码编译后的二进制形式代码。(没有特征)
第二种是lib导入库:lib导入库,这个库里只是相应的dll文件中的所有函数在dll文件中的地址的说明。也就是这个lib导入库里没有函数的具体实现,只是对相应的dll文件的说明。(存在特征.dll/)
也就是说目前以.lib为后缀的库有两种,一种为静态链接库(static library,简称“静态库”),另一种为动态链接库(DLL,简称“动态库”)的导入库(import library)。
5.linux: so (动态库)
elf格式,有3个类型
可重定位的目标文件(Relocatable,或者Object File)
可执行文件(Executable)
共享库(Shared Object,或者Shared Library)
E_ident[16]是一个数组,它有16个字节,这16个字节被分为好几个部分,分别代表不同的涵义:
(1)e_ident[0]-e_ident[3]:这四个字节被称为“魔数“(Magic),它们分别是“0x7F“,”E“,”L“,”F“的ASCII码,对所有ELF格式的文件来说,这四个字节是固定的,也就是说,只有当这四个字节是这些值的时候,才代表这个文件是ELF格式的文件。相当于ELF文件的身份证。
(2)e_ident[4]:这个字节给出了这个ELF文件是多少位的:当取“0x1”时,代表这个ELF文件是32位的;当取”0x2”时,代表这个ELF文件是64位的。
(3)e_ident[5]:这个字节给出了这个ELF文件使用的字节顺序:当取”0x1”时,代表小端序,当取”0x2”时,代表大端序。
(4)e_ident[6]:这个字节给出了这个ELF文件头的版本,当前只有一个版本,所以这个字节目前只能取”0x1”
(5)e_ident[7]到e_ident[15]:这九个字节目前还没有实际意义,一般为0,也有的文件会用它们做一些特殊的标记。
●e_type用于区分ELF文件的类型:(系统通过这个数值来判断文件类型,而不是后缀名)
0000:no file type
0001: relocatable file
0002: excutable file
0003: shared object file
6.a(静态库)
和lib文件一样,都是存档文件
lib文件是很多obj文件合在一起得到的一个静态库文件。
lib文件最开头,由8个字符串开始,值为“!<arch>\n”
他把很多的目标文件(*.o)文件打包为单一的库文件。(特征.o/)
7.shell脚本:sh
定义以开头:#!/bin/sh
解释器: /bin/sh /usr/bin/sh
8.shell脚本:bash
定义以开头:
#!/bin/bash
解释器: /bin/bash /usr/bin/bash
9.python:py
代码文件:特征不是特别强
#!/usr/bin/env python
import xxx
from xxx import yyy
10.golang编译的二进制:go
Go二进制文件通常是ELF(Executable and Linkable Format)格式的可执行文件,这是一种在Linux和Unix系统上常见的可执行文件格式。对于Windows系统,则通常是PE(Portable Executable)格式。
linux:linux-exe
windows:exe
11. ruby程序:rb