我一直在对PE可执行文件进行逆向工程,但遇到了我无法理解的行为。可执行文件同时使用shell32.dll和profapi.dll。我看到shell32.dll延迟使用序数值在profapi.dll中加载了一个函数(我通过查看shell32.dll的延迟加载导入表对此进行了验证)。但是,profapi.dll不会导出任何功能,因为它甚至没有导出表。我正在使用Python库pefile检查这些DLL的延迟导入和导出部分。我在Windows 7上使用的是profapi.dll版本6.1.7600.16385(由文件属性报告)。仍然需要访问profapi.dll的导出表。是否有另一种方式可以使profapi.dll公开其函数的地址,或者我丢失了某些东西?我确实能够使用IDApro检查导出部分。我只想强调一下pefile中潜在的错误。我正在使用pefile版本1.2.10-139。

#1 楼

profapi.dll当然应该有一个导出表。例如,这是来自profapi.dll版本6.3.9600.16384的导出表:按序导出6个函数。如果您使用的Python库没有看到这些功能,那是由于Python库中的错误(或您可能对其使用)所致。

对于它的价值而言,这是已知的较早版本的pefile库中的问题,大约一年前已修复。也许您使用的是过时的版本?

评论


我正在使用profapi.dll版本6.1.7600.16385(由文件属性报告)。我正在使用Python库pefile列出profapi.dll的导出表条目。另外,这表明profapi.dll没有导出部分:win7dll.info/profapi_dll.html。查看pefile产生的整个PE转储,我发现RVA中确实存在IMAGE_DIRECTORY_ENTRY_EXPORT的有效条目,但是我看到pefile出现解析错误,说“导出目录中的RVA AddressOfNames指向无效的”。地址”。我不确定这是否是pefile解析错误。

– redraga
2014年11月14日在21:54



编辑:看来这是pefile的问题。我确实能够使用IDAPro找到profapi.dll的导出部分。我用注解更新了原始问题,其中提到了pefile中似乎有错误。

– redraga
2014年11月14日22:04

您在我做我的同时进行了编辑-很高兴我们得出了相同的结论:)

–詹森·格夫纳(Jason Geffner)
2014年11月14日22:10

请参阅我的答案中有关pefile更新的最后一段。

–詹森·格夫纳(Jason Geffner)
2014年11月14日在22:14

看起来pefile不会解析导出节,因为名称指针表和顺序指针表均为NULL,并且它使用此信息来遍历EAT。我知道我可以通过基于导出函数的数量直接遍历EAT来获取函数指针地址来更改pefile的行为,但是我对了解为什么profapi中Name和Ordinal表指针为NULL感兴趣。另外,加载程序如何修补导出的功能?我不确定这是否是发布此内容的正确位置。如果需要,我可以稍后再提出一个单独的问题。

– redraga
2014年11月17日20:59