Форум: "WinAPI";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
Вниззапустить функцию в чужом процесе Найти похожие ветки
← →
juiceman (2004-06-15 21:54) [0]Допустим, внедряем свою библиотеку в адресные пространства всех процессов в системе (при помощи реестра). Как запустить на выполнение функцию этой библиотеки только в определенном процессе?
← →
juiceman (2004-06-16 00:36) [1]Уже сам надумал, хоть может посоветуете чего получше ?
Подменить чужую оконную функцию конечного процесса, и при необходимости посылать ей условное сообщение. Она запустит функцию из спроэцированной библиотеки а потом прежнюю оконную. Второй спосооб- удаленный поток. Тут было бы все проще, только в 98 не работает %(
← →
Игорь Шевченко © (2004-06-16 01:05) [2]
> Допустим, внедряем свою библиотеку в адресные пространства
> всех процессов в системе (при помощи реестра). Как запустить
> на выполнение функцию этой библиотеки только в определенном
> процессе?
GetModuleFileName(0) ?
Я повторюсь с вопросом: что такое интересное творишь ?
← →
Digitman © (2004-06-16 12:00) [3]
> в адресные пространства всех процессов в системе
> запустит функцию из спроэцированной библиотеки а потом прежнюю
> оконную
далеко не все процессы в системе являются GUI-процессами и, значит, рассуждать о наличии "оконной функции" во ЛЮБОМ процессе по меньшей мере наивно
← →
Игорь Шевченко © (2004-06-16 12:06) [4]Digitman © (16.06.04 12:00)
> далеко не все процессы в системе являются GUI-процессами
>
В такие с помощью реестра внедриться не получится. Насколько я понимаю, речь идет о внедрении при помощи параметра Appinit_DLL
← →
Digitman © (2004-06-16 12:36) [5]
> Игорь Шевченко © (16.06.04 12:06) [4]
Игорь, мне это известно .. ты бы это автору адресовал .. ибо он поставил знак равенства между "все процессы" и "GUI-процессы", ничтоже сумняшеся пришпандорив туда и Appinit_DLL и "оконную функцию"
← →
Игорь Шевченко © (2004-06-16 13:04) [6]Digitman © (16.06.04 12:36)
Я надеюсь, автор это тоже прочитает :) Конечно, ему адресовано
← →
Digitman © (2004-06-16 13:32) [7]
> juiceman (15.06.04 21:54)
система внедряет модуль в АП GUI-процесса еще ДО создания каких бы то ни было окон
о каких оконных ф-циях может идти речь, если никаких окон еще нет в этот момент ?
другой вопрос, что внедряемый модуль на этапе инициализации получает управление и при этом имеет возможность локально перехватить будущие WinAPI-вызовы для создания окон и назначения окнам оконных ф-ций .. при этом становится возможным подменить адрес точки входа в оконную ф-цию на адрес нужной ф-ции
← →
DeadMeat © (2004-06-16 14:29) [8]> juiceman
Если я правильно понял, то ты внедрил свою библиотеку через реестр... Значит это в Win2k (помоему в Win9x, такое не проходит)... А соответсвтенно я не понял вот этого
Второй спосооб- удаленный поток. Тут было бы все проще, только в 98 не работает %(
Ты ведь и так работаешь в Win2k, а значит можно и удалённым потоком пользоваться... Или я чего не понял...
P.S. Кстати, гдето читал, что CreateRemoteThread в Win9x всёже есть, и работает... Вот только не экспортируется...
---
...Death Is Only The Begining...
← →
Digitman © (2004-06-16 15:16) [9]
> Допустим, внедряем свою библиотеку
> Как запустить на выполнение функцию этой библиотеки
непонятно, что тут мудрить
в ходе иниц-ции экз-ра внедренного модуля ты получил управление и волен вызывать ЛЮБЫЕ ф-ции этого модуля
← →
juiceman (2004-06-16 23:37) [10]Да, явно поспешил с вопросом. Задача была после внедрения выполнить нужный код в опр. процессе. Чуточку разобравшись уяснил как все сделать, тут действительно проблем нет.
Это все из-за этого поганого внедрения через реестр - теперь внедряю через удаленные потоки и все ОК, попадаю сразу в цель. Как вы сказали, это в 98-ой тоже работает, но испльзуя сторонний модуль. Так вроде она существует но ничего не делает.
По поводу GUI это и слону понятно что нет окна нет и его подкласса. Я же не говорил, что нужно выполнить код во всех процессах, мне нужен мой - а это GUI-приложение.
> Я повторюсь с вопросом: что такое интересное творишь ?
На самом деле я ничего такого интересного не творю а просто читаю Рихтера :) Вот хотелось-бы "Контроллер метала" написать, чтобы в сети если кто-то что-то дернул - сразу сигнал на сервер поступет. Еще хочу программу написать, чтобы можно было исходники через нее предоставлять посторонним но они не могли их тупо копировать - набирать с экрана устанут, да и по времени юзания можно ограничить. Еще есть парочка идей...
← →
Digitman © (2004-06-18 08:49) [11]
> Это все из-за этого поганого внедрения через реестр - теперь
> внедряю через удаленные потоки и все ОК, попадаю сразу в
> цель
есть и третий вариант - глоб.хук
при установке глоб.хука (любого допустимого типа) система так же автоматически внедряет экз-р хук-модуля в АП GUI-процесса при его старте
так как хук-модуль - это, прежде всего, обычная ДЛЛ, он имеет ф-цию DLLEntryPoint(), которую система будет вызывать с параметром DLL_PROCESS_ATTACH для инициализации хук-модуля в контексте его загрузки .. известно, что если DLLEntryPoint(DLL_PROCESS_ATTACH) вернет системе ненулевой результат (DLL_INIT_FAIL), система воспринимает его как отказ инициализации модуля и немедленно выгружает образ модуля из АП процесса, сообщая вызывающему загрузку коду об отказе вызова LoadLibrary() .. в случае хук-ДЛЛ попытка ее загрузки производится не прикладным кодом процесса, а неявно самой системой .. рискну предположить, что и в этом случае существует возможность вернуть системе из DLLEntryPoint(DLL_PROCESS_ATTACH) результат, указывающий о невозможности загрузки хук-модуля в АП дан.процесса .. признаком , служащим сигналом для возврата из DLLEntryPoint() с кодом отказа, служит неравенство имени тек.процесса и наперед известного имени (см. [2])
← →
juiceman (2004-06-22 11:47) [12]
> Digitman © (16.06.04 15:16) [9]
> непонятно, что тут мудрить
> в ходе иниц-ции экз-ра внедренного модуля ты получил управление
> и волен вызывать ЛЮБЫЕ ф-ции этого модуля
Вызывать в момент инициализации ? Требовалось в любой другой момент их вызывать
← →
Digitman © (2004-06-22 12:17) [13]
> juiceman (22.06.04 11:47) [12]
> в любой другой момент
а какие конкретно программные события ведут к необходимости вызова ф-ций в ДЛЛ-модуле ?
← →
Тимохов © (2004-06-22 12:24) [14]
> Вызывать в момент инициализации ? Требовалось в любой другой
> момент их вызывать
имхо можно при инициализации организовать в чужом процессе поток и заставить его ждать сообщений.
когда получит сообщение (в любой другой момент времени), то выполняет соответствующую функцию.
← →
evvcom © (2004-06-22 14:05) [15]
> при инициализации организовать в чужом процессе поток и
> заставить его ждать сообщений
И кто этому потоку пошлет сообщение?
В момент инициализации можно организовать перехват нужных функций, чтобы впоследствии управление передавалось твоей
функции.
← →
Тимохов © (2004-06-22 14:16) [16]
> И кто этому потоку пошлет сообщение?
В каком смысле?
А автор пишет:
> Требовалось в любой другой момент их вызывать
т.е. требовалось вызвать, значит есть вызывающий, т.е. хотящий, чтобы поток в чужом процессе что-нибудь выполнил. Вот тот, кто хочет пусть и посылает.
А вообще - самый верный ответ это 13.
← →
evvcom © (2004-06-22 14:29) [17]И еще автор пишет
> Подменить чужую оконную функцию конечного процесса, и при
> необходимости посылать ей условное сообщение. Она запустит
> функцию из спроэцированной библиотеки а потом прежнюю оконную.
т.е. более напрашивается, что он все же хочет подменить оконную функцию. Для этого в момет инициализации перехватываем CreateWindow(Ex) со всеми вытекающими последствиями.
А вообще уже началась игра в телепатию.
← →
evvcom © (2004-06-22 14:31) [18]Забыл:
> что он все же хочет подменить оконную функцию
а для этого организовывать доп. поток совсем не нужно.
← →
Тимохов © (2004-06-22 14:45) [19]
> А вообще уже началась игра в телепатию.
согласен.
← →
juiceman (2004-06-25 23:50) [20]Вот, через сообщения и вызываю. А создавать для этого отдельный поток в моем случае совсем нет необходимости.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.331 c