Problemilla con un trial.

Iniciado por nemus, 27 Agosto 2010, 13:58 PM

0 Miembros y 4 Visitantes están viendo este tema.

nemus

#20
Elegante, elegante!  :o :o

Con solo modificar 5 lineas, has conseguido en esta versión lo que necesite tropecientos JMP en la versión anterior para ver algo de luz. Y como no, con los JMPs llegaron las excepciones (Ctrl+F9)  ;D, muy chapucero pero por las pruebas que realicé parecía funcional. La oscuridad la controle como explique anteriormente controlando la escritura de la clave MSNetOLE5. No dejando que el programa encendiera su bit.

Con tu enfoque y la nueva versión me he enloquecido debido al Hardware BP saltarin que me ha salido. Para darme una satisfacción he instalado un XP en la maquina virtual, instalando la nueva versión del programa. Con XP y nueva instalación el saltarin se ha tranquilizado. Supongo que alguna otra protección habré activado para que me suceda esto en Vista. :-\

Realizada las modificaciones que me has enseñado, el programa funciona a la perfección y sin excepciones (Ctrl+F9)  ;-)

Si no es mucha molestia me gustaría me explicases como llegaste a descubrir el apartado:

Cita de: LSL en 21 Septiembre 2010, 03:42 AM
buscado porqué deshabilita ciertas opciones, traceando he llegado hasta la siguiente función, donde se encuentra la madre del cordero, aunque este sea un programa para cerdilandia.  ;D

009BB8F4 >/$  55            PUSH EBP
009BB8F5  |.  8BEC          MOV EBP,ESP
009BB8F7  |.  8B45 08       MOV EAX,DWORD PTR [EBP+8]
009BB8FA  |.  8378 08 01    CMP DWORD PTR [EAX+8],1
009BB8FE  |.  75 04         JNZ SHORT 009BB904
009BB900  |.  B0 01         MOV AL,1
009BB902  |.  5D            POP EBP
...

si AL sale con 1 oculta ciertas opciones. (es un lujo para la vista tenerlo todo habilitado).

------------------------------------------------------------------
Comparando, he visto que existen algunas partes importantes ocultas:

*Fichero --- Opciones Configuración:
+- Configuración
        Validación de datos (mostrado)
        Ordenador de Mano (oculto)
        Seguimiento Actividad (mostrado)
        Filtros (oculto)

*Informes --- Centro de Informes: Debajo del botón abrir faltan varios botones "Diseño, Nuevo y Nuevo Planning"
-------------------------------------------------------------------

¿Para mostrar las opciones ocultas seria elegante nopear los siguientes saltos?

00A66E51  |.  74 66         JE SHORT ramat.00A66EB9
00A66E53  |.  6A 00         PUSH 0
00A66E55  |.  6A 00         PUSH 0
00A66E57  |.  6A 16         PUSH 16
00A66E59  |.  66:C785 44FFF>MOV WORD PTR SS:[EBP-BC],8C
00A66E62  |.  68 9321E800   PUSH ramat.00E82193          ;  ASCII "Ordinador Ma"
...
00A66F97  |. /74 66         JE SHORT ramat.00A66FFF
...
00A67077  |. /0F84 CC000000 JE ramat.00A67149
...
00A676B2  |. /74 66         JE SHORT ramat.00A6771A
...
00A67726  |. /74 66         JE SHORT ramat.00A6778E
...





Por cierto, tomad precauciones con el saltarin (sigo en su búsquedal).

LSL: gracias por tu tiempo y enseñanza.


LSL

Cita de: nemus en 21 Septiembre 2010, 13:13 PM
------------------------------------------------------------------
Comparando, he visto que existen algunas partes importantes ocultas:

*Fichero --- Opciones Configuración:
+- Configuración
Validación de datos (mostrado)
Ordenador de Mano (oculto)
Seguimiento Actividad (mostrado)
Filtros (oculto)

*Informes --- Centro de Informes: Debajo del botón abrir faltan varios botones "Diseño, Nuevo y Nuevo Planning"
-------------------------------------------------------------------

¿Para mostrar las opciones ocultas seria elegante nopear los siguientes saltos?

00A66E51 |. 74 66 JE SHORT ramat.00A66EB9
00A66E53 |. 6A 00 PUSH 0
00A66E55 |. 6A 00 PUSH 0
00A66E57 |. 6A 16 PUSH 16
00A66E59 |. 66:C785 44FFF>MOV WORD PTR SS:[EBP-BC],8C
00A66E62 |. 68 9321E800 PUSH ramat.00E82193 ; ASCII "Ordinador Ma"
...
00A66F97 |. /74 66 JE SHORT ramat.00A66FFF
...
00A67077 |. /0F84 CC000000 JE ramat.00A67149
...
00A676B2 |. /74 66 JE SHORT ramat.00A6771A
...
00A67726 |. /74 66 JE SHORT ramat.00A6778E
...





Por cierto, tomad precauciones con el saltarin (sigo en su búsquedal).

LSL: gracias por tu tiempo y enseñanza.


Las gracias no se merecen, estamos para ayudarnos siempre que podamos.

lo de nopear los saltos, siempre que sea el resultado definitivo tambien quedan "elegantes", pero si para que se produzca ese salto, previamente hay una comparación que es producto del resultado que devuelve una función llamada por un call, quizas es mas conveniente entrar en ese call y modificar el codigo de la función para que siempre nos devuelva el valor deseado por ejemplo en AL, EAX, una constante, etc, que normamente es la que se compara a la vuelta para que se produzca el salto condicional. Con esto quizas solo con cambiar un byte ó unos cuantos, en vez de nopear un moton de saltos por todo el programa, por que hay programas que llaman a una misma función cientos de veces. (es cuestión de buscar siempre que con un solo disparo caigan mas de un pajaro).
Saludos.

LSL.

nemus

#22
Pequeño retroceso   :-\, con la restauración de la base de datos, o con los NOPs añadidos citados en los anteriores mensajes, o por algún contador de apertura del programa, lo cierto es que han desaparecido algunas partes del menú:

Los NOPs añadidos son (personalmente, creo que no son culpables de activar la nueva protección):


Cita de: nemus en 21 Septiembre 2010, 13:13 PM

¿Para mostrar las opciones ocultas seria elegante nopear los siguientes saltos?

00A66E51 |. 74 66 JE SHORT ramat.00A66EB9
...
00A66F97 |. /74 66 JE SHORT ramat.00A66FFF
...
00A67077 |. /0F84 CC000000 JE ramat.00A67149
...
00A676B2 |. /74 66 JE SHORT ramat.00A6771A
...
00A67726 |. /74 66 JE SHORT ramat.00A6778E
...



Han desaparecido del menú "Ficheros":
---------------------------
Reconstruir Base de Datos     (Visible)
Crear Copia Seguridad           (Invisible)
Recuperar Copias Seguridad   (Invisible)

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


También han desaparecido en "Informes --- Centro de Informes":
Debajo del botón "Abrir" faltan los botones "Diseño, Nuevo y Nuevo Planning"


¿Alguna sugerencia? no consigo que aparezca ni el menú, ni los botones.




nemus

Siguiendo con el tema de la desaparición de apartados en el menú principal del programa he observado que se produce al superar la fecha límite del periodo de pruebas (60 días).

Con la solución a la limitación de 60 días presentada por LSL, la cual proporciona una usabilidad del 90% de las funciones de la versión FULL, nos encontramos que algunas de las partes como la visibilidad total del menú no se superan.

He intentado superar la limitación de la ocultación del menú:

Rastreando el API SetMenu, que me parece es la encargada de mostrar el menú en el programa. Presuponía que pudiera haber varios menús dependiendo del estado del programa. No ha habido resultados satisfactorios.

Una ayudita, otro enfoque, please.

Thanks.



LSL

1.

009B40E1  |>  84C0          TEST AL,AL
009B40E3  |.  0F95C0        SETNE AL                                 
009B40E6  |.  83E0 01       AND EAX,1


.modificado

009B40E1  |> \84C0          TEST AL,AL
009B40E3  |.  0F94C0        SETE AL
009B40E6  |.  83E0 01       AND EAX,1




2.

00B08CCA  |.  84C0          TEST AL,AL
00B08CCC  |.  74 27         JE SHORT 00B08CF5                       
00B08CCE  |.  8B4D FC       MOV ECX,DWORD PTR [EBP-4]


.modificado

00B08CCA  |.  84C0          TEST AL,AL
00B08CCC  |.  EB 27         JMP SHORT 00B08CF5               
00B08CCE  |.  8B4D FC       MOV ECX,DWORD PTR [EBP-4]




3.

009B4269      8990 AC000000             MOV DWORD PTR [EAX+AC],EDX
009B426F      8B4D 08                   MOV ECX,DWORD PTR [EBP+8]
009B4272      F681 AC000000 04          TEST BYTE PTR [ECX+AC],4
009B4279      74 51                     JE SHORT 009B42CC


.modificado

009B4269      C780 AC000000 04000000    MOV DWORD PTR [EAX+AC],4
009B4273      90                        NOP
009B4274      90                        NOP
009B4275      90                        NOP
009B4276      90                        NOP
009B4277      90                        NOP
009B4278      90                        NOP
009B4279      90 51                     JMP SHORT 009B42CC




4.

00415DB6  |.  DFE0                      FSTSW AX
00415DB8  |.  9E                        SAHF
00415DB9      0F97C0                    SETA AL                           
00415DBC  |.  83E0 01                   AND EAX,1


.modificado

00415DB6  |.  DFE0                      FSTSW AX
00415DB8  |.  9E                        SAHF
00415DB9      33C0                      XOR EAX,EAX
00415DBB      90                        NOP
00415DBC  |.  83E0 01                   AND EAX,1




5.

009B3F79  |.  80B8 C8000000 00          CMP BYTE PTR [EAX+C8],0
009B3F80      75 04                     JNZ SHORT 009B3F86
009B3F82  |.  33C0                      XOR EAX,EAX


.modificado

009B3F79  |.  80B8 C8000000 00          CMP BYTE PTR [EAX+C8],0
009B3F80      EB 04                     JMP SHORT 009B3F86
009B3F82  |.  33C0                      XOR EAX,EAX




6.

009BB8FA      8378 08 01                CMP DWORD PTR [EAX+8],1
009BB8FE      75 04                     JNZ SHORT 009BB904
009BB900      B0 01                     MOV AL,1


.modificado

009BB8FA      8378 08 01                CMP DWORD PTR [EAX+8],1
009BB8FE      90                        NOP
009BB8FF      90                        NOP
009BB900      B0 00                     MOV AL,0




7.

00A6CF15      84C0                      TEST AL,AL
00A6CF17  |.  74 40                     JE SHORT 00A6CF59
00A6CF19  |.  8B4D FC                   MOV ECX,DWORD PTR [EBP-4]
00A6CF1C  |.  8B81 4C030000             MOV EAX,DWORD PTR [ECX+34C]


.modificado

00A6CF15      84C0                      TEST AL,AL
00A6CF17  |.  EB 40                     JMP SHORT 00A6CF59
00A6CF19  |.  8B4D FC                   MOV ECX,DWORD PTR [EBP-4]
00A6CF1C  |.  8B81 4C030000             MOV EAX,DWORD PTR [ECX+34C]




8.

009B47DB      0F95C0                    SETNE AL
009B47DE      83E0 01                   AND EAX,1


.modificado

009B47DB      33C0                      XOR EAX,EAX
009B47DD      40                        INC EAX
009B47DE      90                        NOP
009B47DF      90                        NOP
009B47E0      90                        NOP




9.

00A795E2  |.  84C0                      TEST AL,AL
00A795E4  |.  74 0A                     JE SHORT 00A795F0
00A795E6  |.  B2 01                     MOV DL,1


.modificado

00A795E2  |.  84C0                      TEST AL,AL
00A795E4      EB 0A                     JMP SHORT 00A795F0
00A795E6  |.  B2 01                     MOV DL,1





Saludos.

LSL.

MCKSys Argentina

@LSL: Si sigues asi, vas a crear tu propia version del ejecutable!
:xD :xD :xD
MCKSys Argentina

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


LSL

de full, está pasando ha pasado a ¡¡¡requetefull!!!

;D
Saludos.

LSL.

nemus

@LSL: Muy a mi pesar, observando las molestias que te estas tomando con este post para ayudarme y enseñarme, siento comunicarte que en las últimas modificaciones presentadas se han solucionado algunos apartados, pero han empeorado otros:

Apartados solucionados:
Aparecen de nuevo los botones "Diseño, Nuevo, y Nuevo Planning" en: Informes --- Centro de Informes.
Aparecen las opciones ocultas del menú: Opciones --- Configuración:  Ordenador de Mano, ...

Apartados empeorados:
En el menú principal ha desaparecido el apartado:
"...   Animales   Granja   Informes   ..." 

y con ello las funciones de su submenú, entre estas funciones destacaría "Entrada Eventos". La cual tiene un acceso directo en la barra de iconos, icono también desaparecido a raíz de las últimas modificaciones. El icono del acceso se encuentra situado entre:
" ...    Engorde    Entrada Eventos    Informes   ...  "

Apartados que siguen sin solucionarse:
Pasado el período de prueba (60 días) desaparecen del menú:
  Fichero ---
     Reconstruir Base de Datos
     Crear Copia Seguridad
     Recuperar Copias Seguridad


Pasado la fecha máxima de uso (15/2/2011) no arranca el programa.

Saludos,


:) Betatester :)

nemus

#28
Debido a la cuantía de limitaciones y marcas de protección del programa. Creo importante recapitular para priorizar la solución de las limitaciones:

Recapitulando:

El programa tiene 3 estadios de vida:
  A.   Modo Evaluación (FULL 90%):
     1. Entra en este estadio, el primer día que se instala cualquier versión del programa activandose el
         Modo Evaluación y permanece en el hasta entrar en Modo Gratuito.
       
  B.   Modo Gratuito     (FULL 15%),
     1. Abandona el Modo Evaluación y entra al Modo Gratuito a partir de la restauración de una copia
        de seguridad de una anterior versión y permanece en el hasta entrar en Modo Cierre.
     2. Abandona el Modo Evaluación y entra al estadio Gratuito a partir de los 60 días de la instalación del
         programa y permanece en el hasta entrar en Modo Cierre.
   
  C.   Modo Cierre        (FULL 0%),
     1. Abandona el estadio Gratuito y entra al estadio Cierre a partir de superar la fecha máxima de uso,
         el día 16/2/2011.





Intentando aplicar Lógica Inversa:
       
  1.   Evitar entrar en Modo Gratuito. El programa entra al Modo Gratuito cuando ocurren uno de los dos
       sucesos siguientes:
     1.1. Cuando se carga una base de datos creada mediante la copia de seguridad de una anterior versión
           del programa.
     1.2. Cuando pasan 60 días de la instalación del programa.

  Enfoques a las limitaciones del Modo Gratuito:
     1.1. Restaurada y cargada una base de datos de la versión anterior. Se barajan varios enfoques para
           su solución:
        1.1.1. Obligando a cargar al programa su versión mas completa. La que se identifica como Studio. Con
                 este enfoque el programa habrá cambiado al Modo Gratuito y la limitación de este modo
                 consiste en ocultar gran parte de funciones. Algunas de las funciones de esta versión permanecen
                 ocultas en este modo. Sera necesario activarlas aparte. (ver solución. 1.1.1.)
        1.1.2. Detectar la comparación de fechas mientras se realiza la restauración de la base de datos y evitar
                 el salto de estadio a Modo Gratuito. En este caso el programa permanecería en Modo
                 Evaluación con la mayoría de sus funciones visibles. (Quizá la mejor opción, pero mas difícil
                 de conseguir).


  2.   Evitar entrar en Modo Cierre. Es decir, evitar que se cierre el programa. Esto ocurre:
     2.1. Cuando el programa se carga con fecha igual o superior a 16/2/2011

  Enfoques a las limitaciones del Modo Cierre:
        2.1.1. Detectar la comparación de fechas y y evitar el salto de estadio a Modo Cierre.
        2.1.2. Cargar en Modo Gratuito (fecha anterior al 16/2/2011), y a partir de la comparación de fechas
                 anotar los saltos correctos que realiza en su función inmediata, para luego adelantar la fecha a
                 16/2/2011 y modificar los saltos que no se avengan con los anotados anteriormente. (ver solución.
                 2.1.2)


  3.   Activar algunas opciones ocultas y solo visibles para la versión Profesional para ser 100% FULL. Decir que
       cuando se carga la versión Profesional el programa carga menor numero de funciones que con la versión
       Studio. Pero la versión profesional trae algunas funciones aparte que se pueden activar para la versión
       Studio. (ver solución. 3.1.1.)






Intentando aplicar Ingeniería Inversa (Soluciones):

1.1.1. @LSL:
          Obligar a cargar al programa la versión mas completa
              009B4267  |.  33D2                            XOR EDX,EDX
              009B4269  |.  8990 AC000000           MOV DWORD PTR [EAX+AC],EDX
              009B426F  |>  8B4D 08                    MOV ECX,DWORD PTR [EBP+8]
              009B4272  |.  F681 AC000000 04      TEST BYTE PTR [ECX+AC],4
              009B4279      74 51                       JE SHORT 009B42CC

             
              modificar

              009B4267  |.  33D2                                 XOR EDX,EDX
              009B4269      C780 AC000000 04000000   MOV DWORD PTR [EAX+AC],4
              009B4273      90                                      NOP
              009B4274      90                                      NOP
              009B4275      90                                      NOP
              009B4276      90                                      NOP
              009B4277      90                                      NOP
              009B4278      90                                      NOP
              009B4279      EB 51                                 JMP SHORT 009B42CC




       @LSL:
               Muestra parte de los iconos ocultados por el Modo Gratuito

              009BB900  |.  B0 01   MOV AL,1   modificar   009BB900  |.  B0 00   MOV AL,0
              009BB927  |.  B0 01   MOV AL,1   modificar   009BB927  |.  B0 00   MOV AL,0
              009BB942  |.  B0 01   MOV AL,1   modificar   009BB942  |.  B0 00   MOV AL,0


                Otra Opción:
              009BB8FE  |. 75 04    JNZ SHORT 009BB904
              009BB900  |.  B0 01   MOV AL,1
 
                 modificar   
              009BB8FE  |.  90       NOP
              009BB900  |.  B0 00   MOV AL,0




       @LSL:
               Muestra Botones de Informes---Centro Informes: (Abrir, Diseño, Nuevo, Nuevo Planing)

               009B40E3  |.  0F95C0   SETNE AL   modificar   009B40E3  |.  0F94C0   SETE AL
               00405AA5  |.  74 30  JE SHORT 00405AD7   modificar   00405AA5  |.  EB 30  JMP SHORT 00405AD7



        @nemus:
               Muestra las opcions de: Opciones – Configuración

              00A66E51 |.  74 66  JE SHORT 00A66EB9     modificar  00A66E51  |.  75 66   JNZ SHORT 00A66EB9
              00A66F97 |.  74 66  JE SHORT 00A66FFF      modificar  00A66F97 |.  75 66   JNZ SHORT 00A66FFF
              00A67077 |.  0F84   CC000000 JE 00A67149 modificar  00A67077  |.  0F85 CC000000 JNZ 00A67149
              00A676B2 |.  74 66  JE SHORT 00A6771A     modificar  00A676B2  |.  75 66  JNZ SHORT 00A6771A
              00A67726 |.  74 66  JE SHORT 00A6778E     modificar   00A67726  |.  75 66  JNZ SHORT 00A6778E




        @nemus:
               Muestra las pestañas de: Informes --- Centro de Informes

             0064C6C3  |. 74 66  JE SHORT 0064C70F modificar 0064C6C3  |. EB 4A JMP SHORT 0064C70F



2.1.2.    @nemus
                Evita entrar en Modo Cierre
              009B3949 |.  0F84     2601000    JE 009B3A75
              modificar
              009B3949 |.  E9  27010000    JMP 009B3A75
              009B394E |.  90         NOP


              009B3D34 |.  0F85  C2000000    JNZ 009B3DFC
              modificar
              009B3D34 |.  E9  C3000000    JMP 009B3DFC
              009B3D39 |.  90            NOP

               
               00406BC9 |. 90 0F8D 8B010000  JGE 00406D5A
               modificar
               00406BC9 |. E9 8C010000  JMP 00406D5A
               00406BCE |. 90                NOP





3.1.1. @nemus:
               Muestra otros informes de la versión profesional
             0040EB97 JNZ 0040ECE0
             modificar
             0040EB97  |. /E9 44010000   JMP 0040ECE0 ramat.0040ECE0
             0040EB9C  |? |90                NOP




Recapitulando ...

tena

Tiene mas cirujia que la graciela alfano :))))


Cita de: LSL en 30 Septiembre 2010, 00:25 AM
1.

