Источник: https://github.com/AnaktaCTF/CTF/blob/main — PWN/Процесс и поток.md

Процессом обычно называют программу запущенную на системе. Когда исполняемый файл начинает исполняться – он превращается в процесс. Здесь важно понять различие:

Каждый запуск одной и той же программы порождает отдельный процесс. Каждый такой процесс соответствует одному и тому же исполняемому файлу.

Если файл физически находится на жёстком диске, то процесс – уже в оперативной памяти, а следовательно, и инструкции программы также находятся в ней.
Программа представляет собой статический набор команд, а процесс — это набор ресурсов и данных, использующихся при выполнении программы.

Процесс в Windows состоит из следующих компонентов:

  • Структура данных, содержащая всю информацию о процессе, в том числе список открытых дескрипторов различных системных ресурсов, уникальный идентификатор процесса, различную статистическую информацию и т.д.;

  • Адресное пространство - диапазон адресов виртуальной памяти, которым может пользоваться процесс;

  • Исполняемая программа и данные, проецируемые на виртуальное адресное пространство процесса.
    Pasted image 20240102211344

  • Process ID: идентификатор каждого из процессов в ОС;

  • State: текущее состояние процесса;

  • Privileges: разрешения доступа к системным ресурсам;

  • Pointer: указатель на родительский процесс;

  • Priority: приоритет процесса и другая информация, которая требуется для планирования процесса;

  • Program Counter: указатель на адрес следующей команды, которая должна быть выполнена;

  • CPU registers: регистры процессора, необходимые для состояния исполнения;

  • Accounting Information: уровень нагрузки на процессор, статистика и другие данные;

  • I/O Information: список ресурсов, использующих чтение и запись.

Процесс может находиться в нескольких состояниях:Pasted image 20240102211534

  • Start: начальное состояние при создании процесса;
  • Ready: процесс ожидает исполнения на процессоре. В течение работы процессор может переключаться между процессами, переводя одни в режим готовности, другие – в режим исполнения;
  • Running: выполнение инструкций;
  • Wait: процесс переходит в состояние ожидания. Например, ждёт ввода данных или получения доступа к файлу;
  • Terminated: как только процесс завершится, он перейдёт в это состояние и будет ожидать удаления.

Список процессов на вашем ПК можно посмотреть командой tasklist в cmd или в диспетчере задач. Также существуют сторонние утилиты для Windows (например, Process Explorer или Process Hacker), которые упрощают работу с процессами в ОС.

Для каждого процесса операционная система создает один главный поток (Thread), который является потоком выполняющихся по очереди команд центрального процессора. При необходимости главный поток может создавать другие потоки, пользуясь для этого программным интерфейсом (API) операционной системы.

Все потоки, созданные процессом, выполняются в адресном пространстве этого процесса и имеют доступ к ресурсам процесса. Однако поток одного процесса не имеет никакого доступа к ресурсам потока другого процесса, так как они работают в разных адресных пространствах. При необходимости организации взаимодействия между процессами или потоками, принадлежащими разным процессам, следует пользоваться системными средствами, специально предназначенными для этого.

Как во всех ситуациях, и здесь есть исключения. Например, существует несколько способов внедрить код одного процесса в другой с помощью хакерского ПО. Такое внедрение также называется термином "[[Process Injection]]".

Исполнение процесса в общих чертах выглядит следующим образом:

  1. Операционная система проверяет является ли исполняемый файл исполняемым (происходит проверка структуры заголовков и секций файла);
  2. Операционная система проверяет можно ли вообще запускать процесс;
  3. Исполняемый файл загружается с жёсткого диска в свободные участки оперативной памяти;
  4. Инструкции программы начинают поочерёдно исполняться на процессоре;
  5. В журнале аудита Windows появляется запись о том, что был создан новый процесс;
  6. В процессе исполнения инструкций возможны следующие действия:
    • Чтение, запись и другие операции с файлами, в том числе и исполняемыми;
    • Преобразование данных, которые хранятся внутри самого процесса;
    • Выполнение внутренних вычислений;
    • Вывод изображения на экран;
    • Воспроизведение аудиодорожки;
    • Создание нового сетевого подключения;
    • Исполнение другого исполняемого файла;
    • Прерывания исполнения программы;
    • Временная выгрузка процесса из оперативной памяти в файл подкачки;
    • Загрузка динамически подключаемых библиотек;
    • Вообще что угодно, что было написано в инструкциях программы.
  7. Завершение процесса:
    • Его удаление из оперативной памяти;
    • В журнале аудита появляется запись о том, что процесс был завершён.

Если для запуска процесса недостаточно памяти, он может быть помещён в pagefile (файл подкачки, который располагается на жёстком диске). Эта память медленнее оперативной, но другого выхода нет