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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  se compila el socket sin errores pero no se conecta, ayuda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: se compila el socket sin errores pero no se conecta, ayuda  (Leído 7,044 veces)
Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
se compila el socket sin errores pero no se conecta, ayuda
« en: 10 Agosto 2013, 19:38 pm »

hola

pues despues de buscar y reintentar, logre crear el codigo y que se compile sin errores, se cargan las siguientes librerias en la pantalla de depuracion de visual studio, el cual lo tengo configurado como x64

Código:
'Project1.exe' (Win32): 'C:\Windows\System32\ntdll.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\kernel32.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\KernelBase.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\ws2_32.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\msvcrt.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\rpcrt4.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\nsi.dll' cargado. Símbolos cargados.

pero no se conecta, alguien podria checar el codigo y decirme que podria estar mal, por favor

Código
  1. extrn LoadLibraryA:PROC
  2. extrn ExitProcess:PROC
  3. extrn GetProcAddress:PROC
  4.  
  5. .data
  6.  
  7. wsdll db "ws2_32.dll",0
  8. wsaddr dq ?
  9. WStp db "WSAStartup",0
  10. wtaddr dq ?
  11. wsadata db 400 dup (0)
  12. sock db "socket",0
  13. sockaddr dq ?
  14. conn db "connect",0
  15. conaddr dq ?
  16. sen db "send",0
  17. senaddr dq ?
  18. buf db "hola mundo",0
  19.  
  20. .code
  21. Start proc
  22. push rbp
  23. mov rbp, rsp
  24. sub rsp, 20h
  25.  
  26. mov rcx, offset [wsdll]
  27. call LoadLibraryA
  28. mov[wsaddr], rax
  29.  
  30. mov rdx, offset[WStp]
  31. mov rcx, [wsaddr]
  32. call GetProcAddress
  33. mov[wtaddr], rax
  34.  
  35. lea rdx, wsadata
  36. push rdx
  37. push 2h
  38. call [wtaddr]
  39.  
  40. mov rdx, offset[sock]
  41. mov rcx, [wsaddr]
  42. call GetProcAddress
  43. mov[sockaddr], rax
  44.  
  45. push 0
  46. push 1
  47. push 2
  48. call [sockaddr]
  49. mov[sockaddr], rax
  50.  
  51. mov rdx, offset[conn]
  52. mov rcx, [wsaddr]
  53. call GetProcAddress
  54. mov[conaddr], rax
  55.  
  56. push 16
  57. mov rax, 0100007FB9220002h
  58. push rax
  59. push[sockaddr]
  60. call[conaddr]
  61.  
  62. mov rdx, offset[sen]
  63. mov rcx, [wsaddr]
  64. call GetProcAddress
  65. mov[senaddr], rax
  66.  
  67. mov r9, 0
  68. mov r8, 50
  69. mov rdx, offset[buf]
  70. mov rcx,[sockaddr]
  71. call[senaddr]
  72.  
  73.  
  74. mov rsp, rbp
  75. pop rbp
  76.  
  77. xor ecx, ecx
  78. call ExitProcess
  79.  
  80. Start endp
  81.  
  82. End


« Última modificación: 10 Agosto 2013, 20:10 pm por Belial & Grimoire » En línea

.                                 
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: se compila el socket sin errores pero no se conecta, ayuda
« Respuesta #1 en: 10 Agosto 2013, 21:34 pm »

Tenes que depurar TU codigo.

¿Convencion de llamada de x86?

lea rdx, wsadata
push rdx
push 2h

call [wtaddr]

push 0
push 1
push 2

call [sockaddr]


« Última modificación: 10 Agosto 2013, 21:37 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
Re: se compila el socket sin errores pero no se conecta, ayuda
« Respuesta #2 en: 10 Agosto 2013, 22:53 pm »

que depurador me recomiendas?, es que uso ollydbg pero todavia no se actualiza para analizar aplicaciones de 64 bits, ya corregi el codigo y creo va funcionando cada vez mejor

ahora ya se cargan mas librerias

Código:
'Project1.exe' (Win32): 'C:\Users\grimoire\Documents\Visual Studio 2012\Projects\Solution1\x64\Release\Project1.exe' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\ntdll.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\kernel32.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\KernelBase.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\ws2_32.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\msvcrt.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\rpcrt4.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\nsi.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\mswsock.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\user32.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\gdi32.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\lpk.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\usp10.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\imm32.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\msctf.dll' cargado. Símbolos cargados.
'Project1.exe' (Win32): 'C:\Windows\System32\WSHTCPIP.DLL' cargado. Símbolos cargados.
El programa '[656] Project1.exe' terminó con código 0 (0x0).

