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

Вниз

Как спрятать запущенную программу?   Найти похожие ветки 

 
z_man ©   (2004-12-07 22:11) [0]

Как спрятать запущенную программу в панели задач, сис-трее и в самих процессах системы в Windows98/2000/XP?


 
Anatoly Podgoretsky ©   (2004-12-07 22:20) [1]

А вот и не скажем


 
z_man ©   (2004-12-07 22:26) [2]

Anatoly Podgoretsky

Любопытно узнать, а в каких интересах "не скажем"???


 
Piter ©   (2004-12-07 22:49) [3]

Тебе на сайт троянописателей, а не сюда


 
z_man ©   (2004-12-07 22:57) [4]

Anatoly Podgoretsky
Piter

Да я уже нашел. Все равно спасибо за подсказку ...


 
Игорь Шевченко ©   (2004-12-08 00:14) [5]

В самих процессах все равно не спрячешь.


 
Игорь Шевченко ©   (2004-12-08 00:22) [6]

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


 
GuAV ©   (2004-12-08 00:28) [7]

Игорь Шевченко ©   (08.12.04 0:22) [6]
добавив в код стандартного Task Manager-а всего


Это как ? Microsoft предоставляет исходники ? или по хакерски - чезер дизассемблер и ассемблер ?? :-)


 
Игорь Шевченко ©   (2004-12-08 00:36) [8]

GuAV ©   (08.12.04 00:28) [7]

Ты будешь удивлен, но исходники для этого не требуются. Во-первых алгоритм работы стандартного Task Manager довольно прозрачен, так что написать его, предварительно порывшись по сети, довольно несложная задача. Во-вторых, несколько строчек (это уже к MS, разумеется) для замены статической линковки на динамическую и небольшую проверку.

С уважением,


 
GuAV ©   (2004-12-08 01:10) [9]

Ну если проверять что по  адресу GetProcAdress... но всё равно как тогда получить правильный адрес NtQuerySystemInformation ?


 
Piter ©   (2004-12-08 01:14) [10]

Игорь Шевченко ©   (08.12.04 0:36) [8]
для замены статической линковки на динамическую и небольшую проверку


а можно поподробнее об этой небольшой проверке?

Я так подозреваю, что вы про то, что DLLMain будет исполняться ДО того, как троянец сможет перезаписать таблицы импорта... Но ведь есть и альтернативные способы загрузки библиотек (без вызова LoadLibrary)


 
Piter ©   (2004-12-08 01:15) [11]

GuAV ©   (08.12.04 1:10) [9]
но всё равно как тогда получить правильный адрес NtQuerySystemInformation ?


можно грузить библиотеку, и в DLLMain можно определить истинный адрес WinApi функций...


 
Игорь Шевченко ©   (2004-12-08 10:57) [12]

GuAV ©   (08.12.04 01:10) [9]
Piter ©   (08.12.04 01:14) [10]

unit CheckDll;

interface

function IsNtDllHooked: Boolean;

implementation
uses
 Windows, SysUtils, NtDll;

type
 ZString = array[0..1023] of char;

{$IFDEF VER140}
{$WARN SYMBOL_PLATFORM OFF}
{$ENDIF}
function IsNtDllHooked: Boolean;
const
 SDllPath = "%SystemRoot%\system32\ntdll.dll";
var
 DllPath: ZString;
 HFile, HMap: THandle;
 Map: Pointer;
 Headers: PImageNtHeaders;
 QSysInfo: Pointer;
begin
 Result := false;
 Win32Check(
   ExpandEnvironmentStringsA(SDllPath, DllPath, SizeOf(DllPath)) <> 0);
 HFile := CreateFileA(DllPath, GENERIC_READ, FILE_SHARE_READ, nil,
   OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, INVALID_HANDLE_VALUE);
 Win32Check(HFile <> INVALID_HANDLE_VALUE);
 try
   HMap := CreateFileMappingA(HFile, nil, PAGE_READONLY, 0, 0, nil);
   Win32Check(HMap <> 0);
   try
     Map := MapViewOfFile(HMap, FILE_MAP_READ, 0, 0, 0);
     Win32Check(Assigned(Map));
     try
       Headers := RtlImageNtHeader(HMODULE(Map));
       if Assigned(Headers) then
         Result :=
           Headers.OptionalHeader.ImageBase <> GetModuleHandle("ntdll.dll");
         if not Result then begin
           QSysInfo := GetProcAddress(GetModuleHandle("ntdll.dll"),
             "NtQuerySystemInformation");
           if Assigned(QSysInfo) then
             Result := (Cardinal(QSysInfo) <=
               Headers.OptionalHeader.ImageBase) or (Cardinal(QSysInfo) >
               Headers.OptionalHeader.ImageBase +
               Headers.OptionalHeader.SizeOfCode)
           else
             Result := true;
         end;
     finally
       UnmapViewOfFile(Map);
     end;
   finally
     CloseHandle(HMap);
   end;
 finally
   CloseHandle(HFile);
 end;
end;

end.


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

С уважением,


 
GuAV ©   (2004-12-08 13:14) [13]

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


 
GuAV ©   (2004-12-08 13:18) [14]

То есть нет, я понял. Для таких Dll ImageBase в Dll должен обязательно совпадать с реальным.


 
Игорь Шевченко ©   (2004-12-08 13:53) [15]

GuAV ©   (08.12.04 13:18) [14]


> Для таких Dll ImageBase в Dll должен обязательно совпадать
> с реальным


Да, как минимум для kernel32.dll и для ntdll.dll

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

Кроме того, список процессов можно получить не только по коду 5 (SystemProcessesAndThreadsInformation) при вызове NtQuerySystemInformation но и еще по ряду вызовов.

С уважением,


 
Xaker_no_pass   (2004-12-08 15:51) [16]

по сабжу, на
xaker_delphi_sys@mail.ru
кинь то, что нашёл !
//я коллекционирую эти методы ;)  
- также  как и Игорь Шевченко ;)


 
programania ©   (2004-12-08 20:56) [17]

>Игорь Шевченко
>В самих процессах все равно не спрячешь.
В этой помойке можно спрятать что угодно
обозвав ее например SERVICE.EXE
а чтоб не убили заменить настоящий SERVICEs.EXE
на свой который запустит настояший под другим именем.


 
Игорь Шевченко ©   (2004-12-08 22:34) [18]

programania ©   (08.12.04 20:56) [17]

Жаба хитра, но маленький хрущ с винтом много хитрее ее.
(с)

Такие вещи тоже просто отловить. Тем же Process Explorer или программно.


 
VMcL ©   (2004-12-09 12:53) [19]

>>programania ©  (08.12.04 20:56) [17]

>В этой помойке можно спрятать что угодно обозвав ее например SERVICE.EXE

FAR и другие аналогичные утилиты клали на такие приёмы с высокой колокольни. В общем см. [18].


 
kaZaNoVa ©   (2005-01-05 23:46) [20]

Игорь Шевченко ©   (08.12.04 10:57) [12]

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

а по какому адресу она загружается?


 
GuAV ©   (2005-01-05 23:48) [21]

2 kaZaNoVa ©  
cм. Игорь Шевченко ©   (08.12.04 10:57) [12]

>  Headers.OptionalHeader.ImageBase



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

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

Наверх




Память: 0.52 MB
Время: 0.037 c
9-1100536487
Kobik
2004-11-15 19:34
2005.02.20
Диздок


4-1105108052
!
2005-01-07 17:27
2005.02.20
ListBox


1-1107790807
Алекс
2005-02-07 18:40
2005.02.20
Как программно нарисовать стрелку?


1-1107345014
_student
2005-02-02 14:50
2005.02.20
Уважаемы мастера. Подскажите как получить пусть к папке...


1-1107844307
Gost
2005-02-08 09:31
2005.02.20
Как "просканировать" каталог на наличие в нем определ. файлов?