使用 PeNet 库创建/删除部分 进一步阅读文档:

问题描述

我使用 PeNet nuget package 处理 pe 文件,创建或删除部分时出现问题,我从作者的 example获取代码,但没有任何效果。 (没有错误出现,但没有文件被写入/覆盖。)

使用 C# 控制台应用程序,代码如下:

var bin = File.ReadAllBytes(@"C:\Users\PC\Desktop\test.dll");
var peFile = new PeNet.PeFile(bin);

peFile.AddSection(".newSec",100,(ScncharacteristicsType)0x40000040);
peFile.RemoveSection(".rsrc",true);

解决方法

从这个GitHub issue关于一个类似的话题:

PeNet 通过将整个 PE 文件加载到缓冲区来在内部工作。您所做的所有更改都对内存中的此缓冲区完成。如果要保存更改,只需保存缓冲区即可。

不幸的是,那里提供的代码不正确。 PEFile 没有 Buff 属性。所以使用:

System.IO.File.WriteAllBytes(
    "C:\Users\PC\Desktop\newDLL.dll",peFile.RawFile.ToArray()
);

遗憾的是,作者似乎也从未实现过 Save 方法...

进一步阅读文档: