Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.08;
Скачать: CL | DM;

Вниз

запустить функцию в чужом процесе   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2004.08.08;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.032 c
1-1090502516
Eugenez
2004-07-22 17:21
2004.08.08
DLL: C -> Pas ???


4-1088044556
nick_mas
2004-06-24 06:35
2004.08.08
Имитировать нажатие Button в чужом окне.


14-1090256794
<DeL.>
2004-07-19 21:06
2004.08.08
Помогите!


3-1089703549
Orac
2004-07-13 11:25
2004.08.08
Переход на сетевые БД


1-1090567550
Fast
2004-07-23 11:25
2004.08.08
Проблема с кодировками