![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Слежка за запускаемыми на ПК процессами [D5, D6, D7, Win95/98, WinME, Win2k, WinXP]
Angel_Forever © (2004-01-24 16:15:00)Привет программерам!!!
Слушайте есть такое дельце...нужно написать прогу, чтобы висела в ОЗУ (была резидентной - аля вирус :)) и следила за запускаемыми процессами и при обнаружени заданного (заданных)процесса(ов) их убивал...Есть процедуры типа
TerminateProcess(hProcess:Cardinal,uExitCode:Cardinal):LongBool;
и
ExitProcess(uExitCode:Cardinal); , но я незнаю как с ними работать...просто понятия не имею...:(...можт есть какой нить другой способ\метод\процедура\функция? Подскажите плиз...
Angel_Forever (2004-04-01 02:57:00) [1]Александр1, он какраз таки прописывает себя ехе файлах, при запуске заражённого файла запускает себя в процессы и создаёт свой исполняемый файл размером в 40 кб с именем ishtar.exe, сканит все диски и прописывает себя во все ехешники (можешь открыть заражённый файл например в фаре или в нортоне F3 и поглядеть на него, только ты о нём мало там инфы найдёшь...только надпись в заголовочной части файла), определить заражён ли файл этим долбаным вирусякой можно только по иконке программы. у заражённого файла обычно меняется иконка...
L (2004-03-28 23:38:00) [2]win98
unit KernlUtl;
interface
uses TlHelp32, Windows, Classes, Sysutils;
procedure GetProcessList(List: TStrings);
procedure GetModuleList(List: TStrings);
function GetProcessHandle(ProcessID: DWORD): THandle;
procedure GetParentProcessInfo(var ID: DWORD; var Path: String);
const
PROCESS_TERMINATE = $0001;
PROCESS_CREATE_THREAD = $0002;
PROCESS_VM_OPERATION = $0008;
PROCESS_VM_READ = $0010;
PROCESS_VM_WRITE = $0020;
PROCESS_DUP_HANDLE = $0040;
PROCESS_CREATE_PROCESS = $0080;
PROCESS_SET_QUOTA = $0100;
PROCESS_SET_INFORMATION = $0200;
PROCESS_QUERY_INFORMATION = $0400;
PROCESS_ALL_ACCESS =
STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $0FFF;
implementation
procedure GetProcessList(List: TStrings);
var
I: Integer;
hSnapshoot: THandle;
pe32: TProcessEntry32;
begin
List.Clear;
hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshoot = -1) then
Exit;
pe32.dwSize := SizeOf(TProcessEntry32);
if (Process32First(hSnapshoot, pe32)) then
repeat
I := List.Add(Format('%x, %x: %s',
[pe32.th32ProcessID, pe32.th32ParentProcessID, pe32.szExeFile]));
List.Objects[I] := Pointer(pe32.th32ProcessID);
until not Process32Next(hSnapshoot, pe32);
CloseHandle (hSnapshoot);
end;
procedure GetModuleList(List: TStrings);
var
I: Integer;
hSnapshoot: THandle;
me32: TModuleEntry32;
begin
List.Clear;
hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, 0);
if (hSnapshoot = -1) then
Exit;
me32.dwSize := SizeOf(TModuleEntry32);
if (Module32First(hSnapshoot, me32)) then
repeat
I := List.Add(me32.szModule);
List.Objects[I] := Pointer(me32.th32ModuleID);
until not Module32Next(hSnapshoot, me32);
CloseHandle (hSnapshoot);
end;
procedure GetParentProcessInfo(var ID: DWORD; var Path: String);
var
ProcessID: DWORD;
hSnapshoot: THandle;
pe32: TProcessEntry32;
begin
ProcessID := GetCurrentProcessID;
ID := -1;
Path := '';
hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshoot = -1) then
Exit;
pe32.dwSize := SizeOf(TProcessEntry32);
if (Process32First(hSnapshoot, pe32)) then
repeat
if pe32.th32ProcessID = ProcessID then
begin
ID := pe32.th32ParentProcessID;
Break;
end;
until not Process32Next(hSnapshoot, pe32);
if ID <> -1 then
begin
if (Process32First(hSnapshoot, pe32)) then
repeat
if pe32.th32ProcessID = ID then
begin
Path := pe32.szExeFile;
Break;
end;
until not Process32Next(hSnapshoot, pe32);
end;
CloseHandle (hSnapshoot);
end;
function GetProcessHandle(ProcessID: DWORD): THandle;
begin
Result := OpenProcess(PROCESS_ALL_ACCESS, True, ProcessID);
end;
end.
winNT
есть библиотека "NTDLL.DLL" в ней функция "NtQuerySystemInformation"
возвращает в буфере инфу о всех процессах в системе
JSilver (2004-03-28 16:58:00) [3]Я про этот визус ничего не слышал, слава богу, но была другая напасть, переводчик СакратПерсональный4,1 при завершении винды все дело портил, пришлось помочь ему умирать самому, и удачно(была написана прога по убитию роцесса, вот ее фрагмент).
Procedure ...
Var hKillProcess, hProcess, hProc: HWND;
PID : DWORD;
szProcessName: ARRAY[0..80] Of char;
ahMod: ARRAY[0..10] Of PDWORD;
dwNeeded: DWORD;
NameProc: String;
Begin
For PID:=1 to 65000 do Begin
hProcess := OpenProcess (PROCESS_ALL_ACCESS, FALSE, PID);
if hProcess NULL Then Begin
if EnumProcessModules (hProcess, @ahMod, sizeof(@ahMod), dwNeeded) Then Begin
hProc := OpenProcess (PROCESS_ALL_ACCESS, FALSE, PID);
If GetModuleBaseName(hProc, Cardinal(ahMod[0]), szProcessName, sizeof(szProcessName))0 Then Begin
NameProc:=szProcessName[0]+szProcessName[1]+szProcessName[2]+szProcessName[3]+
szProcessName[4]+szProcessName[5]+szProcessName[6];
If (NameProc='SPV.EXE') or (NameProc='spv.exe') Then Begin
hKillProcess := OpenProcess( PROCESS_TERMINATE, FALSE, PID ); // Óáèâàåì ýòîò ïðîöåññ
if hKillProcess NULL Then TerminateProcess( hKillProcess, DWORD(-1) ); CloseHandle (hKillProcess);
End;
End
else ;//ShowMessage('');
CloseHandle (hProc);
End;
End;
CloseHandle (hProcess);
End;
End;
Это однократный поиск и убитие. Загони, к примеру, в цикл и прогоняй раз в минуту. А прогу в автозагрузку.
TButton (2004-03-27 22:56:00) [4]Win+F ishtar.ехе
Александр1 (2004-03-27 19:28:00) [5]Angel_Forever Скажи этот вирус заражает exe? Ну в смысле дописывается к ним и как он переносится?
Вообще когда у меня заводится гадость типа этой, я переписываю windows (стираю нафик старый win и ставлю новый). А если не поможет, Format C: уж точно поможет! Если конечно он в Bios не засел?
А на счёт убивания процессов это ты хороший вопрос задал! Я тоже пытаюсь найти на него ответ?
И к стати нашёл кое что! Могу поделиться.
nit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
Button2: TButton;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure CheckBox2Click(Sender: TObject);
private
{ Private declarations }
public
procedure KillProgram(ClassName: PChar; WindowTitle: PChar);
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.KillProgram(ClassName: PChar; WindowTitle: PChar);
const
PROCESS_TERMINATE = $0001;
var
ProcessHandle : THandle;
ProcessID: Integer;
TheWindow : HWND;
begin
TheWindow := FindWindow(Classname, WindowTitle);
GetWindowThreadProcessID(TheWindow, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
end;
procedure TForm1.Button1Click(Sender: TObject);
VAR
Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
begin
ListBox1.Clear;
Wnd := GetWindow(Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO
BEGIN {Не показываем:}
IF (Wnd <> Application.Handle) AND {-Собственное окно}
(IsWindowVisible(Wnd)or checkbox1.checked) AND {-Невидимые окна}
((GetWindow(Wnd, gw_Owner) = 0)or checkbox2.checked) AND {-Дочернии окна}
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0) {-Окна без заголовков}
THEN
BEGIN
GetWindowText(Wnd, buff, sizeof(buff));
ListBox1.Items.Add(StrPas(buff));
END;
Wnd := GetWindow(Wnd, gw_hWndNext);
END;
ListBox1.ItemIndex := 0;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
killprogram(nil,pchar(listbox1.Items.Strings[listbox1.ItemIndex]));
sleep(100);
button1click(form1);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
button1click(form1);
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
button1click(form1);
end;
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
button1click(form1);
end;
end.
BlackBaracuda (2004-03-26 05:57:00) [6]А почему бы не попробовать...
СЛУШАЙ а ведь в делфях есть команды, которые определяют имя файла, от которого произошел этот процесс...
Или легче запустить утилиту WinSight32 , она находится автоматом в делфи, два раза щелкнуть на процесс ishtar, и тебе откроется заветное имя файла вируса...
Если не помогло тогда вот -
var ishtar:TFilestream;
ishtar:=TFileStream.Create('C:\windows\ishtar.exe',fmOpenRead,fmShareDenyNone);
Создай файл ishtar.exe в виндах, и запусти прогу...
Можно по нажатию на кнопку...
BlackBaracuda (2004-03-26 05:57:00) [7]А почему бы не попробовать...
СЛУШАЙ а ведь в делфях есть команды, которые определяют имя файла, от которого произошел этот процесс...
Или легче запустить утилиту WinSight32 , она находится автоматом в делфи, два раза щелкнуть на процесс ishtar, и тебе откроется заветное имя файла вируса...
Если не помогло тогда вот -
var ishtar:TFilestream;
ishtar:=TFileStream.Create('C:\windows\ishtar.exe',fmOpenRead,fmShareDenyNone);
Создай файл ishtar.exe в виндах, и запусти прогу...
Можно по нажатию на кнопку...
alkarin (2004-03-20 05:55:00) [8]хрен его знает... я касперским запросто справлялся с этой гадостью, которая плодится с каждой секундой
Angel_Forever (2004-03-07 04:24:00) [9]KSergey Ну....написал...я прогу из одной формы....а поту?...эта с-ка вирусяка и с ней х. з. каким образом расправился :)))(((
Angel_Forever (2004-02-27 14:28:00) [10]Ihor Osov'yak тама где ты сказал посмотреть...чисто...ни каких упоминаний о вирусе...
ДЛЯ ВСЕХ УЧАСТНИКОВ ЭТОЙ ТЕМЫ СВЕЖЕИСПЕЧЁННАЯ ИНФА ПО ВИРУСУ ishtar.exe.... Тута один мой знакомый у меня что-то резал на болванку и к нему попал этот вирус...он проверил, что чудит этот вирусяка...он находит шаровые папки и расшаривает их на пример Общие документы в ИксПине...папку Виндовс и т.д....
12345678 (2004-02-23 10:06:00) [11]http://maxcomputing.narod.ru
Там есть пример перехвата CreateInternalProcess для NT
hehe
Ihor Osov'yak (2004-02-22 15:08:00) [12]ну, о том что Соломон с Руссиновичом букварик - я немного загнул.. Сорри ...
KSergey (2004-02-22 12:59:00) [13]Хорошие нынче букварики пошли...
А "Дельфи за х часов" - это тогда памперсы получается? ;)
Ihor Osov'yak (2004-02-22 11:19:00) [14]хм.. Для начала пройдись в реестре на тему поиска ishtar.ехе...
> каждый раз когда я пытаюсь установить какую либо прогу (
Есть подозрение, что нечто интересное можешь увидить в ветке
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
Ищи там раздел с именем setup.exe или install.exe, а в разделе -параметр Debugger.. Если будет там сия вещь - значит оно..
Что сей параметр значит - догадайся сам, или какой-то букварик почитай, где подробно процесс запуска приложений описан.. Соломона с Руссиновичем, например..
Зы2. Есть ли аналогичная фича в W9X - не знаю, я с этой системой мало работаю, а специально смотреть сейчас - влом..
KSergey (2004-02-22 10:50:00) [15]Навеяно > Defunct (15.02.04 16:49) [22]
Раз уж "вирус" чихал на атрибуты - просто состряпать простейшую прогу, которая ничего не делает (например, постоянно в Sleep висит, или еще что-то такое Да даже просто из единственного окна невидимого состоит - вот и все) - и запускать ее из автозапуска. Имя и расположение должна иметь, разумеется, "вирусное". ТОгда уже никто этот файл не перетрет.
PS
Ну разве что вдруг обнаружится, что "вирус" умеет произвольное имя файла вибирать ;)
Хотя детство это все. Что-то подозрение, что либо не вирус это, либо не это вирус...
Angel_Forever (2004-02-21 09:58:00) [16]Defunct проблема в том, что он и в реестре-то не прописывается... :|
Burmistroff (2004-02-15 18:02:00) [17]касаемо первого поста в ветке можешь взглянуть на
http://maxcomputing.narod.ru/ssm.html
Defunct (2004-02-15 16:49:00) [18]> Некто хочешь прикол ;)? Попробовал я создать файл с таким именем (правда через консоль) ishtar.exe атрибуты правда поставил только RO...но вирусу этот атрибут оказался непомехой...я ради интереса открыл таск менеджер, Виндовую папку с псевдовирусом, и запустил заражённый иштаром файл...гы-гы....этот ё_ый вирусяка....без лишних вопросов взял записал себя....может он определил, что файл котоый уже существует не есть он...типа файлсайзы не совпадают...что-ли короче говоря х.з. что с ним делать.....
Тут вот есть идея, что если переименовать какой-то полезный процесс в ishtar.exe (например taskmgr.exe или explorer.exe) поменять имена в реестре и тогда вирус вообще никогда не сможет в него дописаться, т.к. процесс запущен постоянно.
Angel_Forever (2004-02-15 15:27:00) [19]Некто хочешь прикол ;)? Попробовал я создать файл с таким именем (правда через консоль) ishtar.exe атрибуты правда поставил только RO...но вирусу этот атрибут оказался непомехой...я ради интереса открыл таск менеджер, Виндовую папку с псевдовирусом, и запустил заражённый иштаром файл...гы-гы....этот ё_ый вирусяка....без лишних вопросов взял записал себя....может он определил, что файл котоый уже существует не есть он...типа файлсайзы не совпадают...что-ли короче говоря х.з. что с ним делать.....
Alexander666 (2004-02-05 10:16:00) [20]Упс, хуки насколько я понимаю действуют только для GUI-приложений.