我正在尝试编写 python 脚本来从导入表中提取信息。我设法获取每个dll导入的函数名称。但是我不确定如何访问提示。 有什么建议吗?
最佳答案
我假设你有一个指向 32 位模块的 IMAGE_THUNK_DATA 结构的指针(或者 PE32+ 的 IMAGE_THUNK_DATA64 结构),因为你已经枚举了名称,所以我们将从那里开始介绍基础知识。 我还假设您正在处理 32 位模块,因为您没有另外指定。
IMAGE_THUNK_DATA 数组只是一个 DWORD 数组,每个 DWORD 代表一个导入的函数。要知道函数是按名称而不是序号导入的,您必须检查 DWORD 中是否未设置最高位(即 0x80000000)。
1> 如果高位被置位,则 DWORD 与 0xFFFF 进行 AND 运算后的值(仅取低 WORD)就是序数(也是“提示”值)。因此,该函数是按序数导入的,并且没有可用的名称。
2> 如果未设置高位,则整个 DWORD 是指向 IMAGE_IMPORT_BY_NAME 结构的 RVA(指向内存镜像的指针,无基数)。如果您正在读取文件图像,则必须将 RVA 转换为文件偏移量。我还假设您已经这样做了,否则您将不会有导入的函数名称。 IMAGE_IMPORT_BY_NAME结构在winnt.h中定义如下:
typedef struct _IMAGE_IMPORT_BY_NAME {
WORD Hint;
BYTE Name[1];
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;
注意:Name 中指定的 BYTE 当然仅标记导入函数名称的字符数组的开头,因为名称可以大于一个字符。
第一个单词是提示,如果您已经知道名称,则必须跳过它。您是否可以显示您遇到问题的代码片段?
关于python - 我们如何在PE文件中的IMAGE_IMPORT_BY_NAME STRUCT中获取提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41581363/