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).


No hay comentarios.:

Publicar un comentario

Las Publicaciones más Vistas

Comandos Drozer Pentest Móvil