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)
Sockets Brutos | Sockets WinAPI |
---|---|
socket() | WSAStratup() |
bind() | bind() |
listen() | listen() |
accept() | accept() |
connect() | connect() |
read()/recv() | recv() |
write() | send() |
shutdown() | WSACleanup() |
Registro | Arquivo | Serviço |
---|---|---|
RegCreateKeyEx() | GetTempPath() | OpenSCManager |
RegOpenKeyEx() | CopyFile() | CreateService() |
RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
RegDeleteKeyEx() | WriteFile() | |
RegGetValue() | ReadFile() |
Nome |
---|
WinCrypt |
CryptAcquireContext() |
CryptGenKey() |
CryptDeriveKey() |
CryptDecrypt() |
CryptReleaseContext() |
Nome da Função | Instruções de Assembly |
---|---|
IsDebuggerPresent() | CPUID() |
GetSystemInfo() | IN() |
GlobalMemoryStatusEx() | |
GetVersion() | |
CreateToolhelp32Snapshot [Verificar se um processo está em execução] | |
CreateFileW/A [Verificar se um arquivo existe] |
Nome | |
---|---|
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 |
Nome da Função |
---|
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 fazer com que ela carregue 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)