我正在尝试访问 PE 文件的 IAT。我的计划最终是覆盖一些值,这样我就可以挂钩一些东西来帮助解包等。我使用这篇文章https://stackoverflow.com/questions/7673754/pe-format-iat-questions作为指南。我目前排在第 4 位,这就是对我来说事情变得有点模糊的地方。我能够获得一个指向 DataDirectory 数组中的条目的指针。我选择了第 13 个条目,因为根据我的研究http://msdn.microsoft.com/en-us/library/windows/desktop/ms680305%28v=vs.85%29.aspx看起来那会带我去 IAT。我不确定我是否在正确的轨道上,因为这个 DataDirectory 的值是 size = 0 和 virtualaddress = 172。172 的 virtualsize 是必须添加到某个基地址的偏移量吗?我只是在使用一个没有打印“Hello World”的调试信息的简单 C 程序。任何帮助是极大的赞赏。不确定显示代码对我的方法有多大帮助,但我会在下面发布相关部分。任何帮助表示赞赏。谢谢!
pDOSHeader = ctypes.cast(hModule, ctypes.POINTER(IMAGE_DOS_HEADER)).contents
e_lfanew_offset = pDOSHeader.e_lfanew
offset_to_NTHeaders = e_lfanew_offset + hModule
pNTHeaders = ctypes.cast(offset_to_NTHeaders,ctypes.POINTER(IMAGE_NT_HEADERS)).contents
pImage_NT_Headers = pNTHeaders.OptionalHeader
pDataDirectory = pImage_NT_Headers.DataDirectory
pDataDirectory_IAT = pDataDirectory[13]