elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
22 Mayo 2012, 22:40  


Tema destacado: Recuperar cuenta de Google, GMail, Youtube

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderadores: Karcrack, [Zero])
| | |-+  duda de cómo se introducen cadenas en la pila (manualmente).
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: duda de cómo se introducen cadenas en la pila (manualmente).  (Leído 2,659 veces)
black_flowers

Desconectado Desconectado

Mensajes: 65


Ver Perfil
duda de cómo se introducen cadenas en la pila (manualmente).
« en: 25 Marzo 2011, 12:12 »

sabeis como se calculan los espacios que hay que restar a esp para introducir una cadena en la pila? En el siguiente código yo meto 8 cacacteres pero en cambio necesito restar 0bh es decir 11 espacios para que el programa funcione. Ademas ni siquiera necesito empezar la cadena en la parte superior, es decir en el espacio 11 sino que empezando en el espacio 8 funciona. No entiendo el porqué de esto.

Código:
sub esp, 0bh ; dejamos espacio en la pila para meter nuestra cadena
   mov byte ptr [ebp-08h], 57h  ; 'W'
   mov byte ptr [ebp-07h], 69h  ; 'i'
   mov byte ptr [ebp-06h], 6eh  ; 'n'
   mov byte ptr [ebp-05h], 45h  ; 'E'
   mov byte ptr [ebp-04h], 78h  ; 'x'
   mov byte ptr [ebp-03h], 65h  ; 'e'
   mov byte ptr [ebp-02h], 63h  ; 'c'
   mov byte ptr [ebp-01h], dl   ; 0x00
   lea ecx, [ebp-08h] ; cargamos la direccion que apunta a nuestra cadena
   push ecx
   push esi       ;dirección base de kernel32
   call eax ; llamamos a getprocadress

En línea
Garfield07


Desconectado Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: duda de cómo se introducen cadenas en la pila (manualmente).
« Respuesta #1 en: 26 Marzo 2011, 11:14 »

Vaya complicación!
Yo hago:
Código
xor eax, eax
push eax
push 0x41424344 ; DDCCBBAA
push 0x41424344 ; DDCCBBAA
mov eax, esp
 

Y en EAX tienes tu cadenita (o la dirección, que es lo que necesitas)
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
black_flowers

Desconectado Desconectado

Mensajes: 65


Ver Perfil
Re: duda de cómo se introducen cadenas en la pila (manualmente).
« Respuesta #2 en: 26 Marzo 2011, 13:35 »

vaya, pues si que es más fácil tu método. Lo voy a probar.
En línea
black_flowers

Desconectado Desconectado

Mensajes: 65


Ver Perfil
Re: duda de cómo se introducen cadenas en la pila (manualmente).
« Respuesta #3 en: 26 Marzo 2011, 15:59 »

Vaya complicación!
Yo hago:
Código
xor eax, eax
push eax
push 0x41424344 ; DDCCBBAA
push 0x41424344 ; DDCCBBAA
mov eax, esp
 

Y en EAX tienes tu cadenita (o la dirección, que es lo que necesitas)

tienes razón queda mucho más sencillo. El único problema es que no se como evitar caracteres nulos, sin ir mas lejos el que hay que poner al final de la cadena.
En línea
[Zero]
Moderador
***
Desconectado Desconectado

Mensajes: 1.057


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: duda de cómo se introducen cadenas en la pila (manualmente).
« Respuesta #4 en: 27 Marzo 2011, 00:13 »

tienes razón queda mucho más sencillo. El único problema es que no se como evitar caracteres nulos, sin ir mas lejos el que hay que poner al final de la cadena.

El push eax mete el caracter nulo, concretamente mete 4 xD.

Saludos

Edito: Otra forma de hacerlo:

Código
call str_1
_String1 db "Soy un String",0
str_1:
pop ecx
;ecx apunta a la cadena
 
« Última modificación: 27 Marzo 2011, 00:21 por [Zero] » En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
black_flowers

Desconectado Desconectado

Mensajes: 65


Ver Perfil
Re: duda de cómo se introducen cadenas en la pila (manualmente).
« Respuesta #5 en: 27 Marzo 2011, 13:59 »

El push eax mete el caracter nulo, concretamente mete 4 xD.
pero cuando hago por ejemplo esto, para meter la cadena enla pila:
Código:
   push 636578h      ;incluye un 00 al inicio automaticamente (que es el nulo del final de la cadena)
   push 456e6957h ;caracteres de winexec en sentido contrario
   mov ecx,esp
   push ecx
   push esi       ;dirección base de kernel32
   mov ebx,eax
   call eax ; llamamos a getprocaddress
el primer push pasado a opcodes es: 68 78 65 63 00, lo cual implica un nulo. A eso me refiero. ¿como evitas eso?

En línea
Иōҳ


Desconectado Desconectado

Mensajes: 453


Ver Perfil
Re: duda de cómo se introducen cadenas en la pila (manualmente).
« Respuesta #6 en: 27 Marzo 2011, 20:54 »

Código
00401000 >    33DB          XOR EBX, EBX
00401002      53            PUSH EBX
00401003      68 44434241   PUSH 41424344
00401008      68 44434241   PUSH 41424344
0040100D      8BDC          MOV EBX, ESP

pues no veo ningun opcode null




En línea

Eres adicto a la Ing. Inversa? -> www.noxsoft.net
black_flowers

Desconectado Desconectado

Mensajes: 65


Ver Perfil
Re: duda de cómo se introducen cadenas en la pila (manualmente).
« Respuesta #7 en: 27 Marzo 2011, 23:36 »

pero cuando hago por ejemplo esto, para meter la cadena enla pila:
Código:
   push 636578h      ;incluye un 00 al inicio automaticamente (que es el nulo del final de la cadena)
   push 456e6957h ;caracteres de winexec en sentido contrario
   mov ecx,esp
   push ecx
   push esi       ;dirección base de kernel32
   mov ebx,eax
   call eax ; llamamos a getprocaddress
el primer push pasado a opcodes es: 68 78 65 63 00, lo cual implica un nulo. A eso me refiero. ¿como evitas eso?


el opcode nulo está en mi cadena, en la que quiero utilizar yo.  ;D
En línea
Karcrack
Moderador
***
Desconectado Desconectado

Mensajes: 2.186


Se siente observado ¬¬'


Ver Perfil
Re: duda de cómo se introducen cadenas en la pila (manualmente).
« Respuesta #8 en: 28 Marzo 2011, 16:17 »

Una cadena ASCII no puede tener un byte nulo por el medio... ya que la cadena ASCII se mida hasta la aparicion de un byte nulo... Y si tu "cadena" tiene bytes nulos sencillamente xorea todo el numero y lo vuelves a xorear una vez en la pila... seria algo asi:
Código:
push 0xAABBCCDD ;Caracteres xoreados con nMagic para quitar 00s
xor [esp], nMagic ;Vuelves a xorear para dejar como estaba
En línea

Иōҳ


Desconectado Desconectado

Mensajes: 453


Ver Perfil
Re: duda de cómo se introducen cadenas en la pila (manualmente).
« Respuesta #9 en: 28 Marzo 2011, 19:40 »

Una cadena ASCII no puede tener un byte nulo por el medio... ya que la cadena ASCII se mida hasta la aparicion de un byte nulo... Y si tu "cadena" tiene bytes nulos sencillamente xorea todo el numero y lo vuelves a xorear una vez en la pila... seria algo asi:
Código:
push 0xAABBCCDD ;Caracteres xoreados con nMagic para quitar 00s
xor [esp], nMagic ;Vuelves a xorear para dejar como estaba

