###### tags: `module11` `revers` `programming language` `c` `process` [ToC] # Занятие 2. Понятие процесса и исполняемого файла. Основы языка C. ## Видеозапись урока {%youtube 828j5XtlYOo %} ### timecodes 00:00:00 Ждем 00:07:55 что было и что будет сегодня 00:09:00 Вступление 00:15:50 Функциональность Windows 00:19:45 Структурные компоненты 00:27:00 Типы данных 00:32:55 Структуры и указатели 00:36:45 Union 00:38:40 Циклы в Си 00:41:00 Ветвления 00:43:50 Типы WinAPI 00:49:10 Вызовы функции 00:53:20 Перерыв 00:59:05 Visual Studio 01:13:20 Структура PE 01:18:25 Dos & PE headers 01:23:11 File & Optional headers 01:31:25 Export & Import 01:34:00 Важные секции в PE 01:39:50 Используемые библиотеки 01:45:00 Перерыв 02:00:20 Текущее состояние процесса 02:13:25 Process explore 02:15:55 Системные процессы `---` 02:25:50 Методы создания процесса 02:33:25 Стартовые функции исполняемых файлов 02:36:20 Импорт функций 02:38:55 Прототипирование функций 02:49:00 Практика 03:05:00 Запустили дебаг 03:14:25 Второй проект 03:19:45 Вопросы ## ОС Windows ### Функциональность Функциональность Windows дают широкие возможности как для пользователя, так и доя атакующего • Управление процессами и потоками злоумышленники часто могут разделять нагрузки по потокам • Параллелизм • Устройства ввода - вывода стараются перехватить все события • Управление памятью работа с чужим адресным пространством • Работа с файлами • Распределенные системы и сети ### Структурные компоненты ![](https://i.imgur.com/HbWQI1p.png) ## Основы языка С ### Типы переменных ```c= Тип Размер в байтах Интервал char 1 (8) от -128 до 127 unsigned char 1 (8) от 0 до 255 int 2 (16) от -32768 до 32767 unsigned int 2 (16) от 0 до 65535 short int 2 (16) от -32768 до 32767 unsigned short int 2 (16) от 0 до 65535 long int 4 (32) от -2147483648 до 2147483647 unsigned long int 4 (32) от 0 до 4294967295 char * строка ``` ### Типы и указатели ```c= // при создание этих масивов по умолчанию не будут // нули и там может оказать любой мусор из кучи или стэка int a[100]; char b[20]; // тут же при создание мы сразу определяем значения //для каждого элемнта int c[5] = {0,1,2,3,4}; //для всех char d[8] = {0}; ``` ### Структуры обычная структура обращение идет через **.** ![](https://i.imgur.com/LJGDx7o.png) ссылка на структуру - обращение через **->** ![](https://i.imgur.com/cmydeX7.png) union ![](https://i.imgur.com/qEVrggz.png) ### Циклы ![](https://i.imgur.com/d1q2H87.png) ### Ветвления ### Типы WinAPI ```c Тип Определение BOOL typedef int BOOL BYTE typedef unsigned char BYTE CHAR typedef char CHAR DWORD typedef unsigned long DWORD INT typedef int INT LPCSTR typedef __nullterminated CONST CHAR *LPCSTR LPWSTR typedef WCHAR *LPWSTR WORD typedef unsigned short WORD PVOID typedef void *PVOID ``` unsigned - число без знака, в случае выхода значения за диапазон и получим переполнение ### Вызовы функции ![](https://i.imgur.com/8IWNNy2.png) docs.microsoft.com - искать тут A - функция получает ASCI символы W - получает unicode ### Visual Studio Полезные hotkey • Ctrl + Shift + B: сборка проекта • F9: поставить/снять брейкпоинт • F5: запуск приложения • F10: шаг отладки без захода в функцию • F11: шаг отладки с заходом в функцию • F12: перейти к определению функции или переменной ## Исполняемый файл исполняемые файлы .exe .dll .scr .msi .com .sys ### Структура PE • Заголовок DOS для обратной совместимости всегда начинаться с MZ • Заглушка DOS • Заголовок PE описывает внутренности файла для какой архитектуры, время компиляции, dll или exe, консольной или оконное описание директорий данных импорт-экспорт • Заголовки секций • Секции код, данные свои и импортированные ![](https://i.imgur.com/7J0H3i5.png) ![](https://i.imgur.com/AqQNU4d.png) для 64 и 32 разрядов структуры разные для 32 - 4 байт отступ для 64 - 8 байт переслушать часть ![](https://i.imgur.com/pBx4Txy.png) AddressOfEntryPoint - входная точка программы. BaseOfCode - адрес начала кода ImageBase - важен для библиотек, ImageDataDirectory каталоги данных Импорта, Экспорт, переменные для разных потоков Секция импорта - функции которые когда-либо будут использованы из другой библиотеки экспорт описывает функции, которые могут быть вызваны из этой библиотеки Секция импорта позволяет нам увидеть какие функции приложения собирается использовать и \это может нам понят какие возможности будут у приложения ![](https://i.imgur.com/qSLOgMR.png) DataDirectory[0] - export DataDirectory[1] - import ![](https://i.imgur.com/O8CWQtf.png) соответственно анализ экспорта позволяет быстро понять, что библиотека отдает наружу ### Секции PE • .text: Код • .data: Инициализированные данные все что уже точно определено и задано еще при компиляции • .bss: Неинициализированные данные все что определили, но не задали • .rdata: Константные данные эти две секции могут быть необязательно • .edata: Дескрипторы экспорта • .idata: Дескрипторы импорта • .reloc: Таблица релокации используя предпочтительный адрес из хедера ImageBase можем посчитать адреса, если возникли проблемы с размещением в памяти (так вроде понял) • .rsrc: Ресурсы иконки, манифесты и прочая ерунда. Любят использовать злоумышленники, так в ресурсы можно спрятать еще один исполняемый файл. • .tls: __declspec(thread) данные данные которые шарят между потоками. Ни какой связи с сертификатами ### Используемые библиотеки ```c= Библиотеки Функциональность kernel32.dll Содержит основную функциональность, связанную с доступом и обработкой памяти, файлов и аппаратного обеспечения advapi32.dll Предоставляет расширенный доступ к основным компонентам Windows, таким как менеджер служб и реестр; **шифрования** shell32.dll Предоставляет элементы оболочки Win32. програмный аналог explorer user32.dll Содержит все компоненты UI: кнопки, окна, действия пользователя gdi32.dll Отображает и обрабатывает графику ntdll.dll Предоставляет интерфейс доступа к ядру. большинство библиотек выше используют эту библиотеку. плохо документирована и может быть использованна продвинутыми злоумышлинниками wsock32.dll и ws2_32.dll Отвечает за низкоуровневый доступ к сети (голые сокеты) wininet.dll и winhttp.dll Отвечает за высокоуровневый доступ к сети (HTTP/HTTPS/FTP) ``` ## Понятие процесса ### Текущее состояние процесса • код запущенной программы • статические данные для запущенной программы • динамические данные, находящиеся в куче (heap), и указатель на кучу • указатель на следующую исполняемую инструкцию • стек (stack) с цепочкой вызовов функций(FILO) раскручивая цепочку стека вниз можно понять какие функции вызывались и с какими параметрами • значения CPU-регистров • набор системных ресурсов выделенная память, файлы, библиотеки ![](https://i.imgur.com/QvSyRkw.png) ![](https://i.imgur.com/ceYuKS8.png) ***PEB** - регион в памяти в который хранит данные о всех исполняемых файлах, загруженных внутрь в процесса Злоумышленник может используя эту структуру, может не прописывать к себе в зловред нужные функции из kernel32.dll или других библиотек, он может их найти в памяти и вызвать напрямую. rundll32.exe может запускать библиотеки и также используется злоумышленниками для запуска своих ## Системные процессы • System - само ядро и потоки режима ядра .sys(драйвера) • smss.exe - диспетчер сеансов rdp, smb etc • csrss.exe - клиент-сервер винды. **без родителя** есть одно кратковременное исключение • wininit.exe - • services.exe - фоновый процессы и службы. • svchost.exe - оболочка для запуска служб. Оба приложения выше очень любят злоумышленники. Смотреть обязательно откуда запущена служба + RuntimeBrocker.exe - прокси процесс для универсальных приложений винды из магазина. Позволяет запустить приложение независимо от архитектуры. Для каждого универсально приложения будет запущен этот процесс • taskhostw.exe - хост процесс планировщика задач. Запущен под svchost • lsass.exe - отвечают за подсистему локальной аутентификации. Проверка пароля и вход в систему • lsaiso.exe - дополнение в 10 , позволяет хранить креды изолированно от других процессов. Мешает приложениям типа мимикатз • winlogon.exe - обрабатывает пользовательские входы - выходы, загружает окружение пользователя, обращается к lsa для проверки логина и пароля • explorer.exe - обычно один на пользователя ![](https://i.imgur.com/Tqa7Xsj.png) --- 02:13:20 Alexey Polyakov: 0x80000000 02:18:19 Alexey Polyakov: rundll32 02:18:32 Михаил: периферия? 02:27:08 Alexey Polyakov: mimikatz 02:39:19 Alexey Polyakov: dll-h 02:52:15 Михаил: А где этот файл взять? 02:52:33 Temir: Какой файл отркрыть? 03:02:50 Михаил: HMODULE откуда такой тип? 03:03:02 Михаил: из заголовочного файла? 03:03:59 Михаил: Понял, спасибо 03:04:46 Alexey Polyakov: f12 03:09:17 Alexey Polyakov: f5 03:09:29 Михаил: мы предполагаем, что файл со зловредным кодом, который передаем на вход функции? 03:10:31 Alexey Polyakov: f10 03:16:48 Михаил: Не совсем понял для чего мы сделали прототипирование функций. Без этого мы не смогли бы использовать оригинальные функции напрямую из dll? 03:17:50 Михаил: Понял)) 03:18:01 Михаил: Чтобы обфусцировать 03:19:04 Alexey Polyakov: C:\Windows\SysWOW64 03:19:21 Alexey Polyakov: system32 sysWOW64 03:19:28 Михаил: Разрядность 03:20:06 Eduard Kolibabchuk: SysWOW == Windows on Windows64 03:20:07 Виктор Зварыкин: мдааа, Денис 03:34:25 Михаил: Хорошего вечера, спасибо!