Aprende el arte de la ingeniería inversa

Slides:



Advertisements
Presentaciones similares
Instrucciones de operación sobre datos
Advertisements

REGISTROS INTERNOS DEL PROCESADOR.
CLASE 3 SOFTWARE DEL MICROPROCESADOR
TEMA 2 Arquitectura de un Ordenador
Integrantes: Moyolehuani Tatéi Temai
Fermín Sánchez Carracedo Universitat Politècnica de Catalunya
No. Lista 31 Teresita Ramírez Uribe HORA: 8:00-9:00AM.
N.L 32 ROMERO HERNÁNDEZ GABRIELA VERÓNICA. HORA: 8:00-9:00AM ESQUELETO DE UN PROGRAMA EN ENSAMBLADOR.
Introducción al lenguaje ensamblador
SEMANA 9_2.
3. INTRODUCCIÓN A LA PROGRAMACIÓN
Programación en Lenguaje Ensamblador.
Arquitectura de Conjunto de Instrucciones (ISA)
METODOLOGIA DE LA PROGRAMACION
PROG. EN ENSAMBLADOR Ing. Pablo Cesar Tapia Catacora.
Composición Interna de un Procesador
SEMANA 05_2.

Lenguaje Ensamblador integrantes: Esthela Vianey Vázquez Medina No.30
Arquitectura del Computador
ISA (Instruction Set Architecture)
MODOS DE DIRECCIONAMIENTO No. Lista 21 7am Rivas chacón Ana cristina
MODOS DE DIRECCIONAMIENTO

Arquitectura del 8086/8088 El 8086 Arquitectura de computadoras II
Introducción al lenguaje ensamblador
Tema 2: INTRUCCIONES Profesor: Carlos Concha S LENGUAJES DE BAJO NIVEL.
2.2 Registro de Banderas Conjunto de bits que nos dan información sobre el estado del procesador y sobre el resultado de la última operación efectuada.
Unidad 2: Organización del CPU
MODOS DE DIRECCIONAMIENTO
El programa Debug.

Programa Vespertino de Automatización Equipos y Sistemas de Control Digital Lenguaje C Profesor: Felipe Páez Mejías D e p a r t a m e n t o d e I n g e.
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 13.
Arquitectura del 8086/8088 TEEL 4011
Conceptos Arquitectónicos del computador
IPN Escuela Superior de Cómputo MICROPROCESADORES II.
Lenguaje de Programación cap. 1 Estructura del Computador.
Microprocesador (80X86) Universidad Nacional de Ingeniería
Introducción al lenguaje ensamblador
Tema 1: DATOS Y REGISTROS
Unidad I: Registros e Interrupciones Facilitador: Ing. Eduardo Brando.
Microcomputadores Prof: Tatiana Marín R.. Lenguaje máquina = lenguaje binario InstrucciónLenguaje máquina (binario)OP ( hex)Nemónico Restar F0SUB.

Programación Básica con “NQC” Pedro F. Toledo – Patricio Castillo 13/05/2006.
introducción al Lenguaje Ensamblador
Microprocesador (8086) Universidad Nacional de Ingeniería
Introducción al lenguaje ensamblador

PROGRAMACION A BAJO NIVEL
Sistemas Operativos Ensamblador. Junio de 2005Cesar Guisado2 Ventajas del Ensamblador La primera razón para trabajar con ensamblador es que proporciona.
Metodología de la programación
Capítulo 4 CPU y la memoria.
ESCUELA NORMAL “PROF. DARÍO RODRÍGUEZ CRUZ” Licenciatura en educación preescolar Alumnas: *Mayra * Monserrat * Idalia *Cinthia Curso: las TIC en la educación.
SEMANA 01_2.
TEMA : ARQUITECTURA DE COMPUTADORAS
introducción al Lenguaje Ensamblador
Fundamentos de Programación
Es un tipo especial de software que nos permite *Crear *Desarrollar *Programar otras aplicaciones. Haciendo uso de sus conocimientos lógicos y lenguajes.
CONJUNTO DE INSTRUCCIONES Maquinas Digitales
Curso: Fundamentos de Computación
Arquitectura de Computadores
 PRESENTADO POR : ANDRES MAYORGA DANIELA PAEZ VEGA.
El microprocesador y su arquitectura
Introducción MSc. Rina Arauz.
El Computador. Computador. Máquina compuesta de elementos físicos (en su mayoría de origen electrónico) capaz de aceptar unos datos de entrada, realizar.
Lenguaje ensamblador Conceptos introductorios. Formatos de Instrucción. Modos de Direccionamiento. Conjunto de instrucciones básico. Introducción al Lenguaje.
Arquitectura de PCs Lenguaje ASM Intel Lenguaje de máquina y ASM Toda CPU interpreta su código de máquina propio Instrucciones en código de máquina.
Arquitectura de PCs Arquitectura básica del PC. Introducción El PC es el resultado de una especificación técnica de IBM El hardware se organiza de forma.
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
Transcripción de la presentación:

Aprende el arte de la ingeniería inversa Manuel Rey Vilar

Agenda Objetivos del proyecto Lenguaje Ensamblador Arquitectura x86 Introducción a la Ingeniería Inversa Marco legal OLLYDBG Caso práctico Bibliografía

Objetivos del Proyecto Comprender la estructura de un software, sus modos de funcionamiento y las características que impulsan su comportamiento.

Lenguaje Ensamblador Se define como un lenguaje de programación que se usa para dar directamente órdenes al ordenador. El ensamblador es el programa que convierte un fichero escrito en lenguaje ensamblador en código máquina o binario para que el ordenador pueda leerlo.

