
         ------***LOG DUBBER V1.0. Doblador de LOGS por DrK.****------
         ------***(C) KILLERSOFT Iberika 1996-2001**************------

         INDICE:

                1) Introduccion.
                2) Como funciona? y uso.
                3) Limitaciones.
                4) Aplicaciones.               
                5) Notas.
                6) Fallos conocidos.
                7) Creditos.
                8) Agradecimientos.

         -------------------------------------------------------------

1) Introduccion:

       Cuando deseamos implementar un emulador de tarjetas smart-cards
    lo deseable es que tengamos alguna manera de poder depurarlo, ya
    sea debuggeandolo, o bien realizando LOGs para estudiar el compor-
    tamiento de este, o de una tarjeta original. En cualquier caso,
    tener una replica exacta de un completo LOG realizado con un
    emulador y con una tarjeta original, ambas con los mismos datos,
    implica que el mismo emulador sea una replica exacta de la tarjeta
    original, siempre que no se detecte alguna diferencia en ambos
    LOGS. Por otra parte para hacer dichos LOGs lo engorroso es ir
    a la cabina cada vez que necesitamos probar el emulador, y capturar
    el LOG para compararlo posteriormente con la tarjeta original y
    encontrar esa sutil diferencia que hace que la tarjeta original
    funcione en la cabina, y el emulador no.

       Por lo tanto seria deseable poder realizar el proceso de loggear
    el emulador comodamente en casa. Para ello necesitamos:

       - Un interface para comunicarnos con la tarjeta o emulador que
         al menos sea capaz de ejecutar las operaciones que realiza
         la cabina con la misma o mayor velocidad, (Nosotros tenemos
         el lector hardware de tarjetas smartcard de elektron)

       - Las secuencias de pulsos enviadas por la cabina a la tarjeta
         original.Estas secuencias las tenemos en los LOGs que
         previamente se han realizado en una cabina. (nosotros tenemos
         los LOGs de ODT_AON). 

       Con estos resultado y una vez realizado el LOG del emulador
    usando las secuencias de pulsos usadas por la cabina en la tarjeta
    original, y a una velocidad de captura de datos similar, cualquier
    diferencia encontrada ya sea esperada o no, podra ser contrastada
    por el funcionamiento del emulador y el de la tarjeta, y en este
    caso se puede modificar el emulador (ya sea por soft o por hard)
    para eliminar esas diferencias (y en teoria, corregir el funciona-
    miento del emulador de forma que la cabina tendria que admitirlo
    puesto que no seria capaz de distinguir entre emulador y tarjeta
    original).

       LOG DUBBER es una sencilla aplicacion que se puede usar para
    doblar LOGs que sean compatibles ODT_AON. El concepto del doblaje
    de LOGs es similar al concepto del doblaje cinematografico, es
    decir, se conserva una parte util del log (en este caso las lineas
    controladas por la cabina) y se reemplaza la parte que responde a
    la nueva configuracion (en nuestro caso la linea controlada por la
    tarjeta).

2) Como funciona? y uso:

       El funcionamiento de este programa es similar al del logger
    por el puerto paralelo, sin embargo el interface se adapta a la
    arquitectura del lector de elektron. Ademas como solo nos es
    necesario muestrear I/O puesto que RST,CLK y VCC son las mismas
    que las del LOG que nos disponemos a doblar (o duplicar).

       El principal corazon de este programa es un bucle que realiza
    una escritura de los datos de CABINA (RST,CLK,VCC) y posterior-
    mente realiza una lectura de I/O y se guarda en memoria, asi hasta
    que todos los datos del LOG origen han sido pasados a la tarjeta
    a traves del puerto (por lo que el numero de datos desde el log
    origen al destino no cambia).

       A diferencia del lector y el simulador de cabina de elektron,
    como los LOGs realizados en cabina no tenian una restriccion en
    velocidad por software, sin temporizaciones, y como supongo que
    todos los puertos paralelos leen a la misma velocidad, entonces
    no he implementado ningun retardo para calibrar velocidades de
    muestreo, ya que ademas esto limita la velocidad del programa
    haciendo que los LOGs capturados sean demasiado lentos.

       Por otra parte, para ampliar los propositos de mi programa, he
    aadido un retardo relativo, es decir, que a la hora de capturar
    los datos lo haga a la mitad, tercera, cuarta... parte de la
    velocidad maxima del puerto, esto lo hago lellendo 2,3,4... veces
    el mismo dato antes de sacar por el puerto la siguiente muestra
    de los pulsos enviados por la cabina (VCC,RST,CLK), y tomanto solo
    el ultimo de los datos leidos en la lectura de ese mismo pulso. Con
    este retardo relativo, realizando varios LOGs del emulador a dis-
    tintas velocidades (x1,x2,3x...) se puede determinar si el error
    del emulador es caracteristico de su arquitectura, o si el
    funcionamiento esta limitado en cuanto a la velocidad (esto
    pasaria si a x1 falla porque el emulador se come algun pulso de
    la cabina, pero a x2 o a x3 no se diera ese efecto).

       A continuacion se explica como usar el programa:

    Uso:        LOGDUB /P:PORT /M:MULT ORIGEN.LGD DESTINO.LGD

  - PORT        Indica el puerto donde esta instalado el lector de Elektron
                Si PORT es 1..3 se selecciona el puerto LPT1..LPT3
                En otro caso la direccion se pasara numericamente en
                decimal, o en hexadecimal si PORT empieza por 0x.
        
                Este parametro es opcional, y si se omite, se detectan las 
                direcciones de los LPT y usara la primera que encuentre.
  
  - MULT        Indica las veces que se toma una muestra, Esto es util cuando
                el puerto toma los valores demasiado rapido. Es opcional.
  
  - ORIGEN.LGD  Fichero LOG a doblar, compatible con los LOGs de ODT_AON.

  - DESTINO.LGD Fichero LOG doblado, compatible con los LOGs de ODT_AON.


       El uso del comando /P:PORT esta pensado para la gente que tiene
    dificultades en su hardware para detectarlo automaticamente por
    windows, ya que mi programa se busca la vida para encontrar el numero
    de puertos LPT y la direccion fisica de cada uno de ellos.

       Por ejemplo, supongamos que tenemos un equipo, con 3 puertos LPT
    que son 0x378, 0x278, 0x3EB. Windows solo encuentra 2 de los 3 puertos,
    los cuales los llama LPT1 y LPT2. en contra de la mayoria de los
    ordenadores, da la casualidad de que LPT1 esta configurado en 0x278
    y LPT2 esta configurado en 0x3EB desde la BIOS o desde la placa base.

       Asi pues por ejemplo el programa de elektron solo funciona en la
    direccion 0x378 la cual esta configurada por defecto en el programa.
    Por lo tanto habria que conectar el lector al puerto que no ha sido
    detectado via software. Lo peor es que ese puerto 0x378 no exista asi
    que no podriamos usar el lector de elektron en ese ordenador (podria
    pasar).

       Asi que si con tal configuracion, ejecutamos el programa sin
    el parametro /P, el programa diria:

         LOGDUB LOG_128.LGD LOG_128E.LGD

        >LOG DUBBER V1.0. Doblador de LOGS por DrK.
        >(C) KILLERSOFT Iberika 1996-2001
        >
        >Usando factor multiplicador por 1
        >Detectado LPT1, en la direccion 0x278.

       Sin embargo si queremos definir el puerto que usaremos nosotros
    podemos decidir usar LPT2:

         LOGDUB /P:2 LOG_128.LGD LOG_128E.LGD

        >LOG DUBBER V1.0. Doblador de LOGS por DrK.
        >(C) KILLERSOFT Iberika 1996-2001
        >
        >Usando factor multiplicador por 1
        >Usando la direccion 0x3EB como puerto LPT

       Cuando especificamos un puerto que no ha sido detectado como puede
    ser LPT3 pasa esto:

         LOGDUB /P:3 LOG_128.LGD LOG_128E.LGD

        >LOG DUBBER V1.0. Doblador de LOGS por DrK.
        >(C) KILLERSOFT Iberika 1996-2001
        >
        >
        >Advertencia, el puerto LPT3 no existe, usando LPT1
        >Usando factor multiplicador por 1
        >Usando la direccion 0x278 como puerto LPT

       Lo que ha pasado es que al tratar de averiguar la direccion de LPT3
    que debia ser proporcionada por el sistema, se ha encontrado con la
    direccion 0x000 (no valida) y por eso ha procedido a detectar el primer
    puerto que se encontrara.

       Ahora bien, si queremos usar el puerto que nuestro sistema no detecta
    y que esta configurado en cualquier direccion (en nuestro caso el 0x378)
    en ese caso se le pasaria al programa la siguiente linea de comandos:

         LOGDUB /P:0x378 LOG_128.LGD LOG_128E.LGD

        >LOG DUBBER V1.0. Doblador de LOGS por DrK.
        >(C) KILLERSOFT Iberika 1996-2001
        >
        >
        >Usando factor multiplicador por 1
        >Usando la direccion 0x378 como puerto LPT

       Por supuesto, se puede usar cualquier direccion ya sea hexadecimal
    o en decima, de hecho la siguiente linea produce el mismo efecto:

         LOGDUB /P:888 LOG_128.LGD LOG_128E.LGD

       El uso del comando /M:MULT es muy sencillo, ya que si quieres
    capturar el log en modo x2, solo tienes que hacer:

         LOGDUB /M:2 LOG_128.LGD LOG_128E.LGD

        >LOG DUBBER V1.0. Doblador de LOGS por DrK.
        >(C) KILLERSOFT Iberika 1996-2001
        >
        >Usando factor multiplicador por 2
        >Detectado LPT1, en la direccion 0x278.

       Para modo x3,x4,x5... hay que sustituir MULT por el numero de
    modo correspondiente.


       Tanto /P como /M son optativas y se pueden obviar, ademas pueden
    ponerse en cualquier orden, pero es importante QUE LAS OPCIONES
    SIEMPRE VAYAN ANTES QUE LOS NOMBRES DE LOS FICHEROS ya que en caso
    contrario el programa no funciona. Tambien es necesario poner los
    dos puntos antes del valor de cada parametro.

3) Limitaciones:


       Las dos limitaciones mas severas en cuanto a realizar LOGs de
    las tarjetas directamente desde el hardware de lector de elektron
    son precisamente, usar ese hardware, las limitaciones de este
    y la topologia de los logs, y la segunda, viene determinada por
    la frecuencia de muestreo, la cual al no ser todo lo alta que
    quisieramos, nos haria perder detalles (pulsos que fueran mas
    cortos que el periodo de muestreo). En cuanto a la primera limitacion
    consta de que como la cabina antes de accionar la tarjeta, es capaz de
    manterner la linea I/O a cero, pero nuestro lector no lo puede hacer
    puesto que cuando la tarjeta no interviene en I/O, esta linea siempre
    esta inactiva (a 1), esta es una diferencia en los logs que no se
    puede evitar al menos sin hacer un cambio en el hardware. Ademas, en
    los pulsos registrados en los logs del tipo ODT_AON, no se puede
    saber ciertamente en que momento la cabina deja de actuar sobre I/O
    y comienza a hacerlo la tarjeta, por lo tanto se necesitaria cambiar
    el formato de los logs y del logger.

      Este programa realiza calculos a titulo orientativo respecto a la
    velocidad de adquisicion de los datos del puerto y para hacer una
    comparacion de como son de orientativos los calculos, tambien se
    realiza una estimacion de la velocidad del ordenador para que el
    usuario pueda comparar la bondad de la medicion de tiempos (debido
    a la asignacion de prioridades de la multitarea de windows). La
    comparacion que realiza el programa sobre el tipo de procesador es
    absolutamente falsa y ha sido incluida a titulo jocoso por lo que
    no debe originar ninguna preocupacion al respecto.

      Este programa necesita al menos un pentium, con al menos tanta
    memoria libre como sea de grande el log a duplicar, tanto en RAM
    como en disco. Aconsejable que el pentium posea una velocidad
    mayor a 300MHz


4) Aplicaciones:


       Las aplicaciones de este doblador de logs, son las descritas
    anteriormente, las cuales se resumen:
         
         - Permite depurar los pulsos del emulador sin tener que ir cada
    vez a la cabina a hacer un LOG.

         - Permite encontrar fallos en la emulacion que de otra manera
    no serian posibles de encontrar.

         - Permite contrastar los datos de varias tarjetas y varios
    emuladores y ver como funcionan. Util para el aprendizaje.

         - Junto con un EDITOR de LOGs (el cual estoy planeando hacer)
    el programa es muy potente ya que nos permite configurar nuestros
    propios estimulos y presentarlos a la tarjeta original para ver
    que detalles pormenorizados presenta esta que puedan ser utiles
    para emular la tarjeta a la perfeccion.


