• XSS.stack #1 – первый литературный журнал от юзеров форума

Инфекция .NET файла

  • Автор темы KasperWAF
  • Дата начала

KasperWAF

Гость
Всем привет, как можно заинфектить или же пересобрать произвольный дотнет файл из под нативного приложения? Подтолкните, пожалуйста, в какую сторону копать. Вариант с генерацией .NET стаба и последующей загрузкой оригинальной сборки в память я не рассматриваю, требуется именно инфект произвольным кодом.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Всем привет, как можно заинфектить или же пересобрать произвольный дотнет файл из под нативного приложения?
С помощью dnlib или Mono.Cecil можно вставить произвольный класс внутрь произвольной дотнетовской сборки, потом добавить в точку входа исходной сборки вызов метода добавленного класса. Вот пример для dnlib: https://github.com/0xd4d/dnlib/blob/master/Examples/Example2.cs - не обязательно код класса с помощью кода создавать, можно собрать отдельно class-library (но важно, чтобы и оригинальная сборка и инжектируемая сборка были сделаны под одну и ту же версию фреймворка). Вот здесь, например, добавляется статический конструктор на глобальный объект <Module>, по идее он должен быть вызван даже до точки входа исходной сборки: https://forum.tuts4you.com/topic/37273-dnlib-injecting-class-with-method/ Наверное, это можно и через гуищку сделать в каком-нибудь dnSpy, но я не пробовал.

из под нативного приложения?
Делать это из под нативного приложения - это перекручивать себе яйки, куда проще взять dnlib или Mono.Cecil и делать из под дотнета. Но в принципе для С++ есть такая библиотека (но я не знаю, чего там и как, не юзал): https://github.com/LADSoft/DotNetPELib
 
С помощью dnlib или Mono.Cecil можно вставить произвольный класс внутрь произвольной дотнетовской сборки, потом добавить в точку входа исходной сборки вызов метода добавленного класса. Вот пример для dnlib: https://github.com/0xd4d/dnlib/blob/master/Examples/Example2.cs - не обязательно код класса с помощью кода создавать, можно собрать отдельно class-library (но важно, чтобы и оригинальная сборка и инжектируемая сборка были сделаны под одну и ту же версию фреймворка). Вот здесь, например, добавляется статический конструктор на глобальный объект <Module>, по идее он должен быть вызван даже до точки входа исходной сборки: https://forum.tuts4you.com/topic/37273-dnlib-injecting-class-with-method/ Наверное, это можно и через гуищку сделать в каком-нибудь dnSpy, но я не пробовал.


Делать это из под нативного приложения - это перекручивать себе яйки, куда проще взять dnlib или Mono.Cecil и делать из под дотнета. Но в принципе для С++ есть такая библиотека (но я не знаю, чего там и как, не юзал): https://github.com/LADSoft/DotNetPELib
Проблема в том, что решение должно быть переносимым, таскать с собой тяжёлый днлиб не очень вариант.
Скрытый контент для пользователей: .
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Проблема в том, что решение должно быть переносимым, таскать с собой тяжёлый днлиб не очень вариант.
В эпоху, когда люди распространяют ауе стиллеры весом в 7мб, ты переживаешь из-за библиотеки в 1мб? Шучу. Ну в этом случае я на вскидку вижу два решения. Первое: вкомпилить dnlib с помощью https://github.com/gluck/il-repack и потом попробовать удалить неиспользуемый код с помощью какого-нибудь https://github.com/BrokenEvent/ILStrip - возможно, получится размер, который тебя устроит. Второе: во фреймворке есть набор COM-классов для чтения и записи IL-кода, в частности Reflection.Emit через него работает. В теории можно этот функционал заюзать и не таскать с собой библиотеки типа dnlib. Но скорее всего это будет овердохера сложного кода на С++ или С#, который использует плохо документированные фичи фреймворка, то есть это видится довольно сложным. Если интересно попробовать, то начать можно с изучения https://docs.microsoft.com/en-us/windows/win32/api/rometadataapi/nn-rometadataapi-imetadataimport - для парсинга исходной сборки и https://docs.microsoft.com/ru-ru/dotnet/framework/unmanaged-api/metadata/imetadataemit-interface - для модификации и экспорта.

Скрытый контент для пользователей: .
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх