eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
обновлён 2 декабря!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: zds (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

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


Ранг: 599.8 (!)
Статус: Модератор
Research & Development

Создано: 24 февраля 2009 15:23 · Поправил: Jupiter New!
Цитата · Личное сообщение · #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

Ранг: 329.1 (мудрец)
Статус: Участник

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

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


Ранг: 355.4 (мудрец)
Статус: Uploader
5KRT

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

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

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

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

В About: Portions based on code by Jeffrey Richter


Ранг: 520.5 (!)
Статус: Участник
Победитель турнира 2010

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

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


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

Portions based on code by Jeffrey Richter


Ранг: 238.8 (наставник)
Статус: Участник
CyberHunter

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

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


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

Ранг: 255.8 (наставник)
Статус: Участник
vx

Создано: 24 февраля 2009 17:47 · Поправил: Clerk New!
Цитата · Личное сообщение · #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 (мудрец)
Статус: Uploader
5KRT

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

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

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


Ранг: 355.4 (мудрец)
Статус: Uploader
5KRT

Создано: 24 февраля 2009 19:25 · Поправил: coderess New!
Цитата · Личное сообщение · #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


-----------



{ Атач доступен только для участников форума } - AntiAttach Code by Clerk.rar

Ранг: 255.8 (наставник)
Статус: Участник
vx

Создано: 24 февраля 2009 22:47 · Поправил: Clerk New!
Цитата · Личное сообщение · #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 (мудрец)
Статус: Uploader
5KRT

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

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

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

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


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

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

Ранг: 255.8 (наставник)
Статус: Участник
vx

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

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

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS