0

如何取消文件的前 8 个字节?

这个例子不起作用:

import pefile
pe = pefile.pe(In)
pe.set_dword_at_rva(0,0)
pe.set_dword_at_rva(0,4)
pe.write(Out)
pe.close()

我如何重命名文件中的导入函数?这个例子不起作用:

for entry in pe.DIRECTORY_ENTRY_IMPORT:
  print entry.dll
  for imp in entry.imports:
     imp.name = 'NewIMports'
pe.write(Out)

对不起我的英语不好

4

2 回答 2

0

我建议使用标准方式(即不使用pefile)这样做:

with file('filename.bla', 'wr+') as f:
  f.write('\0' * 8)
于 2013-05-09T23:30:03.673 回答
0

您的代码有多个问题,但我不确定哪些问题会导致您遇到的任何问题(因为您没有解释这些问题)。

首先,您想将前 8 个字节设置为 0,但您使用的是set_dword_at_rva而不是set_dword_at_offset. RVA(“相对虚拟地址”)是内存中与节的运行时地址的偏移量(无论运行时地址最终是什么)。偏移量是磁盘上距文件开头的偏移量。如果那是您想要的,请使用它。(当您使用它时,这些qword函数是一次设置 8 个字节的方法。使用dword而不是除了字节序之外不会引起任何问题,这对于仅设置为 0 可能无关紧要......但是,为什么要让对自己更难吗?)

所以:

pe = pefile.pe(In)
pe.set_qword_at_offset(0, 0)

同时,如果您正在修改文件中的任意字符串,虽然pefile可以为它们腾出空间,但它不会调整任何其他需要调整以补偿的标题。有关详细信息,请参阅文档中的“关于写入支持的说明”。因此,imp.name = 'NewIMports'如果旧名称较短,可能会起作用,但会生成损坏的 PE。

最重要的是,将所有导入重命名为具有相同名称肯定会生成损坏的 PE。

于 2013-05-10T00:16:08.833 回答