Ayuda (mis primeros pasos con ollydb para intentar registrar un programa)

Iniciado por chuky666, 22 Septiembre 2010, 18:01 PM

0 Miembros y 1 Visitante están viendo este tema.

chuky666

Hola, saludos a todos y muchas gracias de antemano. Me estoy iniciando en este mundillo de la ingeniería inversa y después de leerme unos cuantos tutos y crackmes me decidí por intentar registrar este programa:

http://sp.financessoftware.com/downloads/PersonalFinancesPro.zip

Es un programa portable que no necesita instalación. No es el típico con nombre/número de serie. Sólo pide un número de serie. El problema es que no da mensaje de si es válido o no. Lo sabes al reiniciar el programa porque te vuelve a salir una ventana con el aviso de que no está registrado.

Hay otra cosa que lo diferencia de los típicos y es que si no está registrado no permite (en teoría) más de 200 transacciones. Digo en teoría porque a mí a veces me sale el límite a 270 a veces a 290 (es un poco confuso eso).

Bueno comienzo mirándolo con el PEid y veo que está compilado con Borland C++ 1999. Creo que no pinta mal la cosa.

Me voy al Olly y aqui empiezan los problemas:

1) Imposible localizar las cadenas de texto chico bueno chico malo, por lo menos en el módulo principal (dependen del idioma escogido y están almacenas en un fichero de texto en la carpeta LANG)

2) Lo intento a través de las funciones GetWindowTextA, MessageBoxA y GetDlgItemTextA pero tampoco hay suerte parece que utiliza APIs diferentes.

3) Intento tracear el programa e ir colocando BP a ver si consigo localizar la rutina "manualmente" pero se hace muy complejo (hay demasiados saltos y a la mínima me paso de la rutina de comprobación)

Alguien puede echarle un vistazo y ayudarme un poquito, o al menos orientarme sobre qué otras opciones tengo?

Saludos y gracias de nuevo


PD.:  4) He intentado otro camino: colocar un BP on WinProc para que pare al pulsar el botón del OK (202) pero tampoco ha habido suerte. Alguna idea?

MCKSys Argentina

Cuando los programas cargan las cadenas de archivos externos, normalmente usan identificadores para ubicarlas (a menos que lo hagan en forma binaria).

Puedes intentar ubicar esos ids con el fin de tratar de parar el proggie cuando carga cadenas "criticas" como unregistered, etc, etc y a partir de ahi, atacar la rutina de registracion.

Tambien puedes buscar el momento en que se inicializa la variable que lleva el conteo de las transacciones. Buscando, por ej.: MOV MEM32, 0C8 o PUSH 0C8 o algo por el estilo. Si el valor lo recupera en tiempo de ejecucion (no utilizando variables) puedes buscar algo asi como CMP R32, 0C8.

Puedes buscar el lugar donde guarda los seriales (registro, archivo, etc) y tratar de parar cuando lo comprueba (usando APIs: RegQueryValue, CreateFile, etc) asi puedes ver que variables cambian cuando el serial es bueno o malo.

En fin, hay miles de posibilidades, la cuestion es empezar a descartar...

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


chuky666

#2
Buenas de nuevo, he estado investigando un poco más el tema y esto es lo que he encontrado:

1) He encontrado una serie de cadenas de texto un poco curiosas (puede que no sean nada):

ASCII "CFxEbcO3L97KueEyods0xOO4j9x9knUtIc5SQl7NvroJxs8PD9tOhaP48FtKrNDHGAkIxnlY3R1OGGtAT0mA36dcOx1WnJMKh58KIbw2liNWLAyGOBtKzEPYq7OuJVjnK7qs1HnFCyLeCjT97HW9N24hXMBaMjkMgW3wt5DPX75mJySLxUYapIugXsw7l5HraJ0aAhGFZh5KnLr1ZXH7jNW4aai2ecGdvecvd3Im2n1gM"...

UNICODE "WERTYUPASDFGHKZXCVBNM23456789weryupasdfghkzxcvbnm"
UNICODE "GIVEAWAYOFTHEDAYXXXXPFH7K"
UNICODE "hmXsC8mWHsCc6eggh9h5PFH7K"
ASCII "-PFH8K"
ASCII "-PFH9K"
ASCII "c9adbf8d-9980-450c-8f92-e8320eb609f4"

2) los mensajes del fichero de texto se cargan en memoria a partir de la dirección 16e0000 y cuando se va a mostrar uno (estoy no estoy seguro de que sea siempre asi) se copia a la dirección 17c1dfc (por lo menos eso ocurre con el mensaje "parece una licencia de Personal Finances Home")

3) Lo de buscar la variable de conteo lo veo un poco complicado MCKSys. Además el número de transacciones es variable, a veces es a 273, a veces a 297... es un poco raro)

4) Buscando las APIs CreateFileW y CreateFileA (gracias MCKSys), colocando BP, teniendo como referencia la clave de prueba que introduzco (56814) y traceando un poco he localizado dos rutinas que creo que comprueban mi número. Una desde 5daf6f a 5db459 y otra desde 581b1e a 581cc3. La primera la hace si ya hemos introducido un serial previamente y se ha generado el fichero key.dat (supongo que es la comprobación inicial que hace el programa). La segunda la hace justo después de introducir el serial y antes de mostrar el mensaje "parece una licencia de Personal Finances Home". En ámbas la llamada CALL 8562e4 carga en el registro EDX nuestro serial.

4) He analizado un poco las rutinas y creo que hacen la comprobación de la siguiente forma: (usan un bucle que se repite en función de la longitud del número introducido)

Mí serial: 56814
ronda 1- elimina la primera cifra para hacer unas operaciones (6814)
ronda 2 - elimina las 2 primeras cifras (814)
ronda 3 - elimina las 3 primeras cifras (14)
-------
ultima ronda

