Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.037 c
14-1106797450
Думкин
2005-01-27 06:44
2005.02.20
С днем рождения! 27 января


9-1099337514
Colt1978
2004-11-01 22:31
2005.02.20
Задание пути объекту.... (GLScene)


11-1092132408
DmiSb
2004-08-10 14:06
2005.02.20
LoginDialog ?


1-1107518010
snake_r
2005-02-04 14:53
2005.02.20
неактивность пользователя


3-1106265319
ataker
2005-01-21 02:55
2005.02.20
Програмное создание поля Field в базе данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский