Título: Codigos Inutiles !!! Publicado por: Yurix en 13 Julio 2009, 20:36 pm Hola de nuevo a todos , como dije en el post sobre de Ascii a binario quiero hacer con la ayuda de todos una recopilación de tips sobre optimización , mejor uso de las instrucciones etc ...
----------------------------- Todos los que quieran ayudar , estoy haciendo un pequeño escrito sobre instrucciones inútiles y quisiera que mandaran tips sobre estos temas , ej de instrucción inútil "inc cl" ;<< Nada mas inútil que usar este code debe de estar prohibido , sabes por que ? Porque es mejor hace "inc ecx" y el resultado es el mismo y nos ahorramos un byte 00401000 > FEC1 inc cl 00401002 41 inc ecx Ley numero 1 > Nunca incrementes un registro low como es el caso de "al cl dl bl" Parece sencillo pero lo he visto en algunos casos (personales) XD ------------------------------------------------------------------------------------------------ Otro caso es este: (Objetivo : Poner en 7 a eax) Sobre el tema: B8 07000000 mov eax, 7 también tiene de positivo que son 3 bytes 00 y a la hora de comprimir mucho mejor. Pero como curiosidad se me ocurre que podemos también comernos un byte: Código: 00401000 33 C0 xor eax,eax Código: 00401000 33 C0 xor eax,eax Y se me ocurre esta de 5 bytes: Código: 00401002 B0 07 mov al,7 E incluso haciendo pruebas he intentado exprimir para conseguir 3 bytes: Código: 00401007 6A 07 push 7 Gracias a Karmany por aportar estos códigos y en especial por el de> Código: 00401007 6A 07 push 7 ----------------------------------------------------------------------------------------------- Ahora veamos un ejemplo de código inútil en un shell code publicado en Milw0rm.com Código
Díganme que código sobra en este ejemplo???? Fácil ----------------------------------------------------------------------------------------------- Otro ejemplo de código sobrante > ---------------------------------------------------------------------- Mirando un code para el ordenamiento quicksort. Veo código que sobra y mejor dicho que se puede optimizar un poco.El ejemplo mas claro es al final. Código ---------------------------------------------------------------------- Aquí esta la optimizacion del código: Puedo usar casi cualquier registro ya que cuando se empieza se guardan todos con la instrucción pushad y luego los recuperan con popad. Código
Le he dejado en el código optimizado algo que aun se puede optimizar mas , sabes que es ? Esfuérzate un poco y dímelo Lo han resuelto: Karcrack (No terminado completamente) (Le falta poco :silbar:) Saludos --------------------------------------------------------------------------------------------------------------------- Salida Malvada: [/b]Esta es una forma de salir usando un stack overflow , es decir se llama a la misma funcion , como solo hay llamadas la pila se llena hasta el tope y sale a windows Olly: 0040AF82 |$ E8 FBFFFFFF call kills.0040AF82 Asm: salir: call salir La pregunta es , para que sirve esto, simplemente nos ahorramos unos bytes. Otra forma de salir es poniendo un RET en el entry point del programa ya que en la pila esta la direccion de retorno hacia el sistema.Pero les doy un ejemplo para salir de nuestro programa en el momento que querramos , no solo al comienzo Un ejemplo para hacer esto en nuestras aplicaciones. > Código
Y tenemos que reservar 4 bytes para la variable "salir" , esto nos representa un ahorro de 30 bytes (WAO) en nuestro programa si por ejemplo lo comprimimos ... Saludos y espero que les sea util. Título: Re: Codigos Inutiles !!! Publicado por: Eternal Idol en 13 Julio 2009, 20:46 pm Compara el valor final de ecx en estos dos casos:
Código
Código
XOR EAX, EAX Para despues poner en eax la direccion de una funcion de la API no tiene utilidad. Título: Re: Codigos Inutiles !!! Publicado por: Yurix en 13 Julio 2009, 21:13 pm XOR EAX, EAX
Para despues poner en eax la direccion de una funcion de la API no tiene utilidad. Exacto , sobran los XORs ------------------------- El resultado es el mismo en nuestro objetivo >> CL << por eso digo que es mejor hacer inc ecx que inc cl ya que es mas corto , 1 byte :o , claro que todo depende cuando se use :laugh: Gracias Eternal por tocar el tema. ;-) Código xor ecx, ecx mov cl, 0FFh inc cl Resultado 00000000 Código xor ecx, ecx mov cl, 0FFh inc ecx Resultado 00000100 Título: Re: Codigos Inutiles !!! Publicado por: Karcrack en 14 Julio 2009, 16:50 pm Yurix, esto es un poco offtopic, pero por favor, comenta los codigos que pones, que me cuesta mucho leer tus post ;)
MOD: Mucho mejor ;) Título: Re: Codigos Inutiles !!! Publicado por: karmany en 14 Julio 2009, 23:30 pm Sobre el tema:
B8 07000000 mov eax, 7 también tiene de positivo que son 3 bytes 00 y a la hora de comprimir mucho mejor. Pero como curiosidad se me ocurre que podemos también comernos un byte: Código: 00401000 33 C0 xor eax,eax Código: 00401000 33 C0 xor eax,eax Y se me ocurre esta de 5 bytes: Código: 00401002 B0 07 mov al,7 E incluso haciendo pruebas he intentado exprimir para conseguir 3 bytes: Código: 00401007 6A 07 push 7 |