Сейчас на форуме: sashalogout, bartolomeo, artyavmu (+8 невидимых)

 eXeL@B —› Софт, инструменты —› VMMap
Посл.ответ Сообщение


Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 24 февраля 2009 15:23 · Поправил: Jupiter
· Личное сообщение · #1

VMMap
Mark Russinovich, Bryce Cogswell
v1.0 выпущена 23 февраля 2009

Визуальное представление карты памяти, принадлежащей процессу.



VMMap @sysinternals http://technet.microsoft.com/en-us/sysinternals/dd535533.aspx

Скачать: VMMap.zip http://download.sysinternals.com/files/vmmap.zip

-----
EnJoy!




Ранг: 329.6 (мудрец), 192thx
Активность: 0.140.01
Статус: Участник

Создано: 24 февраля 2009 15:39
· Личное сообщение · #2

Забавная и полезная утилита.
+1




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 24 февраля 2009 16:53
· Личное сообщение · #3

а не подобная утилита у Джефри Рихтера была?

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 29.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 24 февраля 2009 17:14
· Личное сообщение · #4

В About: Portions based on code by Jeffrey Richter




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 24 февраля 2009 17:16
· Личное сообщение · #5

coderess пишет:
а не подобная утилита у Джефри Рихтера была?


В About o этом честно написано

Portions based on code by Jeffrey Richter

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 238.8 (наставник), 67thx
Активность: 0.20
Статус: Участник
CyberHunter

Создано: 24 февраля 2009 17:20
· Личное сообщение · #6

vnekrilov пишет:
Забавная и полезная утилита.
+1


Красиво да и только Какая практическая польза?!

-----
Nulla aetas ad discendum sera




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 24 февраля 2009 17:47 · Поправил: Clerk
· Личное сообщение · #7

Ну как всегда, хип, рмт..
Выносится легко, элементарный код подвешивает приложение, выдавая сообщение при попытке выбора этого процесса:
Code:
  1.                  .686
  2.          .model flat, stdcall
  3.          option casemap :none
  4.          include \masm32\include\ntdll.inc
  5.          includelib \masm32\lib\ntdll.lib
  6. .code
  7. Entry proc
  8. Local Response:ULONG
  9.          assume fs:nothing
  10.          mov eax,fs:[TEB.Peb]
  11.          mov eax,PEB.Ldr[eax]
  12.          mov eax,PEB_LDR_DATA.InLoadOrderModuleList[eax]
  13.          lea edx,InitRoutine
  14.          mov eax,LDR_DATA_TABLE_ENTRY.InLoadOrderModuleList.Flink[eax]
  15.          lock xchg LDR_DATA_TABLE_ENTRY.EntryPoint[eax],edx
  16.          invoke ZwSuspendThread, NtCurrentThread, NULL
  17. InitRoutine:
  18.          invoke ZwRaiseHardError, STATUS_ACCESS_DENIED, 1, 0, 0, OptionOkNoWait, addr Response
  19.          invoke ZwTerminateProcess, NtCurrentProcess, STATUS_SUCCESS
  20. Entry endp
  21. end Entry

Не говоря уже про структуру куч, стоит сделоть не валидным один из элементов, как приложение вероятно слетит на необработанном исключении, ибо юзоется бажный функционал получения слепков(хотя и нативный). Имхо порченая утилита .




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 24 февраля 2009 19:19 · Поправил: coderess
· Личное сообщение · #8

Мля, еле собрал твой Код (поправлено ;)), действительно робит

// Оля также говорит, вернее система говорит об ошибке

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 24 февраля 2009 19:25 · Поправил: coderess
· Личное сообщение · #9

Вот переписал структуры, что бы собрать файл:

Главный файл превратился в:

