Сейчас на форуме: (+6 невидимых)

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


Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 23 декабря 2016 10:22 · Поправил: difexacaw
· Личное сообщение · #1

Здрасти.

Задача отличить код от данных. Тоесть имеем указатель на массив, нужно аналитически узнать что это код. Хотелось бы посмотреть что уже сделано. Когда то давно была попытка реализовать, толи deroco, толи есчо кто, не могу найти. Анализер иды не годится, он слишком толст и не профайл, а самое главное не умеет разбирать наверно дампы вне пе.

-----
vx





Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 26 апреля 2019 22:22
· Личное сообщение · #2

Vamit

> А что с памятью, тут всё просто - любая память приложения обфускации не подлежит, т.к. к любой её области возможен косвенный доступ.

В память могут быть выгружены части контекста. Тоесть она часть dfg. На счёт стека - согласен частично: операции с памятью предполагают её трансляцию, когда она прямо адресуется - это раскодировка modrm и есчо нескольких типов аресации. Для стековой адресации есть лишь несколько инструкций(push/pop/enter/leave) и в них не кодируется LA. Эта кстате фишка и у меня в визоре dye, просто такая трансляция не нужна, хотя несколько инструкций обработать не проблема.

> Чтобы что-то написать надо знать что пишешь, я уже говорил, чтобы сделать девиртуализатор любой вм нужно полностью знать её структуру, иначе исходный код не получить.

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

-----
vx




Ранг: 44.8 (посетитель), 19thx
Активность: 0.040
Статус: Участник

Создано: 26 апреля 2019 22:59
· Личное сообщение · #3

difexacaw пишет:
Но не для частного решения. А что бы понять возможно ли общее.

возможно, см декомпилятор ильфака, там есть все эти live registers, деревья cfg, свертки и тд.
и второй вариант - IL, на который натравливается любой оптимизирующий компилятор. Он за тебя уберет весь мусор. Потом кодогенерация для любой архитектуры, она и даст тебе готовый деобфусцированный код. Другое дело, что для того, чтобы это все запилить нужны месяцы если не годы.




Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 26 апреля 2019 23:06
· Личное сообщение · #4

SegFault

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

-----
vx




Ранг: 44.8 (посетитель), 19thx
Активность: 0.040
Статус: Участник

Создано: 27 апреля 2019 01:49 · Поправил: SegFault
· Личное сообщение · #5

difexacaw
а тут и не надо поделки читать, мне нравится подход vamit - типа я практик. Я тоже практик, и все эти доки,они может и важны, когда ты уже решил эту задачу и нашел потом совпадение с докой. Для меня они бесполезны. Если есть мозг и задача решаема в одиночку - то ты ее решишь. Доки лишь потом подтверждают твою работу как правило. Хотя может я тупой просто и не одупляю эту математику в доках. Но мне както ...




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 27 апреля 2019 10:05 · Поправил: Vamit
· Личное сообщение · #6

Для стековой адресации есть лишь несколько инструкций(push/pop/enter/leave) и в них не кодируется LA.
Нет, это неверное суждение. Всё что адресуется через SS сегмент - это стек, DS, ES, FS, GS - это память, CS - код. К стеку возможен произвольный доступ, как и к прочей памяти, но методы обработки стека и памяти совершенно разные. Вы пропустили важный момент - локальные переменные функции, аргументы вызова, а в некоторых случаях и возвращаемое значение находятся в стеке и всё это подвержено стековой обфускации.

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

-----
Everything is relative...





Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 27 апреля 2019 13:16 · Поправил: f13nd
· Личное сообщение · #7

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

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

-----
2 оттенка серого





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 27 апреля 2019 13:32 · Поправил: Vamit
· Личное сообщение · #8

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

-----
Everything is relative...





Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 27 апреля 2019 13:43
· Личное сообщение · #9

Vamit пишет:
Не заблуждайтесь, тут тоже нет доступа

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

-----
2 оттенка серого





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 27 апреля 2019 13:58
· Личное сообщение · #10

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

-----
Everything is relative...





Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 27 апреля 2019 14:09
· Личное сообщение · #11

Vamit пишет:
при вашем подходе возможно только

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

-----
2 оттенка серого





Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 27 апреля 2019 16:04
· Личное сообщение · #12

Vamit

> Для девиртуализации ВМ общее решение невозможно

Возможно, пока не доказано обратное.
Вся суть девирта сводится к выделению некоторой функции, а далее её приведению к простому виду, соотвествующему конкретной инструкции.
Если у вас проект древний как говно мамонта(9 лет ?) и всё там вручную(как я понял у вас даже нет функции сворачивания мусора), это не значит что на данный момент общим способом решить нельзя.

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

Добавлено спустя 6 минут
Vamit

> команды имеют разную шифровку, и пока не узнаете как вм шифрует свой пикод вы не продвинитесь дальше.

Что за шифровку". Есть некоторый код, полученный из оригинального и он выполняет некоторую функцию, которая может быть описана. Теоретически так как одна инструкция виртуализируется в не особо большое количество инструкций(как вы говорите), то вариантов для реализации функции лишь несколько и так как обычно это примитивные логические манипуляции, то обратить функцию по идеи не должно быть сложно.

-----
vx





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 27 апреля 2019 16:30
· Личное сообщение · #13

difexacaw
Флаг в руки, барабан на шею и вперед, лет через 10 может быть и поймете куда идете...

-----
Everything is relative...


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


Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 27 апреля 2019 16:53 · Поправил: difexacaw
· Личное сообщение · #14

Vamit

Посмотрим.
Так просто между делом на сколько помню вы даже самую элементарную задачу решить не могли --> Link <--

А я нашёл общее решение --> Link <--

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

-----
vx





Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 27 апреля 2019 17:29
· Личное сообщение · #15

Vamit
А помните в 2014 была презентация такого:
http://2014.zeronights.org/assets/files/slides/deobfuscation-and-beyond.pdf

difexacaw пишет:
Так просто между делом на сколько помню вы даже самую элементарную задачу решить не могли

У Вамита есть рабочий, созданный им собственноручно инструмент, которым он успешно решает задачи, развивает его и получает профит. Вуаля !

-----
ds





Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 27 апреля 2019 17:33 · Поправил: difexacaw
· Личное сообщение · #16

DimitarSerg

Собранный вручную вбиванием шаблонов/сигнатур/правил за 10 лет!1

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

-----
vx





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 27 апреля 2019 18:15 · Поправил: Vamit
· Личное сообщение · #17

А помните в 2014 была презентация такого
Конечно помню, там только обфускация, в ней вм нет, а речь идет о виртуализации. Любая обфускация с любого кода убирается на автомате при написании соответствующих правил.

-----
Everything is relative...





Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 27 апреля 2019 18:25 · Поправил: difexacaw
· Личное сообщение · #18

Vamit

А какая разница между морфом/обфускацией или виртуализацией ?
По мойму разницы никакой нет, кроме названия.

-----
vx





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 27 апреля 2019 19:02
· Личное сообщение · #19

А какая разница между морфом/обфускацией или виртуализацией ?
Вот когда хоть одну вм изучишь - тогда и поймешь.

-----
Everything is relative...




Ранг: 44.8 (посетитель), 19thx
Активность: 0.040
Статус: Участник

Создано: 27 апреля 2019 19:34
· Личное сообщение · #20

difexacawdifexacaw пишет:

А какая разница между морфом/обфускацией или виртуализацией ?
По мойму разницы никакой нет, кроме названия.

пиздец у тебя вопросы, тебе реально в теории сперва прокачатся надо, прежде чем с вамитом спорить




Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 27 апреля 2019 19:41
· Личное сообщение · #21

SegFault

В какой именно теории ?

Я рассматриваю всякий код как некоторую функцию, с зависимостями в виде cfg и dfg. В таком виде хардкод не уместен, просто его не может быть. И я с вамитом не спорю, я хотел узнать его мнение, я его узнал, спасибо большое ему за всё.

-----
vx




Ранг: 7.1 (гость), 6thx
Активность: 0.040.01
Статус: Участник

Создано: 27 апреля 2019 19:51
· Личное сообщение · #22

Тема создана в 2016 году. ТС-ом, кроме обсирания других людей, ничего не сделано?



Ранг: 44.8 (посетитель), 19thx
Активность: 0.040
Статус: Участник

Создано: 27 апреля 2019 19:58
· Личное сообщение · #23

difexacaw пишет:
В какой именно теории ?

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




Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 27 апреля 2019 20:04 · Поправил: f13nd
· Личное сообщение · #24

lx60 пишет:
кроме обсирания других людей, ничего не сделано?

Про детект кода в бинарниках он еще на первой странице резюмировал, что это невозможно (большинство с этим не согласились, но как тогда потом утверждать, что решил задачу, казавшуюся невозможной?). Про девиртуализацию он пока на пути к этому выводу, а обсирание других людей неотъемлемая часть процесса просто.

-----
2 оттенка серого





Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 27 апреля 2019 20:09
· Личное сообщение · #25

SegFault

Вероятно это вы меня не понимаете.

lx60

> Тема создана в 2016 году. ТС-ом, кроме обсирания других людей, ничего не сделано?

Задача по данной теме решена, реализовать нт анклав возможно если вам это интересно --> Link <--. Я начал обсуждение в этой теме, так как у Vamit нет активности, я говорил.

На этом пока закончим. Тему я закрою что бы не гадили. мне нужно время подумать.

-----
vx





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 28 апреля 2019 13:04
· Личное сообщение · #26

Из собственного опыта скажу, что сгенерить код, не зная и не исследуя ВМ, нельзя. Проблема будет как минимум в ветвлениях. Т.е. тут придётся ставить костыли так или иначе.
Что касается деобфускации (а девм это её частный случай), то её можно сделать генерик. Да, результат получится более стрёмный и менее похожий на код исходный. В частности, кода может быть раза в 2 больше и весь как перелопаченный. Но в принципе при желании это будет юзабельно, всё же разобрать вместо 30 инструкций 60 всяко лучше, чем 60к.


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