Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Слежка за запускаемыми на ПК процессами [D5, D6, D7, Win95/98, WinME, Win2k, WinXP]


Страницы:   1 2

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-приложений.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо