Внедрить класс с помощью метода dnlib - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь внедрить класс с помощью метода в файле.Я знаю, что в исходном коде 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 голосов
/ 27 февраля 2019

В новейшей версии dnlib содержатся изменения, необходимые для его работы.Импортер имеет конструктор, который позволяет установить реализацию ImportMapper.Используя это, вы можете правильно внедрить код с версией dnlib по умолчанию.

Я поддерживаю fork ConfuserEx, который использует dnlib без изменений.Так что работает нормально.

...