Autor
|
Tema: Problema con Inyector Dll (Leído 2,904 veces)
|
Vaagish
Desconectado
Mensajes: 875
|
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.. #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
Mensajes: 812
¡ Hiperfoco !
|
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: 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
Mensajes: 875
|
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
Mensajes: 7
|
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: 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. Ret = WriteProcessMemory(Process_Info.hProcess, Virtual, &Dll_Name, DllLen, NULL);
Saludos!
|
|
|
En línea
|
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
Verdad,, lo habia arreglado hace un momento antes de volver a ver el foro jeje ahora quedo asi: Ret = WriteProcessMemory(Process_Info.hProcess, (LPVOID)Virtual, &Dll_Name, DllLen, NULL); Pero no funca igual...
|
|
|
En línea
|
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
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. Saludos!!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda con Inyector para el Counter-Strike
Programación Visual Basic
|
XP.
|
3
|
2,281
|
11 Septiembre 2006, 06:00 am
por XP.
|
|
|
[Source] Inyector de Dll's en C#
.NET (C#, VB.NET, ASP)
|
Hendrix
|
1
|
2,932
|
3 Junio 2007, 17:23 pm
por BADBYTE-K
|
|
|
[Python] Easy Inyector By Doddy H
Scripting
|
BigBear
|
1
|
2,378
|
28 Agosto 2012, 03:39 am
por HIRONAKAMURA
|
|
|
como hacer bypass o inyector para xtrap
Dudas Generales
|
Hack Principiante
|
2
|
4,081
|
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
|
5,090
|
7 Diciembre 2016, 13:31 pm
por Borito30
|
|