elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [Herramienta] Unmanaged.Net
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Herramienta] Unmanaged.Net  (Leído 941 veces)
**Aincrad**


Desconectado Desconectado

Mensajes: 598



Ver Perfil WWW
[Herramienta] Unmanaged.Net
« en: 31 Marzo 2022, 23:19 pm »

Se acuerdan de este Post? : [Ayuda] Crear Archivo .asi (.dll) para GTA:SA | ASILOADER , Bueno , Lo he logrado, despues de 2 años y medios.  ;D

@Elektro se que andas perdido pero tienes que ver esto.   ::)

Introduccion

En mi Cabeza siempre ha rondado la Idea De Inyectar una DLL hecha en .NET (C# / VB) en un Proceso como lo harías con una DLL Nativa (C++) .

De hecho Hize un Loader Universal UdrakoLoader , básicamente debes inyectar el UdrakoLoader.dll y el se encargara de cargar todas las DLL (.Net) en el Proceso del juego , Mediante el método bien conocido de CLR Hosting.


Pero no estaba Satisfecho, Necesitaba crear algo que me permitiera Generar una DLL en base a una DLL .net, que se pueda Inyectar como lo harías con cualquier cheat normalmente.

Que Es Unmanaged.NET ?


Esta Herramienta es el Resultado Final de mi Investigación , Básicamente Toma una DLL hecha en NET , Exporto Una Función en Especifico (Esta función Sera el Equivalente al DLLMain() de C++, el EntryPoint de la DLL) y Después la Empaqueto con un Stub hecho en C , Compilo el Stub Generando la Nueva DLL ya Exportada.

Después de estos Pasos, Puedes Inyectar tu DLL con cualquier Inyector .

Aunque Podrías llamar a mi herramienta un Packer mixto. XD


Descarga

https://github.com/DestroyerDarkNess/Unmanaged.Net/releases/download/v1.0/Unmanaged.Net.7z

Como Usar ?

Primero Necesitamos Nuestra DLL hecha en .NET , A continuación pondré el Código de La DLL que usaremos :

Código
  1. using System;
  2. using System.Windows.Forms;
  3.  
  4. namespace TestLibrary
  5. {
  6.    public class Test
  7.    {
  8.  
  9.        public static void DllMain()
  10.        {
  11.            MessageBox.Show("Hello World!");
  12.        }
  13.  
  14.    }
  15. }

Código
  1. using System;
  2. using System.Windows.Forms;
  3.  
  4. namespace TestLibrary
  5. {
  6.    public class Test
  7.    {
  8.  
  9.        public static void DllMain()
  10.        {
  11.            MessageBox.Show("Hello World!");
  12.        }
  13.  
  14.    }
  15. }





Bien ya Tenemos Nuestra DLL, ahora Seguiremos estos Pasos:

  • 1. Abriremos la Herramienta y Seleccionamos La DLL (Automáticamente Se Cargaran Los Métodos)
  • 2. Seleccionamos el Método que Funcionara como EntryPoint de nuestra DLL.
  • 3. Seleccionamos la Arquitectura Destino para la que compilara. Generalmente es I386
  • 4. Presionar el Botón "Convet To Unmanaged" .
  • 5. Si todo termino Correctamente , en la misma ruta de tu DLL, habrá otra DLL que tendrá el nombre de "xxxExported.dll" , Esa es tu DLL Final, Inyéctala en cualquier Proceso!


Notas

  • El Metodo EntryPoint de tu DLL .NET , debe Ser Publico y Accesible para todos.




  • La Herramienta esta en su Primera versión estable, Puede haber Errores .



Injectando DLL (Prueba Final)





Gracias Por Leer, Si te ha gustado , Porfavor Comenta el Post.  ::)
Si quieres estar Pendiente de las Actualizaciones, Puedes una Estrella en el Repositorio de Github
Proximamente Publicare el Codigo Fuente y las Actualizaciones.

https://github.com/DestroyerDarkNess/Unmanaged.Net