pero sigue sin funcionar, visual studio trae un debuggin por defecto, pero por mas breaks que pongo no me marca el error, ni violacion de acceso, ni nada, continua la ejecucion normalmente


Código
  1. extrn LoadLibraryA:PROC
  2. extrn ExitProcess:PROC
  3. extrn GetProcAddress:PROC
  4.  
  5. .data
  6.  
  7. wsdll db "ws2_32.dll",0
  8. wsaddr dq ?
  9. WStp db "WSAStartup",0
  10. wtaddr dq ?
  11. wsadata db 400 dup (0)
  12. sock db "socket",0
  13. sockaddr dq ?
  14. conn db "connect",0
  15. conaddr dq ?
  16. sen db "send",0
  17. senaddr dq ?
  18. buf db "hola mundo",0
  19.  
  20. .code
  21. Start proc
  22. push rbp
  23. mov rbp, rsp
  24. sub rsp, 20h
  25.  
  26. mov rcx, offset [wsdll]
  27. call LoadLibraryA
  28. mov[wsaddr], rax
  29.  
  30. mov rdx, offset[WStp]
  31. mov rcx, [wsaddr]
  32. call GetProcAddress
  33. mov[wtaddr], rax
  34.  
  35. lea rdx, wsadata
  36. mov rcx, 2h
  37. call [wtaddr]
  38.  
  39. mov rdx, offset[sock]
  40. mov rcx, [wsaddr]
  41. call GetProcAddress
  42. mov[sockaddr], rax
  43.  
  44. mov r8, 0h
  45. mov rdx, 1h
  46. mov rcx, 2h
  47. call [sockaddr]
  48. mov[sockaddr], rax
  49.  
  50. mov rdx, offset[conn]
  51. mov rcx, [wsaddr]
  52. call GetProcAddress
  53. mov[conaddr], rax
  54.  
  55. mov rsi, 16h
  56. mov rdi, 0100007FB9220002h
  57. mov rdx,[sockaddr]
  58. call[conaddr]
  59.  
  60. mov rdx, offset[sen]
  61. mov rcx, [wsaddr]
  62. call GetProcAddress
  63. mov[senaddr], rax
  64.  
  65. mov r9, 0h
  66. mov r8, 50h
  67. mov rdx, offset[buf]
  68. mov rcx,[sockaddr]
  69. call[senaddr]
  70.  
  71. mov rsp, rbp
  72. pop rbp
  73.  
  74. xor ecx, ecx
  75. call ExitProcess
  76.  
  77. Start endp
  78.  
  79. End
En línea

.                                 
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: se compila el socket sin errores pero no se conecta, ayuda
« Respuesta #3 en: 10 Agosto 2013, 23:22 pm »

WinDbg. Tenes que ver que retornan las funciones, para algo estan (mira rax despues de cada call y si no funciono !gle). connect no funciona ni funcionara nunca, rcx tiene que tener el socket y no lo tiene, segui mirando y presta mas atencion, son muy pocas lineas ...

int connect(
  _In_  SOCKET s,
  _In_  const struct sockaddr *name,
  _In_  int namelen
);
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: se compila el socket sin errores pero no se conecta, ayuda
« Respuesta #4 en: 11 Agosto 2013, 00:08 am »

Recuerda que en Windows y 64 bits se sige el siguiente orden, rcx, rdx, r8 y r9. Ademas no estas pasando la estructura sockaddr_in como puntero.

Un saludo.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: se compila el socket sin errores pero no se conecta, ayuda
« Respuesta #5 en: 11 Agosto 2013, 00:33 am »

Y para colmo todo esto ya esta aca:
http://foro.elhacker.net/asm/problema_con_masm_para_64bits-t396294.0.html

Belial & Grimoire  no abras mas hilos sobre el mismo tema, deben haber mas de 5 ya ...
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
Re: se compila el socket sin errores pero no se conecta, ayuda
« Respuesta #6 en: 11 Agosto 2013, 02:06 am »

hola

disculpa, si quieren eliminen este o el tema anterior, solo hay 2 mas, los otros eran sobre nasm, el pirmero era porque no lograba entender porque no funciona getprocaddress, el segundo es el de masm, pero como crei que ya lo habia logrado ya que no me aparecian errores, decidi abrir uno nuevo pensando que era algun fallo de otro tipo, lo siento

