windows PE Image 文件分析(5)--- .rsrc 节与 resource table

来源:互联网 发布:电脑视频剪辑软件中文 编辑:程序博客网 时间:2024/06/11 11:27

windows PE Image 文件分析(5)--- .rsrc 节与 resource table


PE 文件所有使用的 resource table 非常复杂,一个典型的 windows GUI 应用程序普遍都使用到了 7 个左右的资源。

 

1. windows 中的资源

在 WinUser.h 文件里定义了 windows 中所使用的全部资源:

/*
 * Predefined Resource Types
 */
#define RT_CURSOR           MAKEINTRESOURCE(1)
#define RT_BITMAP           MAKEINTRESOURCE(2)
#define RT_ICON             MAKEINTRESOURCE(3)
#define RT_MENU             MAKEINTRESOURCE(4)
#define RT_DIALOG           MAKEINTRESOURCE(5)
#define RT_STRING           MAKEINTRESOURCE(6)
#define RT_FONTDIR          MAKEINTRESOURCE(7)
#define RT_FONT             MAKEINTRESOURCE(8)
#define RT_ACCELERATOR      MAKEINTRESOURCE(9)
#define RT_RCDATA           MAKEINTRESOURCE(10)
#define RT_MESSAGETABLE     MAKEINTRESOURCE(11)

#define DIFFERENCE     11
#define RT_GROUP_CURSOR MAKEINTRESOURCE((ULONG_PTR)(RT_CURSOR) + DIFFERENCE)
#define RT_GROUP_ICON   MAKEINTRESOURCE((ULONG_PTR)(RT_ICON) + DIFFERENCE)
#define RT_VERSION      MAKEINTRESOURCE(16)
#define RT_DLGINCLUDE   MAKEINTRESOURCE(17)
#if(WINVER >= 0x0400)
#define RT_PLUGPLAY     MAKEINTRESOURCE(19)
#define RT_VXD          MAKEINTRESOURCE(20)
#define RT_ANICURSOR    MAKEINTRESOURCE(21)
#define RT_ANIICON      MAKEINTRESOURCE(22)
#endif /* WINVER >= 0x0400 */
#define RT_HTML         MAKEINTRESOURCE(23)
#ifdef RC_INVOKED
#define RT_MANIFEST                        24
#define CREATEPROCESS_MANIFEST_RESOURCE_ID  1
#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID 2
#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID 3
#define MINIMUM_RESERVED_MANIFEST_RESOURCE_ID 1   /* inclusive */
#define MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID 16  /* inclusive */
#else  /* RC_INVOKED */
#define RT_MANIFEST                        MAKEINTRESOURCE(24)
#define CREATEPROCESS_MANIFEST_RESOURCE_ID MAKEINTRESOURCE( 1)
#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(2)
#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(3)
#define MINIMUM_RESERVED_MANIFEST_RESOURCE_ID MAKEINTRESOURCE( 1 /*inclusive*/)
#define MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(16 /*inclusive*/)

在 MSDN 上面有一篇文关于 resource types 的介绍:http://msdn.microsoft.com/en-us/library/ms648009(VS.85).aspx

 

2. .rsrc 节

.rsrc 节装载整个 resouce table 结构和资源的数据,下面是 helloworld.exe 中的 .rsrc 节的信息

.rsrc 节
VirtualSize
0x0000E71C
VirtualAddress
0x00019000
SizeOfRawData
0x0000E800
PointerToRawData
0x00006C00
PointerToRelocations
0
PointerToLinenumbers
0
NumberOfRelocations
0
NumberOfLinenumbers
0
Characteristics
0x40000040

.rsrc 被加载在 0x00419000(ImageBase + VirtualAddress)上,真实的大小为 0xE71C,这是一个很庞大的数据段,它在 image 文件的位置是 0x0006C00,占用文件的 0xE800 空间

 

3. resource table

下面是 helloworld.exe 中所使用的 resource table 信息,它是一个 IMAGE_DATA_DIRECTORY 结构

resource table
VirtualAddress
0x00019000
size
0xE71C

可以看出,resource table 就在 .rsrc 节里,它们的 size 都是一样的。

