INTRODUCCIÓN AL CRACKING CON OLLYDBG PARTE 11 Bueno, ya nos queda ver los hardware breakpoints, los condicionales y los message breakpoints, para terminar con los tipos de breakpoints. HARDWARE BREAKPOINTS
Los HARDAR! BR!A"#$%&'( o )HB#* son una propiedad +sica del procesador, realmente yo no cono-co la arquitectura de los mismos para eplicarla, pero es como si tuviera varias entradas en las cuales vos le podes poner las direcciones en las cuales quer/s que el programa se detenga y el al ir e0ecutando compara y al hallar la direcci1n parara. 'enemos la posibilidad de poner cuatro HB#, a la ve- al poner el quinto $LL2DB3 nos pedir4 que eli0amos cual de los 5 eistentes queremos borrar. 6omo siempre usemos el 6RA6"7! D! 6R8!H!AD para practicar
!isten HB# $& !9!68'%$&, $& R%'! y $& A66!(( son las tres posibilidades eistentes. #oner un HB $& !9!68'%$& cumple la misma +unci1n que poner un B#9 en una direcci1n, salvo salvo que el HB# no cambia c1digo y es mas di+cil que sea detectado, eso si hay programas que tienen trucos que nos borran los HB#, esos trucos y la +orma de contrarrestarlos los veremos en pr1imas entregas. (i qu quie iero ro po pone nerr un HB# HB# !9!6 !9!68' 8'%$ %$& & en 5: 5:;: ;:;< ;<,, marc marcoo la lne lnea, a, hago hago clic clickk dere derech choo y eli0 eli0oo BR!A"#$%&'=HARDAR! $& !9!68'%$&
'ambi/n 'ambi/n puedo tipear en la commandbar
6on lo cual el HB# estar4 puesto.
$LL2DB3 tiene una ventana especial para que podamos ver y mane0ar los HB#, para ello vamos a D!B83=HARDAR! BR!A"#$%&'(
All tenemos la ventana de los HB#, si apretamos >$LL$ nos mostrara en el listado donde esta colocado el mismo, y con D!L!'! podremos borrarlo. Ahora apreto >? para correr el programa
2 para en 5:;:;< 6omo vemos se comporta como un B#9 com@n, si reali-amos la misma prueba que hicimos con el B#9 de escribir 7$ !A9, D$RD #'R D(C5:;:;< y lo e0ecutamos vemos que el c1digo no ha sido cambiado.
6ambio !%# a 5:;::: con &! $R%3%& H!R! y apreto >E
emos que los bytes son !F AG :5 ::, los lee al rev/s y nos muestra ::::5AG!F, sin cambios, as que veri+icamos que no hay cambios de c1digo. A su ve- podemos reiniciar el $LL2DB3 veremos que el HB# se mantiene colocado
Lo borramos y colocamos uno en 7essageBoA como hicimos con el B#9 directo en la api
Ahora lo vemos en la lista de HB#
&o repetiremos lo mismo pero sabemos que si corremos el programa y le colocamos un user y pass, y lo aceptamos, parara en la api 7essageBoA de la misma +orma que lo hemos hecho antes con B#9 comunes. Los HB# $& A66!(( y $& R%'! solo pueden abarcar ;, o 5 bytes de largo, por mas que marquemos -onas en el dump mas largas, solo tomara como m4imo los primeros 5 bytes de la misma veamos el e0emplo.
Reinicio y borro todos los HB# que quedaron, y tratare de colocar un HB# $& A66!(( en la direcci1n 5::6A oy a ver dicha direcci1n en el D87#
All esta ahora marco los primeros 5 bytes
2 hago click derecho
eo que haya marcado la -ona que haya marcado, me aparece solo en este caso la opci1n de colocarlo en un solo byte a partir de 5::6A o dos bytes )$RD*, la opci1n de 5 bytes va de cuatro en cuatro as que si uno de casualidad eli0e una direcci1n intermedia no aparecer4, como en este caso, emos que si hago click derecho en el byte siguiente y eli0o HARDAR! $& A66!((, solo aparece la opci1n B2'!
2 en el siguiente ya me aparece nuevamente la opci1n D$RD o sea que abarque cuatro bytes.
!l tema es que si yo quiero que pare cuando guarda o lee en 5::6A, con que haya un HB# en un solo byte es su+iciente pues al intentar guardar o leer en la direcci1n parara igual. uelvo a 5::6A y coloco un HB# $& A66!((= B2'!
emos que en la lista nos marca el tamaIo ; o sea un B2'!
Doy R8&
All nos dice $LL2 que paro por el HB# ; o sea el primero de la lista de los HB#.
eo que para en la lnea siguiente a donde guarda o lee, eso ocurre con los HB# $& A66!(( y $& R%'! siempre debemos recordar que se pasan una instrucci1n y paran en la instrucci1n siguiente.
2 para 0usto despu/s de guardar, a di+erencia del 7!7$R2 BR!A"#$%&' que hubiera parado en 5:;::E, 0usto en la instrucci1n que lo activa. Bueno lo mismo se puede reali-ar con los HB# $& R%'!, en ese caso solo parara cuando guarda no cuando lea, y en la instrucci1n siguiente a la que lo activa. BREAKPOINT CONDICIONALES
(on en realidad una variante de los B#9 comunes, solo que al activarse $LL2DB3 chequera si alguna condici1n que le colocamos se cumple y en ese caso parara, si no se cumple seguir4 corriendo como si no eistiera. eamos un e0emplo
Reiniciamos el $LL2 y borramos todos los HB# si quedo alguno del e0emplo anterior y colocare un B#9 6$&D%6%$&AL o BR!A"#$%&' 6$&D%6%$&AL en 5:;::!, para ello marco la lnea, hago click derecho y eli0o BR!A"#$%&' 6$&D%6%$&AL.
7e sale la ventanita para que escriba la condici1n
#ondr/ que pare si !A9 vale 5:::::, o sea la condici1n ser4 !A9JJ5:::::
!n la ayuda del $LL2DB3 nos muestra los smbolos que podemos utili-ar, en este caso el igual, se representa por dos smbolos igual consecutivos.
emos que en el caso de un B#9 6$&D%6%$&AL se cambia a color rosado, apreto >?
emos que paro y $LL2DB3 nos dice
(i vemos !A9 vemos que vale 5:::::, lo cual +ue la condici1n para que se detuviese
(i reinicio y borro el B#9 6$&D%6%$&AL y ahora coloco otro pero que pare si !A9JJK::::: por e0emplo
2 doy R8& emos que el crackme se e0ecuta y no para en el BR!A"#$%&' ya que siempre al pasar por all, vale !A9J5::::: y la condici1n no es cumplida, por lo tanto no se detiene. (i vamos a H!L#=6$&'!&'(
All a BR!A"#$%&'( y luego a epression
$LL2DB3 nos mostrara e0emplos de epresiones que pueden ser usadas en las condiciones
BREAKPOINT CONDICIONAL LOG
!s un B#9 condicional igual que el anterior, solo que en este caso podemos activar que nos loguee o nos guarde ciertos valores al pasar por el B#9 6$&D%6%$&AL, en este caso las opciones son muchsimas, probaremos en el caso de una A#% que tiene varios accesos y queremos que loguee o nos guarde ciertos datos al pasar por ella. 8samos el e0emplo de la api pero puede ser colocado un B#9 6$&D%6%$&AL L$3 en cualquier direcci1n sea api o no, reiniciemos el $LL2. amos a la direcci1n de la api, ya sabemos como 6L%6" D!R!6H$=3$'$ !9#R!((%$&
All estamos ahora hacemos 6L%6" D!R!6H$= BR!A"#$%&'= 6$&D%6%$&AL L$3
emos que nos aparece una ventana con m4s opciones
!n este caso no haremos que pare en la api, solo que nos loguee ciertos datos de inter/s.
6omo no queremos que pare no colocamos ninguna 6$&D%6%& y en la opci1n #A8(! #R$3RA7 elegimos que no pare nunca o sea ponemos la marca en &!!R. Luego en L$3 AL8! $> !9#R!(%& ponemos que nos guarde el valor de Cesp que escribimos en el rengl1n !9#R!((%$&, que como sabemos ser4 la direcci1n de retorno al programa desde la api, ya que es el valor superior del stack, por lo tanto en la segunda opci1n L$3 AL8! $> !9#R!(%& elegimos ALA2( para que la L$38!! siempre, y en el tercer rengl1n nos da la opci1n si queremos L$38!AR los argumentos o par4metros de la +unci1n o api, pues no estar4 de mas, ponemos ALA2( tambien. amos a la ventana L$3 o L
2 limpiamos la misma para ver claro lo que guarde el programa a partir de aqu con 6L%6" D!R!6H$= 6L!AR %&D$.
emos que tambi/n all esta la opci1n de guardar lo logueado, en una +ila de teto, si lo necesitamos lo podemos activar all.
Ahora doy R8& con +? Llego a la ventana del crackme y aun no hay en el L$3 nada sobre nuestra api pues aun no paso por la misma. amos a R!3%('!R y pongamos un user y pass cualquiera.
Al apretar $"
emos all que nos muestra aun sin haberse detenido el $LL2, la in+o de la 7essageBoA, primero el valor superior del stack que es 5:;
6ambio la tilde para que solo pare cuando se cumpla la condici1n )$& 6$&D%'%$&* y escribo la condici1n o sea que solo pare cuando Cesp sea igual a 5:;
Recordamos que cuando ponamos un nombre que tenia n@meros, paraba veces en la api messageboa, apretemos $"
emos que salio la primera 7essageBoA pero no paro $LL2 en ella, vemos en el log la direcci1n de retorno es 5:;<6; y no se activa la condici1n por ello no paro.
Al apretar aceptar
Ah si en la segunda ve- que va a la api, se cumple la condici1n y para.
emos que en la parte superior del stack esta el valor 5:;
De cualquier +orma $LL2DB3 guardo el L$3 de ambas ocasiones en que se detuvo
Ah se ve claro que la segunda ve- la direcci1n de retorno +ue 5:;
Bueno creo que con esto tienen para practicar un rato, aun quedan los 7!((A3! BR!A"#$%&'( pero no quiero matarlos, lo de0amos para la parte ; y luego de los 7!((A3! B#9 le prometo seguir crackeando un poco para no aburrirlos, pero esto deben saberlo antes de continuar.
Hasta la parte ; Ricardo &arva0a E de noviembre de ::K