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


 


Tema destacado: Píldoras formativas en seguridad de la información


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  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] 3 Ir Abajo Respuesta Imprimir
Autor Tema: duda de cómo se introducen cadenas en la pila (manualmente).  (Leído 8,681 veces)
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
  1. 00401002      53            PUSH EBX
esto reemplaza el opcode null osea el zero terminator a eso te refieres?

osea

Código
  1. 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: 563


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: 563


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
  1. 00401000 >    33DB                    XOR EBX, EBX
  2. 00401002      53                      PUSH EBX
  3. 00401003      68 45786563             PUSH 63657845
  4. 00401008      C74424 FD 57696E45      MOV DWORD PTR SS:[ESP-3], 456E6957
  5. 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
  1. 00401000 >    33DB                    XOR EBX, EBX
  2. 00401002      53                      PUSH EBX
  3. 00401003      68 45786563             PUSH 63657845
  4. 00401008      C74424 FD 57696E45      MOV DWORD PTR SS:[ESP-3], 456E6957
  5. 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

Иōҳ


Desconectado Desconectado

Mensajes: 563


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

el code que te pase funciona como te dije fijate si queda desbalanceada la pila o antes de eso le podes reservar espacio en la pila luego la balanceas.. con lo que te doy ya tenes una idea si no quieres hacer mov puedes hacer que esp apunte 3 posiciones antes con un lea, y luego haces el push te evitas de hacer mov, y luego restauras a esp, en fin miles de ideas, te recomiendo que usaes algun debugger asi practica practica hasta que te salga!

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 #16 en: 29 Marzo 2011, 23:51 »

ok, Nox. Ya había conseguido antes hacerlo funcionar pero introducía la cadena en la pila de otra manera y quedaba la pila desbalanceada (aunque funcionaba igual sin problemas). no obstante de esta manera es más sencillo.

Un saludo!
En línea

Иōҳ


Desconectado Desconectado

Mensajes: 563


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

bien bien pero parece que no resolvimos ese problema de tu code el del principio mira yo use este code para loadlibrary, y me funciona perfectamente checa como le reservo la pila... si solo cambias los caracteres debe funcionar

Código
  1. ;00402044  4C 6F 61 64 4C 69 62 72  LoadLibr
  2. ;0040204C  61 72 79 41 00           aryA.
  3.  
  4. mov ebp,esp; ebp puntero al stack
  5. sub esp, 0Dh; reservamos espacio
  6. xor ecx,ecx
  7. mov byte ptr [ebp - 0Dh], 4Ch
  8. mov byte ptr [ebp - 0Ch], 6Fh
  9. mov byte ptr [ebp - 0Bh], 61h
  10. mov byte ptr [ebp - 0Ah], 64h
  11. mov byte ptr [ebp - 09h], 4Ch
  12. mov byte ptr [ebp - 08h], 69h
  13. mov byte ptr [ebp - 07h], 62h
  14. mov byte ptr [ebp - 06h], 72h
  15. mov byte ptr [ebp - 05h], 61h
  16. mov byte ptr [ebp - 04h], 72h
  17. mov byte ptr [ebp - 03h], 79h
  18. mov byte ptr [ebp - 02h], 41h
  19. mov byte ptr [ebp - 01h], cl
  20. lea ecx, dword ptr [ebp - 0Dh]
  21.  
  22. push ecx
  23. push edx; BaseKernel
  24. call ebx; GPA
  25. add esp, 0Dh; Balanceamos la pila

pd: la pila se balancea para poder evitar errores, puede que haya un tipo de seguridad que mire la pila, y si a la hora de volver por ejemplo al programa la pila no esta como antes crash! y aunque no te de ese problema cuando lo haces una aplicacion autonoma, es por buena costumbre que lo harias :).

Salu2!
En línea

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


Desconectado Desconectado

Mensajes: 1.121


¡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 #18 en: 2 Abril 2011, 20:56 »

Os habéis ido del tema, no lo habéis entendido...
Código
  1. xor eax, eax
  2. push eax
  3. push byte 0x63;  'c'
  4. push byte 0x65;  'e'
  5. push byte 0x78;  'x'
  6. push byte 0x45;  'E'
  7. push byte 0x6e;  'n'
  8. push byte 0x69;  'i'
  9. push byte 0x57;  'W'
  10. mov eax, esp
  11.  

Al introducir "push eax" lo que hacemos es meter el byte nulo, lo que es equivalente a poner "string BLAHBLAH, 0", que es lo que queréis.
Si no lo entendéis, PM.
Un saludo. Sagrini

PS1: He puesto lo de byte para que no haya nulos entre medias, por si acaso...
PS2: Aparte, los pongo uno a uno porque son 7 bytes. Se podrían poner divididos en un WORD y tres bytes, pero no tengo ganas ;)...
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
[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.082


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: duda de cómo se introducen cadenas en la pila (manualmente).
« Respuesta #19 en: 3 Abril 2011, 01:08 »

Os habéis ido del tema, no lo habéis entendido...
Código
  1. xor eax, eax
  2. push eax
  3. push byte 0x63;  'c'
  4. push byte 0x65;  'e'
  5. push byte 0x78;  'x'
  6. push byte 0x45;  'E'
  7. push byte 0x6e;  'n'
  8. push byte 0x69;  'i'
  9. push byte 0x57;  'W'
  10. mov eax, esp
  11.  

Al introducir "push eax" lo que hacemos es meter el byte nulo, lo que es equivalente a poner "string BLAHBLAH, 0", que es lo que queréis.
Si no lo entendéis, PM.
Un saludo. Sagrini

PS1: He puesto lo de byte para que no haya nulos entre medias, por si acaso...
PS2: Aparte, los pongo uno a uno porque son 7 bytes. Se podrían poner divididos en un WORD y tres bytes, pero no tengo ganas ;)...

Pero si el lío se lo metiste tú pusheando dos dword's al principio, y el quiso hacer lo mismo con una cadena de 7 bytes  :xD. Para pushear con bytes, no hay problema, para pushear con dwords puedes hacer lo que te dijo Karcrack de hacer un xor con el 'xoreado' o hacer lo que hizo Nox con un mov. O hacer lo que te dije yo, que ocupa menos con cadenas de más de 7 bytes, pero que deja nulos.

Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Páginas: 1 [2] 3 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 1,076 Último mensaje 21 Julio 2006, 13:38
por Krnl64
Como se introducen los comandos AT en un celular?
Hacking Mobile
ZuL'G 1 4,218 Último mensaje 12 Octubre 2008, 11:59
por SirGraham
[DUDA] mover a la pila
ASM
blackray 4 2,771 Último mensaje 10 Septiembre 2009, 03:07
por blackray
como hacer que no serepita un numero al agregarlo manualmente a un dataset
Programación Visual Basic
sharton2188angel 0 878 Último mensaje 28 Julio 2012, 18:19
por sharton2188angel
[Duda] Es posible descifrar MD5 manualmente?
Criptografía
hassuni 7 4,153 Último mensaje 17 Enero 2013, 17:20
por dimitrix
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines