xXxRevolutionxXx Ответов: 2

Включить небезопасный код с помощью dnlib


- Привет ! Я кодирую обфускатор с помощью C# и dnlib. В какой-то момент мне нужно ввести небезопасный код в исполняемый файл, но это должно привести к сбою приложения, если вы его не "объявите". Есть ли способ объявить (с dnlib или без него), что выбранный модуль будет содержать небезопасный код ?
Спасибо!!

Что я уже пробовал:

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

2 Ответов

Рейтинг:
6

xXxRevolutionxXx

После еще некоторого копания я обнаружил, что вы можете пометить модуль как небезопасный с помощью dnlib со следующим кодом:

ModuleDefMD module = ModuleDefMD.Load("theModuleYouWantToMarkAsUnsafe.exe");

module.CustomAttributes.Add(new CustomAttribute(new MemberRefUser(module, ".ctor", MethodSig.CreateInstance(module.CorLibTypes.Void), module.CorLibTypes.GetTypeRef("System.Security", "UnverifiableCodeAttribute"))));


Я очень благодарен @Alan за то, что он указал, какой атрибут необходим для этой работы !


Graeme_Grant

Пожалуйста, не публикуйте решения ваших собственных проблем, а затем отметьте их как ответные. Это считается репутационным фермерством и может привести к тому, что вас вышвырнут.

Вместо этого включите это обновление в вопрос, нажав на виджет" улучшенный вопрос " выше. После этого, пожалуйста, удалите это решение.

Рейтинг:
0

Alan N

Я не могу говорить за dnlib, но стандартный компилятор помечает небезопасно модули с системой.Безопасность.UnverifiableCodeAttribute()]

Самым простым обнаружением было бы что-то вроде

private void SafeOrUnsafe(Assembly asm) {
  foreach (Module m in asm.GetModules(true)) {
    Debug.Print("{0} Unsafe : {1}", m.Name, m.IsDefined(typeof(System.Security.UnverifiableCodeAttribute), true));
  }
}

Алан.