как изменить данные о родительском процессе?

Тема в разделе "WASM.WIN32", создана пользователем Flasher, 18 апр 2008.

  1. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Для начала в собственном теле..
    Думал в TEB'e что интересное найду, но увы...
    Или может плохо искал?
    Глобальный хук ZwQuerySystemInformation единственный вариант?
    В утилите procx у explorer'a и у еще одного процесса нет матери и отца :)
    Хочется узнать они от святого духа родились или подлые преступники, и убили своих родителей :))

    вот скрин:
     
  2. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    родитель explorer'a - userinit,завершается вскоре после входа пользователя в систему. рекомендую почитать литературу по внутреннему устройству системы. руссиновичанапример.
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    typedef struct _OBJECT_HEADER_CREATOR_INFO {
    LIST_ENTRY TypeList;
    HANDLE CreatorUniqueProcess; <----------------
    USHORT CreatorBackTraceIndex;
    USHORT Reserved;
    } OBJECT_HEADER_CREATOR_INFO, *POBJECT_HEADER_CREATOR_INFO;

    typedef struct _OBJECT_HEADER {
    LONG_PTR PointerCount;
    union {
    LONG_PTR HandleCount;
    PVOID NextToFree;
    };
    POBJECT_TYPE Type;
    UCHAR NameInfoOffset;
    UCHAR HandleInfoOffset;
    UCHAR QuotaInfoOffset;
    UCHAR Flags;

    union {
    POBJECT_CREATE_INFORMATION ObjectCreateInfo;
    PVOID QuotaBlockCharged;
    };

    PSECURITY_DESCRIPTOR SecurityDescriptor;
    QUAD Body;
    } OBJECT_HEADER, *POBJECT_HEADER;
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    нуну. изменяйте заголовки объектов. В EPROCESS есть поле InheritedFromUniqueProcessId, скорее всего отсюда и берет значение NtQuerySystemInformation.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Наскока помню, не из EPROCESS.InheritedFromUniqueProcessId
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Windows XP SP2.

    NtQuerySysInfo -> ExpGetProcessInfo -> ExpCopyProcessInfo()

    edi - EPROCESS
    esi - PSYSTEM_PROCESS_INFORMATION

    FIELD_OFFSET(EPROCESS_wxp, InheritedFromUniqueProcessId) == 14Ch

    Код (Text):
    1. PAGE:004B2D69                 mov     eax, [edi+14Ch]
    2. PAGE:004B2D6F                 mov     [esi+48h], eax
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Для начало следует сказать что InheritedFromUniqueProcessId не является идентификатором процесса, создавшего обьект(процесс), а чемто другим, уже не помню, давно с этим сталкивался.
    Для UserMode без доступа к ядерной памяти это единственный способ узнать ID процесса, создавшего обьект(именно создавшего, а не владеющего или ещё чтото).
    NtQuerySystemInformation(InfoClass=SystemObjectInformation)
    NtQuerySystemInformation:
    case SystemObjectInformation:
    if (SystemInformationLength < sizeof( SYSTEM_OBJECTTYPE_INFORMATION )) {
    return STATUS_INFO_LENGTH_MISMATCH;
    }
    Status = ExpGetObjectInformation( SystemInformation,
    SystemInformationLength,
    &Length
    );
    --------------------------------------------------------------------------------------
    ExpGetObjectInformation()->ObGetObjectInformation()
    ObGetObjectInformation:
    ObjectInfo->NextEntryOffset = 0;
    ObjectInfo->Object = Object;
    ObjectInfo->CreatorUniqueProcess = CreatorInfo->CreatorUniqueProcess;
    Три раза редактировал, пока нормально написал..
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    CreateProcessA -> CreateProcessInternalA -> CreateProcessInternalW -> NtCreateProcessEx -> PspCreateProcess

    esi - parent EPROCESS
    ebx - new EPROCESS

    FIELD_OFFSET(EPROCESS_wxp, UniqueProcessId) == 84h

    Код (Text):
    1. PAGE:004B3707                 cmp     edi, esi
    2. PAGE:004B3709                 jz      have_not_parent
    3. PAGE:004B370F                 mov     eax, [edi+1A8h]
    4. PAGE:004B3715                 mov     [ebx+1A8h], eax
    5. PAGE:004B371B                 mov     eax, [edi+84h]
    6. PAGE:004B3721                 mov     [ebx+14Ch], eax
    может уже хватит высказывать ничем не обоснованные суждения?
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Да, я не буду спорить.
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    n0name
    Прав и ты и я. Просто инфоклассы разные.