Code:
  1. .686 
  2.          .model flat, stdcall 
  3.          option casemap :none 
  4.        
  5.                   ;include \masm32\include\ntddk.inc
  6.                   include \masm32\include\ntdll.inc
  7.                   ;includelib \masm32\lib\ntddk.lib
  8.          includelib \masm32\lib\ntdll.lib 
  9.                   include teb.inc
  10.                   
  11. LDR_DATA_TABLE_ENTRY struct
  12. InLoadOrderModuleList      LIST_ENTRY <>           ;+0
  13. InMemoryOrderModuleList             LIST_ENTRY <>       ;+8
  14. InInitializationOrderModuleList     LIST_ENTRY <>         ;+16(10h)
  15. DllBase            PVOID ? ;+24(18h)
  16. EntryPoint               PVOID ?        ;+28(1Ch)
  17. SizeOfImage             ULONG ?       ;+32(20h) in bytes
  18. FullDllName       UNICODE_STRING <>   ;+36(24h)
  19. BaseDllName       UNICODE_STRING <>   ;+44(2Ch)
  20. Flags         ULONG ?   ;+52(34h) LDR_*
  21. LoadCount                        USHORT ?       ;+56(38h)
  22. TlsIndex                  USHORT ?        ;+58(3Ah)
  23. HashLinks             LIST_ENTRY <>        ;+60(3Ch)
  24. SectionPointer       PVOID ?    ;+68(44h)
  25. CheckSum                  ULONG ?         ;+72(48h)
  26. TimeDateStamp         ULONG ?     ;+76(4Ch)
  27. LoadedImports         PVOID ?     ;seems they are exist only on XP !!!
  28. EntryPointActivationContext         PVOID ?          ;-same-
  29. LDR_DATA_TABLE_ENTRY ends
  30. PLDR_DATA_TABLE_ENTRY typedef ptr LDR_DATA_TABLE_ENTRY
  31. .code 
  32. Entry proc 
  33. Local Response:DWORD 
  34.          assume fs:nothing 
  35.          mov eax,fs:[TEB.Peb] 
  36.          mov eax,PEB.Ldr[eax] 
  37.          mov eax,PEB_LDR_DATA.InLoadOrderModuleList[eax] 
  38.          lea edx,InitRoutine 
  39.          mov eax,LDR_DATA_TABLE_ENTRY.InLoadOrderModuleList.Flink[eax] 
  40.          lock xchg LDR_DATA_TABLE_ENTRY.EntryPoint[eax],edx 
  41.                   ; NtCurrentThread equ -2
  42.                   invoke ZwSuspendThread, -2, 0 
  43. InitRoutine:
  44.          invoke ZwRaiseHardError, STATUS_ACCESS_DENIED, 1, 0, 0, 7, addr Response 
  45.          ;NtCurrentProcess equ -1
  46.                   invoke ZwTerminateProcess, -1, STATUS_SUCCESS 
  47. Entry endp 
  48. end Entry


-----------



d2f8_24.02.2009_CRACKLAB.rU.tgz - AntiAttach Code by Clerk.rar

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 24 февраля 2009 22:47 · Поправил: Clerk
· Личное сообщение · #10

Это не PoC, а просто код завершающий удалённый поток, причём поток этот скрыт от отладчика(ThreadHiddenFromDebugger). Всеголишь установка нотификатора на создание потока. С одной стороны авторы поступили правильно(использовали синхронизацию по эвентпаиру, на котором основной поток и виснет, ожидая удалённый), но нужно было создать поток, получающий список куч и прибивать его по таймауту. В большинстве же случаем этот флаг сбрасывают, изза чего выполняется возврат и далее возникает исключение. Данный баг имеют примерно 8 из 10 приложений. Собственно для слепков куч я описывал уже уязвимость:

Функция RtlQueryProcessDebugInformation в случае уничтожения удалённого потока возвращает код завершения потока(ExitStatus), который далее возвращает ThpCreateRawSnap(). Отладочный буфер создаётся, но в нём поля определяющие информацию о кучах заполнены нулями вследствие ошибки. Далее по возврату из функции ThpCreateRawSnap() проверяется код ошибки и если он больше либо равен нулю вызывается ThpAllocateSnapshotSection(). Из ThpAllocateSnapshotSection() выполняется обращение к буферу с информацией:

if (dwFlags & TH32CS_SNAPHEAPLIST) {
SnapShotSize += RawDebugInfo->Heaps->NumberOfHeaps * sizeof(HEAPLIST32);
HeapListCount = RawDebugInfo->Heaps->NumberOfHeaps;
}

Heaps равно нулю, инструкция выполняет чтение по этому адресу, а там память не выделена и возникает исключение, а CreateToolhelp32Snapshot не устанавливает сех-фрейм.





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 24 февраля 2009 23:11
· Личное сообщение · #11

Ага, попровил.

8 из 10 приложений

если не 10 из 10, что-то я не видел приложений которые действуют по выше описанному,
дабы избежать ложных данных.


С одной стороны авторы поступили правильно(использовали синхронизацию по эвентпаиру, на котором основной поток и виснет, ожидая удалённый)

По ходу, так все делают, мудрят с объектами событиями/синхронизации

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 24 февраля 2009 23:27
· Личное сообщение · #12

coderess
Нет, я это юзол на различных мониторах который получают инфу о кучах, практически все падали. Например WinApiOwerride, есчо какието уже не помню.
> По ходу, так все делают, мудрят с объектами событиями/синхронизации
Ошибаешся, я имел ввиду что использование эвентпаира явно указывается как один из параметров RtlCreateQueryDebugBuffer, собственно он и инициализирует структуры для дальнейшего получения слепков. Обычно этот флаг не устанавливают, по крайней мере это первая софтина, которая его установила.


 eXeL@B —› Софт, инструменты —› VMMap
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати