Common API used in Malware
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
socket()
WSAStratup()
bind()
bind()
listen()
listen()
accept()
accept()
connect()
connect()
read()/recv()
recv()
write()
send()
shutdown()
WSACleanup()
RegCreateKeyEx()
GetTempPath()
OpenSCManager
RegOpenKeyEx()
CopyFile()
CreateService()
RegSetValueEx()
CreateFile()
StartServiceCtrlDispatcher()
RegDeleteKeyEx()
WriteFile()
RegGetValue()
ReadFile()
WinCrypt
CryptAcquireContext()
CryptGenKey()
CryptDeriveKey()
CryptDecrypt()
CryptReleaseContext()
IsDebuggerPresent()
CPUID()
GetSystemInfo()
IN()
GlobalMemoryStatusEx()
GetVersion()
CreateToolhelp32Snapshot [Verificar se um processo está em execução]
CreateFileW/A [Verificar se um arquivo existe]
VirtualAlloc
Alocar memória (packers)
VirtualProtect
Alterar permissão de memória (packer dando permissão de execução a uma seção)
ReadProcessMemory
Injeção em processos externos
WriteProcessMemoryA/W
Injeção em processos externos
NtWriteVirtualMemory
CreateRemoteThread
Injeção de DLL/Processo...
NtUnmapViewOfSection
QueueUserAPC
CreateProcessInternalA/W
CreateProcessA/W
ShellExecute
WinExec
ResumeThread
NtResumeThread
GetAsyncKeyState() -- Registro de teclas
SetWindowsHookEx -- Registro de teclas
GetForeGroundWindow -- Obter nome da janela em execução (ou o site de um navegador)
LoadLibrary() -- Importar biblioteca
GetProcAddress() -- Importar biblioteca
CreateToolhelp32Snapshot() -- Listar processos em execução
GetDC() -- Captura de tela
BitBlt() -- Captura de tela
InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Acessar a Internet
FindResource(), LoadResource(), LockResource() -- Acessar recursos do executável
Executar uma DLL arbitrária dentro de outro processo
Localizar o processo para injetar a DLL maliciosa: CreateToolhelp32Snapshot, Process32First, Process32Next
Abrir o processo: GetModuleHandle, GetProcAddress, OpenProcess
Escrever o caminho para a DLL dentro do processo: VirtualAllocEx, WriteProcessMemory
Criar uma thread no processo que carregará a DLL maliciosa: CreateRemoteThread, LoadLibrary
Outras funções a serem usadas: NTCreateThreadEx, RtlCreateUserThread
Carregar uma DLL maliciosa sem chamar as chamadas normais da API do Windows. A DLL é mapeada dentro de um processo, resolverá os endereços de importação, corrigirá as realocações e chamará a função DllMain.
Encontrar uma thread de um processo e fazê-la carregar uma DLL maliciosa
Encontrar uma thread alvo: CreateToolhelp32Snapshot, Thread32First, Thread32Next
Abrir a thread: OpenThread
Suspender a thread: SuspendThread
Escrever o caminho para a DLL maliciosa dentro do processo da vítima: VirtualAllocEx, WriteProcessMemory
Retomar a thread carregando a biblioteca: ResumeThread
Injeção de Execução Portátil: O executável será escrito na memória do processo da vítima e será executado a partir daí.
O malware irá desmapear o código legítimo da memória do processo e carregar um binário malicioso
Criar um novo processo: CreateProcess
Desmapear a memória: ZwUnmapViewOfSection, NtUnmapViewOfSection
Escrever o binário malicioso na memória do processo: VirtualAllocEc, WriteProcessMemory
Definir o ponto de entrada e executar: SetThreadContext, ResumeThread
A SSDT (Tabela de Descritores de Serviço do Sistema) aponta para funções do kernel (ntoskrnl.exe) ou driver GUI (win32k.sys) para que processos de usuário possam chamar essas funções.
Um rootkit pode modificar esses ponteiros para endereços que ele controla.
IRP (Pacotes de Solicitação de I/O) transmitem pedaços de dados de um componente para outro. Quase tudo no kernel usa IRPs e cada objeto de dispositivo tem sua própria tabela de funções que pode ser hookada: DKOM (Manipulação Direta de Objetos do Kernel).
A IAT (Tabela de Endereços de Importação) é útil para resolver dependências. É possível hookar esta tabela para sequestrar o código que será chamado.
EAT (Tabela de Endereços de Exportação) Hooks. Esses hooks podem ser feitos a partir do userland. O objetivo é hookar funções exportadas por DLLs.
Inline Hooks: Este tipo é difícil de alcançar. Isso envolve modificar o código das próprias funções. Talvez colocando um salto no início delas.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)