В этом проекте реализована библиотека внедрения сборок .NET (она основана на проекте snoopwpf). Удаленный процесс может быть управляемым или неуправляемым.
Если вы хотите внедрить сборку в удаленный процесс, вам необходимо учитывать следующие аспекты:
Если вышеуказанные предварительные условия удовлетворены, вы можете внедрить сборку и вызвать метод активации. Существует три возможности вызвать метод активации:
Эта библиотека также используется Shed для внедрения DLL в удаленный процесс. Вы можете посмотреть видео здесь.
Практические примеры см. в проекте TestRunner.
Если внедренная сборка имеет какие-либо зависимости от нестандартных сборок .NET, вы можете добавить эти зависимости с помощью метода AddDependency
.
Если внедренной сборке для правильной работы необходимо загрузить какой-то внешний файл (например, файл конфигурации), вы можете указать их с помощью метода AddFile
. Этот метод скопирует указанный файл в рабочий каталог внедренного процесса.
В некоторых случаях необходимо передать аргумент методу, вызываемому во внедренной сборке. Это достигается путем передачи объекта context
методу Inject
. Затем метод Injected
должен привести объект context
к реальному типу (пример см. в разделе AssemblyWithMethodAcceptingAnArgument
). Платформа использует класс BinaryFormatter
для сериализации объекта context
, поэтому убедитесь, что указанный объект можно сериализовать.
Давайте рассмотрим следующий код:
using System;
namespace InjectedAssembly
{
public class Main
{
// we use a default injection method name in order to execute our code in the remote process
private static void Inject()
{
Console.WriteLine("Hello world from the injected process!");
}
}
}
чтобы внедрить сборку, сгенерированную из приведенного выше кода, достаточно использовать следующий код:
var pid = 1234;
var injector = new Injector(pid, Assembly.LoadFile("AssemblyToInject.dll"));
var injectionResult = injector.Inject();
Дополнительные примеры можно найти в папке примеров.
ManagedInjector в настоящее время разрабатывается с использованием VisualStudio 2017 Community Edition (убедитесь, что установлена последняя версия). Чтобы создать исходный код, убедитесь, что вам необходимо:
build.bat
Мы используем SemVer для управления версиями. Доступные версии см. в тегах этого репозитория.
Managed Injector распространяется по лицензии Creative Commons.