首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试将返回的HMODULE强制转换为Python C-Types中声明的IMAGE_DOS_HEADER结构

尝试将返回的HMODULE强制转换为Python C-Types中声明的IMAGE_DOS_HEADER结构
EN

Stack Overflow用户
提问于 2013-09-26 11:39:15
回答 1查看 810关注 0票数 2

我正在尝试编写一些python代码(使用ctype),这些代码最终将允许我找到IAT。我熟悉PE结构,但从来没有编写过代码来遍历数据结构来达到它。我一直在做一些研究,发现了一些用C++编写的代码,它们允许我获得基本图像的句柄,这样我就可以开始通过数据结构来解除引用。我一直在使用这篇文章的PE Format - IAT Questions作为参考。所以我试着用这篇文章的Get pointer to IMAGE_DOS_HEADER with GetModuleHandle?来获得IMAGE_DOS_HEADER的句柄,我是用Python C-types写的,所以下面是我使用的代码。

代码语言:javascript
运行
复制
class IMAGE_DOS_HEADER(ctypes.Structure):
    _fields_ = [
            ("e_magic",    WORD),
            ("e_cblp",     WORD),
            ("e_cp",       WORD),
            ("e_crlc",     WORD),
            ("e_cparhdr",  WORD),
            ("e_minalloc", WORD),
            ("e_maxalloc", WORD),
            ("e_ss",       WORD),
            ("e_sp",       WORD),
            ("e_csum",     WORD),
            ("e_ip",       WORD),
            ("e_cs",       WORD),
            ("e_lfarlc",   WORD),
            ("e_ovno",     WORD),
            ("e_res",      WORD * 4),
            ("e_oemid",    WORD),
            ("e_oeminfo",  WORD),
            ("e_res2",     WORD * 10),
            ("e_lfanew",   WORD),
            ]

kernel32.GetModuleHandleW.restype = wintypes.HMODULE
kernel32.GetModuleHandleW.argtypes = [wintypes.LPCWSTR]

image_dos_header = IMAGE_DOS_HEADER()

hModule = kernel32.GetModuleHandleW(0)

if hModule == 0:
   hModule_Error = ctypes.WinError(ctypes.get_last_error())
   print("[-] error getting the hModule " + hModule)
   system.exit(1)

#Trying to cast the handle to image_dos_header struct
image_dos_header = ctypes.byref(hModule)                 #Error is here

当我尝试这段代码时,我得到了错误,"byref()参数必须是一个ctypes实例,而不是'int'“。我已经做了一些研究,尝试了一些事情,但我似乎找不到答案。我以前在处理其他使用c类型声明的结构时使用过"byref“。

另一个问题是,我能够获得我认为是从GetModuleHandleW调用返回的有效句柄。我假设这就是地址,如果是这样,我是否可以开始遍历该IMAGE_DOS_HEADER结构,而不必创建新的"image_dos_header“结构,然后将返回的句柄强制转换为该结构?然后用我的方式进入IAT?任何帮助都是对我的方法的感谢或反馈,我正试图使用这些方法来获得IAT。谢谢!

EN

Stack Overflow用户

发布于 2013-09-27 04:05:42

所以我发现我真正想做的是将一个从GetModuleHandleW调用返回的int (句柄地址)转换为一个指向结构(IMAGE_DOS_HEADER)的指针。下面是我用来做这件事的代码。希望它能帮助一些人!

代码语言:javascript
运行
复制
#In C++ this would like this - 
#IMAGE_DOS_HEADER* pDOSHeader = (IMAGE_DOS_HEADER*)hModule;

pDOSHeader = ctypes.POINTER(IMAGE_DOS_HEADER)
pDOSHeader = ctypes.cast(hModule, ctypes.POINTER(IMAGE_DOS_HEADER)).contents
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19018906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档