Текущий архив: 2006.07.16;
Скачать: CL | DM;
ВнизЗапуск приложения. Пользователь в неведении. Найти похожие ветки
← →
resuS (2006-06-28 23:17) [0]Прошу помочь. Нужно что-бы приложение автоматически запускалось при включении компьютера так, чтобы практически невозможно было определить, что оно запущено. Чтобы не было иконки в трее, в диспечере задач(приложения), в автозапуске ...
← →
Шпиён (2006-06-28 23:18) [1]А нафига?
← →
Fay © (2006-06-28 23:19) [2]Ку?
http://www.wasm.ru/article.php?article=hidingnt
← →
resuS (2006-06-28 23:30) [3]Спасибо Fay. Но это на XP сработает? я думаю нет.
А нету исходника. Я предпологаю, такое частенько реализовывается в backdoor"ах, но я не встречал ни одного бэкдура на Delphi(исходника).
Что-то у меня google не рулит.:)
← →
TUser © (2006-06-28 23:31) [4]Игорь Шевченко c (02.02.05 10:21)
Небольшой код, позволяющий определить, есть ли в системе потенциально вредоносный
процесс, скрывающий себя от Task Manager"а, Process Explorer"а и прочих просмотрщиков
списка процессов. В сочетании с включенным аудитом процессов поможет выявить поделки
доморощенных пакостников.
Проверено на Windows 2000 и Windows XP.
unit CheckNtDll;
interface
uses
Windows, HsNtDef;
function RealQueryListInformation (InfoClass: Integer; var rc: NTSTATUS;
var ReturnLength: DWORD): Pointer;
function IsNtDllHooked: Boolean;
implementation
uses
SysUtils, NtDll, PeImage, NtStatusDefs;
{$IFDEF VER140}
{$WARN SYMBOL_PLATFORM OFF}
{$ENDIF}
type
TSysCallData = array[0..13] of Byte;
TNtQuerySystemInformation = function (SystemInformationClass: LongInt;
SystemInformation: Pointer; SystemInformationLength: ULONG;
ReturnLength: PDWORD): NTSTATUS; stdcall;
var
FRealQuerySystemInformation: TNtQuerySystemInformation;
function RealQueryListInformation (InfoClass: Integer; var rc: NTSTATUS;
var ReturnLength: DWORD): Pointer;
var
ListSize: Integer;
begin
ListSize := $400; { Начальный размер буфера }
GetMem(Result, ListSize);
rc := FRealQuerySystemInformation(InfoClass, Result, ListSize, @ReturnLength);
while rc = STATUS_INFO_LENGTH_MISMATCH do begin
FreeMem(Result);
ListSize := ListSize * 2;
GetMem(Result, ListSize);
rc := FRealQuerySystemInformation(InfoClass, Result, ListSize,
@ReturnLength);
end;
if rc <> STATUS_SUCCESS then begin
FreeMem(Result);
Result := nil;
end;
end;
procedure MakeRealQS (const SysCallData: TSysCallData);
var
OldProtection: DWORD;
FuncPtr: Pointer;
begin
FuncPtr := VirtualAlloc(nil, $1000, MEM_COMMIT, PAGE_READWRITE);
Win32Check(Assigned(FuncPtr));
Move(SysCallData, FuncPtr^, SizeOf(SysCallData));
Win32Check(VirtualProtect(FuncPtr, SizeOf(SysCallData), PAGE_EXECUTE,
OldProtection));
@FRealQuerySystemInformation := FuncPtr;
end;
function IsNtDllCodeHooked (const FileName: string; ProcOffset: ULONG): Boolean;
var
Image: THSPeImage;
SysCall: TSysCallData;
SysCall2: TSysCallData;
QSPtr: Pointer;
begin
Image := THSPEImage.Create (FileName);
try
Move(Image.RVAData[ProcOffset]^, SysCall, SizeOf(SysCall));
finally
Image.Free;
end;
QSPtr := GetProcAddress(GetModuleHandle("ntdll.dll"),
"NtQuerySystemInformation");
Move(QSPtr^, SysCall2, SizeOf(SysCall2));
Result := not CompareMem(@SysCall, @SysCall2, SizeOf(SysCall));
if Result then
MakeRealQS (SysCall);
end;
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 begin
Result := (Cardinal(QSysInfo) <=
Headers.OptionalHeader.ImageBase) or (Cardinal(QSysInfo) >
Headers.OptionalHeader.ImageBase +
Headers.OptionalHeader.SizeOfCode);
if not Result then
Result := IsNtDllCodeHooked(DllPath, ULONG(QSysInfo) -
Headers.OptionalHeader.ImageBase);
end else
Result := true;
end;
finally
UnmapViewOfFile(Map);
end;
finally
CloseHandle(HMap);
end;
finally
CloseHandle(HFile);
end;
end;
initialization
finalization
if Assigned(FRealQuerySystemInformation) then
VirtualFree(@FRealQuerySystemInformation, $1000, MEM_DECOMMIT);
end.
Пример использования:
FQueryInformationFunction: TQueryListInformation;
.........
if IsNtDllHooked then begin
ShowMessage("NtDll is hooked!");
@FQueryInformationFunction := @RealQueryListInformation;
end else
@FQueryInformationFunction := @QueryListInformation;
.....
var
ProcessInfo: Pointer;
rc: NTSTATUS;
Dummy: ULONG;
begin
ProcessInfo := FQueryInformationFunction (
SystemProcessesAndThreadsInformation, rc, Dummy);
if NT_SUCCESS(rc) then
ShowProcessList (ProcessInfo)
else
RaiseNtError (rc);
.........
--------------------------------------------------------------------------------
...
--------------------------------------------------------------------------------
kaZaNoVa c (04.02.05 12:52) [49]
BiN c (04.02.05 11:51) [45]
> Но зато сабжевый код - отличный способ дать по рукам
> молодым кулхацкерам.
это точно .. терь половина их "разработок" станет бесполезна))
← →
resuS (2006-06-28 23:48) [5]да... разбили всех кулхацкеров в пух и прах. Но я, правда, художник, а это для учебы надо.
Мне все еще нужно приложение скрывающееся от ... всех.
Кто говорит, что мою прогу вообще надо будет определять. Она сама себя покажет. Это же НИР.
Пока реальная помощь от Fay
← →
Fay © (2006-06-28 23:54) [6]2 resuS (28.06.06 23:48) [5]
> Но я, правда, художник
Слаймер Нимдович?
← →
resuS (2006-06-29 00:09) [7]нет:)
Реках Ремал
← →
lobach © (2006-06-29 10:01) [8]
> resuS
А не легче в реестре в "Run" ключ накатать?
← →
Игорь Шевченко © (2006-06-29 10:27) [9]
> Но это на XP сработает?
Под XP сработает аудит запускаемых процессов и ремень по попе.
← →
resuS (2006-06-29 15:21) [10]Шевченко прав... :( уже попробовал на NT все отл, а вот на XP - как обычно...
← →
novill © (2006-06-29 15:27) [11]
> Игорь Шевченко © (29.06.06 10:27) [9]
>
> > Но это на XP сработает?
>
> Под XP сработает аудит запускаемых процессов и ремень по попе.
Подскажите ламеру, где на это посмотреть можно?
← →
novill © (2006-06-29 15:47) [12]Управление компьютером -> Служебные прогораммы->Просмотр событий... ?
← →
Игорь Шевченко © (2006-06-29 15:53) [13]
> Подскажите ламеру, где на это посмотреть можно?
В политике безопасности
Страницы: 1 вся ветка
Текущий архив: 2006.07.16;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.01 c