Título: No me funciona la inyección DLL Publicado por: ApOkAlizE en 11 Diciembre 2011, 14:21 pm Bueno estoy intentando hacer una inyección DLL y en VC++ tengo esto.
#include <windows.h> #include <Tlhelp32.h> #include "iostream" using namespace std; void main() { HANDLE proceso; LPVOID RemoteString; LPVOID nLoadLibrary; int pid; HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); PROCESSENTRY32 procinfo = { sizeof(PROCESSENTRY32) }; while(Process32Next(handle, &procinfo)) { if(!strcmp("procinfo.szExeFile", "calc.exe")) { CloseHandle(handle); pid = procinfo.th32ProcessID; cout << pid << endl; system("pause"); } } CloseHandle(handle); proceso = OpenProcess(PROCESS_ALL_ACCESS, false, pid); nLoadLibrary = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA"); RemoteString = (LPVOID)VirtualAllocEx(proceso,NULL,strlen("C:\\Users\\Ramonet\\Documents\\dll.dll"),MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE); WriteProcessMemory(proceso,(LPVOID)RemoteString,"C:\\Users\\Ramonet\\Documents\\dll.dll",strlen("C:\\Users\\Ramonet\\Documents\\dll.dll"),NULL); CreateRemoteThread(proceso,NULL,NULL,(LPTHREAD_START_ROUTINE)nLoadLibrary,(LPVOID)RemoteString,NULL,NULL); CloseHandle(proceso); } Y en la dll que esta situada en Documents esto: #include <windows.h> BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { if (ul_reason_for_call == DLL_PROCESS_ATTACH) { MessageBox (0, "aaa", "aa", 0); } return TRUE; } Y ni ejecutando el exe como administrador consigo inyectar a la calculadora (que esta ejecutandose en ese momento) porque a ver ¿ahora al ejecutar la calculadora de nuevo tendria que aparecer el Messagebox verdad? Estoy muy perdido con este tema. gracias. Título: Re: No me funciona la inyección DLL Publicado por: [L]ord [R]NA en 11 Diciembre 2011, 20:13 pm Pon todo dentro de sus debidas etiquetas y es posible que lo lea
Título: Re: No me funciona la inyección DLL Publicado por: Unbr0ken en 12 Diciembre 2011, 00:34 am "jkasjkadkajsdñasjodhq", ese es el resultado de un copy/paste.
Aburrido esta tarde reformé ese código: Código
Y... por el lado de la librería, tengo esto: Código
Y... el resultado te queda a ti, (ostia ¿qué difícil no?...) Tu franela me hace pensar en: lamming, lamming everywhere. Salud. Título: Re: No me funciona la inyección DLL Publicado por: ApOkAlizE en 14 Diciembre 2011, 21:21 pm Muchas gracias UnBr0ken, bueno no es lamming lo que pasa es que cuando me estudio algo nuevo primero me gusta más tener un ejemplo basico que funcione para poder ver así paso a paso como funciona y poder provar de ir cambiando cosas para intentar conseguir hacer cosas distintas.
Por cierto se inyecta la DLL, pero solo la ejecuta esa vez, es decir, al ejecutar la calculadora de nuevo ¿no tendria que volver a cargar la dll? Bueno no se, ahora me pongo a estudiarme bien todo este tema, muchas gracias en serio :) Título: Re: No me funciona la inyección DLL Publicado por: Unbr0ken en 14 Diciembre 2011, 23:51 pm Por cierto se inyecta la DLL, pero solo la ejecuta esa vez, es decir, al ejecutar la calculadora de nuevo ¿no tendria que volver a cargar la dll? Bueno no se, ahora me pongo a estudiarme bien todo este tema, muchas gracias en serio :) Ostia (?), obviamente estás inyectando una sola vez en el proceso en ejecución, si abres una nueva calculadora tendrías que inyectar en esta ya que toda la memoria de la calculadora es "nueva", no tiene ningún módulo adicional cargado, en este caso el de la .dll del MessageBox. Ahora si quieres que cada vez que se ejecute la calculadora, se cargue la .dll, deberás modificar el ejecutable, creo que tiene que ver con la estructura PEB, pero ni idea... nunca profundicé ese tema. Google te puede ayudar ahí, por otro lado... busca primero conceptos y luego ve a la práctica, si no... imagina. Salud. Título: Re: No me funciona la inyección DLL Publicado por: ApOkAlizE en 17 Diciembre 2011, 13:52 pm Muchas gracias.
Por cierto ¿sabes como saber el nombre de la classe de un programa? por ejemplo, la calculadora el nombre de su classe es calcframe, sabes si hay algo que sirva para obtener el nombre de classe de un programa, he visto por ahí spy++ o winspy++... ¿se puede hacer desde C++? Título: Re: No me funciona la inyección DLL Publicado por: Unbr0ken en 17 Diciembre 2011, 19:44 pm Muchas gracias. Por cierto ¿sabes como saber el nombre de la classe de un programa? por ejemplo, la calculadora el nombre de su classe es calcframe, sabes si hay algo que sirva para obtener el nombre de classe de un programa, he visto por ahí spy++ o winspy++... ¿se puede hacer desde C++? ¿Qué no se puede hacer desde C++?... (Y mucho más si hablamos de Win32API...) Mirad la API GetClassName (http://msdn.microsoft.com/en-us/library/ms633582(v=VS.85).aspx), procede a usarla en tu aplicación. (Combina otras API con esta para lograr un funcionamiento correcto) Por cierto, pasate por google antes de hacer alguna pregunta, el foro debería ser usado para casos donde no se encuentre resultado alguno a tu duda. Salud. P.D.: Si preguntas por esto por haber visto que he usado como primer parámetro "CalcFrame" al momento de hacer la llamada a la API FindWindow, necesitas saber que puedes omitir cualquiera de estos dos parámetros, pasando en vez de este un valor nulo (NULL). |