Hibernation процесса

kruzer25

Интересно, а можно ли усыпить конкретный процесс, наподобие того, как он усыпляется при hibernate ОС - чтобы остался дамп, из которого в любой момент можно было бы этот процесс развернуть, в то состояние, в каком он был при засыпании?

AlexV769

Его можно поставить в состояние 'suspended', при этом он перестанет жрать проц.

kruzer25

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

sirius

Имхо - только если в ВМ запускать.

Vladislav177Rus

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

kruzer25

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

BondarAndrey

Под Linux существует проект cryopid, позволяющий полностью "заморозить" процесс и возобновить его выполнение на другой машине. Подробности - у гугла.
А вообще, штатная остановка процесса в Linux - kill -STOP PID. Позволяет прозрачно для процесса остановить его выполнение. К сохранение образа не поддерживается.

kruzer25

сохранение образа не поддерживается.
так в созранении образа и весь интерес, как в винде остановить процесс, тут уже сказали

kruzer25

Current features are:
Can run as an ordinary user! (no root privileges needed)
Интересно, и как же оно работает? Ему ведь в любом случае надо залезть в память целевого процесса - или в линуксе такое поведение считается нормальным?

BondarAndrey

Сохранение образа не поддерживается при остановке посылкой сигнала STOP. А проект cryopid позволяет это и ещё многое другое.

BondarAndrey

Ему ведь в любом случае надо залезть в память целевого процесса
Зачем?
Естественно, заморозить можно только свои процессы.

kruzer25

Сохранение образа не поддерживается при остановке посылкой сигнала STOP
Да, это я и имел в виду, я в том посте про cryopid и не говорил.

kruzer25

Зачем?
А как ещё тогда ты представляешь сохранение процесса?
Естественно, заморозить можно только свои процессы.
Конечно, иначе это была бы вообще мегадырища.
Но и так - получается, что любой процесс, запущенный тобой, может залезть в другие твои процессы и сделать там что угодно. Что тоже очень неприятно. А ещё говорят, что в линуксе вирусов нет - получается, что их нет, только потому что их никто не пишет, а возможности очень даже есть...
ЗЫ: Гуру, просвятите меня - а в винде можно залезть в другой процесс того же пользователя, у которого тот же (не более низкий) уровень привилегий? В cingularity, насколько я в курсе, вообще нельзя получить доступ к памяти другого процесса, независимо от привилегий и пользователей...

mkrec

тут возникает такой вопрос. что делать с открытыми файлами и прочими разделяемыми объектами?

kruzer25

тут возникает такой вопрос. что делать с открытыми файлами и прочими разделяемыми объектами?
А что с ними делает обычный hibernate?
Думаю, открытые файлы просто закрываются, а после восстановления - опять открываются (при этом, все записанные, но не сохранённые данные будут где-нибудь кэшироваться).
Точно так же с сетевыми подключениями.
Окна - само окно сохраняем вместе с процессом, информацию о его наличии - с оконной средой, после загрузки восстанавливаем связь. Или, в случае с hibernate процесса - информацию о наличии окна складываем рядом с дампом процесса, а перед его развёртыванием - на основании этой информации создаём такое окно, после чего восстанавливаем связь.

mkrec

обычный хибернейт может как закрывать файлы, так и не закрывать - это не играет роли, т.к. во время спячки к этим файлам все равно никто не полезет. Сложнее с другими объектами - например, с воткнутым оборудованием. И сложнее настолько, что обычный хибернейт нередко подглючивает с этими устройствами.
Так вот, что делать с открытым файлом в случае гибернации процесса? Закрыть? Давать ли к нему доступ другим процессам? Что будет, если процесс просыпается - а файла нет? Куда девать файл, если ты переносишь образ гибернированного процесса на другой комп? Переносить с собой? А если там уже есть одноименный файл? [файл понимайте в широком смысле слова]

Marinavo_0507

> Так вот, что делать с открытым файлом в случае гибернации процесса? Закрыть? Давать ли к нему доступ другим процессам?
Да.
> Что будет, если процесс просыпается - а файла нет?
EIO
> Куда девать файл, если ты переносишь образ гибернированного процесса на другой комп? Переносить с собой?
Кто переносит образ, тот и решает.

lilia_rass

винде можно залезть в другой процесс того же пользователя
Можно, отладчики так делают.

kruzer25

Ты не дочитал мой пост.
Те отладчики, которые мне известны - работают не только от имени системы, но вообще в режиме ядра.
А эта cryopid умеет залезать в другие процессы даже из-под ограниченной учётной записи, как я понял, безо всякой установки и патченья ядра.

Vladislav177Rus

WinAPI ReadProcessMemory

BondarAndrey

