Título: Problema con CreateProcessA en nasm. Publicado por: otroWeyMas.nasm en 21 Noviembre 2021, 19:19 pm Hola.
Tengo un problema tratando de usar CreateProcessA en nasm, he estado intentando hacerlo funcionar, pero no logro que se ejecute bien, primero lo intente de la siguiente manera. Código: mov r13, rdx ;CreateProcessA Pero creo esta mal alineado entre ProcessInfo y el "shadowspace" que coloqué, la verdad no se si otra vez estoy pisando o borrando el stack, o incluso puede ser que el código este mal. Bueno, así que lo hice de otra manera, que es la siguiente, Código: mov r13, rdx ;CreateProcessA Creo esta mejor alineado, traté de abrir espacio para no pisar nada, pero igual tampoco funcionó, y ya nosé que más debo hacer, me cuesta trabajo alinear a 16 todo, pero no sé si sea eso, o esté mal algún parámetro o estoy pisando y/o borrando algo del stack... ya me bloqué. Espero me puedan ayudar, para ya terminar esto y ponerme a estudiar más sobre seguridad con CTF's y retos, pero mi mente solo está pensando... "y si le sumo, y si le resto y si checo con mod en tal cosa y si cambio el registro" y es horrible :xD jeje. Bueno, saludos. Título: Re: Problema con CreateProcessA en nasm. Publicado por: Eternal Idol en 22 Noviembre 2021, 00:12 am El entry point en Windows x64 esta alineado a 8 bytes. Teniendo en cuenta el ultimo codigo le estas restando 8 (primer push rdx), 0x400 - 0x80 * 8 - (push rdx dentro del loop) y 0x58 (sub rsp, 0x58). Un total de 0x460 y por lo tanto desalineado.
Título: Re: Problema con CreateProcessA en nasm. Publicado por: otroWeyMas.nasm en 22 Noviembre 2021, 01:39 am Ok, si logro entender en donde esta desalineado, pero no consigo alinearlo y sigue crasheando esa parte en el debugger, ya intente modificarlo usando MOD en la calculadora, pero no lo consigo. Espero me puedan ayudar otro poco o me puedan explicar como alinearlo, sino pues igual gracias por la respuesta. Título: Re: Problema con CreateProcessA en nasm. Publicado por: Eternal Idol en 22 Noviembre 2021, 15:21 pm Sin usar ninguna variable local tenes que restarle 0x58 a la pila, eso es lo minimo indispensable. 0x20 para el shadow space, 0x30 para los parametros que necesita la funcion (son 10 en total, 4 en registros y 6 en pila, 6 * 8 = 0x30) y 8 para alinear la pila a 16.
No me voy a poner a hacer ese trabajo a mano para las variables locales pero aca tenes un ejemplo generado por VC++: Código
Al llamar a CreateProcessA en RSP + 0x20 arrancan los parametros (antes esta el shadow space), en RSP + 0x50 la estructura PROCESS_INFORMATION, en RSP + 0x70 la estructura STARTUPINFOA y en RSP + 0xF0 esta la cadena 'cmd\0'. Título: Re: Problema con CreateProcessA en nasm. Publicado por: otroWeyMas.nasm en 22 Noviembre 2021, 20:42 pm Ok, lo voy a seguir revisando. Solo voy a mostrar algo que me di cuenta, tal vez no voy tan mal.
algo que note en el código de C++ fue... Código: rsp,0E8h Eso significa que es un espacio de 0x58 + 0x90 = E8 Otra cosa que note es... Código: dword ptr [rsp+70h],68h No me fije que le estaba asignando 44 pero debería ser 104 = 0x68 Fui siguiendo los registros con los mios y al parecer están bien, el único que me puso en duda es... Código: dword ptr [rsp+28h],eax Pero igual el parametro siguiente es null, así que no veo que perjudique que yo le haya puesto... Código: mov [rsp+40], rdx Pues bueno, así me quedó ahora Código: mov r13, rdx Solo por curiosidad pase RCX de 0x78 hasta 0xa0, pero igual no se acomodó el stack xP. Seguiré pensando que más puedo hacer. Gracias. Título: Re: Problema con CreateProcessA en nasm. Publicado por: Eternal Idol en 22 Noviembre 2021, 23:22 pm Ese 0x70 o 0xA0 esta muy pasado de los bytes necesarios para las 2 estructuras ya que estas empujando 8 bytes en cada iteracion del bucle. RCX deberia ser 0x10 (o simplemente restar 0x80) y despues deberias restarle 0x50 en lugar de 0x58.
Igual sinceramente no se que te impide acomodar la pila de una vez como hace el VC++. Título: Re: Problema con CreateProcessA en nasm. Publicado por: otroWeyMas.nasm en 24 Noviembre 2021, 08:44 am Código: No se rompan mucho la cabeza como yo, el problema es solo esto. Seguiría 0x50 para el espacio, pero hay que sumar esos 24 Código: sub rsp, 0x68 <----> 0x50 = rsp+80 + 24 = 0x68 Aquí en adelante es ProcessInfo. Código: lea r9, [r12+104] que sería esta parte Código: mov [r12+104], rcx Aquí en adelante es el inicio de STARTUPINFOA Código: lea r9, [r12] Luego continua un par de null's, hasta InheritHandles = 1 siguen otros null, cmd, otro null y la ejecución de CreateProcessA. Bueno... muchas gracias por la paciencia y la ayuda. Saludos. Ya lo logré... después de varios intentos me di cuenta que algo no encajaba con ProcessInfo y el shadow space de CreateProcessA. Ya funcionó. |