Anda di halaman 1dari 11

Funcionamiento del OllyDBG

""Bueno como haba prometido, aqu comenzaremos a investigar el funcionamiento del OllyDBG, para llevar adelante nuestros fines. Como ya haba explicado este programa es un desensamblador debugeador, que a mi gusto es de lo mejor por el sencillo interfaz intuitivo que tiene. Como me imagino que ya habrs bajado el programa, y habrs probado lo que te dije el captulo anterior, no???? jajaja, si que eres vago. Bueno ha llegado la hora asi que bjate el programa e instlalo de una vez ;). Bueno comenzaremos descargando algn programa, busquen algn crackme en lo posible, para empezar a experimentar. Incluir ahora un grfico para utilizarlo para tomar referencias, para explicar lo que estamos viendo.

Como podrn notar, si es que no se han quedado ciegos de pasar mucho tiempo delante de la PC ;) , he remarcado las diferentes areas del programa con distintos colores para poder distinguirlas y de esta manera

poder explicar ms sencillamente a qu hacen referencia. ROJO: En este lugar podemos ver la direccin que se le ha asignado a la orden, esto nos servir para poder orientarnos dentro del programa, y una vez ubicado el de nuestro inters, simplemente anotndolo no tener que repetir todo el proceso una y otra vez. AZUL: Es el valor hexagesimal. Este es un sistema de numeracin en base 16, que utiliza hasta el nmero 9 luego del cual comienza a utilizar letras hasta completar la escala, para que lo vean ms claramente incluir una tabla de conversin de los primeros valores para que lo vean: DEC-->1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ....... HEX-->1 2 3 4 5 6 7 8 9 A B C D E F 10 ....... VERDE: Aqu observaremos el area donde se hallan las rdenes en lenguaje ASM , como anteriormente he dicho para nuestros fines no ser necesario conocerlas todas, aunque si muy til para entender la rutina que realiza el programa, especialmente cuando nos avoquemos a obtener un serial. NARANJA: Se vern los registros, para qu nos interesa eso?, a diferencia de otros lenguajes en ASM no se pueden definir variables indefinidas, si no que los valores se transpasan entre las que pueden ver en el grfico, por lo tanto podremos ver all el valor que toma, que como me imagino que ya habrn pensado en algn momento ser nuestro objetivo el que se halle all almacenado. AMARILLO: Podremos ver la "Dump" o basura en castellano, he ledo en repetidas ocasiones que es til personalmente no me ha sido de gran ayuda hasta ahora, pero nunca se sabe por cierto. Debemos saber que estos programas llaman a ciertas funciones que ya se hallan predefinidas en los mdulos, para clarificar esto hagan lo siguiente en el programa que tienen debugeado en el OllyDBG, hagan click con el botn derecho del mouse y si posan sobre al opcin VIEW, se desplegarn todos los modulos que se utilizan durante el programa. Para ver con mayor exactitud cuales son las funciones que se llaman (API para decirlo ms concretamente), haremos de nuevo click con el botn derecho pero iremos a SEARCH FOR... , y una ves posados all a NAME (LABEL) IN CURRENT MODULE, adems de verlas se nos especificar la direccin la seccin y el tipo que es si de importacin o de exportacin.

Otra opcin que nos ocupar ser SERCH FOR.... > All REFERENCES TEXT STING , que como imagino ya habrn descubierto por su nombre hace que se busquen todas las cadenas de texto existente dentro del mdulo.

Si ampliamos la solapa DEBUG veremos varias opciones, a continuacin lo que har ser, explicar qu opciones nos ocuparn y sus respectivos atajos para poder trabajar ms cmodamente en nuestro ordenador, pudiendo independizarnos relativamente del mouse durante el manejo del programa para hacerlo de forma ms agil, si bien al comienzo tomar ms tiempo, con el acostumbramiento agilizar mucho el proceso. Estas son: VIEW >Breakpoint // DEBUG >RUN // DEBUG >Restart // DEBUG >Step Intro // DEBUG >Step Over // Estas sern principalmente las opciones que nos ocuparn, existen otras tiles, pero las veremos ms adelante cuando sean necesarias.

BREAKPOINT: Antes que nada explicar lo que significa esto. Como el nombre lo indica es un punto de ruptura, es decir, cuando apliquemos un breakpoint a alguna parte del programa tendr como resultado que la ejecucin del mismo se detendr all. Existen varios tipos de breakpoint, utilizaremos el toogle cuya tecla de atajo en F2 , y lo que hace es poner un punto break fijo, a diferencia de otro caso como podra ser el breakpoint que se ejecuta solo una vez o de memory access, etc. Esta opcin concretamente en s, nos permitir ver todos los breakpoint utilizados sobre el programa para poder visualizarlos ms fcilmente y poder de esta manera manipularlos. RUN: Como su nombre lo indica esto har que corra el programa, su tecla de atajo es F9.

Restart: Esta opcin limpiar la pantalla y desensamblar el programa de nuevo, su tecla de atajo es Ctrl+F2. Step Over: Esta opcin avanzar paso por paso dentro de las ordenes de ejecucin del programa, nos servir para realizar lo que se llama proceso de traceado o simplemente "tracear". Cuando traceamos lo que estamos haciendo es seguir paso por paso la ejecucin del programa pero no simplemente para visualizarlo, si no por ejemplo si el programa realiza una comparacin y luego hay un salto lo que har es segn el resultado tomar el salto o no y en caso de tomarlo arrojarnos a la zona del programa hacia donde estaba orientado dicho salto. Su tecla de Atajo es F8. Step Into: Esta es similar a la anterior con la diferencia de que con esta ingresaremos en las llamadas (CALL), es decir podremos ver el proceso que realiza esta. Por ejemplo en un call se da la generacin de una frase, si seguimos con F8 (recordemos, se los acabo de decir ;) , que es para Step Over) , pasaremos al siguiente paso viendo el resultado, sin entrar en la llamada, en cambio con F7 (tecla de atajo de Step Into) , ingresaremos al proceso que se realiza dentro de la llamada. Debemos ser muy cuidadosos cuando utilizamos esta opcin al treacear, ya que algunas llamadas nos llevan a otro mdulos (recordemos las API) , lo que podra despistar completamente al nuevo usuario. Conjuntamente con esta herramiento aprovechar la oportunidad para referirme al W32Dasm. Esta herramienta es a mi entender un desensablador pero tiene la paticularidad que pondr las cosas ms claras para poder realizar una mejor lectura del funcionamiento del programa, ya que dentro del mismo desensamblado se hace la referencia a desde que lugares son llamadas las funciones y por ejemplo en ciertos programas las referencias a las cadenas de texto son visibles desde este y no desde el olly por ejemplo. Les recomiendo simplemente que se lo descarguen y le echen una ojeada , con lo explicado para el OllyDBG no tendrn el menor problema para entender el funcionamiento del mismo.

""El Crackme puede bajarse de la zona de descargas de indaya en Seguridad >Cracking Bueno gente, siendo consciente de la impaciencia que los ocupa, y a riesgo de aburrirnos comenzaremos en este captulo a acercarnos al primer programa :) .El objetivo ser un crackme V1.0 de cruehead que obtuve con el curso de Ricardo Narvaja (muy recomendado para aquellos que se decidan por el Softice en lugar del OllyDBG), creo que el autor no se molestar, ya que este curso es con fines educativos y siempre es bueno aprender ;). Lo primero que haremos ser, claro est, registrarnos, al menos que seas de esas personas que se ganan la lotera me imagino que es altamente probable que te salte el siguiente mensaje "No Luck there,mate!". Entonces tomaremos lpiz y papel y anotaremos este mensaje que es el que nos d el programa cuando nos registramos