Прочитать адресное пространство процесса можнои в windows, соответствующая функция есть в ntdll (возможно, есть её экспорт в win32 api).

lilia_rass

Visual Studio в режиме ядра работает? IDA? OllyDbg? gdb?

evgen5555

Он ничего этого не знает, нахрена ему это

kruzer25

gdb
Под юниксы
IDA
Если ты про Interactive Disassembler - посмотрел у них сейчас на сайте, насколько я понял, этот отладчик в чужую память и не лезет, ты ему даёшь не процесс, а исполняемый файл. Ну и даже лезть в память дочернего процесса, в принципе, тоже не преступление.
А этот cryopid лезет в память чужих процессов.

feliks28

Под юниксы
В MinGW есть порт.

kruzer25

И он будет отлаживать виндовые процессы?

lilia_rass

Как и любой другой нормальный отладчик, IDA умеет attach'иться к уже запущенным процессам.

lilia_rass

Ну а почему нет?

kruzer25

Не нашёл этого у них на сайте.
Можно сцылку? Желательно с описанием процесса.

pitrik2

http://www.datarescue.com/idabase/pix/pc1.gif
разве IDA не из-под себя запускает процесс? тоесть это получается его ребенок, потому он к нему и аттачится
как и пенартур, сомневаюсь что он сможет присоединиться к не из-под себя запущенному процессу
еще посмотрел что нового в 5.1
http://www.datarescue.com/idabase/ida51news.pdf
там сразу же такой текст:
Mac OS X requires debuggers to have setgid 'procmod' permissions. Please execute the
following commands as administrator before using the debugger:
chgrp procmod mac_server
chmod g+s mac_server

kruzer25

Можно
Замечательная дыра - можно залезть в память соседнего процесса (например, firefox) и прочитать пароли
И ведь как всё замечательно - пока линуксоиды так уверены в своей непобедимости, и говорят, что в ядре нет бэкдоров - кто-нибудь утянет все их пароли через обычное пользовательское приложение
Или считается, что нормальный пользователь должен все свои приложения запускать в sandbox-ах? Тогда и впрямь без chroot-а никуда.

katrin2201

hint: ArtMoney
double hint: apparmor, selinux, etc
ps убей сибя

Vladislav177Rus

Для ReadProcessMemory у приложения должны быть соответствующие права (доступны по дефолту из под админа). Основная проблема винды в том, что все под админами и сидят.
Немного подумал и пришел к выводу, что с помощью драйвера в ринг0 вполне можно сделать полный дамп процесса, включая объекты ядра, и восстановить, соответственно, тоже, отредактировав таблицу отображения виртуальных адресов процесса на физические и пересоздав объекты ядра. Из юзер-мода почти уверен, что невозможно сделать работающее в общем случае решение.
Ах! Первый раз вижу, чтобы предложил кому-то убить себя! Мой кумир мертв

katrin2201

Для ReadProcessMemory у приложения должны быть соответствующие права(доступны по дефолту из под админа). Основная проблема винды в том, чтовсе под админами и сидят.
Не уверен точно что там с правами.
Но артмани спокойно бегает в висте из-под обычного пользователя. Разумеется "артит" приложения того же пользователя.

kruzer25

Но артмани спокойно бегает в висте из-под обычного пользователя. Разумеется "артит" приложения того же пользователя.
То есть, какой-нибудь винамп или миранда могут запросто, если захотят, спереть мой пароль на почту?

kruzer25

hint: ArtMoney
double hint: apparmor, selinux, etc
Мне сейчас влом что-то искать насчёт этих artmoney и apparmor.
Но selinux, насколько я понимаю, сам по себе - ядерная хрень. А в том, чтобы получить доступ к своим детям, как я уже сказал - ничего совсем уж криминального нет.

katrin2201

Позанудствую.
Они могут залезть в память твоего почтового клиента. И почитать там чего-нибудь.
Достаточно ли этого будет для того, чтоб спереть пароль - это уже другой вопрос.

kruzer25

Да, я не думал, что в висте всё настолько плачевно...

katrin2201

artmoney - прога, которая ищет в памяти процесса заданные числа, и может их менять (ну типа найти в РТСе место, где хранится кол-во твоего спайса, и приписать туда пару нулей)
этот хинт был к тому, чтоб ты не испытывал иллюзий по поводу того, что у майкрософт все не так
второй хинт был к тому, что при повышенной параноидальности от этого можно защищаться с помощью упомянутых софтин (в винде они, разумеется, не живут). какие они уж там - ядерные-неядерные - дело десятое.

katrin2201

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

Vladislav177Rus

Да-да, для того, чтобы выковырять пароль, лезть в память процесса совершенно не нужно.
Оставить комментарий
Имя или ник:
Комментарий: