Ensamblador para la creacion de exploits
Enviado por baggg • 14 de Septiembre de 2022 • Resumen • 1.127 Palabras (5 Páginas) • 62 Visitas
EIP
El registro EIP(dirección de retorno), guarda la dirección de la siguiente instrucción a ejecutar. Tiene un tamaño de 32 bits.
Crear Ejecutables
Paso 1: Archivo de código de fuente creado por un editor de texto.
Paso 2: ensamblador como "nasm", lo cual este creara un archivo de código de objeto
Paso 3: Enlazador con el cual obtendremos el ejecutable y fin
___________________________________________________________________________________________________________________________________________________
SystemCalls(SysCalls)
Solicitudes al kernel para la ejecución de tareas, se utilizan debido a que manejar las caracteristicas de bajo nivel de las interfaces de hardware
puede ser muy complicado.
Para ver todas las syscalls disponibles vamos a la siguinete ruta /usr/include/x86_64-linux-gnu/asm/unistd_64.h
_____________________________________________________________________________________________________________________________________________________
Tipos de Datos
Byte 8 bits "AA"
Word 16 bits "AABB"
Double Word 32 bits "AABBCCDD"
Quad Word 64 bits "AABBCCDDEEFFGGHH"
Doble Quad Word 128 bits "AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPP"
Datos inicializados
db - significa define byte, dw - define word, etc.
db 0x11 <-> byte 0x11
db 0x11,0x22,0x33 <-> bytes en sucesión
db 'a'.0x11 <-> carácter más una constante, ojo: aqui el caracter va a pasar a hexadecimal por ejemplo en este caso la 'a' sera 0x61+
dw 0x1234 <-> 0x34 0x12 <-- Aqui como te das cuenta los letras o numeros van al reves por que son little endian
dw 'a' <-> 0x61 0x00 <-- se define una palabra y sobra un byte se llena de carcater nulo, ojo: las letras siempre van en hexadecimal
dw 'ab' <-> 0x61 0x62 (caracteres)
dw 'abc' <-> 0x61 0x62 0x63 0x00 (string)
dd 0x12345678 <-> 0x78 0x56 0x34 0x12
dq 1.0563 <-> punto flotante
dq 0x123456789abcdef0 <-> 8 bytes constantes
Datos no inicializados
nombreVar: resb 32 <-> Reservar 32 bytes
nombreVar: rebw 1 <-> Reservar 1 palabra
___________________________________________________________________________________________________________________________________________________________
Estructura del Código en Assembly
global _start
section .text
_start:
mov eax, 0x4
mox ebx, 0x1
mov ecx, mensaje
mov edx, mlen
int 0x80
mov eax, 0x1
mov ebx, 0x7
int 0x80
section .data
mensaje: db "hola perro"
mlen equ $-mensaje
section .bss
var1: resb 100
var2: resq 200
1.- Primero se define la entrada en este caso es "_start"
2.- definimos la primera seccion que es ".txt" que es la del código fuente, de ahi si tenemos variables globales inicializas definimos ".data" y tambien si tenemos variables globales no inicializadas definimos ".bss".
___________________________________________________________________________________________________________________________________________
Instrucciones
#Etiqueta -> Instrucción -> Operando
mov EBP,EIP
perro: db 0x10
• Etiquetas: identificador simbílico que se da a la instracción. Puede tener hast 31 caracteres; el primero no numérico; indiferente usar mayúsculas o
...