Сейчас на форуме: (+9 невидимых) |
eXeL@B —› Протекторы —› Декомпилятор ВМ |
<< 1 ... 18 . 19 . 20 . 21 . 22 . 23 . 24 . >> |
Посл.ответ | Сообщение |
|
Создано: 03 марта 2010 12:33 · Личное сообщение · #1 Вашему вниманию предлагаются наработки по декомпиляции ВМ. Проект на сегодняшний день для меня завершен, но жаль если результат "ляжет на полку", может кому-нибудь и пригодится. Предлагаю сначала ознакомиться с обзором, и если будет интерес то могу выложить и сам плагин, или здесь или в личку заинтересованным лицам, каким образом, пока ещё не решил... Но если кто-либо ожидает увидеть "автоматическое чудо", то сразу скажу - его нет. Для того чтобы получить результат нужна ручная предварительная работа: - с исследуемой программы должна быть снята упаковка - точки входа в ВМ находятся вручную - возможно неоднократное "жамкание" клавиш в OllyDbg, а возможно и модификация кода, чтобы попасть в нужное место, в зависимости от защищенной функции - необходимо вручную прицепить к программе требуемый секцию - запись результатов в файл это тоже ручная работа, но уже более приятная Не всё гладко обстоит с определением реализаций ВМ, на сегодняшний день примерно каждая третья реализация автоматом не определяется, приходится под неё модернизировать плагин, т.к. не могу сразу предусмотреть все случаи "издевательств" ВМ с кодом примитивов. Лучше дела с восстановлением "исходного" кода защищенных функций - 70% нормально восстанавливается, хотя во многом это зависит от самой структуры функции. Таким образом, если будет заинтересованность и помощь в нахождении подобных ситуаций, то проект может быть доведен до релизной стадии. ЗЫ: Речь идет об Ореановских машинах. Нигде специально не упоминал. 9c41_03.03.2010_CRACKLAB.rU.tgz - VMSweeperLst.rar ----- Everything is relative... |
|
Создано: 19 февраля 2017 01:53 · Поправил: difexacaw · Личное сообщение · #2 Bronco У них своя трава, без которой ничего понять нельзя. Как и что реализовано, главное же методы/техники - ничего этого нет. Вообще о чём тема не ясно, только в названии есть отрешённый смысл. Главное технология. Алгоритмы и механизмы. Но тут ничего такого нет, кроме поливания говном. Да они даже галимую операцию не могут провернуть - выделить код, а постят его с овер дохера ветвлений, которые вручную в отладчике прошли Я так понял что это всё школота(без обид тока), далёкая от современных технологий. Задрачивать вручную какой то говнокод месяцами и всей конторой - круто что уж ----- vx |
|
Создано: 19 февраля 2017 02:18 · Поправил: Bronco · Личное сообщение · #3 difexacaw пишет: Вообще о чём тема не ясно ну типо радуемся за автора, что он чего-то там декомпилит, сопереживаем когда трудности, лезем с вопросоами_советами, считаем что это важно для многих, со злым расчётом, что может что-то перепадёт и себе. так то да, я согласен, что в большинстве ни о чём, свип_паблик у меня практически ничего полезного не отрыгивает. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 19 февраля 2017 02:25 · Личное сообщение · #4 Bronco За термином декомпиляция скрывается очень много предшествующих технологий и ни одна из них небыла упомянута или реализована. Это тупо ручной разбор виртуальной машины. Не нужно думаю описывать почему это г. ----- vx | Сообщение посчитали полезным: Bronco |
|
Создано: 19 февраля 2017 11:23 · Поправил: Vamit · Личное сообщение · #5 Bronco пишет: Что значит "пакетный вызов" ?это передача управления на другой метод под виртой, с восстановлением контекста цпу, или другое?адрес возрата уникален или меняется? вопросов много, оссобено по терминам. требую новый словарь Все, кто в теме вмпрота, уж это должны знать - объяснялось неоднократно. Но могу и повторить: Пакетный вызов - вызов из виртуализованной функции другой виртуализованной функции без выхода из вм. Контекст ВМ - состояние вм в конкретной точке обработки данных. Реальные регистры CPU никакой роли внутри вм не играют, она о них просто не знает, как не знает программа написанная чисто на С++ без вставок ассемблера. У вм есть свои регистры, и их гораздо больше, чем реальных регистров, в них и находится её контекст. Регистры вм не имеют конкретного назначения, они все эквивалентны и информация в них тасуется на каждой точке условного перехода, как карты в колоде. Адрес возврата - на такой вопрос даже стыдно отвечать, возврат - он и в Африке возврат. Все должны знать куда вернется управление после вызова простого call xxx, а пакетный вызов - тот же call, ток без выхода из вм. Нового словаря не будет, есть старый - конечно, в этой теме уже найти что-то полезное сложно, уже 7 лет ей, но возможно. Все что было до 3его прота подробно описано в статье Protect&Sweeper, кому нужно найти её не проблема. Конечно 3ий прот вносит много нового, но не настолько, чтобы это не понять, если ты в теме. difexacaw пишет: Но тут ничего такого нет, кроме поливания говном. Я никого не поливал и не оскорблял, культурно попросил не мусорить. Если для вас нет ничего интересного, то пройдите мимо. Но похоже моя просьба - как горох об стенку... Bronco пишет: свип_паблик у меня практически ничего полезного не отрыгивает Три года, как ничего нового в паблике нет, он ничего и не отрыгнет, вмпрот на месте не стоит и чем больше его темных мест здесь открывается, тем больше он крепчает. Все его внутренности по девиртуализации мне известны, не раскрыты пока механизмы протекта приложений, распаковки образов и их запуск. Но не было необходимости в этом... difexacaw пишет: За термином декомпиляция скрывается очень много предшествующих технологий и ни одна из них небыла упомянута или реализована. Это тупо ручной разбор виртуальной машины. У меня используются такие технологии, которые вам и не снились. Деобфускация кода - выполняется полностью автоматом, покажите в паблике хоть один приличный деобфускатор. Девиртуализация инструкций, восстановление регистров CPU и многое другое. Результат автоматической работы - чистый исходный код виртуализованных функций. Да, я не спорю, есть и проблемы, а у кого же их нет, но не из-за того что что-то не решено, а из-за такой разновидности замешанного в чистый код дерьма, что все возможные варианты сразу и не предугадаешь. ----- Everything is relative... | Сообщение посчитали полезным: oldman |
|
Создано: 19 февраля 2017 13:43 · Личное сообщение · #6 Bronco пишет: Что значит "пакетный вызов" ? Это тоже самое, что мы обсуждали ранее в теме про Денуво Состояние задачи - Программирование в стиле передачи продолжений (англ. Continuation-passing style, CPS). Хаха как видно в информатике нет каких-то мифических технологий, которые никто не понимает ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 19 февраля 2017 18:07 · Поправил: Bronco · Личное сообщение · #7 mak пишет: Это тоже самое, да собственно в моём вопросе и был уже ответ, нужно было только подтвердить либо более точнее аргументировать. Vamit пишет: Адрес возврата - на такой вопрос даже стыдно отвечать, возврат - он и в Африке возврат. Ок..я поясню, почему спросил про уникальность адреса возврата. Были частые случаи, особенно при "онлайн проверках" под морфом, когда выход на макрос цпу и адрес возврата не были уникальными, и вплоть до 7 вариантов. Хотя сам адрес исполнения не менялся. Но и там перестраховывались, формируя один указатель из 3 мест, один для записи, один для исполнения, и последний для перезаписи, мало того у этих из массива есть ещё и дубликаты. Vamit пишет: и чем больше его темных мест здесь открывается, тем больше он крепчает аналог Вашего плагина, только для фимки , хоть и сам проект заброшен, но плаг на паблике и до сих живой, пипл его активно подтачивает. а по обфускации фимка забойней будет, да и по ходу тон реализации первая задаёт. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 19 февраля 2017 19:15 · Личное сообщение · #8 Bronco пишет: когда выход на макрос цпу и адрес возврата не были уникальными, и вплоть до 7 вариантов. Может быть и такое, я насчитал 6 вариантов, никто же не запрещает пакетной функции вызвать другие функции, как открытые, так и виртуализованные. К тому часто встречается такая конструкция выхода из функции - jmp на другую функцию, по окончанию которой управление вернется в нужную точку. Но это всё внутренности вызываемой функции, я же рассматривал только метод возврата из пакетного вызова. А внутри вм можно увидеть всё что угодно, т.к. все ветвление кода выполняется всего двумя примитивами вм: Cmd_Jmp - любое ветвление без выхода из вм (безусловные и условные переходы, вход в любую пакетную функцию, выход из модифицированной пакетной функции, реализация табличных switch конструкций 2х видов, переходы в другую вм без возврата в текущую). Cmd_Exit - любой выход в открытый код (вызовы открытых функций, переходы на открытые места, ret из виртуализованной функции, выполнение отдельных невиртуализованных инструкций, выход из обычного пакетного вызова). А понять что же это на самом деле можно только по адресу возврата. ----- Everything is relative... |
|
Создано: 19 февраля 2017 19:28 · Личное сообщение · #9 |
|
Создано: 19 февраля 2017 19:30 · Личное сообщение · #10 |
|
Создано: 19 февраля 2017 19:43 · Личное сообщение · #11 Bronco пишет: так всё таки свитчи есть? Да как и в открытом коде, простой табличный jmp [addr + offset], так и через доп. таблицу индексов, но ещё раз повторю к выходу из любой функции это отношения не имеет - это все тело функции. Открытый же код виртуализуется..., а ещё я забыл упомянуть в предыдущем посте об вызовах виртуализованных обработчиков исключений. ----- Everything is relative... |
|
Создано: 19 февраля 2017 19:44 · Личное сообщение · #12 difexacaw пишет: а говорите бесполезен я допустим так не считаю. любая аргументация, пусть и ошибочная, при оппонировании может сгенерировать интересные решения. В этом смысл обмена мнениями и инфо. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. | Сообщение посчитали полезным: DenCoder |
|
Создано: 20 февраля 2017 00:25 · Личное сообщение · #13 |
|
Создано: 20 февраля 2017 02:53 · Личное сообщение · #14 |
|
Создано: 20 февраля 2017 03:24 · Личное сообщение · #15 |
|
Создано: 20 февраля 2017 03:29 · Личное сообщение · #16 |
|
Создано: 17 августа 2017 17:50 · Личное сообщение · #17 Vamit пишет: Статья Protect&Sweeper содержит основные материалы этой темы по алгоритмам защиты ВмПротекта и методам их устранения Свипером с добавлением эксклюзивного нигде ранее не опубликованного материала. Будет полезна всем, имеющим дело с декомпилятором и протектором. А ни у кого случайно не осталась эта статья? |
|
Создано: 17 августа 2017 18:16 · Поправил: Tyrus · Личное сообщение · #18 Вот она, как раз недавно читал 1853_17.08.2017_EXELAB.rU.tgz - Protect&Sweeper.pdf | Сообщение посчитали полезным: GameMod, bartolomeo, mushr00m |
|
Создано: 17 августа 2017 18:39 · Личное сообщение · #19 |
|
Создано: 17 августа 2017 19:21 · Личное сообщение · #20 А что это ? Какое то описание как вручную что то анализить и большая часть дока макросы, девирт инструкции в вм. Зачем это, всегда в подобных статьях рассматривается законченное решение, автоматика и тесты её, результаты. Зачем описывать макро в доке, которое смысла не содержит(не имеет значения для отражения сути статьи). Просто что бы было. Щас авторы доку почитают и чучуть изменят механизм, завтра можно распечатать и сходить использовать ----- vx |
|
Создано: 17 августа 2017 19:41 · Личное сообщение · #21 difexacaw пишет: Какое то описание как вручную что то анализить и большая часть дока макросы, девирт инструкции в вм. Зачем это, всегда в подобных статьях рассматривается законченное решение, автоматика и тесты её, результаты. Зачем описывать макро в доке, которое смысла не содержит(не имеет значения для отражения сути статьи). Просто что бы было. Щас авторы доку почитают и чучуть изменят механизм, завтра можно распечатать и сходить использовать Автор просто хотел донести свою позицию, своё "видение" ВМ, кому-то эта дока помогла, но подобные доки быстро теряют свою актуальность и судя по последним версиям прота, это уже произошло. | Сообщение посчитали полезным: mushr00m |
|
Создано: 18 августа 2017 18:09 · Личное сообщение · #22 |
|
Создано: 18 августа 2017 20:44 · Поправил: difexacaw · Личное сообщение · #23 bartolomeo > чтобы каждый смог написать себе тулзы под конкретные задачи Наверное ты не понимаешь что я говорю. Врядле уже это описание актуально, аверы так быстро даже не фиксят. Написание какого то инструмента займёт времени в сотни раз больше, чем время актуальности данной инфы в пдфке. Это всё сигнатурки, а не какое то общее знание или алгоритм, а по сему спустя сутки ваши эти макросы уже deprecated. ----- vx | Сообщение посчитали полезным: mushr00m |
|
Создано: 19 августа 2017 11:44 · Личное сообщение · #24 Не знаю о какой актуальности ты говоришь - но ещё в начале темы давался список хендлеров без обфускации Оренсовской ВМ, (кажется OKOB) выкладывал они есть и в этой доке - так вот вполне себе актуальный проект месячной давности - и там используется старый добрый ореанс со всё теми же обработчиками ). |
|
Создано: 25 декабря 2017 15:21 · Личное сообщение · #25 Пришло время подумать о будущем Свипера. Обе Ольки себя исчерпали (кому интересно выше в теме об этом много написано), а хотелось бы добавить декомпиляцию других вм и 64 разрядного кода. В рассмотрении находятся Ида и x32/64dbg, всё остальное на текущий момент не заслуживает внимания. Сделал несколько тестов и пришел к выводу что реализовать полноценный декомпилятор вм под Ида не получится по следующим причинам: - Ущербный дебаггер не предназначенный для анализа защищенного кода (как минимум отсутствуют System BP и Break on TLS а так же игнор всех исключений) - ScillaHide не работает даже под 32х разрядной Ида 6.8 или у дебаггера свои заморочки, но эффекта от этого плагина ноль. - Под Иду х64 вообще нет инструментов AntiAntiDebug. Попробовал на том же приложении x32/64dbg, он успешно всё отработал со ScillaHide под моей операционкой Win 10 Pro как для 32х так и 64х разрядного кода. Возможны 2 варианта реализации декомпилятора: 1. Полнофункциональный плагин под x32/64dbg, при беглом просмотре его SDK вроде бы там всё есть. Но здесь получится как в Ольке - после восстановления исходного асм кода функции затруднен (и вообще возможен ли) реверс его в исходный язык высокого уровня и хотя там есть декомпилятор Snowman, но его возможности мне неизвестны. Придется переносить код восстановленной функции в Иду (в которую загружен дамп распакованного приложения) и затем уже его реверсить. 2. Делаем два плагина: - Первый под x32/64dbg по восстановлению импорта пожранного протектором. Далее создается полный дамп распакованного образа, который загружается в Ида. - Второй, собственно сам декомпилятор вм, работающий в Ида на загруженном дампе. Здесь есть вопрос - всё ли нужное Свиперу будет в дампе, т.к. дамп в данном случае не будет рабочим. Хотелось бы услышать аргументированные ответы по выбору варианта... ----- Everything is relative... |
|
Создано: 25 декабря 2017 15:34 · Личное сообщение · #26 |
|
Создано: 25 декабря 2017 15:40 · Поправил: Vamit · Личное сообщение · #27 shellstorm пишет: snowman непригоден для разбора говнокода Вы меня не так поняли, в этой фразе идет речь о "реверсе в исходный язык высокого уровня". Для меня конечная задача не получить исходный код функции на асме, а выполнить его реверс в исходный язык. А протекторы и вм только этому мешают, т.ч. промежуточная задача устранить их и только её решает декомпилятор вм. ЗЫ: В Ида для этой цели есть хексрей, по аналогии в x64dbg - Snowman ----- Everything is relative... |
|
Создано: 25 декабря 2017 15:51 · Поправил: shellstorm · Личное сообщение · #28 Хм, я так понял из упоминания snowman, что после деобфускации\девирта следующий задачей является получение c\c++ исходника, вот для этой задачи snowman непригоден, а retdec можно использовать, как ida плагин, который по сути является клиентом делающий запрос к серверу который является консольной реализацией retdec. Ну или уточните, что вы имеете ввиду под языком высокого уровня, c\c++\ir\esil\reil\etc? В таком случае retdec подходит под задачу, более того, на хабе мистера уже поднимали тему по поводу создания плагина для x64dbg. Серверу можно слать функции по отдельности или сразу пакетом, ну или дампить таргет и натравливать его на дамп, а после результат отправлять в отладчик. |
|
Создано: 25 декабря 2017 15:59 · Личное сообщение · #29 |
|
Создано: 25 декабря 2017 16:08 · Поправил: shellstorm · Личное сообщение · #30 Vamit пишет: Значит я понял вашу фразу буквально snowman непригоден для разбора говнокода, но чистый асм после декомпилятора вм не является говнокодом. Остается мусор и избыточность, а у снежка довольно жесткие паттерны для asm конструкций и на таком коде выхлоп оставляет желать лучшего, он и на чистом коде не особо впечатляет. Проще переписать плагин: https://github.com/avast-tl/retdec-idaplugin под x64dbg, тем более кода там всего ничего, довольно качественный декомпилятор и от разработчиков отлик нормальный, можно озадачивать неправильной декомпиляцией или ошибками. Само ядро незачем тянуть в плагин, после постоянно догонять разработчиков, пусть у них голова болит со сборкой, для активного проекта клиент\сервер лучший вариант, к тому же если ляжет ядро (а там есть еще нерешенные проблемы с памятью), ляжет все и отладчик в том числе, а если отвалится сервер, это не критично, перезапустить и дальше спокойно работать. |
|
Создано: 25 декабря 2017 16:14 · Личное сообщение · #31 Vamit пишет: при беглом просмотре его SDK вроде бы там всё есть как хайдить уже обсуждалось. для кьютовского гуя нечего нет скриптовое двигло можно наращивать своим функционалом, это большой плюс. асм двиги слабое место. асмжт не воспринимает лоченные инструкции, кеды кобеняться с отрицательными числами без знака в шестнадцатеричном, кейстоун что то среднее, между первыми двумя. Капстоновская структура диза очень хороша. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. | Сообщение посчитали полезным: Vamit |
<< 1 ... 18 . 19 . 20 . 21 . 22 . 23 . 24 . >> |
eXeL@B —› Протекторы —› Декомпилятор ВМ |