Форум: "WinAPI";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];
ВнизКак можно перехватить событие закрытия программы Найти похожие ветки
← →
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)
я лично имею в виду: "а как определили, что не внедрилось, или что ошибка"?
Страницы: 1 2 3 4 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];
Память: 0.64 MB
Время: 0.045 c