Creditos

  • XPN
  • BloodSharp
  • Destroyer (yo)




« Última modificación: 1 Abril 2022, 17:18 pm por **Aincrad** » En línea



fary
Moderador Global
***
Desconectado Desconectado

Mensajes: 1.020



Ver Perfil WWW
Re: [Herramienta] Unmanaged.Net
« Respuesta #1 en: 3 Abril 2022, 07:30 am »

Enhorabuena, me encantaría saber más acerca de como funciona, si puedes dar mas detalles/explicación. 

Aunque también me inunda la gran duda.... ¿Vale para algo más que como experimento?  Desconozco .NET pero dudo que sin usar punteros puedas hacer algo dentro de un proceso (Al menos de forma medianamente 'decente').

saludos!


En línea

Un byte a la izquierda.
RayR

Desconectado Desconectado

Mensajes: 179


Ver Perfil
Re: [Herramienta] Unmanaged.Net
« Respuesta #2 en: 3 Abril 2022, 20:58 pm »

Buen aporte. Aunque no lo probé (tan sólo porque actualmente ya no me llaman mucho la atención estos temas, no por desconfianza o algo por el estilo) sí le di un vistazo al código y es refrescante ver algo directo, claro y sin florituras innecesarias (que parece ser lo común en estos tiempos). Te comento un error:

Código
  1. char *Pathvar = getenv("TEMP");
  2. ...
  3. DLLName = strcat(Pathvar, DLLName);

strcat modifica su primer parámetro, pero, dado que tú no reservaste la memoria a la que apunta, no es seguro hacerlo y de acuerdo a las reglas de C, es incorrecto (básicamente es como escribir más allá de los límites de un array). Como suele ser el caso con los bugs de punteros en C, es posible tener la suerte de que el programa funcione bien, pero no deja de ser un error esperando a manifestarse. Al margen de eso, las reglas del lenguaje expresamente prohíben modificar los datos del puntero devuelto por getenv. También aquí el resultado podría ser impredecible, por lo que es mejor corregirlo reservando (malloc) para Pathvar un bloque con el número de bytes suficientes para la ruta del directorio temporal más el nombre de la DLL más un byte adicional para el caracter nulo, y entonces sí, copiar getenv("TEMP") a Pathvar y luego concatenarle el nombre de la DLL.

También hay algunas maneras en que podrías ahorrarte la compilación. Esto a lo mejor ya lo sabes y decidiste compilar por alguna otra razón, pero si no es el caso, y lo haces sólo para que el stub pueda conocer los datos de la DLL de .NET (preprocesas el .c para sustituir los datos entre "$$" antes de la compilación, imagino), puedes distribuir (o incluir en tu EXE) solamente la DLL del stub ya compilada. Tu programa podría simplemente añadirle como recursos tanto la DLL de .NET como el nombre del entry point o cualquier otra cosa que necesites, mediante la familia de funciones *UpdateResource de la API de Windows o lo que proporcione .NET. El stub cargaría esos recursos y reservaría dinámicamente la memoria de rawData. O, sin recursos, tu ejecutable podría limitarse a escribir toda esa información (junto con offsets para encontrar los datos fácilmente) al final de la DLL del stub. En cualquier caso, ya con esa información el stub procedería a escribir los bytes en la DLL temporal, la cargaría, etc. tal como lo hace actualmente.
En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 598



Ver Perfil WWW
Re: [Herramienta] Unmanaged.Net
« Respuesta #3 en: 4 Abril 2022, 18:16 pm »

Enhorabuena, me encantaría saber más acerca de como funciona, si puedes dar mas detalles/explicación. 

Aunque también me inunda la gran duda.... ¿Vale para algo más que como experimento?  Desconozco .NET pero dudo que sin usar punteros puedas hacer algo dentro de un proceso (Al menos de forma medianamente 'decente').

saludos!

Claro que si vale para algo bro, Ahora Puedes Inyectar tu código (.NET) , en un Proceso Legitimo, Muy Util para desarrollar malware.




