elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  EXE reciba algo de DLL y se piense que lo ha enviado el servidor
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: EXE reciba algo de DLL y se piense que lo ha enviado el servidor  (Leído 8,405 veces)
SnakeDrak

Desconectado Desconectado

Mensajes: 243


[GPG: 0x9680A09E]


Ver Perfil
Re: EXE reciba algo de DLL y se piense que lo ha enviado el servidor
« Respuesta #10 en: 21 Mayo 2010, 22:28 pm »

Hola,

¿Perdona? Desde que empezaste a responder en el tema sabía que no podías resolverme mi duda principal (o tal vez no lo entendiste) y no te he faltado el respeto en ningún momento, al contrario, te lo he agradecido y te lo agradezco de nuevo por intentar ayudarme.

A y si te interesa te explico por qué no se puede hacer lo que dices: El hook que he hecho (bueno es básicamente lo que es un hook) lo que hace es cambiar la función recv que lee el EXE del winsock por la mía del DLL, con esto puedo recibir, modificar lo que recibe el EXE, leer lo que recibe.. etc, pero no puedo hacer que reciba algo nuevo al EXE..

Ahora mi duda es como enviar al EXE algo, o hacer que reciba algo nuevo :), eso no sé hacerlo, aunque ejecute el recv original este está en el winsock y el EXE no se interpone.. es decir no le llega nada al EXE.

De nuevo gracias por tu ayuda, no soy ningún experto pero sé perfectamente lo que he hecho y hago (para eso me costó aprender).


En línea

bizco


Desconectado Desconectado

Mensajes: 698


Ver Perfil
Re: EXE reciba algo de DLL y se piense que lo ha enviado el servidor
« Respuesta #11 en: 21 Mayo 2010, 22:32 pm »

yo tampoco te he faltado el respeto.

Citar
int recv(
  __in   SOCKET s,
  __out  char *buf,
  __in   int len,
  __in   int flags
);

aun piensas que no puedes hacer llegar lo que tu quieras al exe? yo creo que si.

Citar
con esto puedo recibir, modificar lo que recibe el EXE, leer lo que recibe.. etc, pero no puedo hacer que reciba algo nuevo al EXE..

tu mismo te contestas.

Citar
Desde que empezaste a responder en el tema sabía que no podías resolverme mi duda principal

pues te conteste lo mas logico, si la funcion esta en el cliente lo mas logico es un puntero a funcion. esto implica, localizar la funcion, parametros que acepta y poco mas, esta es la forma correcta de hacer lo que pides. pero si te empeñas en hacerlo desde el socket, poder se puede.


« Última modificación: 21 Mayo 2010, 22:36 pm por ctlon » En línea

SnakeDrak

Desconectado Desconectado

Mensajes: 243


[GPG: 0x9680A09E]


Ver Perfil
Re: EXE reciba algo de DLL y se piense que lo ha enviado el servidor
« Respuesta #12 en: 22 Mayo 2010, 00:24 am »

Hola ctlon,

Sé que esa es la forma correcta, de hecho lo comento en mi primer post, pero no sé hacerla y como me urge prisa pensé hacerlo de esa manera.

A ver ctlon es que no me estás entendiendo, si lees mi primer post lo entenderás, la única manera que hay para hacer llegar al EXE lo que yo quiera es SACRIFICANDO un packet, es decir, cuando reciba algo modificarlo antes de finalizar la función hook y entonces le llegará lo que yo quiera, pero NO quiero esto, quiero que directamente reciba algo del DLL sin necesidad de que le llegue algo.

Si después de esta explicación aún insistes en que se puede, ¿podrías explicarme cómo?

Saludos.
En línea

bizco


Desconectado Desconectado

Mensajes: 698


Ver Perfil
Re: EXE reciba algo de DLL y se piense que lo ha enviado el servidor
« Respuesta #13 en: 22 Mayo 2010, 00:36 am »

En la misma msdn tienes este codigo:

Código:
do {

        iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
        if ( iResult > 0 )
            printf("Bytes received: %d\n", iResult);
        else if ( iResult == 0 )
            printf("Connection closed\n");
        else
            printf("recv failed: %d\n", WSAGetLastError());

    } while( iResult > 0 );


recv en tu caso llama a tu dll, solo tienes que copiar los datos al buffer y hacer return sin llamar a la funcion original.
En línea

SnakeDrak

Desconectado Desconectado

Mensajes: 243


[GPG: 0x9680A09E]


Ver Perfil
Re: EXE reciba algo de DLL y se piense que lo ha enviado el servidor
« Respuesta #14 en: 22 Mayo 2010, 00:43 am »

Hola ctlon,

Ya me rindo en explicártelo, así no se puede, no se puede porque aunque ejecutas el recibir del EXE (el hookeado) EL BUFFER RESULTANTE no lo LEERÁ el EXE porque has ejecutado la función desde otra función en el DLL, la única manera de hacerlo como he dicho 10 veces es que cuando SE EJECUTE el recibir, modifiques el buffer y así el buf resultante pase al EXE.

