ntpatch.lib - обновлено

Тема в разделе "WASM.PROJECTS", создана пользователем Clerk, 19 фев 2008.

  1. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Добавил несколько интересных функций:
    - NtRedirectionLdrInitializeThunk
    - NtRedirectionApcOnException
    - MapViewOfObject
    - NtInstallCallGate
    - NtRemoveCallGate
    http://obmen.borges.ru/download/387
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Clerk
    Зачем windows.inc, который занимает места больше чем все остальное вместе взятое, оставил, ведь он не измелился с прошлого раза? :dntknw:
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Он изменён, не все скачали с прошлого раза..
    Сейчас пишу CreateProcessNotifyRoutine, допишу - скину.
     
  4. seeQ

    seeQ New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2003
    Сообщения:
    71
    Появился вопрос по структуре:
    SYSTEM_PROCESSES struct
    NextEntryDelta ULONG ?
    ThreadCount ULONG ?
    Reserved1 ULONG 6 DUP (?)
    CreateTime LARGE_INTEGER <>
    UserTime LARGE_INTEGER <>
    KernelTime LARGE_INTEGER <>
    ProcessName UNICODE_STRING <>
    BasePriority ULONG ?
    ProcessId ULONG ?
    InheritedFromProcessId ULONG ?
    HandleCount ULONG ?
    SessionId ULONG ?
    Reserved2 ULONG 2 DUP (?)
    VmCounters VM_COUNTERS <>
    IoCounters IO_COUNTERS <> ;____Windows 2000 only!
    Threads SYSTEM_THREADS <>
    SYSTEM_PROCESSES ends
    PSYSTEM_PROCESSES typedef ptr SYSTEM_PROCESSES

    сколько не смотртел в инете везде структуры разные, либо нет SessionId или если есть, то тогда Reserved2 просто dword, а не ULONG 2 DUP (?). Еще вопрос, вложенная структура IoCounters существует только в Win2000, а в XP после VmCounters идет сразу Threads?
    Хотелось бы узнать это для какой платформы структура XP SP2? Вобщем похоже, что в ней ошибка, так как нормально отпарсить Threads не получается
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    У меня работает, как и определена структура.
    В исходниках винды определена она иначе. У меня 'отпарсивает' потоки нормально, проверено во многих сборках SP2.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Код (Text):
    1. typedef struct _SYSTEM_PROCESS_INFORMATION {
    2.     ULONG NextEntryOffset;
    3.     ULONG NumberOfThreads;
    4.     LARGE_INTEGER SpareLi1;
    5.     LARGE_INTEGER SpareLi2;
    6.     LARGE_INTEGER SpareLi3;
    7.     LARGE_INTEGER CreateTime;
    8.     LARGE_INTEGER UserTime;
    9.     LARGE_INTEGER KernelTime;
    10.     UNICODE_STRING ImageName;
    11.     KPRIORITY BasePriority;
    12.     HANDLE UniqueProcessId;
    13.     HANDLE InheritedFromUniqueProcessId;
    14.     ULONG HandleCount;
    15.     ULONG SessionId;
    16.     ULONG_PTR PageDirectoryBase;
    17.     SIZE_T PeakVirtualSize;
    18.     SIZE_T VirtualSize;
    19.     ULONG PageFaultCount;
    20.     SIZE_T PeakWorkingSetSize;
    21.     SIZE_T WorkingSetSize;
    22.     SIZE_T QuotaPeakPagedPoolUsage;
    23.     SIZE_T QuotaPagedPoolUsage;
    24.     SIZE_T QuotaPeakNonPagedPoolUsage;
    25.     SIZE_T QuotaNonPagedPoolUsage;
    26.     SIZE_T PagefileUsage;
    27.     SIZE_T PeakPagefileUsage;
    28.     SIZE_T PrivatePageCount;
    29.     LARGE_INTEGER ReadOperationCount;
    30.     LARGE_INTEGER WriteOperationCount;
    31.     LARGE_INTEGER OtherOperationCount;
    32.     LARGE_INTEGER ReadTransferCount;
    33.     LARGE_INTEGER WriteTransferCount;
    34.     LARGE_INTEGER OtherTransferCount;
    35. } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
    SYSTEM_THREADS во всех версиях одинакова, известен адрес(поле NextEntryOffset) сл. структуры SYSTEM_PROCESSES, отсюда пройдясь с конца по структурам SYSTEM_THREADS можно найти конец структуры SYSTEM_PROCESSES, тоесть её размер. Я это не проверял, но работать должно.
     
  7. seeQ

    seeQ New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2003
    Сообщения:
    71
    Эта структура как-то более вписывается в то, что я понаходил. Итого, в твоей структуре:

    Reserved2 ULONG 2 DUP (?) должно быть просто Reserved2 ULONG (?) так как это "PageDirectoryBase"
    а в VM_COUNTERS необходимо добавить "PrivatePageCount"
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    SYSTEM_PROCESSES.NextEntryOffset=SYSTEM_PROCESSES.ThreadCount*SizeOf(SYSTEM_THREADS)+SizeOf(SYSTEM_PROCESSES)+SYSTEM_PROCESSES.ProcessName.MaximumLength;
    Второй процесс в буфере с именем 'System', длина имени фиксирована, SYSTEM_PROCESSES.ProcessName.MaximumLength('System')=10h, с учотом выравнивания =>
    SYSTEM_PROCESSES.NextEntryOffset=SYSTEM_PROCESSES.ThreadCount*SizeOf(SYSTEM_THREADS)+SizeOf(SYSTEM_PROCESSES)+10h, для пр. 'System'=>
    SizeOf(SYSTEM_PROCESSES)=SYSTEM_PROCESSES.NextEntryOffset-SYSTEM_PROCESSES.ThreadCount*SizeOf(SYSTEM_THREADS)-10h
    Первое смещение в буфере указывает на процесс 'System', отсюда найдём размер.
     
  9. seeQ

    seeQ New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2003
    Сообщения:
    71
    Вобщем я проверил, все правильно Reserved2 должно быть просто DWORD ? иначе в VM_COUNTERS мы получаем неправильные значения. Соответственно в структуру VM_COUNTERS нужно еще добавить "PrivatePageCount DWORD ?"
    Теперь, когда со структурами более мение разобрались, возвращаюсь к моей проблеме. Итак, в конце структуры SYSTEM_PROCESSES должен идти массив структур SYSTEM_THREADS, sizeof(SYSTEM_THREADS) = 3Ch, но на практике sizeof(SYSTEM_THREADS) оказался 40h (XP SP2). Я специально прикрепил рисунок, на котором это видно. Собственно вопрос почему 40h? Или нужно еще учитывать какое-то выравнивание?
    [​IMG]
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Исправил многие ошибки; добавлено:
    PsAddApcRedirection
    NtQueryCurrentNtosSdt
    http://dump.ru/files/o/o8542607127/

    seeQ
    Позже посмотрим..
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Добавил сегодня:
    http://dump.ru/files/o/o753074/
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Добавлено:
    CalculateOffsetEntryPoint
    WriteNowEntryPoint
    WriteNowEntryPointEx
    PsQueryDebugModuleInformationProtected
    http://dump.ru/files/o/o9779650/
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    seeQ
    Подумал, для определения размеров структур надо решить систему из двух уравнений:
    SYSTEM_PROCESSES.NextEntryOffset=SYSTEM_PROCESSES2.ThreadCount*SizeOf(SYSTEM_THREADS)+SizeOf(SYSTEM_PROCESSES)+SYSTEM_PROCESSES.ProcessName.MaximumLength
    A=SYSTEM_PROCESSES.NextEntryOffset
    B=SYSTEM_PROCESSES.ThreadCount
    C=SYSTEM_PROCESSES.ProcessName.MaximumLength
    X=SizeOf(SYSTEM_PROCESSES)
    Y=SizeOf(SYSTEM_THREADS)
    A1=B1*Y+X+C1
    A2=B2*Y+X+C2
    ->X=A1-B1*Y-C1
    A2=B2*Y+(A1-B1*Y-C1)+C2=B2*Y+A1-B1*Y-C1+C2=B2*Y-B1*Y+A1-C1+C2=Y*(B2-B1)+A1-C1+C2
    Y*(B2-B1)=A2-A1+C1-C2
    ->Y=(A2-A1+C1-C2)/(B2-B1)
    Вот рабочий код:
    Код (Text):
    1. QuerySystemProcessesStructureSize proc uses esi edi ebx InformationBuffer:PVOID, SystemProcessesSize:PULONG, SystemThreadsSize:PULONG
    2.     mov esi,InformationBuffer
    3.     xor edx,edx
    4.     mov edi,esi
    5.     add edi,dword ptr [esi]
    6.     assume esi:PSYSTEM_PROCESSES    ;#1
    7.     assume edi:PSYSTEM_PROCESSES    ;#2
    8.     mov eax,[edi].NextEntryDelta
    9.     sub eax,[esi].NextEntryDelta
    10.     movzx ecx,[esi].ProcessName.MaximumLength
    11.     add eax,ecx
    12.     movzx ecx,[edi].ProcessName.MaximumLength
    13.     sub eax,ecx
    14.     mov ecx,[edi].ThreadCount
    15.     sub ecx,[esi].ThreadCount
    16.     div ecx     ;Y=SizeOf(SYSTEM_THREADS)
    17.     mov ebx,eax
    18.     mul [esi].ThreadCount
    19.     mov edx,[esi].NextEntryDelta
    20.     sub edx,eax
    21.     movzx ecx,[esi].ProcessName.MaximumLength
    22.     sub edx,ecx ;X=SizeOf(SYSTEM_PROCESSES)
    23.     mov edi,SystemProcessesSize
    24.     mov esi,SystemThreadsSize
    25.     mov dword ptr [edi],edx
    26.     mov dword ptr [esi],ebx
    27.     ret
    28. QuerySystemProcessesStructureSize endp
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Добавлено:
    CsrInstallProcessDispatcher
    http://dump.ru/files/o/o74992385/
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Был баг с первым запуском в посте выше, исправил:
    http://dump.ru/files/o/o7470340369/
     
  16. EvilPhreak

    EvilPhreak New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    154
    Clerk
    Скажи что это, или дай линк где об этом можно почитать, а то куча асм-кода вызывающего функции подсистемы win32 мне ничего не говорит.
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    У меня в основе перехватов изначально существовала уязвимость, а именно изза вероятность возникновения ошибки на многопроцессорных системах, полностью переписываю код.
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Функции перехватов можно считать завершёнными; добавлено:
    SplaysKiFastSystemCallRet
    SplaysKiFastSystemCall
    WaitForSplaysReady
    QueryNotifyRoutinesReferences
    PsCreateRemoteThread
    http://dump.ru/files/o/o1249211436/
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Добавлен продвинутый инжектор:
    InjectProcessThreadsTrap
    http://dump.ru/files/o/o908536985/
     
  20. ALLeX

    ALLeX Member

    Публикаций:
    0
    Регистрация:
    21 окт 2004
    Сообщения:
    141
    Адрес:
    Ukraine
    Clerk

    В двух словах - что есть такое: ntpatch.lib?