5) Notas:

       Como todos sabeis, que somos buenos chicos y que solamente nos
    movemos con el fin de investigar el funcionamiento completo del
    sistema de smartcards utilizado en las cabinas en la actualidad,
    este apartado es necesario incluirlo para alertar a las personas que
    tengan en mente usar ese programa para otros propositos que no
    sean la investigacion cientifica y tecnologica.

    NOTA 1: Este programa y todas las referencias directas o indirectas
    a este, entendiendose como indirectas aquellas aplicaciones que
    por sus cualidades las hace idoneas para ser realizadas con dicho
    programa, tienen el unico e inalterable fin educativo, y por ello
    todo uso o proposito del usuario de este programa que quede fuera de
    este fin, queda exento de responsabilidad por parte del desarrollador
    de este programa y por lo tanto la responsabilidad unica y exclusiva
    del uso del programa recae en el usuario final que debera afrontar
    todas las consecuencias de su uso ya que en esta nota se comunica
    explicitamente al usuario el objetivo de dicho programa y por lo
    tanto queda complentamente advertido.

    NOTA 2: Tanto KILLERSOFT, como DrK, como Elektron, como ODT_AON
    no son marcas registradas, pero sus propietarios se enfadaran mucho
    si dichas marcas son referenciadas sin sus consentimientos.
    MS WINDOWS es marca registrada y por ello hay que mencionarlo aqui.
    TELEFONICA tambien es marca registrada.

    NOTA 3: El realizador de este programa queda exento de responsabilidad
    ante cualquier desperfecto o accion no deseada que cause dicho
    programa en el sistema informatico final, a menos que se demuestre
    que dicha accion ha sido provocada expresamente por voluntad de
    dicho realizador.

    NOTA 4: Esta nota se autodestruira en 5 segundos a menos que dicha
    nota no posea un sistema de destruccion automatico.

6) Fallos conocidos:

    Por el momento, esta es la version 1.0, la primera que he desarrollado
    y no he observado ninguna anomalia seria. Es posible que si no se
    respetan las reglas de la linea de comandos salgan cosas inesperadas,
    como por ejemplo si usas Ax en lugar de 0x para introducir numeros
    en hexadecimal, el numero introducido se tomara como A siendo A un
    numero entre 1 y 9.

    Si encontrais algun problema en el funcionamiento, ruego que me lo
    hagais saber enviandome un e-mail para que pueda ser corregido en la
    nueva version.

    No incluyo el codigo fuente, por 2 razones, la primera es que el codigo
    esta muy poco legible y marea mucho (es que suelo hacer cosas raritas
    cuando programo) y la segunda es que no utiliza una sintaxis C ANSI por
    lo que habria que modificarlo para que pudiera ser compilado por otros
    compiladores de Windows 32 bits, como son el VC++ o el Borland C++.

    De todas formas si os interesa alguna parte del codigo hacedmelo saber
    y os pasare las lineas correspondientes (si ademas puedo, las podria
    comentar).

7) Creditos:

    -LOG DUBBER Version 1.0 ha sido programado por DrK (AKA DrK3055A).
     e-mail: drk@telekards.cjb.net

    -Los logs de ODT_AON han sido realizados por ODT_AON.

    -El lector de Elektron ha sido programado y realizado por The Elektron.
     e-mail: TheElektron@yahoo.es

8) Agradecimientos:

     El problema es que hay tanta gente metida en esto de los emuladores
    que poner aqui una lista de nombres, seria un poco injusto puesto que
    por mas nombres que pusiera siempre me dejaria alguno, asi pues
    agradecer en general a todo el mundo sus aportaciones en este campo
    y por mantener vivo el espiritu de investigacion y aprendizaje. Para
    todos aquellos que estan aprendiendo electronica a partir de este tema
    gracias porque vosotros haceis que todo esto que hago merezca la pena
    hacerlo.



