You are on page 1of 25

CracksLatinoS!

2007
-* *Programa

Download
Descripcin
Herramientas
Dificultad
Compresor/Compilador
Proteccin
Objetivos
Cracker?
Tutorial n

DocCF Gestion de instituciones de


Educacion
Programa para gestionar centros de enseanza
WKTVBDebugger,ExDec,UltraEdit,VB Decompiler
Media
Visual Basic..P-Code
Serial
Encontrar serial valido y (opcional)hacer un
generador de claves para distintas maquinas.
Sequeyo
Fecha: 2-1-2007

-** Introduccin **-

Hola buena gente.


Aqu de nuevo con vosotros para explicar cmo solucion el registro de ste
programa.
Es un programa del cual alguien me pidi ayuda. Programado en VisualBasic y
compilado en Pcode. En muchas ocasiones puede resultar odioso tracear
intentar hacer un seguimiento del comportamiento de un PCode, pero
despues de mis aventuras con dicho compilador, forma parte esencial la
paciencia. En definitiva, regla aplicable en cualquier estudio de una
aplicacin. En este caso con Pcode, la falta de paciencia puede vencernos y
aveces desistimos del intento.
Quienes hayan leido mis tutos, sabrn que paciencia si que tengo as no
tanto como tiempo.

As que dicho esto, y agradeciendo la atencion que vais a prestar,


comenzamos.
Instalamos el programa DocCF y despues de analizar el ejecutable con Peid
RDGPackerDetector observamos que no tendremos que perder tiempo en
desempaquetarlo.

Ah lo vemos, un Visual Basic compilado en P-Code as que ya sabemos con


qu herramienta vamos a trabajar. Sin duda WKTVBDebugger para P-Code
es de las mejores alternativas, por no decir de las pocas para depurar la
aplicacin. Sin duda, la valiosa ayuda de ExDec y VB Decompiler son inestimables.
Lo primero que haremos es, sin duda, echar un vistazo al programa y ver el
aspecto de las ventanas, botones, etiquetas,cajas de texto...etc. Todo,
absolutamente todo, lo que nos pueda servir luego para identificar en el
codigo muerto los sitios calientes.Abrimos el programa y lo primero que se
presenta, es una nag-formulario, que pide nombre y clave para entrar al
programa general. Me imagino que no habra sido demasiado complicado
encontrar la clave correcta, pero como ya me la proporcion el amigo que me
pidi ayuda pues....menos trabajo. Si ya tenemos el primer obstaculo
salvado, pues nos aprovechamos de ello.

El nombre de usuario es "carlosfv" y la clave es "as". Mientras escribimos, el


texto se coloca l solito en mayusculas.

Sin ms complicacion, clickamos en Aceptar y entramos de lleno en el


programa

En la imagen vemos nuestro estado de registro, y la ruta del men que


debemos seguir para llegar al formulario de registro. Clickamos entonces en
"Ayuda" y luego en "Acerca de DocCF..." llegando as al formulario de
registro......

Se ve, que consta de dos botones, dos cajas de texto,etiquetas con varios
textos.... en fin: un formulario simple y llano.
Sabemos ya lo que tendramos que buscar en un codigo muerto
decompilado. Las cadenas de texto de las etiquetas, las cajas de texto,etc.
Todo cuenta, y a ms informacin, ms certera es nuestra busqueda.
Yo me serv para dar un vistazo general, la la herramienta VB Decompiler
obteniendo este resultado. El decompilado tarda un poco en realizarse:

En esta vista general del decompilado vemos dos ventanas por las que vamos
viendo tanto el nombre de los diferentes formularios (izquierda) como su
codigo asociado (derecha). Nos servimos de las barras de desplazamiento
para ello.
De entre los formularios, hay uno que a simple vista nos hace pensar que es
el formulario de registro. Vimos antes que llegabamos al formulario de
registro, clickeando en "Ayuda" y luego en "Acerca de DocCF". Pues de
entre todos los formularios, hay uno llamado "frmAbout". Palabra que nos
resultar ms que familiar (About=Acerca de...). Haciendo doble click en el
frmAbout, automaticamente en la ventana de la derecha aparece todo el
codigo asociado a l y a los componentes que lo integran. Vemos por ejemplo:

