Autor
|
Tema: duda de cómo se introducen cadenas en la pila (manualmente). (Leído 12,346 veces)
|
black_flowers
Desconectado
Mensajes: 65
|
me parece que el se refiere a otra cosa.... 00401002 53 PUSH EBX
esto reemplaza el opcode null osea el zero terminator a eso te refieres? osea 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. 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
Mensajes: 563
|
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 am por Иōҳ »
|
En línea
|
|
|
|
black_flowers
Desconectado
Mensajes: 65
|
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
Mensajes: 563
|
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.  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 pm por Иōҳ »
|
En línea
|
|
|
|
black_flowers
Desconectado
Mensajes: 65
|
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.  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. 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. 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
Mensajes: 563
|
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
|
|
|
|
black_flowers
Desconectado
Mensajes: 65
|
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
Mensajes: 563
|
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 ;00402044 4C 6F 61 64 4C 69 62 72 LoadLibr ;0040204C 61 72 79 41 00 aryA. mov ebp,esp; ebp puntero al stack sub esp, 0Dh; reservamos espacio xor ecx,ecx mov byte ptr [ebp - 0Dh], 4Ch mov byte ptr [ebp - 0Ch], 6Fh mov byte ptr [ebp - 0Bh], 61h mov byte ptr [ebp - 0Ah], 64h mov byte ptr [ebp - 09h], 4Ch mov byte ptr [ebp - 08h], 69h mov byte ptr [ebp - 07h], 62h mov byte ptr [ebp - 06h], 72h mov byte ptr [ebp - 05h], 61h mov byte ptr [ebp - 04h], 72h mov byte ptr [ebp - 03h], 79h mov byte ptr [ebp - 02h], 41h mov byte ptr [ebp - 01h], cl lea ecx, dword ptr [ebp - 0Dh] push ecx push edx; BaseKernel call ebx; GPA 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
|
|
|
|
Garfield07
Desconectado
Mensajes: 1.121
¡Este año voy a por todas! JMJ 2011
|
Os habéis ido del tema, no lo habéis entendido... xor eax, eax push eax push byte 0x63; 'c' push byte 0x65; 'e' push byte 0x78; 'x' push byte 0x45; 'E' push byte 0x6e; 'n' push byte 0x69; 'i' push byte 0x57; 'W' mov eax, esp
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
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
Os habéis ido del tema, no lo habéis entendido... xor eax, eax push eax push byte 0x63; 'c' push byte 0x65; 'e' push byte 0x78; 'x' push byte 0x45; 'E' push byte 0x6e; 'n' push byte 0x69; 'i' push byte 0x57; 'W' mov eax, esp
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  . 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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda acerca de la pila en VB
Programación Visual Basic
|
Krnl64
|
4
|
1,746
|
21 Julio 2006, 13:38 pm
por Krnl64
|
|
|
Como se introducen los comandos AT en un celular?
Hacking Mobile
|
ZuL'G
|
1
|
5,113
|
12 Octubre 2008, 11:59 am
por SirGraham
|
|
|
[DUDA] mover a la pila
ASM
|
blackray
|
4
|
3,532
|
10 Septiembre 2009, 03:07 am
por blackray
|
|
|
como hacer que no serepita un numero al agregarlo manualmente a un dataset
Programación Visual Basic
|
sharton2188angel
|
0
|
1,361
|
28 Julio 2012, 18:19 pm
por sharton2188angel
|
|
|
[Duda] Es posible descifrar MD5 manualmente?
Criptografía
|
hassuni
|
7
|
6,247
|
17 Enero 2013, 17:20 pm
por dimitrix
|
|