Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Numeral PDF
Numeral PDF
Monitor de archivos: Programa que sirve para vigilar posibles vínculos con archivos.
Algo parecido al monitor de registro con la diferencia obvia en que este monitorea
archivos ya sea del tipo dato .txt lo que sea. Este tipo de programas es menos útil que
el monitor de registro ya que casi siempre los programas guardan los datos en el
registro de Windows.
EBX: base. No tiene nada que ver con el puntero base. No tiene propósito general y
puede ser usado para almacenar datos.
EDX: datos. Esta es una extensión de EAX. Permite cálculos más complejos como
multiplicar, dividir permitiendo almacenar datos extras para facilitar estos cálculos.
MOV
Descripción: esta instrucción guarda el contenido de “fuente” en “destino”.
Descripción: MOV destino, fuente
Ejemplo: MOV EAX, EDX – guarda el valor del registro EDX en el registro EAX.
MOV EAX, 123h – guarda el valor 123h en el registro EAX.
Operación: variable_destino = variable2_fuente
MOVZX
Descripción: esta instrucción guarda el contenido de “fuente” en “destino” con
extensión cero. Esto es, los bits que no se hayan utilizado de “destino” en la copia
toman el valor de cero.
Sintaxis: MOVZX destino, fuente
Ejemplo: MOVZX EAX, 123h – guarda el valor 123h en el registro EAX y cambia a cero
los bits no utilizados en la operación.
LODSB/LODSW/LODSD
Descripción: esta instrucción guarda un byte (LODSB), palabra (LODSW), o doble
palabra (LODSD) de la dirección DS:ESI en la parte correspondiente del registro EAX.
El registro ESI se extiende o reduce según la longitud de los datos transmitidos y del
“flag” DF.
Sintaxis: LODSB/LODSW/LODSD
Ejemplo: LODSB – guarda un byte de la dirección DS:Esi en el registro AL.
LODSW – guarda una palabra de la dirección DS:ESI en el registro AX.
LODSD – guarda una doble palabra de la dirección DS:Esi en el registro EAX.
REP
Descripción: prefijo de instrucción aplicable a las instrucciones con caracteres
(STOSB, W, D, LODSB, W, D, MOVSB, W, D). Si el prefijo se define antes de una
instrucción, esta instrucción se repetirá y el registro ECX funcionará como contador.
El valor del registro ECX disminuye en uno con cada repetición. La repetición finaliza
cuando el valor del registro ECX llega a cero. En caso de una instrucción REP
condicionada (REPZ, REPNZ), también se comprueba el “flag” ZF.
LOOP
Descripción: esta instrucción permite la construcción de ciclos (también
condicionados utilizando instrucciones LOOP especiales); el registro ECX se utiliza
como contador del número de ciclo. El valor del registro disminuye en uno cada vez
que se ejecuta la instrucción LOOP y, excepto cuando sea cero, realice una bifurcación
a la dirección indicada (en el caso de la instrucción LOOP condicionada, también se
comprueba la condición específica). Cuando el registro ECX sea cero, el proceso
continúa en la instrucción siguiente a LOOP.
Sintaxis: LOOP dirección
Ejemplo: MOV ECX,5
Address: MOV [EAX], ECX
NOP
Descripción: la instrucción NOP (“No Operación”) no ejecuta cierta operación.
Sintaxis: NOP
AND
Descripción: esta instrucción realiza una conjunción lógica (Y lógico) entre “fuente” y
“destino”, bit a bit y guarda resultado en “destino”.
Sintaxis: AND destino, fuente
Ejemplo: AND EAX, EDX – realiza una conjunción lógica entre los valores de los
registros EAX y EDX y almacena el resultado en el registro EAX.
AND EAX, 3Ah – realiza una conjunción lógica entre el valor del registro
EAX y el valor 3Ah; guarda el resultado en el registro EAX.
OR
Descripción: esta instrucción realiza una suma lógica (O lógico) entre “fuente” y
“destino”, bit a bit y guarda resultado en “destino”.
Sintaxis: OR destino, fuente
Ejemplo: OR EAX, EDX – realiza una suma lógica entre los valores de los registros
EAX y EDX y almacena el resultado en el registro EAX.
OR EAX, 3Ah – realiza una suma lógica entre el valor del registro EAX y el
valor 3Ah; guarda el resultado en el registro EAX.
Operación: variable_destino = variable_destino | variable2_fuente
XOR
Descripción: esta instrucción realiza la función lógica de no equivalencia (sum mod
2) entre “fuente” y “destino”, bit a bit y guarda resultado en “destino”. Esta función se
utiliza frecuentemente al codificar datos.
NOT
Descripción: esta instrucción realiza la inversión de todos los bits de “destino” y
guarda resultado en “destino” (constituye su propio complemento).
Sintaxis: NOT destino
Ejemplo: NOT EAX – realiza la inversión del valor de registro EAX y guarda el
resultado en este registro.
TEST
Descripción: al igual que sucedía con AND, TEST realiza una conjunción lógica entre
“fuente” y “destino”. Sin embargo, esta instrucción no guarda el resultado en ninguna
parte (esto es, los valores de “fuente” y “destino” no varían), sólo se utilizan para definir
los “flags” apropiados.
Expositor: Lic. José Antonio Flores Martínez 19
Ingeniería Reversa
A esta instrucción le suele seguir frecuentemente la instrucción de una bifurcación
condicionada.
Sintaxis: TEST destino, fuente
Ejemplo: TEST EAX, EDX – realiza una conjunción lógica entre los valores de los
registros EAX y EDX, también define los “flags” correspondientes según el resultado.
PUSH
Descripción: esta instrucción guarda un valor en la pila
Sintaxis: PUSH valor
Ejemplo: PUSH EAX – guarda el valor de EAX en la pila
POP
Descripción: esta instrucción guarda un valor de la pila en “destino”
Sintaxis: POP destino
Ejemplo: POP EAX – guarda el valor de la pila en el registro EAX
SUB
Descripción: esta instrucción resta “fuente” a “destino” y guarda el resultado en
“destino”.
Sintaxis: SUB destino, fuente
Ejemplo: SUB EAX, EDX – resta el valor del registro EAX a EDX y almacena el valor en
el registro EAX.
Operación: variable_destino = variable_destino – variable2_fuente
JMP
Descripción: instrucción de bifurcación no condicionada que desplaza el control a la
instrucción de la dirección indicada.
Sintaxis: JMP dirección
Ejemplo: JMP 00402000 – desplazamiento del control a la instrucción indicada en la
dirección 00402000.
Bifurcaciones condicionadas
Estas bifurcaciones condicionadas comprueban el valor de uno o más atributos
(“flags”) del registro EFLAGS y según el resultado saltarán o no a una dirección
específica. De estas instrucciones aparecerá detrás de aquellas que definan los
atributos (es decir, CMP). A continuación se enumera una lista de las bifurcaciones
condicionadas básicas:
Herramientas a utilizar:
RDG Packer Detector v0.7.0
OLLyDbg SND
Lo primero que hare es analizar este software con la herramienta RDG Packer
Detector v 0.7.0 2013 para que obtenga información referente al lenguaje de
programación utilizado para el desarrollo de esta aplicación, así mismo conocer si
cuenta este ejecutable con alguna medida de protección para que en base a la
información devuelta por la herramienta tome el procedimiento más adecuado.
Observo que tengo 15 dias a partir del dia en que se realizó la instalación del software,
para utilizarlo antes que caduque y por el momento me permite utilizarlo como un
programa de prueba con la opción Try.
Expositor: Lic. José Antonio Flores Martínez 30
Ingeniería Reversa
Teniendo abierta la herramienta OllyDbg, procedo abrir el ejecutable
CheetahDVDBurner .exe para su análisis y poder localizar el número de serie que me
permita registrar el programa. Para ello pulso el menú File elijo la opción Open y
selecciono el programa en la carpeta donde se instaló y presiono el botón Abrir.
Y woalá, he encontrado los números de serie del programa que permiten registrar el
programa de forma permanente y con todas las funciones completas del mismo, como
si hubiera comprado una licencia de la aplicación.
Recordar que el objetivo de esta presentación fue con fines didácticos y de aprendizaje
en ningún momento exhorto a los alumnos, catedráticos y público en general a
crackear software y venderlos, puesto que esto es un delito grave castigado con prisión,
puesto que esta penado por la ley, por derechos de autor.