СХ>В статье описывается один из методов внедрения DLL. Разбираются способы взаимодействия с внедренной библиотекой.
Меня интересует такой вопрос — а как некоторые программы(outpost firewall) узнают, что была произведенеа запись в адресное пространство другого процесса?
Здравствуйте, Saintdmitry, Вы писали:
СХ>>В статье описывается один из методов внедрения DLL. Разбираются способы взаимодействия с внедренной библиотекой.
S>Меня интересует такой вопрос — а как некоторые программы(outpost firewall) узнают, что была произведенеа запись в адресное пространство другого процесса?
Здравствуйте, Saintdmitry, Вы писали:
S>Каким образом это можно осуществить?
Теоретическое введение (NT/2000/XP/2003):
— большинство вызовов API реализовано через вызовы так называемого Native API
— реализация Native API находится в ntdll.dll
— эта реализация почти ничего не делает, только передаёт управление ядру (прерывание int 2Eh), перед этим сохраняя в регистре (EAX, по-моему) номер вызываемой функции и ещё где-то — указатель на стек с параметрами.
— В ядре есть большоя таблица функций, обработчик прерывания 2Eh по номеру функции вызывает функцию из таблицы.
— если в этой таблице поменять значение ячейки, будет вызвана не стандартная функция, а та, адрес которой записан.
Я почти не сомневаюсь, что WriteProcessMemory тоже реализована через вызов Native API...
Ещё могу посоветовать искать по сайту по комбинации слов "перехват" и "Руссинович" и читать Толстую зелёную книжку
Я ведь могу, в обход 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]
Здравствуйте, Saintdmitry, Вы писали:
S>Я ведь могу, в обход Native API взять адрес WriteProcessMemory через GetProcAddress и использовать её, тем самым избегая любых перехватов?
Во-первых, нет, ты ничего не понял.
Во-вторых, жду объяснений, зачем тебе нужно обмануть программы, по функциональности похожие на антивирусы. Вирусописатели идут в лес. А может даже в бан.
Здравствуйте, SergH, Вы писали:
SH>Во-первых, нет, ты ничего не понял. SH>Во-вторых, жду объяснений, зачем тебе нужно обмануть программы, по функциональности похожие на антивирусы. Вирусописатели идут в лес. А может даже в бан.
Я не вирусописатель, мозгов хватает.
Сейчас для практики меня эта задача не сильно беспокоит, а вот решение очень даже интересно.
А вообше такая позиция мне кажется довольно странной, и остановить может разве что только совсем не опытных вирусописателей.
Здравствуйте, 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>и остановить может разве что только совсем не опытных вирусописателей.
А опытным мои советы не нужны, они всё это лучше меня знают.
S>Я ведь могу, в обход Native API взять адрес WriteProcessMemory через GetProcAddress и использовать её, тем самым избегая любых перехватов?
Чтобы сделать то, что ты задумал, злой гений тебе нужно подгрузиться в систему раньше чем Firewall. Если ты подгружаешься раньше в систему, чем firewall, то ты автоматически становишься владельцем оригинального WriteProcessMemory и твой любимый Firewall будет перехватывать уже именно твой обработчик. А родной WriteProcessMemory ты уже можешь использовать в своих целях.
Но есть момент, неизвестно каким образом Firewall подгружается в систему. Может быть, тебе придется очень извращаться, чтобы загрузить свой софт раньше чем firewall.
Если все таки удасться сделать, не забудь чиркануть
[skip]
RP>Если все таки удасться сделать, не забудь чиркануть
Необходимое условие — это возможность загрузить свой драйвер — если оно есть — то можно вызвать оригинальную функцию, даже если пропадчили SDT.
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
А не подскажешь как можно ее приобрести через инет, но токо чтоб надежный источник был. Может кто уже покупал ?
Я просто побаиваюсь через инет что то приобретать — на..балово на каждом шаге
_BOBAH_, ICQ# 306404574, Status:
Posted by RSDN@Home v1.1.3; Winamp:Deep Purple — Mean Streak
Здравствуйте, _BOBAH_, Вы писали:
_BO>А не подскажешь как можно ее приобрести через инет, но токо чтоб надежный источник был. Может кто уже покупал ? _BO>Я просто побаиваюсь через инет что то приобретать — на..балово на каждом шаге
Я пару раз пользовался Озоном и один раз Болеро — пока не обманывали. Но конкретно эту книжку покупал в обычном магазине.
> А не подскажешь как можно ее приобрести через инет, но токо чтоб > надежный источник был. > Здесь!!!
> Может кто уже покупал ? >
Я у них уже достоточное количество книг купил — оплачиваю наложным платежом!!!
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!