Vous êtes sur la page 1sur 19

Desempacando HASP HL 2.

16 + Thread
Hace unos das un compaero me coment, que haban adquirido un programa
original, pero que para utilizarlo tenan que ponerle siempre una memoria de esas que se
ponen por el puerto USB. Si queran o necesitaban utilizar el programa en casa o en otro
ordenador, tenan que hacerlo con la nica mochila disponible.
!o que queran hacer era eso" poder utilizar el programa #que haban comprado$, sin tener
que poner el dichoso aparate%o.
&e pareci algo mu' lgico ' por lo qu( luchar, as que acced a in)estigar el programa.
!a nica condicin que me pusieron es no hablar del programa en cuestin, as que *alsear(
determinadas im+genes ' cambiar( nombres.
,o nunca me haba en*rentado a una mochila, as que hasta que me de%aran el programa
original con la mochila me *ui cmo no, a buscar ' encontrar toda la in*ormacin que pude
sobre este tema.
-on todos los tutes #)uestros tutes$ en mi escritorio ' bien reledos, lleg el da en que me
de%aron el ./. con el programa ' una lla)e USB que contena el Hard0are para la
proteccin.
INTRODUCCIN
1
Desempacando HASP HL 2.16 + Thread
1nstal( el programa, ' obser)( cmo se crearon dos carpetas, una con el programa instalado
llamada &agic2 ' otra que contena unas cuantas libreras .dll llamada .sistec
3bser)( tambi(n que casi al *inal de la instalacin del programa instala sin preguntar nada,
los dri)ers de este H4S5. /i cmo apareca un e%ecutable nombrado como Hasp.exe en
archi)os temporales, que es el que instala los dri)ers ' despu(s lo quita. 1ntent( copiarlo '
pegarlo r+pidamente, pero no me de%...
!o analic( con )arios detectores de pac2ers ' ninguno encontr nada.
5or ltimo utilic( el 6.7 5ac2er .etector 8.9: ' con una librera e;terna RDG E.R.A.db
apareci esto"
5or algo se empieza.
&i ignorancia en estos temas me hizo e;aminar al programa Magick.exe sin poner la
mochila. <l programa tiene el <5 en una seccin llamada .protect ' est+ comprimida. .e ah
se )a descomprimiendo ' e%ecutando hasta que llega a la seccin del cdigo a nuestro 3<5,
lo tpico que conocemos.
!a mochila que tena era una H4S5 H!, basic. <;actamente esta"
, cuando la puse apareci su nombre"
PRI!ROS D!TALL!S
2
Desempacando HASP HL 2.16 + Thread
,a sabemos al menos a qu( en*rentarnos.
<n la ma'ora de los tutes que he )isto sobre mochilas, el cdigo no est+ comprimido ' se
buscan una serie de patrones tpicos. <l problema aqu es que est+ comprimido, ' aunque *ui
poniendo B5 ' HB mientras se descomprima, no llegu( a encontrar esos patrones, as que,
le'endo tutes encontr( uno que es el que me abri los o%os ' es sencillamente buensimo"
<st+ en concursos 2004-2006 --> concurso 5 --> ni!e" 4
Ha sido realizado por =uan =os(.
Si le(is ese tute, se emula el Hasp para poder desempacarlo.
,o le pregunt( a 6icardo cmo podra intentar hacer lo mismo en mi programa Magick.exe,
sin la mochila ' me respondi lo siguiente"
eso se puede hacer en HASPs que no son con la funcin de desencriptar o si tenes algn
emulador que lo hace correr, porque si usa una funcin que encripta y desencripta con
valores ledos de la mochila vas frito, tenes que hacer ruteforce y es terrile!
&e *ui tambi(n a la p+gina de este H4S5 H! basic a buscar m+s in*ormacin"
http">>000.aladdin.es>hasp>basic.asp
<*ecti)amente como comentaba 6icardo le lo siguiente"
"l sistema de motor de cifrado asado en Hard#are HASP H$ se utili%a para el cifrado y
descifrado de datos de proteccin de su soft#are& 'urante la e(ecucin, el Soft#are protegido
enva secuencias cifradas a HASP H$ que las descifra produciendo una respuesta que no se
puede emular& Si la respuesta de HASP H$ es correcta la aplicacin sigue funcionando& Si
HASP H$ no est) conectada o la respuesta es incorrecta, la aplicacin no se e(ecuta&!
/iendo todo esto, mi ob%eti)o es desempacar esta proteccin ' hacer que *uncione
correctamente el programa sin la mochila. -on la mochila puesta, lo tratar( como un pac2er
m+s.
5ersonalmente, estas protecciones H4S5 H! son curiosas, 'a que para crac2ear un
programa sin mochila u**, u**, u**...#de momento, *uera de mi alcance$.
-omo todo, tiene sus )enta%as e incon)enientes.
$a venta(a que le )eo es que para crac2earlo necesitas la mochila original ' tener a mano
alguien que sepa #Un -rac2s!atino por e%.$.
$a desventa(a que me pasa por la cabeza es cmo har+n para hacer una )ersin demo. ,o
por e%emplo, de este programa ' de otros no las he )isto.
3
Desempacando HASP HL 2.16 + Thread
3bser)ando el magni*ico tute de =uan =os(, )i cmo el cdigo del programa que iba a
desempacar ' el mo, eran mu' parecidos. 5or este moti)o segu sus indicaciones al pie de la
letra...
4ntes de todo pongo la mochila, en el ordenador.
!o primero e;aminar el <5"
?os encontramos en la seccin .protect.
<l m(todo del 5USH4. no *unciona, as que despu(s probar unas cuantas )eces, podemos
caer en el 3<5 del programa de la *orma m+s sencilla posible para ?e0@?e0bies.
Si se e%ecuta el programa se detiene en una e;cepcin 1?A B que no permite continuar"
5ara solucionar esto pulso 4ltC3, )o' a la pestaa <;ceptions ' tildo la opcin #$% breaks.
.espu(s cae en otras dos e;cepciones, as que para solucionarlas lo de%o tal que as"
5ara localizar el 3<5, reinicio todo ' ahora s pulso 4ltC& ' pongo un B5 en la seccin code
de este modo"
"USCANDO !L O!P
4
Desempacando HASP HL 2.16 + Thread
5ulso DE ' caemos directamente en el 3<5. FGu( sencilloH
5ulso -rtC4 '"
4noto en mi libreta"
&E' I 004EA0E2
!o siguiente es dumpear con el plugin del 3ll'.B7, as que me )o' a plugins selecciono el
3ll'.ump ' destildo 6ebuild 1mport.
5ulso en .ump ' lo guardo como du(pe.exe.
DUP!ANDO
5
Desempacando HASP HL 2.16 + Thread
!o primero es ir hasta all, as que )iendo la primera call a partir del 3<5, aparece esto"
Aenemos un salto a otra seccin. <l salto es a :8JK8L.
<n la )entana de dumpeado me diri%o hasta all ' )eo que la seccin comienza en :8J888.
!os L primeros b'tes que aparecen son" )0 6* DA ++. !os selecciono ' pulso -trC6 '
obser)o esto"
Una entrada )+lida.
,a s( por lo tanto dnde est+ el comienzo de la 14A que apunto en mi libreta"
#nicio de "a #A% I 00502000
, el *inal"
Se obser)a que el *inal lo podemos tener en 88:8J.J8, que apunto tambi(n en mi libreta"
)ina" de "a #A% I 00502D20
%a(a,o de "a #A% I 88:8J.J8 M 88:8J888 I D20
Bueno 'a tengo todos los datos. /o' a )er cu+ntas entradas no )+lidas ha'. 5orque en la
imagen anterior se )en 'a unas cuantas.
4bro el programa 1mport6<-onstructor, pongo el 3<5 que obtu)e ' los datos"
!a image base es L88888#para el despistado$. 5ulso en 7et 1mports ' )eo lo siguiente"
"USCANDO # !$AINANDO LA IAT
6
Desempacando HASP HL 2.16 + Thread
BuahH E: entradas no )+lidas. -omo para modi*icar una a una a mano.
&e toc )ol)er a releer el tute de =uan =os( para que me diera alguna pista de cmo hizo (l
para arreglar la 14A.
Araceando un poco encontr que mediante Ge-'rocAddress obtiene los )alores de la 451 de
la 14A. .espu(s de obtener estos )alores )+lidos realiza un salto m+gico que pone o no estos
)alores correctos en la 14A.
Bueno sabiendo todo esto, me puse manos a la obra. Aengo que encontrar ese salto ' todo
solucionado.# o eso espero$
6einici( todo, puse un B5 en Ge-'rocAddress.
<n la )entana de dumpeado me puse en la direccin de la 14A"
<mpec( a pulsar DE ' a obser)ar detenidamente...
Aras pulsar unas cuantas )eces obser)(, cmo cada )ez que pasaba un B5 de
Ge-'rocAddress apareca un )alor correcto o no correcto ' se pona en la 14A.
7
Desempacando HASP HL 2.16 + Thread
EJEMPLO ENTRADA VLIDA
5or e%emplo, esto' parado en un B5 Ge-'rocAddress. Una parte de la imagen de la 14A es la
siguiente"
3bser)ar los b'tes que he puesto en ro%o.
/o' a pulsar DE a )er qu( hace"
Ha puesto una entrada )+lida.
EJEMPLO ENTRADA NO VLIDA
5arado como antes en un B5 en Ge-'rocAddress, obser)o lo siguiente"
/o' a )er qu( hace si pulso DE"
=e %e, una entrada no )+lida.
5or lo tanto he comprobado que en 00502A/0 se crear+ una entrada )+lida ' que en
00502AA0 se crear+ una entrada no )+lida, ambas tras haber tomado el )alor correcto con
Ge-'rocAddress.
5or lo tanto lo que )o' a hacer es desde un B5 en Ge-'rocAddress antes de crear la entrada
buena, tracear #6un Arace$ con el 3ll'.B7 ' guardarlo en un archi)o .t;t. .espu(s har( lo
mismo con la entrada no )+lida ' comparando ambas, espero encontrar el salto m+gico si ha'
o saber cu+ndo cambia el )alor bueno por el malo.
8
Desempacando HASP HL 2.16 + Thread
CREANDO LOS ARCHIVOS DE RUN TRACE
&e detengo en el primer B5"
5ulso el botn de los tres puntos de 6un Arace"
5ulso con el botn derecho del ratn ' eli%o @@N !og to *ile
!a guardo como buena.t;t.
5ulso -ontrolCDKK #Arace 1nto$ ' se detendr+ en el siguiente B5 Ge-'rocAddress
lgicamente.
<n la )entana de 6un Arace pulsando 'a tiene que haber aparecido todo el traceo"
5ulsamos botn derecho del ratn ' cerramos el archi)o" -lose log *ile.
, 'a lo tenemos guardado como bueno.t;t.
5ara la entrada no )+lida hago e;actamente igual ' el archi)o generado lo llamo" malo.t;t.
4hora slo queda comparar ambos archi)os...
,o )o' a utilizar un programa que )iene con el Ultra<dit. Se llama Ultra-ompare !ite.
3bser)o que ha' algunos saltos que en el bueno.t;t se cumplen ' en el malo.t;t no, pero se
encuentran dentro de *unciones de archi)os de sistema, as que me ol)ido de ellos ' sigo
buscando di*erencias. .espu(s obser)o que el cdigo )uel)e a e%ecutarse de nue)o dentro de
la seccin .protect ' poco despu(s aparece esto"
9
Desempacando HASP HL 2.16 + Thread
4h tenemos nuestro salto m+gico. <n el bueno.t;t s se produce el salto =< 00/2060/,
mientras que en el malo.t;t no. !o apunto tambi(n en la libreta"
1a"-o (2gico I 00/2A6E2
Si quiero tener toda la 14A bien arreglad#ita$ tendr( que hacer que ese salto se cumpla
siempre.
10
Desempacando HASP HL 2.16 + Thread
Aengo que parar en el 3<5 #para luego utilizar el 1mport6<$ ' que el salto m+gico se
produzca siempre.
6einicio todo el 3ll'.B7.
!o m+s importante aqu ' que debo tener en cuenta es que tengo que modi*icar el salto
m+gico cuando est( descomprimido el cdigo ' adem+s cuando no se ha'a rellenado los
datos de la 14A. !gico.
5ara encontrar este punto e;acto, encontr( una *orma sencilla ' curiosa"
5use un B5 en Ge-'rocAddress3 me puse en la )entana de dumpeado en la direccin de la
14A, obser)ando lo siguiente"
.escubr una cosa curiosa ' es que tras pulsar unas cuantas )eces DE, en una de estas
pulsaciones es modi*icada toda la 14A de golpe.
<s decir, tras pulsar unas treinta )eces DE, la ltima )ez que puls(, la 14A se modi*ic ' qued
de esta *orma"
4qu se obser)a que todos los datos son *alsos, adem+s por lo que he comentado antes los
datos se )an rellenando uno a uno tras un Ge-'rocAddress ' este cambio se ha producido
de inmediato, as que toda)a est+ la 14A intacta.
/o' a )er si se ha descomprimido 'a el cdigo ' puedo acceder al salto m+gico"
5ulso el botn ' pongo la direccin del salto m+gico"
5ulso 3O '...
R!PARANDO LA IAT
11
Desempacando HASP HL 2.16 + Thread
F5er*ectoH 4h tengo 'a el salto m+gico.
Slo tengo que cambiarlo por 4M'"
Guito el B5 de Ge-'rocAddress.
, *inalmente tiene que parar en el 3<5, as que )o' como e;pliqu( antes a 4ltC& ' pongo el
B5"
5ulso DE ' se detiene en el 3<5.
/o' a e;aminar la 14A a )er qu( tal ha quedado"
FGu( mara)illa )er esoH P)erdadQ
4bro el 1mport6<-onstructor, selecciono el programa de la lista. 5ongo los datos que 'a
haba puesto antes, pulso en 7et 1mports ' esta )ez s"
12
Desempacando HASP HL 2.16 + Thread
Aodas las entradas son )+lidas.
5ulso en Di; .ump, selecciono el dumpe.e;e que haba creado anteriormente con el plugin
3ll'.ump ' se crea satis*actoriamente dumpeR.e;e.
5areca que todo estaba acabado, as que renombr( dumpeR.e;e por el original
Magick.exe, lo puse en la carpeta &agic2 donde se instal el programa ' lo e%ecut(...
/a'a )a'a...
Bueno tendr( que actuar a partir de ahora como si de otro programa di*erente se tratara, 'a
que ahora 'a por lo menos no necesito la mochila para nada...
<l tema del desempacado 'a est+ solucionado.
13
Desempacando HASP HL 2.16 + Thread
!e ech( un )istazo con el 6.7 5ac2er .etector 8.9: ' me di%o lo siguiente"
<sto no llama la atencin pero puls( #en el mismo programa$ en analizador criptogr+*ico ' me
apareci lo siguiente"
Gu( mala pinta tiene todo esto. 4 )er si ahora )a a ser m+s complicada la seguridad del
mismo programa que la de la mochila...
&e da la primera ligera sospecha de que el programa ha reconocido que no es el mismo que
el original.. "@$
ANALI%ANDO LA S!&UNDA '(CTIA
14
Desempacando HASP HL 2.16 + Thread
Una de las )enta%as que tengo en este momento es que tengo toda)a la mochila ' puedo
e%ecutar el programa original con la mochila ' despu(s el que he reparado ' comparar en qu(
momento se separan.
4bro el 3ll'.B7 ' abro el archi)o reparado. -ompruebo que en las String 6e*erencias no ha'
ninguna cadena igual a la que sala en el mensa%e de error, adem+s es un programa que se
puede modi*icar con un editor de recursos ' si lo abro con el Resource Hacker )eo que
tampoco ha' ninguna )entana igual a la del error.
<sto me hace suponer que esa )entana es un messagebo;.
5or lo tanto pongo un B5 Message*oxA.
, e*ecti)amente no me equi)oqu("
-omo se puede obser)ar, el mensa%e ha sido llamado desde 052A6)0, as que )o' a ir all"
F!o que acabo de descubrirH. !a direccin donde llama a este Message*oxA, corresponde a
una librera #.sistec.dll$ que se encuentra en la segunda carpeta #llamada .sistec$ que el
programa instal.
Sabiendo esto ha' )arias *ormas de seguir. ?o s( si he cogido la m+s lenta, pero es la que
tena en la cabeza" *oy a ir yendo para atr)s en el programa que ha generado el msgo+ y
voy a compararlo con el original con la mochila, hasta descurir el momento en que se
separan&
6einicio el 3ll'.B7, pulso 4ltC3 ' en la pestaa <)ents pongo la siguiente tilde para que
pare al cargar la .sistec.dll"
5ulso DE seis )eces que es cuando se carga .sistec.dll
Guito la anterior tilde.
/o' a la direccin de la llamada del &essageBo;4 #8KJ49BD8$ ' pongo un B5 en su
comienzo #8KJ49B<8$ para )er desde dnde ha sido llamada. 5ulso DE ' obser)o"
6eturn to 052A5E/A
"USCANDO DI)!R!NCIAS
15
Desempacando HASP HL 2.16 + Thread
4hora )o' al programa original, me pongo en el 3<5, cargo .sistec.dll ' pongo un B5 en
052A5E/A ' )eo que no para.
<sto signi*ica que el salto o lo que sea que busco est+ antes.
4qu no )o' a seguir e;plicando todo porque hice e;actamente lo mismo. 5onerme en el
programa arreglado al principio de la subrutina, poner un B5, obser)ar de dnde )iene el salto
' comprobarlo con el programa original...
Segu haciendo esto comentado ' unas tres subrutinas despu(s#antes$ encontr( el siguiente
lmite"
?o se e%ecuta en el original pero s en el reparado. <n este momento <4S )ale KKD9BLJ.
Si pongo un B5 donde est+ la imagen ' miro en la pila obser)o que el salto se produce desde
el 2ernelBJ.dll"
6einici( el 3ll'.B7 ' e;amin( ese cdigo dentro del 2ernelBJ.dll"
<n la call en la que est+ la imagen es donde se produce el salto.
Haba quedado para cenar, as que hice r+pidamente un script para saber cu+ndo <4S )ale
e;actamente KKD9BLJ para que pare.
4l da siguiente obser)( que salta a e%ecutar el cdigo en 8KKD9BLJ directamente 'a que el
script no par.
/ol) a analizar con detenimiento la imagen anterior ' ahora s, despu(s de obser)ar ese
ntdll.-sr?e0Ahread ' ese 2ernelBJ.<;itAhread, estaba sospechando que se haba creado un
nue)o hilo ' que (ste comenzara en 055)642.
<;actamente. 5use un B5 en 8KKD9BLJ ' )i que se haba creado un nue)o hilo. , este hilo no
se e%ecutaba en el original. 4dem+s el salto de la call es a ese nue)o hilo.
4s que por aqu anda la cosa...
16
Desempacando HASP HL 2.16 + Thread
6einicio 3ll'.B7 ' pongo un B5 en -reateAhread.
5ulso DE"
/eo que procede de 8KKD9ELD"
, esta ST que es por *in una zona en la que el programa original s para.
.espu(s de e;aminar detenidamente el cdigo en el que me encontraba, poniendo B5Us '
e;aminando la misma zona con el programa original ' con su mochila encontr( que esa parte
de cdigo hace lo siguiente"
<l programa original salta en los tres saltos ' no e%ecuta ningn -reateAhread.
<n cambio el reparado salta en los dos primeros, pero no salta en el tercer salto ' e%ecuta ese
segundo hilo en 055)6423 ' sale el &essageBo;4.
Si modi*ico el =< 'a no ha' ningn problema ' asunto terminado. 5ero 'o creo que la buena
idea es saber por qu( no salta ese =<.
=usto antes de ese salto ha' una -all. Si sigo esa call compruebo que lo que hace es abrir un
archi)o que se encuentra en el mismo directorio que el programa ' que se llama igual que el
programa pero con e;tensin .lic.
&e )o' a )er qu( contiene ese archi)o.
D! DND! PROC!D! !L HILO
17
Desempacando HASP HL 2.16 + Thread
Bueno, pues aqu est+ toda la historia.
<sto me hace suponer que el programa utiliza algn algoritmo para obtener toda esa cadena.
,o en esto 'a no me meto porque es otro tema, adem+s el 6.7 5ac2er .etector 'a nos
ad)irti de esto.
Seguro que a s-67ei3 le hubiera gustado resol)er esto, 'a que lo conoce mu' bien.
Gueda lo m+s importante. Saber si e*ecti)amente esa cadena es consecuencia de alguna o
)arias encriptaciones del programa que se e%ecuta.
Bien lo siguiente que hice *ue reiniciar el 3ll'.B7 ' puse un B5 en 0rea-e)i"eA.. '
e*ecti)amente un poco antes abre el programa que se est+ e%ecutando.
<ntonces hice una cosa. 5arado en 0rea-e)i"eA, se obser)a que )a a abrir el programa
reparado, pues le )o' a decir que en )ez de abrir ese programa abra el original que tambi(n
tengo en esa carpeta que renombr( como 8origina".exe9. <sto se hace sencillamente
dumpeando esa direccin donde pone la ruta ' modi*icando el 8Magick.exe9 por
8origina".exe9. Aiene este ltimo unos b'tes m+s..
<*ecti)amente ' como supona, el programa arranca per*ectamente ' sin mochila.
5ara e%ecutar el programa ha' que sustituir el archi)o original por el reparado #desempacado$
' luego ha' que cambiar tambi(n la librera Dsis-ec.d"" con el salto 4E sustituido por un 4M'.
, arreglado.
18
Desempacando HASP HL 2.16 + Thread
<spero que se entienda, es sencillete pero un poco largo.
5ienso que puede ser de utilidad, incluso para m, porque luego pasa el tiempo ' se ol)ida
uno de todo...
Un saludo como siempre para todos los que est+is le'endo este tute ' en especial para todos
los
, cmo no para 6icardo.
Un saludo de 2arman'.
)INAL
19

Vous aimerez peut-être aussi