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

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

 eXeL@B —› Программирование —› Visor2.
. 1 . 2 . 3 . >>
Посл.ответ Сообщение


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

Создано: 15 июля 2018 02:22 New!
Цитата · Личное сообщение · #1

Увидел свет в теме --> Link <--

Задача решена, осталось просто брать и кодить. Опишу механизм.

Оригинальный код не изменяется. Это исключает необходимость подмены данных(трек 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, где блоки копировались каждый раз в буфер), в данном случае профайл должен быть высоким, хотя его может просадить авл трансляция. Как это будет в работе предсказать нельзя, покажут тесты.

| Сообщение посчитали полезным: 8-9-13-80


Ранг: 319.8 (мудрец)
Статус: Модератор
CrackLab

Создано: 15 июля 2018 03:04 New!
Цитата · Личное сообщение · #2

difexacaw
На форуме есть раздел "Дневники и блоги". С правилами подфорума можно ознакомится по ссылке --> Link <--




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

Создано: 15 июля 2018 03:08 · Поправил: difexacaw New!
Цитата · Личное сообщение · #3

SReg

Ну это алгоритмическая задача, не повествование в блоге. Именно этот раздел для этого подходит.




Ранг: 673.3 (! !)
Статус: Участник
CyberMonk

Создано: 15 июля 2018 14:26 New!
Цитата · Личное сообщение · #4

difexacaw Когда ждать альфа версию?! У тебя же уже всё готово для этого, с AVL уже занимался, осталось собрать в тестовый пакет.



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

Создано: 21 июля 2018 21:48 New!
Цитата · Личное сообщение · #5

Какая-то тут тишина настала. Причем внезапно, прямо со времени создания темы.
Но вот у меня появилась великолепная идея по развитию Визора. Мне кажется Вам нужно не отставать от новомодных веяний и начать в Вашем Визоре использовать Agile, BigData, глубокое обучение и прочие подобные слова. Особенно глубокое обучение. Причем чем глубже, тем лучше. До упора, и возможно даже чуть копнуть. Если хотите, то я Вас могу проконсультировать. Фактически мы тут единственные два крупных специалиста. Вы в Визорах, я в глубоких обучениях.
Минус в том, что для этого потребуются большие вычислительные мощности. Возможно придется арендовать целый датацентр, который будет потреблять электроэнергии как пара микрорайонов. Зато смело покажем майнерам как можно с пользой использовать видеокарты. И возможно еще при нашей жизни сможем увидеть результат, но это не точно.
Есть у меня еще мысли, но оставлю их на следующие выходные.

| Сообщение посчитали полезным: Bronco



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

Создано: 21 июля 2018 22:03 New!
Цитата · Личное сообщение · #6

hypn0

Наверно и должна быть тишина, до момента тестов, я отпишу когда будет. И незачем тролить. Вы описали свои задачи, но они не из этой области, так что идите мимо, это серьёзная тех тема.



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

Создано: 21 июля 2018 23:49 New!
Цитата · Личное сообщение · #7

какая нахер серьезная тема) dbi реализованы много этих лет назад, пока крелк думает как это сделать




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

Создано: 22 июля 2018 09:00 New!
Цитата · Личное сообщение · #8

SegFault

Их всего несколько, они очень сырые/анстаб и используются в основном для отладочных целей. Тема же совсем про другого типа инструменты.




Ранг: 630.7 (!)
Статус: Участник
_Вечный_Студент_

Создано: 22 июля 2018 09:31 New!
Цитата · Личное сообщение · #9

я не понимаю о чем тут идет речь.
Тема эта очень далека от того, чем я занят профессионально, но очень хотелось бы в ней разобраться. Подскажите, что нужно почитать, что понять, чтобы "войти в тему".

но хотелось бы услышать не сумбурные выкрики, типа, "все это х..ня", а либо серьезное описание теории с основ, либо ссылки на источники, тоже с основ.
Спасибо!



Ранг: 79.2 (постоянный)
Статус: Участник

Создано: 22 июля 2018 09:41 New!
Цитата · Личное сообщение · #10

plutos пишет:
я не понимаю о чем тут идет речь.

Это знает только difexacaw..




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

Создано: 22 июля 2018 09:46 · Поправил: f13nd New!
Цитата · Личное сообщение · #11

plutos пишет:
я не понимаю о чем тут идет речь.

Код дробится на куски по инструкциям перехода, эти куски переносятся в буфер и исполняются там. Должно получиться контролируемое исполнение на порядки быстрей эмуляции. Ну и за счет примитивности надежней эмуляции. Для этого нужен дизассемблер длин и дизассемблер десятка-двух инструкций. Ну может еще функции внешних библиотек фильтровать, одни дать исполнить, другие имитировать, на третьих прекратить исполнение. Невероятно сложная техническая задача, которую можно мусолить по любому поводу и так и не реализовать. И главное побольше страшных непонятных слов для важности.

| Сообщение посчитали полезным: Vintersorg


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

Создано: 22 июля 2018 10:38 New!
Цитата · Личное сообщение · #12

plutos пишет:
Подскажите, что нужно почитать, что понять, чтобы "войти в тему".

f13nd уже ответил, но не сказал главного. В первую очередь нужно серьезно подсесть на препараты изменяющие состояние сознания. Бухло тоже подойдет, но его нужно много. Препараты всё-таки предпочтительнее, от них открываются порталы, из которых транслируются гениальные идеи для решения этой задачи. А если препаратов будет много, то уже порталы будут учиться гениальным идеям.




Ранг: 673.3 (! !)
Статус: Участник
CyberMonk

Создано: 22 июля 2018 11:33 · Поправил: mak New!
Цитата · Личное сообщение · #13

del

| Сообщение посчитали полезным: plutos



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

Создано: 22 июля 2018 14:12 · Поправил: difexacaw New!
Цитата · Личное сообщение · #14

Есть куча проблем, помимо основного алгоритма - он найден. К примеру это не сработает в мультизадачной среде - можно реализовать атомарный доступ к исполняемому буферу по указателю, но это нельзя сделать для AVL. Если попытаться синхронизировать через RWL, то встанет всё. Придётся реализовать сложный механизм деревьев с синхронной выборкой.

Как быть с обьединением блоков - если ветвление на блок, который заканчивается не ветвлением, а линейным блоком; можно их просто связать ветвлением. Но если это будет многократно вызываться, то нужна оптимизация - перестройка графа, а для этого нужен поток который будет это делать синхронно с записью.

Как быть с записью в код. Придётся разлаживать каждый блок на компоненты в статике и строить PFG. Иначе придётся использовать тормозной механизм исключений.

Что делать с case-branch ?
Если сохранять все ветви это потребует очень много памяти и время на анализ всего массива.

Как быть с рекурсивным вызовом визора ?
Тоесть из его тела должен быть доступен код, который под ним выполняется. Это была последняя решённая задача в визоре первого типа(dye), после чего я его больше не допиливал из за всей кучи таких проблем.

Главное что найден основной визор цикл, дальше нужно улучшать, оптимизировать, есть от чего отталкиваться.

Добавлено спустя 3 минуты
mak

Поиск оптимизации был нужен для решения задачи по защите от OP. DYE для этой задачи не пригоден, нельзя под ним запускать тяжёлые апп. Тесты обычно я выполнял на гуглохроме, просадка тайминга была десятикратной, это очень мало, учитывая что задержки компенсируются ожиданием в ядре(сервисами), поэтому без использования профайлеров отличить работу апп под визором было нельзя. Но этого не достаточно, для решения задачи OP необходимо строить граф выборки(PFG), что требует на порядок большей производительности. Эмуляция для этого не пригодна.

| Сообщение посчитали полезным: plutos



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

Создано: 22 июля 2018 14:23 New!
Цитата · Личное сообщение · #15

difexacaw пишет:
Как быть с записью в код

Действительно как? Если ты хочешь экономить на переносе нескольких байт несколько раз.




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

Создано: 22 июля 2018 14:28 · Поправил: difexacaw New!
Цитата · Личное сообщение · #16

f13nd

Я пока это не решил. Нормальный код себя не модифицирует до исполнения. Даже при распаковке. Так что это событие не частое. Может даже не нужно искать какое то решение, а просто запретить запись в оригинальный код. А есчо блок можно разложить на инструкции и выполнить первого типа визор цикл(копирование-исполнение), прежде пометив инструкцию при срабатывании ловушки.

Как минимум этого алго достаточно что бы в дальнейшем снять профайл на одном потоке и посмотреть имеет ли смысл подобная оптимизация. Может даже сложность не покроет выигрыш по профайлу.




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

Создано: 22 июля 2018 14:35 New!
Цитата · Личное сообщение · #17

difexacaw пишет:
Нормальный код себя не модифицирует до исполнения.

А по-моему это очень старая уловка, характерная для крипторов и протекторов. Позволяющая малваркам, как ты говоришь, иногда обманывать то, что их пытается анализировать.




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

Создано: 22 июля 2018 14:40 New!
Цитата · Личное сообщение · #18

f13nd

Это не важно при копировании каждый раз инструкции. После изменения инструкция вновь декодируется-копируется-исполняется. Но в данном случае такая задача появляется, так как используется копия оригинального кода.



Ранг: -0.7 (гость)
Статус: Участник

Создано: 22 июля 2018 20:26 New!
Цитата · Личное сообщение · #19

difexacaw пишет: Это не важно

нет, пока пишешь (допустим пишешь) на ассемблере, все остальное не имеет значения, фидбэка все равно не будет.



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

Создано: 22 июля 2018 20:54 New!
Цитата · Личное сообщение · #20

difexacaw
Вот шутки шутками, а какой смысл в этой софтине?
Ну, к примеру, допишите её в ближайшие несколько лет и что?
Для разбора малвари возможно и пойдет, но к тому времени антивирусные компании уже сделают что-то своё. А возможно у них уже есть что-то. Причем они реально пытаются применять всякие новомодные "машинные обучения" и прочий сатанизм.
Смысл то в чем? Для разбора защит возможно и пригодится, но их как сейчас разбирают, так и потом будут разбирать. Конечно не все подряд, а знающие люди.
А делать это для школоты, которая потом будет пытаться крякать проги направо и налево, так зачем?
А если получится прога, которую поймут и смогут пользоваться несколько человек, то смысла в этом нет.

Не проще ли направить усилия на что-то более реальное и востребованное?



Ранг: -0.7 (гость)
Статус: Участник

Создано: 22 июля 2018 21:08 New!
Цитата · Личное сообщение · #21

hypn0 пишет: Причем они реально пытаются применять всякие новомодные "машинные обучения"

они не пытаются, а давно как есть у всех крупных вендоров.




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

Создано: 22 июля 2018 21:48 · Поправил: difexacaw New!
Цитата · Личное сообщение · #22

hypn0

Визоры это не софт, это средства контроля, мониторы своего рода. Для чего они применяться могут, вот если пройти по последним темам:

Бэктрейс только так корректно можно выполнить --> Link <--

Распаковка именно через такого рода инстументы просто выполняется и прочая работа с кодом --> Link <--

Единственный способ мониторить системные события --> Link <--

Ловить cpuid --> Link <-- --> Link <--

Но для таких задач обычно профайл не важен. Это нужно что бы незаметно мониторить тяжёлые приложения, в частности блокировать OP-атаки. Иначе это никак не сделать.

--> Link <--
--> Link <--

Конкретный механизм я описывал тут --> Link <--



Ранг: 174.4 (ветеран)
Статус: Участник

Создано: 22 июля 2018 22:02 New!
Цитата · Личное сообщение · #23

difexacaw пишет:
Единственный способ мониторить системные события

ETW никто не отменял вроде



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

Создано: 22 июля 2018 22:02 · Поправил: hypn0 New!
Цитата · Личное сообщение · #24

shellstorm
Ну это я так мягко выразился.

difexacaw
Это всё отлично. Просто замечательно. Но мне, к примеру, как это поможет?
Я сейчас трассирую модуль от одной ужасно дорогой софтины. Там походу взяли исполняемый файл и накрыли каким-то ужасом, который расшифровывает его в процессе выполнения.
То есть вначале расшифровал часть, потом выполнилась часть проги, потом дальше расшифровал и так далее.
С таким ни один визор не справится. Да и нет его в живом виде. В результате вручную приходится.
Так что может Вы всё и правильно делаете, только когда это будет? К тому моменту я уже всё расковыряю.

Добавлено спустя 2 минуты
И таких прог у меня много.
Так что вместо разглагольствований я предпочитаю просто делать. По крайней мере это приносит результат.




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

Создано: 22 июля 2018 22:05 · Поправил: difexacaw New!
Цитата · Личное сообщение · #25

VOLKOFF

Через etw/wmi не получится обработать сервис, антидебаг к примеру реализовать. Да и это андок механизм очень толстый.



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

Создано: 22 июля 2018 22:06 · Поправил: SegFault New!
Цитата · Личное сообщение · #26

difexacaw пишет:
Визоры это не софт, это средства контроля, мониторы своего рода.
Для чего они применяться могут, вот если пройти по последним темам:

Бэктрейс только так корректно можно выполнить --> Link <--

Распаковка именно через такого рода инстументы просто выполняется и прочая работа с кодом --> Link <--

Единственный способ мониторить системные события --> Link <--

Ловить cpuid --> Link <-- --> Link <--

Но для таких задач обычно профайл не важен. Это нужно что бы незаметно мониторить тяжёлые приложения, в частности блокировать OP-атаки. Иначе это никак не сделать.

--> Link <--
--> Link <--

Конкретный механизм я описывал тут --> Link <--

бред в каждой строке
во-первых нет термина визор. Выдумав свой термин ты стал элиткой чтоле, лол. Есть DBI и есть куча нормальных реализаций которым лет по 10.

> Бэктрейс только так корректно можно выполнить --> Link
лютый бред, есть еще с пяток способов

>Распаковка именно через такого рода инстументы просто выполняется и прочая работа с кодом
есть еще 100500 способов

>Единственный способ мониторить системные события --> Link <--
садись два, есть вми есть етв есть гипервизоры есть хуки

>Ловить cpuid --> Link <-- --> Link <--
гипервизор делает это за 2 минуты, а ты свое говно пишешь год и результата нет

короче учи матчасть и не позорься

| Сообщение посчитали полезным: Bronco



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

Создано: 22 июля 2018 22:10 New!
Цитата · Личное сообщение · #27

hypn0

> С таким ни один визор не справится. Да и нет его в живом виде.

Я приводил пример выше --> Link <--

Первого типа визор(dye") был давно есчо написан, я где то тут его показывал, но там сразу как помню всё обосрали, так как оно на асме написано. В #19 shellstorm это наверно и имел ввиду.




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

Создано: 22 июля 2018 22:19 · Поправил: Bronco New!
Цитата · Личное сообщение · #28

SegFault пишет:
гипервизор делает это за 2 минуты

+1, и не пропускает, даже если вызов за пределами или под морфом, или ещё чем то там, + куча всяких плюшек, на вмэкситах. и это даже не вчера. с полным контролем не так всё просто, но событий достаточно, чтобы к нему приблизиться.
hypn0 пишет:
Какая-то тут тишина настала

плюсанул, ибо тролинг тонкий и порадовал с утреца.




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

Создано: 22 июля 2018 22:23 New!
Цитата · Личное сообщение · #29

Bronco

Гпв локально не применимо, да и это работает в совершенно разных модах, при этом нет даже прямого доступа к памяти. Это то самое из пушки да по воробьям.




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

Создано: 22 июля 2018 22:28 New!
Цитата · Личное сообщение · #30

difexacaw, согласен, инструмент не из лёгких, но ведь надёжный.
по пропускам ведь не из пальца высосал.


. 1 . 2 . 3 . >>
 eXeL@B —› Программирование —› Visor2.
Эта тема закрыта. Ответы больше не принимаются.

Видеокурс ВЗЛОМ