PE文件格式分析系列(文章1)
一个PE文件导入表数据的分析(MFC工程调试版)
一. 该PE文件使用了6个DLL
分别是:
1. mfc42d.dll
2. msvcrtd.dll
3. kernel32.dll
4. user32.dll
5. mfco42d.dll
6. msvcp60d.dll
故有6个 IMAGE_IMPORT_DESCRIPTOR (IMAGE_IMPORT_DESCRIPTOR结构大小是0x14)
在PE文件中, (IMAGE_DIRECTORY_ENTRY_IMPORT 数据目录)
第4个段 .idata 0x1B95(实际数据大小) 0x27000(文件中位置) 0x2000(文件对齐大小)
也就是说.idata段在0x27000---0x29000(0x27000---0x28B95是有用数据)
7个 IMAGE_IMPORT_DESCRIPTOR 结构数据
7个 0x14 * 7 = 0x8C(0x27000 -- 0x2708C) (第7个全0)
00027000 |+EC 70 02 00 00 00 00 00 | 1. mfc42d.dll
00027008 | 00 00 00 00 34 7A 02 00 |
00027010 | C0 75 02 00+74 74 02 00 | 2. msvcrtd.dll
00027018 | 00 00 00 00 00 00 00 00 |
00027020 | CC 7A 02 00 48 79 02 00 |
00027028 |+8C 70 02 00 00 00 00 00 | 3. kernel32.dll
00027030 | 00 00 00 00 6C 7C 02 00 |
00027038 | 60 75 02 00+30 75 02 00 | 4. user32.dll
00027040 | 00 00 00 00 00 00 00 00 |
00027048 | 8E 7C 02 00 04 7A 02 00 |
00027050 |+48 73 02 00 00 00 00 00 | 5. mfco42d.dll
00027058 | 00 00 00 00 9A 7C 02 00 |
00027060 | 1C 78 02 00+78 73 02 00| 6. msvcp60d.dll
00027068 | 00 00 00 00 00 00 00 00 |
00027070 | FE 88 02 00 4C 78 02 00 |
00027078 |+00 00 00 00 00 00 00 00 | 7. 空
00027080 | 00 00 00 00 00 00 00 00 |
00027088 | 00 00 00 00 ---------------- |
紧跟在0002708C 后面的, 就是
IMAGE_IMPORT_DESCRIPTOR.OriginalFirstThunk数据
3. kernel32.dll的IMAGE_IMPORT_DESCRIPTOR.OriginalFirstThunk数据
从 0002708C -- 000270C0 0x0C个 DWORD + 0x1个0的DWORD
0002708C | ----------- AA 7B 02 00 |
00027090 | CE 7B 02 00 DE 7B 02 00 |
00027098 | EC 7B 02 00 FC 7B 02 00 |
000270A0 | 10 7C 02 00 1E 7C 02 00 |
000270A8 | 34 7C 02 00 46 7C 02 00 |
000270B0 | 5A 7C 02 00 C0 7B 02 00 |
000270B8 | 6E 89 02 00 00 00 00 00 |
-------------------------------------------------------------
000270C0 | 00 00 00 00 00 00 00 00 |\
000270C8 | 00 00 00 00 00 00 00 00 | |
000270D0 | 00 00 00 00 00 00 00 00 | |这段数据为0
000270D8 | 00 00 00 00 00 00 00 00 | |
000270E0 | 00 00 00 00 00 00 00 00 | |
000270E8 | 00 00 00 00 ----------- |/
1. mfc42d.dll的IMAGE_IMPORT_DESCRIPTOR.OriginalFirstThunk数据
从 000270EC -- 000272C4 0x75个 DWORD + 0x1个0的DWORD
000270EC | ----------- 83 10 00 80 | 很明显, 0x80001083, 最高位
000270F0 | 85 10 00 80 38 08 0