ya verifique el codigo y tienen razon olvide cambiar lo de rcx.. r9..., olvide que habia modificado eso y lo deje de esa manera, bueno al principio lo tenia asi

Código:
mov r8, 16h
mov rdx, 0100007FB9220002h
mov rcx,[sockaddr]
call[conaddr]

en nasm con 32 bits, me habia funcionado de esta manera

Código
  1. push 0x0100007F
  2. push 0xB9220002
  3. mov esi, esp
  4. push byte 16
  5. push esi
  6. push dword [soadd]
  7. call [conaddr]

tambien de esta otra forma

Código
  1. sub esp, 416
  2.  
  3. mov word [ebp-416], 0x0002
  4. mov word [ebp-414], 0xB922
  5. mov dword [ebp-412], 0x0100007F
  6.  
  7.  
  8. push byte 16
  9. lea eax, [ebp-416]
  10. push eax
  11. push dword [soadd]
  12. call [conaddr]
  13.  

pero por la syntaxis de masm, no me lo permite, con push me aparece error,con rcx en socket me aparece este mensaje de error

Código:
Primera excepción en 0x000007FEFCCE5D18 (mswsock.dll) en Project1.exe: 0xC0000005: Infracción de acceso al leer la ubicación 0xFFFFFFFFFFFFFFFF. (0x0).

por eso, habia cambiado el codigo, porque de la otra forma me compilo bien

una disculpa nuevamente por abrir otro hilo, y espero poder terminar, si el error esta en connect, almenos ya se que me falta poco

salu2

En línea

.                                 
xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: se compila el socket sin errores pero no se conecta, ayuda
« Respuesta #7 en: 11 Agosto 2013, 02:26 am »

Pero tienes que pasar la estructura como puntero.

Código
  1. mov rbx, 0100007FB9220002h
  2. push rbx
  3. mov rdx, rsp

Un saludo.
En línea

Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
Re: se compila el socket sin errores pero no se conecta, ayuda
« Respuesta #8 en: 11 Agosto 2013, 03:04 am »

ok gracias

pues investigue mas e hice lo que mencionaron, modificando otras cosas, y el codigo carga las librerias y no aparece ningun error, pero sigue sin funcionar  :¬¬

cualquier sugerencia se los agradezco

Código
  1. extrn LoadLibraryA:PROC
  2. extrn ExitProcess:PROC
  3. extrn GetProcAddress:PROC
  4.  
  5. .data
  6.  
  7. wsdll db "ws2_32.dll",0
  8. wsaddr dq ?
  9. WStp db "WSAStartup",0
  10. wtaddr dq ?
  11. wsadata db 400 dup (0)
  12. sock db "socket",0
  13. sockaddr dq ?
  14. conn db "connect",0
  15. conaddr dq ?
  16. sen db "send",0
  17. senaddr dq ?
  18. buf db "hola mundo",0
  19.  
  20. .code
  21. Start proc
  22.  
  23. and rsp,-16
  24. sub rsp,4*8
  25.  
  26. mov rcx, offset wsdll
  27. call LoadLibraryA
  28. mov wsaddr, rax
  29.  
  30. mov rdx, offset WStp
  31. mov rcx, wsaddr
  32. call GetProcAddress
  33. mov wtaddr, rax
  34.  
  35. lea rdx, wsadata
  36. mov rcx, 2h
  37. call wtaddr
  38.  
  39. mov rdx, offset sock
  40. mov rcx, wsaddr
  41. call GetProcAddress
  42. mov sockaddr, rax
  43.  
  44. mov r8, 0h
  45. mov rdx, 1h
  46. mov rcx, 2h
  47. call sockaddr
  48. mov sockaddr, rax
  49.  
  50. mov rdx, offset conn
  51. mov rcx, wsaddr
  52. call GetProcAddress
  53. mov conaddr, rax
  54.  
  55. mov r8, 16h
  56. mov rbx, 0100007FB9220002h
  57. push rbx
  58. mov rdx, rsp
  59. mov rcx, sockaddr
  60. call conaddr
  61.  
  62. mov rdx, offset sen
  63. mov rcx, wsaddr
  64. call GetProcAddress
  65. mov senaddr, rax
  66.  
  67. mov r9, 0h
  68. mov r8, 50h
  69. mov rdx,offset buf
  70. mov rcx,sockaddr
  71. call senaddr
  72.  
  73. xor ecx, ecx
  74. call ExitProcess
  75.  
  76. Start endp
  77.  
  78. End
