我需要在 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
.