这个 resouce table 共有 0xE71C bytse,这是一个恐怖的表格,占用大量的空间,所以这个 resource table 是一棵茂密的大树。

下面继续探索整个 resource table 的结构。

 

4. resource table 的整体结构

整个 resource table 由 4 个结构组成:

  • IMAGE_RESOURCE_DIRECTORY 结构
  • IMAGE_RESOURCE_DIRECTORY_ENTRY 结构
  • IMAGE_RESOURCE_DIRECTORY_STRING 结构,或者说是:IMAGE_RESOURCE_DIR_STRING_U 结构
  • IMAGE_RESOURCE_DATA_ENTRY 结构

整个 resource 结构是一个树型结构,只有一个 root(根)节点,然后长出许多的树枝,最后是叶子。

根部和每个树技是一个节点,这个节点由 IMAGE_RESOURCE_DIRECTORY 结构和 IMAGE_RESOURCE_DIRECTORY_ENTRY 结构组成

而 IMGE_RESOURCE_DIRECTORY_STRINGIMAGE_RESOURCE_DIR_STRING_U)结构和 IMAGE_RESOURCE_DATA_ENTERY 都是整个 资源树 末端的 叶子

它的结构图类似下面:

5. 节点的构成

前面说到资源树的节点由 IMAGE_RESOURCE_DIRECTORY 与 IMAGE_RESOURCE_DIRECTORY_ENTRY 构成,它们是怎样组成一个节点的呢?

  • 由 Directory(IMAGE_RESOURCE_DIRECTORY) 指出有多少个 Entry (IMAGE_RESOURCE_DIRECTORY_ENTRY)
  • 然后每个 Entry 再伸延出一个 Directory 或者指出最终的 Data(数据)

事实上 Directory 和 Entry 虽然是两个结构,但它们是一个整体,不存在单独出现的情况


5.1 Driectory(目录)

在 WinNT.h 文件里定义了这个 Directory 结构:

typedef struct _IMAGE_RESOURCE_DIRECTORY {
    DWORD   Characteristics;
    DWORD   TimeDateStamp;
    WORD    MajorVersion;
    WORD    MinorVersion;
    WORD    NumberOfNamedEntries;
    WORD    NumberOfIdEntries;
//  IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[];
} IMAGE_RESOURCE_DIRECTORY, *PIMAGE_RESOURCE_DIRECTORY;

这个结构里的 CharacteristicsMajorVersion 以及 MinorVersion 一直为 0 不使用

NumberOfNamedEntries 代表一个数量,以 "Name" 作为子树的个数。

NumberOfIdEntries 代表一个数量,以 "ID" 作为子树的个数。

而 Directory 引出的 Entry 数量是 NumberOfNamedEntries 与 NumberOfIdEntries 之和,即:NumberOfNamedEntries + NumberOfIdEntries 等于 Entry 的数量

  • Entry 是紧接着 Driectory 存放的。

5.2 Entry(表项)

在 WinNT.h 文件中,Entry 结构的定义为:

typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
    union {
        struct {
            DWORD NameOffset:31;
            DWORD NameIsString:1;
        } DUMMYSTRUCTNAME;
        DWORD   Name;
        WORD    Id;
    } DUMMYUNIONNAME;
    union {
        DWORD   OffsetToData;
        struct {
            DWORD   OffsetToDirectory:31;
            DWORD   DataIsDirectory:1;
        } DUMMYSTRUCTNAME2;
    } DUMMYUNIONNAME2;
} IMAGE_RESOURCE_DIRECTORY_ENTRY, *PIMAGE_RESOURCE_DIRECTORY_ENTRY;

这个结构看上去很复杂,实际上它成员只有 两个 DWORD 成员 ,共 8 bytes,如下:

 typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
    DWORD Name;
    DWORD OffsetToData;
} IMAGE_RESOURCE_DIRECTORY_ENTRY, *PIMAGE_RESOURCE_DIRECTORY_ENTRY;

使用这个看上去很复杂方式定义,它想表达一个策略:

  • 当 Name 的高最位(Bit31)为 1 时: Name[30:0](低 31 位)是一个 offset 指向 IMAGE_RESOURCE_DIR_STRING_U 结构。
    Bit31 为 0 时,Name 表示一个 ID 值。
  • 当 OffsetToData 的最高位(Bit31)为 1 时:OffsetToData[30:0](低 31 位)是一个 offset 指向下一个 Directory 结构。
    Bit31 为 0 时,OffsetToData 仍然是一个 Offset 值,它指向一个 IMAGE_RESOURCE_DATA_ENTRY 结构。

Entry 的职责是给出下一个 Directory 或 Data,从资源树的角度来看,Entry 要么给出下一个节点,要么给出叶子


5.2.1 给出下一个 Directory

此时 Name 是一个 ID 值(即:Bit31 为 0),同时 OffsetToData 指向下一个 Directory 的位置(即:Bit31 为 1)

OffsetToData 提供的这个 Offset 值是基于 resource table 的,例如下面的一个 Entry 是这样的:

// entry[0]
00419010  03 00 00 00     // Name = 0x03 ====> ID = 3 (ICON)
00419014  48 00 00 80     // OffsetToData = 0x80000048

上例上所示,Name 此时表示一个 ID 值(Bit31 为 0),而 OffsetToData 的 Bit31 为 1,此时它提供一个 offset 指向下一个 Directory 的位置。

在这个例子里,resource table 的位址是在 0x00419000,那么下一个 Directory 就在 0x00419048resource table + OffsetToData)位置上。


5.2.2 给出 Data 数据

OffsetToData 的 Bit31 为 0,它指向一个 IMAGE_RESOURCE_DATA_ENTRY 结构,从树的解度来看,它给出一个叶子。下面是个例子:

// Entry[0]
00419180  09 04 00 00                    // ID = 0x409
00419184  98 03 00 00                    // ****** IMAGE_RESOURCE_DATA_ENTRY: 0x00000398

此时 OffsetToData 提供的是 Data (IMAGE_RESOURCE_DATA_ENTRY) 位置,同样这个 Offset 也是基于 resource table 的地址。

那么这个 Data 数据区域在:0x00419398


5.3 节点图

Entry 紧跟着 Directory 存放,它们构成一个节点,Directory 的 NumberOfIdEntries 给出 Entry 的个数 7,那么紧跟着的 Entry 就有 7 个。 每个 Entry 是一个 IMAGE_RESOURCE_DIRECTORY_ENTRY 结构。

那么该节点大小就有 1 个 IMAGE_RESOURCE_DIRECTORY 结构和 7 个 IMAGE_RESOURCE_DIRECTORY_ENTRY 结构,每个节点的大小可能是不相同。


5.4 root 节点

root(根)节点是 resource table 的第 1 个节点,root 就在 resource table 位置上。

以 helloworld.exe 为例,它的 resource table 在 0x00419000(ImageBase + VirtualAddress),下面是它的 root 节点:

// Driectory: (root)
00419000  00 00 00 00 
00419004  00 00 00 00 
00419008  00 00 
0041900A  00 00 
0041900C  00 00            // NumberOfNameEntries
0041900E  07 00            // NumberOfIdEntries

// entry[0]
00419010  03 00 00 00     // ID = 3 (ICON)
00419014  48 00 00 80     // OffsetToData = 0x80000048

// entry[1]
00419018  04 00 00 00     // ID = 4 (MENU)
0041901C  D8 00 00 80     // OffsetToData = 0x800000D8

// entry[2]
00419020  05 00 00 00     // ID = 5 (DIALOG)
00419024  F0 00 00 80     // OffsetToData = 0x800000F0

// entry[3]
00419028  06 00 00 00     // ID = 6 (STRING)
0041902C  08 01 00 80     // OffsetToData = 0x80000180


// entry[4]
00419030  09 00 00 00     // ID = 9 (ACCELERATOR)
00419034  20 01 00 80     // OffsetToData = 0x80000120

// entry[5]
00419038  0E 00 00 00     // ID = 0E (GROUP_ICON)
0041903C  38 01 00 80     // OffsetToData = 0x80000138


// entry[6]
00419040  18 00 00 00     // ID = 0x18 (MAINFEST)
00419044  58 01 00 80     // OffsetToData = 0x80000158

