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

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con Inyector Dll
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con Inyector Dll  (Leído 2,654 veces)
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Problema con Inyector Dll
« en: 21 Septiembre 2013, 02:13 am »

Hola Gente!! Alguien podria probar este codigo a ver por que no funca?
Al parecer, los valores que retornan las funciones y los valores de GetLastError() estan bien, pero el programa no funciona.. Estoy teniendo el mismo problema con un programa en VB.NET que postie en Analisis y Diseño de Malware. Bueno, ahi va.. :)

Código:
#include <windows.h>
#include <iostream>
using namespace std;

int main()
{

//********* ESTRUCTURAS ***********
 
 PROCESS_INFORMATION Process_Info = {0};
 STARTUPINFO StartUpInfo = {0};

//********** VARIABLES ************

 HMODULE Modulo;
 FARPROC Funcion;
 LPCVOID Virtual;
 HANDLE ThreadId;
 int Ret;

 wchar_t App_Name[] = L"Hola.exe";
 wchar_t Dll_Name[] = L"dllvirus.dll";  

    //************ INICIO *************

StartUpInfo.cb = sizeof(StartUpInfo);

cout << endl;

Modulo = LoadLibraryA("kernel32.dll");
cout << "Kernel32 BaseAddress: " << Modulo << endl;
Funcion = GetProcAddress(Modulo, "LoadLibraryA");
cout << "LoadLibraryA BaseAddress: " << Funcion << endl;

cout << endl;

// NORMAL_PRIORITY_CLASS
// CREATE_SUSPENDED
Ret = CreateProcess(App_Name, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &StartUpInfo, &Process_Info);
cout << "CreateProcess ERROR CODE: " << GetLastError() << endl;
cout << "CreateProcess return value: " << Ret << endl;

cout << endl;

cout << "*************************" << endl;
cout << "* hProcess: " << Process_Info.hProcess << "\t*" << endl;
cout << "* hThread: " << Process_Info.hThread << "\t*" << endl;
cout << "* dwThreadId: " << Process_Info.dwThreadId << "\t*" << endl;
cout << "* dwProcessId: " << Process_Info.dwProcessId << "\t*" << endl;
cout << "*************************" << endl;

cout << endl;
int DllLen = 12;
cout << "dllvirus.dll" << " LEN: " << DllLen << endl;

cout << endl;

Virtual = VirtualAllocEx(Process_Info.hProcess, NULL, DllLen, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
cout << "VirtualAllocEx ERROR CODE: " << GetLastError() << endl;
cout << "VirtualAllocEx: " << Virtual << endl;

cout << endl;

Ret = WriteProcessMemory(Process_Info.hProcess, &Virtual, &DllLen, DllLen, NULL);
cout << "WriteProcessMemory ERROR CODE: " << GetLastError() << endl;
cout << "WriteProcessMemory return value: " << Ret << endl;

cout << endl;

ThreadId = CreateRemoteThread(Process_Info.hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)Funcion, &Virtual, 0, NULL);
cout << "CreateRemoteThread ERROR CODE: " << GetLastError() << endl;
cout << "CreateRemoteThread Handle: " << ThreadId << endl;

cout << endl;
cout << "Waiting for CreateRemoteThread..." << endl;
cout << endl;

WaitForSingleObject(Process_Info.hProcess, 1000);

cout << endl;
cout << "Lunching App..." << endl;
cout << endl;

ResumeThread(Process_Info.hProcess);

cout << endl;
cout << "Closing Handle..." << endl;
cout << endl;

CloseHandle(Process_Info.hProcess);

cout << endl;
cout << "End :)" << endl;
cout << endl;

cin.get();

return 0;
}

Ha,, me olvidaba,, Hola.exe es un "Hola mundo" en un MessageBox echo en ASM y dllvirus.dll lo que hace es sobreescribir el texto del mensaje con otro texto, pero bueno, la idea se entiende, por que no inyecta? :/


« Última modificación: 21 Septiembre 2013, 02:31 am por Vaagish » En línea

BloodSharp


Desconectado Desconectado

Mensajes: 804


El Messi-Vegeta :D


Ver Perfil
Re: Problema con Inyector Dll
« Respuesta #1 en: 21 Septiembre 2013, 05:30 am »

