找回密码
 立即注册
注册 登录
×
热搜: 活动 交友 discuz
查看: 131|回复: 1

加密解密-认识PE文件结构之导入表

[复制链接]

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2023-1-16 12:08:20 | 显示全部楼层 |阅读模式
此文章接上一篇 《 加密解密--认识PE文件结构之导出表》
码字却是不易,喜欢的小伙伴伸出小手来个三连,万分感谢!!!
之前上培训班整理的一些PE学习和C\C++学习的电子书视频资料,需要的小伙伴自取吧!!!
WindowsPE权威指南和C+密解密系列资料整理
PE 文件映射到内存后,Windows 将相应的 DLL文件装入,EXE 文件通过“输入表”找到相应的 DLL 中的导入函数,从而完成程序的正常运行
数据目录表的第2个成员指向输入表。当前文件依赖几个模块就会有几张输入表且是连续排放的。
RVA:0000415C
Text:00001000  00003A56  00000400
Data:00005000  00000B98  00000400
OFFSET:415C-1000+400=355C
IMAGE_IMPORT_DESCRIPTOR STRUCT
union{
DWORD Characteristics
DWORD OriginalFirstThunk //00004380
}
ends
DWORD ThimeDataStamp //FFFFFFFF
DWORD ForwarderChain //FFFFFFFF
DWORD Name //00004484
DWORD FisrstThunk //00001170
IMAGE_IMPROT_DESCRIPTOR ENDS
首先 4380 表示INT 的虚拟地址,如果你需要换算文件偏移也是通上文那样换算:
INT OFFSET:4380-1000+400=3780
IAT OFFSET:1170-1000+400=570
NAME:4484-1000+400=3884[msvcrt.dll]
77C1A658-1000+400=
      在了解这个结构时候你首先要知道dll是区分序号导入和名称导入,而IMAGE_THUNK_DATA32的数据结构的最高位为1标识序号导入,为0为名称导入。如果是序号导入Ordinal字段就是导入的序号,如果是名称导入只想的就是名称地址。
IMAGE_THUNK_DATA STRUCT
union
{
   DWORD ForwarderString  //指向一个转向者字符串的RVA
   DWORD Function  //被输入的函数的内存地址
   DWORD Ordinal  //D被输入的API的序号值
   DWORD AddressOfData  //指向IMAGE_IMPORT_BY_NAME
}u1
IMAGE_THUNK_DATA ENDS00003780:90 44 00 00 72 44 00 00 64 44 00 00 9E 44 00 00
typedef struct _IMAGE_IMPORT_BY_NAME {
    WORD Hint;            //used to find location of function faster
    BYTE Name[1];         //pointer to the function name
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;INT函数名:4490-1000+400=3890  4472-1000+400=3872
00D6    _controlfp
0098    __set_app_type




画图总结导入表:


我是 @逃逸的卡路里,热爱生活,热爱分享,热爱交流的斜杠青年,喜欢学习和副业方向探讨可以多多来交流。
之前上培训班整理的一些PE学习和C\C++学习的电子书视频资料,需要的小伙伴自取吧
WindowsPE权威指南和C+密解密系列资料整理
回复

使用道具 举报

1

主题

9

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 4 天前 | 显示全部楼层
顶起出售广告位
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋| 黑客通

GMT+8, 2025-4-6 10:42 , Processed in 0.107720 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2020, LianLian.

快速回复 返回顶部 返回列表