Título: no entiendo un error debido a la sección data Publicado por: Belial & Grimoire en 24 Julio 2013, 03:16 am hola
tengo una duda en el codigo de socket que hice de nasm, estaba quitando varios printf que puse para saber que estaba haciendo el programa y verificar si se ejecutaba bien, pero al saber que ya estaba funcionando quise eliminarlos, pero al eliminar una parte codigo dejo de funcionar habia puesto saveWSA, para comprobar que WSAStartup esta funcionando Código
"saveWSA" solo era para verificar que estaba bien WSAStartup viendo el resultado de eax con un printf lo habia puesto asi Código
quise eliminar "0xFFFFFFFF" de saveWSA, pero despues de compilar, lo ejecuto y me aparece un error y se cierra el programa, despues solo elimine la parte de comprobacion ///////// mov [saveWSA], eax ...... .... ... ... call printf //////////// todo eso borre y pero esta ves deje "saveWSA: dd '0xFFFFFFFF'", volvi a compilar y al ejecutar el programa, funciona correctamente hice un seguimiento con ollydbg y me di cuenta de dos cosas, la primera es que si quito "saveWSA" de la sección data, la parte donde llamo con GetProcAddress a socket, solo me aparece "ock 2.0" y me aparece despues una violacion de acceso y la segunda es que cuando vuelvo a colocar unicamente "saveWSA: dd '0xFFFFFFFF'" en ollydbg me aparece bien la invocacion con GetPtocAddress, "socket" en pocas palabaras funciona correctamente Código
ya no funciona Código
alguien sabe porque falla en ese sentido?, la verdad no entiendo porque funciona con saveWSA si solo lo puse para verificar con printf si estaba bien WSAStartup, y al quitarlo deja de funcionar salu2 Título: Re: no entiendo un error debido a la sección data Publicado por: xv0 en 24 Julio 2013, 04:27 am En el anterior codigo, tienes esto.
Código
Puede que sea ese el error, ya lo corregiste? Un saludo. Título: Re: no entiendo un error debido a la sección data Publicado por: Belial & Grimoire en 24 Julio 2013, 05:06 am sip tambien quite eso, lo raro es que solo es en section .data donde se produce el fallo
porngo el codigo completo de como lo deje en este momento Código
Asi funciona bien, pero si quito saveWSA: dd '0xFFFFFFFF' deja de funcionar, en ollydbg con saveWSA me aparece "socket" cuando llamo a GetProcAddress, pero si quito saveWSA me aparece "ock 2.0" me refiero a esta parte Código
esta es la parte que analizandola en olly me aparece "socket" cuando lo llamo con getprocaddres, pero si quito saveWSA me aparece "ock 2.0" y obviamente getprocaddres guarda una direccion incorrecta y cuando llega a socket para poner push 6 push 1 push 2 call [Getpc] mov [soadd], eax en el call es cuando crashea porque Getpc guardo datos incorrectos, que seria "ock 2.0" y no entiendo porque?, de donde sale ese ock2.0? Título: Re: no entiendo un error debido a la sección data Publicado por: xv0 en 24 Julio 2013, 08:39 am Curioso, no consigo ver el fallo, enteroria esta todo bien pasas la direccion de la cadena y esta acaba en 0.
Como digiste solo es en .data, si cargas la cadena como la estructura sockaddr_in funciona no? Bueno a ver si lo saco. Un saludo. P.D: Ese codigo se puede optimizar, pero eso ya es otra historia. Título: Re: no entiendo un error debido a la sección data Publicado por: Eternal Idol en 24 Julio 2013, 10:13 am Basicamente te funciona de casualidad ... Getpc debe ser double word y los valores enteros no van entre '', ejemplo:
wsdll: db 'ws2_32.dll',0 wsaddr: dd 0xFFFFFFFF Getpc: dd 0xFFFFFFFF .... Esto no tiene pies ni cabeza y es por eso que al final terminas sobreescribiendo 'socket': WSD: db 'WSADATA',0 ¿Para que queres tener como dato la cadena WSADATA? Tenes que usar idealmente la estructura WSADATA (http://msdn.microsoft.com/en-us/library/windows/desktop/ms741563(v=vs.85).aspx) (o al menos reservar el espacio equivalente en bytes). Como no domino NASM realmente (me costo bastante poder generar el ejecutable, la proxima vez deja la linea de comando): WSD: times 400 db 0 En teoria deberias ser capaz de incluir un archivo con la definicion de la estructura. PD. ¿Y si usas MASM o FASM mejor? WinDbg en accion, con tus definiciones: 0:000> lm start end module name 000d0000 000d5000 image000d0000 (deferred) ... 0:000> !dh image000d0000 ... SECTION HEADER #3 .data name 46C virtual size 3000 virtual address 200 size of raw data 1400 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers C0000040 flags Initialized Data (no align specified) Read Write ... 0:000> dd image000d0000+3000 000d3000 5f327377 642e3233 30006c6c 46464678 000d3010 46464646 30000046 46464678 46464646 000d3020 41535746 72617453 00707574 46467830 000d3030 46464646 00004646 44415357 00415441 000d3040 46467830 46464646 00004646 6b636f73 000d3050 30007465 46464678 46464646 62000046 000d3060 00646e69 46467830 46464646 00004646 000d3070 7473696c 30006e65 46464678 46464646 0:000> db image000d0000+3000 000d3000 77 73 32 5f 33 32 2e 64-6c 6c 00 30 78 46 46 46 ws2_32.dll.0xFFF 000d3010 46 46 46 46 46 00 00 30-78 46 46 46 46 46 46 46 FFFFF..0xFFFFFFF 000d3020 46 57 53 41 53 74 61 72-74 75 70 00 30 78 46 46 FWSAStartup.0xFF 000d3030 46 46 46 46 46 46 00 00-57 53 41 44 41 54 41 00 FFFFFF..WSADATA. 000d3040 30 78 46 46 46 46 46 46-46 46 00 00 73 6f 63 6b 0xFFFFFFFF..sock 000d3050 65 74 00 30 78 46 46 46-46 46 46 46 46 00 00 62 et.0xFFFFFFFF..b 000d3060 69 6e 64 00 30 78 46 46-46 46 46 46 46 46 00 00 ind.0xFFFFFFFF.. 000d3070 6c 69 73 74 65 6e 00 30-78 46 46 46 46 46 46 46 listen.0xFFFFFFF Como podes ver, socket esta ahi antes de empezar a ejecutar el codigo, el problema es que despues lo sobreescribis al llamar a WSAStartup (http://msdn.microsoft.com/en-us/library/windows/desktop/ms742213(v=vs.85).aspx) (cuyo segundo parametro es de tipo OUT). Arreglado: 0:000> lm start end module name 001b0000 001b5000 image001b0000 (deferred) ... 0:000> !dh image001b0000 ... SECTION HEADER #3 .data name 5AC virtual size 3000 virtual address 400 size of raw data 1400 file pointer to raw data 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers C0000040 flags Initialized Data (no align specified) Read Write ... 0:000> dd image001b0000+3000 001b3000 5f327377 642e3233 ff006c6c ffffffff 001b3010 57ffffff 74534153 75747261 ffff0070 001b3020 0000ffff 00000000 00000000 00000000 001b3030 00000000 00000000 00000000 00000000 001b3040 00000000 00000000 00000000 00000000 001b3050 00000000 00000000 00000000 00000000 001b3060 00000000 00000000 00000000 00000000 001b3070 00000000 00000000 00000000 00000000 0:000> db image001b0000+3000 001b3000 77 73 32 5f 33 32 2e 64-6c 6c 00 ff ff ff ff ff ws2_32.dll...... 001b3010 ff ff ff 57 53 41 53 74-61 72 74 75 70 00 ff ff ...WSAStartup... 001b3020 ff ff 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 001b3030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 001b3040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 001b3050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 001b3060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 001b3070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ Título: Re: no entiendo un error debido a la sección data Publicado por: Belial & Grimoire en 24 Julio 2013, 20:11 pm cierto, ya funciona, desconocia lo que mencionas sobre WSADATA en ensamblador, me dio curiosidad y encontre esto
Código
aqui esta reservado el espacio en ebp y de hecho encontre otro modo de hacerlo Código
me imagino que hacer esto seria lo mismo, no? Código
y esta es la razon por la que empece con nasm, encontre varios ejemplos ademas que fue lo primero que vi que era compatible con linux y windows, aunque hice el mismo ejemplo en fasm y la verdad fue mucho mas sencillo, pero tampoco encuentro ejemplos o explicaciones de los mismos, y los que encuentro son para windows, en nasm encuentro un poco mas para linux, pero hay otro problema, como apenas estoy empezando la mayoria de los codigos son sobre shellcodes, exploits, etc... y si todavia no se bien ensamblador, no quiero meterme todavia en esos codigos, mejor paso a paso... este es el que hice en fasm Código
compilacion para nasm Código: nasm -f win32 archivo.asm gracias a los dos por las respuestas salu2 Título: Re: no entiendo un error debido a la sección data Publicado por: xv0 en 25 Julio 2013, 00:40 am Código
aqui esta reservado el espacio en ebp y de hecho encontre otro modo de hacerlo Sustrae 1024 bytes a ebp y copia la direccion al registro ecx, que se convierte en un puntero, pero ebp sigue igual. Y sobre los otros dos, podrias mirar las instrucciones enter y leave. Un saludo. |