当前位置: 首页 > news >正文

Windows逆向工程提升之IMAGE_IMPORT_DESCRIPTOR

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

Import Table 概述

IMAGE_IMPORT_DESCRIPTOR 结构详解

字段解析

IMAGE_THUNK_DATA 结构

IMAGE_IMPORT_BY_NAME 结构

结构图解


Import Table 概述

在 PE 文件中,Import Table(导入表)用于指定可执行文件或动态链接库需要从其他模块(通常是 DLL 文件)加载的符号(函数或变量)。

  • Import Table 是 PE 文件中负责动态链接机制的重要结构。
  • 它定义了哪些函数(或变量)需要从外部模块加载。
  • 常见的导入模块:kernel32.dll, user32.dll 等。

IMAGE_IMPORT_DESCRIPTOR 结构详解

IMAGE_IMPORT_DESCRIPTOR 是描述 PE 文件在运行时需要从外部 DLL 中导入的函数和模块信息的一种数据结构,位于 Import Table 中。

在 Windows SDK 头文件 winnt.h 中,IMAGE_IMPORT_DESCRIPTOR 的定义如下:

typedef struct _IMAGE_IMPORT_DESCRIPTOR {  union {  DWORD Characteristics;      // 0 for terminating null import descriptor  DWORD OriginalFirstThunk;   // RVA of _IMAGE_THUNK_DATA array  } DUMMYUNIONNAME;  DWORD TimeDateStamp;            // Time/Date stamp  DWORD ForwarderChain;           // Index of the first forwarder reference  DWORD Name;                     // RVA of the DLL name (ASCII)  DWORD FirstThunk;               // RVA of _IMAGE_THUNK_DATA array for IAT (Import Address Table)  
} IMAGE_IMPORT_DESCRIPTOR, *PIMAGE_IMPORT_DESCRIPTOR;  

字段解析

字段名描述
​OriginalFirstThunk导入名称表(INT)的RVA,指向IMAGE_THUNK_DATA数组(函数名称或序号)
​TimeDateStamp绑定时间戳(若为0,表示未绑定;若为0xFFFFFFFF,表示绑定无效)
​ForwarderChain转发函数的索引(通常为0,复杂场景下用于跨DLL转发)
​NameDLL名称的RVA(如"kernel32.dll")
​FirstThunk导入地址表(IAT)的RVA,加载时系统将用实际函数地址填充此表

IMAGE_THUNK_DATA 结构

IMAGE_IMPORT_DESCRIPTOR 引用的 _IMAGE_THUNK_DATA 数组用于保存导入的函数信息。

  • 按序号导入:最高位为1时,低31位为函数序号(如0x80000001表示序号1)。
  • 按名称导入:最高位为0时,值为指向IMAGE_IMPORT_BY_NAME的RVA。

_IMAGE_THUNK_DATA 的定义如下:

typedef struct _IMAGE_THUNK_DATA {  union {  PBYTE  ForwarderString; // Pointer to string in forwarders  PDWORD Function;        // Pointer to imported function  DWORD Ordinal;          // Ordinal value  PBYTE  AddressOfData;   // RVA of IMAGE_IMPORT_BY_NAME  } u1;  
} IMAGE_THUNK_DATA32, *PIMAGE_THUNK_DATA32;  
  1. ForwarderString: 字符串指针,表示转发器模块的符号名。

  2. Function: 动态加载后的函数指针。

  3. Ordinal: 按序号导入的函数(如果使用序号导入)。

  4. AddressOfData: 指向 IMAGE_IMPORT_BY_NAME 的 RVA。


IMAGE_IMPORT_BY_NAME 结构

用于描述每个导入函数的符号。

typedef struct _IMAGE_IMPORT_BY_NAME {  WORD Hint;       // 函数名称的提示序号,辅助快速查找。  BYTE Name[1];    // 函数名以 null 结尾的字符串。  
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;  

字段解析:

  1. Hint: 提示值,用于帮助 PE 装载器快速定位函数。

  2. Name: 函数名称的字符串。


结构图解

相关文章:

  • 【Django DRF】一篇文章总结Django DRF框架
  • LabVIEW与SQLServer2019换计算机重新安装数据库
  • LET 2025盛大开幕!数智工厂×智慧物流×机器人,一展get创新科技
  • ConceptAttention:Diffusion Transformers learn highly interpretable features
  • 【LaTex】基础语法入门
  • Maven打包SpringBoot项目,因包含SpringBootTest单元测试和Java预览版特性导致打包失败
  • 第35节:PyTorch与TensorFlow框架对比分析
  • 40 岁 Windows 开启 AI 转型:从系统到生态的智能重构
  • Golang基于 Swagger + JWT + RBAC 的认证授权中间件设计
  • Go语言爬虫系列教程(二) HTTP请求与响应处理详解
  • 鸿蒙ArkTS-List列表下拉刷新案例
  • DEBUG设置为False 时,django默认的后台样式等静态文件丢失的问题
  • OpenHarmony 5.0中状态栏添加以太网状态栏图标以及功能实现
  • Vue3 + ThinkPHP8 + PHP8.x 生态与 Swoole 增强方案对比分析
  • Linux之Ext系列文件系统(含动静态库)
  • ansible剧本和角色的使用,部署lnmp
  • Laravel 连接 SQL Server 之 Linux 系统安装 unixODBC 和 Microsoft ODBC 驱动
  • 【工具类】常用的工具类——CollectionUtil
  • 红帽企业 Linux 10:探索全新生成式 AI 助手!
  • JDK21全景图:关键特性与升级价值
  • 网站建设硬件条件/网站多少钱
  • 做网站有哪些软件/网络营销企业是什么
  • 网站建设地位/站长统计幸福宝2022年排行榜
  • 网站主题推荐/seo包括哪些方面
  • 腾讯云建设网站教程/百度联盟怎么加入赚钱
  • 深圳做兼职的网站/百度推广时间段在哪里设置