Un comentario te voy a hacer y puede que sea el error que te falla en el programa: los strings en C/C++ son arrays de caracteres, que finalizan con el byte cero.

En tu código:
Código:
int DllLen = 12;
cout << "dllvirus.dll" << " LEN: " << DllLen << endl;

ponés la cantidad de letras de tu string (12 bytes) pero realmente los programas manejan "d l l v i r u s . d l l \0" (13 bytes)... proba con longitud 13 y tal vez te funcione correctamente...


B#


En línea



Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Problema con Inyector Dll
« Respuesta #2 en: 22 Septiembre 2013, 01:18 am »

Gracias por responder IEAX, pero no funciono.. ahora estaba probando el CreateProcess con GetExitCodeProcess y parece que funciona bien (Retorna 259 que seria STILL_ACTIVE), aparte el Hola.exe se ejecuta, pero no se ve! Crea el proceso en modo suspendido, pero al parecer no puede iniciar el main... No se que inventar, los valores de retorno estan bien, reserva memoria, la escribe, pero no funca.. :/
En línea

orlando9427

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Problema con Inyector Dll
« Respuesta #3 en: 22 Septiembre 2013, 01:40 am »

Declaras Virtual como un puntero que almacena la dirección del buffer, pero pasas su dirección cuando debes de pasar su valor.
A lo que me refiero es:
Código
  1. Ret = WriteProcessMemory(Process_Info.hProcess, &Virtual, &DllLen, DllLen, NULL);
En el puntero al buffer le pasas un puntero al puntero del buffer, igual con CreateRemoteThread. Además pasas un puntero de la variable que contiene el tamaño de la cadena cuando debes de pasar la cadena.
Código
  1. Ret = WriteProcessMemory(Process_Info.hProcess, Virtual, &Dll_Name, DllLen, NULL);

Saludos!
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Problema con Inyector Dll
« Respuesta #4 en: 22 Septiembre 2013, 01:59 am »

Verdad,, lo habia arreglado hace un momento antes de volver a ver el foro jeje ahora quedo asi:

Código:
Ret = WriteProcessMemory(Process_Info.hProcess, (LPVOID)Virtual, &Dll_Name, DllLen, NULL);

Pero no funca igual...
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Problema con Inyector Dll
« Respuesta #5 en: 24 Septiembre 2013, 19:34 pm »

Bueno, por si a alguien le interesa, yo me aburri de intentarlo, pero pude sacar alguna conclusión antes de morir en el intento..

Es mucho mas simple hacer esto con OpenProcess que con CreateProcess, al parecer, CreateProcess no esta funcionando bien porque no rellena la informacion que deberia al terminar la funcion, a que me refiero: las estructuras PROCESS_INFORMATION y STARTUPINFO no cargan la informacion que deberian, en especial el hProcess, fundamental para que funcione.. No soy un experto del Olly ni el Wnddbg, pero a simple vista, puede ver como un codigo en ASM si hacia su trabajo y en C++ o VB.Net no lo hacia, si algun DebugMaster quiere intentarlo, genial. Al parecer, puede ser un problema con las variables, o con las estructuras, pero no se porque en ASM no precisa definir, ni declarar mas nada y en otros lenguajes si,, a lo mejor por el compilador, pero a mi ya me funciono con OpenProcess y listo. :D

Saludos!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con Inyector para el Counter-Strike
Programación Visual Basic
XP. 3 2,120 Último mensaje 11 Septiembre 2006, 06:00 am
por XP.
[Source] Inyector de Dll's en C#
.NET (C#, VB.NET, ASP)
Hendrix 1 2,776 Último mensaje 3 Junio 2007, 17:23 pm
por BADBYTE-K
[Python] Easy Inyector By Doddy H
Scripting
BigBear 1 2,215 Último mensaje 28 Agosto 2012, 03:39 am
por HIRONAKAMURA
como hacer bypass o inyector para xtrap
Dudas Generales
Hack Principiante 2 3,828 Último mensaje 14 Julio 2016, 17:32 pm
por NewBraiian
inyectores poco útiles respecto a un inyector reflexivo?
Análisis y Diseño de Malware
Borito30 2 4,853 Último mensaje 7 Diciembre 2016, 13:31 pm
por Borito30
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines