Сейчас на форуме: (+6 невидимых) |
eXeL@B —› Программирование —› Визоры. |
Посл.ответ | Сообщение |
|
Создано: 23 сентября 2019 20:57 · Поправил: difexacaw · Личное сообщение · #1 Тема про DBI. Эти инструменты не используют или про них не говорят. Тему я создал по двум причинам - утверждения что локальные визоры годные инструменты Хвалёные всеми визоры, кучи их pin, dynamorio etc. Пин это вообще говно, с него жыр потёк, я для теста взял этот Штатный тест на пачке протекторов: UPX отвалилось. ASPACK тоже. OBSIDIUM вываливается с ошибкой сам визор, олли как jit отваливатеся тоже. PELOCK крэш. SAFEENGINE крэш. THEMIDA и есчо два подобных протектора запущены одновременно, jit и при завершении jit отвалились все. NICE/MPRESS вываливается с jit. На этом достаточно, не рабочий тулз. Зато копирайты VMWARE & MS Это всё не рабочее говно, не понятно где заявленный функционал. Дий к теме в свои 50кб справляется со всем этим Хотя DIO если глянуть дизасмом - чистый нэйтив и вроде даже годный как сборка, но те извраты на которых оно работает походу никуда не годятся - на лету собирать в памяти какой то код через морф с кривыми стабами очень плохая затея, это только если на Для примера в аттаче простейший код, который не сможет пройти ни один из локальных визоров(DBI). А не получится это сделать из общих, давно известных принципов Напомню кратко если кто не знает суть. Приёмник и источник данных связаны механизмом, это выборка данных; если её нет, это эмуляция. Атом - источник данных, для которого нет их выборки, это обьект в вирт машине. Анклав - мод механизма выборки; если выборки нет, то данные не доступны(для вм) и любой попытке доступа. Для меня важно не дать закрутить будущий семпл автоматикой. Сейчас крэкми уже решаются в пару кликов мышем - Интересно рассмотреть такую идею. Событие выборки может дать рабочий набор, как в примере, но однократно. Сброс набора довольно быстрый, если на каждой итерации сбрасывать набор, это даст все выборки. Тогда в принципе можно реализовать и анклав, без исключений. При этом юзермод визор это не сможет обработать в принципе, без эмуляции соответственно ядерных вызовов. Пока не ясно с чего начать f315_23.09.2019_EXELAB.rU.tgz - AVI.7z ----- vx | Сообщение посчитали полезным: VOLKOFF, Jupiter, mak, plutos |
|
Создано: 23 сентября 2019 22:47 · Поправил: VOLKOFF · Личное сообщение · #2 Тема годная, если не скатится в непредсказуемый оффтоп (как 90% тем Инде) будет хорошо. Также можно сразу скипануть обсуждение детекта DBI, ибо это достаточно просто, но мы потеряем нить беседы Про пин согласен, рио стабильнее, но тоже часто валится от банальных вещей, что впрочем не мешает использовать его алго частично, дергая нужное из сырков. Как доп источники можно поюзать сырки VBox и ReactOS и в целом задача выполнимая в рамках получения "разумных результатов". |
|
Создано: 23 сентября 2019 23:09 · Личное сообщение · #3 VOLKOFF пишет: но мы потеряем нить беседы VOLKOFF, я предлагаю вести две паралельные нити. В одной Инди будет твердить, что DBI - это дерьмо, а в другой все остальные будут обсуждать их достоинства и недостатки. Тут самое главное не дать Инди сбить нас с толку и с нити. Инди - руки прочь от DBI !!! От себя вношу свою одну копейку. Я тут немного с SDE поэкспереметировал, мне у него детальность и подробность лога трассировки понравилась. Гораздо подробнее, чем у PIN'а внутри ИДЫ, но размер лога, конечно, впечатляет с 1 Мб ехе-файла --> 14 Gb размер лога!!! |
|
Создано: 24 сентября 2019 00:33 · Личное сообщение · #4 Данная тема действительно интересна и думаю не мне одному. Но что бы стать по-настоящему полезной для всех заинтересованых и вызвать конструктивный диалог, а не просто поток бессмысленных издевок и предложений, автору все же нужно обратить внимание на стиль изложения и его структуру. Существуют определенные стандарты написания технических статей и формы изложения материала, и они придуманы не зря. Правильно поданый материал легче воспринимается и вызывает желание читать до конца. Пока что, прочитав первый пост, я узнал, что "Пин это вообще говно, с него жыр потёк" и у меня пропал аппетит (в прямой и переносном смысле). Примитивное изложение вызывает недоверие к источнику, хотя я уверен, что TS темой владеет вполне. Поэтому мои предложения носят самый благожелательный характер и проистекают из интереса к теме и ее развитию. ----- Give me a HANDLE and I will move the Earth. |
|
Создано: 24 сентября 2019 08:06 · Личное сообщение · #5 difexacaw 1. AVI.asm (упражнение с локальными адресами, рабочим набором и стеком) в твоей реализации существует под 64 бит? 2. В какой момент спотыкаются те визоры (DBI), которые ты тестировал? 3. Не помешало бы более-менее подробное описание собственно тестирования, чтобы не нужно было гадать, где конкретно падают те или иные инструменты. 4. Если выкинуть работу с рабочим набором (ZwQueryInformationProcess с ProcessWorkingSetWatch), будет ли тот же эффект? 6. Если DBI реализует свои вызовы к функциям типа ZwQueryInformationProcess, реализует поддержку управления информацией о рабочих наборах, то за исключением требований к ресурсам (памяти), цель мне кажется вполне достижимой. 7. Тут скорее вопрос, чего не хватает текущим реализациям DBI, чтобы справляться с таким кодом (AVI.asm). Исходя из того, что ты утверждаешь, могу предположить, что этим DBI не хватает, как минимум: - работы с замороченным стеком (в твоём примере - участок L0 - L3) - поддержки полноценной эмуляции информации о процессе, включая рабочие наборы (в частности, используемый тобой ProcessWorkingSetWatch) - оптимизации используемых ресурсов (хранение только нужной для данного сэмпла инфы) - настройки ограничений использования ресурсов (как в данном случае: фокусировка на стеке и рабочих наборах) sty VOLKOFF Постарайтесь без дальнейшего флуда и обсуждения личности инде, господа. Тему в оффтопе, где можно порезвиться, сами знаете. ----- EnJoy! |
|
Создано: 24 сентября 2019 09:35 · Поправил: difexacaw · Личное сообщение · #6 Jupiter Это просто тестовый пример. Смысл в том, что визоры скрывают выборку, в данном случае её фиксирует система как монитор наборка. Если выборка пройдёт через механизм ловушек, то её отфильтрует любой визор. Так адрес исключения всегда корректируется на исходные адреса(eg фаулт в буфере -> faultIp + дельта баз буфера и текущего кода). В визорах два типа исполнения, это прямое в буферах, либо эмуляция. В случае если это эмуляция, то выборка пройдёт из вм визора и соотвественно в наборе не будет тестового кода, туда попадёт вм. Если это прямое исполнение, то выборка пройдёт из буфера. Тогда будут два события выборки разнесены по времени(будут выборки визора), лог набора будет содержать множество операций визора между двумя нужыми событиями. Есчо фишка со стеком - обращение к нему даёт две ядерные выборки(unguard и выделяется страница(transition)). Если стек локален для визора, те общий, выборки в стек вообще не произойдёт, так на нём визор крутит каждую итерацию. Вопрос в том, как на этом реализовать защиту, анклав к примеру, те полноценное решение, а не одноразовое как этот пример > твоей реализации существует под 64 бит? Я написал только на 86, в 64 разница в названии регистров > В какой момент спотыкаются те визоры (DBI), которые ты тестировал? Нет смысла тестировать, всё прозрачно, известно как они устроены и что получится. Дио возвращает 40102F, так как нет адреса в наборе. На пине тоже самое. Аналогично получится и на дий. Пин и дио могут загружать код блоками в буфера, если его выполнить в буфере, то адрес найден не будет(он фиксирован). > Тут скорее вопрос, чего не хватает текущим реализациям DBI Они сделаны по типу POC, вроде бы написано и отлажено, вот только на реальных семплах оно не работает. Толщина приводит к анстабу. Слева dio, справа pin, dye и семпл. - видно что дио и дий выполнили в буфере, пин разбил блок. ----- vx |
|
Создано: 24 сентября 2019 13:45 · Личное сообщение · #7 Мне интересно почему у всех н слуху РИО, ПИН и мало говорят про |
|
Создано: 24 сентября 2019 14:32 · Поправил: difexacaw · Личное сообщение · #8 |
|
Создано: 24 сентября 2019 15:04 · Личное сообщение · #9 difexacaw пишет: Потому что оно исключительно для линей. Known Issues Windows 64-bit mode is not yet supported Linux rewriter mode for 32-bit, statically linked binaries does not support binaries with .plt, .rel, or .rela sections. Значит, исходя из логики, Windows 32-bit mode - поддерживается, да и с Linux, вроде как, не совсем все гладко. Видимо, поэтому и уступает в популярности ПИН и РИО. |
|
Создано: 24 сентября 2019 16:18 · Личное сообщение · #10 есть еще вот такое статья на хабре презентация но надо время, разбираться, где и как это можно заюзать. | Сообщение посчитали полезным: plutos, bartolomeo |
|
Создано: 24 сентября 2019 18:04 · Личное сообщение · #11 |
|
Создано: 26 сентября 2019 00:03 · Поправил: difexacaw · Личное сообщение · #12 Я немного потестил. Если тот семпл с антидебаг крутить SDE, то пин его успешно проходит при выключенных 3-х проверках. Первая это fpu.lastip, возвращается текущее положение в буфере пина. Я не смотрел подробно, но скорее всего в буфер выгружаются на исполнение большие блоки кода, поэтому пин не фиксит адрес, так как он не видит инструкцию из за блоков. Вторая проверка это впрыснутые образы пин, они обнаруживаются при проверке памяти. Третья проверка это тайминг, запуск больше лимита по времени. В общем если такой антидебаг дикий для отладчика, то для визоров он бесполезен(не хватает извратов с исключениями и самопроверок, собственно почему на протекторах и не работает), если конечно ровно реализованы. С набором пока идея следующая. Выборка связывает источники данных, она получается как лог WS(тоесть это проверка целостности выборки). Это давно описано как частный способ, но можно видимо реализовать как общий для произвольного кода. Принцип то же что и при обнаружении ориентированных атак(DUI" Для WS три механизма: снятие текущего набора, снятие лога добавленных страниц и лог записи. Адреса инструкций возвращает только второй механизм, но в зависимости от версии ос ограничение. На XP доступна ядерная выборка, на 7-ке только юзермод(при записи почему то и ядерные, наверно какой то баг). Выше врядле км доступно, так как это inform.disclosure в ядре. Третий механизм решает проблему со сбросом набора(что бы убрать область из WS), это происходит автоматически, иначе нужно лочить всю память(NtLockVM) или на каждой итерации сбрасывать набор(интересно снять профайл ). Вероятный метод: A. Создаём отображение RW(V1)/RW(V2). Если изменить данные в первом образе, второй не добавляется в набор. B. Создаём область writewatch(V1). Нельзя мониторить через ww отображения. Инструкция выбирает данные(eg пишет переменную) V1. Выборка отслеживается каким то образом, не важно как. Получаем линейный адрес выборки, раскодируя инструкцию или через ловушку. A: Проверяем WS(V1) область должна отсутствовать в наборе. Пишем данные в V2, таким образом реализуя анклав. Запись из текущего процесса будет в мониторе набора(адрес инструкции), из другого процесса ядерная и лог будет пуст, но при этом область добавится в набор. B: WSW(V1), запись будет из текущей страницы. Так же проверяем пишущий код на наличие записей(WSW). Так как необходим анклав, то пишем во вторую область WSW, читаем из неё и пишем в V1, либо можно сделать через проекцию(как в A). Вариант A надёжнее, но сложнее из за необходимости сброса набора(могут быть подводные камни). Возможны разные вариации, например сделать V1 только R(так как проекция). Должно получится что запись из другого процесса во первых обнаруживается, во вторых прямая не возможна(так как там данных может не быть из за анклава или область блокирована от записи). Так же должно запалить визоры, если запись пройдёт при эмуляции или из буфера. ----- vx |
|
Создано: 27 сентября 2019 17:56 · Личное сообщение · #13 |
|
Создано: 27 сентября 2019 21:41 · Личное сообщение · #14 |
|
Создано: 27 сентября 2019 22:25 · Личное сообщение · #15 |
|
Создано: 28 сентября 2019 01:41 · Личное сообщение · #16 |
|
Создано: 28 сентября 2019 07:22 · Поправил: Bronco · Личное сообщение · #17 ARCHANGEL пишет: ну это может пару часов, если очень много кода чисто из любопытства. много это сколько? Максимальный размер страницы 256 мб, "влазит" в неё не больше 75 лямов инструкций (х64). по времени для трассера ( не самого шустрого) это 10 мин.\ ARCHANGEL пишет: по хэндлерам прыгать как-то мало смысла. ну так "знакомство" с этого и начинается. не уверен, что таблицы читаются проще чем линейный код. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 28 сентября 2019 08:13 · Личное сообщение · #18 ARCHANGEL пишет: Снять трассу после нажатия кнопки - ну это может пару часов, если очень много кода. Ну это если в SDE делать очень детализированную трассировку. Но ведь детализацию можно и уменьшить, если ты точно знаешь, что у тебя будет трассироваться нужный участок кода. SDE ведь сделан на базе ПИНа, а ПИН, по идее, должен быть очень гибкой штукой. Я только еще немного "не догоняю" в его гибкости. Инди, по-моему, тоже в ПИНе не особо разбирается, ну или "темнит", а может и то и другое. ARCHANGEL, может вы поможете прояснить ситуацию? Задача получить трассу от точки А до точки B (начало и конец обработчика события). Я, конечно, понимаю, что есть документация и все такое, но тогда это получается достаточно времязатратно, нежели когда тебе подскажет опытный человек. Я не имею в виду, что все нужно сделать за меня, но хотя бы общий алгоритм и какие АПИ то ПИНа использовать, чтобы получить нужный результат. Кстати, может еще кто-нибудь из опытных людей подскажет как лучше решить мою задачу? |
|
Создано: 28 сентября 2019 20:06 · Поправил: difexacaw · Личное сообщение · #19 sim_19 > тоже в ПИНе не особо разбирается Мне не нужно знать его интерфейсы, вообще этот инструмент нужен не для снятия трассы, а вроде бы как для мониторинга некоторых событий. Тоесть теоретически он может отправить всю кодовую секцию в буфер и одно место там нужное поправить, когда этот блок получит управление вам придёт нотифи. Это основной принцип работы пина - встроить вызов в произвольный код. Более того пин это не нэйтив, он требует что бы его развернули", он запускается как тяжёлое апп(подобно как и WOW-слой, без полноценного развёртывания всей среды это не может работать). Нельзя его просто загрузить и задать адрес на трансляцию, это так не работает. У меня есть свой визор(дий), проект закрыт так как улучшать больше нечего. Решать задачу на профайл По теме я поработал сегодня, пока ничего нет. Я могу только привести пример по анклавам, может это чем то поможет.. Тех детали. WW - аллокация памяти только в reserved области. Это значит что если в пределах 0x10000(или какая гранулярность?) региона была аллокация, то создать область WW не получится. Её можно создать только в области, которая не зарезервирована. Тоесть нельзя секцию WW в проекции пе разместить WSW монитор вернёт IP:VA выборки. Для её подтверждения нужно отследить софтверную выборку, это не проблема. Но WSW механизм однократный, если проверка пройдёт и отладчик к примеру станет на инструкции после записи(добавления в WSW), то запись далее останется не замеченной(так как ядерная). Критерий детекта визора: 1. Не соответствие WSW/WS текущей выборке. 2. Появление новых записей в WS между двумя выборками. Пока это всё что есть. ----- vx | Сообщение посчитали полезным: Consequatur |
|
Создано: 28 сентября 2019 21:15 · Личное сообщение · #20 |
|
Создано: 29 сентября 2019 01:35 · Личное сообщение · #21 difexacaw пишет: Мне не нужно знать его интерфейсы, вообще этот инструмент нужен не для снятия трассы, а вроде бы как для мониторинга некоторых событий. Спасибо за прямой и честный ответ, а ведь могли бы и валенком обозвать. ARCHANGEL пишет: Против виртуализированного кода всё равно неприкольно ARCHANGEL, а вы не могли бы добавить немного подробностей для вышеприведенной цитаты. Может это намек на инструменты типа: Unicorn, QEMU или BOCHS? Так же интересно мнение и других форумчан на этот счет. |
|
Создано: 29 сентября 2019 02:07 · Личное сообщение · #22 sim_19 Это скорей про VMProtect, ASProtect и прочие подобные ----- IZ.RU | Сообщение посчитали полезным: ARCHANGEL |
|
Создано: 29 сентября 2019 11:06 · Личное сообщение · #23 Попробовал простой семпл потестить, отладчик отлично палит, но не заводится ни на dio, ни на пине. f68e_29.09.2019_EXELAB.rU.tgz - ws.7z Добавлено спустя 13 часов 31 минуту Видос как это работает Забавный эффект - после скана памяти происходит блокировка сервиса, он будет возвращать всегда ошибку не зависимо от набора, так как лог не влазит в буфер ----- vx |
|
Создано: 03 октября 2019 20:16 · Личное сообщение · #24 Между делом детект procmon через набор. Это работает через ядерный бэктрейс - ядро вызывает RtlWalkFrame.. это можно обнаружить в юм. На младших версиях можно создать ловушку через PG. 4981_03.10.2019_EXELAB.rU.tgz - PM.7z ----- vx |
|
Создано: 04 октября 2019 18:23 · Личное сообщение · #25 |
eXeL@B —› Программирование —› Визоры. |