Solid Edge 5.0 Spanish version / Evaluation Period & CD-Check Removal by Black Fenix

Bueno este es el sexto 'elemento' y esta vez vamos a tratar un programa bastante bueno en lo referido a calidad ya que se trata de un programa tipo CAD para el modelado y ensamblaje de piezas mecanicas, por lo que en principio puede ser un reto superior a los anteriores. Conseguiremos tener una 'full version' del programa partiendo de una demo de 30 dias.

Nota:Este crack esta hecho para la versión demostración del programa Solid Edge 5.0 (Spanish).

necesita.gif (15203 bytes)

marcador.gif (1024 bytes)Soft-Ice 4.0 for Windows
marcador.gif (1024 bytes) W32Dasm v8.93
marcador.gif (1024 bytes) Un editor hexadecimal a tu elección
marcador.gif (1024 bytes) Opcional: File monitor. (Este no es necesario pero puede ser útil)

comenza.gif (16493 bytes)

Bueno, tras instalar el programa, se nos crean 3 diferentes accesos al programa en question, estos son :

Solid Edge Chapa -> smetal.exe
Solid Edge Conjunto -> assembl.exe
Solid Edge Pieza -> part.exe
Solid Edge Plano -> draft

Cada uno de estos accesos corresponde a un ejecutable distinto como he indicado, por lo que seguramente cada uno deberá ser modificado para que funcione 'correctamente'. Probaremos primero con Solid Edge chapa haciendo click sobre este, veremos que el programa nos muestra un mensaje en el que nos comunica el fin de nuestro periodo de evaluación (esto es cierto si la fecha de nuestro sistema supera el 1 de Enero de 1998 ya que el periodo de evaluación empieza el 1 de diciembre de 1998 y dura 30 dias, si no te dice que ha caducado modifica la fecha para que el programa te diga que a caducado).

El mensaje dice algo asi...

The evaluation period for this software has expired bla bla bla ....

Haz click en Aceptar y el programa finalizará. Bien, ya tenemos algo por donde comenzar un MessageBox, adivinas lo que haremos ahora ? No, pues mal eso es que no sigues mis tutoriales. Pero como soy buena persona te dire que es lo que haremos:

marcador.gif (1024 bytes) Activar el Soft-Ice (Ctrl+D) y poner un breakpoint en las siguientes funciones:

bpx Messagebox
bpx MessageboxA
bpx MessageBoxEx

Con esto intentaremos parar la ejecución del programa antes de que muestre el cuadro de dialogo que nos molesta tanto. Una vez establecidos los bpx ejecutamos de nuevo el programa Solid Edge Chapa. Boom !! el breakpoint MessageBoxEx a surtido efecto, estamos de nuevo en el Soft-Ice, dentro de la función MessageboxEx de la DLL user32 por lo que pulsaremos F12 y esto hará que se muestre el cuadro de dialogo, se activará el S-Ice de nuevo y volveremos a pulsar F12 para que se se continue ejecutando código hasta que el programa vuelva a la linea de código desde donde fue llamada la función que muestra el cuadro de dialogo. Soft-Ice aparecerá de nuevo y mostrará algo así:

 

* Reference To: USER32.MessageBoxExA, Ord:0196h
:00404BB18B3514A84000mov esi, dword ptr [0040A814] // ESI apunta a la función MessageboxA
:00404BB757push edi
:00404BB853push ebx
:00404BB955push ebp
:00404BBA50push eax
:00404BBB6A00push 00000000
:00404BBDFFD6call esi // Esta es la llamada a MessageBoxA
:00404BBF8B4C2410mov ecx, dword ptr [esp+10] // ESTAMOS AQUI!!!
:00404BC385C9test ecx, ecx
:00404BC57420je 00404BE7
:00404BC783F802cmp eax, 00000002
:00404BCA7413je 00404BDF
:00404BCCF6C310test bl, 10
:00404BCF750Ejne 00404BDF
:00404BD18B4C2458mov ecx, dword ptr [esp+58]
:00404BD557push edi
:00404BD653push ebx
:00404BD755push ebp
:00404BD851push ecx
:00404BD96A00push 00000000
:00404BDBFFD6call esi // esto es otra llamada a MessageboxA
:00404BDDEB08jmp 00404BE7 // que no es ejecutada

Bueno la linea 404BBD realiza la llamada a la función MessageBoxA, los push anteriores son los parametros de creación del MessageBox. Llegados a este punto nos queda pensar lo siguiente:

marcador.gif (1024 bytes) Usar el W32Dasm y desensamblar el código del programa y ver que hay antes de estas lineas para comprobar si hay algun salto que nos envie a estas lineas y modificarlo.

marcador.gif (1024 bytes) Continuar la ejecución de esta rutina con F12 con la intencion de ir a la linea donde se llama a a esta rutina para comprobar si el lugar donde estamos no es exactamente lo que buscamos ya que podria tratarse de una rutina que muestra los diferentes cuadros de dialogo según la fecha.

Lo lógico aquí es la opción B ya que como estamos dentro del Soft-Ice no nos cuesta nada hacer esta comprobacíon y así asegurarnos. Pues adelante, pulsamos F12 y se nos mostrará algo así:

 

:0040324651push ecx
:0040324752push edx
:0040324856push esi
:0040324950push eax
:0040324A53push ebx
:0040324BE830120000call 00404480 // Venimos de aquí...
:0040325083C41Cadd esp, 0000001C // ESTAMOS AQUI!!! Restaura la pila
:0040325383F802cmp eax, 00000002 // comprueba valor de retorno (mmmmmm...)
:0040325689442420mov dword ptr [esp+20], eax // guarda dicho valor
:0040325A0F85EE020000jne 0040354E // salta si el valor no es 2
:00403260B933000000mov ecx, 00000033
:004032658DBC240C040000lea edi, dword ptr [esp+0000040C]
:0040326CF3repz
:0040326DA5movsd

Examina este código antes de hacer nada. Que te parece? no es sospechoso el cmp eax,00000002 (linea 403253) Pues si bastante, normalmente las funciones retornan con un valor en EAX que es usado por el programa para comprobar ciertas condiciones :) . Y esto nos hace pensar que si despues de volver de esta función (404480) no volvemos con un 2 en EAX, el programa probablemente no continuará su ejecución. Otra cosa que lo hace más sospechoso aún es la linea 40325a en la que EAX es guardado, ¿ Para que guardar un valor de retorno de una función? Pues probablemente para hacer algún test más adelante. Bueno esto es teoria, ahora la practica, vamos a modificar EAX para que valga 2 ya que como puedes comprobar vale 3. Para hacer esto teclearemos

> r eax
> modificar el 3 por un 2
> pulsar ENTER y luego ESC

Sólo queda seguir adelante pulsando g y ENTER, comprobaras sorprendido que el programa funcionara hasta que nos diga que no hay el CD-ROM original dentro de la unidad, pero por lo menos ya sabemos como evitar que el programa caduque.

marcador.gif (1024 bytes) Vamos a modificar el ejecutable para que nos deje entrar aunque haya caducado antes de entrar con la rutina de detección del CD original.Pensemos la mejor manera, necesitamos eliminar el mensaje y que el programa continue su ejecución normal. Para ello necesitamos eliminar la llamada de la linea 40324B y hacer que EAX valga 2 siempre.
Parece dificil pero no lo es, en vez de llenar con NOP los bytes que ocupa la función, que son exactamente 6 bytes lo llenaremos con la instrucción MOV EAX,2 que ocupa exactamente 6 bytes. Con esto matamos dos pajaros de un tiro:
Eliminamos la llamada y conseguimos que EAX valga 2. La codificación para MOV EAX,2 es B802000000. Adicionalmente podemos rellenar con NOPs el salto posterior y asi nos aseguramos del todo, esto significa cambiar los bytes 0F85EE020000 por 909090909090. Para modificar el ejecutable lo desensamblaremos con el W32Dasm si no los has echo ya hazlo. Iremos a las correspondientes lineas (40324B y 40325A) y apuntaremos los offset que el W32Dasm nos dice en la barra de estado inferior, saldremos del W32Dasm y abriremos nuestro fichero con el editor hexadecimal que uses normalmente y una abierto iremos a los correspondientes offsets y cambiaremos los bytes que marca por los nuevos.Creo que seras capaz de hacerlo tu solo asi que no me enrollo más.

Nota: Para nuestra suerte y regocijo el resto de ejecutables usan el mismo esquema para la comprobación de la fecha, por lo que no tendremos ni que trazarlos con el S-Ice, simplemente busca las cadenas 0F85EE020000 (salto) y E830120000 (llamada) y modificalas como en el caso anterior. Una vez más la vagueza de los programadores de "elite" se pone de manifiesto :)

marcador.gif (1024 bytes) Ahora puedes ejecutar el programa y veras que funciona hasta que aparece el cuadro de dialogo que nos indica que no tenemos el CD original en la unidad (si tienes los bpx activos, comprobaras que antes del cuadro estos se activan en un MessageBoxA que pertenece al cuadro de dialogo en cuestion). Si no tienes activos los bpx activalos y vuelve a intentarlo... Ya?. Ok. estamos justo en el la función MessageboxA de la DLL User32, haremos lo mismo que antes ir a la linea que sigue a la que llama a esta función, por lo que pulsaremos F12. Y veremos algo así:

:04B51318E8A5020000Call 04B515C2
:04B5131D8D4DB0lea ecx, dword ptr [ebp-50]
:04B513208BF0mov esi, eax
* Reference To: JUTIL.??BGUserText@@QBEPBDXZ, Ord:0016h
:04B51322E89B020000Call 04B515C2
:04B513276A40push 00000040
:04B5132956push esi
:04B5132A50push eax
:04B5132B6A00push 00000000
* Reference To: USER32.MessageBoxA, Ord:0195h
:04B5132DFF15BC41B504Call dword ptr [04B541BC]
:04B513338D4DD0lea ecx, dword ptr [ebp-30] // ESTAMOS AQUI!!!
:04B51336C645FC03mov [ebp-04], 03
* Reference To: JUTIL.??1GUserText@@QAE@XZ, Ord:000Ah
:04B5133AE877020000Call 04B515B6
:04B5133F8D4DB0lea ecx, dword ptr [ebp-50]
:04B51342C645FC00mov [ebp-04], 00
* Reference To: JUTIL.??1GUserText@@QAE@XZ, Ord:000Ah
:04B51346E86B020000Call 04B515B6
:04B5134BB805400080mov eax, 80004005
:04B513508B4DF4mov ecx, dword ptr [ebp-0C]
:04B5135364890D00000000mov dword ptr fs:[00000000], ecx
:04B5135A5Fpop edi
:04B5135B5Epop esi
:04B5135C5Bpop ebx
:04B5135D8BE5mov esp, ebp
:04B5135F5Dpop ebp
:04B51360C3ret

Bueno bueno, un primer vistazo no nos revela nada pero ojo ! Donde estamos mira lo que dice el SoftIce en la linea donde muestra el nombre del programa/dll donde estamos... KeyChk!.text+2C0, es una DLL y con un nombre bastante sospechoso, puede ser una DLL de uso interno del programa que se usa para la comprobación del CD.

marcador.gif (1024 bytes) Llegados a este punto no merece la pena continuar dentro del Soft-Ice para intentar algo como lo que hicimos anteriormente, por lo que desactivaremos los breakpoints y apuntaremos la dirección de código donde estamos que debe ser 4B51333, saldremos del Soft-Ice y del programa para desensamblar la DLL keychk.dll que podemos buscar con el explorador de windows, la encontraras dentro del directorio donde se encuentran los ejecutables del programa ( X:\..\Solid Edge\Program ), haremos una copia de seguridad y la desensamblaremos para ver que hace.
Si hacemos click sobre el icono Exp Fnc (funciones que exporta la DLL) veremos que sólo hay una y se llama CheckKey (que te parece el nombrecillo, vaya programadores más lamers) no sacaremos mucho en claro si investigamos esta función por lo que vamos a ir la función donde nos dejo el Soft-Ice, vamos al menu Goto e introducimos la dirección que antes habiamos apuntado 4B51333, una vez alli (veremos exactamente el código que tienes encima de estas lineas) iremos marcha atras (tecla flecha arriba) buscando algun salto que nos envie o nos aleje de esta parte de código tras unas cuantas pulsaciones veremos algo así:

:04B512BD8D4DE0lea ecx, dword ptr [ebp-20]
:04B512C051push ecx
:04B512C1E8EA000000call 04B513B0 // Llama a una función
:04B512C683C404add esp, 00000004 // restaura pila
:04B512C985C0test eax, eax // comprueba valor de retorno (mmmm....)
:04B512CB0F8CC4000000jl 04B51395 // salta bastante lejos
:04B512D18B45E0mov eax, dword ptr [ebp-20] // guarda valor de retorno
:04B512D485C0test eax, eax // comprueba de nuevo
:04B512D60F85B4000000jne 04B51390 // salta un poco menos lejos
:04B512DC8D4DB0lea ecx, dword ptr [ebp-50]

Cabe suponer que ninguno de estos saltos es tomado ya que son a direcciones más lejanas que la 4B51333. Hay dos cosas sospechosas en estas lineas, primero la llamada y luego el test eax,eax seguido del jl 04b51395 (SF<>0F). Si vamos al código que pertenece a la llamada call 4B513B0 (Menu Goto, teclear dicha dirección y enter) y examinamos por encima las referencias a las posibles cadenas veremos cosas como:

* Reference To: KERNEL32.GetLogicalDrives, Ord:00FAh

-> La función GetLogicalDrives retorna un DWORD que representa las unidades de disco disponibles

* Reference To: KERNEL32.GetDriveTypeA, Ord:00DFh

-> GetDriveType determina el tipo de unidad de disco: si es removible, fija, un CD-ROM, disco RAM, o una unidad de red.

* Reference To: MSVCRT.fopen, Ord:0254h

-> Abre un archivo

* Possible StringData Ref from Data Obj ->"verLic.dll"

-> referencia a un nombre de una DLL que no existe en nuestro disco duro pero si en el CD-ROM original :)

* Possible StringData Ref from Data Obj ->"Products\Solidedg\verLic.dll"

-> referencia a un nombre y ubicación de una DLL que no existe en nuestro disco duro pero si en el CD-ROM original :)

* Possible StringData Ref from Data Obj ->"Products\SEDraft\verLic.dll"

-> referencia a un nombre y ubicación de una DLL que no existe en nuestro disco duro pero si en el CD-ROM original :)

* Reference To: MSVCRT.fclose, Ord:0249h

-> cierra el archivo

Bueno como habras podido deducir todo este código comprueba las unidades disponibles, busca una que sea de tipo
CD-ROM

:04B514B2FFD5call ebp // Llama a GetdriveTypeA
:04B514B483F805cmp eax, 00000005 // Es un lector de CD-ROM
:04B514B70F858B000000jne 04B51548 // NO, PUES MALAMENTE

y comprueba si existe el archivo "verlic.dll" en el CD intentandolo abrir

:04B514F550push eax
:04B514F6FFD6call esi // llama a fopen
:04B514F883C408add esp, 00000008
:04B514FB85C0test eax, eax // si retorno 0 = NULL
:04B514FD7530jne 04B5152F // malamente ya que no puede ser NULL el valor de retorno

luego lo vuelve a cerrar comprobando de nuevo si se pudo cerrar.

:04B5153BFF15A041B504Call dword ptr [04B541A0] // llama a fclose
:04B5154183C404add esp, 00000004
:04B5154485C0test eax, eax // comprueba si eax=0=NULL
:04B515467510jne 04B51558 // si no se pudo cerrar malamente, no existe

(no puedo asegurarte si hace alguna lectura pero diria que no ya que no hay ningun fread) ademas yo ya comprobé lo que es exactamente la dll verlic.dll y no es mas que un fichero de icono renombrado. Para ver que tipo de accesos se realizan a este archivo puedes usar el Filemonitor y veras lo que se hace con este archivo.Bueno hemos salido de dudas y ahora solo queda pensar como hacer para que el programa funcione en cualquier caso, haya o no CD original.

marcador.gif (1024 bytes) Podriamos modificar los saltos que hace al abrir y cerrar el archivo pero solo funcionaria en caso de que el CD original no estuviera, y queremos que funcione de ambas maneras.

marcador.gif (1024 bytes)Dejar en paz esta rutina y cambiar el salto que hay despues de la llamada a esta:

:04B512BD8D4DE0lea ecx, dword ptr [ebp-20]
:04B512C051push ecx
:04B512C1E8EA000000call 04B513B0 // Comprueba si existe el fichero verlic.dll en la unidad CD-ROM
:04B512C683C404add esp, 00000004 // restaura pila
:04B512C985C0test eax, eax // comprueba valor de retorno (mmmm....)
:04B512CB0F8CC4000000jl 04B51395 // salta bastante lejos (esto es lo que hay que cambiar)
:04B512D18B45E0mov eax, dword ptr [ebp-20] // guarda valor de retorno
:04B512D485C0test eax, eax // comprueba de nuevo
:04B512D60F85B4000000jne 04B51390 // salta un poco menos lejos
:04B512DC8D4DB0lea ecx, dword ptr [ebp-50]

Bingo!! esto es lo que hay que cambiar por un salto incondicional, pero ojo, es un salto de más de 127 bytes, y ahora no me acuerdo de cual seria su codificación (mmmm....). No importa, usaremos el Soft-Ice, allí modificaremos esta linea y miraremos que código de operación tiene jejejejeje. Antes apunta el offset que es 6CBh.

marcador.gif (1024 bytes) Para poder establecer un bpx en 4B512CB deberas hacer primero que el programa se pare dentro de la DLL keychk.dll con el bpx messageboxa, apreta F12 2 veces y ahora pon el bpx en 4B512CB, ahora el programa saldrá ya que no hemos cambiado nada, vuelve a ejecutarlo y ahora si se parará justo donde queremos.
Escribe lo siguiente

> a 4b512cb
> jmp 4b51395
> pulsa ENTER dos veces
> d 4b512cb

definitiv.gif (15140 bytes)

Ahora en la ventana donde se muestra el volcado veras la codificación de la instrucción que es E9C500000000 el proceso ahora es el mismo, salir de donde estas, abrir la dll con el editor hexadecimal, ir al offset de archivo 6CBh y modificar los seis bytes que encuentres allí por E9C500000000, salvar cambios y a correr. Si continuas la
ejecución del programa este funcionará correctamente :) .

Ahora funcionaran todos los ejecutables a la perfección ya que todos usan la DLL keychk.dll para comprobar el CD-ROM (el fichero que debe haber más que la unidad en si) esta es una gran ventaja ya que así nos evitamos tener que hacer cambios en todos los ejecutables.

Nota: Los driver OpenGL de la number Nine Rev IV no funcionan bien con este programa y dan fallos en la dll w95glsrv.dll (que pertenece a estos drivers) al salir del programa o al cerrar ventanas de vistas en 3D, esto es debido a que los drivers son una versión Beta (los mios por lo menos) y no funcionan bien, no es por culpa de que el crack este mal hecho, como yo pensaba cuando este me petaba sin saber porque.Me volví loco hasta que descubrí que era lo que sucedia realmente.
Con otras tarjetas funciona todo perfectamente. Por ej con la Intel 740. Para que luego digan que los crackers no servimos para nada, y como llamas a esto si no es buscar posibles bugs en el software?


You are inside Reversed Minds pages.

por Mr. Silver / WKT!
La información aquí vertida es exclusivamente para uso educacional, no puedo hacerme responsable del uso que se haga de esta, por lo que atiendo a la honradez de cada uno :), recuerda que debes comprar el software que utilices :)