Título: me pordrian explicar cual es la importancia de ebp+0x08? Publicado por: Belial & Grimoire en 28 Junio 2012, 23:28 pm hola
una pregunta he visto que despues de encontrar kernel32 buscan las funciones por ejemplo Código
Tengo una duda sobre las funciones al inicio de busca_funcion... hay mov eax, [esp+8] yo al principio creia o talvez no lo entiendo bien, que esp+8 era donde se habia guardado MZ Código
entonces quise hacer algo como esto para ir guardando en la pila los datos Código
al compilarlo no tuve problemas pero al ejecutarlo salia un error y se cerraba la aplicacion, pero...bueno, como uso windows 7 hay otra forma de encontrar kernel Código
Entonces quise hacer algo como esto Código
y tampoco tuve problemas y el error no me parecio, pero si se dan cuenta de algo, puse Código
lo cual me parecio que debia ser Código
al compilarlo tampoco hubo algun problema, pero al investigar mas me encontre con otro ejemplo, donde hace lo mismo que el primer ejemplo Código
Y aqui ya estoy confundido, que hace realmente ebp+0x08? porque al segundo ejemplo que puse de WinMain, si cambio de igual forma como encontrar kernel en sistemas windows 7, sigue funcionando ebp+0x08 pero si lo cambio a 0x18 ya no funciona Código
Esta es una explicacion que dieron pero no entiendo porque comenzar con 0x08 Citar ;------------------------------------ ; +-----------------------+ ; ebp-0x0C | PE Header | ; +-----------------------+ ; ebp-0x08 | Export table addr | ; +-----------------------+ ; ebp-0x04 | AddressOfNames | ; +-----------------------+ ; ..... ; +-----------------------+ ; ebp+0x08 | kernel32 base address | ; +-----------------------+ ; ebp+0x0C | function name | ; +-----------------------+ ;------------------------------------ espero me puedan ayudar con esta duda, porque me gustaria saber porque ebp tendria que comenzar con 0x08, porque no se si tambien podria haber comenzado con 0x04 y "function name" comenzar con 0x08 y si es "MZ" porque no comienza con 0x18, al principio tambien crei que era porque MZ era un DWORD pero es WORD, pero ahora no tengo idea sobre ebp, espero me puedan explicar salu2 Título: Re: me pordrian explicar cual es la importancia de ebp+0x08? Publicado por: YZT en 29 Junio 2012, 04:01 am http://win32assembly.online.fr/pe-tut7.html
Leete el formato PE si no vas andar y andar preguntando hasta que se cansen de darte explicaciones y empiezen los insultos. Por cierto EBP es el registro que apunta a la base de la pila , pero generalmente dentro de las llamadas "funciones" se guarda esp en ebp y se usa para acceder a los datos que se ingresaron en la pila .. Espero ser de ayuda Salu2 Título: Re: me pordrian explicar cual es la importancia de ebp+0x08? Publicado por: Belial & Grimoire en 29 Junio 2012, 06:39 am hola
es que y entendi PE, por eso no pido que me expliquen sobre eso, lo que quiero saber es porque ebp + 0x08 tiene a "MZ" si supuestamente deberia ser 0x18, o acaso 0x08 no tiene nada que ver con lo que se guarda en eax? porque como lo menciono, tengo la idea que eax tiene "MZ", y al abrir la funcion con push ebp crei que para acceder a MZ otra vez tenia que ser 0x18 pero me aparece un error, y si le pongo 0x08 la aplicacion se executa bien y al revisar otros ejemplos, veo que usan 0x08, pero porque?, de donde sale o porque se accede a ese hexadecimal? porque bueno, ya entendi el formto PE, como llegar a EAT y que tengo que hacer una comparacion de de las funciones y al encontrarlas se guardan y luego se reutilizan y asi ya no se importa nada porfavor, no pido explicacion de PE, solo de porque [ebp + 0x08] o [esp + 8] se que push ebp mov ebp, esp sub esp, 12 es para reservar espacio, algo de esto lo lei del manual de rodojos sobre exploits espero me puedan ayudar, pero repito no es explicacion sobre formato PE ni como llegar a tal direccion ni nada de eso salu2 y gracias Título: Re: me pordrian explicar cual es la importancia de ebp+0x08? Publicado por: Иōҳ en 29 Junio 2012, 07:45 am Porque no vas depurando y comparando estructuras?, como te dice YZT tienes que leerte el formato PE, de acuerdo a la base que tengas en el formato PE, y la documentación que tengas sobre las estructuras más que manejas (como el peb), no sería dificultad programar algo así.
Si lees el tute de zeropad que te puse en el anterior link, ahí está todo explicadito... Saludos, Nox. Título: Re: me pordrian explicar cual es la importancia de ebp+0x08? Publicado por: x64core en 29 Junio 2012, 08:10 am ya entendi el formato PE dice...
para saber cual es el problema de tu codigo, depura el codigo, sino os basta el depurador del compilador que usas pues hay muchos otros Título: Re: me pordrian explicar cual es la importancia de ebp+0x08? Publicado por: Belial & Grimoire en 29 Junio 2012, 19:45 pm ok gracias, voy a seguir buscando
Nox, del link intente descargar el mas reciente archivo pero el doc me parece como dañado solo puedo ver el codigo y el doc creo del 2008 no se si solo esta por partes bueno, voy a seguir intentando, lo frustante no es que no sepa como, porque de tanto que busque y lei, ya logre entender que debo hacer, los pasos son casi sencillos, buscar kernel32, buscar EAT y RVA, hacer comparacion de las funciones que necesito, guardarlas y luego usarlas, bueno otra opcion es hacer comparaciones solo con el hash de las funciones, pero es frustante que pequeñas cosas como ebp+0x08 no lo entiendas y te tengas que detener lo maximo que puedo imaginar es que cuando meto en la pila la funcion que necesito "db 'GetProcAddress'" son 4 bytes "0x04" y cuando meto la base de kernel32 como DWORD son 4 bytes "0x08" entonces seria 0x04 -->funcion 0x08 -->kernel32 push ebp mov ebp, esp ///////// y al meter esp en ebp 0x08 --> kernel32 0x0C --> funcion mov edi, [ebp + 0x08] --> kernel32 --> "MZ" bueno, tratare de seguirle por mi parte para no comenzar con problemas como menciono YZT, por lo menos el como hacerlo y que tengo que hacer, podria decir que ya tengo la idea, solo me hace falta practicar mas con ASM y ver el porque de varias cosas gracias, salu2 ;-) Título: Re: me pordrian explicar cual es la importancia de ebp+0x08? Publicado por: Flamer en 29 Junio 2012, 21:34 pm hola Belial aqui puedes descargar los 14 capitulos de la programacion de virus en asm de la web de ricardo:
Código: http://ricardonarvaja.info/WEB/OTROS/PROGRAMACION%20DE%20VIRUS/ saludos flamer Título: Re: me pordrian explicar cual es la importancia de ebp+0x08? Publicado por: zu-zu en 30 Junio 2012, 03:02 am Código: push ebp Cuando vemos algo así, es porque estamos frente a una función de alto nivel o "stack frame". Un stack frame permite manejar parámetros y/o variables locales (espacio reservado en la stack restando una cantidad determinada al registro Extended Stack Pointer o "ESP"). También existen los opcodes "ENTER" y "LEAVE" que se encargan de crear y liberar el stack frame. Funcionamiento de un stack frame : Código: push 0 PD: Ahora que puedo darme el gusto de leer completamente el hilo, sería recomendable que en vez de usar funciones que encuentres por Internet, aprendas a programar correctamente en ASM ya que tus dudas son muy básicas, y el código del ejemplo que has facilitado está terriblemente desorganizado. Además que no es nada complicado recorrer el Export Directory, comparar, y encontrar la función que se requiera. Título: Re: me pordrian explicar cual es la importancia de ebp+0x08? Publicado por: Belial & Grimoire en 30 Junio 2012, 03:28 am hola
Flamer gracias por el link zu-zu lo siento, :rolleyes:, llevo 2 meses usando ASM y todavia hay muchas cosas muy basicas que no entiendo, espero con mas practica pueda entender mas cosas gracias, salu2 |