它有 7 个 Entry,每个 Entry 代表一个资源,由 Name(ID 值) 域得到,每个资源伸延出各自的资源树,这些 ID 值代表一个资源,也就是前面的 WinUser.h 文件定义的常量值,每个 Entry 的 OffsetToData 值都指向各自的下一个 Directory

 

6. 叶子(Data/String)

资源树最终都要落在未端的叶子上,叶子两类结构表示:Data 和 String,它们由 Entry 引出。


6.1 Data Entry

Data 数据区域由 Data Entry 指出,这个 Data Entry 结构在 WinNT.h 定义为:

typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
    DWORD   OffsetToData;
    DWORD   Size;
    DWORD   CodePage;
    DWORD   Reserved;
} IMAGE_RESOURCE_DATA_ENTRY, *PIMAGE_RESOURCE_DATA_ENTRY;

Data Entry 的职责是指出最终的 resource table 中的数据,由 OffsetToData 指出,这个 OffsetToData 是个 RVA 值,基于 ImageBase。数据区的大小由 Size 得出

在资源树的未端 Resource Directory Entry 给出 Data Entry,再由 Data Entry 得到 Data 区域。


6.2 Resource Directory String

Resource Directory 的名字包含在 String 结构里,这个结构在 WinNT.h 定义为:

typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
    WORD    Length;
    CHAR    NameString[ 1 ];
} IMAGE_RESOURCE_DIRECTORY_STRING, *PIMAGE_RESOURCE_DIRECTORY_STRING;


typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
    WORD    Length;
    WCHAR   NameString[ 1 ];
} IMAGE_RESOURCE_DIR_STRING_U, *PIMAGE_RESOURCE_DIR_STRING_U;

Directory String 里包含的是 Unicode 码,因此,Directory Entry 始终指向 IMAGE_RESOURCE_DIR_STRING_U 结构, 它和 IMAGE_RESOURCE_DIRECTORY_STRING 的区别是一个是 ASCII,一个是 Unicode

NameString 是不定长的,用来表示 Directory 的名字,如:ICON 资源 Directory


6.3 两种分枝

Data 与 String 不可能共同在同一个 Directory 树中:

  • Data 树由 Directory Entry 中 OffsetToData 指出
  • String 树由 Directory Entry 中 Name 指出

这种分枝的策略是区别是:

  • 一个用 ID 来标识资源
  • 一个用 String 名字来标资源

6.3.1 Data 树

在 root 节点的 Entry 中,当 OffsetToData 的 Bit31 为 1 时,由该 Entry 伸出的是 Data 树,此时由该 Entry 指向树分枝中的所有 Entry 的 Name 都是 ID 值,

再回过头来看一看 hellworld.exe 的 root 节点 :

// Driectory: (root)
00419000  00 00 00 00 
00419004  00 00 00 00 
00419008  00 00 
0041900A  00 00 
0041900C  00 00            // NumberOfNameEntries
0041900E  07 00            // NumberOfIdEntries

// entry[0]
00419010  03 00 00 00     // ID = 3 (ICON)
00419014  48 00 00 80     // OffsetToData = 0x80000048

// entry[1]
00419018  04 00 00 00     // ID = 4 (MENU)
0041901C  D8 00 00 80     // OffsetToData = 0x800000D8

// entry[2]
00419020  05 00 00 00     // ID = 5 (DIALOG)
00419024  F0 00 00 80     // OffsetToData = 0x800000F0

// entry[3]
00419028  06 00 00 00     // ID = 6 (STRING)
0041902C  08 01 00 80     // OffsetToData = 0x80000180


// entry[4]
00419030  09 00 00 00     // ID = 9 (ACCELERATOR)
00419034  20 01 00 80     // OffsetToData = 0x80000120

// entry[5]
00419038  0E 00 00 00     // ID = 0E (GROUP_ICON)
0041903C  38 01 00 80     // OffsetToData = 0x80000138


// entry[6]
00419040  18 00 00 00     // ID = 0x18 (MAINFEST)
00419044  58 01 00 80     // OffsetToData = 0x80000158

上面的 root 节点长出 7 个分枝,每个分枝都由 Entry 指出,7 个分枝的 Entry 的 Name 都是 ID 值

因此 helloworld.exe 资源树中所有分枝都是 Data 树,它不存在 String 树


6.3.2 String 树

当 root 节点的 Entry 中 Name 域 Bit31 为 1 时,Name 指向 String,这个 String 标识整个分枝,由这个 Entry 长出来的树枝都是 String 树

事实上,对一个 windows 典型资源几乎都是用 ID 来标识,而不是用 String 来标识。

 

7. 追踪 helloworld.exe 的资源树中的一条分枝

现在我们从 root 节点开始到末端的叶子,来看一看 helloworld.exe 的一条分枝情况:

(1)root 节点

// Driectory: (root)
00419000  00 00 00 00 
00419004  00 00 00 00 
00419008  00 00 
0041900A  00 00 
0041900C  00 00            // NumberOfNameEntries
0041900E  07 00            // NumberOfIdEntries

// entry[0]
00419010  03 00 00 00     // ID = 3 (ICON)
00419014  48 00 00 80     // OffsetToData = 0x80000048

它的第 1 个分枝是 Data 分枝,ID = 3 它是一个 ICON 资源分枝树,下一个节点在 0x00419048 (0x00419000 + 0x00000048)

(2)下一个节点


// Directory
00419048  00 00 00 00 
0041904C  00 00 00 00
00419050  00 00 
00419052  00 00 
00419054  00 00            // NumberOfNameEntries
00419056  10 00            // NumberOfIdEntries


// Entry[0]
00419058  01 00 00 00      // ID = 01
0041905C  70 01 00 80      // OffsetToData = 0x80000170

00419060  02 00 00 00      // ID = 02
00419064  88 01 00 80      // OffsetToData = 0x80000188

00419068  03 00 00 00      // ID = 03
0041906C  A0 01 00 80      // OffsetToData = 0x800001A0

00419070  04 00 00 00 
00419074  B8 01 00 80

00419078  05 00 00 00 
0041907C  D0 01 00 80

00419080  06 00 00 00 
00419084  E8 01 00 80

00419088  07 00 00 00 
0041908C  00 02 00 80

00419090  08 00 00 00 
00419094  18 02 00 80

00419098  09 00 00 00 
0041909C  30 02 00 80

004190A0  0A 00 00 00 
004190A4  48 02 00 80

004190A8  0B 00 00 00 
004190AC  60 02 00 80

004190B0  0C 00 00 00 
004190B4  78 02 00 80

004190B8  0D 00 00 00 
004190BC  90 02 00 80

004190C0  0E 00 00 00 
004190C4  A8 02 00 80

004190C8  0F 00 00 00 
004190CC  C0 02 00 80

// Entry[15]
004190D0  10 00 00 00 
004190D4  D8 02 00 80

在这个节点中,有 16 个 Entry,也一个庞大的分枝。我们只看第 1 个分枝情况:

  • ID = 01
  • OffsetToData = 0x80000170

说明再下一个节点在 0x00419170 位置上,它的 ID 值为 1,这些 Entry 的排列顺序是以 ID 值升序排列的。在子树里的 ID 值并没什么意义,只有在 root 节点里的 ID 里才代表着资源类型。

(3)再下一个节点

// Directory
00419170  00 00 00 00 
00419174  00 00 00 00 
00419178  00 00 
0041917A  00 00 
0041917C  00 00 
0041917E  01 00

// Entry[0]
00419180  09 04 00 00                    // ID = 0x409
00419184  98 03 00 00                    // ****** IMAGE_RESOURCE_DATA_ENTRY: 0x00000398

这个节点里只有 1 个 Entry,这个 Entry 的 OffsetToData 值是 0x00000398,那么它指向 Data Entry 而不是下一个节点。它个 Data Entry 位置在 0x00419398

(4)它的 Data Entry

// IMAGE_RESOURCE_DATA_ENTRY
00419398  A8 98 01 00           // OffsetToData = 0x000198A8
0041939C  E8 02 00 00           // Size = 0x02E8
004193A0  00 00 00 00           // Codepage
004193AC  00 00 00 00           // Reserved

最终的 Data 数据区在 0x000198A8,注意这个值是基于 ImageBase 的,而不是基于 resource table,因此 Data 数据区在映像的 0x004198A8ImageBase + OffsetToData

(5)Data 数据区

下面摘取一部分数据:

Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

004198A0                          28 00 00 00 20 00 00 00         .(... ...
004198B0  40 00 00 00 01 00 04 00 00 00 00 00 00 00 00 00  @...............
004198C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
004198D0  00 00 00 00 00 00 80 00 00 80 00 00 00 80 80 00  ......€..€...€€.
004198E0  80 00 00 00 80 00 80 00 80 80 00 00 80 80 80 00  €...€.€.€€..€€€.
004198F0  C0 C0 C0 00 00 00 FF 00 00 FF 00 00 00 FF FF 00  ààà...?..?...??.
00419900  FF 00 00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00  ?...?.?.??..???.
00419910  AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA  aaaaaaaaaaaaaaaa
00419920  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00419930  77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 70  wwwwwwwwwwwwwwwp
00419940  78 88 88 88 88 88 88 88 88 88 88 88 88 88 88 70  x??????????????p
00419950  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
00419960  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
00419970  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
00419980  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
00419990  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
004199A0  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
004199B0  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
004199C0  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
004199D0  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
004199E0  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
004199F0  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
00419A00  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
00419A10  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
00419A20  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
00419A30  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
00419A40  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
00419A50  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
00419A60  78 7F FF FF FF FF FF FF FF FF FF FF FF FF F8 70  x.?????????????p
00419A70  78 77 77 77 77 77 77 77 77 77 77 77 77 77 78 70  xwwwwwwwwwwwwwxp
00419A80  78 88 88 88 88 88 88 88 88 88 88 88 88 88 88 70  x??????????????p
00419A90  78 44 44 44 44 44 44 44 44 44 40 00 00 00 00 70  xDDDDDDDDD@....p
00419AA0  78 44 44 44 44 44 44 44 44 44 48 80 88 08 80 70  xDDDDDDDDDH€?.€p
00419AB0  78 44 44 44 44 44 44 44 44 44 48 80 88 08 80 70  xDDDDDDDDDH€?.€p
00419AC0  78 44 44 44 44 44 44 44 44 44 44 44 44 44 44 70  xDDDDDDDDDDDDDDp
00419AD0  78 88 88 88 88 88 88 88 88 88 88 88 88 88 88 70  x??????????????p
00419AE0  77 77 77 77 77 77 77 77 77 77 77 77 77 77 77 70  wwwwwwwwwwwwwwwp
00419AF0  AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA  aaaaaaaaaaaaaaaa

这个数据组成特定的数据格式。:)


版权 mik 所有,转载请注明出处

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 驾驶证过期两个月了怎么办 科目二考试第一次不合格怎么办 科目二不想考了怎么办 科二有事考不了怎么办 科四有事去不了怎么办 社保卡发了密码怎么办 不知道社保卡号怎么办 科目三未到30天怎么办 户口地址变了驾照怎么办 拿了驾照没开车怎么办 免检的车在外地怎么办 2018年b2证扣3分怎么办 科一考试没去怎么办 上海房子卖了户口怎么办 贷款买房买房人不是贷款人怎么办 行驶证驾驶证都遗失了怎么办 c1增驾b2没考过怎么办 没驾照买车怎么办行驶证 广州车辆年审加装踏板怎么办 租车感觉违章了 怎么办 武汉驾照扣12分怎么办 驾驶证照片泡水不清楚怎么办 驾驶证过了180天怎么办 天津有公司执照怎么办落户 温州车在上海年审手续怎么办 广东小高考考了d怎么办 深圳开摩托抓到怎么办 深圳车卖了车牌怎么办 a1驾照时期过了怎么办 b1驾照扣了12分怎么办 北京的驾照换证怎么办 b2汽车驾驶证年审过期几天怎么办 上海驾照到期人在外地怎么办 交警开的罚单交不了怎么办 珠海交警微信交罚单扣分怎么办 驾驶证违法罚款单子没有了怎么办 转账密码输错3次怎么办 汽车违章扣6分怎么办 汽车扣了72分年检怎么办 汽车扣了50分怎么办 汽车扣了15分怎么办