« Última modificación: 11 Agosto 2013, 04:18 am por Belial & Grimoire » En línea

.                                 
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: se compila el socket sin errores pero no se conecta, ayuda
« Respuesta #9 en: 11 Agosto 2013, 11:18 am »

Si, son todos de lo mismo, el objetivo del codigo es el mismo ... ("logre un socket en nasm jeje" ,  "no entiendo un error debido a la sección data " y mas).

¿No seria muchisimo mejor usar la estructura sockaddr_in?

struct sockaddr_in {
        short   sin_family;
        u_short sin_port;
        struct  in_addr sin_addr;
        char    sin_zero[8];
};

Para sin_port podes usar la funcion htons y para sin_addr inet_addr.

0:000> dw @rdx @rdx + 2
00000000`0012ff28  0002 b922

sin_family = 2
sin_port = b922 = 22B9 little endian = 8889 decimal

0:000> dd @rdx + 4 @rdx + c
00000000`0012ff2c  0100007f 00000000 00000000
sin_addr = 7f000001 = 127.0.0.01
sin_zero = 8 ceros como debe ser

¿Que tamaño tiene la estructura sockaddr_in? 16 si, 16 bytes en decimal, 10h en hexadecimal.

No funciona el codigo que te dejo cpu2.

ws2_32!connect llama a mswsock!WSPConnect y esta a mswsock!SockDoConnect que retorna lo que despues se pondra en Last Error (10047).

Termina pasando esto:
mswsock!SockDoConnect+0x124:
movzx   eax,word ptr [r13] ds:00000000`0012ff28=0000
mswsock!SockDoConnect+0x129:
cmp     dword ptr [rbx+14h],eax ds:00000000`02081484=00000002
mswsock!SockDoConnect+0x12c:
jne     mswsock!SockDoConnect+0x158 (000007fe`fc50a466) [br=1]
mswsock!SockDoConnect+0x158:
mov     edi,273Fh


¿Que quiere decir? Compara AF_INET (2) con tu parametro y le da diferente (AF_UNSPEC = 0). Por eso si hicieras:

0:000> !gle
LastErrorValue: (WinSock) 0x273f (10047) - Se ha utilizado una dirección incompatible con el protocolo solicitado.

¿La razon? Facil, connect te sobreescribe todos los valores de tu estructura ... cuando llama a:

int WSPConnect(
  _In_   SOCKET s,
  _In_   const struct sockaddr *name,
  _In_   int namelen,
  _In_   LPWSABUF lpCallerData,
  _Out_  LPWSABUF lpCalleeData,
  _In_   LPQOS lpSQOS,
  _In_   LPQOS lpGQOS,
  _Out_  LPINT lpErrno
);


La pila es libre de ser modificada, si queres seguir trabajando con la pila reservate espacio al principio y pone la estructura ahi.

Sino bien sencillo en data:
in_addr dq 0100007FB9220002h

y en code:
mov r8, 10h
mov rdx, offset in_addr
mov rcx, sockaddr
call conaddr

PD. and rsp,-16 sub rsp,4*8 ¿De verdad? ¿En serio? Necesitas 5000 intentos para hacer funcionar este codigo tan chico y pones cosas asi ininteligibles ...
« Última modificación: 11 Agosto 2013, 11:20 am por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
se me conecta en una red wpa2 pero despues me pide usuario i contraseña ayuda
Hacking Wireless
ibrahim07 1 2,640 Último mensaje 3 Febrero 2013, 20:25 pm
por zydas
¿Programa en c++ compila correctamente, pero se cuelga al correr?
Programación C/C++
erikat 3 3,824 Último mensaje 4 Diciembre 2013, 12:22 pm
por Eternal Idol
Duda C++. Compila pero no corre.
Programación C/C++
Gaspi 9 3,966 Último mensaje 20 Febrero 2015, 20:58 pm
por Gaspi
Compila pero no se ejecuta! Ayuda por favor.
Programación C/C++
durindemoria 7 3,364 Último mensaje 9 Diciembre 2015, 23:42 pm
por class_OpenGL
matriz 5*5 no me da error pero no compila « 1 2 »
Programación C/C++
creiko 11 4,511 Último mensaje 29 Mayo 2016, 00:04 am
por creiko
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines