SYSTEM_PROCESS_INFORMATION и ZwQuerySystemInformation

Тема в разделе "WASM.ASSEMBLER", создана пользователем MrMiXeR, 11 авг 2009.

  1. MrMiXeR

    MrMiXeR New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2008
    Сообщения:
    97
    Ребят, полинета облазин в поисках данной структуры, для сишного кода дофига где чего написано только они почему-то не соответствуют данным которые возвращает в буффер ZwQuerySystemInformation помогите найти описание даной структуры под MASM
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    MrMiXeR
    Тут на форуме есть поиск, в гугле тоже, или за тебя поискать..
     
  3. MrMiXeR

    MrMiXeR New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2008
    Сообщения:
    97
    http://www.wasm.ru/article.php?article=packers2 (Си)
    http://www.wasm.ru/forum/viewtopic.php?id=21648 (64 бита)

    Вот это все что я нашёл по васму. Раз уж ты такая сверхпродвинутая ищейка наставь на путь истинный, ткни носом, где же тут можно воочию увидеть её 32-битную версию под масм ? Или как флудопосты штамповать так первый ?
     
  4. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    1)symchk + pdbdump
    2)либо Symbol Type Viewer (у меня к примеру бывает symchk не работает почему-то)
    3)получаешь c-хидер из pdb
    и перегоняешь в asm

    ps. лучше конечно поправить pdbdump для получния inc файлов(возможно кто-то это уже сделал), чтобы напрягаться лишний раз
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    MrMiXeR
    Возможно, у Вас были проблемы с поиском, т.к. на самом деле эта структура обычно называется SYSTEM_PROCESSES:
    http://www.wasm.ru/forum/viewtopic.php?pid=115110#p115110
     
  6. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    MrMiXeR
    а у Неббета нет?
     
  7. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    wsd
    Да при чем тут неббет, полный бред переписывать структуры из книжки, если все можно автоматизировать.
     
  8. Clerk

    Clerk Забанен

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

    MrMiXeR New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2008
    Сообщения:
    97
    [​IMG]

    Да что-то мне так не кажется
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    MrMiXeR
    Да что Вы говорите? Неужели не кажется?
    Во-первых, неизвестно откуда выдранный дамп с какими-то невтемными (или по меньшей мере недостаточными) пояснениями вообще ни о чём не говорит.
    Во-вторых, единственная информация, по которой можно определить, что же Вам нужно - это "SYSTEM_PROCESS_INFORMATION", которая, как я указал, на самом деле называется SYSTEM_PROCESSES. Поэтому стоило хотя бы упомянуть, что Вы передаёте первым параметром в ZwQuerySystemInformation.
    Лирическое отступление. Небо у меня сейчас облачное, поэтому ничего не остаётся, как вскрывать запас кофейной гущи. Исходим из того, что первым параметром передаётся пятёрка (SystemProcessesAndThreadsInformation), а в приведенном дампе структура начинается с адреса 164BE8h (что на самом деле не особо соответствует дампу).
    В-третьих, если Вы не обратили внимание, структура типа UNICODE_STRING имеет точь-в-точь то же смещение в структуре по приведенной Вами же ссылке (в третьем посте), что и в структуре SYSTEM_PROCESSES. Так что если Вы не откопали нужную букаву по нужному адресу, то ищете явно не то, о чём спрашиваете.
    В-четвёртых, прибавьте NextEntryDelta, чтобы получить адрес следующей структуры. Тогда адрес 164D58h попадёт как раз по смещению структуры типа UNICODE_STRING. Так что не представляю, после какой травы Вам там чего-то "не кажется".
    Ну и в-пятых, совсем не надо быть "сверхпродвинутой ищейкой", чтобы выяснить, что SYSTEM_PROCESS_INFORMATION - это и есть SYSTEM_PROCESSES. Соответственно +1 к Clerk.
     
  11. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    l_inc
    А таки почему 'SYSTEM_PROCESSES'? Определение SYSTEM_PROCESS_INFORMATION — есть, а SYSTEM_PROCESSES — нема.
    Код (Text):
    1. struct _SYSTEM_PROCESS_INFORMATION
    2. {
    3.   /*<thisrel this+0x0>*/ /*|0x4|*/ unsigned long NextEntryOffset;
    4.   /*<thisrel this+0x4>*/ /*|0x4|*/ unsigned long NumberOfThreads;
    5.   /*<thisrel this+0x8>*/ /*|0x8|*/ union _LARGE_INTEGER WorkingSetPrivateSize;
    6.   /*<thisrel this+0x10>*/ /*|0x8|*/ union _LARGE_INTEGER SpareLi2;
    7.   /*<thisrel this+0x18>*/ /*|0x8|*/ union _LARGE_INTEGER SpareLi3;
    8.   /*<thisrel this+0x20>*/ /*|0x8|*/ union _LARGE_INTEGER CreateTime;
    9.   /*<thisrel this+0x28>*/ /*|0x8|*/ union _LARGE_INTEGER UserTime;
    10.   /*<thisrel this+0x30>*/ /*|0x8|*/ union _LARGE_INTEGER KernelTime;
    11.   /*<thisrel this+0x38>*/ /*|0x8|*/ struct _UNICODE_STRING ImageName;
    12.   /*<thisrel this+0x40>*/ /*|0x4|*/ long BasePriority;
    13.   /*<thisrel this+0x44>*/ /*|0x4|*/ void* UniqueProcessId;
    14.   /*<thisrel this+0x48>*/ /*|0x4|*/ void* InheritedFromUniqueProcessId;
    15.   /*<thisrel this+0x4c>*/ /*|0x4|*/ unsigned long HandleCount;
    16.   /*<thisrel this+0x50>*/ /*|0x4|*/ unsigned long SessionId;
    17.   /*<thisrel this+0x54>*/ /*|0x4|*/ unsigned long UniqueProcessKey;
    18.   /*<thisrel this+0x58>*/ /*|0x4|*/ unsigned long PeakVirtualSize;
    19.   /*<thisrel this+0x5c>*/ /*|0x4|*/ unsigned long VirtualSize;
    20.   /*<thisrel this+0x60>*/ /*|0x4|*/ unsigned long PageFaultCount;
    21.   /*<thisrel this+0x64>*/ /*|0x4|*/ unsigned long PeakWorkingSetSize;
    22.   /*<thisrel this+0x68>*/ /*|0x4|*/ unsigned long WorkingSetSize;
    23.   /*<thisrel this+0x6c>*/ /*|0x4|*/ unsigned long QuotaPeakPagedPoolUsage;
    24.   /*<thisrel this+0x70>*/ /*|0x4|*/ unsigned long QuotaPagedPoolUsage;
    25.   /*<thisrel this+0x74>*/ /*|0x4|*/ unsigned long QuotaPeakNonPagedPoolUsage;
    26.   /*<thisrel this+0x78>*/ /*|0x4|*/ unsigned long QuotaNonPagedPoolUsage;
    27.   /*<thisrel this+0x7c>*/ /*|0x4|*/ unsigned long PagefileUsage;
    28.   /*<thisrel this+0x80>*/ /*|0x4|*/ unsigned long PeakPagefileUsage;
    29.   /*<thisrel this+0x84>*/ /*|0x4|*/ unsigned long PrivatePageCount;
    30.   /*<thisrel this+0x88>*/ /*|0x8|*/ union _LARGE_INTEGER ReadOperationCount;
    31.   /*<thisrel this+0x90>*/ /*|0x8|*/ union _LARGE_INTEGER WriteOperationCount;
    32.   /*<thisrel this+0x98>*/ /*|0x8|*/ union _LARGE_INTEGER OtherOperationCount;
    33.   /*<thisrel this+0xa0>*/ /*|0x8|*/ union _LARGE_INTEGER ReadTransferCount;
    34.   /*<thisrel this+0xa8>*/ /*|0x8|*/ union _LARGE_INTEGER WriteTransferCount;
    35.   /*<thisrel this+0xb0>*/ /*|0x8|*/ union _LARGE_INTEGER OtherTransferCount;
    36. };
    37. // <size 0xb8>
     
  12. MrMiXeR

    MrMiXeR New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2008
    Сообщения:
    97
    Все там правильно. Дамп начинается именно с того адреса передается SystemProcessesAndThreadsInformation


    CLIENT_ID STRUCT
    UniqueProcess dd ?
    UniqueThread dd ?
    CLIENT_ID ENDS

    SYSTEM_THREADS struct
    KernelTime LARGE_INTEGER <>
    UserTime LARGE_INTEGER <>
    CreateTime LARGE_INTEGER <>
    WaitTime dd ?
    StartAddress dd ?
    ClientId CLIENT_ID <>
    Priority SDWORD ?
    BasePriority SDWORD ?
    ContextSwitchCount dd ?
    State dd ?
    WaitReason dd ?
    SYSTEM_THREADS ends

    UNICODE_STRING STRUCT
    Len WORD ?
    MaximumLength WORD ?
    Buffer PWSTR ?
    UNICODE_STRING ends

    VM_COUNTERS STRUCT
    PeakVirtualSize DWORD ? ; SIZE_T
    VirtualSize DWORD ? ; SIZE_T
    PageFaultCount DWORD ?
    PeakWorkingSetSize DWORD ? ; SIZE_T
    WorkingSetSize DWORD ? ; SIZE_T
    QuotaPeakPagedPoolUsage DWORD ? ; SIZE_T
    QuotaPagedPoolUsage DWORD ? ; SIZE_T
    QuotaPeakNonPagedPoolUsage DWORD ? ; SIZE_T
    QuotaNonPagedPoolUsage DWORD ? ; SIZE_T
    PagefileUsage DWORD ? ; SIZE_T
    PeakPagefileUsage DWORD ? ; SIZE_T
    VM_COUNTERS ENDS

    SYSTEM_PROCESS_INFORMATION struct
    NextEntryDelta dd ?
    ThreadCount dd ?
    Reserved1 dd 6 dup (?)
    CreateTime LARGE_INTEGER <>
    UserTime LARGE_INTEGER <>
    KernelTime LARGE_INTEGER <>
    ProcessName UNICODE_STRING <>
    BasePriority SDWORD ?
    ProcessId dd ?
    InheritedFromProcessId dd ?
    HandleCount dd ?
    Reserved2 dd 2 dup (?)
    VmCounters VM_COUNTERS <>
    ;IO_COUNTERS IoCounters; // Windows 2000 only
    Threads SYSTEM_THREADS <>
    SYSTEM_PROCESS_INFORMATION ends


    Исходя из этого смещение UNICODE_STRING равно sizeof NextEntryDelta + sizeof ThreadCount + sizeof Reserved1 + sizeof CreateTime + sizeof CreateTime + sizeof UserTime + sizeof KernelTime = dword + dword + 6*dword + 3*qword = 4 + 4 + 24 + 24 = 56 = 38h ! Как и показано на рисунке. НО ! В реалии UNICODE_STRING имеет смещение 164D58 - 164BE8 = 170h. Так как в самом начале переданных данных (первый dword), NextEntryDelta = 138h и это меньше 170h можно предположить что эта UNICODE_STRING находится уже в следующей EntryDelta и если мы вычтем из 170h 138h то получим 38h как и положено для смещения UNICODE_STRING в структуре SYSTEM_PROCESS_INFORMATION. То есть мы получается пришли к тому что это уже вторая структура UNICODE_STRING, как раз возможно из-за поэтому я это и проглядел, прийдя к выводу что эта структура имеет больший размер, но тогда сам собой напрашивается вопрос: Почему первая UNICODE_STRING пустая ??? Что это за данные и для чего они, ведь запращивается лишь информация о процессах, а она собой не несёт никакой информационной нагрузки (если я ошибаюсь поправьте)?
     
  13. MrMiXeR

    MrMiXeR New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2008
    Сообщения:
    97
     
  14. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    MrMiXeR, sizeof VM_COUNTERS = 60h
     
  15. MrMiXeR

    MrMiXeR New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2008
    Сообщения:
    97
    описание было взято здесь: http://www.wasm.ru/forum/viewtopic.php?pid=115110#p115110
     
  16. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    всё правильно, непонятно что вам непонятно
     
  17. MrMiXeR

    MrMiXeR New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2008
    Сообщения:
    97
    Почему первая структура без имени процесса (UNICODE_STRING пустая)
     
  18. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    System Idle Process ?
     
  19. MrMiXeR

    MrMiXeR New Member

    Публикаций:
    0
    Регистрация:
    27 июн 2008
    Сообщения:
    97
    Все. Теперь разобрался. Спасибо всем огромное за участие ! А вот ещё вопрос. А почему в этом списке нету текущего процесса? Так и должно быть или это мой комп уже клинит?
     
  20. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Sol_Ksacap
    А смысл одну и ту же структуру описывать дважды под разными именами? :) Почему Неббет решил назвать её именно SYSTEM_PROCESSES, не знаю. Надо у него спросить. Наверное, от него и пошло. Сам оттуда списывал и во всех инклудах под fasm она у меня как SYSTEM_PROCESSES описана.
    MrMiXeR
    Должен быть.