Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];

Вниз

Как можно перехватить событие закрытия программы   Найти похожие ветки 

 
Nemec ©   (2006-09-06 20:49) [0]

Здравствуйте господа! Пишу программу управления компьютерным классом, компьютер клиента должен работать строго определенное время (оплаченное), на компьютере клиента работает программа управляющая им. У пользователей права админов, чтобы могли сами ставить любой софт по сети. Можно ли как-нибудь перехватить попытку закрытия процесса из Диспетчера задач. Тогда можно будет предпринять определенные действия. Программа работает как сервис и как сервис ее не закроешь, но я бессилен против трех пальцев.
Заранее спасибо.


 
Dmitrij_K   (2006-09-06 21:09) [1]

запретить диспетчвер задач


 
Nemec ©   (2006-09-06 21:17) [2]

нельзя, бывает так, что дети запускают зараз 2-3 игрущки (особенно новички) тогда, чтобы не перезагружать машину приходиться самому пользоваться тремя пальцами


 
Nemec ©   (2006-09-06 21:37) [3]

я использовал такой прием, написал второй сервис, оба сервиса опрашивают друг друга с интервалом, если один из сервисов отсутствует второй посылает сообщение на сервер и выключает компьютер. Но!!! Пришел мальчик запустил FAR и в мгновение ока снес к черту всю защиту!!!


 
Орион ©   (2006-09-06 21:51) [4]

Технология руткитов и вперед, никто и не узнает, что твоя программа запущена ;) Естественно до поры, до времени :)


 
ychenick ©   (2006-09-06 23:04) [5]

Орион, руткиты это слишком сложно, к тому же антивири могут на них матерится.

Предлагаю просто сделать клиент-сервер на сокетах. Клиент каждые 10-15 сек отправляет на сервер сигнал что он запущен - вот и все дела. Как только сервер не получил сигнал в течении, например, 20 сек  можно бить тревогу!


 
Nemec ©   (2006-09-07 05:30) [6]

Спасибо ychenick. Именно так я в конечном итоге и сделал. Но этот прием мне не нравится, лишняя нагрузка на сервер и на ЛВС. Как-то раз встречал прогу, при попытке её убить, она выдавала сообщение на экран. Здесь интересна сама идея, каким образом происходит сама процедура принудительного завершения процесса, какие события порождаются и как их перехватить из под Delphi.


 
Elen ©   (2006-09-07 13:54) [7]


> Nemec

Это напроч запретитдиспетчер задач (из кладовки этого сайта)

var
 reg:TRegistry;
begin
 reg := TRegistry.Create;
 reg.RootKey := HKEY_CURRENT_USER;
 reg.OpenKey("Software",True);
 reg.OpenKey("Microsoft",True);
 reg.OpenKey("Windows",True);
 reg.OpenKey("CurrentVersion",True);
 reg.OpenKey("Policies",True);
 reg.OpenKey("System",True);
 if Disable then
   reg.Writeinteger("DisableTaskMgr",1)
 else
   reg.Writeinteger("DisableTaskMgr",0);
 reg.CloseKey;
end;


 
Elen ©   (2006-09-07 13:55) [8]

p.s. Сотри все игры


 
Elen ©   (2006-09-07 13:59) [9]

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
canclose:=false;
//Здеси выводи свое сообщение
end;


 
DVM ©   (2006-09-07 14:55) [10]

Скрыть ее от диспетчера задач.


 
DVM ©   (2006-09-07 14:56) [11]


> Но этот прием мне не нравится, лишняя нагрузка на сервер
> и на ЛВС

какая нахрен загрузка при посылке десятка байт по UDP?


 
DeadMeat ©   (2006-09-07 22:49) [12]

Проще все таки снять права.. Ведь им не нужно ставить софт, а только Вам. Можно через RemoteDesktop подключаться на крайняк... Чтобы не ходить.
Все остальное можно подстроить под запись в нужные папки и ветки реестра.
В начале может и гемор, зато потом проще будет.


 
DrPass ©   (2006-09-08 00:24) [13]

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


 
Nemec ©   (2006-09-08 06:51) [14]

Спасибо мастерам, спасибо Elen. Для DrPass дело в том, что политика цетра "Центр учебно-игровой", дети сами ставят любой софт какой захотят, база игрушек больше 1000 игр, база фильмов и около 600 гб всякого софта, поэтому и права у всех админы (на локальных машинах естественно, в домене они пользователи), пример Elen по закрытию формы покатаю спасибо Elen. Если получиться распишу как решать данную задачу. Для DVM, я неправильно выразился, нагрузка на сервер имелось ввиду усложнение программы работающей на сервере приходится прописывать лишнюю логику, есть дополнительные нюансы, я эту схему уже проповал. Еще раз всем спасибо!


 
Slym(RO)   (2006-09-08 07:43) [15]

ychenick ©   (06.09.06 23:04) [5]
сделать клиент-сервер на сокетах

стявится снифак, ломается протокол, пишется заглушка. кикаем сервер и ставим свой


 
Elen ©   (2006-09-08 07:58) [16]


> Nemec

P.S.
В WinXP есть интересная особенность - винда не имеет право закрывать из диспечтера задач программы с некоторыми именами. Если ты назовеш свою прогу например WinLogon.exe или smss.exe, то ее смогут закрыть только завершив сеанс причем неважно кто попытается закрывать админ или юзер. И в тоже время такое имя не будет мешать системе нормально работать (проверено на XP SP1-2)


 
DVM ©   (2006-09-08 10:08) [17]


> винда не имеет право закрывать из диспечтера задач программы
> с некоторыми именами

Тоже можно закрыть. Только немного посложнее.


 
DrPass ©   (2006-09-08 10:12) [18]


> Nemec ©   (08.09.06 06:51) [14]

Дело в том, что CanClose:=false тебе не поможет, Диспетчер задач убивает с помощью TerminateProcess, и не спрашивает у процесса разрешение на закрытие. Частичным выходом может быть

> Elen ©   (08.09.06 07:58) [16]

По крайней мере, это спасет от стандартного Диспетчера задач. Но все равно программу можно будет снять с помощью любой другой похожей утилиты, например через панель "процессы" в обычном FARe


 
Nemec ©   (2006-09-08 13:34) [19]

Slym(RO) я ведь просто прикладной программист всю жизнь писал под БД - НИЧЕГО НЕ ПОНЯЛ
Elen - идея хороша, даже (DVM, DrPass) если убить процесс из FARa есть риск завершить не тот процесс, а это уже критично (svchost.exe). СПАСИБО.

PS: Не могу найти в инете документации по данной теме: что делает WINDOWS при TerminateProcess, если кто знает ссылку подскажите


 
Elen ©   (2006-09-08 14:23) [20]


> Nemec ©

что делает WINDOWS при TerminateProcess? А вот что -
http://vsokovikov.narod.ru/Msdn_api/Global_SDK/Reference_API/Functions/Fn_T/fn_terminateprocess.htm


> svchost.exe

Как раз этот-то процесс убить не представляет труда


>  идея хороша

Не так уж и хороша. Ты и сам не сможеш просто завершить свою прогу. Значит в ней должен быть предусмотрем механизм завершения.
Лучше будет настроить доступы примерно так :
Ты - админ.
Юзера - Опытные пользователи.


 
xShadow ©   (2006-09-08 14:47) [21]


> Nemec

Начнём с того что убить приложение в NT можно как минимум 5 мне известными способами, а я уверен их больше. И от этих приёмов даже касперский здыхает. По порядку:
1. TerminateProcess - для его выполнения необходимо вызвать OpenProcess чтобы получить Handle, можно перехватить OpenProcess и отслеживать какой процесс пытается получить хендл, но опять же получить его можно и не документированным способом от которого не увернёшься.
2. Убить процесс снимая все потоки жесткий метод, но как показывает практика весьма эффективный. Защиться от этого метода тоже можно, перехватывать OpenThread, TerminateThread.
3. Инжект кода/библиотеки с вызовом ExitProcess( 0 ) - тоже весьма действенно.
4. Открыть приложение для отладки с посылом команды завершения.
5. Послать сообщение WM_QUIT - самое простое.
Продолжать можно долго. При этом внедряться и перехватывать нужно из Ring0, а это драйвер.
Есть более простое решение написать Dll и прописать её гденить в
AppInit_DLLs и KnownDLLs будет подгружаться практически всеми процессами и в диспетчере задач видно не будет. А из dll контролировать наличие нужного процесса.
Все DLL разом не убъёшь. Хотя и это можно обойти если честно, но сложней.


 
Наиль ©   (2006-09-08 15:06) [22]

Мой вариант (скорее всего не сработает, но проверять не охота)
Основан на том, что если нельзя не умереть, то нужно уметь воскресать.
Главная программа (далее родительская) должна вызвать "бессмертную" программу, та должна следить за существованием родительской и если её нет, то воскресить её. Закрываться должна по требованию родительской.
Код "бессмертной" программы:
program Project1;
uses
Windows;
begin
// Здесь проверка наличия родительской программы
// если программы нет, то запустить её
// Здесь проверка сигнала на завершение от родительской программы
// если сигнала нет, то
WinExec(ParamStr(0),SW_HIDE);
end.

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


 
Elen ©   (2006-09-08 15:52) [23]


> Наиль ©

А если я завершаю сеанс? Твой способ не даст мне этого так просто.


 
Nemec ©   (2006-09-08 16:32) [24]

Наиль - FAR посволяет выделить группу процессов и одновременно их убить, поэтому предлагаемое иобой воскрешение уже опробовано, не подходит!
xShadow - получается что даный труд пустой номер, чтож жаль, кстати пытался создать поток из приложения, а из него отслеживать работу хозяина - тоже гибнет!
Elen - не все svchost.exe убиваются, убийство некоторых приводит к перезагрузке!
Чтож остается манипулировать правами, класс находится под камерами наблюдения + штрафные санкции + наблюдающий и т.д. и т.п. ничего общего с программированием! Обычная житейская рутина!
Всем большое спасибо!!!


 
xShadow ©   (2006-09-08 17:03) [25]


> Nemec

Я предложил вариант, dll. Ещё можно воспользоваться документрированной возможностью при загрузке приложения поставить хук и внедрить dll во все приложения в системе, каждое новое приложение будет подгружать dll-ку. При таком подходе всё усложниться в разы. В любом случае это должен быть комплекс не из одного экзешника, а несколько екзешников (один сервис) и несколько длл, должны быть козыри в рукове. Наладить "общение" в комплексе с интервалом в 10-15 секунд и надо быть вуду чтобы успеть что-то сделать при таком раскладе, повреждение одно из элементов должно приводить сразу к блокировке компьютора.


 
Nemec ©   (2006-09-09 16:30) [26]

> xShadow
Идея интересная, DLL я раньше писал, но что такое хук честно говоря не знаю, если знаешь скинь ссылку где можно почитать теорию по этой теме, если удасться решить эту задачу выложу исходники по этой теме!!! Думаю многим админам будет интересно, правда скорей всего (раз ты такой опытный) ты напишешь прогу которая и это снесет!!! ТАК??? Извини что на ты!


 
Nemec ©   (2006-09-09 17:03) [27]

Для работы в данном проекте приглашаются ВСЕ кто что-то может и умеет.
Какие будут идеи. Исходник того что получится будет выложен для общего пользования.
Заранее спасибо!!!


 
Anatoly Podgoretsky ©   (2006-09-10 14:36) [28]

Кроме клиент-сервер ничего не поможет в данных условиях.


 
Nemec ©   (2006-09-10 17:09) [29]

>xShadow - при вызове диспетчера задач ловушка отрубается!!!

>Anatoly Podgoretsky - как может помочь клиент-сервер?

Пока идея такова, делать на программе-сервере кнопку - "разблокировка клиента", по умолчанию на клиенте прога должна блокировать диспетчер задач и вырубать все проги указанные на сервере. Тогда по мере появления новых прог достаточно просто редактировать список запрещенных программ.
Также можно использовать идею "ychenick ©   (06.09.06 23:04) ", есть правда нюансы, спасти положение не сможет, но внимание администратора привлечет.

Какие будут советы в постановке самой задачи.

ЦЕЛЬ: защитить программу работающую на машине клиента от возможности снятия. Все остальное выше!


 
Alx_ ©   (2006-09-10 18:12) [30]

Nemec ©   (10.09.06 17:09) [29]
>xShadow - при вызове диспетчера задач ловушка отрубается!!!
Внедрять DLL можно и без использования хука.


 
Nemec ©   (2006-09-11 08:36) [31]

> Alx_ ©   (10.09.06 18:12)
Я понимаю внедрить DLL в свою программу, но как без ловушки перехватить события происходящие вне её?


 
Elen ©   (2006-09-11 08:47) [32]


> Nemec

Кажись  Alx  имел ввиду перехват сплайсингом, т.е. подменой сторонних процедур в других потоках своими. Для этого DLL лучше всего. Но это не так уж и просто.


 
Наиль ©   (2006-09-11 08:55) [33]

Поправка к моему методу [22].
"Бессмертная" программа перед запуском самой себя, должна сделать копию своего Exe с новым именем и запустить эту копию. Тогда...
Плюс: Прежде чем в Far появится имя процесса, процесс с этим именем перестанет существовать.
Минус: Exe станет уязвим для удаления

Всё это (мой метод) фантазия - лишёная оснований.


 
Elen ©   (2006-09-11 09:00) [34]


> Наиль ©

Креативная фантазия - это плюс
Но сложность - это минус


 
Nemec ©   (2006-09-11 09:08) [35]

Да, считал что я далеко не дурак.
Зашел на этот сайт и понял, что очень сильно ошибался!!!


 
Elen ©   (2006-09-11 09:28) [36]


> Nemec ©

Не принимай близко к сердцу - [29] вполне подойдет для контроля (для начала). И если хочеш почитай статьи о перехвате функций на лету (Автор MS REM ) в hook_full.chm


 
xShadow ©   (2006-09-12 14:11) [37]


> Nemec
> как может помочь клиент-сервер?

Очень просто. Небольшой пример. Клиенты отправляют в сеть сообщение о том что они "живи". Сервер принимает из сети broadcast пакеты по udp протоколу и не получив ни одно пакеты в течении пары минут от компьютора можно идти с битой и бить по голове. Такое общение огранизовывается за 15 минут максимум.


>  правда скорей всего (раз ты такой опытный) ты напишешь
> прогу которая и это снесет!!!

Если один человек сделал, то другой завсегда разобрать сможет. (с)

Вообщем немного поэксперементировав могу сказать вывод или моё IMHO. Нужен комплекс клиент-сервер при чём клиент хитрый экзешник + длл.
Если что пиши помогу.


 
Nemec ©   (2006-09-12 20:20) [38]

>xShadow
Спасибо за предложенную помощь.
Сама логика клиента у меня уже прописана, работает как сервис. Логику сервера подправлю на отслеживание сообщений от клиента, на предмет работы. Правда даже не знаю с какой стороны подойти к проблеме защиты самого клиента. Ясно одно надо запускать кого-то с кем вести диалог. Может прописать в DLL ловушку и при запуске любой проги запускать поток с опросом по таймеру, работает клиент или нет, но тогда вопрос:
  не будет ли комп топтаться на месте (тормозить), ведь программ в винде
  работает много. Помоги с выбором направления работы.

>Elen ©   (11.09.06 09:28) [36]
Спасибо за ссылку. Но материал большой, надо время, чтобы все это переварить. Тема для меня абсолютно новая.

PS Вот так пообщаюсь - глядишь поумнею!!!


 
ph0sgen ©   (2006-09-13 00:22) [39]

Мне кажется проблему можно решить так:

к примеру имеем:
1. сервис, который управляет чем вам нужно(о чем собственно и речь)
2. DLL которая будет скрывать его присутствие в системе

сервис внедряет DLL во все сущесвующие процессы и продолжает работу.
DLL перехватывает CreateProcessW чтобы контролировать все будущие процессы, перехватывает FindNextFileW для скрытия файлов на диске и ZwQuerySystemInformation (из ntdll.dll) для скрытия в списках процессов.

для снятия всего этого предусматривается функция в сервисе, которой может управлять администратор (аля FreeLibrary).

ИМХО лучше из сервиса инжектировать процедуру, которая будет сообщать АХТУНГ в какой-нибудь explorer.exe, чтобы не светить сервис.

антивири молчат, юзеры и админ довольны и всем хорошо


 
Ketmar ©   (2006-09-13 00:33) [40]

всё-таки, лучше руткит. ещё надёжней -- kernel mode driver с перехватчиком и ещё кое-что. это тоже снимается, конечно, но уже с чуть большим трудом. а лучше -- всё-таки не давать юзерам права админов. а то при помощи того же FAR"а и WinLogon пристрелить можно (сам проверял; получилось, к несчастью %-).


 
vidiv ©   (2006-09-13 01:52) [41]

Всеравно убью все что угодно. Последний, самый сложный был нод.
Принцип простой: забираешь права на чтение EXE файла и убивает процесс - в итоге никто его не может заного запустить: отказано в доступе.


 
Ketmar ©   (2006-09-13 01:59) [42]

> [41] vidiv ©   (13.09.06 01:52)
понятно, что пристрелить можно любого. %-) вопрос в сложности сего действа.
в принципе, обладая правами администратора, можно даже в ring0 пролезть (правда, неясно зачем %-). тут вопрос в количестве гемороя -- если хватать "все-все" апи, то задолбёшься писать. и всё равно дырку найдут. %-)


 
Сергей Н.   (2006-09-13 10:08) [43]

Добрый день,
у меня похожая проблема - есть сервис (управление, типа "остановить", "пауза" запрещено), но процесс этого сервиса отображается в диспетчере задач и может быть легко от туда снят :(. Тут писали про антивирусы, но для меня так и осталось непонятным - как процесс сервиса "kavsvc" (антивирус Касперского) не даёт себя убить? Или фаервол Outpost - его процесс тоже просто не снять, сразу выдаётся ошибка "Отказано в доступе"! Скорее всего это обходится (методами описанными выше), но тем не менее непосвящённых это отпугнёт. Как реализовать подобное?


 
xShadow ©   (2006-09-13 10:49) [44]


> Сергей Н.

Для того чтобы обламать большенство менеджеров задач достаточно перехватить OpenProcess только грамотно нужно обрабатывать в своей программе.


 
Сергей Н.   (2006-09-13 11:22) [45]

> xShadow

Подскажите где можно просмотреть пример?


 
Elen ©   (2006-09-13 11:26) [46]


> Сергей Н.

статьи о перехвате функций на лету (Автор MS REM ) в hook_full.chm


 
DeadMeat ©   (2006-09-13 12:33) [47]

А как часто юзеры ставят у себя софт? Может все таки открывать на это время им машину или самому это делать, а потом в зад? ИМХО надежней варианта с правами я не вижу.


 
Ketmar ©   (2006-09-13 13:50) [48]

есть ещё туторы от HolyFather"а, где он в 10 примерах показывает написание драйвера, перехватывающего (в том числе и) ZwTerminateThread(). драйвер даже умеет общаться с user-mode запускалкой. просто, дёшево и сердито.
или, как вариант -- внедрять свою DLL в каждый процесс, где и перехватывать API открытия процесса/завершения процесса (благо, сервис работает с системного аккаунта, и права такие имеет).

зыж xShadow -- ты не тот ли xShadow, который с руткит.ком и автор Vanquish? %-)


 
Nemec ©   (2006-09-13 18:07) [49]

>vidiv
Исходя из теории защиты данных и криптографии НЕЛЬЗЯ 100% ЗАЩИТИТЬ ДАННЫЕ, поэтому задача сделать так, чтобы РАСХОДЫ НА ВЗЛОМ ПРЕВЫШАЛИ ПРИБЫЛЬ ПОЛУЧЕННУЮ ОТ ВЗЛОМА!!!
>DeadMeat ©   (13.09.06 12:33) [47]
1.В том и дело, что если самому все ставить, то учитывая проходимость и
  запросы посетителей администратор центра только и будет, что ставить и
  сносить разный софт. Поэтому у пользователей права админов.
2. Когда мы открыли центр 3 года назад, то узнали интересную вещь - оказывается, что в школе дети изучают компьютер ведя конспект в тетради, они даже Word и  Excel изучают записывая в тетрадь какие кнопки нужно нажимать - БРЕД полный, но факт. Поэтому у нас они учаться грамотно работать с компьютером и поэтому пусть сами учаться ставить и сносить софт, те кто отучился у нас или даже просто играли пока учились в школе и сейчас учаться в вузах,приезжают и говорят спасибо, что хоть чему-то научились.
>xShadow, Ketmar, ph0sgen
Спасибо за проявленный интерес. Попробую опираясь на hook_full.chm (Автор MS REM, надеюсь он будет не против), установив ловушку внедрять поток с диалогом во все создаваемые процессы. Если честно никогда не писал подобного, поэтому что получиться и сколько времени уйдет на отладку не знаю. Интересно, если получиться сделать то что задумано, можно будет написать прогу которая все это снимет, ведь в момент запуска любой проги будет запускаться опрос клиента и если его снять (клиента), то комп будет выключен.


 
Nemec ©   (2006-09-14 12:17) [50]

>xShadow, Ketmar
Вопрос - во все ли запущенные процессы можно внедрять DLL, я использовал библиотеку MS REM,
{
Äåìîíñòðàöèÿ âíåäðåíèÿ Dll àëüòåðíàòèâíû&# 236; ñïîñîáîì.
Copyright by Ms-Rem (Ms-Rem@yandex.ru) ICQ 286370715
}
program aInjectDllEx;

uses
 Windows,
 advApiHook;
 
var
 sFile: dword;
 Size: dword;
 Buff: pointer;
 BytesReaded: dword;
 Process: dword;
begin
 //Îòêðûâàåì ïðîöåññ
 Process:=GetProcessId("notepad.exe");
 {Process:=GetProcessId("csrss.exe");}
 EnableDebugPrivilege();
 Process := OpenProcessEx(Process);

 //ñ÷èòûâàåì Dll â ïàìÿòü
 sFile := CreateFile("TestDll.dll", GENERIC_READ, FILE_SHARE_READ,
                     nil, OPEN_EXISTING, 0, 0);
 Size := GetFileSize(sFile, nil);
 GetMem(Buff, Size);
 ReadFile(sFile, Buff^, Size, BytesReaded, nil);
 CloseHandle(sFile);

 Sleep(2000);

 InjectDllEx(Process, Buff);
 FreeMem(Buff);
end.
В блокнот нет проблем, но вот "csrss.exe" (он всегда запущен на компе) ни в какую! Подскажите, если сможете!
Заранее спасибо!


 
Elen ©   (2006-09-14 12:55) [51]


> Nemec ©

С чего ты взял что в csrss не внедряется?


 
xShadow ©   (2006-09-14 17:15) [52]


> Nemec ©

В XP SP2 в эти программы (csrss,smss) не влезть, защита DEP (хотя с разного рода извратом и туда влезть можно).
Странно что ещё приложение не падает.


> зыж xShadow -- ты не тот ли xShadow, который с руткит.ком
> и автор Vanquish? %-)

Нет на рутките меня по другому зовут ;) это моё тёзка


 
Ketmar ©   (2006-09-14 17:32) [53]

> [52] xShadow ©   (14.09.06 17:15)
да снимается эта "защита" так же, как и ставится. %-) вопрос только -- зачем в эти процессы лезть? ничего супернужного (в данном случае) там нет. %-)


 
Игорь Шевченко ©   (2006-09-14 17:37) [54]


> В блокнот нет проблем, но вот "csrss.exe" (он всегда запущен
> на компе) ни в какую! Подскажите, если сможете!


А зачем что-то внедрять в csrss ?


 
Nemec ©   (2006-09-15 08:36) [55]

>xShadow
Есть ли какой либо способ определить, можно внедрять код в запущенный процесс или нет или просто в проге жестко прошить, что в такие-то процессы лезть нельзя.

>Игорь Шевченко ©   (14.09.06 17:37) [54]
Просто этот процесс всегда работает на компьютере и его вроде как нельзя снять.
Идея такова, в момент запуска клиента, перебрать все запущенные процессы, и внедрить в них код (опрос клиента, если клиент выключен, то либо запускать его, либо выключать комп, предварительно послав сообщение на сервер), при запуске любого нового клиента перехватывать создание потока и внедрять в него тот же код, тогда стандартными средствами клиента будет не снять, библиотека MS REM позволяет достаточно безопасно внедрить код в процесс, что бы его не перехватили. Можно также по таймеру опрашивать все запущенные процессы, и если есть новые (в которые код не внедрен, на случай перехвата), то внедрять.

PS. Я конечно небольшой специалист в этой области, только начал заниматься, но мне кажется, что снять такого клиента будет достаточно сложно. Хотя может я и ошибаюсь. Во всяком случае вряд ли кто-то будет писать прогу под каждый отдельный случай, а так как исходник и идея будут выложены, то вариаций на эту тему можно будет придумать достаточно много.
Всем спасибо!


 
Nemec ©   (2006-09-15 08:41) [56]

С конкретной реализацией задачи проблем нет, в инете достаточно документации по этому вопросу, так если иногда ссылку скинете, что бы не искать, для экономии времени, но я действительно ПРОШУ мастеров помощь в постановке задачи, чтобы не отрабатывать тупиковые ветки, если из этого что-нибудь получится я думаю многие администраторы скажут ВАМ спасибо, потому что такая проблема возникает часто.


 
xShadow ©   (2006-09-15 09:34) [57]


> Nemec ©

Для простоты пропиши имена, но для надёжности, что это продукт MS можно проверять версия экзешника на диске. Т.е. нашёл в списке процессов к примеру csrss.exe определил путь получил версию и производителя, если MS пропустил.


 
Elen ©   (2006-09-15 11:35) [58]


>  перебрать все запущенные процессы

Если перехватиш LoadLibrary, то внедрять сможеш атоматом во все новые процессы и выбирать какой-то один потом не будет нужды. Т.Е. юзера сами того не зная будут запускать твой процесс. и пусть отключают сколько хотят, все равно придется смириться...


 
Nemec ©   (2006-09-15 11:39) [59]

>xShadow
Спасибо!
Но ведь есть тот же Word, Excel и т.д. может так, если файл лежит в системной папке например System32 тогда пропускать!


 
Nemec ©   (2006-09-15 11:44) [60]

>Elen
Спасибо! Идея интерсная, попробую!


 
Игорь Шевченко ©   (2006-09-15 11:47) [61]


> У пользователей права админов, чтобы могли сами ставить
> любой софт по сети.


Отобрать


 
Nemec ©   (2006-09-15 12:43) [62]

>Игорь Шевченко
Я Вас понимаю и абсолютно с Вами согласен!!!, Но как вегда есть, НО. Выше по форуму я объяснял, почему у посетителей права админов!!!


 
Nemec ©   (2006-09-15 20:09) [63]

>xShadow
Если есть время скажи свое мнение!!! ПОЖАЛУЙСТА!!!
Это пока просто идея без конкретной работы. Пока проблема, как определить в какие процессы можно внедряться.

EXE
<>
{ Идея xShadow
библиотека advApiHook Ms-Rem (Ms-Rem@yandex.ru) ICQ 286370715
}
program SecretKlient;

uses
 Windows, SysUtils,
 tlHelp32, psApi,
 advApiHook;

var
 sFile: DWord;
 Size: DWord;
 Buff: pointer;
 BytesReaded: DWord;

 HandlerSnapshot, HandlerProc: Thandle;
 Data: tagPROCESSENTRY32;
 Process: DWord;

 S, Path: String;
 BufPatch: Array [0..255] Of Char;
begin
 //Получить список процессов
 HandlerSnapshot:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
 Data.dwSize:=sizeOf(data);
 If HandlerSnapshot>0
 then
 begin
   If Process32First(HandlerSnapshot, Data)
   then
   begin
     Repeat
       S:=Trim(ansiLowerCase(Data.szExeFile));
       HandlerProc:=OpenProcess(PROCESS_ALL_ACCESS,True,Data.th32ProcessID);
       GetModuleFileNameEx(HandlerProc,0,BufPatch,256);
       Path:=ansiLowerCase(BufPatch);
       if (Path<>"")and(Path[1]<>"?")
       then
         Path:=ExtractFileDir(Path)
       else
         Path:="";
       S:=ExtractFileName(S);
       If Path <> ""
       Then
       begin
         //Ставим секрет
         Process:=GetProcessId(PChar(S));
         EnableDebugPrivilege();
         Process := OpenProcessEx(Process);
         //считываем Dll в память
         sFile := CreateFile("TestDll.dll", GENERIC_READ, FILE_SHARE_READ,
                     nil, OPEN_EXISTING, 0, 0);
         Size := GetFileSize(sFile, nil);
         GetMem(Buff, Size);
         ReadFile(sFile, Buff^, Size, BytesReaded, nil);
         CloseHandle(sFile);

         InjectDllEx(Process, Buff);
         FreeMem(Buff);
       end;
     until not Process32Next(HandlerSnapshot,Data);
   end;
   CloseHandle(HandlerSnapshot);
 end;

end.
<>

DLL
<>
{
Dll для демонстрации методов Dll Injection.
Copyright by Ms-Rem (Ms-Rem@yandex.ru) ICQ 286370715
}
library TestDll;

uses
 windows;
Var
 F: Boolean;
begin
 F:=False;
 While Not F do
 begin
   MessageBoxA(0, "Работает!", "Dll Injection", 0);
   Sleep (5000);
 end;
 ExitThread(0);
end.<>


 
Ketmar ©   (2006-09-15 20:36) [64]

> [63] Nemec ©   (15.09.06 20:09)
да очень просто. попытаться и просерить -- получилось или нет.


 
Ketmar ©   (2006-09-15 20:37) [65]

ой... опечаточка... "проверить", конечно же. %-)


 
Eraser ©   (2006-09-15 21:52) [66]

> Как можно перехватить событие закрытия программы

вот наваял небольшой пример, как можно осуществить сабж с использованием WMI.

program ProcessWatcher;

{$APPTYPE CONSOLE}

uses
 Windows,
 SysUtils, Classes, WbemScripting_TLB, ActiveX, JwaWbemCli;

var
 SWbemLocator1: TSWbemLocator;
 csSync: _RTL_CRITICAL_SECTION;

type
 TCreateProcThread = class(TThread)
 private
   { Private declarations }
 protected
   procedure Execute; override;
 end;
 TStopProcThread = class(TThread)
 private
   { Private declarations }
 protected
   procedure Execute; override;
 end;

{ TCreateProcThread }

procedure TCreateProcThread.Execute;
var
 Service: ISWbemServices;
 Eventquery: ISWbemEventSource;
 objLatestProcess: ISWbemObject;
 Prop: OleVariant;
begin
 CoInitializeEx(nil, COINIT_APARTMENTTHREADED);
 Service := SWbemLocator1.ConnectServer(".",
   "root\cimv2",
   "", "",
   "",
   "", 0, nil);
 Eventquery := Service.ExecNotificationQuery(
   "select * from __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA ""Win32_Process""",
   "WQL",
   WBEM_FLAG_RETURN_IMMEDIATELY or WBEM_FLAG_FORWARD_ONLY, nil);
 while not Terminated do
 begin
   objLatestProcess := Eventquery.NextEvent(Integer(INFINITE));
   Prop := objLatestProcess;
   EnterCriticalSection(csSync);
   Writeln("Started: " + Prop.TargetInstance.Name + #09#09 + DateTimeToStr(Now));
   LeaveCriticalSection(csSync);
 end;
end;

{ TStopProcThread }

procedure TStopProcThread.Execute;
var
 Service: ISWbemServices;
 Eventquery: ISWbemEventSource;
 objLatestProcess: ISWbemObject;
 Prop: OleVariant;
begin
 CoInitializeEx(nil, COINIT_APARTMENTTHREADED);
 Service := SWbemLocator1.ConnectServer(".",
   "root\cimv2",
   "", "",
   "",
   "", 0, nil);
 Eventquery := Service.ExecNotificationQuery(
   "select * from __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA ""Win32_Process""",
   "WQL",
   WBEM_FLAG_RETURN_IMMEDIATELY or WBEM_FLAG_FORWARD_ONLY, nil);
 while not Terminated do
 begin
   objLatestProcess := Eventquery.NextEvent(Integer(INFINITE));
   Prop := objLatestProcess;
   EnterCriticalSection(csSync);
   Writeln("Stoped: " + Prop.TargetInstance.Name + #09#09 + DateTimeToStr(Now));
   LeaveCriticalSection(csSync);
 end;
end;

begin
 InitializeCriticalSection(csSync);
 Writeln("Process name"#09#09#09"Event date");
 CoInitializeEx(nil, COINIT_APARTMENTTHREADED);
 SWbemLocator1 := TSWbemLocator.Create(nil);
 try
   TCreateProcThread.Create(false);
   TStopProcThread.Create(false);
   while True do
     Sleep(1);
 finally
   SWbemLocator1.Free;
 end;
end.

только учтите, что прежде чем компилировать этот проект, необходимо импортировать и установить следующие библиотеки типов: Active DS Type Library (Version 1.0) и Microsoft WMI Scripting v1.1 Library (Version 1.1).
подробнее об этом в статье о WMI, которая есть на Королевстве Делфи.


 
Eraser ©   (2006-09-15 21:54) [67]

вот ссылка на exe"шник.
http://slil.ru/23126894 (176 КБ)


 
Nemec ©   (2006-09-15 22:57) [68]

>xShadow

Примерная работа DLL

{ Идея xShadow
библиотека advApiHook Ms-Rem (Ms-Rem@yandex.ru) ICQ 286370715
}
library TestDll;
uses
 windows,
 advApiHook;

Var
 F: Boolean;
 Process: DWord;
begin
 F:=False;
 While Not F do
 begin
   {Для примера}
   Process:=GetProcessId("Notepad.exe");
   If Process=0
   Then
     MessageBox(0, "Закрыли клиента!", "Внимание", MB_OK);
   Sleep (5000);
 end;
 ExitThread(0);
end.


 
Nemec ©   (2006-09-15 23:02) [69]

>Eraser
Блин, я только что разобрал, о чем идет речь, когда говорят "руткит" и то не до конца, а тут объекты ActiveX. ПОЧИТАЮ.

>Ketmar
Я прошу (как МАСТЕРА) высказать мнение, ЕСТЬ СМЫСЛ РАБОТАТЬ В ЭТОМ НАПРАВЛЕНИИ!!! Или все это снимается (обходится) без проблем.


 
Eraser ©   (2006-09-15 23:07) [70]

> [69] Nemec ©   (15.09.06 23:02)

чтобы дать хоть какую-то гарантию того, что это не снимается (обходится), нужно, как минимум, выполнить [61].


 
Nemec ©   (2006-09-15 23:07) [71]

Остается проблема. Не во все процессы, можно внедрить код, я откинул системные процессы, все равно на некоторых вылазит ошибка. ВОПРОС: в принципе, как нибудь можно определить можно или нельзя внедрять код.


 
Nemec ©   (2006-09-15 23:09) [72]

>Eraser
Код выполняется, при попытке закрыть "Notepad.exe". Без перезагрузки у меня не получилось снять, но я не специалист.


 
Eraser ©   (2006-09-15 23:10) [73]

> [71] Nemec ©   (15.09.06 23:07)

внедрять код из пользовательского режима вообще не рекомендуется, тем более во все подряд. Уж лучше написать полноценный kmd и работать на низком уровне, где никто не ругается.


 
Ketmar ©   (2006-09-15 23:11) [74]

> [69] Nemec ©   (15.09.06 23:02)
а я не мастер, у меня штаны не того цвета. %-)

пока у юзеров есть права локальных админов, ни о каких "проблемах" говорить нельзя. у админов нет проблем, есть только кривые руки. %-) см. [70].

> [71] Nemec ©   (15.09.06 23:07)
ошибка, как всегда, в 17-й строке.
а сообщение написано по-китайски, и потому его привести никак не возможно. понимаю...


 
Ketmar ©   (2006-09-15 23:12) [75]

> [73] Eraser ©   (15.09.06 23:10)
если KMD, тогда и внедрять ничего не надо. перехватываем native API (который int 2Eh/SYSENTER) -- и всё. %-)


 
Eraser ©   (2006-09-15 23:15) [76]

> [75] Ketmar ©   (15.09.06 23:12)

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


 
Eraser ©   (2006-09-15 23:17) [77]

что касается user-mode (т.к. сомневаюсь что у автор все таки полезет на низкий уровень) я бы все таки посоветовал WMI, возможности которого иногда просто поражают.


 
Nemec ©   (2006-09-15 23:18) [78]

>Ketmar
Ты имеешь ввиду If Process=0, но в билиотеке MS-REMa эта функция возвращает 0, если не обнаруживается процесс с указанным именем,
насчет сообщения, на деле на экран вообще ничего не будет выводится, сообщение будет отправляться на сервер, а комп клиента выключаться
а я не мастер, у меня штаны не того цвета. %-)
Я только несколько дней как начал заниматься этой проблемой, поэтому любой совет ВАЖЕН.


 
Nemec ©   (2006-09-15 23:21) [79]

>Eraser
По WMI ничего не скажу, надо почитать литературу.


 
Ketmar ©   (2006-09-16 00:01) [80]

> [76] Eraser ©   (15.09.06 23:15)
так негламурненько.

> [78] Nemec ©   (15.09.06 23:18)
я лично имею в виду: "а как определили, что не внедрилось, или что ошибка"?


 
Nemec ©   (2006-09-16 07:26) [81]

>Ketmar
Выдает сообщение об ошибке при попытке записи по адресу 0


 
Nemec ©   (2006-09-16 09:41) [82]

>xShadow
Теперь код внедряется без проблем.
Окончательный код. Тупо, но работает. От профессионала не спасет, но от действий неискушенного пользователя поможет, даже с правами админа. Спасибо за помощь.

EXE
{ &#200;&#228;&#229;&#255; xShadow
&#225;&#232;&#225;&#235;&#232;&#238;&#242;&#229;&#234;&#224; advApiHook Ms-Rem (Ms-Rem@yandex.ru) ICQ 286370715
}
program SecretKlient;

uses
 Windows, SysUtils,
 tlHelp32, psApi,
 advApiHook;

var
 sFile: DWord;
 Size: DWord;
 Buff: pointer;
 BytesReaded: DWord;

 HandlerSnapshot, HandlerProc: Thandle;
 Data: tagPROCESSENTRY32;
 Process: DWord;

 S, Path: String;
 BufPatch: Array [0..255] Of Char;
begin
 //&#207;&#238;&#235;&#243;&#247;&#232;&#242;&#252; &#241;&#239;&#232;&#241;&#238;&#234; &#239;&#240;&#238;&#246;&#229;&#241;&#241;&#238;&#226;
 HandlerSnapshot:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
 Data.dwSize:=sizeOf(data);
 If HandlerSnapshot>0
 then
 begin
   //&#241;&#247;&#232;&#242;&#251;&#226;&#224;&#229;&#236; Dll &#226; &#239;&#224;&#236;&#255;&#242;&#252;
   sFile :=
     CreateFile("TestDll.dll",
                 GENERIC_READ, FILE_SHARE_READ,nil, OPEN_EXISTING, 0, 0);
   Size := GetFileSize(sFile, nil);
   GetMem(Buff, Size);
   ReadFile(sFile, Buff^, Size, BytesReaded, nil);
   CloseHandle(sFile);

   If Process32First(HandlerSnapshot, Data)
   then
   begin
     Repeat
       S:=Trim(ansiLowerCase(Data.szExeFile));
       HandlerProc:=OpenProcess(PROCESS_ALL_ACCESS,True,Data.th32ProcessID);
       GetModuleFileNameEx(HandlerProc,0,BufPatch,256);
       Path:=ansiLowerCase(BufPatch);
       if (Path<>"")and(Path[1]<>"?")
       then
         Path:=ExtractFileDir(Path)
       else
         Path:="";
       S:=ExtractFileName(S);
       If (Path <> "") //AND (Pos ("system32", Path)=0)
       Then
       begin
         //&#209;&#242;&#224;&#226;&#232;&#236; &#241;&#229;&#234;&#240;&#229;&#242;
         If S<>"secretklient.exe"
         Then
         begin
           Process:=GetProcessId(PChar(S));
           EnableDebugPrivilege();
           Process := OpenProcessEx(Process);
           Try
             InjectDllEx(Process, Buff);
           Except
           End;
         end;
       end;
     until not Process32Next(HandlerSnapshot,Data);
   end;
   FreeMem(Buff);
 end;
 CloseHandle(HandlerSnapshot);
end.

DLL
{ &#200;&#228;&#229;&#255; xShadow
&#225;&#232;&#225;&#235;&#232;&#238;&#242;&#229;&#234;&#224; advApiHook Ms-Rem (Ms-Rem@yandex.ru) ICQ 286370715
}
library TestDll;

uses
 windows,
 advApiHook;

Var
 F: Boolean;
 Process: DWord;

begin
 F:=False;
 While Not F do
 begin
   {&#199;&#228;&#229;&#241;&#252; &#232;&#228;&#229;&#242; &#239;&#240;&#238;&#226;&#229;&#240;&#234;&#224;}
   {&#196;&#235;&#255; &#239;&#240;&#232;&#236;&#229;&#240;&#224;}
   Process:=GetProcessId("Notepad.exe");
   If Process=0
   Then
   begin
     MessageBox(0, "&#199;&#224;&#234;&#240;&#251;&#235;&#232; &#234;&#235;&#232;&#229;&#237;&#242;&#224;!", "&#194;&#237;&#232;&#236;&#224;&#237;&#232;&#229;", MB_OK);
   end;
   Sleep (5000);
 end;
 ExitThread(0);
end.

>Eraser
Спасибо за подсказку по WMI, то что смог прочитать заинтересовался, но тема большая, требует изучения.

На этом ветку можно закрыть, а то это уже не ветка, а монстр.
Еще раз всем большое СПАСИБО!


 
xShadow ©   (2006-09-16 11:00) [83]


> Eraser

Не плохо, но бывает но. У меня к примеру на ноуте служба WMI отключена :) жрёт она не позволительно много.


> Nemec ©

Вообщем неплохо, но есть недочёты. Видимо недочитал ;) Качай смотри, переделал немного.
http://slil.ru/23128145


 
Nemec ©   (2006-09-16 11:28) [84]

Удалено модератором
Примечание: Offtopic


 
Nemec ©   (2006-09-16 12:40) [85]

>xShadow
В таком виде работает, пришлось загрузить DLL в память, иначе не взять адрес для InjectDllEx. С DLL понятно,  для отладки было неудобно!!!

program SecretKlient;

uses
 Windows,
 SysUtils,
 tlHelp32,
 psApi,
 advApiHook;

var
sFile: DWord;
Size: DWord;
Buff: pointer;
BytesReaded: DWord;

HandlerSnapshot, HandlerProc: Thandle;
Data: tagPROCESSENTRY32;
Process: DWord;

S, Path: String;
BufPatch: Array [0..255] Of Char;
begin
//&#207;&#238;&#235;&#243;&#247;&#232;&#242;&#252; &#241;&#239;&#232;&#241;&#238;&#234; &#239;&#240;&#238;&#246;&#229;&#241;&#241;&#238;&#226;
EnableDebugPrivilege();
HandlerSnapshot:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
Data.dwSize:=sizeOf(data);
If HandlerSnapshot>0
then
begin
   //&#241;&#247;&#232;&#242;&#251;&#226;&#224;&#229;&#236; Dll &#226; &#239;&#224;&#236;&#255;&#242;&#252;
   sFile :=
     CreateFile("TestDll.dll",
                 GENERIC_READ, FILE_SHARE_READ,nil, OPEN_EXISTING, 0, 0);
   Size := GetFileSize(sFile, nil);
   GetMem(Buff, Size);
   ReadFile(sFile, Buff^, Size, BytesReaded, nil);
   CloseHandle(sFile);

  If Process32First(HandlerSnapshot, Data)
  then
  begin
    Repeat
      S:=Trim(ansiLowerCase(Data.szExeFile));
      HandlerProc:=OpenProcess(PROCESS_ALL_ACCESS,True,Data.th32ProcessID);
      if HandlerProc > 0 then
      Begin
         GetModuleFileNameEx(HandlerProc,0,BufPatch,256);
         Path:=ansiLowerCase(BufPatch);
         if (Path<>"")and(Path[1]<>"?")
         then
           Path:=ExtractFileDir(Path)
         else
           Path:="";
         S:=ExtractFileName(S);
         If Path <> "" Then
         begin
            {&#197;&#241;&#235;&#232; &#237;&#229; &#242;&#229;&#234;&#243;&#249;&#232;&#233; &#239;&#240;&#238;&#246;&#229;&#241;&#241;, &#239;&#238;&#242;&#238;&#236;&#243; &#247;&#242;&#238; &#229;&#241;&#235;&#232; &#226;&#237;&#229;&#228;&#240;&#255;&#242;&#252; &#226; &#242;&#229;&#234;&#243;&#249;&#232;&#233; &#239;&#240;&#238;&#246;&#229;&#241;&#241; &#238;&#248;&#232;&#225;&#234;&#224; &#231;&#224;&#239;&#232;&#241;&#232; &#239;&#238; &#224;&#228;&#240;&#229;&#241;&#243; 0}
            If S<>LowerCase("SecretKlient.exe")
            Then
            begin
              //&#209;&#242;&#224;&#226;&#232;&#236; &#241;&#229;&#234;&#240;&#229;&#242;
              Process:=GetProcessId(PChar(S));
              Process := OpenProcessEx(Process);
              If Process > 0
              Then
                InjectDllEx(Process, Buff);
            end;
         end;
      end;
    until not Process32Next(HandlerSnapshot,Data);
  end;
  CloseHandle(HandlerSnapshot);
end;

end.

Кстати сайт по ссылке открывается нерегулярно, в прошлый раз открылся, но при попытке закачки выдал ошибку! Поэтому я вообще не читал.

PS. Подскажи, как быть, сегодня поставил Opera, и теперь на любые действия под своей учетной записью на delphimaster требует пароль, а я его хоть убей не помню, когда заходил на сайт не думал, что долго на нем задержусь.


 
Eraser ©   (2006-09-16 13:18) [86]

> [83] xShadow ©   (16.09.06 11:00)
>
> > Eraser
>
> Не плохо, но бывает но. У меня к примеру на ноуте служба
> WMI отключена :) жрёт она не позволительно много.

дык её никода не поздно включить, можно прямо из приложения )

а что касается внедрения, все таки я бы был поосторожнее, а то потом юзерам прийдется долго отвечать на вопрос "Почему это после установки вашей программы, антивирус стал ругаться на все подряд?", эт не из воздуха пример, а из жизни :)


 
Nemec ©   (2006-09-16 15:22) [87]

> Eraser
Пока не ругается, даже Norton сам поражается, но молчит, если верить MS-REM метод довольно безопасный, если будет ругаться - это же не вирус, всегда можно отключить.
Не подскажешь ссылку на русское описание WMI, поискал в инете, общие понятия есть, но подробностей на русском не нашел.

>xShadow
С паролем все нормально.


 
Eraser ©   (2006-09-16 15:49) [88]

> [87] Nemec ©   (16.09.06 15:22)

русской литературы не знаю, к сожалению.. вот http://www.delphikingdom.com/asp/viewitem.asp?catalogid=698
самая лучшая статья на русском с хорошими примерами.


 
Ketmar ©   (2006-09-16 16:00) [89]

> [85] Nemec ©   (16.09.06 12:40)
эй, эй, монстры, вы что, грузите и мапите DLL руками, что ли? минуя виндовый загрузчик? если да -- то готовьтесь к "странным багам". и неработоспособности кучи API-функций.


 
Nemec ©   (2006-09-16 19:24) [90]

Удалено модератором
Примечание: Offtopic


 
Ketmar ©   (2006-09-16 19:28) [91]

а мне вот WMI не нравится. понимаю, что это, в принципе, не оправдано -- но не нравится. в частности -- из-за COM, которое я на дух не перевариваю. %-)


 
Eraser ©   (2006-09-16 20:50) [92]

> [91] Ketmar ©   (16.09.06 19:28)

хех, так мне тоже по-душе больше стандартные WinAPI, но реальность такова, что до многох системных механизмов, кроме как через WMI не доберешся, не считая конечно KMD, но это еще сложнее, чем WMI :)

+ ко всему ВМАЙ позволяет использовать всю свою мощь на удаленных машинами, считаю это ключевым приемуществом :)


 
Ketmar ©   (2006-09-16 21:53) [93]

> [92] Eraser ©   (16.09.06 20:50)
да я ж не говорю, что оно плохо. я говорю, что мне не нравится. %-)


 
Nemec ©   (2006-09-16 22:46) [94]

>Eraser
Облазил весь сайт микрософта не могу понять как скачать WMI SDK или уже туплю в 3 ночи, подскажи как это сделать, а то он предлагает лить 300 с лишним метров.


 
Прочитавший ветку   (2006-09-16 22:58) [95]

Интересно, а к чему приведет такая ситуация ?
В моей программе кто-то подменил адрес SomeFunct.
Запоминаю в глобальной переменной pSomeFunc:=GetProcAddress.
Этот "кто-то" снимает перехват, а я, ни сном ни духом об этом,
пытаюсь использовать pSomeFunc ?


 
Eraser ©   (2006-09-16 23:35) [96]

> [94] Nemec ©   (16.09.06 22:46)

AFAIK его качать надо для NT4 без каких то сервис паков.
в 2K/XP необходимые ActiveX уже имеются.
> [95] Прочитавший ветку   (16.09.06 22:58)

перечитал 3 раза, так и не понял, что конкретно вы хотели сказать :)
можно то же самое, только более развернуто? )


 
Ketmar ©   (2006-09-16 23:45) [97]

> [95] Прочитавший ветку   (16.09.06 22:58)
а кто сказал, что надо перехватывать методом правки IAT? сплайсингом, сплайсингом.


 
Антибайт   (2006-09-17 02:15) [98]

А это спасёт от tskill?


 
Ketmar ©   (2006-09-17 03:38) [99]

> [98] Антибайт   (17.09.06 02:15)
если перехватить ZwTerminateXXX() -- спасёт %-)


 
Прочитавший ветку   (2006-09-17 10:49) [100]

Поясните, пожалуйста.
Почему, обычно, перехватывают Zw - функции, а не Nt ?


 
Ketmar ©   (2006-09-17 10:50) [101]

> [100] Прочитавший ветку   (17.09.06 10:49)
потому что Nt в конце-концов всё равно вызывают Zw.


 
Nemec ©   (2006-09-17 11:44) [102]

Удалено модератором
Примечание: Личная переписка


 
Eraser ©   (2006-09-17 13:12) [103]

> [102] Nemec ©   (17.09.06 11:44)

ссылку на что? я ж сказал - ничего качать не надо, все уже есть в системе.
если интересует под 9x/ME/NT4, то вот ссылка http://www.microsoft.com/downloads/details.aspx?FamilyID=7750e5d7-3903-4aa8-8fbd-f555a4939285&DisplayLang=en
одна из первых, которые вывел поиск по сайту M$.


 
Nemec ©   (2006-09-17 14:42) [104]

>Eraser
Все подобные ссылки переводят на
http://www.microsoft.com/library/errorpages/smarterror.aspx/404?aspxerrorpath=/downloads/details.aspx
Запросы WMI в системе работают это я заметил, еще один вопрос, как со всем этим работать из под делфи ведь в палитре компонентов нет ничего подобного, что можно почитать на эту тему?


 
Nemec ©   (2006-09-17 14:47) [105]

Удалено модератором
Примечание: Offtopic


 
Ketmar ©   (2006-09-17 14:51) [106]

Удалено модератором
Примечание: Offtopic


 
Eraser ©   (2006-09-17 15:10) [107]

у меня  http://www.microsoft.com/downloads/details.aspx?FamilyID=7750e5d7-3903-4aa8-8fbd-f555a4939285&DisplayLang=en
открывается без всяких mask as IE :) (Opera 9.0)


 
Nemec ©   (2006-09-17 15:37) [108]

Удалено модератором
Примечание: Offtopic


 
Nemec ©   (2006-09-17 17:06) [109]

Удалено модератором
Примечание: Offtopic


 
Eraser ©   (2006-09-17 17:37) [110]

Удалено модератором
Примечание: Offtopic


 
Nemec ©   (2006-09-17 18:10) [111]

Удалено модератором
Примечание: Offtopic


 
Nemec ©   (2006-09-17 18:10) [112]

Удалено модератором
Примечание: Offtopic


 
Nemec ©   (2006-09-17 18:13) [113]

>Eraser
А где я возьму Active DS Type Library (Version 1.0) и Microsoft WMI Scripting v1.1 Library (Version 1.1) из твоего примера у меня делфи их не показывает, а в статье которую ты дал сказано: установить WMI SDK;


 
Nemec ©   (2006-09-17 18:16) [114]

Удалено модератором
Примечание: Offtopic


 
Nemec ©   (2006-09-17 19:55) [115]

Удалено модератором
Примечание: Offtopic


 
Eraser ©   (2006-09-17 20:18) [116]

> Жалко, что не скачался WMI SDK

он уже встроен в систему, всмысле Run-Time часть - остальное - заголовочные файлы, которые генерируются Делфи при установке ActiveX компонентов.


 
Nemec ©   (2006-09-17 22:56) [117]

>Eraser
Там много функций и объектов которые я до этого в глаза не видел, причем судя по примерам в статье тобой рекомендованой, параметрами методов являются тексты, так что в любом случае придется искать материал, попробую еще раз скачать WMI SDK, но уже MS Internet Explorer, может удастся. Не знаешь может где есть только документация, чтобы меньше качать?


 
Nemec ©   (2006-09-17 23:13) [118]

Удалено модератором
Примечание: Offtopic


 
Eraser ©   (2006-09-17 23:21) [119]

> [117] Nemec ©   (17.09.06 22:56)

вся документация тут msdn.com, посмотреть методы/свойства классов можно с пом. утилиты WMI CIM Studio.


 
Nemec ©   (2006-09-17 23:25) [120]

Удалено модератором
Примечание: Offtopic


 
Nemec ©   (2006-09-18 06:48) [121]

Удалено модератором
Примечание: Offtopic


 
Игорь Шевченко ©   (2006-09-18 10:23) [122]

Ketmar ©   (17.09.06 10:50) [101]


> потому что Nt в конце-концов всё равно вызывают Zw.


С точностью до наоборот


 
Eraser ©   (2006-09-18 11:37) [123]

> [122] Игорь Шевченко ©   (18.09.06 10:23)

на сколько мне известно, точка входа у этих функций одна, просто при вызове nt проверяются параметры, так что трудно сказать кто-кого вызывает. Хотя могу ошибаться, Руссановича давно читал..


 
Прочитавший ветку   (2006-09-18 11:39) [124]

Игорь Шевченко ©   (18.09.06 10:23) [122]
>С точностью до наоборот
А из каких, тогда соображений перехватывают Zw - функции, а не Nt ?


 
Eraser ©   (2006-09-18 11:44) [125]

> [123] Eraser ©   (18.09.06 11:37)


> точка входа у этих функций одна

только в пользовательском режиме естественно.


 
Игорь Шевченко ©   (2006-09-18 14:03) [126]

Прочитавший ветку   (18.09.06 11:39) [124]


> А из каких, тогда соображений перехватывают Zw - функции,
>  а не Nt ?


Если кто пройдет TDump"ом по ntdll.dll, то он увидит, что и Zw- и Nt- функции имеют одинаковый адрес. Поэтому выбор семейства функции для перехвата диктуется исключительно религиозными соображениями.

Мой пост [122] относился к дальнейшему пути выполнения этих функций, так как в ntoskrnl.exe тоже существуют Zw- и Nt- функции. Так вот, Zw как раз и вызывают Nt. В ядрес.


 
Ketmar ©   (2006-09-18 14:19) [127]

> [126] Игорь Шевченко ©   (18.09.06 14:03)
может и так. давно смотрел. каюсь. %-)


 
Дракон   (2006-11-17 23:18) [128]

Удалено модератором
Примечание: Offtopic



Страницы: 1 2 3 4 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.85 MB
Время: 0.044 c
2-1173306689
Ezorcist
2007-03-08 01:31
2007.04.01
сколько в памяти займет integer ?


2-1173264291
Nipel
2007-03-07 13:44
2007.04.01
позиция мыши в memo


2-1173694877
smaller
2007-03-12 13:21
2007.04.01
Неизвестный компонент


1-1171046462
shr
2007-02-09 21:41
2007.04.01
есть ли мат. функции, работающие с Очень большими числами?


15-1173480399
миксер
2007-03-10 01:46
2007.04.01
Oracle 8i





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский