3D Audio v1.2a Registration removal By Black Fenix

Bueno hace tiempo que no nos reuniamos de nuevo por lo que he decidido escribir el que será mi septimo tutorial sobre cracking. En esta entrega trataremos de engañar al programa objetivo para que crea que este registrado. El programa en si es una herramienta con la que podemos crear sonidos 3D en base a unos parametros especificados por el usuario.

necesita.gif (15203 bytes)

marcador.gif (1024 bytes) W32Dasm
marcador.gif (1024 bytes) Un editor hexadecimal

comenza.gif (16493 bytes)

En esta entrega no vamos a usar el SoftIce ya que vamos a hacer un crack 'rapido' sin probarlo en "tiempo ejecución". Será un crack rápido pero totalmente válido para que el programa no caduque ni nos moleste con sus nags, este tipo de cracking se denomina dead-list cracking ya que no se usa ningún tipo de debugger para trazar el programa.

marcador.gif (1024 bytes) Ejecutar el programa 3daudio.exe, si es la primera vez que lo ejecutamos nos aparecerá una ventana donde podemos registrar el programa apretando un botón que pone "Register". Si ya lo habiamos ejecutado antes podemos acceder a este cuadro mediate los menus Help/About.

marcador.gif (1024 bytes) Introduce tu nombre en Username pej. Black Fenix y cualquier numero como password pej: 12121212 Haz click en Register Now!

marcador.gif (1024 bytes) Si no has acertado el password (cosa segura) te saldrá una MessageBox que dice

Sorry, faulty input! Start registration bla bla...

Si volvemos a pulsar de nuevo en Register Now el mensaje será:

Don't try to find a valid password.

Y la aplicación finalizará.

Recuerda estos mensaje, ahora vamos a desensamblar el ejecutable con el W32Dasm.

marcador.gif (1024 bytes) Abrir el W32Dasm y desensamblar el archivo 3daudio.exe, pulsar sobre el icone "strn ref". Buscar el mensaje que obtuvimos "Sorry, faulty input! Start registration bla bla", doble click sobre este y el W32Dasm nos mostrará el único sitio que hace referencoa a dicha cadena, no hay más referencias, puedes comprobarlo si vuelves a hacer doble click de nuevo.En la ventana de código veremos algo así.

* Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0043959D(C)
:004399EE8B4B21mov ecx, dword ptr [ebx+21]
:004399F183F902cmp ecx, 00000002
:004399F47D2Cjge 00439A22
:004399F68B33mov esi, dword ptr [ebx]
* Possible Reference to Dialog: DialogID_0014
:004399F86A14push 00000014
* Possible StringData Ref from Data Obj "3D Audio"
:004399FA681A385000push 0050381A // Nombre de la ventana
* Possible StringData Ref from Data Obj "Sorry, faulty input! Start registration program now?"
:004399FF68E5375000push 005037E5 // Pasa cadena como argumento
:00439A048B460Cmov eax, dword ptr [esi+0C]
:00439A0750push eax
:00439A088B5668mov edx, dword ptr [esi+68]
:00439A0B52push edx
:00439A0CE831AA0700call 004B4442 // Muestra el mensaje

Examinando el código podemos darnos cuenta de que esto es lo que buscabamos, el lugar concreto donde se muestra el cuadro que nos informa de nuestro "error" al introducir el número. Ahora sólo queda buscar un salto que este por detras de la llamada al cuadro de diálogo que nos aleje o envie a esta parte del código. El primer salto está en la linea 4388F4 pero ojo, este salto nos aleja a una linea de código donde se puede ver lo siguiente:

:00439A228B03mov eax, dword ptr [ebx]
* Possible Reference to Dialog: DialogID_0010
:00439A246A10push 00000010
* Possible StringData Ref from Data Obj "3D Audio"
:00439A2668D2385000push 005038D2
* Possible StringData Ref from Data Obj "Don't try to find a valid password."
:00439A2B6823385000push 00503823
:00439A308B500Cmov edx, dword ptr [eax+0C]
:00439A3352push edx
:00439A348B4868mov ecx, dword ptr [eax+68]
:00439A3751push ecx
:00439A38E805AA0700call 004B4442

Parece como si el programa supiera que estamos intentando averiguar el código. Pues si en verdad el mensaje "Don't try to find a valid password." nos lo mostrará cada vez que intentemos introducir un código más de 2 veces (recuerdas el paso 3 ?). (Puedes volver a comprobarlo tu mismo si ejecutas el programa). Si examinamos de nuevo las lineas del principio podemos deducirlo:

* Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0043959D(C)
:004399EE8B4B21mov ecx, dword ptr [ebx+21] // carga en ECX los intentos
:004399F183F902cmp ecx, 00000002 // se intento 2 veces o más ?
:004399F47D2Cjge 00439A22 // si, salta a mostrar el cuadro y sale del prog.

Nuestra intención no es que nos deje intentarlo todas las veces que queramos, por lo que dejaremos estas lineas en paz y continuaremos con examinando las posibles referencias. Como puedes observa la más cercana se encuentra un par lineas por encima del jge 00439a22 y como muy bien nos marca el W32Dasm se hace desde la linea de código 0043959D, pues nada vamos a esta linea con Goto/Goto Code Location 43595d <Intro>.

marcador.gif (1024 bytes) Esto es lo que veremos allí:

:0043958C838574FFFFFFFEadd dword ptr [ebp+FFFFFF74], FFFFFFFE
:00439593E8D8F0FFFFcall 00438670
:0043959883C408add esp, 00000008
:0043959B84C0test al, al // Estamos registrados ?
:0043959D0F844B040000je 004399EE // no, salta a mal chico
:004395A366C78568FFFFFF2000mov word ptr [ebp+FFFFFF68], 0020 // buen chico
:004395AC83C4FCadd esp, FFFFFFFC
:004395AF66C78568FFFFFF2C00mov word ptr [ebp+FFFFFF68], 002C

Muy interesante, una llamada, comprobación de al con 0 y salta al mensaje de error en caso afirmativo. Puedes "olerlo" ? seguro que si, la llamada anterior realiza las comprobaciones pertinentes y retorna 0 FALSE o 1 TRUE si sirve o no la información de registro introducida.

marcador.gif (1024 bytes) Ahora hay que pensar un poco... Vale si invertimos el salto el programa nos dejará registrarnos pero, Que pasará cuando volvamos a entrar al programa? Pues ya te lo digo yo antes de que lo pruebes pero no estaria de más que lo vieras tu con tus ojitos, simplemente volverá a comprobar los datos en cualquier otra parte del código y detectará que no está registrado, por lo que no servirá de nada invertir sólo este salto. Lo adecuado seria modificar la rutina que se llama en el call 00438670 para que siempre devuelva 1 asi si es llamada desde cualquier otra parte, delvolverá siempre 1. Si vamos a la linea 438670 y examinamos esta rutina veremos que es muy larga y parece que trabaja con las siguientes claves del registro:

Software\Climax Software Solutions\3DAudio\Registered
Software\Climax Software Solutions\3DAudio\Name
Software\Climax Software Solutions\3DAudio\Password

Nota: Es curioso que las llamadas al registro no se hacen por medio de las funciones estandard del API de Windows, ¿ Quizá para evitar a algun cracker principiante de poderlas monitorizar con el RegMonitor u otra "tool" similar ? :)

Si hechamos un vistazo al registro con el regedit veremos que estamos en lo cierto y encontraremos:

Name: Black Fenix -> Aquí verás tu nombre
Password: Not Valid! -> Interesante...

Bueno, creo que estamos ante un función que realiza los cambios en el registro segun la información y ademas parece que siempre se usa esta para comprobar los datos (por las varias llamadas que se hacen a esta desde otros puntos del programa). Por lo que en principio bastaria parchear esta función para que todo rulara perfectamente.

definitiv.gif (15140 bytes)

marcador.gif (1024 bytes) Lo más fácil es cambiar las dos primeras lineas de la funcion de la siguiente manera:

* Referenced by a CALL at Addresses: |:004252F6 , :00439593 , :0046B022 , :0046B335 , :0046B5BA |:0046BCB6 , :00475302
:0043867055push ebp CAMBIAR POR mov eax,1 // devolver siempre 1
:004386718BECmov ebp, esp CAMBIAR POR ret // retorna a la función que la llamó
:0043867381C434FDFFFFadd esp, FFFFFD34 // el código restante será ignorado

Nota: Con esto incluso hacemos el código más rápido :) ya que evitamos que lea/escriba al registro jejejeje.

Pues nada nada, apuntamos el offset donde se encuentra el primer byte de la instrucción en 438670h que es 37c70h (puedes verlo abajo, en la barra de estado del W32Dasm) y en el editor hexadecimal quemás nos guste reemplazaremos los bytes 55 8B EC 81 C4 34 por

B8 01 00 00 00 -> MOV EAX,1
C3 -> RET

marcador.gif (1024 bytes) Pos ya esta petao, por último si quieres que aparezca registrado a tu nombre solo tienes que registrarlo normalmente e introducir cualquier número

Y recuerda si te gusta el programa compralo. Lo aquí explicado es unicamente con fines educativos. Cualquier uso de esta información es responsabilidad tuya, hazla servir "bien"...

Esto lo he puesto porque el programador que ha hecho el 3DAudio a dejado un mensaje a los hackers (incorrecto, sería a los crackers) en el cual pide que digamos a los usuarios que usen nuestro crack que deberian comprar el programa (esto ya me da risa, no si tendré que hacer de hermanita de la caridad y todo).

Para encontrar el mensaje busca 'Hacker' dentro del EXE y luego lee y llora.


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 :)