Buen aporte. Aunque no lo probé (tan sólo porque actualmente ya no me llaman mucho la atención estos temas, no por desconfianza o algo por el estilo) sí le di un vistazo al código y es refrescante ver algo directo, claro y sin florituras innecesarias (que parece ser lo común en estos tiempos). Te comento un error:

Código
  1. char *Pathvar = getenv("TEMP");
  2. ...
  3. DLLName = strcat(Pathvar, DLLName);

strcat modifica su primer parámetro, pero, dado que tú no reservaste la memoria a la que apunta, no es seguro hacerlo y de acuerdo a las reglas de C, es incorrecto (básicamente es como escribir más allá de los límites de un array). Como suele ser el caso con los bugs de punteros en C, es posible tener la suerte de que el programa funcione bien, pero no deja de ser un error esperando a manifestarse. Al margen de eso, las reglas del lenguaje expresamente prohíben modificar los datos del puntero devuelto por getenv. También aquí el resultado podría ser impredecible, por lo que es mejor corregirlo reservando (malloc) para Pathvar un bloque con el número de bytes suficientes para la ruta del directorio temporal más el nombre de la DLL más un byte adicional para el caracter nulo, y entonces sí, copiar getenv("TEMP") a Pathvar y luego concatenarle el nombre de la DLL.

Gracias Lo tomare en cuenta, apenas se lo basico de C/C++ , el Compañero @BloodSharp , me guio como hacerlo.



También hay algunas maneras en que podrías ahorrarte la compilación. Esto a lo mejor ya lo sabes y decidiste compilar por alguna otra razón, pero si no es el caso, y lo haces sólo para que el stub pueda conocer los datos de la DLL de .NET (preprocesas el .c para sustituir los datos entre "$$" antes de la compilación, imagino), puedes distribuir (o incluir en tu EXE) solamente la DLL del stub ya compilada. Tu programa podría simplemente añadirle como recursos tanto la DLL de .NET como el nombre del entry point o cualquier otra cosa que necesites, mediante la familia de funciones *UpdateResource de la API de Windows o lo que proporcione .NET. El stub cargaría esos recursos y reservaría dinámicamente la memoria de rawData. O, sin recursos, tu ejecutable podría limitarse a escribir toda esa información (junto con offsets para encontrar los datos fácilmente) al final de la DLL del stub. En cualquier caso, ya con esa información el stub procedería a escribir los bytes en la DLL temporal, la cargaría, etc. tal como lo hace actualmente.


Claro Originalmente lo tenia asi, Pero Por que tan oculto ? , Decidí que es mejor dejar el stub afuera, para que cualquiera pueda modificarlo a su antojo. claro exepto las variables dentro de $$ , ya que serán sustituidas por la herramienta.

Ademas , un stub estático , sera muy propenso a ser detectado por los antivirus ser tachado a futuro como "Malware" .

Entonces es mejor dejar el stub Dinamico , para que cualquiera pueda cambiarlo a su gusto y despues lo compilo .



Gracias por Comentar, Me alegra ver nuevas ideas. si tienen alguna otra idea, porfavor escribanla.








En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Nueva herramienta
Ingeniería Inversa
krc_4u 0 1,228 Último mensaje 9 Agosto 2006, 23:30 pm
por krc_4u
Herramienta Extraer
Diseño Gráfico
Codename!! 1 1,118 Último mensaje 11 Agosto 2006, 20:42 pm
por Codename!!
Marshal - Interactuando entre managed y unmanaged memory. (C++ CLI)
.NET (C#, VB.NET, ASP)
[D4N93R] 5 4,813 Último mensaje 14 Julio 2014, 16:31 pm
por Eleкtro
herramienta backup
Windows
roxie 4 1,800 Último mensaje 20 Enero 2016, 17:18 pm
por xGENiiiuS
programacion de herramienta
Programación C/C++
carlosloza 1 831 Último mensaje 14 Abril 2016, 20:38 pm
por HardForo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines