Поиск скрытых процессов. Списки планировщика. Windows 7.

Тема в разделе "WASM.NT.KERNEL", создана пользователем haxorart, 27 сен 2010.

  1. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Здравствуйте.
    Пишу антируткит на дипломный проект. Появилась необходимость поиска скрытых процессов. Один из способов должен быть поиск по спискам планировщика. Как это делать в XP 2000 хорошо описанно в статье MS-Rem'a, а вот про Vista & Win 7 инфы мало. Отсюда возникают вопросы:
    1)Какие списки существуют в Vista и Win 7?
    2)Как их проще всего найти?
    3)Где можно почитать про новые планировщики планировщики?
     
  2. deshiko

    deshiko New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    42
  3. dfrsa

    dfrsa New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2010
    Сообщения:
    88
    haxorart
    Реверс, как в свое время сделал это gl00my
    http://gl00my.chat.ru/ntkernel.html
     
  4. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    2deshiko
    Это первая книгу, которую я прочитал. Там информация изложена недостаточно подробно, многое автор умолчал.
    2dfrsa
    Спс, гляну.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    haxorart
    А что вы сделали для решения этой проблемы/задачи ?
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    указатель на head лежит в pcrb.
     
  7. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    2Clerk
    1)гугл + яндекс = стать мс-рема, ничего новее не находил.
    2)по своей библиотечке прошелся
    3)диззасемблировал ядро и пытался там найти ответ, но на данный момент просто не хватило навыка

    обнаружил как найти KiWaitInListHead, KiWaitOutListHead, KiDispatcherReadyListHead в Windows 2000 и KiWaitListHead и KiDispatcherReadyListHead в ХР, но ведь наверняка все там поменялось.
     
  8. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Хм, странно. PRCB для ХР
    Код (Text):
    1. typedef struct _KPRCB                                    // 91 elements, 0xC50 bytes (sizeof)
    2.           {
    3. /*0x000*/     UINT16       MinorVersion;
    4. /*0x002*/     UINT16       MajorVersion;
    5. /*0x004*/     struct _KTHREAD* CurrentThread;
    6. /*0x008*/     struct _KTHREAD* NextThread;
    7. /*0x00C*/     struct _KTHREAD* IdleThread;
    8. /*0x010*/     CHAR         Number;
    9. /*0x011*/     CHAR         Reserved;
    10. /*0x012*/     UINT16       BuildType;
    11. /*0x014*/     ULONG32      SetMember;
    12. /*0x018*/     CHAR         CpuType;
    13. /*0x019*/     CHAR         CpuID;
    14. /*0x01A*/     UINT16       CpuStep;
    15. /*0x01C*/     struct _KPROCESSOR_STATE ProcessorState;             // 2 elements, 0x320 bytes (sizeof)
    16. /*0x33C*/     ULONG32      KernelReserved[16];
    17. /*0x37C*/     ULONG32      HalReserved[16];
    18. /*0x3BC*/     UINT8        PrcbPad0[92];
    19. /*0x418*/     struct _KSPIN_LOCK_QUEUE LockQueue[16];
    20. /*0x498*/     UINT8        PrcbPad1[8];
    21. /*0x4A0*/     struct _KTHREAD* NpxThread;
    22. /*0x4A4*/     ULONG32      InterruptCount;
    23. /*0x4A8*/     ULONG32      KernelTime;
    24. /*0x4AC*/     ULONG32      UserTime;
    25. /*0x4B0*/     ULONG32      DpcTime;
    26. /*0x4B4*/     ULONG32      DebugDpcTime;
    27. /*0x4B8*/     ULONG32      InterruptTime;
    28. /*0x4BC*/     ULONG32      AdjustDpcThreshold;
    29. /*0x4C0*/     ULONG32      PageColor;
    30. /*0x4C4*/     ULONG32      SkipTick;
    31. /*0x4C8*/     UINT8        MultiThreadSetBusy;
    32. /*0x4C9*/     UINT8        Spare2[3];
    33. /*0x4CC*/     struct _KNODE* ParentNode;
    34. /*0x4D0*/     ULONG32      MultiThreadProcessorSet;
    35. /*0x4D4*/     struct _KPRCB* MultiThreadSetMaster;
    36. /*0x4D8*/     ULONG32      ThreadStartCount[2];
    37. /*0x4E0*/     ULONG32      CcFastReadNoWait;
    38. /*0x4E4*/     ULONG32      CcFastReadWait;
    39. /*0x4E8*/     ULONG32      CcFastReadNotPossible;
    40. /*0x4EC*/     ULONG32      CcCopyReadNoWait;
    41. /*0x4F0*/     ULONG32      CcCopyReadWait;
    42. /*0x4F4*/     ULONG32      CcCopyReadNoWaitMiss;
    43. /*0x4F8*/     ULONG32      KeAlignmentFixupCount;
    44. /*0x4FC*/     ULONG32      KeContextSwitches;
    45. /*0x500*/     ULONG32      KeDcacheFlushCount;
    46. /*0x504*/     ULONG32      KeExceptionDispatchCount;
    47. /*0x508*/     ULONG32      KeFirstLevelTbFills;
    48. /*0x50C*/     ULONG32      KeFloatingEmulationCount;
    49. /*0x510*/     ULONG32      KeIcacheFlushCount;
    50. /*0x514*/     ULONG32      KeSecondLevelTbFills;
    51. /*0x518*/     ULONG32      KeSystemCalls;
    52. /*0x51C*/     ULONG32      SpareCounter0[1];
    53. /*0x520*/     struct _PP_LOOKASIDE_LIST PPLookasideList[16];
    54. /*0x5A0*/     struct _PP_LOOKASIDE_LIST PPNPagedLookasideList[32];
    55. /*0x6A0*/     struct _PP_LOOKASIDE_LIST PPPagedLookasideList[32];
    56. /*0x7A0*/     ULONG32      PacketBarrier;
    57. /*0x7A4*/     ULONG32      ReverseStall;
    58. /*0x7A8*/     VOID*        IpiFrame;
    59. /*0x7AC*/     UINT8        PrcbPad2[52];
    60. /*0x7E0*/     VOID*        CurrentPacket[3];
    61. /*0x7EC*/     ULONG32      TargetSet;
    62. /*0x7F0*/     PVOID WorkerRoutine;
    63. /*0x7F4*/     ULONG32      IpiFrozen;
    64. /*0x7F8*/     UINT8        PrcbPad3[40];
    65. /*0x820*/     ULONG32      RequestSummary;
    66. /*0x824*/     struct _KPRCB* SignalDone;
    67. /*0x828*/     UINT8        PrcbPad4[56];
    68. /*0x860*/     struct _LIST_ENTRY DpcListHead;                      // 2 elements, 0x8 bytes (sizeof)
    69. /*0x868*/     VOID*        DpcStack;
    70. /*0x86C*/     ULONG32      DpcCount;
    71. /*0x870*/     ULONG32      DpcQueueDepth;
    72. /*0x874*/     ULONG32      DpcRoutineActive;
    73. /*0x878*/     ULONG32      DpcInterruptRequested;
    74. /*0x87C*/     ULONG32      DpcLastCount;
    75. /*0x880*/     ULONG32      DpcRequestRate;
    76. /*0x884*/     ULONG32      MaximumDpcQueueDepth;
    77. /*0x888*/     ULONG32      MinimumDpcRate;
    78. /*0x88C*/     ULONG32      QuantumEnd;
    79. /*0x890*/     UINT8        PrcbPad5[16];
    80. /*0x8A0*/     ULONG32      DpcLock;
    81. /*0x8A4*/     UINT8        PrcbPad6[28];
    82. /*0x8C0*/     struct _KDPC CallDpc;                                // 9 elements, 0x20 bytes (sizeof)
    83. /*0x8E0*/     VOID*        ChainedInterruptList;
    84. /*0x8E4*/     LONG32       LookasideIrpFloat;
    85. /*0x8E8*/     ULONG32      SpareFields0[6];
    86. /*0x900*/     UINT8        VendorString[13];
    87. /*0x90D*/     UINT8        InitialApicId;
    88. /*0x90E*/     UINT8        LogicalProcessorsPerPhysicalProcessor;
    89. /*0x90F*/     UINT8        _PADDING0_[0x1];
    90. /*0x910*/     ULONG32      MHz;
    91. /*0x914*/     ULONG32      FeatureBits;
    92. /*0x918*/     union _LARGE_INTEGER UpdateSignature;                // 4 elements, 0x8 bytes (sizeof)
    93. /*0x920*/     struct _FX_SAVE_AREA NpxSaveArea;                    // 3 elements, 0x210 bytes (sizeof)
    94. /*0xB30*/     struct _PROCESSOR_POWER_STATE PowerState;            // 45 elements, 0x120 bytes (sizeof)
    95.           }KPRCB, *PKPRCB;
    Или я чего-то не понимаю, или здесь их просто нет. В висте и 7ке они там действительно находятся.
     
  9. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    И ещё не существует ли способа более надежного поиска этих списков в ОСях, начиная с ХР, чем использование зашитых смещений?
     
  10. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    haxorart
    Это из Windows XP x64 SP2, - всё на месте.
     
  11. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    > Хм, странно. PRCB для ХР
    в xp нету.
     
  12. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Тото я думаю, она на ХР не работает.
    Мне же нужно для 32, а не 64.

    Существует ли метод их из какой-нибудь функции вытащить или из какой-нибудь структуры, которая есть везде?
     
  13. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    Гугли статью тов. 90210 про запуск скрытого процесса внутри своего планировщика (когда-то была на руткиткоме). Его PoC (работает на 2000 и XP) ищет нужные тебе переменные сравнением дерева кода разных функций, работает более чем стабильно.
     
  14. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Как я понял из дизассемблирвания ядра раньще эти списки были просто переменными, а щас их перенесли в PRCB, поэтому вряд ли удасться найти универсальный алгоритм поиска для xp, vista и 7. Поэтому для ХР и vista с 7 придётся по-разному искать.
     
  15. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    Так для Vista/7 там и искать нечего: просто захардкодить смещения нужных полей PRCB, они всё равно не меняются в пределах одного и того же NT Build Number-а.
     
  16. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    У меня сейчас такая реализация и есть, но я не люблю неуниверсальные решения. Если искать по сигнатуре есть хотя бы некоторая вероятность работоспособности в следующих версиях, при жестком зашивании она стремиться к 0.
     
  17. 100gold

    100gold New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2010
    Сообщения:
    165
    Кроме "универсальных" решений, есть ещё "простые" решения. И такие решения почти всегда оказываются лучше "универсальных", но сложных)))
     
  18. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Всем спасибо за помощь.
     
  19. haxorart

    haxorart New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    123
    Если зловред хитёр и изворотлив и его не удаётся вычислить ни 1м из известных мне методов(списки планеровщика, eprocess, handles, PspCidTable, SwapContext про юзер мод вообще молчу) можно ли как-то просканировать память на предмет EPROCESS или каких-то других структур, которые принадлежат процессу. Я имею ввиду полное или частичное сканирование памяти. Существуют ли вообще такие техники? Применимы ли они, т.к. ясно что определить, что ХХ принадлежит EPROCESS крайне сложно? Существуют ли какие-нибудь ограничения на расположение этих структур в памяти? Может из каких-нибудь ключевых полей можно составить сигнатуру для поиска?
     
  20. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    http://tharuyama.blogspot.com/2010/01/encase-enscript-memory-forensic-toolkit.html