009B40E1  |>  84C0          TEST AL,AL
009B40E3  |.  0F95C0        SETNE AL                                 
009B40E6  |.  83E0 01       AND EAX,1


.modificado

009B40E1  |> \84C0          TEST AL,AL
009B40E3  |.  0F94C0        SETE AL
009B40E6  |.  83E0 01       AND EAX,1




2.

00B08CCA  |.  84C0          TEST AL,AL
00B08CCC  |.  74 27         JE SHORT 00B08CF5                       
00B08CCE  |.  8B4D FC       MOV ECX,DWORD PTR [EBP-4]


.modificado

00B08CCA  |.  84C0          TEST AL,AL
00B08CCC  |.  EB 27         JMP SHORT 00B08CF5               
00B08CCE  |.  8B4D FC       MOV ECX,DWORD PTR [EBP-4]




3.

009B4269      8990 AC000000             MOV DWORD PTR [EAX+AC],EDX
009B426F      8B4D 08                   MOV ECX,DWORD PTR [EBP+8]
009B4272      F681 AC000000 04          TEST BYTE PTR [ECX+AC],4
009B4279      74 51                     JE SHORT 009B42CC


.modificado

009B4269      C780 AC000000 04000000    MOV DWORD PTR [EAX+AC],4
009B4273      90                        NOP
009B4274      90                        NOP
009B4275      90                        NOP
009B4276      90                        NOP
009B4277      90                        NOP
009B4278      90                        NOP
009B4279      90 51                     JMP SHORT 009B42CC




4.

00415DB6  |.  DFE0                      FSTSW AX
00415DB8  |.  9E                        SAHF
00415DB9      0F97C0                    SETA AL                           
00415DBC  |.  83E0 01                   AND EAX,1


.modificado

00415DB6  |.  DFE0                      FSTSW AX
00415DB8  |.  9E                        SAHF
00415DB9      33C0                      XOR EAX,EAX
00415DBB      90                        NOP
00415DBC  |.  83E0 01                   AND EAX,1




5.

009B3F79  |.  80B8 C8000000 00          CMP BYTE PTR [EAX+C8],0
009B3F80      75 04                     JNZ SHORT 009B3F86
009B3F82  |.  33C0                      XOR EAX,EAX


.modificado

009B3F79  |.  80B8 C8000000 00          CMP BYTE PTR [EAX+C8],0
009B3F80      EB 04                     JMP SHORT 009B3F86
009B3F82  |.  33C0                      XOR EAX,EAX




6.

009BB8FA      8378 08 01                CMP DWORD PTR [EAX+8],1
009BB8FE      75 04                     JNZ SHORT 009BB904
009BB900      B0 01                     MOV AL,1


.modificado

009BB8FA      8378 08 01                CMP DWORD PTR [EAX+8],1
009BB8FE      90                        NOP
009BB8FF      90                        NOP
009BB900      B0 00                     MOV AL,0




7.

00A6CF15      84C0                      TEST AL,AL
00A6CF17  |.  74 40                     JE SHORT 00A6CF59
00A6CF19  |.  8B4D FC                   MOV ECX,DWORD PTR [EBP-4]
00A6CF1C  |.  8B81 4C030000             MOV EAX,DWORD PTR [ECX+34C]


.modificado

00A6CF15      84C0                      TEST AL,AL
00A6CF17  |.  EB 40                     JMP SHORT 00A6CF59
00A6CF19  |.  8B4D FC                   MOV ECX,DWORD PTR [EBP-4]
00A6CF1C  |.  8B81 4C030000             MOV EAX,DWORD PTR [ECX+34C]




8.

009B47DB      0F95C0                    SETNE AL
009B47DE      83E0 01                   AND EAX,1


.modificado

009B47DB      33C0                      XOR EAX,EAX
009B47DD      40                        INC EAX
009B47DE      90                        NOP
009B47DF      90                        NOP
009B47E0      90                        NOP




9.

00A795E2  |.  84C0                      TEST AL,AL
00A795E4  |.  74 0A                     JE SHORT 00A795F0
00A795E6  |.  B2 01                     MOV DL,1


.modificado

00A795E2  |.  84C0                      TEST AL,AL
00A795E4      EB 0A                     JMP SHORT 00A795F0
00A795E6  |.  B2 01                     MOV DL,1