Creo que es suficiente. Podra haber puesto mas capturas pero desde ya se
puede decir que se trata del formulario de registro.
Toda esta informacion pertenece al aspecto visual del form de registro. Si
nos desplazamos en la ventana de la izquierda ms abajo, tendremos
disponibles los codigos de los formularios y sus componentes.
Un detalle por si alguien se despist un poco, en las capturas se observa que
de los dos botones disponibles, por sus nombres nos hacemos la idea de la
funcin de cada uno.
En este caso, "NncmdOk" hace referencia al boton que aparece en el
formulario con la etiqueta "Registrar".
En la siguiente captura vemos ese boton y su cdigo:

Aqu tienen el boton "Registrar" y su codigo asociado que comienza en la


direccion 574F24. Hay veces en las que voy comparando resultados con
otros decompiladores y desensambladores. Pido informacion del programa
en ExDec y me aporta lo mismo:

Si nos fijamos en la penultima captura, en la ventana de la derecha, linea 11


vemos una instruccin mas que familiar para nosotros: "Get TextBox.Text"
que lo que hace es pedir el contenido de la caja de textos.
ExDec lo interpreta de otra forma, pero basicamente se refiere a lo mismo.
Con todos estos datos, nos podramos ir directamente a WKTVBDebugger y
colocar un BP en la direccion donde empieza el codigo asociado al boton, es
decir a la direccion 574F24.
Hay un pequeo inconveniente. Si pretendemos cargar la victima en WKT,
nos da un error. Simplemente es porque la victima ya se encuentra "abierta"
en el decompilador y en el desensamblador.
Tendramos que cerrar tanto el VB Decompiler como el ExDec. Luego de
ste detalle ya podremos abrir la victima en WKT.
Recomiendo para los que no estan habituados al manejo del
WKTVBDebugger, repasen mis anteriores tutoriales.
Una vez cargada la victima en WKT, pongo un BP en la direccion 574F24 con
lo que se supone que tendramos que parar, una vez pulsaramos F5, al
comienzo de la rutina del boton Registrar.
Probemos....

Una vez colocado el BP clickamos F5 en la ventana principal de WKT para


empezar a solucionar todo esto.

Zas!! me lanza el sistema operativo un error. Casi no le doy importancia. No


envo el error a nadie, y empiezo de nuevo. Pero me vuelve a salir. Si que es
raro. Llegu a pensar que WKT estaba jodido, lo reinstal de nuevo y nada.
As que me di por intentar averiguar qu provocaba que el sistema me
reportara ste error.
Cargada de nuevo la victima, busqu de entre los opcodes, alguno que me
pudiera ayudar. Existe un opcode, 4B (OnErrorGoto) que al principio pens
que no tendra nada que ver, pero y si la victima manejaba ciertos errores
para determinar si la aplicacin funcionase o no? Puede ser que la victima de
algun modo detectase que la estamos espiando y actuase en consecuencia.
Sea como fuere, por probar no vamos a perder nada as que coloco un BP
directamente en el opcode:

El punto en verde indica que qued puesto el BP as que.....F5 para ver que
pasa.....

Pues lo que pasa es que simplemente se para en el BP puesto al opcode 4B.


Utiliz la tecnica de darle a F5 hasta que me saliera el cartel de error, para
as saber de donde proceda el problema. As que fu dando F5 hasta
contabilizar un total de 13 veces. Bien: analizando el tema. Si despues de
darle 13 veces consecutivas a F5, sale el cartel del error, lo que se puede
hacer es reiniciar WKT y cargar de nuevo la victima; ponemos el bP al
opcode y esta vez le damos a F5 solo 12 veces y cuando se quede en la
parada numero 12, se tracea con F8 para averiguar que ocurre.En la
siguiente imagen ya nos encontramos en sa parada numero 12:

