Сейчас на форуме: sashalogout, bartolomeo, artyavmu (+8 невидимых) |
eXeL@B —› Софт, инструменты —› VMMap |
Посл.ответ | Сообщение |
|
Создано: 24 февраля 2009 15:23 · Поправил: Jupiter · Личное сообщение · #1 |
|
Создано: 24 февраля 2009 15:39 · Личное сообщение · #2 |
|
Создано: 24 февраля 2009 16:53 · Личное сообщение · #3 |
|
Создано: 24 февраля 2009 17:14 · Личное сообщение · #4 |
|
Создано: 24 февраля 2009 17:16 · Личное сообщение · #5 |
|
Создано: 24 февраля 2009 17:20 · Личное сообщение · #6 |
|
Создано: 24 февраля 2009 17:47 · Поправил: Clerk · Личное сообщение · #7 Ну как всегда, хип, рмт.. Выносится легко, элементарный код подвешивает приложение, выдавая сообщение при попытке выбора этого процесса: Code:
Не говоря уже про структуру куч, стоит сделоть не валидным один из элементов, как приложение вероятно слетит на необработанном исключении, ибо юзоется бажный функционал получения слепков(хотя и нативный). Имхо порченая утилита . |
|
Создано: 24 февраля 2009 19:19 · Поправил: coderess · Личное сообщение · #8 |
|
Создано: 24 февраля 2009 19:25 · Поправил: coderess · Личное сообщение · #9 Вот переписал структуры, что бы собрать файл: Главный файл превратился в: Code:
----------- d2f8_24.02.2009_CRACKLAB.rU.tgz - AntiAttach Code by Clerk.rar ----- Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes |
|
Создано: 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 не устанавливает сех-фрейм. |
|
Создано: 24 февраля 2009 23:11 · Личное сообщение · #11 Ага, попровил. 8 из 10 приложений если не 10 из 10, что-то я не видел приложений которые действуют по выше описанному, дабы избежать ложных данных. С одной стороны авторы поступили правильно(использовали синхронизацию по эвентпаиру, на котором основной поток и виснет, ожидая удалённый) По ходу, так все делают, мудрят с объектами событиями/синхронизации ----- Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes |
|
Создано: 24 февраля 2009 23:27 · Личное сообщение · #12 coderess Нет, я это юзол на различных мониторах который получают инфу о кучах, практически все падали. Например WinApiOwerride, есчо какието уже не помню. > По ходу, так все делают, мудрят с объектами событиями/синхронизации Ошибаешся, я имел ввиду что использование эвентпаира явно указывается как один из параметров RtlCreateQueryDebugBuffer, собственно он и инициализирует структуры для дальнейшего получения слепков. Обычно этот флаг не устанавливают, по крайней мере это первая софтина, которая его установила. |
eXeL@B —› Софт, инструменты —› VMMap |