incorrectamente. Ahora pensemos lo siguiente, hemos ingresado un serial y nos ha retornado un mensaje donde nos dice que el serial es incorrecto, momento... cmo diablos lo saba?, luego de pensarlo un rato llegamos a la conclusin lgica, nuestro serial en algn momento ha tenido que ser comparado con el primero para que el crackme llegue a saber que no era vlido. Entonces nos queda despus de pensar un poco ms el siguiente esquema: El programa captura nuestro serial >lo compara con el original >llego a la conclusin que no es igual >Salta a la zona del Mensaje de error. Escribo este esquema en mi hoja justo debajo del mensaje de error y en mi hoja miro toda la informacin que junte y me queda algo como lo siguiente: Nombre del Programa: CrackMe v1.0 Autor:Cruehead Msg de Error: "No Luck there,mate! El programa captura nuestro serial >lo compara con el original >llego a la conclusin que no es igual >Salta a la zona del Mensaje de error. Me quedo un rato mirando la hoja mientras fumo un cigarrillo, y se me enciende la lamparita ;), qu pasara si pudiese evitar que el programa luego de comparar los serial saltara a la zona de error... mmmmm, entro al Wdasm y lo desensamblo y luego de borrar el salto que hay despus de la comparacin...BUUUUUUUUUUUUUUUUUU, lo nico que he conseguido es que el programa se me cuelgue al intentar registrarme, evidentemente la cosa es por ah pero esa no es la solucin. Pienso un poco ms y digo, y si cambio el salto para que salte si son iguales, por lo tanto si son diferentes saltara a la parte del programa donde estaremos registrados, interesante , interesante.... Desensamblo mi objetivo con el Wdasm y busca las referencias de cadenas de texto (el botn de la derecha de todo al lado del de print, "String Data References") y veo algo as:

O por dios! si est all ni ms ni menos que el mensaje de error que salta al ingresar un serial falso, mmmm... haremos doble click sobre l a ver donde est y me arroja a la posicin de la memoria 004013B4, as que aqu est la zona de "mal chico". Apuntamos est direccin en nuestra hoja como ms nos guste llamarla, yo por ejemplo puse, Posicin de Msg de Error 004013B4. Ahora a continuar... comienzo a mirar para arriba para ver desde donde han llamado al mensaje de error, paso por el lugar que hace referencia a una string que dice "No Luck!", me huele que busca despiertarno, seguiremos con lo que tenemos hasta ahora, seguimos subiendo un poco ms y veremos algo as: Referenced by a (U)nconditional or (C)onditional Jump at address : 0040138B (C) Esto quiere decir que la zona de error fue llamada desde esa direccin, as que como con todo descubrimiento, a la hojita. Inmediatamente iremos a esa direccin a ver que diablos ocurre por esos lados. Vamos en las opciones del Wdasm a goto >Goto code location o tocamos Shift+F12 e iremos a esa direccin. Nos deposita all y estamos sobre una orden que dice Jb , y la zona de la memoria de donde venimos . Bueno este Jb ( no no, no est hablando de la marca de whisky, significa Jump if Below), es muy bonito pero no lo queremos dentro de nuestro programa ya que nos est llevando donde no queremos ir. Ahora que tenemos la direccin cerramos el Wdasm y nos vamos al

OllyDBG y desensamblamos el Crackme. Hacemos click sobre la pantalla ya vamos a GO TO >Expression, e ingresamos a la direccin de la memoria que queremos ir. Pero que le haremos a este pobre JB , lo modificaremos para que salte si los serial son iguales por lo tanto si son diferentes....ejemmm , pensemos que pasar. Nos situamos sobre el salto y hacemos un click con el botn derecho del mouse y vamos a la opcin assemble.

Aqu modificamos el JB por un JE (Las modificaciones realizadas en ollyDBG son provisorias, ms adelante veremos como hacerlas permanentes), asi saltar si son iguales y vamos a Debug >RUN e intentamos registrarnos Y........BUUUUUUUUUUU.... agua, no ha pasado nada ese tedioso mensaje sigue en el mismo lugar, pero por ms pesada que sea la piedra siempre hay una forma de moverla ;), as que volvemos al Wdasm y volvemos a las cadenas de texto y vemos el mensaje de error, hacemos doble clic y estamos en la misma zona de la memoria de siempre, si le damos otro doble click sobre el mensaje.... O DIABLOS, est en otra parte tambin el mensaje o sea que el programa solo buscaba despistarme....maldito, ca en la trampa pero te he pillado igual. Esta vez caemos sobre 401370, asi que a la hoja y lo anotamos y escribimos que lo anterior era un engao para recordarlo. Y ahora igual que antes nos interesa ver desde donde