me parece que el se refiere a otra cosa....
Código
00401002      53            PUSH EBX
esto reemplaza el opcode null osea el zero terminator a eso te refieres?

osea

Código
lstrCadena db "Hola",0

te refieres a ese 0 el zero terminator?.... si es así con lo que te dice sagrini se hace el push ebx pone el zero terminator en la pila.... si no es asi.. pon como es tu cadena! y nosotros te podremos ayudar( que no sea en hex si no en ascii).

Salu2!
En línea

Eres adicto a la Ing. Inversa? -> www.noxsoft.net
black_flowers

Desconectado Desconectado

Mensajes: 65


Ver Perfil
Re: duda de cómo se introducen cadenas en la pila (manualmente).
« Respuesta #10 en: 28 Marzo 2011, 23:53 »

me parece que el se refiere a otra cosa....
Código
00401002      53            PUSH EBX
esto reemplaza el opcode null osea el zero terminator a eso te refieres?

osea

Código
lstrCadena db "Hola",0

te refieres a ese 0 el zero terminator?.... si es así con lo que te dice sagrini se hace el push ebx pone el zero terminator en la pila.... si no es asi.. pon como es tu cadena! y nosotros te podremos ayudar( que no sea en hex si no en ascii).

Salu2!
claro, es el cero terminador. Pero no entiendo cómo lo sustituyes por push ebx, ya que push ebx envía 4 nulos ¿me equivoco?
Y yo necesito un nulo justo al final de mi cadena.
Código:
   push 636578h      ;incluye un 00 al inicio automaticamente (que es el nulo del final de la cadena)
   push 456e6957h ;caracteres de winexec en sentido contrario

lo que mando a la pila son los caracteres de WinExec en orden inverso. Pero al final tengo que poner un nulo, es decir despues del 63 va un 00. En mi caso he enviado el 636578h en lugar de 00636578h aunque a fin de cuentas son equivalentes.

La pregunta era que cómo me deshago de ese 00 terminador.
En línea
Иōҳ


Desconectado Desconectado

Mensajes: 453


Ver Perfil
Re: duda de cómo se introducen cadenas en la pila (manualmente).
« Respuesta #11 en: 29 Marzo 2011, 06:34 »

lo sustituyo porque ebx vale 0 y lo que estas pasando es un valor nullo a la pila para que sea el zero terminator, el push ebx envia a la 00000000 a la 'pila', luego le pasas las cadena, al final solo te queda debuggear si al final de esta subrutina queda desbalanceada la pila... para balancearlo. no sabria decirte con exactitud si desbalancea la pila. =/

Dato: TODA cadena tiene que tener un zero terminator que indica el final.

Salu2!
« Última modificación: 29 Marzo 2011, 06:36 por Иōҳ » En línea

Eres adicto a la Ing. Inversa? -> www.noxsoft.net
black_flowers

Desconectado Desconectado

Mensajes: 65


Ver Perfil
Re: duda de cómo se introducen cadenas en la pila (manualmente).
« Respuesta #12 en: 29 Marzo 2011, 12:28 »

es que hay algún sitio en donde nonos estamos entendiendo. Para clarificarlo voy a preguntar esto que no tiene más vuelta de hoja: ¿cómo introducirías en la pila winexec sabiendo que estos son sus caracteres asci?
57h  'W'
69h  'i'
6eh  'n'
45h  'E'
78h  'x'
65h  'e'
63h  'c'
En línea
Иōҳ


Desconectado Desconectado

Mensajes: 453


Ver Perfil
Re: duda de cómo se introducen cadenas en la pila (manualmente).
« Respuesta #13 en: 29 Marzo 2011, 17:54 »

disculpa por no entenderte, pero creo que debistes resaltar la cadena a pasar en primera instancia.. en ascii o talvez fue un despiste mio de no prestar atencion a tu cadena en hex sea cual sea, esto me funciono, chequelo.  :xD

