Знание и распознавание этих функций критически важно:
Эти функции запускают основную программу.
| Название | Назначение |
| `_start` / `libc_start_main` | Начальная точка C-программы (Linux) |
| `mainCRTStartup` | Точка входа в Windows-программе (console) |
| `WinMainCRTStartup` | Точка входа в Windows-программе (GUI) |
| `main` / `__init` | Инициализация глобальных переменных и конструкций до вызова `main` |
Обычно после запуска этих функций вызывается `main` или `WinMain`.
| Функция | Назначение |
| `malloc`, `calloc`, `realloc`, `free` | Выделение и освобождение памяти |
| `memcpy`, `memset`, `memcmp` | Работа с памятью |
| `strlen`, `strcpy`, `strncpy`, `strcat` | Работа со строками |
| `printf`, `sprintf`, `puts`, `putchar` | Вывод |
| `scanf`, `gets`, `fgets` | Ввод |
| `exit`, `_exit`, `abort` | Завершение работы программы |
| `atoi`, `atof`, `itoa` | Преобразование типов |
| `time`, `gettimeofday`, `clock` | Работа со временем |
mov ecx, [esp+8] ; длина копируемых данных
mov esi, [esp+4] ; источник
mov edi, [esp] ; назначение
rep movsb ; копирует ECX байт из ESI в EDI
| Функция | Назначение |
| `CreateFileA/W`, `ReadFile`, `WriteFile`, `CloseHandle` | Работа с файлами |
| `GetModuleHandle`, `GetProcAddress` | Работа с загрузкой DLL |
| `VirtualAlloc`, `VirtualFree` | Работа с виртуальной памятью |
| `LoadLibrary`, `FreeLibrary` | Загрузка DLL |
| `CreateProcess`, `ExitProcess`, `TerminateProcess` | Работа с процессами |
| `MessageBoxA/W` | Простое графическое окно |
| `GetTickCount`, `QueryPerformanceCounter` | Работа со временем |
| `RegOpenKey`, `RegSetValue`, `RegQueryValue` | Работа с реестром |
push 0 ; MB_OK
push offset szTitle ; "Hello"
push offset szText ; "World"
push 0 ; NULL hWnd
call MessageBoxA
| Функция | Назначение |
| `open`, `read`, `write`, `close` | Работа с файлами |
| `fork`, `execve`, `exit`, `wait` | Работа с процессами |
| `mmap`, `munmap`, `brk` | Работа с памятью |
| `socket`, `bind`, `connect`, `recv`, `send` | Сетевое взаимодействие |
| `strace`, `ptrace` | Отладка и трассировка |
| Функция | Назначение |
| `VirtualAlloc` + `memcpy` + `CreateThread` | Загрузка shellcode |
| `GetProcAddress` + `LoadLibrary` | Импорт функций во время выполнения |
| `IsDebuggerPresent`, `CheckRemoteDebuggerPresent` | Антиотладка |
| `NtQueryInformationProcess` | Сбор информации о процессе |
| `Sleep`, `RDTSC`, `GetTickCount` | Замедление исполнения, антианализ |
| `SetUnhandledExceptionFilter` | Обход отладчиков через SEH |
| `CreateRemoteThread` + `WriteProcessMemory` | Инъекция в другой процесс |
| Тип | Описание |
| `cdecl` | Параметры передаются через стек, вызывающий очищает стек |
| `stdcall` | Параметры передаются через стек, вызываемая очищает стек |
| `fastcall` | Первые параметры — в регистрах (ECX, EDX), остальные — в стеке |
| `thiscall` | Используется для C++ методов: `ECX` указывает на `this` |
Понимание стандартных функций, их сигнатур и поведения критически важно при дизассемблировании. Это позволяет быстро отбрасывать «лишнее» и фокусироваться на пользовательской логике или вредоносной нагрузке. Используйте автоматические средства распознавания, сопоставление аргументов и следите за контекстом вызовов.