se llama esta posicin y vemos que es llamada desde 401245, as que anotamos y all nos vamos. A ver que hoy, justo encima de esa posicin vemos un JE siguiendo a una comparacin, demasiado sospechoso para mi gusto jeje. As que anotamos la posicin del JE 401243 y me posiciono encima del salto y lo sigo con el botn Jump To a ver a donde nos lleva. Si alguien se molest en mirar bien y no se dedica unicamente a hacer lo que aqu les digo ;) habr notado que en las referencias de cadenas haba un mensaje que deca "Great Work,mate!" , y si alguno milagrosamente por curiodad le hizo doble click y ya por gracia divina mir desde donde era llamado.... BINGOOOOOOOOOOOO estamos en el mismo lugar o sea que ESE es nuestro salto muchachos. Ahora entonces nos vamos a toda velocidad al OllyDBG y nos posicionamos sobre el salto y en assemble lo cambiamos por un JNE , para que salten si no son iguales y le damos RUN (F9) e intentamos registrarnos y lo tenemos nos sale un mensaje de felicitaciones :). Lo hemos logrado. Bueno espero que se hayan divertido, ha sido un captulo bastante fructifero, ya hemos crackeado nuestro primer programa. Escrbanme para decirles si les ha gustado, cualquier duda o sugerencia.""

""En este captulo veremos como crackear el mismo Crackme, pero si no pudisemos ver las string references, es decir, imagnense que cuando lo desensamblamos con el wdasm o miramos las referencias de texto en el OllyDBG y no encontramos nada, qu hacemos?. Bueno para resolver esta preguntra, aclararemos lo siguiente, adems de poder situar lo Breakpoint en ciertos lugares del programa como hemos hecho en el captulo anterior, existen las llamadas funciones API, que son funciones que existen en Windows y el programa utiliza para no escribir funciones que ya puede utilizar tomndolas de otro lado. La idea ser utilizar estas funciones para que nos guen a la zona deseada, para poder encontrar el salto condicional que deseamos cambiar. En este caso la funcin API que utilizaremos es una llamada MESSAGEBOXA , que es la que dibuja las ventanitas con mensajes, as que pensaremos que si podemos ubicar cuando el programa llama a esta funcin para dibujarnos la ventanita de NO LUCK THERE MATE, podremos ubicar desde donde se realiza la comparacin, ya que antes de dibujarla checkear si nuestro serial es correcto. Dicho esto, ponemos manos a la obra. Como siempre lo primero que haremos ser irnos a nuestro querido OllyDBG, y desensamblaremos el Crackme. Hecho esto le daremos a F9 (para que corra el debugeador y se ejecute el programa), y luego haremos click derecho sobre el programa desensamblado e iremos a SEARCH FOR >Name (label) in current module, o simplemente pulsaremos CTRL+N, lo que es equivalente y obtendremos algo como lo siguiente.

Bueno aqu estamos delante de los mdulos que se utilizan. Lo que haremos ser localizar el que nos interesa MESSAGEBOXA. Aqu veremos una diferencia, mientras que con el Softice bastar poner BPX MESSAGEBOXA, para poner un breakpoint en la funcin, aqu lo que haremos ser seguirla para ver desde donde se utiliza, ya que con un Breakpoint no llegaremos a nada :) . Entonces lo siguiente, ubicada la funcin nos situaremos sobre ella y le daremos al botn derecho del mouse, y lo que nos ocupa a nosotros es ver desde qu lugares es llamada, as que iremos a la opcin FIND REFERENCES TO IMPORT y all nos salen 4 direcciones 40135C, 401378, 4013BC, 40143A . Si hacemos doble click sobre la primera (para que nos lleve al programa desensamblado, a la posicin desde donde se llama) veremos que se trata de la ventana de que hemos ingresado el serial correcto, es claro que esta no nos interesa, ya que si ingresamos el serial incorrecto no utilizar dicho mensaje :p . As que seguimos, si hacemos doble click sobre el segundo y el tercero, veremos que ambos hacen referencia a la ventanita de error, mmmmm... por aqu debe ser el asunto. Pero miro y digo "son dos", algo no est bien, y es all donde usando la memoria me acuerdo que ya en el captulo anterior, el programa me haba engaado

llevndome por un camino falso, as que proceder con cautela. Hago doble click sobre la que se llama desde 401378 y debajo de la posicin en la que me arroja, hay un RETN (return, es decir que utiliza la funcin y me devuelve mediante esa orden, debajo de la posicin desde la cual fue llamada para dibujar la ventana), as que pondremos con F2 un Breakpoint en ese RETN, he intento registrarme, esta vez lo hemos pillado, ya que el programa nos arroja el error inmediatamente luego de intentar registrarnos, lo que nos est diciendo que nuestro Breakpoint no ha detenido el programa, por lo que el programa no utiliza la zona donde pusimos con F2 el Break, por lo tanto este es el mensaje de error que nos haba engaado en el captulo pasado. As que sabiendo esto hacemos doble click sobre 4013BC, e igual que con el anterior vemos que debajo de donde nos arroja, hay un RETN, al que le pondremos un Breakpoint , y luego intentaremos registrarnos. En esta ocasin el programa se ha detenido ;), as que le daremos a F8 para que nos devuelva, y nos arroja sobre la posicin 401232, hasta aqu vamos bien pero, mmmm.... este lugar me resulta familiar,aaaaaa....como no? si no es ms ni menos que donde la otra vez habamos hallado el salto a modificar la ltima vez jajaja ;), si miramos 5 y 6 rdenes hacia abajo respectivamente veremos la comparacin y el salto, modificaremos el salto igual que la vez anterior posicionndonos sobre l , le damos a la barra espaciadora, para que nos lleve a la opcin Assemble y all modificamos el salto JE por un JNE, y ... BINGO , lo hemos logrado una vez ms y no hemos precisado las referencias de texto ;). Escrbanme para decirles si les ha gustado, cualquier duda o sugerencia.""

Bienvenidos a este nuevo captulo del curso de cracking, en esta oportunidad lo que haremos ser registrarnos en el conocido programa de chat Mirc. Para esto lo que haremos ser bajarnos de http://www.mirc.com/ www.mirc.com el programa, si es que ya no lo tienen, y lo instalamos en nuestra PC. Una vez que hicimos esto, lo abriremos y nos aparecer una ventana que dice que nos quedan unos das para que venza el periodo de prueba....mmmmm...interesante, ya que nos indica que hay una rutina para checkear los das que faltan para que expire el programa, la cual podriamos atacar, pero primero a lo primero. Si vamos a la pestaa HELP del programa encontraremos una opcion que dice REGISTER... , all lo que haremos ser como siempre intentar registrarnos claro est, y aparece un mensaje dicindonos, "THE REGISTRATION NAME AND NUMBER YOU HAVE ENTERED ARE NOT VALID.PLEASE MAKE SURE YOU ARE ENTERING THE REGISTRATION USING THE CORRECT CAPITALIZATION AND SPACING". Ok , ya tenemos el mensaje de error que nos arroja al registrarnos como para buscar por donde viene el asunto ;). Lo que haremos ser como siempre hoja y lapicera en mano y anotar este descubrimiento, y de inmediato (si es que ya no lo hicieron como sospecho que algunos ya han adelantado ;) ), lo desensamblamos con el Wdasm... All iremos a las referencias de cadena de texto y lo que haremos ser encontrar el mensaje de error que nos arroja al registrarnos incorrectamente. La encontraremos en String Resource ID=1909:"...", si hacemos doble click nos arrojara sobre la zona que se corresponde a este mensaje 004C7D34 , le haremos doble click de nuevo para ver si no es llamada desde otra parte, nada solo desde ah :). Pero aqu lo que haremos ser encontrar el que dice que nos hemos registrado correctamente, que se halla una o dos cadenas por encima de la anterior mencionada, y al hacer doble click nos arrojar sobre la direccin de la memoria 004C7C5B . Con estos datos (que de ms est decir que me imagino que todos hemos tomado nota jaja), cerramos el Wdasm y nos vamos a nuestro amado OllyDBG. Una vez que abrimos el programa con F9 lo echamos a andar y con el

botn derecho vamos a Go To > Expression, y all vamos a la zona anteriormente indicada. Una vez all para ver si nos hallamos en lo correcto ponemos sobre esa posicin un Breakpoint con F2 , y lo que tiene que ocurrir es que el programa se detendr??..... NOOOOO, no han prestado atencin NO PASARA NADA, porque estamos poniendo un breakpoint en el mensaje de registracin correcta y lo que nos arrojar (a menos que tengis mucha suerte) es el mensaje de error de registracin incorrecta :) jajaja. Entonces que hacemos esto supuestamente detendra el mensaje de registracin correcta... pero de nada nos ayuda, lo que haremos entonces es comenzar a mirar el cdigo ms arriba, hasta donde aparezca un return, lo que indica el final de la rutina anterior y el comienzo de sta que estimamos ser donde checkeara mi serial.... Vamos subiendo y vemos aproximadamente que en la direccin 004C7BD2 aparece el serial que intentamos ingresar seguido de nuestro usuario, de lo que deducimos que en el prximo salto ya tendr comprobado nuestro serial y nos arrojar hacia la zona de error, por lo que inmediatamente lo ubicamos y vemos sin mayores problemas que se halla en la direccin 004C7BE3, entonces nos situaremos sobre sta y tocaremos la barra espaciadora (o assemble con el botn derecho del mouse como ms gusten ;) ) y cambiaremos como hemos aprendido el JE , por un JNE (saltar si son diferentes), e intentamos registrarnos :).

Bueno eso ha sido todo espero que les haya gustado y hayan aprendido algo. Claro est que los cambios se irn al cerrar el OllyDBG pero de eso hablaremos ms adelante, ya que me imagino que nadie quiere hacer nada indebido jajaja.... Escrbanme para contarme si les ha gustado.

7 - Cmo matar los bytes


Curso gratis creado por JaMaikito . Extraido de: http://www.indaya.com Bueno, con demoras pero henos aqu. Bienvenidos al captulo nmero 7 de este cursillo de cracking. Hasta ahora hemos visto como desensamblar un programa, reconocer los saltos necesarios, etc...

En este captulo veremos como matar los bytes, es un tema extremadamente sencillo, as que ser breve :D. Como recordaremos el salto JE se corresponda con el valor hexagesimal 84 / 74 y el JNE con el valor 85 / 75 , qu significa entonces esto de "matar los bytes", quiere decir realizar el cambio que habamos hecho en el ollydbg de forma permanente.

Para esto utilizaremos un editor hexagesimal, aqu utilizaremos el Hiew, lo puedes descargar de la zona de descargas de indaya-->seguridad-->cracking o haciendo click aqui http://www.indaya.com/modules/mydownloads/singlefile.php?cid=23&lid=158 Hiew, tiene un entorno grfico al estilo del softice, o sea que lo manejaremos con el teclado. Las funciones que nos interesarn son:

~- F4: Mode--> aqu cambiaremos en como queremos ver el programa Text, Hex (hexagesimal), Decode. ~- F7: Search--> nos servir para ubicar la cadena que querramos cambiar. ~- F3: Edit --> Para realizar la edicin. ~- F9:Update-->para que se mantengan los cambios realizados. ~- F10:Quit --> mmmmmmm.......

Bueno teniendo todo esto desensamblaremos el Crackme v1.0 que tenemos desde el captulo 3, buscamos donde se hallaba el salto, como no soy tan malvado como para hacerlos hacer todo el trabajo de nuevo jajaja, les recordar que el salto se hallaba en la direccin 401243 , all veremos que al costado se halla el valor hexagesimal que es 74 07, lo que haremos es lo siguiente, tomaremos una hoja y un papel y anotaremos este valor hexagesimal seguido de algunos ms consecutivos para poder encontrar la cadena en el Hiew.

Ej. nos quedara algo as: 74 07 E8 18 01 00 00 EB 9A

Una vez que tenemos esto corremos el Hiew y abrimos el Crackme1.exe . ~- Una vez que lo tenemos all presionamos F4 y elegimos el modo Hex, ~- luego F7 e insertamos la cadena que queremos, nos posicionamos sobre el 74 (JE) , ~- le daremos al F3 y lo cambiaremos por un 75 (JNE) , ~- tocaremos F9 para que se actualice y luego F10 para salir ~- Ahora abran el programa e intenten registrarse ;) . jajajajja. Espero que les haya gustado, escrbanme si tienen dudas o comentarios: mailto:JaMaikito@hotmail.com JaMaikito@hotmail.com

Anda mungkin juga menyukai