Перечисление процессов, не используя ZwQuerySystemInformation

Тема в разделе "WASM.WIN32", создана пользователем MaDF, 21 мар 2006.

  1. MaDF

    MaDF New Member

    Публикаций:
    0
    Регистрация:
    10 май 2005
    Сообщения:
    83
    Я пытаюсь вывести список процессов в системе, не прибегая к помощи функции ZwQuerySystemInformation,

    оперируя напрямую с объектами ядра, вот что я делаю (комменты краткие, но, думаю, понятно):


    Код (Text):
    1.  
    2.     mov edi, fs:[124h]      ; EDI -> KTHREAD CurrentThread
    3.     mov edi, [edi+44h]      ; EDI == EPROCESS* Process
    4.     add edi, 0A0h       ; EDI -> LIST_ENTRY ActiveProcessLinks (in EPROCESS)
    5.  
    6.     mov esi, edi        ; ESI -> LIST_ENTRY ActiveProcessLinks
    7.    
    8. @loop: 
    9.     mov eax, [esi+110h]     ; EAX -> PEB
    10.     mov eax, [eax+10h]      ; EAX -> PROCESS_PARAMETERS ProcessParameters
    11.     mov eax, [eax+(38h+4)]  ; EAX == PWSTR
    12.  
    13.     invoke  DbgPrint, $CTA0("%ws"), eax
    14.  
    15.     mov esi, [esi]
    16.     cmp esi, edi
    17.     jnz @loop
    18.  




    так вот это не совсем работает :) если убрать кусок кода, отвечающий за переход на другую

    структуру LIST_ENTRY:


    Код (Text):
    1.  
    2.     mov esi, [esi]
    3.     cmp esi, edi
    4.     jnz @loop
    5.  




    то выводится один полный путь к ехе, который вызвал DeviceIoControl. А в остальном - бсод :dntknw:

    По идее должен быть связанный список, позволяющий "пройтись" по всем процессам в системе, ан нет,

    или у меня руки кривые или хз %) Тестирую на Win2k.
     
  2. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    статьи ms-rem'а почитай внимательно. Всё написано.
     
  3. MaDF

    MaDF New Member

    Публикаций:
    0
    Регистрация:
    10 май 2005
    Сообщения:
    83
    CARDINAL, ты наверное их сам не читал ;) там такого нет...

    вобщем, попробовал вывести список PID'ов, получилось, но всегда почему-то выводятся два вообще левых %) не пойму в чем дело
     
  4. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    PEB находиться в юзермодном АП, а следовательно перед чтением данных оттуда необходимо делать KeAttachProcess.







    Не забывай, что есть голова списка (ActiveProcessesListHead) которая не является процессом. Отличить ее от процесса можно по признаку попадания в диапазон адресов занятых ntoskrnl.
     
  5. MaDF

    MaDF New Member

    Публикаций:
    0
    Регистрация:
    10 май 2005
    Сообщения:
    83
    Понятно, значит чтобы получить доступ к PEB опр. процесса, нужно переключиться на него, вытянуть инфу, ну а потом назад? А `голова` списка имеет другой формат, не EPROCESS? Вообще теперь начал перечислять процессы, не через fs:[124h] и т.д., а используя PsInitialSystemProcess - вроде без казусов.
     
  6. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
  7. MaDF

    MaDF New Member

    Публикаций:
    0
    Регистрация:
    10 май 2005
    Сообщения:
    83
    CARDINAL точно блин :) это я плохо читал ;))