![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как спрятать запущенную программу? [D6, Win95/98, Win2k, WinXP]
z_man © (2004-12-07 22:11:00)Как спрятать запущенную программу в панели задач, сис-трее и в самих процессах системы в Windows98/2000/XP?
GuAV (2005-01-05 23:48:00) [1]2 kaZaNoVa ©
cм. Игорь Шевченко © (08.12.04 10:57) [12]
> Headers.OptionalHeader.ImageBase
kaZaNoVa (2005-01-05 23:46:00) [2]Игорь Шевченко © (08.12.04 10:57) [12]
> тинный адрес можно получить анализом таблицы экспорта
> файла на диске, зная, что NTDLL.DLL всегда загружается
> по одному и тому же базовому адресу.
а по какому адресу она загружается?
VMcL (2004-12-09 12:53:00) [3]>> programania © (08.12.04 20:56) [17]
> В этой помойке можно спрятать что угодно обозвав ее например SERVICE.EXE
FAR и другие аналогичные утилиты клали на такие приёмы с высокой колокольни. В общем см. [18].
Игорь Шевченко (2004-12-08 22:34:00) [4]programania © (08.12.04 20:56) [17]
Жаба хитра, но маленький хрущ с винтом много хитрее ее.
(с)
Такие вещи тоже просто отловить. Тем же Process Explorer или программно.
programania (2004-12-08 20:56:00) [5]>Игорь Шевченко
>В самих процессах все равно не спрячешь.
В этой помойке можно спрятать что угодно
обозвав ее например SERVICE.EXE
а чтоб не убили заменить настоящий SERVICEs.EXE
на свой который запустит настояший под другим именем.
Xaker_no_pass (2004-12-08 15:51:00) [6]по сабжу, на
xaker_delphi_sys@mail.ru
кинь то, что нашёл !
//я коллекционирую эти методы ;)
- также как и Игорь Шевченко ;)
Игорь Шевченко (2004-12-08 13:53:00) [7]GuAV © (08.12.04 13:18) [14]
> Для таких Dll ImageBase в Dll должен обязательно совпадать
> с реальным
Да, как минимум для kernel32.dll и для ntdll.dll
Впрочем, даже если допустить перемещение DLL, то можно проанализировать, в каком диапазоне адресов находится адрес процедуры и для совсем уж паранойи сравнить первые байты в образе на диске и в памяти.
Кроме того, список процессов можно получить не только по коду 5 (SystemProcessesAndThreadsInformation) при вызове NtQuerySystemInformation но и еще по ряду вызовов.
С уважением,
GuAV (2004-12-08 13:18:00) [8]То есть нет, я понял. Для таких Dll ImageBase в Dll должен обязательно совпадать с реальным.
GuAV (2004-12-08 13:14:00) [9]Спасибо за пример. Никогда бы не подумал, что указатель на файл спроецированный в память должен указывать на уже загруженную Dll.
Игорь Шевченко (2004-12-08 10:57:00) [10]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 всегда загружается по одному и тому же базовому адресу.
С уважением,
Piter (2004-12-08 01:15:00) [11]GuAV © (08.12.04 1:10) [9]
но всё равно как тогда получить правильный адрес NtQuerySystemInformation ?
можно грузить библиотеку, и в DLLMain можно определить истинный адрес WinApi функций...
Piter (2004-12-08 01:14:00) [12]Игорь Шевченко © (08.12.04 0:36) [8]
для замены статической линковки на динамическую и небольшую проверку
а можно поподробнее об этой небольшой проверке?
Я так подозреваю, что вы про то, что DLLMain будет исполняться ДО того, как троянец сможет перезаписать таблицы импорта... Но ведь есть и альтернативные способы загрузки библиотек (без вызова LoadLibrary)
GuAV (2004-12-08 01:10:00) [13]Ну если проверять что по адресу GetProcAdress... но всё равно как тогда получить правильный адрес NtQuerySystemInformation ?
Игорь Шевченко (2004-12-08 00:36:00) [14]GuAV © (08.12.04 00:28) [7]
Ты будешь удивлен, но исходники для этого не требуются. Во-первых алгоритм работы стандартного Task Manager довольно прозрачен, так что написать его, предварительно порывшись по сети, довольно несложная задача. Во-вторых, несколько строчек (это уже к MS, разумеется) для замены статической линковки на динамическую и небольшую проверку.
С уважением,
GuAV (2004-12-08 00:28:00) [15]Игорь Шевченко © (08.12.04 0:22) [6]
добавив в код стандартного Task Manager-а всего
Это как ? Microsoft предоставляет исходники ? или по хакерски - чезер дизассемблер и ассемблер ?? :-)
Игорь Шевченко (2004-12-08 00:22:00) [16]И ведь что интересно - добавив в код стандартного Task Manager-а всего несколько строчек можно очень легко избавиться от примитивных любителей "скырть процесс", а если строчек будет чуть больше, то без драйвера-фильтра обмануть Task Manager будет невозможно в принципе.
Игорь Шевченко (2004-12-08 00:14:00) [17]В самих процессах все равно не спрячешь.
z_man (2004-12-07 22:57:00) [18]Anatoly Podgoretsky
Piter
Да я уже нашел. Все равно спасибо за подсказку ...
Piter (2004-12-07 22:49:00) [19]Тебе на сайт троянописателей, а не сюда
z_man (2004-12-07 22:26:00) [20]Anatoly Podgoretsky
Любопытно узнать, а в каких интересах "не скажем"???