# API Com煤n Usada en Malware
{% hint style="success" %}
Aprende y practica Hacking en AWS:
[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)
\
Aprende y practica Hacking en GCP:
[**HackTricks Training GCP Red Team Expert (GRTE)**
](https://training.hacktricks.xyz/courses/grte)
Apoya a HackTricks
* Revisa los [**planes de suscripci贸n**](https://github.com/sponsors/carlospolop)!
* **脷nete al** 馃挰 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **s铆guenos** en **Twitter** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
{% endhint %}
## Gen茅rico
### Redes
| Sockets en Crudo | Sockets WinAPI |
| ---------------- | -------------- |
| socket() | WSAStratup() |
| bind() | bind() |
| listen() | listen() |
| accept() | accept() |
| connect() | connect() |
| read()/recv() | recv() |
| write() | send() |
| shutdown() | WSACleanup() |
### Persistencia
| Registro | Archivo | Servicio |
| ---------------- | ------------- | ----------------------------- |
| RegCreateKeyEx() | GetTempPath() | OpenSCManager |
| RegOpenKeyEx() | CopyFile() | CreateService() |
| RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
| RegDeleteKeyEx() | WriteFile() | |
| RegGetValue() | ReadFile() | |
### Cifrado
| Nombre |
| ----------------------- |
| WinCrypt |
| CryptAcquireContext() |
| CryptGenKey() |
| CryptDeriveKey() |
| CryptDecrypt() |
| CryptReleaseContext() |
### Anti-An谩lisis/VM
| Nombre de Funci贸n | Instrucciones de Ensamblador |
| ------------------------------------------------------------ | ------------------------------ |
| IsDebuggerPresent() | CPUID() |
| GetSystemInfo() | IN() |
| GlobalMemoryStatusEx() | |
| GetVersion() | |
| CreateToolhelp32Snapshot \[Verificar si un proceso est谩 en ejecuci贸n] | |
| CreateFileW/A \[Verificar si un archivo existe] | |
### Sigilo
| Nombre | |
| ------------------------ | -------------------------------------------------------------------------- |
| VirtualAlloc | Asignar memoria (empaquetadores) |
| VirtualProtect | Cambiar permisos de memoria (empaquetador otorgando permisos de ejecuci贸n a una secci贸n) |
| ReadProcessMemory | Inyecci贸n en procesos externos |
| WriteProcessMemoryA/W | Inyecci贸n en procesos externos |
| NtWriteVirtualMemory | |
| CreateRemoteThread | Inyecci贸n de DLL/proceso... |
| NtUnmapViewOfSection | |
| QueueUserAPC | |
| CreateProcessInternalA/W | |
### Ejecuci贸n
| Nombre de Funci贸n |
| ------------------ |
| CreateProcessA/W |
| ShellExecute |
| WinExec |
| ResumeThread |
| NtResumeThread |
### Varios
* GetAsyncKeyState() -- Registro de teclas
* SetWindowsHookEx -- Registro de teclas
* GetForeGroundWindow -- Obtener el nombre de la ventana en ejecuci贸n (o el sitio web de un navegador)
* LoadLibrary() -- Importar biblioteca
* GetProcAddress() -- Importar biblioteca
* CreateToolhelp32Snapshot() -- Listar procesos en ejecuci贸n
* GetDC() -- Captura de pantalla
* BitBlt() -- Captura de pantalla
* InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Acceder a Internet
* FindResource(), LoadResource(), LockResource() -- Acceder a recursos del ejecutable
## T茅cnicas de Malware
### Inyecci贸n de DLL
Ejecutar una DLL arbitraria dentro de otro proceso
1. Localizar el proceso para inyectar la DLL maliciosa: CreateToolhelp32Snapshot, Process32First, Process32Next
2. Abrir el proceso: GetModuleHandle, GetProcAddress, OpenProcess
3. Escribir la ruta a la DLL dentro del proceso: VirtualAllocEx, WriteProcessMemory
4. Crear un hilo en el proceso que cargar谩 la DLL maliciosa: CreateRemoteThread, LoadLibrary
Otras funciones a utilizar: NTCreateThreadEx, RtlCreateUserThread
### Inyecci贸n de DLL Reflectiva
Cargar una DLL maliciosa sin llamar a las llamadas normales de la API de Windows.\
La DLL se mapea dentro de un proceso, resolver谩 las direcciones de importaci贸n, corregir谩 las reubicaciones y llamar谩 a la funci贸n DllMain.
### Secuestro de Hilos
Encontrar un hilo de un proceso y hacer que cargue una DLL maliciosa
1. Encontrar un hilo objetivo: CreateToolhelp32Snapshot, Thread32First, Thread32Next
2. Abrir el hilo: OpenThread
3. Suspender el hilo: SuspendThread
4. Escribir la ruta a la DLL maliciosa dentro del proceso de la v铆ctima: VirtualAllocEx, WriteProcessMemory
5. Reanudar el hilo cargando la biblioteca: ResumeThread
### Inyecci贸n PE
Inyecci贸n de Ejecuci贸n Port谩til: El ejecutable se escribir谩 en la memoria del proceso de la v铆ctima y se ejecutar谩 desde all铆.
### Hollowing de Proceso
El malware desmapear谩 el c贸digo leg铆timo de la memoria del proceso y cargar谩 un binario malicioso
1. Crear un nuevo proceso: CreateProcess
2. Desmapear la memoria: ZwUnmapViewOfSection, NtUnmapViewOfSection
3. Escribir el binario malicioso en la memoria del proceso: VirtualAllocEc, WriteProcessMemory
4. Establecer el punto de entrada y ejecutar: SetThreadContext, ResumeThread
## Hooking
* La **SSDT** (**Tabla de Descriptores de Servicios del Sistema**) apunta a funciones del kernel (ntoskrnl.exe) o controlador GUI (win32k.sys) para que los procesos de usuario puedan llamar a estas funciones.
* Un rootkit puede modificar estos punteros a direcciones que controla.
* **IRP** (**Paquetes de Solicitud de I/O**) transmiten piezas de datos de un componente a otro. Casi todo en el kernel utiliza IRPs y cada objeto de dispositivo tiene su propia tabla de funciones que puede ser enganchada: DKOM (Manipulaci贸n Directa de Objetos del Kernel).
* La **IAT** (**Tabla de Direcciones de Importaci贸n**) es 煤til para resolver dependencias. Es posible enganchar esta tabla para secuestrar el c贸digo que ser谩 llamado.
* **EAT** (**Tabla de Direcciones de Exportaci贸n**) Hooks. Estos hooks pueden hacerse desde **userland**. El objetivo es enganchar funciones exportadas por DLLs.
* **Inline Hooks**: Este tipo es dif铆cil de lograr. Esto implica modificar el c贸digo de las funciones mismas. Tal vez poniendo un salto al principio de estas.
{% hint style="success" %}
Aprende y practica Hacking en AWS:
[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)
\
Aprende y practica Hacking en GCP:
[**HackTricks Training GCP Red Team Expert (GRTE)**
](https://training.hacktricks.xyz/courses/grte)
Apoya a HackTricks
* Revisa los [**planes de suscripci贸n**](https://github.com/sponsors/carlospolop)!
* **脷nete al** 馃挰 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **s铆guenos** en **Twitter** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos de github.
{% endhint %}