HOWTO: Вызов функции в другом процессе
От: Сергей Холодилов Россия  
Дата: 30.10.04 08:21
Оценка: 195 (5) +1
Статья:
HOWTO: Вызов функции в другом процессе
Автор(ы): Сергей Холодилов
Дата: 13.02.2005
В статье описывается один из методов внедрения DLL. Разбираются способы взаимодействия с внедренной библиотекой.


Авторы:
Сергей Холодилов

Аннотация:
В статье описывается один из методов внедрения DLL. Разбираются способы взаимодействия с внедренной библиотекой.
Делай что должно, и будь что будет
Re: HOWTO: Вызов функции в другом процессе
От: Saintdmitry  
Дата: 13.02.05 07:42
Оценка:
СХ>В статье описывается один из методов внедрения DLL. Разбираются способы взаимодействия с внедренной библиотекой.

Меня интересует такой вопрос — а как некоторые программы(outpost firewall) узнают, что была произведенеа запись в адресное пространство другого процесса?
Re[2]: HOWTO: Вызов функции в другом процессе
От: Roman Pushkin Россия  
Дата: 13.02.05 10:52
Оценка:
Здравствуйте, Saintdmitry, Вы писали:

СХ>>В статье описывается один из методов внедрения DLL. Разбираются способы взаимодействия с внедренной библиотекой.


S>Меня интересует такой вопрос — а как некоторые программы(outpost firewall) узнают, что была произведенеа запись в адресное пространство другого процесса?


Элементарно! Через перехват WriteProcessMemory.
.
Re[3]: HOWTO: Вызов функции в другом процессе
От: Saintdmitry  
Дата: 13.02.05 11:08
Оценка:
Здравствуйте, Roman Pushkin, Вы писали:

RP>Элементарно! Через перехват WriteProcessMemory.


Во всех процессах сразу?
Re[4]: HOWTO: Вызов функции в другом процессе
От: SergH Россия  
Дата: 13.02.05 12:04
Оценка:
Здравствуйте, Saintdmitry, Вы писали:

S>Во всех процессах сразу?


Имхо, только в ядре.
Делай что должно, и будь что будет
Re[5]: HOWTO: Вызов функции в другом процессе
От: Saintdmitry  
Дата: 13.02.05 14:12
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Имхо, только в ядре.


Каким образом это можно осуществить?
Re[6]: HOWTO: Вызов функции в другом процессе
От: SergH Россия  
Дата: 13.02.05 14:33
Оценка:
Здравствуйте, Saintdmitry, Вы писали:

S>Каким образом это можно осуществить?


Теоретическое введение (NT/2000/XP/2003):
— большинство вызовов API реализовано через вызовы так называемого Native API
— реализация Native API находится в ntdll.dll
— эта реализация почти ничего не делает, только передаёт управление ядру (прерывание int 2Eh), перед этим сохраняя в регистре (EAX, по-моему) номер вызываемой функции и ещё где-то — указатель на стек с параметрами.
— В ядре есть большоя таблица функций, обработчик прерывания 2Eh по номеру функции вызывает функцию из таблицы.
— если в этой таблице поменять значение ячейки, будет вызвана не стандартная функция, а та, адрес которой записан.

Я почти не сомневаюсь, что WriteProcessMemory тоже реализована через вызов Native API...

Ещё могу посоветовать искать по сайту по комбинации слов "перехват" и "Руссинович" и читать Толстую зелёную книжку
Автор(ы): Дэвид Соломон, Марк Руссинович

Книга посвящена внутреннему устройству и алгоритмам работы основных компонентов
операционной системы Microsoft Windows 2000 (в том числе серверных версий) и
файловой системы NTFS 5. Детально рассмотрены и системные механизмы: диспетчеризация ловушек
и прерываний, DPC, APC, LPC, RPC, синхронизация, системные рабочие потоки, глобальные флаги и др.
Также описываются все этапы загрузки операционной системы и завершения ее работы.
Книга состоит из 13 глав, словаря терминов (находится на компакт-диске) и предметного указателя.
Книга предназначена системным администраторам, разработчикам серьезных приложений и всем, кто хочет
понять, как устроена операционная система Windows 2000. На прилагаемом к книге компакт-диске
содержатся системные утилиты, помогающие исследовать все аспекты внутренней работы операционной системы Microsoft Windows 2000,
в том числе специальный отладчик ядра LiveKd, позволяющий вести отладку работающей системы и не требующий второго
компьютера в отличие от стандартного отладчика ядра. Названия всех команд, диалоговых окон и других
интерфейсных элементов операционной системы приведены как на английском языке, так и на русском (по
коммерческой версии Microsoft Windows 2000 Server).
Делай что должно, и будь что будет
Re[7]: HOWTO: Вызов функции в другом процессе
От: SergH Россия  
Дата: 13.02.05 14:44
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, Saintdmitry, Вы писали:


Кстати, именно этот способ упоминается тут http://gzip.rsdn.ru/Forum/Message.aspx?mid=583638
Автор: Игорь В. Филимонов
Дата: 26.03.04

К сожалению, на мою провокацию пока никто не поддался, и статью писать не стал
Делай что должно, и будь что будет
Re[7]: HOWTO: Вызов функции в другом процессе
От: Saintdmitry  
Дата: 13.02.05 14:59
Оценка:
Я ведь могу, в обход Native API взять адрес WriteProcessMemory через GetProcAddress и использовать её, тем самым избегая любых перехватов?


Здравствуйте, SergH, Вы писали:

SH>Теоретическое введение (NT/2000/XP/2003):

SH>- большинство вызовов API реализовано через вызовы так называемого Native API
SH>- реализация Native API находится в ntdll.dll
SH>- эта реализация почти ничего не делает, только передаёт управление ядру (прерывание int 2Eh), перед этим сохраняя в регистре (EAX, по-моему) номер вызываемой функции и ещё где-то — указатель на стек с параметрами.
SH>- В ядре есть большоя таблица функций, обработчик прерывания 2Eh по номеру функции вызывает функцию из таблицы.
SH>- если в этой таблице поменять значение ячейки, будет вызвана не стандартная функция, а та, адрес которой записан.

SH>Я почти не сомневаюсь, что WriteProcessMemory тоже реализована через вызов Native API...

[/url]
Re[8]: HOWTO: Вызов функции в другом процессе
От: SergH Россия  
Дата: 13.02.05 15:08
Оценка:
Здравствуйте, Saintdmitry, Вы писали:

S>Я ведь могу, в обход Native API взять адрес WriteProcessMemory через GetProcAddress и использовать её, тем самым избегая любых перехватов?


Во-первых, нет, ты ничего не понял.
Во-вторых, жду объяснений, зачем тебе нужно обмануть программы, по функциональности похожие на антивирусы. Вирусописатели идут в лес. А может даже в бан.
Делай что должно, и будь что будет
Re[9]: HOWTO: Вызов функции в другом процессе
От: Saintdmitry  
Дата: 13.02.05 15:22
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Во-первых, нет, ты ничего не понял.

SH>Во-вторых, жду объяснений, зачем тебе нужно обмануть программы, по функциональности похожие на антивирусы. Вирусописатели идут в лес. А может даже в бан.

Я не вирусописатель, мозгов хватает.
Сейчас для практики меня эта задача не сильно беспокоит, а вот решение очень даже интересно.

А вообше такая позиция мне кажется довольно странной, и остановить может разве что только совсем не опытных вирусописателей.
Re[10]: HOWTO: Вызов функции в другом процессе
От: SergH Россия  
Дата: 13.02.05 15:27
Оценка: 3 (1) :)
Здравствуйте, Saintdmitry, Вы писали:

S>Я не вирусописатель, мозгов хватает.

S>Сейчас для практики меня эта задача не сильно беспокоит, а вот решение очень даже интересно.

Тогда объясняю. В обход Native API ты не можешь вообще ничего. Грубо говоря, имхо (не смотрел, только предпологаю) WriteProcessMemory реализована так:

int WriteProcessMemory(....)
{
    return Native_WriteProcessMemory(...);
}


А Native_WriteProcessMemory так:

int Native_WriteProcessMemory(....)
{
    asm mov eax, 12345
    asm int 2Eh
}


При желании, ты можешь напрямую вызвать int 2Eh, но перехват осуществляется ещё глубже, из драйвера, на уровне ядра. Чтобы такой перехват обойти, нужно тоже писать драйвер. А GetProcAddress тут совсем не причём...

Повторюсь, это мои фонтазии по поводу того, как я бы перехватывал WriteProcessMemory в типо-антивирусе, если бы мне было надо, ни реальных антивирусов, ни конкретно функцию WriteProcessMemory я не изучал.

S>А вообше такая позиция мне кажется довольно странной,


Угу. А ктому же я ещё и доверчивый...

S>и остановить может разве что только совсем не опытных вирусописателей.


А опытным мои советы не нужны, они всё это лучше меня знают.
Делай что должно, и будь что будет
Re[9]: HOWTO: Вызов функции в другом процессе
От: Roman Pushkin Россия  
Дата: 13.02.05 18:18
Оценка:
S>Я ведь могу, в обход Native API взять адрес WriteProcessMemory через GetProcAddress и использовать её, тем самым избегая любых перехватов?

Чтобы сделать то, что ты задумал, злой гений тебе нужно подгрузиться в систему раньше чем Firewall. Если ты подгружаешься раньше в систему, чем firewall, то ты автоматически становишься владельцем оригинального WriteProcessMemory и твой любимый Firewall будет перехватывать уже именно твой обработчик. А родной WriteProcessMemory ты уже можешь использовать в своих целях.

Но есть момент, неизвестно каким образом Firewall подгружается в систему. Может быть, тебе придется очень извращаться, чтобы загрузить свой софт раньше чем firewall.

Если все таки удасться сделать, не забудь чиркануть
.
Re: HOWTO: Вызов функции в другом процессе
От: kiamor  
Дата: 15.02.05 07:36
Оценка: 15 (1)
Здравствуйте, Сергей Холодиловю

ай-яй-яй... поправь имя-то
Стиви Уандер по аглицки пишется так: Stevie Wonder
Re[2]: HOWTO: Вызов функции в другом процессе
От: SergH Россия  
Дата: 15.02.05 07:52
Оценка:
Здравствуйте, kiamor, Вы писали:

K>ай-яй-яй... поправь имя-то

K>Стиви Уандер по аглицки пишется так: Stevie Wonder

Спасибо, исправлю, поиск в гугле действительно даёт Stevie Wonder. Но я не виноватая, меня в заблуждение ввели
http://www.geocities.com/greetings1001/I_just_call_to_say_I_love_you.html
Делай что должно, и будь что будет
Re[10]: HOWTO: Вызов функции в другом процессе
От: Stanky  
Дата: 15.02.05 08:39
Оценка:
> Сейчас для практики меня эта задача не сильно беспокоит, а вот решение
> очень даже интересно.
>
Тогда советую почитать Шрайбера!!!
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Re[10]: HOWTO: Вызов функции в другом процессе
От: Злость Россия  
Дата: 15.02.05 08:46
Оценка:
Здравствуйте, Roman Pushkin, Вы писали:

[skip]

RP>Если все таки удасться сделать, не забудь чиркануть


Необходимое условие — это возможность загрузить свой драйвер — если оно есть — то можно вызвать оригинальную функцию, даже если пропадчили SDT.
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re[7]: HOWTO: Вызов функции в другом процессе
От: _BOBAH_ Россия  
Дата: 15.02.05 10:19
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Ещё могу посоветовать искать по сайту по комбинации слов "перехват" и "Руссинович" и читать Толстую зелёную книжку
Автор(ы): Дэвид Соломон, Марк Руссинович

Книга посвящена внутреннему устройству и алгоритмам работы основных компонентов
операционной системы Microsoft Windows 2000 (в том числе серверных версий) и
файловой системы NTFS 5. Детально рассмотрены и системные механизмы: диспетчеризация ловушек
и прерываний, DPC, APC, LPC, RPC, синхронизация, системные рабочие потоки, глобальные флаги и др.
Также описываются все этапы загрузки операционной системы и завершения ее работы.
Книга состоит из 13 глав, словаря терминов (находится на компакт-диске) и предметного указателя.
Книга предназначена системным администраторам, разработчикам серьезных приложений и всем, кто хочет
понять, как устроена операционная система Windows 2000. На прилагаемом к книге компакт-диске
содержатся системные утилиты, помогающие исследовать все аспекты внутренней работы операционной системы Microsoft Windows 2000,
в том числе специальный отладчик ядра LiveKd, позволяющий вести отладку работающей системы и не требующий второго
компьютера в отличие от стандартного отладчика ядра. Названия всех команд, диалоговых окон и других
интерфейсных элементов операционной системы приведены как на английском языке, так и на русском (по
коммерческой версии Microsoft Windows 2000 Server).


А не подскажешь как можно ее приобрести через инет, но токо чтоб надежный источник был. Может кто уже покупал ?
Я просто побаиваюсь через инет что то приобретать — на..балово на каждом шаге

_BOBAH_, ICQ# 306404574, Status:

Posted by RSDN@Home v1.1.3; Winamp:Deep Purple — Mean Streak

Re[8]: HOWTO: Вызов функции в другом процессе
От: SergH Россия  
Дата: 15.02.05 10:22
Оценка:
Здравствуйте, _BOBAH_, Вы писали:

_BO>А не подскажешь как можно ее приобрести через инет, но токо чтоб надежный источник был. Может кто уже покупал ?

_BO>Я просто побаиваюсь через инет что то приобретать — на..балово на каждом шаге

Я пару раз пользовался Озоном и один раз Болеро — пока не обманывали. Но конкретно эту книжку покупал в обычном магазине.
Делай что должно, и будь что будет
Re[8]: HOWTO: Вызов функции в другом процессе
От: Stanky  
Дата: 15.02.05 14:29
Оценка:
> А не подскажешь как можно ее приобрести через инет, но токо чтоб
> надежный источник был.
>
Здесь!!!

> Может кто уже покупал ?

>
Я у них уже достоточное количество книг купил — оплачиваю наложным платежом!!!
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.