Logicamente como est manejando un error, se dirigir como se ve, a la


direccion 599454 y simplemente se trata de ir traceando con F8 linea a
linea hasta ver qu demonios ocurre.
Est claro que no voy a colocar todas las lineas ni a comentarlas todas, por
que sera una locura. Resultara demasiado pesado y aburrido.
Nos quedamos en que tracearamos linea a linea hasta encontrar algo que
nos diera una pista y despues de tracear un poco, llego a sta zona:

Despues de tracear un poco, el programa llega a la instruccin 557BB0 y si


se me ocurriese volver a pulsar F8, el programa rompe y sale el cartel de
error. Es la primera vez que me encuentro con sto. Y cmo solucionarlo?
La siguiente linea a 557BB0 la interpreta WKT como invalida as que va a
cascarlo todo.
La linea existir existe pues el desensamblado con ExDec as lo demuestra:

Donde WKT dice INVALID, tendra que aparecer la linea 557BB3 pero.....no
est.
Y cmo hago yo para "injertar" una linea en WKT? Pues realmente no se.
Aqu reconocer que me venci sto, y ni pude injertar nada y no logr
saber cmo hace el programa para corromper l mismo una instruccin.
Si alguien se decide a investigar, recibir con mucho agrado sus
descubrimientos.

Desde luego que sto no puede ni debe quedar as. No hay rendicin que
valga.
Y pens que si no puedo inventar algo de la nada.....por qu no cambio lo que
ya existe?
Lo que se me ocurri fu estando an el WKT parado en la linea 557BB0
hecer que de algn modo llegue a la linea 557BB8. Y cmo?...Pues
sencillamente saltando. Pero casi saltando a ciegas porque veo lo que hay en
la otra orilla, pero no s si son arenas movedizas y un posible desajuste de
la pila me rompa de nuevo todo el traceo. As que....sin miedo. Se cambia lo
que sea y lo que haga falta.
Estando en la linea, la edito y el opcode original (04) lo voy a cambiar por el
opcode del salto (branch) (1E) y el resto de los bytes los quito.
En esta primera imagen se v la linea con sus bytes originales:

Y en sta siguiente vemos la modificada ya terminada.


Se v cmo se cambia el opcode 04 por 1E y el resto de bytes todos a cero.

En este momento vemos que la linea 557BB0 despues de alterarle el opcode


y ponerle todos los bytes a cero,pasa a intentar saltar a la linea 557B58 que
no es ni mas ni menos el comienzo de la rutina donde estamos:

Los saltos, en P-Code, y estemos donde estemos, empiezan a calcularse


desde el inicio de la rutina y por ello si queremos ir a la linea 557BB8 pues
le restamos a la direccin de destino, la direccion de origen; es decir:
557BB8-557B58=60
Y por lo tanto, hay que aadirle a la linea 557BB0 otro byte ms, el 60:

Y despues de clickar en Patch Now obtenemos el salto al lugar correcto:

Pero sigue existiendo un problema. Vemos que la direccion 557BB8 no est y


eso es por que en 557BB0, el opcode 1E ocupa 3 bytes a s que desde
557BB0 y en memoria, la siguiente linea ser la 557BB3 que tiene el opcode
"00" que ocupa 2 bytes con lo que por logica, la siguiente linea ser la
557BB5. Si intentamos hacer F8, logicamente WKT se queja diciendo, que le
estamos haciendo saltar a una linea que simplemente no encuentra!!

Lo que nos dice el error es que algo realmente malo ocurri. La linea 557BB8
no puede ser encontrada y quizas algn opcode tiene un tamao incorrecto.
Eso es lo que vena explicando hasta ahora.
Tenemos que reajustar el tamao de algn opcode para dar con la linea
557BB8 del demonio!!
Est claro que la linea 557BB0 no podemos tocarla por que es el salto a
nuestra salvacin as que se me ocurre buscar se opcode con se tamao
necesario, en la linea 557BB3.
Buscando en la lista de opcodes, encuentro uno que viene genial para este
caso:

Es el opcode "2A" que corresponde a ConcatStr que bien se sabr, lo que


hace es unir cadenas (strings) y que ocupa 1 byte. Osea, a la direccion
557BB3, le vamos a colocar un opcode que ocupa solo un byte, con lo que la
siguiente linea pasara a ser la 557BB4. sta ltima linea seguira teniendo
el opcode "00" que ocupa 2 bytes, siendo la siguiente 557BB6. sta a su vez,
que tambien tiene el opcode "00" de dos bytes al sumarsele, se llega a la
linea 557BB8 y reencontramos la linea perdida.
Suena bastante lioso, pero es la logica de los bytes y la logica de la suma. Lo
mas elemental. Y aqu est la prueba despus de cambiar la linea 557BB3:

Ahora s, la linea 557BB0 tiene su destino ah preparado para recibirle


Hacemos F8 y el traceo alcanza la dichosa linea:

Al final, la paciencia, es otra herramienta poderosa. :D


Damos F5 y ahora s vemos el programa correr. Lo que s veo, es que el
formulario de entrada aparece de un color distinto que el original y puedo
imaginar que, con el parcheo que hemos realizado con las paradas iniciales
ocurridas cuando corrimos el programa por primera vez, algo a salido
mal.Pero al fin y al cabo, eso que mas nos da? Sigue siendo funcional. Sera
aconsejable que se hagan los cambios de los bytes, en algun editor
hexadecimal, para cuando carguemos de nuevo, carguemos la parcheada.Yo
los cambi con UltraEdit, por ejemplo.Le llam "DocCFWKTOK.exe"
As, ahora cargar el archivo parcheado en el WKT y le ponemos el BP en la
direccion donde comenzaba el evento del NncmdOk (boton Registrar). Dicha
direccion era 574F24.
Colocado el BP clickamos F5 para que comienze el programa. Entramos el
nombre y la clave necesarias para acceder al programa principal,
Ayuda,Acerca de DocCF y escribimos el numero que se nos ocurra.

Cuando pulsemos Registrar, WKT se clavar en el BP y comenzamos a


tracear.En la siguiente imagen vemos WKT clavado y esperandonos.
No se trata de ir explicando paso a paso y linea a linea, por que no
acabaramos nunca.
Dar un repaso de las mas importantes y qu hacen para comprender cmo
se comporta el programa.

Despues de haber llamado al frmAbout (574F31) y de pedirle el texto al


txtSerie,en la direccion 574F3A, entrar en un bloque de cdigo rutina
que empieza en la direccion 569FDC

Aqu es donde empieza realmente a trabajar con el numero que escribimos.


En la imagen siguiente, vemos en la direccion 569FE5,que carga un integro,
el numero 2.
En 569FED pide 2 (cargado anteriormente) caracteres desde la izquierda,
en la cadena que hay en la direccion que marca la pila: 1DC984 que tiene su
contenido abajo encuadrado, osea, el numero que escribimos.
"rtcLeftCharBstr" se encarga de ello.
Y despues de salir de la llamada, tenemos los dos caracteres. El numero 12.

Desde 569FF7 hasta 569FFC, se carga el byte 2, se le suma al 12 anterior y


se apila. 14 = "E" en hexa.

Luego se pide el largo del serial que escribimos.

Seguidamente una comparacion entre el largo de la cadena 14h(20) con


Eh(14 anteriores del resultado 12+2) y como resultado de la comparacion, no
nos tira fuera y sigue con la manipulacion del serial trucho.
La comparacion de la linea 56A009 (LtI4 14h,Eh ?) por ms que estuve
buscando por la red, no encontr su significado. Lo nico que puedo aportar
es que despues de varias pruebas que hice, si el primer operando (largo de la
cadena) es mayor que el segundo operando (valor de los dos primeros
caracteres+2), el siguiente salto condicional BranchF (saltar si es falso) no
se produce como se ve en la imagen. Por lo tanto se queda que LtI4 nos
pregunta si el primer operando es mayor que el segundo.
En este caso, obviamente y como se ve en la imagen no salta. Si el salto se
produjera, nos lleva a otra zona del programa y ni siquiera se molesta en
trabajar con el serial trucho. Por lo tanto seguimos.

En la siguiente imagen se ve lo que hace el siguiente bloque de codigo.

Se pide el valor numerico de una cadena (14) que era el resultado anterior
12+2. Luego se carga un 3 y luego un uno. Al 14 se le suma ese uno con lo que
queda 15 que servir para pedir de nuestro serial trucho los tres(3)
caracteres a partir de la posicion 15 obteniendo la cadena 543

A continuacion se carga la cifra 810 y el 7 (en la imagen anterior se aprecian


las cifras). Y en esa porcion de codigo lo que se hace es al 810 restarle los
543 obtenidos y al resultado se le divide entre 7 dando el resultado
38.1428571428571

En las siguientes instrucciones, lo que se hace es volver a tomar el valor 14.


Se cargar un uno(1) y de nuestro serial trucho se tomar un carcter (1)
apartir de la posicion 14 con lo que obtendremos el 6.

Luego, en las siguientes lineas,se vuelve a tomar el numero 14, se carga un 4


al que se le suma el 14 anterior=18. Se toma el seis(6) anterior y del serial
trucho se piden (6) caracteres apartir de la posicion 18 con lo que
obtendremos el 210. Porqu 210 y pedimos 6? Pues simplemente, por que
desde la posicion 18, en el serial trucho solo quedan el "210" as que la Api
retorna lo que hay.

Seguidos, se vuelve a tomar el 6 anterior. Se carga un 9. Se multiplica se


9X6=54 y al 210 obtenidos antes, se le resta el 54 quedandonos como
resultado 156.

Seguidamente se vuelve a cargar el 14, acontinuacion se carga un 1, se pide


del serial trucho el "6" (desde la posicion 14, 1 carcter), se carga en la pila
un 4 al que se le suma el 14 y al resultado se le suma el 6 obtenido
anteriormente quedandonos el total de 24.
Seguido se pide del serial trucho, 4 caracteres a partir de la posicion 24;
pero no obtenemos nada, sencillamente porque el serial trucho solo tiene 20
caracteres. As que la proxima vez que carguemos la victima, le escribimos
ms caracteres al serial trcho hasta que complete 24.
La siguiente imagen contiene parte de las operaciones realizadas en el
codigo antes descrito.

Acto seguido, se restan 4005 menos los numeros obtenidos(nada 0) y el


resultado se divide entre 3 dando un total de 1335. En la imagen anterior se
ven los operandos 4005 y 3 que intervienen en las operaciones.

Ya aqu terminan las operaciones con el serial trucho y a continuacion lo que


se hace es unir los resultados numericos obtenidos anteriormente,pasados a
String. En la direccion 56A176 se ve por ejemplo cmo se empiezan a unir
esas cadenas con la orden "ConcatStr". Dichas cifras eran:
38.1428571428571 , 156 , 1335

As que nos queda finalmente la cifra 38.14285714285711561335


En las lineas siguientes se sale de la rutina y se entra en otra en la que se va
a trabajar con el Numero de Identificacin que en mi maquina y segn
vieron en la imagen del principio es el "09822825828488880073387". Digo
lo de mi maquina, por que en maquinas diferentes se numero es diferente.
Puesto en contacto con quien me pidi ayuda con ste software, me mand el
numero que apareca en su maquina.
Bien seguimos con el WKT.

Ah estan viendo cmo se apunta a la caja de textos "txtNA" del frmAbout


y a continuacion se le pide el contenido para finalmente entrar en otra
rutina con se contenido. La linea 574F67 es bastante clara en cuanto a
dnde vamos a ir a parar. A la direccion 5664C0

Ah estamos. Tal como se apuntaba en la imagen anterior.


Como ya sabemos la estructura y forma de trabajo del programa a la hora
de solicitar los caracteres, puedo obviar muchas imagenes y muchos
detalles. Les dir de forma resumida, lo que el programa hace con el
Numero de Activacion (txtNA): 09822825828488880073387
1. Se toman del txtNA los dos primeros caracteres (09), se carga un 3
y se suman stos dos valores.(12)
2. Se carga (empuja a la pila) el numero uno (1) y se le suma al resultado
anterior quedando el total 13
3. Se carga un 3, y del txtNA se piden 3 caracteres a partir de la
posicion 13, obteniendo el 888. Se carga el 999 y se le restan los 888
y el resultado se divide entre 3. (999-888)/3=37
4. Se vuelve a cargar el 12 del punto 1, se carga un 1, y del txtNA se
pide desde la posicion 12, 1 carcter y obtenemos el 4. Se suma
12+4=16 y se pide del txtNA 4 caracteres a partir de la posicion 16
con lo que obtenemos el 8007. Se carga un 3 y se multiplica por 4.
4X3=12. Al 8007 se le resta 12 =7995
5. Se vuelve a cargar el 12 del punto anterior, se empuja un 1 y se
vuelve a pedir de txtNA el 4 (a partir de 12, 1 carcter). Se carga un
4 y se suman 12+4+4=20. Se vuelve a cargar un 4 y se pide de txtNA
apartir de la posicion 20, 4 caracteres y obtenemos el 3387. Se
carga el 5997 y se le restan 3387=2610. Se carga un 5 y se divide
2610/5=522
6. Se unen los resultados que subray en rojo,pasados a cadena,con
"ConcatStr" quedandonos 377995522
En las siguientes imagenes un resumen visual con los resultados y algunos de
los operandos utilizados.

Bueno, despues de ste tremendo mareo de numeros, se sale de sta rutina


y se vuelve al hilo principal (574F6C) donde en la linea siguiente se hace una
comparacion directa entre dos cadenas.

Las imagenes anteriores son ms que suficientes. Comparacion directa en


tre dos cadenas. Dichas cadenas estan en dos posiciones de memoria
apuntadas en el stack que luego en el visor de la memoria se ven de qu
cadenas se tratan. Los resultados de operar con las cajas de texto. Est
claro que toma el patrn de comparacion ,con las operaciones realizadas en
el txtNA y luego se compara se patron, con las operaciones realizadas con
el txtSerie. El salto condicional de la linea 574F83 BranchF logicamente se
realizar (saltar si es falso) llevandonos fuera y con una patada en el culo.
Es entonces momento de analizar qu tenemos que escribir en el txtNA
para que cuando el programa opere con l, de como resultado 377995522 y
la comparacion resulte exitosa para que nos registre.
Si se observa cmo se piden los caracteres del serial trucho vemos que del
primer bloque de operaciones, nos tendra que resultar 37 y para que so
fuese posible, los tres caracteres que debera tomar seran:
(37x7)-810=-551. Hago las operaciones de la forma inversa a como las hara
el programa para averiguar el numero origen. (810-551)/7=37.
Por lo tanto, tenemos la primera serie de numeros necesarios:551.
En el siguiente bloque, necesitaramos el 7995 y para conseguirlo necesita-

