Сейчас на форуме: (+6 невидимых) |
eXeL@B —› Программирование —› code vs data. |
<< . 1 . 2 . 3 . |
Посл.ответ | Сообщение |
|
Создано: 23 декабря 2016 10:22 · Поправил: difexacaw · Личное сообщение · #1 Здрасти. Задача отличить код от данных. Тоесть имеем указатель на массив, нужно аналитически узнать что это код. Хотелось бы посмотреть что уже сделано. Когда то давно была попытка реализовать, толи deroco, толи есчо кто, не могу найти. Анализер иды не годится, он слишком толст и не профайл, а самое главное не умеет разбирать наверно дампы вне пе. ----- vx |
|
Создано: 26 апреля 2019 22:22 · Личное сообщение · #2 Vamit > А что с памятью, тут всё просто - любая память приложения обфускации не подлежит, т.к. к любой её области возможен косвенный доступ. В память могут быть выгружены части контекста. Тоесть она часть dfg. На счёт стека - согласен частично: операции с памятью предполагают её трансляцию, когда она прямо адресуется - это раскодировка modrm и есчо нескольких типов аресации. Для стековой адресации есть лишь несколько инструкций(push/pop/enter/leave) и в них не кодируется LA. Эта кстате фишка и у меня в визоре dye, просто такая трансляция не нужна, хотя несколько инструкций обработать не проблема. > Чтобы что-то написать надо знать что пишешь, я уже говорил, чтобы сделать девиртуализатор любой вм нужно полностью знать её структуру, иначе исходный код не получить. Но меня интересует общее решение, алгоритмы, а не ручной разбор. Именно у вас я спросил, так как с девиртом вы много поработали. Но не для частного решения. А что бы понять возможно ли общее. ----- vx |
|
Создано: 26 апреля 2019 22:59 · Личное сообщение · #3 difexacaw пишет: Но не для частного решения. А что бы понять возможно ли общее. возможно, см декомпилятор ильфака, там есть все эти live registers, деревья cfg, свертки и тд. и второй вариант - IL, на который натравливается любой оптимизирующий компилятор. Он за тебя уберет весь мусор. Потом кодогенерация для любой архитектуры, она и даст тебе готовый деобфусцированный код. Другое дело, что для того, чтобы это все запилить нужны месяцы если не годы. |
|
Создано: 26 апреля 2019 23:06 · Личное сообщение · #4 SegFault Во первых я сам хочу понять на алгоритмическом уровне и найти решение. Во вторых на том же гхб очень много всяких поделок, но я не представляю как какую то толстейшую и кривую сборку заюзать между например сервисной обраткой, между ядерными вызовами. У меня это разум отказывается принимать. ----- vx |
|
Создано: 27 апреля 2019 01:49 · Поправил: SegFault · Личное сообщение · #5 difexacaw а тут и не надо поделки читать, мне нравится подход vamit - типа я практик. Я тоже практик, и все эти доки,они может и важны, когда ты уже решил эту задачу и нашел потом совпадение с докой. Для меня они бесполезны. Если есть мозг и задача решаема в одиночку - то ты ее решишь. Доки лишь потом подтверждают твою работу как правило. Хотя может я тупой просто и не одупляю эту математику в доках. Но мне както ... |
|
Создано: 27 апреля 2019 10:05 · Поправил: Vamit · Личное сообщение · #6 Для стековой адресации есть лишь несколько инструкций(push/pop/enter/leave) и в них не кодируется LA. Нет, это неверное суждение. Всё что адресуется через SS сегмент - это стек, DS, ES, FS, GS - это память, CS - код. К стеку возможен произвольный доступ, как и к прочей памяти, но методы обработки стека и памяти совершенно разные. Вы пропустили важный момент - локальные переменные функции, аргументы вызова, а в некоторых случаях и возвращаемое значение находятся в стеке и всё это подвержено стековой обфускации. Но меня интересует общее решение, алгоритмы, а не ручной разбор. В третий раз повторю: Для девиртуализации ВМ общее решение невозможно, это истина, общим решением вы даже не сможете получить полный чистый виртуализованный код, вы даже не найдете в нем ни одного примитива, т.к. лента пикода шифрована и у каждого типа вм своя шифровка. Ваша мечта похожа на то, как одним дизасмом охватить все ассемблеры, но у каждого асма своя структура команд и пока вы не изучите структуру каждой команды исходный код (здесь асм) вам не видать, и с вм всё аналогично. ----- Everything is relative... |
|
Создано: 27 апреля 2019 13:16 · Поправил: f13nd · Личное сообщение · #7 Vamit пишет: Ваша мечта похожа на то, как одним дизасмом охватить все ассемблеры, но у каждого асма своя структура команд и пока вы не изучите структуру каждой команды исходный код ИмхО сравнение не очень подходит. В случае с архитектурой нету доступа к интерпретатору команд процессора, описанному каким-нибудь способом. У виртуальных машин все-таки интерпретатор в виде алгоритма есть и этот алгоритм можно по крайней мере пытаться машинным способом анализировать. По-моему эта задача пограничная с изобретением полноценного ИИ, но для имитации бурной деятельности и это сгодится. ----- 2 оттенка серого |
|
Создано: 27 апреля 2019 13:32 · Поправил: Vamit · Личное сообщение · #8 У виртуальных машин все-таки интерпретатор в виде алгоритма есть и этот алгоритм можно по крайней мере пытаться машинным способом анализировать. Не заблуждайтесь, тут тоже нет доступа, только ещё в отличии от асма тут каждая команда в ленте пикода шифрована уникальным алгоритмом и две совершенно одинаковые команды имеют разную шифровку, и пока не узнаете как вм шифрует свой пикод вы не продвинитесь дальше. Это раз, идем далее, даже если вы получили ленту пикода, то что далее? Каждый примитив в ней (пригодна аналогия с машинным кодом в асме) это набор команд асма выполняющих определенное действие, у каждой вм свой набор команд и действий, не зная их ваш дальнейший путь ведет в тупик... И так можно продолжать практически на каждом шаге девиртуализации, пока вы не реализуете обработку всех особенностей вм, а она у каждой вм своя, то девиртуализованного кода вам не видать. ----- Everything is relative... |
|
Создано: 27 апреля 2019 13:43 · Личное сообщение · #9 |
|
Создано: 27 апреля 2019 13:58 · Личное сообщение · #10 |
|
Создано: 27 апреля 2019 14:09 · Личное сообщение · #11 |
|
Создано: 27 апреля 2019 16:04 · Личное сообщение · #12 Vamit > Для девиртуализации ВМ общее решение невозможно Возможно, пока не доказано обратное. Вся суть девирта сводится к выделению некоторой функции, а далее её приведению к простому виду, соотвествующему конкретной инструкции. Если у вас проект древний как говно мамонта(9 лет ?) и всё там вручную(как я понял у вас даже нет функции сворачивания мусора), это не значит что на данный момент общим способом решить нельзя. Можно сделать проще, открыть протектор и вручную свернуть код, выделив мусор и функции. Что бы понять возможно ли решение автоматикой. Добавлено спустя 6 минут Vamit > команды имеют разную шифровку, и пока не узнаете как вм шифрует свой пикод вы не продвинитесь дальше. Что за шифровку". Есть некоторый код, полученный из оригинального и он выполняет некоторую функцию, которая может быть описана. Теоретически так как одна инструкция виртуализируется в не особо большое количество инструкций(как вы говорите), то вариантов для реализации функции лишь несколько и так как обычно это примитивные логические манипуляции, то обратить функцию по идеи не должно быть сложно. ----- vx |
|
Создано: 27 апреля 2019 16:30 · Личное сообщение · #13 difexacaw Флаг в руки, барабан на шею и вперед, лет через 10 может быть и поймете куда идете... ----- Everything is relative... | Сообщение посчитали полезным: difexacaw |
|
Создано: 27 апреля 2019 16:53 · Поправил: difexacaw · Личное сообщение · #14 Vamit Посмотрим. Так просто между делом на сколько помню вы даже самую элементарную задачу решить не могли А я нашёл общее решение Разберусь и с этим, тем более никаких причин для отказа поиска решения(его не возможности) я не увидел в данном обсуждении. ----- vx |
|
Создано: 27 апреля 2019 17:29 · Личное сообщение · #15 Vamit А помните в 2014 была презентация такого: http://2014.zeronights.org/assets/files/slides/deobfuscation-and-beyond.pdf difexacaw пишет: Так просто между делом на сколько помню вы даже самую элементарную задачу решить не могли У Вамита есть рабочий, созданный им собственноручно инструмент, которым он успешно решает задачи, развивает его и получает профит. Вуаля ! ----- ds |
|
Создано: 27 апреля 2019 17:33 · Поправил: difexacaw · Личное сообщение · #16 DimitarSerg Собранный вручную вбиванием шаблонов/сигнатур/правил за 10 лет!1 Добавлено спустя 12 минут Очень напоминает разработку простейшего антивируса, которому для обработки конкретного семпла нужны сигнатуры. Из миллионов возможных семплов.. Там тоже можно утверждать что общее решение невозможно, а каждый семпл уникален. Но это не так. Это лишь примитивность реализации. ----- vx |
|
Создано: 27 апреля 2019 18:15 · Поправил: Vamit · Личное сообщение · #17 |
|
Создано: 27 апреля 2019 18:25 · Поправил: difexacaw · Личное сообщение · #18 |
|
Создано: 27 апреля 2019 19:02 · Личное сообщение · #19 |
|
Создано: 27 апреля 2019 19:34 · Личное сообщение · #20 |
|
Создано: 27 апреля 2019 19:41 · Личное сообщение · #21 |
|
Создано: 27 апреля 2019 19:51 · Личное сообщение · #22 |
|
Создано: 27 апреля 2019 19:58 · Личное сообщение · #23 |
|
Создано: 27 апреля 2019 20:04 · Поправил: f13nd · Личное сообщение · #24 lx60 пишет: кроме обсирания других людей, ничего не сделано? Про детект кода в бинарниках он еще на первой странице резюмировал, что это невозможно (большинство с этим не согласились, но как тогда потом утверждать, что решил задачу, казавшуюся невозможной?). Про девиртуализацию он пока на пути к этому выводу, а обсирание других людей неотъемлемая часть процесса просто. ----- 2 оттенка серого |
|
Создано: 27 апреля 2019 20:09 · Личное сообщение · #25 SegFault Вероятно это вы меня не понимаете. lx60 > Тема создана в 2016 году. ТС-ом, кроме обсирания других людей, ничего не сделано? Задача по данной теме решена, реализовать нт анклав возможно если вам это интересно На этом пока закончим. Тему я закрою что бы не гадили. мне нужно время подумать. ----- vx |
|
Создано: 28 апреля 2019 13:04 · Личное сообщение · #26 Из собственного опыта скажу, что сгенерить код, не зная и не исследуя ВМ, нельзя. Проблема будет как минимум в ветвлениях. Т.е. тут придётся ставить костыли так или иначе. Что касается деобфускации (а девм это её частный случай), то её можно сделать генерик. Да, результат получится более стрёмный и менее похожий на код исходный. В частности, кода может быть раза в 2 больше и весь как перелопаченный. Но в принципе при желании это будет юзабельно, всё же разобрать вместо 30 инструкций 60 всяко лучше, чем 60к. |
<< . 1 . 2 . 3 . |
eXeL@B —› Программирование —› code vs data. |
Эта тема закрыта. Ответы больше не принимаются. |