如何取消文件的前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)
抱歉我的英文
答案 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。