Palm Spanish Tutor

Programa:

PiLocMonitor

 

PROTECCION: NAME / SERIAL
Descripcion: Aplicación para motorear
Dificultad: Principiante
DOWNLOAD: www.pilotwarez.com\files\pilocmonitor\PiLocMonitor.zip
Herramientas: SouthDebugger, PRCedit, PilotDis. POSE Palm emulator
Palm CRACKER:   FECHA:

W/31/12/2004

 

 INTRODUCCION

  como se aprovechan de la gente, pues decidimos probarlo.

Acercamiento 1
Comienza abriendo el  prc con prcEdit y mirando los recursos. ¿Ninguna de las llamadas para sysTrapStrCompare o sysTrapCaselessCompare, así es que la rutina del registro son un poco más elegantes que eso ... Qué más hemos llegado? Sano, que tenemos una referencia en la forma 1100, "Introduce RegCode". El aspecto general siendo promisorio, tanto nos dejó que decidimos hacer averiguaciones.
 

                             

 AL ATAQUE

0000040a  3f3c044c   L26 MOVE.W #1100!$44c,-(A7) ; Enter RegCode
Un pedazo de código que vemos abajo:
0000046a   DC.W       sysTrapStrLen
0000046a   0c400014  CMPI.W #20!$14,D0

¿Qué significa esa cadena tan larga (¿Nuestro serial introducido?)
Es comparado con 20. Una apariencia en la ventana de la pila del southDebugger cuando se traza esta parte del código ,nos dice que eso es ciertamente comprobando la longitud de nuestro serial introducido. Así es que nosotros ahora tenemos que considerar un serial con 20 caracteres, XXXXXXXXXXXXXXXXXXXX.
Entonces tenemos esto:
00000472   0c2a002d0004    CMPI.B #45!$2d,4(A2)
00000478   666e BNE L29
0000047a   0c2a002d000f     CMPI.B #45!$2d,15(A2)
00000480   6666                   BNE    L29

Las dos líneas del CMPI.B checan la posicion 4 y 15 al registrar A2 si es igual a 45 (o 0x2D hexadecimal). En A2 podemos buscar nuestro serial entrado, y haciendo una comprobación en una tabla ASCII eso da 45 ' - '. Esto da un serial del tipo XXXX-XXXXXXXXXX-XXXX
En L27 tenemos que tambien se hace una acción. Aquí parece que un código está siendo generado.
0000048a 10320800    MOVE.B   0(A2,D0.L),D0
Es una típica rutina para la generación del serial. Se dispone a llevar el byte en A2 en posición D0 y meterlo en el registro D0 para más adelante procesarlo. Se lo dejo a usted investigar cómo surte efecto esta rutina:)

Lo consigue abajo en:

000004b4 2600 MOVE.L D0,D3
000004b6 b684 CMP.L D4,D3
000004b8 584f ADDQ.W #4,A7
000004ba 662c BNE L29

Aquí tenemos una comparación del destino del serial ... En D3, separa el serial introducido y lo guarda, y en D4 tenemos la información que la aplicación considera correcto. Si D4== D3, todo está bien y la aplicación es registrada. En caso contrario, usted ha entrado un serial malo. De hecho, un rastreo usando el serial 1234-abcdefghij-5678 nos sale a la vista que sólo compara los últimos 4 dígitos

¿Cómo parchar esto entonces? ,Es sano que usted quizá podría cambiar el BNE L29 a BRA, pero nos deja hacer un parche más bonito. Si nosotros cambiamos al MOVE.L D0, a un MOVE.L D4, D3, la aplicación de hecho comparará el serial generado con sí mismo ... que Usted también puede tener alguna diversión y crear seriales como "love-pwgforever-pwgforever-9528":)

Acercamiento 2

1 yo veo probeco en este sitio. Puede ser regged, y tiene un período de prueba de 5 días con Nag.

2 lo pruebo en la POSE. Tomo nota del título de la forma del reg, "Introduzco a RegCode"

3 lo abro con Prcedit

4 localizo la forma y doy un paso en el código en L26

5 veo que el programa hace lo siguiente:

- Toma el índice del campo donde yo introduje el código

- Toma la dirección de los campos

- Toma las direcciones de los caracteres introducidos (en A2 y D0)

- Checa la longitud de caracteres, deben tener 20 caracteres (sysTrapStrLen, CMPI.W # 20, D0)

- Los chequeos en el registro de codigo debe de contener el caracter "-" en el regcode. Sospecho que son "-" porque tienen a ASCII codifique 45 (tantee con alt + 45). ¡ Deben estar en CMPI.B # 45!$¡2d, 4 (A2) 5 y CMPI.B # 45!$2d, 15 (A2) en la posición 16 (los caracteres son numerados desde 0). L29 es obviamente llamado si algo no es correcto.

6 pruebo mis hypotesis poniendo a un 4e48h (trap 8) después de esos chequeos y entonces introduzco en la computadora XXXX-XXXXXXXXXX-XXXX como un código. Entonces, L28 debe ser el Check realmente Crucial Routine.

7 doy una vista a L28. Hay sólo dos comparaciones, y el segundo atrae mi atención.

000004b0 4e4fa0ce sysTrapStrAToI 
000004b4 2600 MOVE.L D0,D3 
000004b6 b684 CMP.L D4,D3 
000004b8 584f ADDQ.W #4,A7 
000004ba 662c BNE L29 

¿ Pongo cuidado en esta string (cadena) (tal vez es el que yo introduje) El valor es convertido a un valor decimal, ese valor es almacenado en D0 y entonces es movido en D3. ¿Entonces es comparado con D4 (tal vez el serial correcto) Solamente, si los valores no son lo mismo, entonces la inscripción falla. Así fuerzo el proceso de registro y acaba con noping aquel BNE L29 (4e71h)

8- Bien el programa ahora se registra muy bien con XXXX-XXXXXXXXXX-XXXX. También le podría hacer registrar con cualquier NOPing de código con otras entradas, pero no prefiero hacerlo (Agil parche que probablemente trabajará más largo). Con la ayuda de Prcedit finalmente escribo el xml.

Aproximación 3

El visto bueno, he aquí mi forma. Es similar a las otras formas, pero ahora comencemos.Después de tener una apariencia de cortocircuito en la aplicación, advertí el registro en pantalla al entrar un serial. Así es que puse en marcha el prcEdit y cargué nuestro blanco. En el árbol de recursos de prcEdit que eso es fácil encontrar el recurso de la forma del registro (ID: 1100). Hay una referencia para el ID del OK-BUTTON, tal vez tengo la suerte de encontrar allí el chequeo de registro. Después de double click en la referencia podemos ver algunas cosas agradables de código. Algunas líneas de debajo hay una llamada para sysTrapFldGetTextPtr, probablemente nuestro serial que introducimos. Después podemos ver esto:

0000046a DC.W sysTrapStrLen 
0000046a 0c400014 CMPI.W #20!$14,D0 
Asi que nuestro serial tiene 20 caracteres, esto se pone facil, Algunas líneas más

00000472    0c2a002d0004   CMPI.B #45!$2d,4(A2)
00000478    666e                   BNE L29
0000047a    0c2a002d000f    CMPI.B #45!$2d,15(A2)
00000480    6666                  BNE L29

Adivinemos un tanto. En ASCII # 45 es un guión "-", tan tal vez el 5 y el carácter 16 tienen que ser uno "-". Las siguientes líneas no están haciendo algunas cosas de cálculo, ninguna cosa interesando. Lo siguiente compara orden está aquí:

000004ac     486a0010     PEA 16(A2)
000004b0     4e4fa0ce     TRAP #15
000004b4    DC.W          sysTrapStrAToI
000004b4    2600            MOVE.L D0,D3
000004b6    b684            CMP.L D4,D3
 

16 (A2) es un puntero para los últimos 4 caracteres del serial, estos caracteres son convertidos a un valor de entero. Esto se parece realmente a un checksum. Ahora coloquemos a un Breakpoint en dirección el CMP-COMMAND, inicie la aplicación e introduzca un serial como "1234-6789012345-7890". Después de entrar el breakpoint,veamos en D4: El valor es 9490. Reemplacemos a nuestros últimos 4 caracteres con este valor y hagamos un intento otra vez: "1234-6789012345-9490" Y , eso tiene que trabajar ... Eso es todo, ahora tiene que trabajar el serial.

 

 

Palm Spanish Tutor: Pagina dedicada a la dibulgacion de informacion en Castellano, sobre Ingenieria Inversa y Programacion en palm. Email "Colabora con tus Proyectos"