Как скрыть процесс

  • Автор темы MegaDiablo
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

MegaDiablo

Гость
#1
Как скрыть процесс после нажатия клавиш CRL+ALT+DEL(под Windows XP, 2000), но не используя библиотек( мне надо что бы приложение шло одним EXE файлом). Или подскажите как сделать приложение с библиотекой и всё запихнуть в одну EXE-ку причем запуск библиотеки должен происходить через external.
И как скрыть приложение из списка приложений.
 
Z

zubr

Гость
#2
Перехватом функции ZwQuerySystemInformation. Без библиотеки сложно - это надо делать снапшоты процессов в цикле и подзаражать таскменеджер или все процессы.
Запускай дллку из экзешника. Я где то на форуме выкладывал пример запуска экзешника из экзешника без сохранения его на диске, с дллкой тоже самое.
 
K

kostindima

Гость
#3
Перехватом функции ZwQuerySystemInformation. Без библиотеки сложно - это надо делать снапшоты процессов в цикле и подзаражать таскменеджер или все процессы.
Запускай дллку из экзешника. Я где то на форуме выкладывал пример запуска экзешника из экзешника без сохранения его на диске, с дллкой тоже самое.
Да нет вот так можно обойтись без либы:
Внедрение в процесс кода функции, связанных с ней данных и запуск потока.
Process - хэндл открытого процесса,
Thread - адрес процедуры потока в текущем контексте,
Info - адрес данных передаваемых потоку
InfoLen - размер данных передаваемых потоку
Results - необходимость возврата результата (возврат назад переданных данных)
}
function InjectThread(Process: dword; Thread: pointer; Info: pointer;
InfoLen: dword; Results: boolean): THandle;
var
pThread, pInfo: pointer;
BytesRead, TID: dword;
begin
pInfo := InjectMemory(Process, Info, InfoLen);
pThread := InjectMemory(Process, Thread, SizeOfProc(Thread));
Result := CreateRemoteThread(Process, nil, 0, pThread, pInfo, 0, TID);
if Results then
begin
WaitForSingleObject(Result, INFINITE);
ReadProcessMemory(Process, pInfo, Info, InfoLen, BytesRead);
end;
end;
 
Z

zubr

Гость
#4
kostindima
Ты прежде чем постить, хотя бы разберись в вопросе.
1. Что за функция InjectMemory - в MSDN такой нет? Ты по тупому где то увидел этот код и без понятия тут выложил (наверно на www.wasm.ru).
2. Код, что ты выложил, позволяет внедриться в какой то конкретный процесс, но чтобы скрыть свой процесс, надо внедряться во все процессы, которые могут найти твой процесс, таскменеджер только один из них. Поэтому, о чем, я писал во 2 посте, без библиотеки надо делать снапшоты процессов в цикле и подзаражать вновь открывающиеся процессы, имхо совсем некрасивое решение.
 
K

kostindima

Гость
#5
Просто у меня есть Pas'ы по етому вопросу...

(И я етим не пользовался за ненадобностью,я внедрял целый ексешник без Рантайма)
 
E

Elvis

Гость
#6
Читаю и просто стало интересно. Если можно ответьте на следующие вопросы.
1. Можно ли запустить процесс от имени другого процесса (например системного)?
2. Если да то можно ли отследить что или кто именно запустил процесс (какой именно ЕХЕ), ведь в начале до того как внедриться в процесс ,всёравно что-то должно запускаться и не возникнет каких либо конфликтов в системе?
 
K

kostindima

Гость
#7
Читаю и просто стало интересно. Если можно ответьте на следующие вопросы.
1. Можно ли запустить процесс от имени другого процесса (например системного)?
2. Если да то можно ли отследить что или кто именно запустил процесс (какой именно ЕХЕ), ведь в начале до того как внедриться в процесс ,всёравно что-то должно запускаться и не возникнет каких либо конфликтов в системе?
1Возможно внедрение в него потока
2возможно сделать,чтобы "левоый"CreateProcess слал какието данные другой проге,напривер через АПИ,конфликты могут возникнуть в некоторых случаях,например:Внедряймая либа с рантаймом.
 
Z

zubr

Гость
#8
Для: kostindima
Внедрение потока - это немного не то. Это запуск своего процесса или потока в адресном пространстве заражаемого процесса.
1. Можно ли запустить процесс от имени другого процесса (например системного)?
Можно запускать процесс из сервиса, он будет работать в 3-ем кольце, но на правах системного сервиса.
2. Если да то можно ли отследить что или кто именно запустил процесс (какой именно ЕХЕ), ведь в начале до того как внедриться в процесс ,всёравно что-то должно запускаться и не возникнет каких либо конфликтов в системе?
Для этого надо опять таки перехватывать функцию ZwQuerySystemInformation. У нее один из параметров - структура типа:
Код:
SYSTEM_PROCESSES = packed record
NextEntryDelta,
ThreadCount: dword;
Reserved1 : array [0..5] of dword;
CreateTime,
UserTime,
KernelTime: LARGE_INTEGER;
ProcessName: TUnicodeString;
BasePriority: dword;
ProcessId,
InheritedFromProcessId,
HandleCount: dword;
Reserved2: array [0..1] of dword;
VmCounters: VM_COUNTERS;
IoCounters: IO_COUNTERS; // Windows 2000 only
Threads: array [0..0] of SYSTEM_THREADS;
end;
Используя InheritedFromProcessId, можно определить процесс-родитель.
 
Статус
Закрыто для дальнейших ответов.