Сейчас на форуме: jinoweb (+5 невидимых) |
eXeL@B —› Программирование —› Visor2. |
. 1 . 2 . 3 . >> |
Посл.ответ | Сообщение |
|
Создано: 15 июля 2018 02:22 · Личное сообщение · #1 Увидел свет в теме Задача решена, осталось просто брать и кодить. Опишу механизм. Оригинальный код не изменяется. Это исключает необходимость подмены данных(трек R-df). В RWX массив накапливаются блоки кода, это части, в которых все инструкции линейные и оканчиваются ветвлением(call/ret/jcc). При записи в этот буфер линейный блок копируется и в конце дописывается jmp near rel на стаб, который выполняет эмуляцию оригинального ветвления. Для быстрого приведения(отображения) оригинального адреса на буфер используем AVL. Дерево содержит описатели блоков, каждый из них содержит: - Оригинальный адрес блока. - Адрес блока в буфере RWX. - Тип ветвления. - Битовую карту переменного размера. - Ссылку(2) на следующий описатель. AVL позволяет выполнить быструю трансляцию адреса на буфер. Сам визор цикл следующий. Блок декодируется и копируется в буфер. Ветвление эмулируется на основе описателя, выбирается ссылка на следующий блок и на него отдаётся управление. После исполнения блока управление получает стаб, выбирает/строит следующий блок и цикл повторяется. Тоесть выполняется блок в буфере - jmp stub - эмуляция ветвления - jmp to next block. Трансляция(поиск описателя блока) происходит на этапе построения новых блоков и при возврате по ret/imp_call_indir. Для рет используем кэширование - сохраняем описатель адреса возврата. Конкретно по реализации. Системные AVL. Добавляем описатель в дерево RtlInsertElementGenericTableAvl(). Получаем описатель по оригинальному адресу RtlLookupElementGenericTableAvl(). Сравнивающий колбек должен определить принадлежность указателя диапазону блока и вернуть ближайший следующий, это происходит на последнем вызове CompareRoutine. Тогда процедура вставки блока будет следующая. 1. Если указатель в блок, то проверяем смещение указателя от начала исходного в битовой карте. В ней помечены начала всех инструкций в блоке. Если маркер установлен, то блок сходится на инструкции и можно выполнить прямое ветвление. 2. Если маркер сброшен, то происходит наложение инструкций(ветвление не на начало). Раскодируем длину и класс инструкции и повторяем цикл, пока не произойдёт схождение. Если произойдёт выход за пределы блока, то строим новый и добавляем описатель в дерево. 3. Если описателя нет, поиск вернёт ближайший следующий. Выполняем п2. После исполнения блока управление получает стаб. Он выгружает контекст, выбирает тип ветвления из описателя и его эмулирует, получая указатель на адрес ветвления. Если блок с ветвью уже описан, ссылка на него получается из ссылки на следующий блок из описателя. Иначе блок строится в конец буфера. Дерево в таком виде служит для быстрой трансляции адреса на буфер, связывания блоков и хранит инфу про ветвление. В отличие от визора первого типа(dye, где блоки копировались каждый раз в буфер), в данном случае профайл должен быть высоким, хотя его может просадить авл трансляция. Как это будет в работе предсказать нельзя, покажут тесты. ----- vx | Сообщение посчитали полезным: 8-9-13-80 |
|
Создано: 15 июля 2018 03:04 · Личное сообщение · #2 difexacaw На форуме есть раздел "Дневники и блоги". С правилами подфорума можно ознакомится по ссылке |
|
Создано: 15 июля 2018 03:08 · Поправил: difexacaw · Личное сообщение · #3 |
|
Создано: 15 июля 2018 14:26 · Личное сообщение · #4 |
|
Создано: 21 июля 2018 21:48 · Личное сообщение · #5 Какая-то тут тишина настала. Причем внезапно, прямо со времени создания темы. Но вот у меня появилась великолепная идея по развитию Визора. Мне кажется Вам нужно не отставать от новомодных веяний и начать в Вашем Визоре использовать Agile, BigData, глубокое обучение и прочие подобные слова. Особенно глубокое обучение. Причем чем глубже, тем лучше. До упора, и возможно даже чуть копнуть. Если хотите, то я Вас могу проконсультировать. Фактически мы тут единственные два крупных специалиста. Вы в Визорах, я в глубоких обучениях. Минус в том, что для этого потребуются большие вычислительные мощности. Возможно придется арендовать целый датацентр, который будет потреблять электроэнергии как пара микрорайонов. Зато смело покажем майнерам как можно с пользой использовать видеокарты. И возможно еще при нашей жизни сможем увидеть результат, но это не точно. Есть у меня еще мысли, но оставлю их на следующие выходные. | Сообщение посчитали полезным: Bronco |
|
Создано: 21 июля 2018 22:03 · Личное сообщение · #6 |
|
Создано: 21 июля 2018 23:49 · Личное сообщение · #7 |
|
Создано: 22 июля 2018 09:00 · Личное сообщение · #8 |
|
Создано: 22 июля 2018 09:31 · Личное сообщение · #9 я не понимаю о чем тут идет речь. Тема эта очень далека от того, чем я занят профессионально, но очень хотелось бы в ней разобраться. Подскажите, что нужно почитать, что понять, чтобы "войти в тему". но хотелось бы услышать не сумбурные выкрики, типа, "все это х..ня", а либо серьезное описание теории с основ, либо ссылки на источники, тоже с основ. Спасибо! ----- Give me a HANDLE and I will move the Earth. |
|
Создано: 22 июля 2018 09:41 · Личное сообщение · #10 |
|
Создано: 22 июля 2018 09:46 · Поправил: f13nd · Личное сообщение · #11 plutos пишет: я не понимаю о чем тут идет речь. Код дробится на куски по инструкциям перехода, эти куски переносятся в буфер и исполняются там. Должно получиться контролируемое исполнение на порядки быстрей эмуляции. Ну и за счет примитивности надежней эмуляции. Для этого нужен дизассемблер длин и дизассемблер десятка-двух инструкций. Ну может еще функции внешних библиотек фильтровать, одни дать исполнить, другие имитировать, на третьих прекратить исполнение. Невероятно сложная техническая задача, которую можно мусолить по любому поводу и так и не реализовать. И главное побольше страшных непонятных слов для важности. ----- 2 оттенка серого | Сообщение посчитали полезным: Vintersorg |
|
Создано: 22 июля 2018 10:38 · Личное сообщение · #12 plutos пишет: Подскажите, что нужно почитать, что понять, чтобы "войти в тему". f13nd уже ответил, но не сказал главного. В первую очередь нужно серьезно подсесть на препараты изменяющие состояние сознания. Бухло тоже подойдет, но его нужно много. Препараты всё-таки предпочтительнее, от них открываются порталы, из которых транслируются гениальные идеи для решения этой задачи. А если препаратов будет много, то уже порталы будут учиться гениальным идеям. |
|
Создано: 22 июля 2018 11:33 · Личное сообщение · #13 plutos Уязвимости эмуляторов кода - Эмуляция программного кода - Анализаторы кода в антивирусах - Register Liveness Analysis for Optimizing Dynamic Binary Translation - Binary translation - In computing, binary translation is a form of binary recompilation where sequences of instructions are translated from a source instruction set to the target instruction set. In some cases such as instruction set simulation, the target instruction set may be the same as the source instruction set, providing testing and debugging features such as instruction trace, conditional breakpoints and hot spot detection. The two main types are static and dynamic binary translation. Translation can be done in hardware (for example, by circuits in a CPU) or in software (e.g. run-time engines, statical recompiler, emulators). Ещё инфа из прошлого поста ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube | Сообщение посчитали полезным: plutos |
|
Создано: 22 июля 2018 14:12 · Поправил: difexacaw · Личное сообщение · #14 Есть куча проблем, помимо основного алгоритма - он найден. К примеру это не сработает в мультизадачной среде - можно реализовать атомарный доступ к исполняемому буферу по указателю, но это нельзя сделать для AVL. Если попытаться синхронизировать через RWL, то встанет всё. Придётся реализовать сложный механизм деревьев с синхронной выборкой. Как быть с обьединением блоков - если ветвление на блок, который заканчивается не ветвлением, а линейным блоком; можно их просто связать ветвлением. Но если это будет многократно вызываться, то нужна оптимизация - перестройка графа, а для этого нужен поток который будет это делать синхронно с записью. Как быть с записью в код. Придётся разлаживать каждый блок на компоненты в статике и строить PFG. Иначе придётся использовать тормозной механизм исключений. Что делать с case-branch ? Если сохранять все ветви это потребует очень много памяти и время на анализ всего массива. Как быть с рекурсивным вызовом визора ? Тоесть из его тела должен быть доступен код, который под ним выполняется. Это была последняя решённая задача в визоре первого типа(dye), после чего я его больше не допиливал из за всей кучи таких проблем. Главное что найден основной визор цикл, дальше нужно улучшать, оптимизировать, есть от чего отталкиваться. Добавлено спустя 3 минуты mak Поиск оптимизации был нужен для решения задачи по защите от OP. DYE для этой задачи не пригоден, нельзя под ним запускать тяжёлые апп. Тесты обычно я выполнял на гуглохроме, просадка тайминга была десятикратной, это очень мало, учитывая что задержки компенсируются ожиданием в ядре(сервисами), поэтому без использования профайлеров отличить работу апп под визором было нельзя. Но этого не достаточно, для решения задачи OP необходимо строить граф выборки(PFG), что требует на порядок большей производительности. Эмуляция для этого не пригодна. ----- vx | Сообщение посчитали полезным: plutos |
|
Создано: 22 июля 2018 14:23 · Личное сообщение · #15 |
|
Создано: 22 июля 2018 14:28 · Поправил: difexacaw · Личное сообщение · #16 f13nd Я пока это не решил. Нормальный код себя не модифицирует до исполнения. Даже при распаковке. Так что это событие не частое. Может даже не нужно искать какое то решение, а просто запретить запись в оригинальный код. А есчо блок можно разложить на инструкции и выполнить первого типа визор цикл(копирование-исполнение), прежде пометив инструкцию при срабатывании ловушки. Как минимум этого алго достаточно что бы в дальнейшем снять профайл на одном потоке и посмотреть имеет ли смысл подобная оптимизация. Может даже сложность не покроет выигрыш по профайлу. ----- vx |
|
Создано: 22 июля 2018 14:35 · Личное сообщение · #17 |
|
Создано: 22 июля 2018 14:40 · Личное сообщение · #18 |
|
Создано: 22 июля 2018 20:26 · Личное сообщение · #19 |
|
Создано: 22 июля 2018 20:54 · Личное сообщение · #20 difexacaw Вот шутки шутками, а какой смысл в этой софтине? Ну, к примеру, допишите её в ближайшие несколько лет и что? Для разбора малвари возможно и пойдет, но к тому времени антивирусные компании уже сделают что-то своё. А возможно у них уже есть что-то. Причем они реально пытаются применять всякие новомодные "машинные обучения" и прочий сатанизм. Смысл то в чем? Для разбора защит возможно и пригодится, но их как сейчас разбирают, так и потом будут разбирать. Конечно не все подряд, а знающие люди. А делать это для школоты, которая потом будет пытаться крякать проги направо и налево, так зачем? А если получится прога, которую поймут и смогут пользоваться несколько человек, то смысла в этом нет. Не проще ли направить усилия на что-то более реальное и востребованное? |
|
Создано: 22 июля 2018 21:08 · Личное сообщение · #21 |
|
Создано: 22 июля 2018 21:48 · Поправил: difexacaw · Личное сообщение · #22 hypn0 Визоры это не софт, это средства контроля, мониторы своего рода. Для чего они применяться могут, вот если пройти по последним темам: Бэктрейс только так корректно можно выполнить Распаковка именно через такого рода инстументы просто выполняется и прочая работа с кодом Единственный способ мониторить системные события Ловить cpuid Но для таких задач обычно профайл не важен. Это нужно что бы незаметно мониторить тяжёлые приложения, в частности блокировать OP-атаки. Иначе это никак не сделать. Конкретный механизм я описывал тут ----- vx |
|
Создано: 22 июля 2018 22:02 · Личное сообщение · #23 |
|
Создано: 22 июля 2018 22:02 · Поправил: hypn0 · Личное сообщение · #24 shellstorm Ну это я так мягко выразился. difexacaw Это всё отлично. Просто замечательно. Но мне, к примеру, как это поможет? Я сейчас трассирую модуль от одной ужасно дорогой софтины. Там походу взяли исполняемый файл и накрыли каким-то ужасом, который расшифровывает его в процессе выполнения. То есть вначале расшифровал часть, потом выполнилась часть проги, потом дальше расшифровал и так далее. С таким ни один визор не справится. Да и нет его в живом виде. В результате вручную приходится. Так что может Вы всё и правильно делаете, только когда это будет? К тому моменту я уже всё расковыряю. Добавлено спустя 2 минуты И таких прог у меня много. Так что вместо разглагольствований я предпочитаю просто делать. По крайней мере это приносит результат. |
|
Создано: 22 июля 2018 22:05 · Поправил: difexacaw · Личное сообщение · #25 |
|
Создано: 22 июля 2018 22:06 · Поправил: SegFault · Личное сообщение · #26 difexacaw пишет: Визоры это не софт, это средства контроля, мониторы своего рода. Для чего они применяться могут, вот если пройти по последним темам: Бэктрейс только так корректно можно выполнить --> Link <-- Распаковка именно через такого рода инстументы просто выполняется и прочая работа с кодом --> Link <-- Единственный способ мониторить системные события --> Link <-- Ловить cpuid --> Link <-- --> Link <-- Но для таких задач обычно профайл не важен. Это нужно что бы незаметно мониторить тяжёлые приложения, в частности блокировать OP-атаки. Иначе это никак не сделать. --> Link <-- --> Link <-- Конкретный механизм я описывал тут --> Link <-- бред в каждой строке во-первых нет термина визор. Выдумав свой термин ты стал элиткой чтоле, лол. Есть DBI и есть куча нормальных реализаций которым лет по 10. > Бэктрейс только так корректно можно выполнить --> Link лютый бред, есть еще с пяток способов >Распаковка именно через такого рода инстументы просто выполняется и прочая работа с кодом есть еще 100500 способов >Единственный способ мониторить системные события --> Link <-- садись два, есть вми есть етв есть гипервизоры есть хуки >Ловить cpuid --> Link <-- --> Link <-- гипервизор делает это за 2 минуты, а ты свое говно пишешь год и результата нет короче учи матчасть и не позорься | Сообщение посчитали полезным: Bronco |
|
Создано: 22 июля 2018 22:10 · Личное сообщение · #27 hypn0 > С таким ни один визор не справится. Да и нет его в живом виде. Я приводил пример выше Первого типа визор(dye") был давно есчо написан, я где то тут его показывал, но там сразу как помню всё обосрали, так как оно на асме написано. В #19 shellstorm это наверно и имел ввиду. ----- vx |
|
Создано: 22 июля 2018 22:19 · Поправил: Bronco · Личное сообщение · #28 SegFault пишет: гипервизор делает это за 2 минуты +1, и не пропускает, даже если вызов за пределами или под морфом, или ещё чем то там, + куча всяких плюшек, на вмэкситах. и это даже не вчера. с полным контролем не так всё просто, но событий достаточно, чтобы к нему приблизиться. hypn0 пишет: Какая-то тут тишина настала плюсанул, ибо тролинг тонкий и порадовал с утреца. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 22 июля 2018 22:23 · Личное сообщение · #29 |
|
Создано: 22 июля 2018 22:28 · Личное сообщение · #30 |
. 1 . 2 . 3 . >> |
eXeL@B —› Программирование —› Visor2. |
Эта тема закрыта. Ответы больше не принимаются. |