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

Вниз

блокировка процессов   Найти похожие ветки 

 
ravennsk ©   (2003-11-27 14:54) [0]

народ подскажите как сделать так чтоб программа не давала запускать кое какие проги (эт относится к играм).


 
Digitman ©   (2003-11-27 15:27) [1]

чем "игра" отличается от "НЕ игра" ?


 
nejest   (2003-11-27 15:43) [2]

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


 
Digitman ©   (2003-11-27 15:56) [3]


> nejest


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


 
GrandleBugenShpreh   (2003-11-27 17:41) [4]

to Digitman

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


А кто мешает вести список только разрешенных к запуску приложений ??? Тогда он НИЧЕГО лишнего не запустит, а надо будет - пусть админ посмотрит что за прога и внесет в список.


 
DeadMeat ©   (2003-11-27 19:58) [5]

> ravennsk
А где это будет использоваться...? В смысле школа, университет, офис, интернет салон??...


 
Игорь Шевченко ©   (2003-11-27 20:07) [6]

Policy


 
DVM ©   (2003-11-27 21:43) [7]


> юзер-то нонче шибко умный пошел) ... пронюхает про твой
> таймер да список процессов, переименует исп.файл

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

И как уже сказал DeadMeat, надо не запрещать запускать что-то, а разрешать запускать только то, что надо.


 
panov ©   (2003-11-27 23:23) [8]

Вот абсолютно точный ответ - Игорь Шевченко © (27.11.03 20:07) [6]
Средства ОС позволяют решить эту задачу.


 
ravennsk ©   (2003-11-28 07:36) [9]

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


 
Hooch ©   (2003-11-28 07:38) [10]

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


 
ravennsk ©   (2003-11-28 08:16) [11]

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


 
Digitman ©   (2003-11-28 08:19) [12]


> ravennsk


> я пишу прогу


а чего ее писать ?)
уже все давно написано Майкрософтом для тебя !

тебе ж сказали - смотри настройки локальных и пользовательских/групповых политик ... там все это есть


 
ravennsk ©   (2003-11-28 08:22) [13]

в политиках не совсем то ...... в настройках политики не запретишь запуск определенных программ


 
Digitman ©   (2003-11-28 08:42) [14]

зато разрешишь запуск строго определенных


 
ravennsk ©   (2003-11-28 08:45) [15]

а мне не надо запуск определённых, мне надо запрет определённых


 
Nikolay M. ©   (2003-11-28 09:29) [16]

А каким образом определяется, что есть игра, а что - работа?
Где гарантия, что MS не выпустит Ексель 2005 под именем quake3D.exe?

А вообще, имхо, это личное дело каждого, чем ему заниматься на рабочем месте. Лишь бы работа делалась вовремя и в случае возникновения глюков их можно было разрулить. Мне что прикажете, если я работаю в команде и жду, пока остальные доделают свою часть работы, сидеть, тупить в монитор и переставлять иконки на десктопе? Так я лучше анекдоты почитаю. Или документацию (зависит от настроения). Или поиграю. Кто как отдыхает, тот так и работает.
Все вышесказанное - имхо.


 
Digitman ©   (2003-11-28 09:41) [17]


> мне надо запрет определённых


ну что значит "определенных" ? с заранее известным именем исп.файла что ли ?


 
ravennsk ©   (2003-11-28 10:06) [18]

я знаю во что народ играет, и мне не составляет труда выяснить файл запускаемый..... так скажете как запретить выполнение файла?


 
ravennsk ©   (2003-11-28 10:06) [19]

а список то я уже и сам вручную состовлю, во что народу играть а во что и не стоит


 
Digitman ©   (2003-11-28 10:15) [20]


> ravennsk


ну раз ты такой упрямый, реализуй глоб.перехват вызова ф-ции CreateProcess[Ex]


 
Игорь Шевченко ©   (2003-11-28 12:20) [21]

ravennsk © (28.11.03 08:45)

И все-таки, Policy.
Потому что никакой перехват тебе не поможет запретить вызов программы с именем Excel.exe.


 
ravennsk ©   (2003-11-28 12:41) [22]

эт почему????


 
Игорь Шевченко ©   (2003-11-28 13:31) [23]

ravennsk © (28.11.03 12:41)

Потому что нужная и полезная программа, по твоей терминологии :)


 
ravennsk ©   (2003-11-28 14:27) [24]

ну так как ктонить скажет? а то наговорили то много но все не особо то и нужное. скажите чем перехватить и как сделать?


 
Digitman ©   (2003-11-28 14:32) [25]

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


procedure RtlEnterCriticalSection(pSection: Pointer); stdcall; external NTDLL_LIB;
procedure RtlLeaveCriticalSection(pSection: Pointer); stdcall; external NTDLL_LIB;

function GetCurrentPEB: PPEB;
asm
mov eax, fs:[TTeb.Peb]
end;

procedure LockPEB(PEB: PPEB);
begin
RtlEnterCriticalSection(PEB.FastPebLock);
end;

procedure UnlockPEB(PEB: PPEB);
begin
RtlLeaveCriticalSection(PEB.FastPebLock);
end;

procedure LockLoader(PEB: PPEB);
begin
RtlEnterCriticalSection(PEB.LoaderLock);
end;

procedure UnlockLoader(PEB: PPEB);
begin
RtlLeaveCriticalSection(PEB.LoaderLock);
end;

function GetMainThreadId: DWord;
const
TEB_ALIGNMENT = $1000;
asm
mov eax, fs:[TNtTib.Self]
and eax, eax
jz @@exit
mov eax, [eax].TTeb.Peb
and eax, eax
jz @@exit
sub eax, TEB_ALIGNMENT
mov eax, [eax].TTeb.ClientId.UniqueThread
@@exit:
end;

function FindModuleInfo(hModule: THandle): PModuleInfo;
var
Peb: PPeb;
pLdrData : PPEB_LDR_DATA;
pLoadOrderList : PPLIST_ENTRY;
pInLoadModuleEntry: PModuleEntry;
begin
Result := nil;
if hModule = 0 then Exit;
Peb := GetCurrentPeb;
LockLoader(Peb);
try
pLdrData := Peb^.LdrData;
pLoadOrderList := @pLdrData.InLoadOrderModuleList;
pInLoadModuleEntry := PModuleEntry(pLoadOrderList^);
while PPListEntry(pInLoadModuleEntry) <> pLoadOrderList do
begin
Result := @pInLoadModuleEntry.ModuleInfoData;
if Result^.DllBase = Pointer(hModule) then
Exit;
pInLoadModuleEntry := PModuleEntry(pInLoadModuleEntry.InLoadOrderLinks.Flink);
end;
Result := nil;
finally
UnLockLoader(Peb);
end;
end;



 
Digitman ©   (2003-11-28 14:32) [26]

function GetModuleInfo(lpModule: PChar; out ModuleInfo: TModuleInfo): Boolean;
var
peb: PPeb;
hModule: THandle;
pLdrData : PPEB_LDR_DATA;
pLoadOrderList : PPLIST_ENTRY;
pInLoadModuleEntry: PModuleEntry;
pModuleNfo: PModuleInfo;
begin
Result := False;
if not Assigned(lpModule) then Exit;
peb := GetCurrentPeb;
LockLoader(Peb);
try
hModule := FindHInstance(lpModule);
if hModule = 0 then Exit;
if hModule <> THandle(lpModule) then
hModule := GetModuleHandle(lpModule);
if hModule = 0 then Exit;
pLdrData := peb^.LdrData;
pLoadOrderList := @pLdrData.InLoadOrderModuleList;
pInLoadModuleEntry := PModuleEntry(pLoadOrderList^);
while PPListEntry(pInLoadModuleEntry) <> pLoadOrderList do
begin
pModuleNfo := @pInLoadModuleEntry.ModuleInfoData;
if pModuleNfo^.DllBase = Pointer(hModule) then
begin
if Assigned(@ModuleInfo) then
ModuleInfo := pModuleNfo^;
Result := True;
Break;
end;
pInLoadModuleEntry := PModuleEntry(pInLoadModuleEntry.InLoadOrderLinks.Flink);
end;
finally
UnLockLoader(Peb);
end;
end;