La rutina me parece un poco complicada de entender en detalle así que si alguien puede echarle un vistazo y orientarme un poco se lo agradecería.

Esta es la rutina:

CPU Disasm
Address   Hex dump          Command                                  Comments
Código (asm) [Seleccionar]
005DAF6F  |> /8BFE          /MOV EDI,ESI
005DAF71  |. |57            |PUSH EDI                                ; /Arg2
005DAF72  |. |8D45 CC       |LEA EAX,[LOCAL.13]                      ; |
005DAF75  |. |50            |PUSH EAX                                ; |Arg1 => OFFSET LOCAL.13
005DAF76  |. |E8 E9AF2700   |CALL 00855F64                           ; \PersonalFinances.00855F64
005DAF7B  |. |83C4 08       |ADD ESP,8
005DAF7E  |. |8D45 CC       |LEA EAX,[LOCAL.13]
005DAF81  |. |E8 5EB32700   |CALL 008562E4
005DAF86  |. |03FF          |ADD EDI,EDI
005DAF88  |. |8D8D E6FEFFFF |LEA ECX,[LOCAL.71+2]
005DAF8E  |. |037D CC       |ADD EDI,DWORD PTR SS:[LOCAL.13]
005DAF91  |. |83C7 FE       |ADD EDI,-2
005DAF94  |. |66:8B17       |MOV DX,WORD PTR DS:[EDI]
005DAF97  |. |66:8995 E6FEF |MOV WORD PTR SS:[LOCAL.71+2],DX
005DAF9E  |. |66:C785 44FFF |MOV WORD PTR SS:[LOCAL.47],0C
005DAFA7  |. |51            |PUSH ECX                                ; /Arg2
005DAFA8  |. |8D4D D0       |LEA ECX,[LOCAL.12]                      ; |
005DAFAB  |. |51            |PUSH ECX                                ; |Arg1 => OFFSET LOCAL.12
005DAFAC  |. |E8 2B0D0000   |CALL 005DBCDC                           ; \PersonalFinances.005DBCDC
005DAFB1  |. |83C4 08       |ADD ESP,8
005DAFB4  |. |8985 E0FEFFFF |MOV DWORD PTR SS:[LOCAL.72],EAX
005DAFBA  |. |8B85 E0FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.72]
005DAFC0  |. |8985 38FEFFFF |MOV DWORD PTR SS:[LOCAL.114],EAX
005DAFC6  |. |8B55 F8       |MOV EDX,DWORD PTR SS:[LOCAL.2]
005DAFC9  |. |8995 DCFEFFFF |MOV DWORD PTR SS:[LOCAL.73],EDX
005DAFCF  |. |8B8D DCFEFFFF |MOV ECX,DWORD PTR SS:[LOCAL.73]
005DAFD5  |. |898D 28FEFFFF |MOV DWORD PTR SS:[LOCAL.118],ECX
005DAFDB  |. |8B85 28FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.118]
005DAFE1  |. |3B85 38FEFFFF |CMP EAX,DWORD PTR SS:[LOCAL.114]
005DAFE7  |. |0F94C2        |SETE DL
005DAFEA  |. |83E2 01       |AND EDX,00000001
005DAFED  |. |84D2          |TEST DL,DL
005DAFEF  |. |75 27         |JNE SHORT 005DB018
005DAFF1  |. |8B8D 38FEFFFF |MOV ECX,DWORD PTR SS:[LOCAL.114]
005DAFF7  |. |898D D8FEFFFF |MOV DWORD PTR SS:[LOCAL.74],ECX
005DAFFD  |. |8B85 D8FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.74]
005DB003  |. |66:8B50 0C    |MOV DX,WORD PTR DS:[EAX+0C]
005DB007  |. |66:3B95 E6FEF |CMP DX,WORD PTR SS:[LOCAL.71+2]
005DB00E  |. |0F97C1        |SETA CL
005DB011  |. |83E1 01       |AND ECX,00000001
005DB014  |. |84C9          |TEST CL,CL
005DB016  |. |74 1D         |JE SHORT 005DB035
005DB018  |> |8B45 F8       |MOV EAX,DWORD PTR SS:[LOCAL.2]
005DB01B  |. |8DBD 10FEFFFF |LEA EDI,[LOCAL.124]
005DB021  |. |8985 D4FEFFFF |MOV DWORD PTR SS:[LOCAL.75],EAX
005DB027  |. |8B95 D4FEFFFF |MOV EDX,DWORD PTR SS:[LOCAL.75]
005DB02D  |. |8995 18FEFFFF |MOV DWORD PTR SS:[LOCAL.122],EDX
005DB033  |. |EB 06         |JMP SHORT 005DB03B
005DB035  |> |8DBD 30FEFFFF |LEA EDI,[LOCAL.116]
005DB03B  |> |8B07          |MOV EAX,DWORD PTR DS:[EDI]
005DB03D  |. |8985 00FEFFFF |MOV DWORD PTR SS:[LOCAL.128],EAX
005DB043  |. |8B47 04       |MOV EAX,DWORD PTR DS:[EDI+4]
005DB046  |. |8985 04FEFFFF |MOV DWORD PTR SS:[LOCAL.127],EAX
005DB04C  |. |8B57 08       |MOV EDX,DWORD PTR DS:[EDI+8]
005DB04F  |. |8995 08FEFFFF |MOV DWORD PTR SS:[LOCAL.126],EDX
005DB055  |. |8B4D F8       |MOV ECX,DWORD PTR SS:[LOCAL.2]
005DB058  |. |898D D0FEFFFF |MOV DWORD PTR SS:[LOCAL.76],ECX
005DB05E  |. |8B8D D0FEFFFF |MOV ECX,DWORD PTR SS:[LOCAL.76]
005DB064  |. |898D F8FDFFFF |MOV DWORD PTR SS:[LOCAL.130],ECX
005DB06A  |. |8B85 08FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.126]
005DB070  |. |3B85 F8FDFFFF |CMP EAX,DWORD PTR SS:[LOCAL.130]
005DB076  |. |0F94C2        |SETE DL
005DB079  |. |83E2 01       |AND EDX,00000001
005DB07C  |. |84D2          |TEST DL,DL
005DB07E  |. |74 3D         |JE SHORT 005DB0BD
005DB080  |. |66:C785 44FFF |MOV WORD PTR SS:[LOCAL.47],0F0
005DB089  |. |BA 42179200   |MOV EDX,OFFSET 00921742
005DB08E  |. |8D45 90       |LEA EAX,[LOCAL.28]
005DB091  |. |E8 6EB02700   |CALL 00856104
005DB096  |. |FF85 50FFFFFF |INC DWORD PTR SS:[LOCAL.44]
005DB09C  |. |8D55 90       |LEA EDX,[LOCAL.28]
005DB09F  |. |8D83 84000000 |LEA EAX,[EBX+84]
005DB0A5  |. |E8 E6B02700   |CALL 00856190                           ; [PersonalFinances.00856190
005DB0AA  |. |FF8D 50FFFFFF |DEC DWORD PTR SS:[LOCAL.44]
005DB0B0  |. |8D45 90       |LEA EAX,[LOCAL.28]
005DB0B3  |. |BA 02000000   |MOV EDX,2
005DB0B8  |. |E8 ABB02700   |CALL 00856168
005DB0BD  |> |0FB78D E6FEFF |MOVZX ECX,WORD PTR SS:[LOCAL.71+2]
005DB0C4  |. |018D E8FEFFFF |ADD DWORD PTR SS:[LOCAL.70],ECX
005DB0CA  |. |8B4B 78       |MOV ECX,DWORD PTR DS:[EBX+78]
005DB0CD  |. |83F9 04       |CMP ECX,4                               ; Switch (cases 0..4, 6 exits)
005DB0D0  |. |0F87 F2020000 |JA 005DB3C8
005DB0D6  |. |FF248D DDB05D |JMP DWORD PTR DS:[ECX*4+5DB0DD]
005DB0DD  |. |F1B05D00      |DD 005DB0F1
005DB0E1  |. |80B15D00      |DD 005DB180
005DB0E5  |. |18B25D00      |DD 005DB218
005DB0E9  |. |ACB25D00      |DD 005DB2AC
005DB0ED  |. |32B35D00      |DD 005DB332
005DB0F1  |> |83FE 08       |CMP ESI,8                               ; Case 0 of switch PersonalFinances.5DB0CD
005DB0F4  |. |0F8F CE020000 |JG 005DB3C8
005DB0FA  |. |66:C785 44FFF |MOV WORD PTR SS:[LOCAL.47],0FC
005DB103  |. |66:8B85 E6FEF |MOV AX,WORD PTR SS:[LOCAL.71+2]
005DB10A  |. |66:8985 CEFEF |MOV WORD PTR SS:[LOCAL.77+2],AX
005DB111  |. |33D2          |XOR EDX,EDX
005DB113  |. |8955 8C       |MOV DWORD PTR SS:[LOCAL.29],EDX
005DB116  |. |8D45 8C       |LEA EAX,[LOCAL.29]
005DB119  |. |BA 01000000   |MOV EDX,1
005DB11E  |. |E8 29B22700   |CALL 0085634C
005DB123  |. |8985 C8FEFFFF |MOV DWORD PTR SS:[LOCAL.78],EAX
005DB129  |. |6A 01         |PUSH 1                                  ; /Arg2 = 1
005DB12B  |. |8B8D C8FEFFFF |MOV ECX,DWORD PTR SS:[LOCAL.78]         ; |
005DB131  |. |51            |PUSH ECX                                ; |Arg1 => [LOCAL.78]
005DB132  |. |E8 2DAE2700   |CALL 00855F64                           ; \PersonalFinances.00855F64
005DB137  |. |83C4 08       |ADD ESP,8
005DB13A  |. |8B85 C8FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.78]
005DB140  |. |E8 9FB12700   |CALL 008562E4
005DB145  |. |8B95 C8FEFFFF |MOV EDX,DWORD PTR SS:[LOCAL.78]
005DB14B  |. |8D45 C8       |LEA EAX,[LOCAL.14]
005DB14E  |. |66:8BBD CEFEF |MOV DI,WORD PTR SS:[LOCAL.77+2]
005DB155  |. |8B0A          |MOV ECX,DWORD PTR DS:[EDX]
005DB157  |. |8D55 8C       |LEA EDX,[LOCAL.29]
005DB15A  |. |66:8939       |MOV WORD PTR DS:[ECX],DI
005DB15D  |. |FF85 50FFFFFF |INC DWORD PTR SS:[LOCAL.44]
005DB163  |. |E8 3CB02700   |CALL 008561A4                           ; [PersonalFinances.008561A4
005DB168  |. |FF8D 50FFFFFF |DEC DWORD PTR SS:[LOCAL.44]
005DB16E  |. |8D45 8C       |LEA EAX,[LOCAL.29]
005DB171  |. |BA 02000000   |MOV EDX,2
005DB176  |. |E8 EDAF2700   |CALL 00856168
005DB17B  |. |E9 48020000   |JMP 005DB3C8
005DB180  |> |83FE 05       |CMP ESI,5                               ; Case 1 of switch PersonalFinances.5DB0CD
005DB183  |. |0F8E 3F020000 |JLE 005DB3C8
005DB189  |. |83FE 0F       |CMP ESI,0F
005DB18C  |. |0F8F 36020000 |JG 005DB3C8
005DB192  |. |66:C785 44FFF |MOV WORD PTR SS:[LOCAL.47],108
005DB19B  |. |66:8B8D E6FEF |MOV CX,WORD PTR SS:[LOCAL.71+2]
005DB1A2  |. |66:898D C6FEF |MOV WORD PTR SS:[LOCAL.79+2],CX
005DB1A9  |. |33C9          |XOR ECX,ECX
005DB1AB  |. |894D 88       |MOV DWORD PTR SS:[LOCAL.30],ECX
005DB1AE  |. |8D45 88       |LEA EAX,[LOCAL.30]
005DB1B1  |. |BA 01000000   |MOV EDX,1
005DB1B6  |. |E8 91B12700   |CALL 0085634C
005DB1BB  |. |8985 C0FEFFFF |MOV DWORD PTR SS:[LOCAL.80],EAX
005DB1C1  |. |6A 01         |PUSH 1                                  ; /Arg2 = 1
005DB1C3  |. |8B8D C0FEFFFF |MOV ECX,DWORD PTR SS:[LOCAL.80]         ; |
005DB1C9  |. |51            |PUSH ECX                                ; |Arg1 => [LOCAL.80]
005DB1CA  |. |E8 95AD2700   |CALL 00855F64                           ; \PersonalFinances.00855F64
005DB1CF  |. |83C4 08       |ADD ESP,8
005DB1D2  |. |8B85 C0FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.80]
005DB1D8  |. |E8 07B12700   |CALL 008562E4
005DB1DD  |. |8B95 C0FEFFFF |MOV EDX,DWORD PTR SS:[LOCAL.80]
005DB1E3  |. |66:8B85 C6FEF |MOV AX,WORD PTR SS:[LOCAL.79+2]
005DB1EA  |. |8B0A          |MOV ECX,DWORD PTR DS:[EDX]
005DB1EC  |. |8D55 88       |LEA EDX,[LOCAL.30]
005DB1EF  |. |66:8901       |MOV WORD PTR DS:[ECX],AX
005DB1F2  |. |8D45 C8       |LEA EAX,[LOCAL.14]
005DB1F5  |. |FF85 50FFFFFF |INC DWORD PTR SS:[LOCAL.44]
005DB1FB  |. |E8 A4AF2700   |CALL 008561A4                           ; [PersonalFinances.008561A4
005DB200  |. |FF8D 50FFFFFF |DEC DWORD PTR SS:[LOCAL.44]
005DB206  |. |8D45 88       |LEA EAX,[LOCAL.30]
005DB209  |. |BA 02000000   |MOV EDX,2
005DB20E  |. |E8 55AF2700   |CALL 00856168
005DB213  |. |E9 B0010000   |JMP 005DB3C8
005DB218  |> |83FE 05       |CMP ESI,5                               ; Case 2 of switch PersonalFinances.5DB0CD
005DB21B  |. |7E 09         |JLE SHORT 005DB226
005DB21D  |. |83FE 0F       |CMP ESI,0F
005DB220  |. |0F8E A2010000 |JLE 005DB3C8
005DB226  |> |66:C785 44FFF |MOV WORD PTR SS:[LOCAL.47],114
005DB22F  |. |66:8B8D E6FEF |MOV CX,WORD PTR SS:[LOCAL.71+2]
005DB236  |. |66:898D BEFEF |MOV WORD PTR SS:[LOCAL.81+2],CX
005DB23D  |. |33C9          |XOR ECX,ECX
005DB23F  |. |894D 84       |MOV DWORD PTR SS:[LOCAL.31],ECX
005DB242  |. |8D45 84       |LEA EAX,[LOCAL.31]
005DB245  |. |BA 01000000   |MOV EDX,1
005DB24A  |. |E8 FDB02700   |CALL 0085634C
005DB24F  |. |8985 B8FEFFFF |MOV DWORD PTR SS:[LOCAL.82],EAX
005DB255  |. |6A 01         |PUSH 1                                  ; /Arg2 = 1
005DB257  |. |8B8D B8FEFFFF |MOV ECX,DWORD PTR SS:[LOCAL.82]         ; |
005DB25D  |. |51            |PUSH ECX                                ; |Arg1 => [LOCAL.82]
005DB25E  |. |E8 01AD2700   |CALL 00855F64                           ; \PersonalFinances.00855F64
005DB263  |. |83C4 08       |ADD ESP,8
005DB266  |. |8B85 B8FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.82]
005DB26C  |. |E8 73B02700   |CALL 008562E4
005DB271  |. |8B95 B8FEFFFF |MOV EDX,DWORD PTR SS:[LOCAL.82]
005DB277  |. |66:8B85 BEFEF |MOV AX,WORD PTR SS:[LOCAL.81+2]
005DB27E  |. |8B0A          |MOV ECX,DWORD PTR DS:[EDX]
005DB280  |. |8D55 84       |LEA EDX,[LOCAL.31]
005DB283  |. |66:8901       |MOV WORD PTR DS:[ECX],AX
005DB286  |. |8D45 C8       |LEA EAX,[LOCAL.14]
005DB289  |. |FF85 50FFFFFF |INC DWORD PTR SS:[LOCAL.44]
005DB28F  |. |E8 10AF2700   |CALL 008561A4                           ; [PersonalFinances.008561A4
005DB294  |. |FF8D 50FFFFFF |DEC DWORD PTR SS:[LOCAL.44]
005DB29A  |. |8D45 84       |LEA EAX,[LOCAL.31]
005DB29D  |. |BA 02000000   |MOV EDX,2
005DB2A2  |. |E8 C1AE2700   |CALL 00856168
005DB2A7  |. |E9 1C010000   |JMP 005DB3C8
005DB2AC  |> |66:C785 44FFF |MOV WORD PTR SS:[LOCAL.47],120          ; Case 3 of switch PersonalFinances.5DB0CD
005DB2B5  |. |66:8B8D E6FEF |MOV CX,WORD PTR SS:[LOCAL.71+2]
005DB2BC  |. |66:898D B6FEF |MOV WORD PTR SS:[LOCAL.83+2],CX
005DB2C3  |. |33C9          |XOR ECX,ECX
005DB2C5  |. |894D 80       |MOV DWORD PTR SS:[LOCAL.32],ECX
005DB2C8  |. |8D45 80       |LEA EAX,[LOCAL.32]
005DB2CB  |. |BA 01000000   |MOV EDX,1
005DB2D0  |. |E8 77B02700   |CALL 0085634C
005DB2D5  |. |8985 B0FEFFFF |MOV DWORD PTR SS:[LOCAL.84],EAX
005DB2DB  |. |6A 01         |PUSH 1                                  ; /Arg2 = 1
005DB2DD  |. |8B8D B0FEFFFF |MOV ECX,DWORD PTR SS:[LOCAL.84]         ; |
005DB2E3  |. |51            |PUSH ECX                                ; |Arg1 => [LOCAL.84]
005DB2E4  |. |E8 7BAC2700   |CALL 00855F64                           ; \PersonalFinances.00855F64
005DB2E9  |. |83C4 08       |ADD ESP,8
005DB2EC  |. |8B85 B0FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.84]
005DB2F2  |. |E8 EDAF2700   |CALL 008562E4
005DB2F7  |. |8B95 B0FEFFFF |MOV EDX,DWORD PTR SS:[LOCAL.84]
005DB2FD  |. |66:8B85 B6FEF |MOV AX,WORD PTR SS:[LOCAL.83+2]
005DB304  |. |8B0A          |MOV ECX,DWORD PTR DS:[EDX]
005DB306  |. |8D55 80       |LEA EDX,[LOCAL.32]
005DB309  |. |66:8901       |MOV WORD PTR DS:[ECX],AX
005DB30C  |. |8D45 C8       |LEA EAX,[LOCAL.14]
005DB30F  |. |FF85 50FFFFFF |INC DWORD PTR SS:[LOCAL.44]
005DB315  |. |E8 8AAE2700   |CALL 008561A4                           ; [PersonalFinances.008561A4
005DB31A  |. |FF8D 50FFFFFF |DEC DWORD PTR SS:[LOCAL.44]
005DB320  |. |8D45 80       |LEA EAX,[LOCAL.32]
005DB323  |. |BA 02000000   |MOV EDX,2
005DB328  |. |E8 3BAE2700   |CALL 00856168
005DB32D  |. |E9 96000000   |JMP 005DB3C8
005DB332  |> |83FE 0A       |CMP ESI,0A                              ; Case 4 of switch PersonalFinances.5DB0CD
005DB335  |. |0F8E 8D000000 |JLE 005DB3C8
005DB33B  |. |66:C785 44FFF |MOV WORD PTR SS:[LOCAL.47],12C
005DB344  |. |66:8B8D E6FEF |MOV CX,WORD PTR SS:[LOCAL.71+2]
005DB34B  |. |66:898D AEFEF |MOV WORD PTR SS:[LOCAL.85+2],CX
005DB352  |. |33C9          |XOR ECX,ECX
005DB354  |. |898D 7CFFFFFF |MOV DWORD PTR SS:[LOCAL.33],ECX
005DB35A  |. |8D85 7CFFFFFF |LEA EAX,[LOCAL.33]
005DB360  |. |BA 01000000   |MOV EDX,1
005DB365  |. |E8 E2AF2700   |CALL 0085634C
005DB36A  |. |8985 A8FEFFFF |MOV DWORD PTR SS:[LOCAL.86],EAX
005DB370  |. |6A 01         |PUSH 1                                  ; /Arg2 = 1
005DB372  |. |8B8D A8FEFFFF |MOV ECX,DWORD PTR SS:[LOCAL.86]         ; |
005DB378  |. |51            |PUSH ECX                                ; |Arg1 => [LOCAL.86]
005DB379  |. |E8 E6AB2700   |CALL 00855F64                           ; \PersonalFinances.00855F64
005DB37E  |. |83C4 08       |ADD ESP,8
005DB381  |. |8B85 A8FEFFFF |MOV EAX,DWORD PTR SS:[LOCAL.86]
005DB387  |. |E8 58AF2700   |CALL 008562E4
005DB38C  |. |8B95 A8FEFFFF |MOV EDX,DWORD PTR SS:[LOCAL.86]
005DB392  |. |66:8B85 AEFEF |MOV AX,WORD PTR SS:[LOCAL.85+2]
005DB399  |. |8B0A          |MOV ECX,DWORD PTR DS:[EDX]
005DB39B  |. |8D95 7CFFFFFF |LEA EDX,[LOCAL.33]
005DB3A1  |. |66:8901       |MOV WORD PTR DS:[ECX],AX
005DB3A4  |. |8D45 C8       |LEA EAX,[LOCAL.14]
005DB3A7  |. |FF85 50FFFFFF |INC DWORD PTR SS:[LOCAL.44]
005DB3AD  |. |E8 F2AD2700   |CALL 008561A4                           ; [PersonalFinances.008561A4
005DB3B2  |. |FF8D 50FFFFFF |DEC DWORD PTR SS:[LOCAL.44]
005DB3B8  |. |8D85 7CFFFFFF |LEA EAX,[LOCAL.33]
005DB3BE  |. |BA 02000000   |MOV EDX,2
005DB3C3  |. |E8 A0AD2700   |CALL 00856168
005DB3C8  |> |83FE 06       |CMP ESI,6                               ; Default case of switch PersonalFinances.5DB0CD
005DB3CB  |. |7D 79         |JGE SHORT 005DB446
005DB3CD  |. |66:C785 44FFF |MOV WORD PTR SS:[LOCAL.47],138
005DB3D6  |. |66:8B8D E6FEF |MOV CX,WORD PTR SS:[LOCAL.71+2]
005DB3DD  |. |66:898D A6FEF |MOV WORD PTR SS:[LOCAL.87+2],CX
005DB3E4  |. |33C9          |XOR ECX,ECX
005DB3E6  |. |898D 78FFFFFF |MOV DWORD PTR SS:[LOCAL.34],ECX
005DB3EC  |. |8D85 78FFFFFF |LEA EAX,[LOCAL.34]
005DB3F2  |. |BA 01000000   |MOV EDX,1
005DB3F7  |. |E8 50AF2700   |CALL 0085634C
005DB3FC  |. |8BF8          |MOV EDI,EAX
005DB3FE  |. |6A 01         |PUSH 1                                  ; /Arg2 = 1
005DB400  |. |57            |PUSH EDI                                ; |Arg1
005DB401  |. |E8 5EAB2700   |CALL 00855F64                           ; \PersonalFinances.00855F64
005DB406  |. |83C4 08       |ADD ESP,8
005DB409  |. |8BC7          |MOV EAX,EDI
005DB40B  |. |E8 D4AE2700   |CALL 008562E4
005DB410  |. |66:8B8D A6FEF |MOV CX,WORD PTR SS:[LOCAL.87+2]
005DB417  |. |8B17          |MOV EDX,DWORD PTR DS:[EDI]
005DB419  |. |8D45 C4       |LEA EAX,[LOCAL.15]
005DB41C  |. |66:890A       |MOV WORD PTR DS:[EDX],CX
005DB41F  |. |8D95 78FFFFFF |LEA EDX,[LOCAL.34]
005DB425  |. |FF85 50FFFFFF |INC DWORD PTR SS:[LOCAL.44]
005DB42B  |. |E8 74AD2700   |CALL 008561A4                           ; [PersonalFinances.008561A4
005DB430  |. |FF8D 50FFFFFF |DEC DWORD PTR SS:[LOCAL.44]
005DB436  |. |8D85 78FFFFFF |LEA EAX,[LOCAL.34]
005DB43C  |. |BA 02000000   |MOV EDX,2
005DB441  |. |E8 22AD2700   |CALL 00856168
005DB446  |> |46            |INC ESI
005DB447  |> |837D CC 00    |CMP DWORD PTR SS:[LOCAL.13],0
005DB44B  |. |74 08         |JE SHORT 005DB455
005DB44D  |. |8B4D CC       |MOV ECX,DWORD PTR SS:[LOCAL.13]
005DB450  |. |8B49 FC       |MOV ECX,DWORD PTR DS:[ECX-4]
005DB453  |. |EB 02         |JMP SHORT 005DB457
005DB455  |> |33C9          |XOR ECX,ECX
005DB457  |> |3BF1          |CMP ESI,ECX
005DB459  |.^\0F8E 10FBFFFF \JLE 005DAF6F

chuky666

Dentro de esta rutina después de cargar en EDX nuestro serial (mediante el CALL 8562E4) hace una llamada a otra rutina más sencilla que también hace una serie de operaciones similares (en las que está involucrado nuestro serial), es ésta:

Código (asm) [Seleccionar]
005DBCDC  /$  55            PUSH EBP                                 ; PersonalFinances.005DBCDC(guessed Arg1,Arg2)
005DBCDD  |.  8BEC          MOV EBP,ESP
005DBCDF  |.  53            PUSH EBX
005DBCE0  |.  56            PUSH ESI
005DBCE1  |.  8B75 0C       MOV ESI,DWORD PTR SS:[ARG.2]
005DBCE4  |.  8B55 08       MOV EDX,DWORD PTR SS:[ARG.1]
005DBCE7  |.  8B4A 28       MOV ECX,DWORD PTR DS:[EDX+28]
005DBCEA  |.  8B41 04       MOV EAX,DWORD PTR DS:[ECX+4]
005DBCED  |.  EB 1C         JMP SHORT 005DBD0B
005DBCEF  |>  8BD0          /MOV EDX,EAX
005DBCF1  |.  66:8B1E       |MOV BX,WORD PTR DS:[ESI]
005DBCF4  |.  66:3B5A 0C    |CMP BX,WORD PTR DS:[EDX+0C]
005DBCF8  |.  0F97C2        |SETA DL
005DBCFB  |.  83E2 01       |AND EDX,00000001
005DBCFE  |.  84D2          |TEST DL,DL
005DBD00  |.  74 05         |JE SHORT 005DBD07
005DBD02  |.  8B40 08       |MOV EAX,DWORD PTR DS:[EAX+8]
005DBD05  |.  EB 04         |JMP SHORT 005DBD0B
005DBD07  |>  8BC8          |MOV ECX,EAX
005DBD09  |.  8B00          |MOV EAX,DWORD PTR DS:[EAX]
005DBD0B  |>  8078 0F 00    |CMP BYTE PTR DS:[EAX+0F],0
005DBD0F  |.^ 74 DE         \JE SHORT 005DBCEF
005DBD11  |.  8BC1          MOV EAX,ECX
005DBD13  |.  5E            POP ESI
005DBD14  |.  5B            POP EBX
005DBD15  |.  5D            POP EBP
005DBD16  \.  C3            RETN


¿Alguién le ve algún sentido?

En la rutina anterior después de hacer varias operaciones hace una comparación (005DB0CD) y hay varios casos posibles, ¿que situaciones representan?

Saludos y gracias de nuevo

LSL

partiendo del lugar donde coge una de las cadenas que calificastes como curiosas

00581734  |> \BA A0078D00   MOV EDX,008D07A0                  ;  ASCII "hmXsC8mWHsCc6eggh9h5PFH7K"; Default case of switch 00581538

subimos en el código para ver si con un poco de suerte nos encontramos algo interesante

y vemos lo siguiente:

0058152D  |.  84C9                TEST CL,CL
0058152F  |.  74 07               JE SHORT 00581538
00581531  |.  C683 D2030000 00    MOV BYTE PTR [EBX+3D2],0
00581538  |>  83EF 01             SUB EDI,1                         ;  Switch (cases 0..2)
0058153B      72 0E               JB SHORT 0058154B
0058153D  |.  74 2E               JE SHORT 0058156D
0058153F  |.  4F                  DEC EDI
00581540  |.  0F84 CB000000       JE 00581611
00581546  |.  E9 E9010000         JMP 00581734
0058154B  |>  807D 97 00          CMP BYTE PTR [EBP-69],0           ;  Case 0 of switch 00581538
0058154F  |.  75 10               JNZ SHORT 00581561
00581551  |.  B0 01               MOV AL,1
00581553  |.  8B16                MOV EDX,DWORD PTR [ESI]
00581555  |.  64:8915 00000000    MOV DWORD PTR FS:[0],EDX
0058155C  |.  E9 73030000         JMP 005818D4
00581561  |>  C683 D3030000 01    MOV BYTE PTR [EBX+3D3],1
00581568  |.  E9 C7010000         JMP 00581734
0058156D  |>  B2 01               MOV DL,1                          ;  Case 1 of switch 00581538
0058156F  |.  8B83 A8030000       MOV EAX,DWORD PTR [EBX+3A8]
00581575  |.  8B08                MOV ECX,DWORD PTR [EAX]
00581577  |.  FF51 74             CALL DWORD PTR [ECX+74]
0058157A  |.  66:C746 10 2400     MOV WORD PTR [ESI+10],24
00581580  |.  BA 85078D00         MOV EDX,008D0785                  ;  ASCII "LaunchCount"
00581585  |.  8D45 EC             LEA EAX,DWORD PTR [EBP-14]
00581588  |.  E8 5B4A2D00         CALL 00855FE8
0058158D  |.  FF46 1C             INC DWORD PTR [ESI+1C]
00581590  |.  E8 0347FFFF         CALL 00575C98
00581595  |.  8BF8                MOV EDI,EAX
00581597  |.  6A 00               PUSH 0
00581599  |.  8D4D EC             LEA ECX,DWORD PTR [EBP-14]
0058159C  |.  51                  PUSH ECX
0058159D  |.  BA 92078D00         MOV EDX,008D0792                  ;  UNICODE "Main"


que parece interesante "LaunchCount", umm parece una referencia del programador para contar los lanzamientos demos del programa, mas abajo tambien el texto "Main", que hace referencia al formulario principal del programa, y que hay un "Switch" con tres opciones que dependen del valor existente en el registro EDI,

Hasta aquí en version trial llego con el valor 1 en EDI, y salta a la opcion 1 del Swich con el LauncCount gracioso, pero como yo tambien soy gracioso le cambio el valor de EDI a 0 y continuo por el Swuich case 0, y no me sale la ventana de registrar, pero me sigue saliendo en el menu la opción "Buy now.." para comprar.

Asi que tenemos que profundizar un poco mas, para encontrar donde se le da al registro EDI, el valor 1 de versión trial, para cambiarlo por el de valor 0 que ya suponemos que es el de registrado, porque no nos sale la nag de compra.

Subiendo más en el código hasta donde comienza dicho proceso, vemos (y vamos comprobando parando en las call reiniciando varias veces por si toma el valor de los procesos de las call intermedias), que a EDI le pasa el valor 1 el registro EDX, al comienzo del procedimiento

00581428  |.  8BFA                MOV EDI,EDX

por lo que ahora tenemos que buscar donde coge EDX el valor 1 antes de entrar en el procedimiento de marras. Para esto, al principio del procedimiento
0058141C  /$  55                  PUSH EBP

la hacemos un Control+R, y obtenemos todas la call donde se llama al procedimiento, para saber en cual de ellas tenemos que fijarnos, le ponemos un BP (F2) a cada una, reiniciamos y ya caemos en la call que se encarga del proceso.

Estando parado en esa Call de llamada en 005904D2, tenemos que subir para encontrar donde coge EDX el valor 1,

005904BE  |.  52                  PUSH EDX
005904BF  |.  8B0A                MOV ECX,DWORD PTR [EDX]
005904C1  |.  FF91 D4000000       CALL DWORD PTR [ECX+D4]
005904C7  |.  59                  POP ECX
005904C8  |.  8BD0                MOV EDX,EAX
005904CA  |.  33C9                XOR ECX,ECX
005904CC  |.  8B85 ECFDFFFF       MOV EAX,DWORD PTR [EBP-214]
005904D2  |.  E8 450FFFFF         CALL 0058141C


vemos que a EDX se le mueve el valor de  EAX, ya tenemos un nuevo objetivo, buscar donde se mueve a EAX el valor 1, para esto vemos que un poco antes hay una CALL a otro procedimiento, ¿será la llave?. Vamos a ponerle a esta call un BP con F2 porque no podemos entrar directamente, y vamos a reiniciar de nuevo el programa, ahora paramos en la call, y con F7 entramos en ella y vemos lo siguiente:

005D992C  /.  55                  PUSH EBP
005D992D  |.  8BEC                MOV EBP,ESP
005D992F   |. B8 01000000         MOV EAX,1
005D9934  |.  5D                  POP EBP
005D9935  \.  C3                  RETN


Ya tenemos donde coge EAX el valor 1, ¿y si lo cambiamos por un cero de los que nos calificaban cuando estabamos en el colegio?, ya corremos el programa sin mas paradas y no aparece la nag de compra ni la misma opción en el menú, por lo que es de suponer que el resultado es definitivo.

Pero podemos y debemos profundizar un poco más ya que si estuviesemos registrado seguramente no pasariamos por dicho lugar, así que vamos a ver porqué se llega a este código de la version TRIAL,

y mirando de donde procede el que se llame a dicho lugar, vemos que llegamos dependiendo de que se produzca el salto JE de 005DB5CA.


005DB56A  |.  8985 9CFEFFFF       MOV DWORD PTR [EBP-164],EAX
005DB570  |.  8B8D 9CFEFFFF       MOV ECX,DWORD PTR [EBP-164]
005DB576  |.  898D E8FDFFFF       MOV DWORD PTR [EBP-218],ECX
005DB57C  |.  8B4B 28             MOV ECX,DWORD PTR [EBX+28]
005DB57F  |.  898D 98FEFFFF       MOV DWORD PTR [EBP-168],ECX
005DB585  |.  8B85 98FEFFFF       MOV EAX,DWORD PTR [EBP-168]
005DB58B  |.  8985 D8FDFFFF       MOV DWORD PTR [EBP-228],EAX
005DB591      8B95 D8FDFFFF       MOV EDX,DWORD PTR [EBP-228]
005DB597  |.  3B95 E8FDFFFF       CMP EDX,DWORD PTR [EBP-218]
005DB59D  |.  0F94C1              SETE CL
005DB5A0  |.  83E1 01             AND ECX,1
005DB5A3  |.  84C9                TEST CL,CL
005DB5A5  |.  75 29               JNZ SHORT 005DB5D0
005DB5A7  |.  8B85 E8FDFFFF       MOV EAX,DWORD PTR [EBP-218]
005DB5AD  |.  8985 94FEFFFF       MOV DWORD PTR [EBP-16C],EAX
005DB5B3  |.  8B95 94FEFFFF       MOV EDX,DWORD PTR [EBP-16C]
005DB5B9  |.  8B4A 0C             MOV ECX,DWORD PTR [EDX+C]
005DB5BC  |.  3B8D A0FEFFFF       CMP ECX,DWORD PTR [EBP-160]
005DB5C2  |.  0F97C0              SETA AL
005DB5C5  |.  83E0 01             AND EAX,1
005DB5C8      84C0                TEST AL,AL
005DB5CA  |.  0F84 BE000000       JE 005DB68E


y para que el salto JE se produzca depende que en 005DB5C2 el SETA AL de un resultado verdadero "true", por lo que deducimos que si la comparación diese un resultado falso no se produciria el salto que nos lleva al bit indicativo de versión trial (así que lo cambio SETA por un SETBE que es lo opuesto, y además el salto que hay un poco antes que evitaria el pasar por ahí, lo NOPeo, vaya ser que en un futuro se produzca el salto por vaya usted a saber porqué, y ya nos mete la gamba).


005DB56A      8985 9CFEFFFF       MOV DWORD PTR [EBP-164],EAX
005DB570      8B8D 9CFEFFFF       MOV ECX,DWORD PTR [EBP-164]
005DB576      898D E8FDFFFF       MOV DWORD PTR [EBP-218],ECX
005DB57C  |.  8B4B 28             MOV ECX,DWORD PTR [EBX+28]
005DB57F      898D 98FEFFFF       MOV DWORD PTR [EBP-168],ECX
005DB585  |.  8B85 98FEFFFF       MOV EAX,DWORD PTR [EBP-168]
005DB58B  |.  8985 D8FDFFFF       MOV DWORD PTR [EBP-228],EAX
005DB591      8B95 D8FDFFFF       MOV EDX,DWORD PTR [EBP-228]
005DB597  |.  3B95 E8FDFFFF       CMP EDX,DWORD PTR [EBP-218]
005DB59D  |.  0F94C1              SETE CL
005DB5A0  |.  83E1 01             AND ECX,1
005DB5A3  |.  84C9                TEST CL,CL
005DB5A5      90                  NOP
005DB5A6      90                  NOP
005DB5A7      8B85 E8FDFFFF       MOV EAX,DWORD PTR [EBP-218]
005DB5AD  |.  8985 94FEFFFF       MOV DWORD PTR [EBP-16C],EAX
005DB5B3  |.  8B95 94FEFFFF       MOV EDX,DWORD PTR [EBP-16C]
005DB5B9  |.  8B4A 0C             MOV ECX,DWORD PTR [EDX+C]
005DB5BC  |.  3B8D A0FEFFFF       CMP ECX,DWORD PTR [EBP-160]
005DB5C2      0F96C0              SETBE AL                          ;  false
005DB5C5  |.  83E0 01             AND EAX,1
005DB5C8      84C0                TEST AL,AL
005DB5CA  |.  0F84 BE000000       JE 005DB68E                       ;  saltar


llegado aqui tambien pueden decir que lo mas seguro es poner un JMP, pero no me gusta machacar :D

P.d. tambien se puede estudiar los valores que se mueven y comparan en dicho procedimiento, que quizas sean interesantes ????.

probar si funciona, que a mi me da la F1ACA meter 200 transaciones ...
Saludos.

LSL.