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 - bizco

#421
mira si el compilador que usas te deja especificar el subsystem y le pones gui, si no te deja igual te detecta al modificar al flag pq esta mal el cheksum.
#422
es raro que en hd media te diga de buscar el cdrom, a mi me dice que buscara una imagen valida en el dispositivo (la iso). de todos modos en algun pc me a pasado que estando la imagen no la encuentra, entonces lo hago de esta forma:

el pendrive booteable por un lado, otro pendrive con la iso arrancas y ya la encuentra. pero esto en el caso que te diga que no encuentra una imagen en el dispositivo. como te digo a mi del cdrom ni me sale ¿seguro que estas haciendo bien los pasos?
#423
para que tanta discusion sobre el espejo? si cada uno vemos las cosas a nuestra manera. nadie ve todo exactamente igual que otra persona.... nos engaña nuestro propio ojo.
#424
y dale.

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

pero repetimos, el cliente te llama a ti y una leve ojeada a la documentacion:

CitarIf no error occurs, recv returns the number of bytes received and the buffer pointed to by the buf parameter will contain this data received. If the connection has been gracefully closed, the return value is zero.

No he dicho que uses send logicamente, tienes que copiar los datos al buffer y devolver el numero de bytes, tal como si llegasen desde el socket (esto no lo sabe el cliente).

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

perdona, el que no esta entendiendo eres tu.

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

eso no es ni por asomo como te digo, si fuese como te digo eso volveria al cliente aun sin que llegasen datos y es eso lo que tienes que controlar tu.

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

No hay que ejecutar nada, lee la definicion de la funcion otra vez.

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

hijo mio, es precisamente lo que te estoy explicando. para que lo entiendas, pilla el codigo de la msdn y compilalo tal cual y observa que espera hasta que el servidor responde. ahora bien aplicale lo que te digo y veras que no espera y que deja la espera retornando WSAETIMEDOUT una vez obtienes el timeout si quieres puedes hacer creer al cliente que le a llegado informacion..... y repito copias los datos al buffer y le devuelves el numero de bytes copiados.

Cuando hay timeout quiere decir que el servidor no envio nada, por eso logicamente no pierdes datos. siendo esto asi, tu eres el encargado de decirle al cliente cuando se a cerrado la conexion. para mas datos http://msdn.microsoft.com/en-us/library/ms740668%28v=VS.85%29.aspx


Despues te queda otra que es hacer que el cliente pase por tu aplicacion para conectarse (a modo proxy local) de esta forma tienes mas facil enviarle cuando quieras datos al cliente ya que para el tu eres el servidor.

#425
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.

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

#426
CitarYa 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.

#427
En la misma msdn tienes este codigo:


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.
#428
Citar
    "r"   Open a file for reading. The file must exist.
    "w"   Create an empty file for writing. If a file with the same name already exists its content is erased and the file is treated as a new empty file.
    "a"   Append to a file. Writing operations append data at the end of the file. The file is created if it does not exist.
    "r+"   Open a file for update both reading and writing. The file must exist.
    "w+"   Create an empty file for both reading and writing. If a file with the same name already exists its content is erased and the file is treated as a new empty file.
    "a+"   Open a file for reading and appending. All writing operations are performed at the end of the file, protecting the previous content to be overwritten. You can reposition (fseek, rewind) the internal pointer to anywhere in the file for reading, but writing operations will move it back to the end of file. The file is created if it does not exist.

#430
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.

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