pefile如何使文件的前8个字节无效?

时间:2013-05-09 22:59:42

标签: python

如何取消文件的前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)

抱歉我的英文

2 个答案:

答案 0 :(得分:0)

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

with file('filename.bla', 'wr+') as f:
  f.write('\0' * 8)

答案 1 :(得分: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可以为它们腾出空间,则它不会调整任何需要调整以补偿的其他标题。有关详细信息,请参阅the docs中的“有关写入支持的说明”。因此,imp.name = 'NewIMports'可能有效,但如果旧名称较短,则会生成损坏的PE。

最重要的是,将所有导入重命名为肯定会生成一个损坏的PE。