Ese código que me pusiste me resulta un poco tonto, tengo poco nivel de ingeniería inversa pero sé leer la documentación de msdn y ejecutar recv.. de hecho sin eso nunca podría haber hecho un hook.

Ya que me has "explicado" tu manera de hacerlo y he he explicado que eso NO se puede así hacer lo que yo digo, te doy las gracias por tu ayuda pero si no puedes aportar más esperaré a que alguien más responda, de verdad es que insistes en lo mismo, que ya había llegado a pensar que era otra cosa y por eso te pregunté cómo hacerlo pero tu manera no es más que la que te dije que no me sirve.

Saludos y gracias!!
En línea

bizco


Desconectado Desconectado

Mensajes: 698


Ver Perfil
Re: EXE reciba algo de DLL y se piense que lo ha enviado el servidor
« Respuesta #15 en: 22 Mayo 2010, 00:51 am »

Citar
Ya me rindo en explicártelo, así no se puede, no se puede porque aunque ejecutas el recibir del EXE (el hookeado) EL BUFFER RESULTANTE no lo LEERÁ el EXE porque has ejecutado la función desde otra función en el DLL

No sabes ni que estas diciendo,me rindo contigo.

En línea

[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.082


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: EXE reciba algo de DLL y se piense que lo ha enviado el servidor
« Respuesta #16 en: 22 Mayo 2010, 01:29 am »

Y si haces un send al puerto que está escuchando el exe  :huh: . Si no funciona porque el exe utiliza algo para comprobar si el servidor es realmente el servidor, hookea ese algo.

Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
SnakeDrak

Desconectado Desconectado

Mensajes: 243


[GPG: 0x9680A09E]


Ver Perfil
Re: EXE reciba algo de DLL y se piense que lo ha enviado el servidor
« Respuesta #17 en: 22 Mayo 2010, 01:46 am »

Hola,

¿Mm pero imagino que si no es por el mismo socket no funcionará no? No lo sé pero voy a probar como dices, tal vez funcione la verdad, muchas gracias por tu respuesta Hacker_Zero.

Saludos!
En línea

bizco


Desconectado Desconectado

Mensajes: 698


Ver Perfil
Re: EXE reciba algo de DLL y se piense que lo ha enviado el servidor
« Respuesta #18 en: 22 Mayo 2010, 02:13 am »

Hookeas socket = Guardas el manejador.

setsockopt activas SO_RCVTIMEO = Ya no queda "enganchado" y te llamara todo el rato. esta funcion tiene que estar escrita perfectamente para evitar fallos de conexion.

hookeas recv = copias al buffer los datos y retornas el numero de caracteres copiados.

Y no me digas que no funciona pq lo he probado aproposito. esto haciendolo simple, para mas detalles te lees la documentacion.

Citar
Ya me rindo en explicártelo, así no se puede, no se puede porque aunque ejecutas el recibir del EXE (el hookeado) EL BUFFER RESULTANTE no lo LEERÁ el EXE porque has ejecutado la función desde otra función en el DLL, la única manera de hacerlo como he dicho 10 veces es que cuando SE EJECUTE el recibir, modifiques el buffer y así el buf resultante pase al EXE.

de primeras tu no ejecutas nada, es el programa el que llama a la funcion y no tiene que leer nada, es la funcion la que copia los datos en el buffer.

Citar
Ese código que me pusiste me resulta un poco tonto, tengo poco nivel de ingeniería inversa pero sé leer la documentación de msdn y ejecutar recv.. de hecho sin eso nunca podría haber hecho un hook.

El codigo es precisamente de la MSDN. a mi me sorprende que como no sabiendo usar punteros a funciones seas capaz de hacer un hook.

« Última modificación: 22 Mayo 2010, 02:21 am por ctlon » En línea

SnakeDrak

Desconectado Desconectado

Mensajes: 243


[GPG: 0x9680A09E]


Ver Perfil
Re: EXE reciba algo de DLL y se piense que lo ha enviado el servidor
« Respuesta #19 en: 22 Mayo 2010, 08:45 am »

Hola ctlon,

Cita de: ctlon
Hookeas socket = Guardas el manejador.

No he dicho que no tenga el manejador, el manejador lo tengo la cosa es como enviar al cliente por el socket ya abierto puesto que send envía al servidor.

Cita de: ctlon
setsockopt activas SO_RCVTIMEO = Ya no queda "enganchado" y te llamara todo el rato. esta funcion tiene que estar escrita perfectamente para evitar fallos de conexion.

Esta función no la conocía.

Cita de: ctlon
Y no me digas que no funciona pq lo he probado aproposito. esto haciendolo simple, para mas detalles te lees la documentacion.

No sé como dices que de la manera que explicas te funcione, posiblemente sigues sin entender el problema que tengo.

Cita de: ctlon
de primeras tu no ejecutas nada, es el programa el que llama a la funcion y no tiene que leer nada, es la funcion la que copia los datos en el buffer.

Vuelves a no entenderlo o tal vez soy yo, te hago un apunte :p:

Código
  1. /*********************************************************************
  2.  * Hook a la función "RECV", aquí es donde haremos todo el proceso del antibot
  3.  *********************************************************************/
  4. int WINAPI __stdcall recibir(SOCKET s, char* buf, int len, int flags)
  5. {
  6. int RecvBytes = (!announce)?_recv(s, buf, len, flags):Kami(buf);
  7. if(RecvBytes == SOCKET_ERROR) return RecvBytes;
  8. if((*(unsigned short*)buf)==0x283) CreateThread(0, 0, (LPTHREAD_START_ROUTINE)&Kami, 0, 0, 0);
  9. if((*(unsigned short*)buf)==0x0041) RecvBytes=antibot(s, buf, RecvBytes, len, flags); // Si el packet recibido es del antibot lo ejecutamos
  10. return RecvBytes;
  11. }
  12.  

Este es la función hookeada, el packet 0x283 es el de cuando el jugador accede al juego, lo que hace es crear otro thread para enviar el broadcast una vez que ha entrado al juego (esto es lo que hice rápido a tu manera pero de la forma que yo quiero).

Tu lo que dices es que ahí modifique el BUF, el cual luego obtiene el EXE, pero entonces el packet 0x283 no será recibido (ya que lo modifico por el 0x9a) por el EXE así que lo que yo quiero es que cuando entre al juego el DLL envíe un nuevo packet al EXE por eso te comenté lo de ejecutar recibir (que obviamente no funciona así) porque habrá que ejecutar la función (la cual no sé cómo será, tal vez estoy hoy espeso) para enviarle los datos al EXE.

Ese recibir es el que he hecho rápido según tu manera (sin modificar el BUF de ningún packet) y obviamente no funciona porque la función no es ejecutada por el EXE, aquí te dejo la función kami:
Código
  1. /**********************************************************************
  2.  * La función Kami envía al cliente un mensaje
  3. **********************************************************************/
  4. int Kami(char* buf){
  5. char msg[] = "Mensaje de prueba";
  6. int len = 4+sizeof(msg);
  7.  
  8. if(!announce){
  9. char* almacen = (char*)malloc(len);
  10. Sleep(1000); // Esperar 1 segundo una vez entrado al juego antes de enviar el mensaje
  11. announce = 1;
  12. recibir((SOCKET)NULL, (char*)almacen, len, 0);
  13. free(almacen);
  14. ExitThread(0);
  15. return 0;
  16. }
  17.  
  18. announce = 0;
  19. *(unsigned short*)buf = 0x9a; // Packet broadcast
  20. *(unsigned short*)(buf+2) = len; // Tamaño del packet
  21. memcpy(buf+4, msg, sizeof(msg)); // Añadimos el mensaje
  22. return len;
  23. }
  24.  

Tal vez con las funciones entiendas por qué no funciona tu manera.

Cita de: ctlon
El codigo es precisamente de la MSDN. a mi me sorprende que como no sabiendo usar punteros a funciones seas capaz de hacer un hook.

Tal vez porque la función recv sé que se encuentra en Ws2_32.dll y que se llama recv, entonces puedo llamar a la dirección de memoria con GetProcAddres y el handle GetModuleHandle y así modificar los primeros 5 bytes para que apunte a mi función. No hay que ser un genio para hacer esto... si sé hacer punteros a funciones, en todo caso no sé como saber cual es la función que el EXE ejecuta cuando envía un broadcast :p.

Puedes seguir pensando que soy un idiota, la verdad es que me da igual pero creo que si no lo pensases tal vez avanzaríamos más rápido, más que nada porque el hecho de demostrarte que sé utilizar la función recv (que con mirar la doc basta) es una pérdida de tiempo, gracias por tu ayuda y espero que entiendas con ese código rápido que hice por qué es que no funciona lo que dices (o tal vez yo no te entiendo a ti).

P.D: Para que me entiendas, yo no quiero modificar lo que recibe el EXE (esto ya lo hago para otras cosas), lo que quiero es enviar algo nuevo al EXE desde el dll.
Saludos!
« Última modificación: 22 Mayo 2010, 12:40 pm por SnakeDrak » En línea

Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Se puede ver que usuario modifico algo en un Servidor?
Seguridad
Tovenar 1 2,671 Último mensaje 26 Diciembre 2011, 12:55 pm
por adastra
Plantilla que reciba de entrada archivo flash flv??
Desarrollo Web
greenselves 0 1,593 Último mensaje 14 Abril 2012, 16:49 pm
por greenselves
[?]Crear un programa que piense por si mismo? « 1 2 3 »
Programación General
MineHitex 27 11,905 Último mensaje 31 Julio 2013, 14:22 pm
por ctap07b9
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines