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.
W32Dasm
Un editor hexadecimal
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.
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.
Introduce tu nombre en Username pej. Black Fenix y cualquier numero como password pej: 12121212 Haz click en Register Now!
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.
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) | |||
:004399EE | 8B4B21 | mov ecx, dword ptr [ebx+21] | |
:004399F1 | 83F902 | cmp ecx, 00000002 | |
:004399F4 | 7D2C | jge 00439A22 | |
:004399F6 | 8B33 | mov esi, dword ptr [ebx] | |
* Possible Reference to Dialog: DialogID_0014 | |||
:004399F8 | 6A14 | push 00000014 | |
* Possible StringData Ref from Data Obj "3D Audio" | |||
:004399FA | 681A385000 | push 0050381A | // Nombre de la ventana |
* Possible StringData Ref from Data Obj "Sorry, faulty input! Start registration program now?" | |||
:004399FF | 68E5375000 | push 005037E5 | // Pasa cadena como argumento |
:00439A04 | 8B460C | mov eax, dword ptr [esi+0C] | |
:00439A07 | 50 | push eax | |
:00439A08 | 8B5668 | mov edx, dword ptr [esi+68] | |
:00439A0B | 52 | push edx | |
:00439A0C | E831AA0700 | call 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:
:00439A22 | 8B03 | mov eax, dword ptr [ebx] |
* Possible Reference to Dialog: DialogID_0010 | ||
:00439A24 | 6A10 | push 00000010 |
* Possible StringData Ref from Data Obj "3D Audio" | ||
:00439A26 | 68D2385000 | push 005038D2 |
* Possible StringData Ref from Data Obj "Don't try to find a valid password." | ||
:00439A2B | 6823385000 | push 00503823 |
:00439A30 | 8B500C | mov edx, dword ptr [eax+0C] |
:00439A33 | 52 | push edx |
:00439A34 | 8B4868 | mov ecx, dword ptr [eax+68] |
:00439A37 | 51 | push ecx |
:00439A38 | E805AA0700 | call 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) | |||
:004399EE | 8B4B21 | mov ecx, dword ptr [ebx+21] | // carga en ECX los intentos |
:004399F1 | 83F902 | cmp ecx, 00000002 | // se intento 2 veces o más ? |
:004399F4 | 7D2C | jge 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>.
Esto es lo que veremos allí:
:0043958C | 838574FFFFFFFE | add dword ptr [ebp+FFFFFF74], FFFFFFFE | |
:00439593 | E8D8F0FFFF | call 00438670 | |
:00439598 | 83C408 | add esp, 00000008 | |
:0043959B | 84C0 | test al, al | // Estamos registrados ? |
:0043959D | 0F844B040000 | je 004399EE | // no, salta a mal chico |
:004395A3 | 66C78568FFFFFF2000 | mov word ptr [ebp+FFFFFF68], 0020 | // buen chico |
:004395AC | 83C4FC | add esp, FFFFFFFC | |
:004395AF | 66C78568FFFFFF2C00 | mov 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.
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.
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 | |||
:00438670 | 55 | push ebp CAMBIAR POR mov eax,1 | // devolver siempre 1 |
:00438671 | 8BEC | mov ebp, esp CAMBIAR POR ret | // retorna a la función que la llamó |
:00438673 | 81C434FDFFFF | add 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
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! |