Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отслеживание запусков других приложений

3.1K
22 марта 2007 года
geza
85 / / 02.02.2005
Как это реализвать?
22K
22 марта 2007 года
black_priest
19 / / 12.03.2007
OpenProcess или FindWindow не подходит?
7.5K
23 марта 2007 года
sadman
45 / / 21.01.2006
По-пробуй установить хук. Я только не помню какой именно нужен. Но как-то через хуки это реализовать можно
Удачи :)
261
23 марта 2007 года
ahilles
1.5K / / 03.11.2005
Цитата: black_priest
OpenProcess или FindWindow не подходит?


Это вообще к чему?(каждую секунду просматривать список процессов и окон вообще черезжопный метод)

Поставить хук на сообщения окон и обрабатывать сообщения создания и уничтожения, потом у каждого окна получать процесс родитель, вот и всё.

4.6K
23 марта 2007 года
Tokolist
268 / / 22.03.2007
[QUOTE=sadman]По-пробуй установить хук.[/QUOTE]
Нет, к сожалению, таких хуков (но может и ошибаюсь я).

[QUOTE=ahilles]Поставить хук на сообщения окон и обрабатывать сообщения создания и уничтожения, потом у каждого окна получать процесс родитель, вот и всё.[/QUOTE]

А если приложение создает несколько окон? А если вообще нет окон у приложения? Тоже не очень хорошо получается :)

Тут нужно или на уровне ядра или так
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1279&mode=print
257
23 марта 2007 года
kosfiz
1.6K / / 18.09.2005
вот еще вариант:
в реестре есть ключ:
 
Код:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Window NT\CurrentVersion\Windows

там смотрим AppInit_DLLs. сюда можно записать dll'шку которая будет подгружаться к процессам при их запуске. соответственно все, что будет нужно для слежения за процессами это написать длл и в ней код для DLL_PROCESS_ATTACH и для DLL_PROCESS_DETACH. как сообщить следящему приложению о запуске или окончании работы процесса это уже другой вопрос, но тоже решаемый.
8.9K
24 марта 2007 года
Kap
77 / / 10.09.2006
Если на машине у пользователя стоит антивирус, то внедрять dll в процесс неполучится. Сузь задачу. Для разных ситуаций решение будет выглядеть по- разному. А если у процесса не будет окон, то хорошо бы знать что- то об этом процессе (например- где он лежит, кто его вызывает...). А вообще- в сети есть open- source диспетчеры файлов. Если хочешь общего решения- посмотри их код.
261
24 марта 2007 года
ahilles
1.5K / / 03.11.2005
на сайте wasm.ru у MS-Rem есть статьи перехвата, так вот он там отслеживал создание процессов перехватом функции ZwCreateThread из ntdll.dll
334
24 марта 2007 года
HexEdit
809 / / 27.07.2006
Я думаю, что нормально отслеживать запуск приложений, лучше перехватом, только не ZwCreateThread а (Zw|Nt)CreateProcess(Ex)
257
24 марта 2007 года
kosfiz
1.6K / / 18.09.2005
[quote=Kap]Если на машине у пользователя стоит антивирус, то внедрять dll в процесс неполучится.[/quote]
это почему? если длл ничего такого не делает, что можно принять за действия вируса или еще какой мрази, то антивирь либо ничего не покажет либо спросит "разрешить действие или нет?", если пользователь ознакомлен с работой программы и полностью ей доверяет, то разрешит и все на этом закончиться.
по-крайней мере этот способ реализовать проще чем перехват, и, на мой взгляд, он получше проверки списка процессов и поиска окон.

P.S. если бы мне надо было реализовать подобную задачу, то я бы делал именно через длл.
4.6K
24 марта 2007 года
Tokolist
268 / / 22.03.2007
К сожалению, ключ AppInit_DLLs работает только в NT-подобных :(
Поэтому нужно учитывать для какой ОСи будет разрабатывается приложение.
261
25 марта 2007 года
ahilles
1.5K / / 03.11.2005
а сейчас на 90% машин установлены WinXP на 9% Win2000, можешь не париться, ну я надёеюсь что на висте есть такой ключ
3.1K
25 марта 2007 года
geza
85 / / 02.02.2005
Спасибо всем за помощ, будем пробовать!
4.6K
25 марта 2007 года
Tokolist
268 / / 22.03.2007
[QUOTE=ahilles]а сейчас на 90% машин установлены WinXP на 9% Win2000, можешь не париться, ну я надёеюсь что на висте есть такой ключ[/QUOTE]

А может автор пишет прогу для узкого круга фанатов Мастдайки :)

[QUOTE=ahilles]ну я надёеюсь что на висте есть такой ключ[/QUOTE]
Если верить этому
http://groups.google.de/group/microsoft.public.win32.programmer.kernel/browse_frm/thread/fbdefc5170b44a3e

то Виста не поддерживает данный ключ. Да и на сайте Милкософта нет этой ОСи в списке поддерживаемых

http://support.microsoft.com/kb/197571

Скорей всего это сделано с соображений безопасности.
334
26 марта 2007 года
HexEdit
809 / / 27.07.2006
[quote=Tokolist]А может автор пишет прогу для узкого круга фанатов Мастдайки[/quote]
Сходи еще по вот этой ссылке: http://support.microsoft.com/kb/134655/ :).
То же можно реализовать под NT.... Хотя думаю, это уже будет универсальный способ :)
8.9K
26 марта 2007 года
Kap
77 / / 10.09.2006
Вот вот. пользователь обделается, и запретит выполнение программы. У меня шестой касперский спрашивал, разрешить ли студии перехватить какое- то событие в себе. Это не говоря уже о системных событиях.
3.3K
28 марта 2007 года
ShadyMan
191 / / 15.07.2006
Цитата: kosfiz
вот еще вариант:
в реестре есть ключ:
 
Код:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Window NT\CurrentVersion\Windows

там смотрим AppInit_DLLs. сюда можно записать dll'шку которая будет подгружаться к процессам при их запуске. соответственно все, что будет нужно для слежения за процессами это написать длл и в ней код для DLL_PROCESS_ATTACH и для DLL_PROCESS_DETACH.


Установка глобального хука путём вызова SetWindowsHookEx всегда влечёт за собой подгрузку библиотеки с функцией перехвата события в каждое из уже запущенных или вновь запускаемых приложений, поэтому есть ли в системном реестре конкретной версии Windows указанный выше ключ или нет - не имеет никакого значения.

261
28 марта 2007 года
ahilles
1.5K / / 03.11.2005
но ведь нужно как то передать управление точке входа библиотеки, ну если только написать отдельно программу в которой всего лишь одна строчка loadlibrary('........'); и засунуть её в обычный автозапуск
334
28 марта 2007 года
HexEdit
809 / / 27.07.2006
[quote=ShadyMan]Установка глобального хука путём вызова SetWindowsHookEx всегда влечёт за собой подгрузку библиотеки с функцией перехвата события в каждое из уже запущенных или вновь запускаемых приложений, поэтому есть ли в системном реестре конкретной версии Windows указанный выше ключ или нет - не имеет никакого значения.[/quote]
Именно на это я и писал линк. См пост выше
[quote=ahilles]но ведь нужно как то передать управление точке входа библиотеки, ну если только написать отдельно программу в которой всего лишь одна строчка loadlibrary('........'); и засунуть её в обычный автозапуск[/quote]
она вызывается всегда при загрузке и выгрузке библиотеки!
261
29 марта 2007 года
ahilles
1.5K / / 03.11.2005
единственный способ загрузить дллку без другой программы это заставить винду её загрузить написав путь к дллке в ключе AppInit_DLLs, это я сказал по поводу 17-го сообщения
3.3K
30 марта 2007 года
ShadyMan
191 / / 15.07.2006
Цитата: ahilles
единственный способ загрузить дллку без другой программы это заставить винду её загрузить написав путь к дллке в ключе AppInit_DLLs, это я сказал по поводу 17-го сообщения


А что - разве задача стоит именно так - загружать библиотеку без помощи другой программы?

261
30 марта 2007 года
ahilles
1.5K / / 03.11.2005
фактически именно так
3.3K
30 марта 2007 года
ShadyMan
191 / / 15.07.2006
Цитата: ahilles
фактически именно так


Почему? Кажется, автор темы ничего такого не говорил.

261
31 марта 2007 года
ahilles
1.5K / / 03.11.2005
Цитата: geza
Как это реализвать?


метод реализации таков:
надо поставить api hook в овсех процессах на функции запуска процессов и функции завершения процессов (если хорошенько подумать то их не так много), для того чтобы поставить API hook внедриться в процесс, самый простой метод внедрения дллки во все процессы это через SetwindowsHookEx , но можно внедрять свою дллку во вновь создаваемые процессы так как мы перехватываем функции создания (при первой загрузке придётся пролистать список процессов внедриться в каждый)
в обоих методах есть только одна проблема это хоть один раз загрузить свою длл в любой процесс, для этого мы используем ключ AppInit_DLLs

ВОТ НЕБОЛЬШОЙ КОНСПЕКТ ВСЕЙ ВЕТКИ.

кстати вот процедурка на delphi которая грузит длл в чужой процесс (для второго метода, когда не использунется Setwindowshookex)

Код:
function LoadLibrary_Ex(ProcessID:DWORD;LibName:PChar):boolean;
var
  pLL,pDLLPath:Pointer;
  hProcess,hThr:THandle;
  LibPathLen,_WR,ThrID:DWORD;
begin
  Result:=False;
  LibPathLen:=Length(string(LibName));
  hProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,ProcessID);
  if hProcess=0 then exit;
  pDLLPath:=VirtualAllocEx(hProcess,0,LibPathLen+1,MEM_COMMIT,PAGE_READWRITE);
  if DWORD(pDLLPath)=0 then exit;
  pLL:=GetProcAddress(GetModuleHandle(kernel32),'LoadLibraryA');
  WriteProcessMemory(hProcess,pDLLPath,LibName,LibPathLen+1,_WR);
  hThr:=CreateRemoteThread(hProcess,0,0,pLL,pDLLPath,0,ThrID);
  if hThr=0 then exit;
  Result:=CloseHandle(hProcess);
end;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог