Novedades

Guia Creando DLL Inyectable en C#/VB de forma sencilla



Destroyer

Programador
Desde
6 Dic 2020
Mensajes
31
Para los que quieran hacer trucos internos en .NET, deben superar el primer paso y ese es hacer tu truco Inyectable. sin embargo eso no es posible directamente ya que .net tanto c# como vb es codigo IL (IL Code) que es Interpretado por la VM de .NET (CLR - Net Framework) (CoreCLR - Net Core) , entonces tu codigo seria Administrado a diferencia de c++ que es nativo (no administrado) . Entonces basicamente el problema al inyectar tu DLL .Net es que no hay nada que lo interprete para que se ejecute dicho codigo. entonces ya es obio lo que debemos hacer no ?

Bien podemos tomar varios caminos para resolver esto, a continuacion dejare algunos metodos que pueden usar:

1) Cargar el Interprete (CLR - CoreCLR) en el proceso destino y darle Instrucciones de que cargue nuestra DLL .Net - Esta tecnica es conocida como "CLR/CoreCLR Hosting".
Ejemplos : CLR Hosting | Core CLR Hosting | Tambien esta mi cargador Universal usa CLR Hosting (osea solo .Net Framework) Aqui
2) Ver que hace el CLR/Core CLR debajo el capo, y convertir cada instruccion IL a una intruccion nativa (ASM), podriamos recontruir nuestra DLL administrada a una DLL no administrada, Nativa. Esto ya se ha implementado usando Native AOT. Cabe destacar que este metodo solo funciona en .NET Core.
Ejemplo : SharpNativeDLL
3) Usando nethost.h y hostfxr.h , esto es muy complejo para lo que queremos hacer, asi que no vale la pena investigar, pueder leer mas Aqui .​
4) Usando Unmanaged.NET (Solo .NET Framework) .



Bueno ahora ya saben que usar, pero hoy vengo a demostrar un metodo aun mas facil, realmente facil. sin complicaciones ni configuraciones complejas. y es usando NETBuilderInjection , sigan los pasos a continuacion ;

1) Creen su Proyecto - Libreria DLL Usando .NET Framework e Instale la ultima version de NETBuilderInjection; (en un futuro se admitira .NET Core)

Instalacion:

  • Descargue la ultima version del paquete Aqui : NETBuilderInjection/releases
  • Instale el paquete en su proyecto usando Package Manager Console. :

Código:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!


2 ) Escriba su punto de entrada de su DLL (EntryPoint) , Recuerde que su EntryPoint debe ser Publico y accesible para todos (public static) [Public Shared] y tendra un atributo llamado InjectionEntryPoint especial con la Informacion requerida por el NETBuilderInjection.


Creando el Proyecto :

C#
C#:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!


VB

C#:
Por favor, Acceder o Regístrate para ver el contenido de los códigos!

3) Compile su codigo, Vera que en la carpeta Debug/Release Encontrara una dll que al final del nombre tendra ".exported" , esa sera su dll Inyectable, puede probar Inyectandola en cualquier proceso con cualquier inyector, sin Embargo yo recomiendo el mio : DLL Injector Hacker Remix

Notas

El atributo InjectionEntryPoint, Cuenta con 3 Variables de PreConfiguracion, Explicare cada una de ellas :


  • CreateThread : Crea un nuevo Thread para su codigo al ser cargado en el proceso, esto evita que su codigo haga que el proceso se cuelque en tareas pesadas.
  • BuildTarget : Establece el Formato de su dll Exportada, esto es util por si quiere que su dll no sea .dll sino .asi , es una utilidad que le ahorra tiempo.
  • MergeLibs: Si su DLL consta de otras librerias, tendria que colocar esas librerias en la misma ruta Del proceso destino, para que su dll Injectada pueda usarlas. pero gracias a esto eso no hara falta, esto unira su DLL con sus librerias, generando una sola DLL Inyectable que no necesitara Dependencias.



Recuerden dejar Like al Post y Una estrella al Repositorio de NETBuilderInjection, Gracias por leer.
 
Atrás
Arriba