Karpoff Spanish Tutor

Programa:

Delphi 5 Trial


 

PROTECCION: Rainbow SentinelLM.
Objetivo: Hacer que no caduque así como hacer que funcionen los que ya lo están.
Descripcion: Uno de los mejores lenguajes de programación.
Dificultad: Newbie.
DOWNLOAD: http://www.borland.com/delphi/
Herramientas: Win32Dasm (dasm and debugger), Hiew (hex editor), SoftIce para el último toque y por último UltraSeach.
CRACKER:                       Metamorfer   FECHA:    25/11/2000


 
 

 introduccion

hola a todos, primero de todo mis disculpas a viper a quien, sin quererlo, ofendí al crackear sentinellm de una forma rápida y fácil. como habeis visto esta proteccion puede quitarla cualquier newbie, así que genios como raziel, viper, profe, [dek-oin],... que alguien me diga si ibais borrachos cuando probasteis de petarlo. bueno creo que viper iba fumado o algo así pk el fue el único que pudo petarlo, aunque sea con método, este programa ya me esta tocando los cojones, ya veras como al final te mando a tomar por el culo, pos hago rutina que quite todo lo que me molesta y la meto dentro del ejecutable injertada y ago que se ejecute primero esa, luego espero un ratito, luego... joe no os rompais mas la cabeza aquí esta mi solución. eso si, menuda maravilla de tutorial para aprender a insertar ejecutables dentro de otros.

ups se me olvidaba, todas las utilidades que necesitamos pa crackear este programilla estan en http://www.protoools.com

ten en cuenta que este tutorial está realizado únicamente con fines educativos, y que no puedo hacerme responsable del mal uso que se pueda hacer de la información aquí expuesta. si te gusta el programa cómpralo. 


 
 

 al atake

conociendo a la víctima

la víctima no es tanto delphi 5 trial como rainbow sentinellm. este tipo de protección no es muy común pero la usan todos los programas de borland así que les recomiendo que cambien de protección o se van a arruinar :) al parecer és algo simple: un programa que caduca a los 30 días. muestra una ventana muy bonita que tiene el boton trial habilitado, cuando caduca, el boton se desabilita y ya no puedes hacer nada (teóricamente). pos bien poneros cómodos pk entramos en fase de atake.
 
 
 

toma de contacto

joe pero esto no es lo mismo que el apartado anterior? como veis no me aclaro, pues vamos a decir lo mismo pero ahora para la toma de contacto ejecutad el prog y le dais al boton try. veis que fácil, ya habeis hacho la toma de contacto :) vamos a entrar en materia que es lo que todos estais esperando asi que manos a la obra.
 

destripando

vamos a ver, todos preparados, listos, ya!!!!!!!!!!!

para ponernos todos de acuerdo vamos a caducar todos nuestra version del delphi5 que es lo que tiene gracia. asi os cuento todo lo que va pasando pk la mia esta caducada y no se que coño posaría si la vuestra no lo estuviera.

lo primero de todo es ser ordenado para poder ser eficaz y rápido asi que os recomiendo que hagais como yo.
crearos una carpeta en c:\ con nombre cracking. allí tendrias que tener todas las utilidades que usais para crackear.

en esa misma carpeta cread 2 carptetas mas con nombres "fichero original" y "prueba". en la carpeta fichero original copiad la carpeta que contiene todos los archivos del programa delphi, y en la carpeta prueba copiad el fichero delphi32.exe ahora haced un control+c del fichero de la carpeta prueba y listo.
dejad minizada la carpeta donde instalasteis el delphi5 y tambien la carpeta cracking. porque todo este lio? porke luego abris el fichero delphi32 de la carpeta prueba con el hiew, desensamblais el delphi32.exe de la carpteta fichero original y cuando encontreis algo sospechoso podeis parchear con el hiew pegarlo en la carpeta delphi5 probarlo y todo eso si tener que cerrar todos los programas.
lo del control+c es para luego solo tener que maximizar la carpeta delphi5 y hacer control+v. asi lo hago yo y no creo que me haya ido mal :).

bueno pues repetimos: abrimos el windasm y desensamblamos el fichero delphi32.exe de nuestra copia de seguridad. mientras esta desensamblando sale un mensajito que dice "this pe file is not in standard windows format, all data references will be terminated" esto lo dice para que nos acojonemos pero nosotros somos valientes y seguimos.
cuando termina pues vemos lo de siempre.

ahora vamos a aprender a usar el debugger del win32dasm que al parecer nadie usa y no saben lo que se pierden. es la herramienta mas potente que tenemos para quitar protecciones del tipo "ventana o mensajito que dice que ha caducadoasi como nag screens" asi que primero de todo una breve explicación.