mos lo siguiente.
Desde la posicion 14 se peda 1 carcter y nos devolvi un 6. se 6 se utiliza
ba para pedir 6 caracteres desde la posicion 18. Nos devolva 210. Con los
operandos que tenamos qu necesitamos para obtener 7995? Pues para
empezar, desde la posicion 18 DEBEN haber cuatro caracteres para que el
resultado sea el apropiado. El programa tom desde la posicion 14, un
carcter y tom un 6. Pero si en vez de tomar un 6 tomase un
4(imprescindible),tomar 4 caracteres desde la posicion 18. Sera:
7995+(9X4)=8031. Aqu est: Desde la posicion 18 se tomar 4 caracteres y
se operar con l:8031-(9X4)=7995.
Suponiendo que vayamos sustituyendo el serial trucho tendramos:
123456789098745518031
Ahora necesitamos el resultado 522 y para que sea posible necesitamos:
Volvemos a manejar aqu el 4 imprescindible.
El programa tomaba el 14 , cargaba un 4 y los sumaba (18) y ahora es donde
entra en juego el 4 imprescindible. 18+4=22 y acto seguido se pedir desde
la posicion 22,4 caracteres. Qu caracteres deberan ser? Pues cuatro
caracteres que al restarlos con 4005 y luego el total se divida entre tres
nos d 522, no puede ser otro que el 2439. (4005-2439)/3=522.
El serial trucho se vuelve a modificar de la siguiente manera para que todas
las operaciones se realizen al 100%
1234567890987455180312439
En rojo, los caracteres necesarios para que todo ste puto invento funcione
y su largo completo: 25 caracteres numeros.
Abramos el DocCF original, y en el formulario de registro escribamos la
cifra anterior. Clickamos en registrar y

ste programa me cost bastante. Tengo que reconocerlo.Pero igual


reconozco el enorme merito del programador, por que se lo trabaj
bastante y de una forma ingeniosa.

Mi enhorabuena para l. Fu un reto magnifico.


Les comentaba casi al principio, que puesto en contacto con quien me pidi
ayuda, me di el numero que a l le apareca en su maquina en el formulario
de registro. se numero era el 09324233003495117071762 y segn todos
los calculos realizados, su codigo de registro debe ser el
1234567890416469817311464. Me lo cofirm l despues de enviarle un generador de claves que hice en .NET con el VS2005. Sabiendo cmo se
comporta el programa y conociendo qu cifras debemos obtener, no es
demasiado dificil hacer el generador de claves.

Ah le tienen, que se le introduce el Numero de Identificacion y al clickar en


Generar, tenemos el serial necesario para registrar el programa.
Curiosamente, los 10 primeros digitos del numero generado,permanecen
inalterables sea cual sea la maquina y son numeros de 1 al 0. Bueno, en mi
caso me vino fenomenal empezar as. Siempre empiezo con esa cadena de
numeros.
Seguramente os aburri todo este rollo. Reconozco que P-Code es odioso en
todo el aspecto del traceo. Pero es as.
Para terminar, debo decirles que se trata de un programa comercial. Lo que
leyeron es simplemente para registrar el programa de forma temporal para
que lo puedan probar, pero despues de un tiempo, deben volver a desregistrarse y comprarle el software a su propietario. Por que de lo
contrario, pueden colocar sus fotos en la web del autor. Y el FBI les
perseguir. Y bla bla bla bla......
Para des-registrar el programa, simplemente vayan el registro y busquen lo
siguiente.

DocCF cuando arranca, viene aqu y verifica que el numero de activacion sea
el correcto, y arranca registrado. Con tal que cambien el ltimo numero,

osea, el 9 por un 8 por ejemplo, al no ser ya una cifra correcta, el programa


vuelva a estar des-registrado.
De nuevo le pido al autor del software que no se me enfade. Como ve, ya
avis a los muchachos que se des-registren y que le paguen si quieren usar
su software.........otra cosa es que no me hagan caso.
Amigos, creo que esto se puede dar por finalizado.
Saludos a tod@s y hasta la proxima!!

Sequeyo

You might also like