Быстрый поиск
Введите фрагмент названия статьи для поиска
Запись мини-дампа процесса на Ассемблере
07.02.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter
Дампы или мини-дампы создаются обычно в случае аварийного падения процесса или системы. С помощью специальных программ по дампам можно восстановить примерное окружение, на котором произошел сбой, проанализировать его и установить процесс или код, который привел к критическому сбою.Для создания дампов памяти есть официально документированная функция MiniDumpWriteDump из динамической библиотеки dbghelp.dll. C ее помощью можно точно настроить, какие данные должны попасть в создаваемый дамп. Вызывается она примерно так (вариант для текущего процесса):
Code (Assembler) : Убрать нумерацию
- ; Создать файл для записи дампа
- invoke CreateFile,fname,GENERIC_WRITE,\
- FILE_SHARE_WRITE,0,CREATE_NEW,\
- FILE_ATTRIBUTE_ARCHIVE,0
- mov [desc],eax
- ; Получить ID текущего процесса
- invoke GetCurrentProcessId
- mov ebx,eax
- invoke GetCurrentProcess
- MiniDumpNormal = 0x00000000
- ; Сделать дамп
- invoke MiniDumpWriteDump,eax,ebx,[desc],MiniDumpNormal,0,0,0
- ; Закрыть файл
- invoke CloseHandle,[desc]
rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump <PID> dump.dmp full
До некоторых пор таким способом можно было сохранить дамп процесса lsass.exe и затем при помощи какого-нибудь инструмента типа Mimikatz вытащить из него пароли учетных записей пользователей компьютера.
Читать статью целиком »
Просмотров: 285 | Комментариев: 0
Исследование защиты программы Process Lasso
14.01.2024 | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы Process Lasso
Process Lasso на протяжении вот уже двух десятков лет заслуженно сохраняет звание одного из самых мощных менеджеров процессов. Для каждого процесса можно вручную или автоматически установить приоритет, а также посмотреть детальную информацию о его модулях. Нежелательные процессы, нагружающие систему, можно автоматически завершать, а также блокировать запуск процессов из "черного списка". Также Process Lasso ведет лог запускаемых процессов, который сохраняется в журнал событий. Пробная версия урезана по функционалу, а за полную версию надо выложить денежку. Ну или не надо, смотря как подойти к вопросу.
Читать статью целиком »
Просмотров: 1240 | Комментариев: 11
Получение списка модулей процесса
13.06.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Для работы с процессами в Windows есть множество различных способов, например, ранее мы уже разбирали получение списка загруженных DLL с помощью PEB_LDR_DATA. Сегодня получим список DLL процесса при помощи недокументированных отладочных функций. Пугаться не надо, с ними мы уже работали при получении динамической памяти процесса.Начинаем с описания недостающих данных. Структура DEBUG_BUFFER есть по ссылке выше, а остальное вот.
Code (Assembler) : Убрать нумерацию
- struct DEBUG_MODULE_INFORMATION
- Reserved rd 2
- Base dd ?
- Size dd ?
- Flags dd ?
- Index dw ?
- Unknown dw ?
- LoadCount dw ?
- ModuleNameOffset dw ?
- ImageName rb 100h
- ends
- PDI_MODULES = 0x01
Читать статью целиком »
Просмотров: 459 | Комментариев: 0
Передача данных между процессами с помощью Mailslot
26.04.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Mailslot - один из самых простых способов обмена данными между процессами, который работает еще со времен Windows 95. Каналы Mailslot позволяют передавать данные от одного или нескольких клиентов к одному или нескольким серверам, в том числе в широковещательном режиме. На локальном компьютере может быть один серверный процесс, но в сети или в домене может одновременно работать несколько серверов. Количество клиентских приложений не ограничено. Принцип работы Mailslot схож с работой электронной почты.Основным недостатком Mailslot является то, что серверное приложение не может достоверно знать, от какого процесса и с какого компьютера было отправлено сообщение. В свою очередь, клиентское приложение не может узнать статус отправленного сообщения, то есть получено оно хоть каким-то сервером или нет. В остальном это неплохая замена сокетам, требующим сетевое подключение, или пайпам, которые могут быть открыты только двумя процессами и не поддерживают широковещательные рассылки.
Для создания канала используется функция CreateMailslot, которая в качестве одного из параметров принимает имя канала. Имя канала для серверного приложения должно иметь вид \\.\mailslot\имя_канала, при этом имя должно быть уникальным для приложения, но одинаковым в пределах клиента и сервера. Создавать канал должна серверная часть приложения. Она же определяет максимальный размер передаваемых сообщений и время ожидания. В случае необходимости этот параметр можно менять при помощи функции SetMailslotInfo.
Получив хэндл канала, сервер будет читать из него присланные сообщения. Обработчик выполняется в цикле по таймеру или же в отдельном потоке с задержкой между итерациями. Каждый шаг цикла начинается с получения состояния канала, это делается при помощи функции GetMailslotInfo, она возвращает количество сообщений в очереди на момент запроса и размер сообщения, которое будет получено первым. Если сообщений в очереди нет, то после выполнения функции параметр lpMessageCount будет равен нулю, а параметр lpNextSize примет значение MAILSLOT_NO_MESSAGE. Полученные сообщения читаются из канала функцией ReadFile, будто из обычного текстового файла.
Читать статью целиком »
Просмотров: 447 | Комментариев: 0
Запуск задания cron с интервалом меньше 60 секунд
31.08.2022 | Категория: Web-мастеру и не только | Автор: ManHunter
Формат crontab
Как известно из документации, минимальный интервал запуска заданий в cron равен 1 минуте. Причина такого ограничения понятна, минутный интервал нужен, чтобы не перегрузить систему параллельными задачами в случае некорректных настроек. А мне понадобилось запускать определенный процесс каждые 20 секунд. Да, можно было бы написать промежуточный скрипт, который запускался бы раз в минуту по планировщику, а потом запускал процессы с нужными интервалами. Но есть более красивое решение средствами самого cron. Для того чтобы какое-либо задание запускалось каждые 20 секунд, в файле crontab нужно сделать 3 записи, что-то типа такого:
####################################################
# Запуск задания каждые 20 секунд
####################################################
* * * * * /usr/local/bin/php -f /path/to/script.php
* * * * * (sleep 20 ; /usr/local/bin/php -f /path/to/script.php)
* * * * * (sleep 40 ; /usr/local/bin/php -f /path/to/script.php)
Теперь каждую минуту будет запускаться пакет из трех заданий, но самое первое стартует незамедлительно, второе запустится через 20 секунд, а третье только через 40 секунд. Таким образом исходная задача будет решена. А, например, для запуска заданий с интервалом в 30 секунд понадобятся только две записи, и пауза перед вторым заданием, соответственно, будет 30 секунд.
Просмотров: 1583 | Комментариев: 2