Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.03 c
1-1090842271
Magic_STI
2004-07-26 15:44
2004.08.08
трабла с ИНИ-файлами.


14-1090483849
Lotus
2004-07-22 12:10
2004.08.08
Взять данные из многих форматов


1-1090901198
race1
2004-07-27 08:06
2004.08.08
обратная память


3-1089902181
Leech
2004-07-15 18:36
2004.08.08
SQL запрос на Paradox


1-1090784137
sdw_syscoder
2004-07-25 23:35
2004.08.08
НАДО ПРЕОБРАЗОВАТЬ !!! Y --> $XX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский