Текущий архив: 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.5 MB
Время: 0.038 c