function SetProcAddress(hModule: THandle; lpProcName: PChar; pProcAddr: Pointer): Boolean;
var
Peb: PPeb;
hProcess, hImporter: THandle;
pOptHdr: PImageOptionalHeader;
pImpDir: PImageImportDescriptor;
pExpDir: PImageExportDirectory;
pIATEntry: PImageThunkData;
pOldProcAddr: Pointer;
pdwNamePtr, pdwEntryPoint: PDWord;
pName: PChar;
pwOrdinalPtr: PWord;
i, nOrdinal, dwNewProcAddrRVA, dwProtect: DWord;
pLdrData : PPEB_LDR_DATA;
pLoadOrderList : PPLIST_ENTRY;
pInLoadModuleEntry: PModuleEntry;
pModuleNfo: PModuleInfo;
pImpModuleNfo: PModuleInfo;
sModuleName: String;
dwDirSize: DWord;
begin
Result := False;
if (hModule = 0) or (lpProcName = nil) then Exit;
peb := GetCurrentPEB;
LockLoader(Peb);
try
pModuleNfo := FindModuleInfo(hModule);
if not Assigned(pModuleNfo) then Exit;
sModuleName := WideCharToString(pModuleNfo^.BaseDllName.Buffer);
pOptHdr := PImageOptionalHeader(hModule + PImageDosHeader(hModule)._lfanew + SIZE_OF_NT_SIGNATURE + IMAGE_SIZEOF_FILE_HEADER);
dwDirSize := pOptHdr.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size;
if (pOptHdr^.NumberOfRvaAndSizes < 16) or (dwDirSize = 0) then Exit;
pExpDir := PImageExportDirectory(hModule + pOptHdr.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
pdwEntryPoint := nil;
pwOrdinalPtr := PWord(hModule + DWord(pExpDir^.AddressOfNameOrdinals));
if HiWord(DWord(lpProcName)) = 0 then
begin
nOrdinal := LoWord(DWord(lpProcName)) - pExpDir^.Base;
if (nOrdinal < pExpDir^.NumberOfFunctions) then
pdwEntryPoint := PDWord(hModule + DWord(pExpDir^.AddressOfFunctions) + nOrdinal * SizeOf(PDWord));
end
else
begin
pdwNamePtr := PDWord(hModule + DWord(pExpDir^.AddressOfNames));
for i := 0 to pExpDir^.NumberOfNames - 1 do
begin
pName := PChar(PDWord(hModule + PDword(pdwNamePtr)^));
if lstrcmp(pName,lpProcName) = 0 then
begin
nOrdinal := pwOrdinalPtr^;
pdwEntryPoint := PDWord(hModule + DWord(pExpDir^.AddressOfFunctions) + nOrdinal * SizeOf(PDWord));
Inc(nOrdinal, pExpDir^.Base);
Break;
end
else
begin
Inc(pdwNamePtr);
Inc(pwOrdinalPtr);
end
end;
end;
if not Assigned(pdwEntryPoint) then Exit;
pOldProcAddr := Pointer(hModule + pdwEntryPoint^);
if pOldProcAddr = pProcAddr then
Result := True
else
try
dwNewProcAddrRVA := DWord(pProcAddr) - hModule;
hProcess := OpenProcess(PROCESS_VM_OPERATION, False, GetCurrentProcessId);
Win32Check(hProcess <> 0);
try
Win32Check(VirtualProtectEx(hProcess, pExpDir, dwDirSize, PAGE_WRITECOPY, dwProtect));
try
pdwEntryPoint^ := dwNewProcAddrRVA;
finally
VirtualProtectEx(hProcess, pExpDir, dwDirSize, dwProtect, dwProtect);
end;
pName := PChar(sModuleName);
pLdrData := Peb^.LdrData;
pLoadOrderList := @pLdrData.InLoadOrderModuleList;
pInLoadModuleEntry := PModuleEntry(pLoadOrderList^);
while PPListEntry(pInLoadModuleEntry) <> pLoadOrderList do
begin
pImpModuleNfo := @pInLoadModuleEntry.ModuleInfoData;
if pImpModuleNfo <> pModuleNfo then
begin
hImporter := THandle(pImpModuleNfo^.DllBase);
pOptHdr := PImageOptionalHeader(hImporter + PImageDosHeader(hImporter)._lfanew + SIZE_OF_NT_SIGNATURE + IMAGE_SIZEOF_FILE_HEADER);
if pOptHdr^.NumberOfRvaAndSizes = 16 then
begin
dwDirSize := pOptHdr^.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].Size;
if dwDirSize > 0 then
begin
pImpDir := PImageImportDescriptor(hImporter + pOptHdr^.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
while Assigned(PChar(pImpDir^.RVAImportModuleName)) do
begin
if lstrcmpi(PChar(hImporter + pImpDir^.RVAImportModuleName), pName) = 0 then
begin
pIATEntry := PImageThunkData(hImporter + DWord(pImpDir^.RVAImportAddressTable));
while Assigned(pIATEntry^.Func) do
begin
if pIATEntry^.Func = pOldProcAddr then
begin
Win32Check(VirtualProtectEx(hProcess, pIATEntry, SizeOf(pIATEntry), PAGE_WRITECOPY, dwProtect));
try
pIATEntry^.Func := pProcAddr;
finally
VirtualProtectEx(hProcess, pIATEntry, SizeOf(pIATEntry), dwProtect, dwProtect);
end;
Break;
end;
Inc(pIATEntry);
end;
end;
Inc(pImpDir);
end;
end;
end;
end;
pInLoadModuleEntry := PModuleEntry(pInLoadModuleEntry.InLoadOrderLinks.Flink);
end;
finally
CloseHandle(hProcess);
end;
Result := True;
except
end;
finally
UnLockLoader(Peb);
end;
end;



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

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

Наверх




Память: 0.55 MB
Время: 0.025 c
14-16740
Yorick
2004-01-14 23:27
2004.02.06
Это новый вирус?


1-16342
Наташенька
2004-01-24 19:51
2004.02.06
Звук


8-16526
Chlavik
2003-09-30 19:50
2004.02.06
Чёрное:=CoolFunc(Белое); // у кого есть алгоритм?


1-16236
DDA
2004-01-28 19:33
2004.02.06
MessageDlg


1-16331
oleg_SYS
2004-01-24 21:27
2004.02.06
Где находятся в реестре пункты контекстных меню?