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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Problema al limpiar variable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema al limpiar variable  (Leído 6,869 veces)
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Problema al limpiar variable
« en: 11 Abril 2013, 22:45 pm »

Hola!! Como andan ?
Bueno,, la consulta es facil hoy.. resulta que tengo un problema al limpiar una variable llamada buffer, la cual se modifica constantemente cuando llega un dato por una conexion con socket.. aca dejo el code y el problema detallado.

.data?

buffer      db 512 dup(?)       ;Bufer para guardar datos recibidos

Eso en la sección .data?, luego en la sección .code:

Recv:
invoke recv, sock, addr buffer, sizeof buffer, 0
   
cmp sock, 0
je EMsg
   
EMsg:
invoke MessageBox, 0, addr buffer, addr Titulo, MB_OK
jmp Recv

El problema es que el "buffer" siempre queda cargado con la mayor cantidad de bytes que se le hayan pasado, por ejemplo:

si cargo buffer con "Hola", y luego cargo buffer con "J" el buffer queda asi: "Jola"

Ya probe con: mov buffer, 0 pero no da resultado...

Tendria que recorrer el buffer byte por byte y si es <> de 0 borrarlo ?? Es esa la solucion ?

Desde ya muchas gracias !! :)


« Última modificación: 11 Abril 2013, 22:48 pm por Vaagish » En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.470


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Problema al limpiar variable
« Respuesta #1 en: 12 Abril 2013, 05:08 am »

Probaste algo como:

Código
  1. mov eax, offset buffer
  2. mov byte ptr[eax], 0
  3.  

antes de hacer recv?


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Flamer


Desconectado Desconectado

Mensajes: 1.051


crack, crack y mas crack...


Ver Perfil WWW
Re: Problema al limpiar variable
« Respuesta #2 en: 12 Abril 2013, 06:06 am »

Probaste algo como:

Código
  1. mov eax, offset buffer
  2. mov byte ptr[eax], 0
  3.  

antes de hacer recv?

mmm no dudo de ti fly tu sabes muncho pero solo pienso yo que con eso solo limpiarias la primera posicion de memoria de la variable, orita no estoy en la pc apenas calando pero eso es lo que pienso y con el tema pienso que tendras que saber la longitud de la variable y hacer un bucle y limpiar cada posicion de memoria

y si estoy mal corrijanme

saludos flamer
En línea

Mi Canal De Youtube y Blog

https://elblogdeflamer.blogspot.com

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Problema al limpiar variable
« Respuesta #3 en: 12 Abril 2013, 06:13 am »

Jajajaja justo cuando estaba para responder, el foro me sugirio que mirara una nueva  respuesta...

Recien pruebo esa opcion de MCK y creo que si,, digo creo porque: O limpia el primer byte, o no lo remplaza.. la cadena queda igual.. Probablemente tenga que medir la longitud de la cadena y llenarla con ceros, si.. o al menos eso deberia funcionar..
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.470


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Problema al limpiar variable
« Respuesta #4 en: 12 Abril 2013, 14:29 pm »

Cuando trabajas con cadenas terminadas en cero, si pones un cero al principio, lo demas ya no importa: la cadena tiene largo 0...  ;)

Ahora, si quieres escribir si o si TODO el buffer, usa memfill y listo.
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: Problema al limpiar variable
« Respuesta #5 en: 12 Abril 2013, 15:35 pm »

Jajajaja justo cuando estaba para responder, el foro me sugirio que mirara una nueva  respuesta...

Recien pruebo esa opcion de MCK y creo que si,, digo creo porque: O limpia el primer byte, o no lo remplaza.. la cadena queda igual.. Probablemente tenga que medir la longitud de la cadena y llenarla con ceros, si.. o al menos eso deberia funcionar..

Con que pongas un 0 en la posicion cadena[strlen(cadena)]=0 asi delimitas la cadena, no hace falta que limpies todo.

Sa1uDoS
En línea

Flamer


Desconectado Desconectado

Mensajes: 1.051


crack, crack y mas crack...


Ver Perfil WWW
Re: Problema al limpiar variable
« Respuesta #6 en: 12 Abril 2013, 16:40 pm »

Citar
Con que pongas un 0 en la posicion cadena
[strlen(cadena)]=0 asi delimitas la cadena,
no hace falta que limpies todo.
Sa1uDoS
delimitando la cadena como dises los bytes quedarian en memoria y se borrarian al sobreescribir en ellos pero tendria que tener cuidado de no hacer un llamado a la cadena y salgan a la luz.
Osea si la variable media 10 anteriormente y delimitas a 0 y empiesas a sobreescribir hasta el byte 5 tendrias que tener cuidado de no invocar del byte 6 en adelante.

Es muy buena opcion pero con cuidado

saludos flamer
En línea

Mi Canal De Youtube y Blog

https://elblogdeflamer.blogspot.com

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Problema al limpiar variable
« Respuesta #7 en: 12 Abril 2013, 19:45 pm »

Impecable! memfill do the hard work!!

Citar
Osea si la variable media 10 anteriormente y delimitas a 0 y empiesas a sobreescribir hasta el byte 5 tendrias que tener cuidado de no invocar del byte 6 en adelante.

Exacto.. y yo preciso el buffer en un MessageBox.. siempre me tira el buffer con la mayor cantidad de bytes guardados..
En línea

mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: Problema al limpiar variable
« Respuesta #8 en: 12 Abril 2013, 22:05 pm »

Cualquier funcion que trabaje con cadenas lee hasta el primer 0 que encuentra, porque cualquier funcion que mida la longitud de una cadena lee hasta el primer 0 que encuentra.

Sa1uDoS
En línea

Flamer


Desconectado Desconectado

Mensajes: 1.051


crack, crack y mas crack...


Ver Perfil WWW
Re: Problema al limpiar variable
« Respuesta #9 en: 13 Abril 2013, 18:40 pm »

Cualquier funcion que trabaje con cadenas lee hasta el primer 0 que encuentra, porque cualquier funcion que mida la longitud de una cadena lee hasta el primer 0 que encuentra.

Sa1uDoS
la mento desirte pero no son cadenas son posiciones de memoria y lo de delimitar y sobreescribir en ellas creo que no funcionaria pensandolo bien ya que cuando declaro la variable buffer se asigno una sierta posicion de memoria y es la que seba a imprimir ejemplo:
si buffer en piesa de 00401000 y termina en 0040100F y sobre escribe hasta 00401007 y luego manda a imprimir seba a imprimir hasta la ultima posicion que es 0040100F junto con lo que no se sobreescribio o como dise tu si pongo un 0 en la posicion 00401007 y mando a imprimir la variable hasta hay seba a imprimir

saludos flamer y delimitar si se puede pasando lo sobreescribido a otra variable pero seri mas pancho

Nota: en ASM cuando se declara una variable ase referencia a sierta posicion de memoria no son cadenas como en lenguajes de alto nivel y si estoy mal corrijanme y perdonen las falta de ortografia
En línea

Mi Canal De Youtube y Blog

https://elblogdeflamer.blogspot.com

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

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines