使用dnlib的方法注入类

时间:2019-01-30 12:51:44

标签: c# dnlib

我正在尝试在文件中注入带有方法的类。我知道ConfuserEx的源代码中有一个可行的解决方案,但这有点需要编辑dnlib的代码,这是我想避免的。

ModuleDef manifestModule = assembly.ManifestModule;
Importer importer = new Importer(manifestModule);
IMethod method = importer.Import(typeof(AntiDumpRuntime).GetMethod("Initialize"));

TypeDef type = new TypeDefUser("AntiDump");
type.Methods.Add(method.ResolveMethodDefThrow()); // dnlib.DotNet.MemberRefResolveException: 'Could not resolve method: System.Void Obfuscator.Core.Protections.AntiDump.AntiDumpRuntime::Initialize() (Obfuscator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null)'
manifestModule.Types.Add(type);

在上面的代码段中,我尝试通过Importer类进行此操作,但是它在注释行上引发了异常。

这是ConfuserEx的解决方案: https://github.com/yck1509/ConfuserEx/blob/master/Confuser.Core/Helpers/InjectHelper.cs 这是需要在dnlib中进行的修改:https://github.com/yck1509/dnlib/blob/master/src/DotNet/Importer.cs#L72

1 个答案:

答案 0 :(得分:1)

最新版本的dnlib包含使它起作用所需的更改。导入程序具有允许设置ImportMapper实现的构造函数。使用此功能,您可以使用默认版本的dnlib正确注入代码。

我正在维护ConfuserEx的fork,它使用dnlib而不作任何修改。这样就可以了。