Hay una instrucción que he notado que es muy común que este antes de las de “control flow” es la de CMP, comparar. Otra que he visto es INC de incrementar.
Introducción
Análisis de Malware: Conceptos y Técnicas Básicas
Entendiendo el mundo del Malware
Conceptos básicos de malware y sus variantes principales
Amenazas Persistentes Avanzadas: Grupos Criminales y Ejemplos Reales
Análisis de Malware: Técnicas y Mentalidad en Ciberseguridad
Ingeniería Reversa
Gestión de Memoria en Sistemas Operativos para Análisis de Malware
Ingeniería Reversa y Ensamblador en C para Análisis de Malware
PE Análisis
Análisis de Malware del Grupo Criminal APT41
Análisis Estático de Malware: Técnicas y Herramientas Básicas y Avanzadas
Obtención y Uso de Hashes para Análisis de Malware
Análisis de Hashes de Malware en VirusTotal y Anyron
Unpacking
Análisis Estático de Software Malicioso con DNS Spy
Debugging y Establecimiento de Puntos de Ruptura en DNSpy
Análisis Estático de Binarios Obfuscados en PIFile
Análisis Dinámico de Tráfico de Red con WildShark
Análisis Dinámico de Malware: Conceptos y Herramientas Básicas
Análisis de Strings en Software Malicioso con DNS Spy
Creación de Reglas Yara para Detección de Malware APT41
Siguientes pasos
Análisis de Malware: Fundamentos y Técnicas Básicas
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
La ingeniería inversa es un proceso fascinante que nos permite desentrañar los misterios de cualquier objeto creado por el hombre. Así como el admirador de un café se detendría a descubrir el origen de los granos y su composición para replicar su bebida favorita, los ingenieros de software usan el mismo enfoque analítico para comprender y reproducir programas informáticos. Este proceso involucra descomponer el software en sus partes fundamentales para entender su estructura, funciones y operaciones, permitiendo a los programadores replicarlo o mejorarlo.
El lenguaje ensamblador, en especial el x86 Assembly Language, es una herramienta clave para traducir los programas de C, un lenguaje de programación de alto nivel, a un código comprensible para las computadoras. Al utilizar sistemas de compiladores y herramientas de desensamblado, podemos convertir el código C en lenguaje ensamblador para su análisis o modificación. Por ejemplo, al generar el código ensamblador a partir de un programa simple en C como "Hola, Mundo", podemos observar cómo se transforma en instrucciones específicas que la CPU puede entender y ejecutar.
#include <stdio.h>
int main() {
printf("Hola, Mundo\n");
return 0;
}
El compilador traduce este código en lenguaje ensamblador:
global main
section .text
start:
push message
call printf
add esp, 4
ret
Las instrucciones del lenguaje ensamblador son fundamentales para manipular directamente la arquitectura del hardware. Algunas de las más comunes incluyen:
Cada instrucción tiene un propósito específico y es crucial para la ejecución precisa de un programa. Es recomendable investigar más sobre estas instrucciones para entender su utilidad y función exacta.
En el ámbito de la programación y el análisis de malware, los punteros son cruciales. Funcionan como "flechitas" que indican la dirección de memoria donde se almacenan variables o datos. Por ejemplo, si tienes una variable que almacena un valor importante, un puntero te dirá dónde encontrar ese valor en memoria para utilizarlo o modificarlo según sea necesario.
int a = 10;
int *ptr = &a;
En el ejemplo anterior, ptr
es un puntero que apunta a la dirección de memoria de la variable a
. Los punteros no solo son críticos para la eficiencia del almacenamiento en memoria, sino que también son vitales en la interacción con librerías de vínculos dinámicos (DLLs) y la ejecución de subrutinas.
Las DLL, bibliotecas de vínculos dinámicos, son componentes esenciales en el entorno de Windows. Facilitan que múltiples programas puedan compartir instrucciones para funciones comunes sin duplicar código. Sin embargo, en el análisis de malware, es crucial identificar qué DLLs son llamadas por un programa, ya que algunas pueden indicar procesos inusuales o maliciosos, como bypassing de firewalls.
Los archivos PIF (Portable Executable Format) son cruciales en la arquitectura de los programas ejecutables. Siguen un estándar que define cómo se almacenan los datos, cómo se carga un programa en la memoria y cómo se desarrollan sus funciones. En el contexto del análisis de malware, examinar los encabezados de las secciones dentro de un archivo PIF puede ofrecer pistas valiosas sobre posibles comportamientos maliciosos.
Con cada paso, desde entender las bases de la programación en C hasta desentrañar los aspectos intrincados de los archivos PIF y DLLs, te equipas con las herramientas necesarias para desentrañar, analizar y replicar programas. Esta base es fundamental no solo para el desarrollo de programas eficientes sino también para la defensa contra software malicioso. ¡Sigue adelante en tu travesía de aprendizaje y descubre las maravillas del mundo de la programación!
Aportes 13
Preguntas 2
Hay una instrucción que he notado que es muy común que este antes de las de “control flow” es la de CMP, comparar. Otra que he visto es INC de incrementar.
Comparto una pequeña simplificación espero les sirva:
Punteros: Imagina que la memoria de la computadora es un enorme bloque de casilleros, cada uno con una dirección única. Un puntero es como una nota que tiene escrita la dirección de uno de esos casilleros. Así, puedes encontrar lo que hay en ese casillero particular mirando la dirección en tu nota.
Biblioteca de vínculos dinámicos (DLL): Es como una caja de herramientas que tu programa puede utilizar. En lugar de llevar todas tus herramientas contigo todo el tiempo, vas a la caja (DLL) y tomas la herramienta (función) que necesitas cuando la necesitas. Los punteros ayudan a tu programa a saber dónde encontrar cada herramienta (función) en la caja (DLL).
Métodos virtuales y tabla de métodos virtuales: En la programación orientada a objetos, los métodos virtuales son como reglas generales que puedes cambiar para adaptarse a situaciones específicas. La tabla de métodos virtuales es como un directorio que le dice a tu programa qué versión específica de la regla general usar en cada situación. Nuevamente, los punteros ayudan a tu programa a encontrar la versión correcta de la regla.
Instrucciones comunes en ensamblador.
Con calma, se puede entender, solo hay que repasar esta clase un par de veces y complementar
Algunas notas de la clase
Fases de compilacion en C :
Pre-procesamiento -> Compilacion -> Assembly -> linking
PE Files(Portable Executable):
~el formato de windows PE describe la estructura de los archivos de windows modernos como .exe,.dll y .sys
~Contiene informacion,recursos y diferencias hacia DLL’s(librerias/bibliotecas de enlace dinamico)
~define la manera en que se almacenan los datos contenido instrucciones x86,imagenes,textos y metadatos que un programa necesita para funcionar y ejecutarse
Fue diseñado para:
~Decirle a window como cargar un programa en la memoria
~proporcionar los medios o recursos que un programa al ejecutarse podria utilizar.
~proporcionar los medios o recursos que un programa al ejecutarse podria utilizar.
~proporciona datos de seguridad como codigo de firmas digitales
Muy importante
tuve que repetir la clase varias veces, mi cabeza exploto, pero se siente bien cuando empiezas a entender
Lo siento no lo pude evitar…
… Aseembly y la programación en C son considerados de un nivel más cercano al ser humano es interpretado por un compilador que convierte el código a instrucciones de maquina y al utilizar una herramienta de densamblador puedes obtener el lenguaje ensamblador de un programa C compilado.
f![](
Una lastima que el curso no tenga un pdf con las slide del curso hay unos cuantos principios aqui que memorizar
Por aquí quien programo microcontroladores en lenguaje assembler?
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?