Сейчас на форуме: (+8 невидимых) |
eXeL@B —› Основной форум —› Vmprotect. Хитрая защита от отладки. |
<< . 1 . 2 . 3 . 4 . 5 . >> |
Посл.ответ | Сообщение |
|
Создано: 24 мая 2017 20:14 · Поправил: Vamit · Личное сообщение · #1 При реверсе одной проги встретил хитрую защиту от отладки: она не позволяет работать проге под дебагером, после F9 терминация, приаттачиться к работающей то же нельзя - сразу терминация. Приложение накрыто последним Vmprotect, все функции защиты также под протектором, основные виртуализованы, остальные обфусцированы, а всего их более 200шт. Терминирует именно защита, а не вмпрот. В TLS сидят 2 каллбака защиты, первый из них есть в листинге. Дебаг работает только до первого каллбака, тут можно снять дамп проги и девиртуализовать вмпрот. А суть задачи такова: прога посылает запрос на сервер, в котором одним из куков является состояние защиты (32 бита), проэмулировать мне его не удалось и сервак не отвечает. Прошу любые идеи как победить, или идентифицировать защиту, она явно не самописная, и прилинкована к проге из какой-то либы. Вот листинг нескольких функций ядра защиты, вытащенных из под Vmprotect: Code:
----- Everything is relative... |
|
Создано: 26 мая 2017 22:04 · Поправил: Vamit · Личное сообщение · #2 Девиртуализовал функу, которая во 2ом ТЛС прогу терминирует, но чтоб понять почему, ещё нужно кучу кода перелопатить. Пролог с эпилогом у неё какие-то странные. Code:
----- Everything is relative... | Сообщение посчитали полезным: v00doo |
|
Создано: 27 мая 2017 01:39 · Личное сообщение · #3 |
|
Создано: 27 мая 2017 02:13 · Личное сообщение · #4 |
|
Создано: 27 мая 2017 02:51 · Личное сообщение · #5 |
|
Создано: 27 мая 2017 10:23 · Поправил: Bronco · Личное сообщение · #6 Vamit пишет: Девиртуализовал функу, не хватает контекста, так что пока ни чём. но для начала не плохо. Давно надо было начать выкладывать подобный код. и это....пора забывать о хрюше, вин10 уже не первый год, и базовые инструменты, под неё есть. Олька, это просто хорошее прошлое. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. | Сообщение посчитали полезным: sefkrd |
|
Создано: 27 мая 2017 12:38 · Личное сообщение · #7 Я думал что защита треды как то синхронизирует и этим способом ловит HW бряки. Суспендил все треды кроме главного. Прога робит дальше. Бряк на АПИ и падает. Внутри главного значит зло. Инжектил длл от Detours что хукает Sleep... Прога робит дальше... xD Может это просто говнокод а не защита? Но CreateProcess вроде ловиться патчем ntdll |
|
Создано: 27 мая 2017 14:15 · Поправил: Vamit · Личное сообщение · #8 Bronco пишет: и это....пора забывать о хрюше, вин10 уже не первый год, и базовые инструменты, под неё есть Я был бы рад, да не всё так гладко, попытка использовать Ольку 2 со Свипером на вин10 закончилась неудачно. А на другие дебагеры SDK нормальных нет, чтоб и х32 и х64 поддерживали с асмом и дизасмом. Так что пользуем то, что хоть как-то работает... Можно конечно Иду бы попробовать, SDK у неё приличный, но я её использую ток как дизассемблер, не знаю справится ли её дебаг с вмпротовскими наворотами. hash87szf пишет: Может это просто говнокод а не защита? А чем в данном случае отличается одно от другого? Назначение у этого кода одно - запретить дебаг. ----- Everything is relative... |
|
Создано: 27 мая 2017 17:23 · Поправил: Bronco · Личное сообщение · #9 hash87szf пишет: робит спалился... Vamit пишет: А на другие дебагеры SDK нормальных нет, чтоб и х32 и х64 поддерживали с асмом и дизасмом. хм...не согласен, ситуация ровно такая же как и 7 лет назад, не беря в расчёт открытых текущих проектов, и возможности дебага в самой вижен студии, в последней двиг дизасма_асма с довольно внушительным функционалом. Нет желания начинать с начала под новый сдк, это понятный аргумент. Декомпильнутый служебный код, паблить дальше собираетесь? ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 27 мая 2017 17:37 · Личное сообщение · #10 Bronco пишет: Нет желания начинать с начала под новый сдк Да не проблема, Свипер напрямую с SDK не работает у него всё своё, а на любую SDК я пишу ток враппер, тут особо парится не надо, и сломать что-либо сделанное сложно, главное чтоб сдк выдавал нужный функционал. Давай предложения, я их рассмотрю, но попозже, надо сначала с этой дрянью разобраться. Декомпильнутый служебный код, паблить дальше собираетесь? Собираюсь, ток кусками не интересно, хочу код второй тлс полностью восстановить... Если интересно, то вот ещё, ток непонятно что за алгоритм, я пока в коде не разбираюсь, ток функи последовательно достаю. Code:
----- Everything is relative... | Сообщение посчитали полезным: Bronco |
|
Создано: 27 мая 2017 20:18 · Личное сообщение · #11 Vamit пишет: надо сначала с этой дрянью разобраться. у нас разная среда, моя Вам не подходит, из-за зависимостей свипера, а Вашу разруливать, сорян, но не имею ни среды, ни времени, да своих тараканов хватает, а хочется ещё и с бешенной водой раслабиться. плюсанул за решение паблить служебный код. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 27 мая 2017 20:54 · Личное сообщение · #12 Bronco пишет: у нас разная среда, моя Вам не подходит, из-за зависимостей свипера Ничего не понял, ты про какую среду и какие зависимости? Свипер счас работает в полной статике, ему нужен только внешний асм, подробный дизасм (не текстовая строка, а вся структура команды с префиксами, типом и операндами), и возможность чтения любого сегмента проги и памяти, а от дебагера требуется скрыться от вмпрота и иметь в памяти распакованный образ проги - и усё... Теперь насчет кода, в принципе тлс 2 весь достал, кроме одной пакетной функи (не могу найти её код), но она условная, может понадобится, а может и нет. Но теперь возник вопрос, а как его изучить? По асм листингам не айс, местами уж сильно закручено, в экзешник вставить вместо виртуализованных фунок его не позволит вмпрот, а хотелось именно дебагером по нему пройтись. Может кто что-то посоветовать? ----- Everything is relative... |
|
Создано: 28 мая 2017 16:52 · Личное сообщение · #13 Чуть дальше поигрался. Аттачусь. В x32dbg стоят галки на бряки: "attach breakpoint" "thread start" "thread end" "thread entry" Жму F9 пока он своих 23 треадов не заполнит. Где то там бреак на "thread created ntdll.DbgUiRemoteBreakin" F9 Int 3 BP at DbgUiRemoteBreakin, этого "attach breakpoint" наверно бы хватило и 20 раз F9 жать не надо. F9 thread exit bp F9 thread created, и выпрыгивает ui metatradera F9 и идёт в werfault.exe поэтому не жму F9, ставлю mem bp on exec на .cod1, .cod0, .text и voila! стоп в .cod1, ещё F9 и стоп в .text. Потом обратно .cod1 помоему, но тут прота мусора стока, надо трэсить... Бряки на его SEH хэндлеры, VirtualAlloc итд... От первого BP на cod1 идея такова: mem/hw bp on access на user32.Sleep и смотреть кто там лазит. |
|
Создано: 30 мая 2017 09:31 · Личное сообщение · #14 Нашел односеансное решение по отладке восстановленного кода. Запускаем оригинальную прогу, стопаемся на нужной виртуализованной функе, заменяем в ольке её код на восстановленный и дебажим. Но нужно следить, чтобы в процессе исполнения кода не выполнялись другие виртуализованные функи, т.е. их код тоже должен быть заменен на восстановленный. Если же таким образом заменить все функи, то вмпрот можно просто срезать создав рабочий дамп. Используя виртуалку так можно дебажить и несколько дней, но при перезапуске проги приходится весь код втыкать заново. Пару фунок защиты таким образом прошагал... ----- Everything is relative... |
|
Создано: 30 мая 2017 15:29 · Личное сообщение · #15 |
|
Создано: 30 мая 2017 15:53 · Личное сообщение · #16 |
|
Создано: 30 мая 2017 16:32 · Личное сообщение · #17 DenCoder пишет: Да, с импортом останется только разобраться А чего с ним разбираться, ИАТ с вызовами свипер восстановит, а таблицу импорта Сцилла к дампу прилепит, при создании дампа отрезать вмпротовские секции и усё)) r99 пишет: ежели б во рту росли грибы... А что, задача на некоторых прогах вполне решаема. Восстановил одну интересную функу (во вложении) и огромную (около 1500 инструкций), до неё дебаг в проге работает нормально, а потом слетает, похоже она создает и проверяет хеши 32 системных фунок, но точно в этом не уверен, т.к. из неё вызывается ещё куча других виртуализованных фунок. d9c4_30.05.2017_EXELAB.rU.tgz - 627780_ida.lst ----- Everything is relative... |
|
Создано: 30 мая 2017 18:50 · Личное сообщение · #18 Дров то всё равно придётся ставить. Если прога syscall делаe напрямую, а не через апишки, и ответы обрабатывает. Не трэйсить ведь это дело. А попробовал в x32dbg sysenter/syscall поймать, приатачился, бряк на .cod1 срабатывает, я делаю 'trace into', break condition: dis.iscall(cip) || dis.isunusual(cip) isunusual() is syscall/sysenter, тоесь если инстракшн на eip == sysenter/call, брэйк. И нифига нет их... Зато срабатывает бряк на LdrInitializeThunk, появляется второй тред и падает эта софтина. Это от VMprota? |
|
Создано: 30 мая 2017 19:08 · Личное сообщение · #19 |
|
Создано: 30 мая 2017 19:29 · Личное сообщение · #20 |
|
Создано: 30 мая 2017 20:01 · Личное сообщение · #21 difexacaw пишет: Сцилла это унылое говно, поделка писанная школьником Если не знаешь, то помолчал бы, Сцилки есть разные и для разных целей, вот эта ----- Everything is relative... |
|
Создано: 30 мая 2017 21:33 · Личное сообщение · #22 Палит память ntdll на предмет изменений некоторых функций, сравнивая с оригиналом библиотеки с диска. Этим страдает сцилла и\или другие плагины которые коверкают ntdll в целях скрытия. Лечится через HW бряк на побайтовом сравнении функций ntdll и возвратом значения что функции целы. Стронг же к слову этого не боится в кернел режиме. Вмварь палит через наличие файла vmmouse.sys и т.п. примитивные приемы. |
|
Создано: 30 мая 2017 22:10 · Личное сообщение · #23 neprovad пишет: Палит память ntdll на предмет изменений некоторых функций, сравнивая с оригиналом библиотеки с диска. Мы говорим про вмпрот или просто так, у него нет таких закидонов. Если на проге один вмпрот без других защит, то все они у меня нормально дебажаться без стороннего антиантидебага, хватает встроенного в свипер, который взят из Фантома. Исключение только составляют проги, в которых в вмпроте включена опция защиты от виртуалки, они вообще не стартуют, выплевывая вмпротовское сообщение о запуске на виртуалке. ----- Everything is relative... |
|
Создано: 30 мая 2017 23:03 · Личное сообщение · #24 Речь шла про внутренности данного поделия, вмпрот сам по себе "ни о чем" в антиотладке и не при делах. Для запуска хватает xpsp3 + odbg1 + strong. | Сообщение посчитали полезным: Vamit |
|
Создано: 30 мая 2017 23:42 · Поправил: hash87szf · Личное сообщение · #25 > Вмварь палит А у меня ничё он на Варь 12 не жалуется. Но собсстна поддерживаю. На vmware12 xpsp3 odbg1 strongod робит, но падает на бряках. Добавлено спустя 25 минут Code:
А вот под WOW64 у него такая хитрая хиута есь... |
|
Создано: 31 мая 2017 01:29 · Личное сообщение · #26 На бряках падает не сразу, видимо недостаточно корректная обработка исключений в стронге (skip some...) либо защита чудит. Возможно поток стартует и начинает мутить воду. Еще видел RtlRaiseException помимо всего прочего, вызов которого в каком-то случае может ветвление кода обойти стороной, заюзав какое-то поле в некой структуре. Свипера у меня нет, что это за структура я не знаю. |
|
Создано: 31 мая 2017 04:01 · Поправил: difexacaw · Личное сообщение · #27 hash87szf > Если прога syscall делаe напрямую, а не через апишки, и ответы обрабатывает. Если вызывается sysenter, то можно это просто отследить по возврату из сервиса(он на фикс адрес происходит), не нужен драйвер. Может быть вызов int2e, он не отключается штатными средствами. Но это может не помочь, если вызывается что то типо NtRemovePsDebug. Если вызывается из wow, то можно поставить обработчик на вызов сервиса, заменив системный указатель в TEB, наверно самый хороший способ, так как вызвать сервис через int/senter нельзя. Хотя защита может скопировать себе шлюз, который переключает мод. В коде видно что и syscall юзается, так что это может не сработать. Теоретически можно попробовать мониторить сервисы через ETW, но там нужно кучу матчасти изучать. Vamit > прекрасно справляется с вмпротом В шапке топика вы говорили иначе. По какой причине оно не работает - прот или же есчо какая защита, не суть важно. ----- vx |
|
Создано: 31 мая 2017 09:09 · Личное сообщение · #28 difexacaw пишет: В шапке топика вы говорили иначе. По какой причине оно не работает - прот или же есчо какая защита, не суть важно. Давайте, мухи отдельно - котлеты отдельно, тема про дополнительную защиту на проге, а не про вмпрот. К вмпроту вопросов нет, под ним все дебажится нормально, сложность только в том, что все функи защиты виртуализаны, большинство самым суровым образом, но все они доставаемы, нужно только время. В шапке говорилось про защиту, а потом чего-то съехали на вмпрот. Защита от виртуалки в этой проге в вмпроте не включена. ----- Everything is relative... |
|
Создано: 31 мая 2017 17:54 · Поправил: difexacaw · Личное сообщение · #29 Vamit Не понимаю что вам нужно. Системные решения не совместимы с отладчиком. Давайте тогда подробно рассмотрим данный вопрос. Имеется защита, которая проверяет целостность образов. Тоесть необходимо решение, которое позволит работать интерфейсу отладчика и при этом выполнит подмену данных. Я не вижу решения, кроме как фиксить сам отладчик. Можно поступить так. Заблокировать регион для исполнения(NX, иначе никак - нельзя загрузить селектор не исполняемого сегмента и не читаемого, либо исполняем и опционально читаем, либо читаем и опционально пишем, иначе #GP), он будет доступен для чтения и записи. Как только управление будет передано на образ сработает ловушка. Тогда мы передадим управление по соответствующему смещению на копию образа, которая сформирована не через загрузку, а просто копированием всего региона в буфер. В эту копию будем ставить точки останова, но как я выше сказал это не совместимо с интерфейсом олли, она не будет видеть модуль. Если попытаться загрузить копию модуля, то ссылки в нём будут в оригинальный и олли глюкнет. По нормальному это запускается под визором и никаких ваших проблем нет. ----- vx |
|
Создано: 31 мая 2017 18:55 · Личное сообщение · #30 |
|
Создано: 31 мая 2017 19:08 · Поправил: difexacaw · Личное сообщение · #31 SegFault Задача не решаема по нормальному, тс нужно решение под отладчик. Попытка решить это приводит к потоку решений в виде костылей. Те же ваши сервисы - решение давно есть, мой древний мотор можно заюзать. Он захватывает сискал, возвращает управление в юмод и может вернуться назад в ядро. При этом можно прикрутить любой юзер обработчик сервиса, не загружая его в ядро, таким образом использовать любой юзер софт. Но это как пример, идея по мойму тс глупая. Пусть использует dbi или кернел отладчик. Такие задачи не решаются в олли. ----- vx | Сообщение посчитали полезным: shellstorm |
<< . 1 . 2 . 3 . 4 . 5 . >> |
eXeL@B —› Основной форум —› Vmprotect. Хитрая защита от отладки. |