Código
00401000 >    33DB                    XOR EBX, EBX
00401002      53                      PUSH EBX
00401003      68 45786563             PUSH 63657845
00401008      C74424 FD 57696E45      MOV DWORD PTR SS:[ESP-3], 456E6957
00401010      8D5C24 FD               LEA EBX, DWORD PTR SS:[ESP-3]

pd: Me esta pareciendo interesante codear una shellcode eh! jeje (como nunca lo he hecho X)

pd2: el code creo que esta un poco ortodoxo, fijate si necesitas reservar espacio en la pila.. ya que estoy moviendo valores directamente, se puede mejorar, pero ya tienes la idea :).

Salu2!
« Última modificación: 29 Marzo 2011, 20:40 por Иōҳ » En línea

Eres adicto a la Ing. Inversa? -> www.noxsoft.net
black_flowers

Desconectado Desconectado

Mensajes: 65


Ver Perfil
Re: duda de cómo se introducen cadenas en la pila (manualmente).
« Respuesta #14 en: 29 Marzo 2011, 21:09 »

disculpa por no entenderte,pero creo que debistes resaltar la cadena a pasar en primera instancia.. en ascii o talvez fue un despiste mio de no prestar atencion a tu cadena en hex sea cual sea, esto me funciono, chequelo.  :xD

Código
00401000 >    33DB                    XOR EBX, EBX
00401002      53                      PUSH EBX
00401003      68 45786563             PUSH 63657845
00401008      C74424 FD 57696E45      MOV DWORD PTR SS:[ESP-3], 456E6957
00401010      8D5C24 FD               LEA EBX, DWORD PTR SS:[ESP-3]

pd: Me esta pareciendo interesante codear una shellcode eh! jeje (como nunca lo he hecho X)

pd2: el code creo que esta un poco ortodoxo, fijate si necesitas reservar espacio en la pila.. ya que estoy moviendo valores directamente, se puede mejorar, pero ya tienes la idea :).

Salu2!

lo que pasa es que estaba tratando de hacerlo tal y como indicó sagrini en un post anterior, él utilizaba sólo  push, y no mov, de esa manera la pila queda siempre balanceada, eso es lo que intento principalmente.
Por lo tanto para meter la cadena con push hago esto:
En este primer caso no hay problemas con los opcodes nulos puesto que la cadena ocupa ocho caracteres y no necesito mandar ningún valor nulo.
Código:
  xor ecx,ecx     ;necesitamos mandar el nulo (en este caso mandamos 4 ya que mandamos el ecx entero)
   push ecx
   push 6578652Eh ;caracteres de calc.exe
   push 636C6163h
   mov ecx,esp
pero en este caso: la cadena ocupa siete caracteres con lo cual hay que mandar un 00 al final.
Código:
  push 00737365h       ;caracteres de exitprocess
   push 636f7250h
   push 74697845h
   mov ecx,esp
y ese es el problema ese caracter nulo. Sospecho que en linux igual no hay ese problema, pero tampoco estoy muy seguro.

ah! y Nox gracias por tu ayuda! por cierto vaya N más rara jeje.
En línea
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda acerca de la pila en VB
Programación Visual Basic
Krnl64 4 455 Último mensaje 21 Julio 2006, 13:38
por Krnl64
Como se saca el pass de un rar manualmente....
Ingeniería Inversa
zetsusai 1 683 Último mensaje 17 Agosto 2007, 22:22
por yeikos
Como se introducen los comandos AT en un celular?
Hacking Mobile
ZuL'G 1 3,100 Último mensaje 12 Octubre 2008, 11:59
por SirGraham
Duda Pila ensamblador (Y delphi)
Programación General
Riki_89D 5 2,756 Último mensaje 24 Abril 2009, 15:07
por Riki_89D
[DUDA] mover a la pila
ASM
blackray 4 1,463 Último mensaje 10 Septiembre 2009, 03:07
por blackray
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines