我需要在 pe32 module.dll 导出表中添加新函数,如果可能的话以动态方式(通过使用 dll 扩展)或通过修补 pe32 module.dll
你有什么建议来解决这个问题?
我需要在 pe32 module.dll 导出表中添加新函数,如果可能的话以动态方式(通过使用 dll 扩展)或通过修补 pe32 module.dll
你有什么建议来解决这个问题?
由于我不知道任何工具可以轻松解决您的问题,因此我将告诉您如何“手动”完成。
首先,你要熟悉PE格式。如果不是,您可以查看aldeid和MSDN以了解我将描述的步骤。添加导出到dll只是扩展Export Directory并可能更改其他一些字段。所以,你需要做的是:
dll的 PE 解析器。它可以是PE Explorer、CFF Explorer或在 IDA 等反汇编程序中(勾选手动加载,然后加载所有可能的部分)。dll. 上面提到的 PE 解析器可能会进行一些更改,但不是全部。ExportDirectory.NumberOfFunctions的1,因为你添加新的功能。ExportDirectory.NumberOfNames。Export Address Table,该条目位于ExportDirectory.AddressOfFunctions。只需使用十六进制编辑器插入4新的 NULL 字节 - 您将在插入函数代码时设置它们的值。ExportDirectory.AddressOfNames可能已更改(按4字节)。你也必须调整它。ExportDirectory.AddressOfNames-4使用十六进制编辑器插入另一个字节。稍后,您会将其更改为您的函数的名称。ExportDirectory.AddressOfNameOrdinals和添加2字节(最高序数+ 1,以小端顺序编写)。ExportDirectory.Name以指向dll名称。ExportDirectory.AddressOfNames)。.text部分的末尾插入您的函数代码(如果它足够小,则不必调整其大小)。Export Directory Size以匹配您的新尺寸。SectionHeader.VirtualSize为.edata部分。FileHeader.NumberOfSymbols的1。SectionTable.SizeOfRawData了ExportDirectory通过字节数已利用插入十六进制编辑器,或删除,因为这数字NULL在结束字节ExportDirectory(如果存在的话)。OptionalHeader.CheckSum。如您所见,手动执行此操作是一个乏味的过程,即使您发现这样做太困难,我希望至少您看到“在低级别”必须完成的操作才能将新导出添加到dll.