Ejemplo Un programa escrito en lenguaje ensamblador consiste en una serie de instrucciones que corresponden al flujo de órdenes ejecutables por un microprocesador. La sentencia: MOV AL, 61h Asigna el valor hexadecimal 61 (97 decimal) al registro "AL". El programa ensamblador lee la sentencia de arriba y produce su equivalente binario en lenguaje de máquina. Binario: 10110000 01100001 (hexadecimal: B61) El mnemónico MOV es un código de operación u “opcode". El opcode es seguido por una lista de argumentos o parámetros, completando una típica instrucción de ensamblador. En el ejemplo, AL es un registro de 8 bits del procesador, al cual se le asignará el valor hexadecimal 61 especificado.

El código de máquina generado por el ensamblador consiste de 2 bytes El código de máquina generado por el ensamblador consiste de 2 bytes. El primer byte contiene empaquetado la instrucción MOV y el código del registro hacia donde se va a mover el dato: En el segundo byte se especifica el número 61h, escrito en binario como 01100001, que se asignará al registro AL, quedando la sentencia ejecutable como: 10110000 01100001. La cual puede ser entendida y ejecutada directamente por el procesador.

Arquitectura x86 Estructura von Neumann

Stack o Pila La pila es un lugar de la memoria donde se van guardando determinados valores para recuperarlos posteriormente.

Los Registros AH AX AL BH BX BL CH CX CL DH DX DL EAX Acumulador SP BP 32 bits 16 bits EAX Acumulador AH AX AL BH BX BL CH CX CL DH DX DL SP BP DI SI IP FLAGS CS DS ES SS EBX Índice base ECX Contador EDX Datos ESP Apuntador de pila EBP Apuntador de base EDI Índice destino ESI Índice fuente EIP Apuntador de instrucción EFLAGS Banderas Código Datos Extra Pila

Las Instrucciones Las instrucciones de la CPU pueden agruparse, de acuerdo a su funcionalidad, en: Operaciones con enteros: (Estas son operaciones realizadas por la Unidad Aritmético Lógica de la CPU) Operaciones aritméticas. Como suma, resta, multiplicación, división, módulo, cambio de signo Operaciones booleanas. Operaciones lógicas bit a bit como AND, OR, XOR, NOT Operaciones de bits. Como desplazamiento y rotaciones de bits (hacia la derecha o hacia la izquierda, a través del bit del acarreo o sin él) Comparaciones Operaciones de mover datos: Entre los registros y la memoria: Aunque la instrucción se llama "mover", en la CPU, "mover datos" significa en realidad copiar datos, desde un origen a un destino, sin que el dato desaparezca del origen. Se pueden mover valores: desde un registro a otro desde un registro a un lugar de la memoria desde un lugar de la memoria a un registro desde un lugar a otro de la memoria un valor inmediato a un registro un valor inmediato a un lugar de memoria

Operaciones de pila (stack): PUSH (escribe datos hacia el tope de la pila) POP (lee datos desde el tope de la pila) Operaciones de entrada/salida: Son operaciones que mueven datos de un registro, desde y hacia un puerto; o de la memoria, desde y hacia un puerto INPUT Lectura desde un puerto de entrada OUTPUT Escritura hacia un puerto de salida Operaciones para el control del flujo del programa: Llamadas y retornos de subrutinas Llamadas y retornos de interrupciones Saltos condicionales de acuerdo al resultado de la comparaciones Saltos incondicionales Operaciones con números reales: El estándar para las operaciones con números reales en las CPU está definido por el IEEE 754. Una CPU puede tener operaciones de punto flotante con números reales mediante el coprocesador numérico (si lo hay), como las siguientes: Operaciones aritméticas. Suma, resta, multiplicación, división, cambio de signo, valor absoluto, parte entera Operaciones trascendentales Operaciones trigonométricas. Seno, coseno, tangente, arcotangente Operaciones con logaritmos, potencias y raíces Otras

Hello World

Introducción a la Ingeniería Inversa ¿Qué es la Ingeniería Inversa? La Ingeniería Inversa es un procedimiento mediante el cual se revierte el lenguaje de la máquina (lenguaje de bajo nivel) al código fuente de alto nivel en el que fue escrito originalmente un programa.

Aplicaciones de la Ingeniería Inversa Estudiar virus y malware Evaluar la calidad y robustez del software Añadir funcionalidad al software existente Posibilidad de interactuar con el código heredado sin conocer el código fuente De forma fraudulenta crackeando software

Herramientas utilizadas en Ingeniería Inversa Desensamblador Traduce el lenguaje de máquina a lenguaje ensamblador. Depurador (Debugger) Prueba y depura (elimina) los errores del programa “objetivo” Editores Hexadecimales Permiten modificar archivos binarios

Herramientas utilizadas en Ingeniería Inversa Editores de recursos Permite visualizar, extraer, modificar, editar o reemplazar cualquier tipo de recursos contenidos en los ficheros ejecutables de una aplicación Herramientas de monitorización del sistema Regshot procmon Herramientas e Información misceláneos Scripts API

Marco Legal Uso legal de la Ingeniería Inversa Uso ilegal de la Ingeniería Inversa

OllyDBG ¿Qué es OllyDBG? Del autor Oleh Yuschuk, OllyDBG es un depurador de código ensamblador de 32 bits para sistemas operativos Microsoft Windows. http://www.ollydbg.de

Desensamblador

Los Registros

La Pila (Stack)

Dump

Caso práctico 1

Bibliografía Dennis Yurichev, Reverse Engineering for Beginners Eldad Eilam, Reversing: Secrets of Reverse Engineering ISBN: 978-0-7645-7481-8 624 pages April 2005 http://opensecuritytraining.info/IntroductionToReverseEngineering.html http://www.openrce.org/articles/ http://www.ollydbg.de/ http://www.google.com/ https://es.wikipedia.org