Skip to content

knadt/ManagedInjector

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Managed Injector

This project implements a .NET Assembly injection library (it is inspired by the snoopwpf project). The remote process can be a managed or unmanaged one.

Download

Usage

When you want to inject an assembly in a remote process you have to consider the following aspects:

  • The ManagedInjector project currently supports only 32 bit process
  • The remote process must be a windows application (it must process messages in a message loop)

If the above pre-conditions are satisfied you can inject an assembly and invoke an activation method. There are three possibilities to invoke the activation method:

  • You must specify the full method name to invoke (eg. this.is.my.namespace.class.method)
  • You can inject an executable that defines an EntryPoint method to execute (like a Console project)
  • You can define a method with the following signatue: <public|private> static void Inject()

For practical examples see the TestRunner project.

Adding dependencies

If the injected assembly has any dependencies on not standard .NET assemblies, you can add those dependencies with the AddDependency method.

Adding external files

If the injected assembly needs to load some external file in order to work correctly (like a configuration file) you can specify them with the AddFile method. This method will copy the specified file in the working directory of the injected process.

Example

Let's consider the following code:

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!");
        }
    }
}

in order to inject the Assembly generated from the above code it is enough to use the following code:

var pid = 1234;
var injector = new Injector(pid, Assembly.LoadFile("AssemblyToInject.dll"));
var injectionResult = injector.Inject();

Build

ManagedInjector is currently developed by using VisualStudio 2017 Community Edition (be sure to have the latest version installed). To build the source code be sure you have to:

Versioning

We use SemVer for versioning. For the versions available, see the tags on this repository.

Authors

  • Antonio Parata - Core Developer - s4tan

License

Managed Injector is licensed under the Creative Commons.

About

A C# DLL injection library

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 70.0%
  • Batchfile 24.6%
  • F# 5.4%