Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

NtCreateProcessEx какие параметры и их тип?


wp2 ©   (2006-09-24 22:41:00) 

Нужны параметры для этой функции.

А также как можно узнать по параметрам какая программа вызвала эту функцию.


wp2   (2006-09-25 21:24:00) [1]

Спросить просто так что ли нельзя? ;-)

А на С++ программы я могу написать, только не очень сложные...


wp2   (2006-09-25 21:23:00) [2]

Да не пишу я никакого драйвера!!!


Ketmar   (2006-09-25 00:16:00) [3]

>[13] Орион(c) 25-Sep-2006, 00:12
подозреваю, что нуб. но, вроде бы, вполне адекватный. %-)


Орион   (2006-09-25 00:12:00) [4]

> [11] Ketmar ©   (25.09.06 00:09)

Мне лень в МСДН лезть, тем более оффлайн версии нет :)
Вроде как автору все наводки дали. Если автор не нуб, ему достаточно этой информации. Если нуб - мы не увидим очередного мега-супер руткита с AV при загрузке %)


Ketmar   (2006-09-25 00:09:00) [5]

>[9] Орион(c) 25-Sep-2006, 00:07
>А параметр IN HANDLE ParentProcess всегда отличен
>от нуля?
>Если да - проблема решена.
я сильно подозреваю, что он может быть вовсе не хэндлом процесса, вызвавшего эту функцию. иначе зачем бы его передавать?


Орион   (2006-09-25 00:09:00) [6]

ЗЫ функцию надо подредактировать будет, т.к. HANDLE ParentProcess - уже дескриптор процесса, а не ид.


Орион   (2006-09-25 00:07:00) [7]

Нате))
Нашел в загашниках:

TProcessBasicInformation = record
   ExitStatus: Integer;
   PebBaseAddress: Pointer;
   AffinityMask: Integer;
   BasePriority: Integer;
   UniqueProcessID: Integer;
   InheritedFromUniqueProcessID: Integer;
 end;

function GetPathFromId(Id: DWord): string;
var
ProcessHandle: THandle;
ProcInfo: TProcessBasicInformation;
BytesRead: DWord;
Usr, Buf: DWord;
Len: Word;
Buffer: PWideChar;
begin
Result:='';
ZeroMemory(@ProcInfo, SizeOf(TProcessBasicInformation));
if GetProcessHandle(Id, ProcessHandle, PROCESS_QUERY_INFORMATION or PROCESS_VM_READ) then
begin
 if NT_SUCCESS(NtQueryInformationProcess(ProcessHandle, ProcessBasicInformation, @ProcInfo, SizeOf(TProcessBasicInformation), nil)) then
 begin
  ReadProcessMemory(ProcessHandle, Pointer(DWord(ProcInfo.PebBaseAddress)+$10), @Usr, 4, BytesRead);
  ReadProcessMemory(ProcessHandle, Pointer(Usr+$38), @Len, 2, BytesRead);
  GetMem(Buffer, Len);
  try
   ReadProcessMemory(ProcessHandle, Pointer(Usr+$3C), @Buf, 4, BytesRead);
   ReadProcessMemory(ProcessHandle, Pointer(Buf), Buffer, Len, BytesRead);
   Result:=WideCharToString(Buffer);
  finally
   FreeMem(Buffer);
  end;
  SetLength(Result, Len div 2);
 end;
 NtClose(ProcessHandle);
end;
end;


А параметр IN HANDLE ParentProcess всегда отличен от нуля?
Если да - проблема решена.


Ketmar   (2006-09-25 00:07:00) [8]

>[7] Орион(c) 25-Sep-2006, 00:02
>Хотя если у него возник такой вопрос, то
>драйвером тут и не пахнет.
а с чего это? теперь-то понятно, что не драйвер -- автор с сями не дружит. а до этого... я тоже пытался KiST-перехват делать. и драйвер пытался ваять. а параметров этой функции не знаю, потому что в моей Win2K её нет. %-)


Ketmar   (2006-09-25 00:06:00) [9]

>[1] Ketmar(c) 24-Sep-2006, 22:53
function NtCreateProcessEx (
 out ProcessHandle: THandle;
 DesiredAccess: ACCESS_MASK;
 ObjectAttributes: POBJECT_ATTRIBUTES;
 ParentProcess: THandle;
 InheritObjectTable: LongBool;
 SectionHandle: THandle;
 DebugPort: THandle;
 ExceptionPort: THandle;
 Unknown: THandle): DWORD; stdcall;

что-то вроде такого. на остальные вопросы ответит MSDN и гугль, потому как структуры документированы.


wp2   (2006-09-25 00:02:00) [10]

Ketmar
А можно по Паскалевски :-)

С объяснением что такое, например, POBJECT_ATTRIBUTES


Орион   (2006-09-25 00:02:00) [11]

> [5] Ketmar ©   (24.09.06 23:58)

Тогда автора ждем :)
Хотя если у него возник такой вопрос, то драйвером тут и не пахнет.
Воть...)


Ketmar   (2006-09-24 23:58:00) [12]

>[4] Орион(c) 24-Sep-2006, 23:56
>Ааа. Дык зачем тогда по параметрам узнавать? В
>кого внедрены - тот и вызвал :)
а вдруг это KiST-перехват? драйвер -- он везде один. %-)


Орион   (2006-09-24 23:56:00) [13]

> [3] Ketmar ©   (24.09.06 23:55)


Ааа. Дык зачем тогда по параметрам узнавать? В кого внедрены - тот и вызвал :)


Ketmar   (2006-09-24 23:55:00) [14]

>[2] Орион(c) 24-Sep-2006, 23:42
>Перехватом?
>Но это уже не по параметрам и очень скользкая
>тема.
а тут и делается, имо, перехват. иначе зачем бы эту функцию применять? особенно учитывая, что в Win2K, например, её нет. %-)


Орион   (2006-09-24 23:42:00) [15]

> А также как можно узнать по параметрам какая программа вызвала
> эту функцию.


Перехватом?
Но это уже не по параметрам и очень скользкая тема.


Ketmar   (2006-09-24 22:53:00) [16]

DWORD __stdcall HOOK_NtCreateProcessEx(
 OUT PHANDLE ProcessHandle,
 IN ACCESS_MASK DesiredAccess,
 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
 IN HANDLE ParentProcess,
 IN BOOLEAN InheritObjectTable,
 IN HANDLE SectionHandle OPTIONAL,
 IN HANDLE DebugPort OPTIONAL,
 IN HANDLE ExceptionPort OPTIONAL,
 IN HANDLE Unknown)


>[0] wp2(c) 24-Sep-2006, 22:41
>А также как можно узнать по параметрам какая
>программа вызвала эту функцию.
"по параметрам" -- никак.


Наверх

Титульная страница Поиск, карта сайта Написать письмо