Blog con notas, publicaciones sobre exploits, uso de herramientas, búsqueda de vulnerabilidades y más. @Yonatan_correa
04 mayo 2018
Notas, Registers, opcode y comandos
Bueno, este post quiero que sea más para aprender algunos conceptos y tener algunas ideas más clara de algunas cosas y definiciones
Estas son la definiciones según wikipedia:
Opcode: En informática, un opcode (operation code) o código de operación, es la porción de una instrucción de lenguaje de máquina que especifica la operación a ser realizada
Assembly: El lenguaje ensamblador, o assembler (en inglés assembly language y la abreviación asm), es un lenguaje de programación de bajo nivel. Consiste en un conjunto de mnemónicos que representan instrucciones básicas para los computadores, microprocesadores, microcontroladores y otros circuitos integrados programables.
Pila o Stack: Una pila (stack en inglés) es una lista ordenada o estrutura de datos que permite almacenar y recuperar datos, el modo de acceso a sus elementos es de tipo LIFO (del inglés Last In, First Out, «último en entrar, primero en salir»).
shellcode: Una shellcode es un conjunto de órdenes programadas generalmente en lenguaje ensamblador y trasladadas a opcodes (conjunto de valores hexadecimales) que suelen ser inyectadas en la pila (o stack) de ejecución de un programa para conseguir que la máquina en la que reside se ejecute la operación que se haya programado.
Los 8 registros de propósito general
EAX - El Acumulador registro: este también acumula el resultado de
los cálculos de la CPU
ECX - El contador de registro: se suele usar en bucle
EDX - El registro de datos: extensión de eax para cálculo más complejos
EBX - El registro base: apoya los cálculos de operaciones
EBP - El puntero de base: indica la base del frame de la pila
ESI - El índice de origen: localización de los datos de entrada
EDI - El índice de destino: donde se almacenan los datos
ESP - El puntero de pila: indica la cima de la pila
EIP - El puntero de instrucción: contiene la dirección absoluta de la próxima instrucción a ejecutar por la CPU
Registros de segmento:
CS: code segment
DS: datos segment
ES: Extra segment
SS: Stack segment
FS: Extra
GS: Extra
Registros EFLAGS
CF: Carry Flag
ZF: Zero Flag
PF: Flag de Paridad
SF: Flag de Signo
DF: Direction Flag
Intrusiones que debemos conocer:
PUSH: apunta la dirección a la pila
POP: saca la dirección de la pila
Mov (dst, src): Copia el operador “src” en el operador “dst”.
Lea (reg, src): Copia una dirección de memoria en el registro destino (ej: EAX).
Add (o1, o2): Suma los dos operadores y los almacena en el operador uno.
Sub (o1, o2): Resta el valor del segundo operador sobre el primero y lo almacena en el primer operador
Inc: Incrementa en 1 el valor del operador indicado.
Dec: Disminuye en 1 el valor del operador indicado.
AND: El resultado es 1 si los dos operadores 1 son iguales, y 0 en cualquier otro caso
OR: El resultado es 1 si uno o los dos operadores es 1, y 0 en cualquier otro caso
XOR: Es 1 si uno de los valores de diferente y sera cero si ambos valores son iguales
Cmp: Compara dos operadores.
Jmp: Salta a la dirección indicada.
Call: Llama/Salta a la dirección/función indicada.
Nop: No operación (esto mayormente es usado para rellenar espacios )
Transformación de datos
Si tenemos un dato así: JMP $+24
En opcode seria: EB 16
En assembly: JMP SHORT 0x18
con el script nasm_shell.rb de Metasploit podemos hacer la transformación
Algunos Opcode más usados:
\xff\xe4 Igual a -> jmp esp
\xff\xd4 Igual a -> call esp
\x54 Igual a -> push esp
También el POP POP RET, en este ejemplo lo definimos así:
\x5f Igual a -> pop edi
\x5e Igual a -> pop esi
\xc3 Igual a -> ret
x86 Little-Endian: En resumen, esto cambia el orden de la dirección de memoria
por ejemplo:
0x5F4C2D63 quedaría así en el código \x63\x2d\x4c\x5f
Algunos mecanismos de seguridad
SafeSeh
ASLR
NxCompat
stack cookies
Algunas herramientas usadas:
Immunity debugger
ollydbg
Windbg
gdb
edb-debugger
radare2
ida free/pro
gdb-peda
Imagen con los comandos del plugin Mona.py hecho por la gente de corelan
Recordamos que para ver las opciones de algún comando en especifico con mona, se debe ejecutar el comando help antes, por ejemplo: !mona help jmp
Bueno, por ahora creo que con esto estamos bien (por el momento).
Suscribirse a:
Comentarios de la entrada (Atom)
No hay comentarios.:
Publicar un comentario