hay que tener en cuenta que no podemos debuggar un fichero desensamblado si este no tiene las dlls de la tabla de importaciones en la misma carpeta es por eso que copiamos la carpeta entera delphi5 en la carpeta fichero original, para poder debuggar tranquilamente. le damos a la opcion del menu debbug -->load process luego nos sale una ventanita para poder poner comandos de inicializacion pero nosotros no lo usaremos asi que le damos a load. hecho esto vemos lo siguiente:

os recomiendo que tengais la configuración de pantalla a 1024x768 pk sinó no os van a caber las 3 ventanas completas.

como veis el cursor de la ventana de desensamblado se situa en el entrypoint este cursor coresponde al valor que tiene el registro eip i nos marca la proxima instrucción a ejecutar.
en la ventana de comandos tenemos 4 botones que son (autostep into, autostep over, step into y step over) si somos un poco listos entenderemos rapidamente para que sirven.

step into ejecuta la instruccion que marca el cursor en la ventana de desensamblado, si la instruccion es una call ejecuta la primera instruccion de esa call.

step over ejecuta la instruccion que marca el cursor, si es una call ejecuta la call entera.

autostep over hace lo mismo que step over pero una vez tras otra con lo que el programa se ejecuta paso a paso ejecutando cada call de golpe.

lo mismo pasa con autostep into pero en este caso al llegar a una call entra en ella y ejecuta instrucción a instrucción. pues bien, dicho esto ya podeis intuir lo que haremos.

nuestro objetivo es tracar el programa paso a paso para encontrar cual es la llamada que hace las comprobaciones del time limit y muestra la nag.
asi que le damos al boton autostep over y nos vamos a tomar un café para hacer tiempo pk esto tardar un poquito.

sentinellm usa la táctica del mareo y de la recursión para hacer imposible el trazado paso a paso, lo que no saben es lo fácil que es hacerlo con el debugger del windasm. no os olvideis de desactivar las documented api details pk en esta ocasión no nos interesan. despues del café i la coca-cola, bueno viper tu despues de fumarte el peta y tu raziel despues del kalimoxo, esto se ha parado en, joe aun no se ha parado bueno esperamos un ratito mas que esto al final se para, lo prometo.
sobretodo no le deis al autostep into pk la ejecucion paso a paso sería eterna, usad autostep over. bueno pasados unos minutos esto se para en el offset 49314e además nos muestra un mensajito que dice que no no puede seguir porque no ha encontrado no se que. le damos a terminate process y listo.
ahora probaremos de eliminar esa call con el hiew y a ver que pasa. os contaré un poco lo potente que es hiew pk después de hablar con alguno de vosotros me he dado cuenta que aun no lo sabeis.

abrimos hiew (la version demo nos servirá) y seleccionamos el fichero delphi32.exe de la carpeta c:\cracking\prueba y vemos esto

como veis no se entiende un carajo. pulsamos f4 para cambiar el modo y seleccionamos decode. joe mira que bonito lo vemos todo en codigo ensamblador. que pasada. para ir al offset que nos interesa apretamos f5 i le metemos el offset de la call sospechosa apretamos return y estamos en esa call.
tambien podemos situarnos en esa call con la va. si apretamos f5 y metemos .49314e apareceremos en el mismo sitio. esta opcion es muy potente para aquellos que solo usais softice ya que en softice solo disponemos de la va. bueno ya sabeis como eliminar la call supongo pero lo digo para los mas novatos. pulsamos f3 y cambiamos los 2 bytes de la call por 9090 (el 90 significa no operation con lo que no hace nada). f9 para actualizar. vamos a probar estos cambios y a ver si hay suerte.
pegamos el fichero delphi32.exe de la carpeta prueba a la carpeta donde instalamos delphi5 y a ver que pasa. ejecutamos y no sale este error

le damos a aceptar y nos sale este otro error

le vovemos a dar a aceptar y nos sale este error

joder esto es una mierda parece que la hemos cagado. o quizas no. parece que seninellm utiliza call dword ptr [ecx] para seleccionar el tipo de proteccion que hay configurada en el ejecutable en cuention. lo que hemos hecho aki es cambiar el tipo de proteccion a que solo se ejecute durante un minuto. pues no vamos mal entoces.
según la call dword ptr [ecx] que se ejecuta salta un tipo de proteccion o otra. si haceis una busqueda con el windasm vereis que no es la unica. este tipo de llamadas no son muy comunes asi que son sospechosas.

lo que haremos ahora es cerrar windasm y pegar el fichero delphi32.exe de la carpeta c:\cracking\prueba a c:\cracking\fichero original\delphi5\bin y volvemos a repetir el proceso anterior. desensamblamos el fichero c:\cracking\fichero original\delphi5\bin\delphi32.exe le damos a debug -->load process --> load. presionamos sobre autostep over y esperamos a ver donde se para. se ha parado en el offset 493189

ademas nos sale este mensaje que dice no se el procesa ha intentado acceder o escribir donde no debería. pues nada le damos al si y se cierra el debugger. abrimos en el hiew probamos a ver que pasa si parcheamos esa call. f4 decode --> f5 .493189 y ya estamos donde toca. otra vez lo que queremos es anular esa call asi que sustituimos los bytes por 9090 y probamos a ver que pasa.

joder esto no tira ni pa tras. veamos nos salen los siguientes mensajitos.

como veis ya no nos sale el de esta aplicación se va a cerrar en 1 minuto. pero esto sigue sin funcinar. qué está pasando?

si nos fijamos en la cabecera del primer mensaje dice dcc50.dll. como veis el segundo error es consecuencia del primer ya que al no poder cargar la dll el ejecutable no puede ejecutarse porque le faltan las funciones importadas.

a ver a ver:

el siguiente paso es desensamblar el fichero dcc50.dll. nos vuelve a salir el mensaje de que el archivo pe no tiene el formato standard de windows. joe a ver si este ficherito tambien estará protegido? pues parece ser que si porqué las cabeceras de las secciones han sido cambiadas por 000000, 000001... asi que que podemos hacer, le damos al boton del windasm que nos lleva al entry point y miramos un poco el codigo. joder tiene la misma configuración que el fichero delphi32. ahora os voy a ahorrar un paso que yo hize que fue bajarme el sentinellm shell que es el programa que sirve para proteger archivos y estudiar el funcionamiento de la proteccion. os voy a resumir a las conclusiones que llegué. todos ustedes son capaces de llegar a las mismas conclusiones que yo si hacen lo mismo.

la protección sentinellm se basa en una dll injertada dentro del archivo a proteger, que se encarga de hacer todas las comprobaciones para determinar si el archivo debe ejecutarse o no. esta dll se injerta siempre en el mismo sitio. con lo que sabiendo esto nos podemos limitar a buscar la calls pertinentes. veamos ahora un poco de codigo interesante.
 

desensamblado del fichero delphi32.exe

desensamblado del fichero dcc50.dll

:00493147 8b5018 mov edx, dword ptr [eax+18]

:0049314a 52 push edx

:0049314b 8b03 mov eax, dword ptr [ebx]

:0049314d 50 push eax

:0049314e ff11 call dword ptr [ecx] *1

:00493150 83c420 add esp, 00000020

:00493153 8903 mov dword ptr [ebx], eax

...

...

..

:00493188 50 push eax

:00493189 ff11 call dword ptr [ecx] *2

:0049318b 8903 mov dword ptr [ebx], eax

:0049318d 83055c4c47000c add dword ptr [00474c5c], 0000000c

:0091b1478b5018 mov edx, dword ptr [eax+18]

:0091b14a 52 push edx

:0091b14b 8b03 mov eax, dword ptr [ebx]

:0091b14d 50 push eax

:0091b14e ff11 call dword ptr [ecx] *3

:0091b150 83c420 add esp, 00000020

:0091b153 8903 mov dword ptr [ebx], eax

...

...

..

:0091b188 50 push eax

:0091b189 ff11 call dword ptr [ecx] *4

:0091b18b 8903 mov dword ptr [ebx], eax

:0091b18d 83055ccc8f000c add dword ptr [008fcc5c], 0000000c

 

*1 esta fue la primera call que parcheamos. *2 esta fue la segunda call que parcheamos

joder pero si esto parece una fotocopia!!!!!!!!! incluso las va son casi las mismas. os imaginais que fue lo que hize? pues si chicos y chicas(no se si hay alguna :), parcheamos en *3 y *4 eliminado las call con 9090.

para encontrar la posición correcta a parchear lo que hago es desensamblar y buscar ff11 voy apretando f3 hasta que hay un ff11 en la va del tipo xxx14e ahi puedes estar seguro que es el sitio correcto. un poco más abajo encontraras xxx189 que es la segunda call a parchear.

vamos a hacer las pruebas pertinentes. abrimos el fichero dcc50.dll con el hiew y hacemos las modificaciones pertinentes. salvamos y copiamos la dll modificada donde instalamos delphi5. vamos a ver que pasa.

ejecutamos delphi y nos satan 300.000 errores. le vamos dando a todos que si y al final se abre delphi. joder que coño pasa? muy sencillo. hay unos cuantos ficheros protegidos, en concreto creo que son 7. para saber con certeza cuales son abrimos ultrasearch.

ultrasearch no servira para poder buscar cadenas de texto dentro de todos los ficheros del directorio c:\delphi5\bin asi que vamos hasta esa carpeta y le damos a add all. en el recuadro de search for escribimos "the application will be terminated" (sin las comillas) que si no recordais era un mensaje que nos dio delphi32.exe cuando lo parcheamos por primera vez, y le damos al boton search. joder la lista de los resultados es kilométrica. despues de mirarla toda llegamos a la conclusión de que los ficheros protegidos son:

dcc50.dll aaadclado50.bpl aaadcldss50.bpl aaadclib50.bpl

dclmid50.bpl adclnet50.bpl aaa dclwbm50.bplaa delphi32.exe

pues ya sabeis ahora que ya sabemos como funciona podemos parchearlos directamente con el hexworkshop o cualquier editor hexadecimal buscando los bytes ff11 en un offset del tipo xxx14e y xxx189. es decir le vamos dando a buscar siguiente haste que encontramos lo que buscamos.

hechos todos los cambios pegamos todos los archivos modificados a la carpeta c:\delphi5\bin y probamos. bueno amigos parece que esto esta llegando a su fin porque esto funcina perfectamente. joder!!!!!!! parece que no. al cabo de un minuto de estar usando delphi5 nos saltan 8 mensajitos diciendo que la aplicación se va a cerran en 1 minuto. esperamos un minutito a ver si hay suerte y es solo para acojonarnos. joder parece ser que no el programa se cierra.

cojemos el softice ponemos un break point en messageboxa abrimos el delphi y esperamos a que salgan los mensagitos de las narices. rompe una vez, le damos a f12 para ver desde donde se llama a messageboxa os pongo solo 2 pk como hemos visto antes será lo mismo en todos los ficheros.
 

desensamblado del fichero delphi32.exe

desensamblado del fichero dcc50.dll

* referenced by a call at address: |:00493976 | 

:00493710 83dbc46470000 cmp dword ptr [004746bc], 00000000

:00493717 53 push ebx

:00493718 56 push esi

:00493719 57 push edi

...

...

..

:00493845 68f0b74800 push 0048b7f0

:0049384a ffd7 call edi

:0049384c 50 push eax

* reference to: user32.messageboxa, ord:0195h | 

:0049384d 8b1de4144900 mov ebx, dword ptr [004914e4]

:00493853 ffd3 call ebx

...

..

* referenced by a call at address: |:0091b976 | 

:0091b710 83dbcc68f0000 cmp dword ptr [008fc6bc], 00000000

:0091b717 53 push ebx

:0091b718 56 push esi

:0091b719 57 push edi

...

...

..

:0091b845 68f0379100 push 009137f0

:0091b84a ffd7 call edi

:0091b84c 50 push eax

* reference to: user32.messageboxa, ord:0195h | 

:0091b84d 8b1de4949100 mov ebx, dword ptr [009194e4]

:0091b853 ffd3 call ebx

...

...

como veis vuelve a ser una fotocopia, si habeis seguido todo el tutorial sabeis ya porque es :) lo que vamos a hacer es eliminar esta call de una manera que nadie usa y que es mucho más limpia.
lo que haremos para eliminarla es substituir el 83 (marcado en verde) por c3 que coresponde a la instrucción ret. con lo que el programa entrara en la call y la siguiente instruccion que ejecutará será la ret (retornar).
abrid todos el hexworkshop y buscad los bytes 53565755 si se para mas de una vez el offset que nos interesa es xxx717 luego vamos un poco más para atrás y encontramos el 83 que estábamos buscando.
lo cambiamos por c3. repetimos esta operacion para todos los archivos protegidos. pegamos todos los archivos modificados en la carpeta c:\delphi5\bin y probamos. todo funciona a la perfección.
 

finalizando

espero que os haya servido de algo este tutorial; y sin más me despido por hoy, no sin antes darle las gracias al profesor x y a los demás crackers del egroup del cual formo parte; y en especial a xasx quien creyó en mi cuando no era nadie. tio tu me has creado. gracias por ser mi mentor.
 


 
 

karpoff spanish tutor: pagina dedicada a la divulgacion de informacion en castellano, sobre ingenieria inversa y programacion. email "colabora con tus proyectos"
www.000webhost.com