Através de várias bibliotecas como kernel32.dll, user32.dll, advapi32.dll e ntdll.dll, só para citar algumas, a Windows API provê inúmeras funções para os programas em usermode chamarem. Criar uma lista com todas essas funções seria insano, mas destaco aqui algumas comumente encontradas em programas para Windows. Optei também por colocar o protótipo de algumas delas, para rápida referência, mas todas as informações sobre estas funções podem ser encontradas na documentação oficial. Basta buscar por um nome de função em seu buscador preferido que certamente o site da Microsoft com a documentação da função estará entre os primeiros.
Mesmo que você não sabia tudo sobre a função funciona, essa lista te ajudará a saber onde colocar breakpoints, de acordo com o seu caso. Por exemplo, caso suspeite que um programa está abrindo um arquivo, pode colocar um breakpoint nas funções CreateFileA
e CreateFileW
.
Vamos agora à lista de funções, separadas por categoria.
Utilizadas em técnicas básicas para evitar a depuração de aplicações.
BOOL IsDebuggerPresent();
BOOL CheckRemoteDebuggerPresent(
[in] HANDLE hProcess,
[in, out] PBOOL pbDebuggerPresent
);
Utilizadas para exibir janelas com mensagens.
int MessageBoxA(
[in, optional] HWND hWnd,
[in, optional] LPCTSTR lpText,
[in, optional] LPCTSTR lpCaption,
[in] UINT uType
);
Ver também: MessageBoxEx
.
Usadas para ler textos de caixas de texto.
UINT GetDlgItemTextA(
[in] HWND hDlg,
[in] int nIDDlgItem,
[out] LPSTR lpString,
[in] int cchMax
);
Implementam algoritmos de criptografia como algoritmos de hash e criptografia simétrica e assimétrica.
BOOL CryptEncrypt(
[in] HCRYPTKEY hKey,
[in] HCRYPTHASH hHash,
[in] BOOL Final,
[in] DWORD dwFlags,
[in, out] BYTE *pbData,
[in, out] DWORD *pdwDataLen,
[in] DWORD dwBufLen
);
Ver também: CryptDecrypt
, CryptGenKey
, e CryptImportKey
.
Configuram e consultam data e hora do sistema.
void GetLocalTime(
[out] LPSYSTEMTIME lpSystemTime
);
Ver também: SetSystemTime
e SetLocalTime
.
Pegam informações sobre num disco, pen drive, drives de rede mapeados, etc e também sobre seus volumes (partições).
DWORD GetLogicalDrives();
Ver também: GetDiskFreeSpace
, GetDriveType
e GetVolumeInformationA
.
Manipulam arquivos e outros objetos.
HANDLE CreateFileA(
[in] LPCSTR lpFileName,
[in] DWORD dwDesiredAccess,
[in] DWORD dwShareMode,
[in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
[in] DWORD dwCreationDisposition,
[in] DWORD dwFlagsAndAttributes,
[in, optional] HANDLE hTemplateFile
);
CreateFileA
e CreateFileW
abrem para ler e/ou para escrever e também criam e até truncam (zeram) arquivos no disco. Também trabalham com outros objetos como pipes, diretórios e consoles.
Ver também: CopyFile
, CreateFileMapping
, DeleteFile
, GetFullPathName
, GetTempPath
, LoadLibrary
, MoveFile
, OpenFile
, OpenFileMapping
e OpenMutex
.
Funções que falam com a internet, normalmente via HTTP.
HINTERNET InternetOpenUrlA(
[in] HINTERNET hInternet,
[in] LPCSTR lpszUrl,
[in] LPCSTR lpszHeaders,
[in] DWORD dwHeadersLength,
[in] DWORD dwFlags,
[in] DWORD_PTR dwContext
);
Ver também: HttpSendRequestA
, InternetOpenA
, InternetOpenW
, InternetOpenUrlW
e InternetReadFile
.
Habilitam ou desabilitam janelas ou itens dentro dela.
BOOL EnableMenuItem(
[in] HMENU hMenu,
[in] UINT uIDEnableItem,
[in] UINT uEnable
);
BOOL EnableWindow(
[in] HWND hWnd,
[in] BOOL bEnable
);
Gerenciam memória, alocando ou deselocando, configurando permissões, dentre outras operações.
LPVOID VirtualAlloc(
[in, optional] LPVOID lpAddress,
[in] SIZE_T dwSize,
[in] DWORD flAllocationType,
[in] DWORD flProtect
);
Ver também: VirtualAllocEx
, VirtualFree
, VirtualLock
, VirtualProtect
e VirtualQuery
.
Manipulam processos e threads. Podem enumerar, alterar o estado, executar e mais.
BOOL CreateProcessA(
[in, optional] LPCSTR lpApplicationName,
[in, out, optional] LPSTR lpCommandLine,
[in, optional] LPSECURITY_ATTRIBUTES lpProcessAttributes,
[in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes,
[in] BOOL bInheritHandles,
[in] DWORD dwCreationFlags,
[in, optional] LPVOID lpEnvironment,
[in, optional] LPCSTR lpCurrentDirectory,
[in] LPSTARTUPINFOA lpStartupInfo,
[out] LPPROCESS_INFORMATION lpProcessInformation
);
Ver também: CreateRemoteThread
, CreateThread
, CreateToolhelp32Snapshot
, ExitProcess
, ExitThread
, Heap32First
, Heap32ListFirst
, Heap32ListNext
, Heap32Next
, Module32First
, Module32Next
, OpenProcess
, OpenProcessToken
, OpenThreadToken
, Process32First
, Process32Next
, ShellExecute
, TerminateProcess
, Toolhelp32ReadProcessMemory
, WriteProcessMemory
, ZwQueryInformationProcess
e ZwSetInformationThread
.
Criam e alteram chaves e valores no registro.
LSTATUS RegSetValueA(
[in] HKEY hKey,
[in, optional] LPCSTR lpSubKey,
[in] DWORD dwType,
[in] LPCSTR lpData,
[in] DWORD cbData
);
Ver também: RegCloseKey
, RegEnumKeyExA
, RegOpenKey
, RegOpenKeyEx
, RegQueryValueA
, RegSetValueW
, RegSetValueExA
e RegSetValueExW
.
Manipulam cadeias de texto.
int lstrcmpA(
[in] LPCSTR lpString1,
[in] LPCSTR lpString2
);
Ver também: lstrcat
, lstrcpy
e lstrlen
.