Сейчас на форуме: (+9 невидимых) |
eXeL@B —› Протекторы —› Декомпилятор ВМ |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 23 . 24 . >> |
Посл.ответ | Сообщение |
|
Создано: 03 марта 2010 12:33 · Личное сообщение · #1 Вашему вниманию предлагаются наработки по декомпиляции ВМ. Проект на сегодняшний день для меня завершен, но жаль если результат "ляжет на полку", может кому-нибудь и пригодится. Предлагаю сначала ознакомиться с обзором, и если будет интерес то могу выложить и сам плагин, или здесь или в личку заинтересованным лицам, каким образом, пока ещё не решил... Но если кто-либо ожидает увидеть "автоматическое чудо", то сразу скажу - его нет. Для того чтобы получить результат нужна ручная предварительная работа: - с исследуемой программы должна быть снята упаковка - точки входа в ВМ находятся вручную - возможно неоднократное "жамкание" клавиш в OllyDbg, а возможно и модификация кода, чтобы попасть в нужное место, в зависимости от защищенной функции - необходимо вручную прицепить к программе требуемый секцию - запись результатов в файл это тоже ручная работа, но уже более приятная Не всё гладко обстоит с определением реализаций ВМ, на сегодняшний день примерно каждая третья реализация автоматом не определяется, приходится под неё модернизировать плагин, т.к. не могу сразу предусмотреть все случаи "издевательств" ВМ с кодом примитивов. Лучше дела с восстановлением "исходного" кода защищенных функций - 70% нормально восстанавливается, хотя во многом это зависит от самой структуры функции. Таким образом, если будет заинтересованность и помощь в нахождении подобных ситуаций, то проект может быть доведен до релизной стадии. ЗЫ: Речь идет об Ореановских машинах. Нигде специально не упоминал. 9c41_03.03.2010_CRACKLAB.rU.tgz - VMSweeperLst.rar ----- Everything is relative... |
|
Создано: 06 апреля 2010 20:58 · Поправил: V0ldemAr · Личное сообщение · #2 |
|
Создано: 06 апреля 2010 21:08 · Поправил: Модератор · Личное сообщение · #3 Обработчики почти не меняются. Возможно добавляются новые, но я не слежу. Меняется довольно сильно CRC (или как некоторые называют его HASH), хотя общий смысл этой виртуальной инструкции ловится эвристикой. Также меняется обфускация, но она меняется с каждой новой компиляцией. Обфускация обработчиков довольно легко устраняется. Jcc я пока не разбирал детально, но вроде анализ флагов через NOR и последующий JMP VM_ESP (mov esi, [ebp+0], add ebp, 4). Сейчас гляну и уточню, давно хотел. V0ldemAr пишет: Извиняюсь херню написал Почему это? В обсиде, например, есть выделенная инструкция Jcc, она работает от параметра. В вмпротекте выделенной инструкции нет, поэтому вопрос вполне корректный. |
|
Создано: 07 апреля 2010 10:21 · Личное сообщение · #4 progopis пишет: Обрадую вас, в вмпротект нет условных переходов, вообще. Что будете делать? Уважаемый progopis, всё что я писал в своем обзоре относится только к Ореановским ВМ (CodeVirtualizer в частности), на тот момент внутренности VMProtect'а я и в глаза не видел, поэтому, когда увижу, тогда и скажу что делать и в каком случае. К сведению, в CV тоже нет условных переходов как таковых, но они есть в любом случае в защищаемой функции, и "ветвление" пикода будет и в ВМ. Всё, что есть обзоре - истина, если можете опровергнуть, то пожалуйста, аргументируйте, но не таким образом - Неверно . progopis пишет: Вывод: с мат. частью проблемы. Хорошие идеи есть и их очень много, но не уверен, что идеи авторские. Понимайте как хотите, но всё что сказано и сделано - это только моё, "умных" мат. книжек примерно лет 20 уже не читал, отсюда и вывод у вас может быть такой, я же скажу проще - мы говорим об одном и том же на разных языках, я на "русском", вы на "английском", суть от этого не меняется - меняется только понимание самой сути, но кто захочет понять - тому не важен язык на каком она изложена, если это ещё и подкреплено практическим исполнением. А идея декомпиляции ВМ появилась ----- Everything is relative... |
|
Создано: 07 апреля 2010 12:13 · Личное сообщение · #5 Позвольте уточню. В вашей документации вы даёте чуть ли не определения понятий, при этом рассматривая их под призмой конкретной ВМ. Также вы пытаетесь сделать продукт универсальный сразу для всех широко применяемых типов ВМ, отталкиваясь от наработок по конкретной ВМ. И вот тут могут быть проблемы. Я тоже занимался сначала одной ВМ (и работу эту мы сделали до конца), рассчитывая создать базу для других ВМ. Но вот только зубы обломал. Движок оказался настолько не универсальным, что его пришлось переписывать чуть ли не с нуля. А всё потому, что сначала надо было ознакомиться с проблемой, изучить разные типы ВМ, а уже потом решать задачу. "ключом хэширования является адрес размещения пикода в памяти" - вообще говоря ключом может быть всё, что угодно, а может и вообще ключ есть только на операнды "с созданием сигнатурного шаблона каждого примитива" - либо проблема с определением, либо проблема с представлением о задаче, которая стоит, откройте Obsidium и поймёте о чём я говорю. Вы никогда не составите шаблоны для его КОПов ни в статике, ни в динамике. Если нужны подробности - в ЛС. Если вам вдруг потребуется работать с ВМ в ASProtect, StarForce, то там вы познакомитесь с работой настоящих профессионалов. И все методы сложите в коробочку. Vamit пишет: мы говорим об одном и том же Не соглашусь с вами. Я не вижу причин делать динамику, вы же утверждаете что без этого вообще нельзя. |
|
Создано: 07 апреля 2010 15:24 · Личное сообщение · #6 Хм, а что ключь не меняется от обработчика к обработчику? т.е один ключ на всю таблицу? В нормальных ВМ(на примере солидшилда обработчиков там >10тис) ключь изменяется и каждый опкод дешифруется уже с новым ключем... + алгоритмы дешифровки на каждый обработчик свои и они изменяются при каждой компиляции. |
|
Создано: 07 апреля 2010 15:25 · Поправил: mak · Личное сообщение · #7 Весьма знакомые слова ))) Понятия некоторые самопальные, но это не призма ... Вамит прав , термины не играют особой роли , если понятно о чем речь. Нужную базу вамит тоже сделал , но в данном случае не все , из за нацеленности на определенный код, и это особо не проблема и код самодостаточен , что автор тоже указал. Дело не в ключе хэширования) ... это все хлам , ключи легко отсеять. Сигнатура понятие широкое .. и это комплекс методов ... а деление на блоки есть почти везде , это легло в основу еще в 60 ых ... Как професионально снимать ВМ в ASProtect, StarForce ??? )))) Очень интересно! Главное чтоб после профессионалов все работало. Все эти методы нацелены только под конкретную цель и методы действительно другие , но тем не менее сравнивать нет смысла, по охвату на разные вм , методы предложенные от "профессионалов" не подойдут. Поэтому динамик нужен при 0 информации практически, а статик уже при имении чегонибудь, тем самым комбинируется методы. Пройдет время и это станет ясно как и с анализом всех вм , проанализировать которые весьма большая задача для одного человека , смотря для кого правда. О чем речь вообще ? Делает декомпиль и пусть делает , постоянно кто то отговаривает или какой то шлак ... Хотите помочь помогите ... Пол страницы о том что было весьма хорошо описано и зная это автор даже указал что во избежании флуда , код нацелен на то-то , то-то. //И не надо опять говорить, что это лично моя к вам неприязнь. Никогда не говорил так)) //И вообще мои посты направлены автору, а не вам. ок)) ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 07 апреля 2010 15:51 · Личное сообщение · #8 V0ldemAr пишет: а что ключь не меняется от обработчика к обработчику? В вмпроте - да, в обсиде - нет, про продукты ореанс не знаю V0ldemAr пишет: ключ изменяется и каждый опкод дешифруется уже с новым ключем не сказал чтобы это сильно крутая защита; в обсиде есть другая дурость - NOP-хендлеры, наверно специально на помощь тем, кто будет делать инлайн. mak пишет: Как професионально снимать ВМ в ASProtect, StarForce ??? А вы хоть как-нибудь снимите, желательно чтобы работало. И читать вы не умеете, я лишь сказал, что сама ВМ делалась профессионалами (в отличие от того же вмпрота, старовцы не стремятся отгородиться от школьников), и тем не менее атаки уже на них есть, принцип "взломать можно всё" ещё никто не отменял. И вообще мои посты направлены автору, а не вам. Он уже что-то сделал, что-то работающее. От вас же только форум страдает бесполезными постами, такими как предыдущий. И не надо опять говорить, что это лично моя к вам неприязнь. |
|
Создано: 07 апреля 2010 16:13 · Поправил: Vamit · Личное сообщение · #9 V0ldemAr пишет: В нормальных ВМ(на примере солидшилда обработчиков там >10тис) ключь изменяется и каждый опкод дешифруется уже с новым ключем... + алгоритмы дешифровки на каждый обработчик свои и они изменяются при каждой компиляции. 100% согласен, у Ореана аналогично, моя же фраза "ключом хэширования является адрес размещения пикода в памяти" означала, что начальным ключом или инициализацией ключа хэширования является адрес размещения пикода в памяти. mak и progopis Ребята, не надо ссориться, давайте жить дружно... Задача по декомпиляции ВМ нужная и не такая уж простая, поэтому для пользы дела не нужно нездоровой критики, типа кто и как в школе учился. Главное результат, а кто и как к нему пришел - в данном случае неважно. ----- Everything is relative... |
|
Создано: 07 апреля 2010 16:16 · Личное сообщение · #10 progopis пишет: не сказал чтобы это сильно крутая защита; в обсиде есть другая дурость - NOP-хендлеры, наверно специально на помощь тем, кто будет делать инлайн. Всеравно до конца ее еще никто пока не сломал... хотя обфускация там и слабая но вм думаю в вмпротекте слабее исходя из того что я прочитал на форуме... В солидшилде тоже есть НОП обработчики, думаю они просто как часть обфускации... но и без них можно заинлайнить... |
|
Создано: 07 апреля 2010 17:03 · Личное сообщение · #11 |
|
Создано: 08 апреля 2010 15:01 · Личное сообщение · #12 Vamit, поправь баг в «Analyze all VM references» — диалог не закрывается крестом. Еще я бы добавил: 1. ограничение в адресах на 8 символов (тут все просто SendMessage c EM_LIMITTEXT) 2. ограничение в адресах на ввод только шестнадцатиричных значений (тут чуть положнее — либо 4 раза сабклассинг, либо 1 раз суперклассинг) |
|
Создано: 08 апреля 2010 16:38 · Поправил: Vamit · Личное сообщение · #13 kioresk пишет: поправь баг в «Analyze all VM references» — диалог не закрывается крестом. Если это окошки для ввода адресов, то это не баг, а специально так сделал - чтобы можно было искать эти адреса в Ольке, а окно для ввода всегда под рукой, закрывается только после нажатия ОК и проверки правильности ввода. Про добавления я знаю, хотел сделать, да времени жалко, для общей задачи это пока непринципиально, причем проверка на ошибки ввода присутствует. ----- Everything is relative... |
|
Создано: 11 апреля 2010 13:23 · Личное сообщение · #14 Реальные шаблоны интерпретаторов ВМ полученные декомпилятором для двух типов конкретных реализаций ВМ: 1. VMProtect Code:
2. Ореановские ВМ Code:
----- Everything is relative... |
|
Создано: 11 апреля 2010 13:31 · Личное сообщение · #15 |
|
Создано: 11 апреля 2010 16:44 · Личное сообщение · #16 int пишет: Не могли бы вы дать тот файл с вмпротом, для которого в предыдущем посте получен шаблон? Вот handle - декодирование адреса примитива ----- Everything is relative... |
|
Создано: 11 апреля 2010 17:23 · Личное сообщение · #17 Потому и спросил файл, ибо ваш листинг - бред: Code:
|
|
Создано: 11 апреля 2010 20:29 · Личное сообщение · #18 int пишет: Потому и спросил файл, ибо ваш листинг - бред И чем же я вам так не нравлюсь, а кто сказал, что <<= равно shl, это общая мнемоника операторов сдвига влево, под которой сидит то, что нужно, в данном случае rol. Неужели вы меня совсем за дурака считаете? Это шаблон и в нем есть условности в представлении, на самом деле это набор структур со вполне реальным содержимым, который работает так как нужно... Хотя наверно, можно было найти более адекватное представление для rol и других операторов сдвига, например, rol= ----- Everything is relative... |
|
Создано: 12 апреля 2010 08:50 · Личное сообщение · #19 int пишет: А зачем вы тогда эти шаблоны делаете? Смысли в них, если они "общие"? Только для контроля за декомпилятором, назначение тоже что и у всех логов. Это Керниган и Ритчи придумали, я ничего не говорил Это в С они придумали, но к сожалению в С отсутствуют понятия циклических сдвигов и много чего другого, что есть в ассемблере. теперь сдвиги пытаетесь обобщить. Я не понимаю стремления переписать всю номенклатуру. Предложите для пользы дела своё видение мнемоники операторов сдвига в едином стиле: lvalue operate rvalue ----- Everything is relative... |
|
Создано: 12 апреля 2010 09:51 · Поправил: Модератор · Личное сообщение · #20 Vamit ASM: rol eax,4 lvalue = eax, rvalue = 4 C: lvalue = (lvalue << rvalue) | (lvalue >> sizeof(lvalue) * 8 - rvalue) Если же цель сделать именно lvalue operate rvalue , то я бы предложил <<>= и >><=. Есть ещё RotateLeft(lvalue, rvalue) и RotateRight(lvalue, rvalue) из состава WinNT.h. Но я бы предпочёл первый предложенный мной вариант, чтобы можно было сделать скрипт расшифровки таблицы в IDA, например такой: Code:
Вот это уже польза. Взял скрипт и проверил работу декомпиля Av0id При чём здесь оптимизация? Что я должен проверить? То про что я точно знаю, что оно неверно? Нет слов. P.S. Специально для вас подарок в атаче. Зубков тоже допустил не мало ошибок при создании своего справочника, но в данном случае всё верно. e95c_12.04.2010_CRACKLAB.rU.tgz - ch02_03e.htm |
|
Создано: 12 апреля 2010 10:19 · Поправил: Модератор · Личное сообщение · #21 В догонку шаблоны для скриптов IDA: ROR j, val mask = -1 ^ (-1 << (32 - val)); j = ((j >> val) & mask) | (j << (32 - val)); ROL j,val mask = -1 ^ (-1 << val); j = (j << val) | ((j >> (32 - val)) & mask); NOT j j = j ^ 0xFFFFFFFF; NEG j j = (j ^ 0xFFFFFFFF) + 1; XOR j,val j = j ^ val; ADD j,val j = j + val; SUB j,val j = j - val; INC j j++; DEC j j--; SHL/SAL/SHR/SAR там вроде не бывает, ибо это необратимые операции, но я думаю вам не составит труда сделать и их в случае чего. |
|
Создано: 12 апреля 2010 12:39 · Личное сообщение · #22 int пишет: C: lvalue = (lvalue << rvalue) | (lvalue >> sizeof(lvalue) * 8 - rvalue) Если же цель сделать именно lvalue operate rvalue , то я бы предложил <<>= и >><=....Но я бы предпочёл первый предложенный мной вариант, чтобы можно было сделать скрипт расшифровки таблицы в IDA Это выражение правильно для С, но я делаю не декомпилятор С, поэтому такая транскрипция одной операции мне не нужна, <<>= и >><= - это ближе к делу, но учитывает не все варианты операторов сдвига, как здесь отличить rol от rcl? Ида со своими скриптами отношения к ВМ не имеет, как и полторы страницы написанных постов, т.ч. остановлюсь на своём варианте - rol=, rcl=, <<= (shl, sal), ror=, rcr=, sar=, >>= (shr) ----- Everything is relative... |
|
Создано: 12 апреля 2010 13:03 · Поправил: Модератор · Личное сообщение · #23 Vamit Я окончательно не понял, что вы хотите. RCL это операция от трёх операндов, или вы не согласны? Vamit пишет: я делаю не декомпилятор С А зачем же вы давали ссылку на тему про декомпилятор? Шаблон который вы делаете, скажите пожалуйста, зачем он вам? Я привёл пример - сделать скрипт IDA и проверить работу декомпиля. Не нравится IDA, можно для OllyDbg. Но смысла в "rol=" я не вижу. В общем делайте как хотите, я просто думал что тема создана не в духе "смотрите что у меня есть", а с целью обсуждения инструмента, баг-репортов и предложений. P.S. Тему почистил, если ещё какие посты считаете флудом - без проблем, стучите в ЛС, поскипаю |
|
Создано: 13 апреля 2010 15:02 · Личное сообщение · #24 Прога накрытая Темидой под Олькой ведет себя нормально (стоят плагины Phantom 1.54, StrongOD upk 2010). Но при потытке запустить этот пакет из под дебагера VS 2008 для отладки декомпилятора (плагин под Ольку), Темида просыпается и посылает на свой саппорт, но иногда, раза с 3-4 всё срабатывает нормально и можно дебажить, но при нажатии в VS кнопки StopDebugging всё падает вместе с Виндой. Вопрос: можно ли победить эту хрень и как? ----- Everything is relative... |
|
Создано: 13 апреля 2010 15:21 · Личное сообщение · #25 |
|
Создано: 14 апреля 2010 08:29 · Личное сообщение · #26 kioresk пишет: надо только антиотладку отключить. А поподробнее можно? проще защитить файл фемидой без опций антиотладки/антипатча/обнаружения мониторов и исследовать на здоровье. Да, для декомпиляции ВМ, это, наверное, правильный способ, но мне нужно сделать анализ только всех вхождений в ВМ именно на этом файле, т.к. здесь декомпилятор падает с исключениями. ----- Everything is relative... |
|
Создано: 14 апреля 2010 09:38 · Поправил: OKOB · Личное сообщение · #27 Vamit пишет: мне нужно сделать анализ только всех вхождений в ВМ именно на этом файле Да какие проблемы? Дампим жертву из ольки не обязательно на ОЕР и без восстановления импорта. Скармливаем дамп ИДА и напускаем скриптец (в атаче). И усе... В срипте нужно задать только свои границы кодовой секции и границы хвоста фимы (пример границ из самой Фимы 2110) beg_main = 0x05EF7AC; end_main = 0x07F1000; beg_wl = 0x093B000; end_wl = 0x1443000; Кому нужно тот перелудит скрипт для вывода в файл. CODEREPLACE входы однозначно, а для остальных могут быть ошибочные d5da_13.04.2010_CRACKLAB.rU.tgz - FindVMEntry.idc ----- 127.0.0.1, sweet 127.0.0.1 |
|
Создано: 14 апреля 2010 10:55 · Личное сообщение · #28 OKOB пишет: Да какие проблемы? Со скриптом, да и с ручным поиском, конечно, проблем нет, но я указал на декомпилятор, т.к. хочу его отладить для поиска и анализа всех вхождений в ВМ. Через дамп, конечно, входы в саму ВМ найти можно, т.к. она находится в стат. секции файла, но вся криптовка импорта будет пропущена, т.к. она сидит в динамических секциях... ----- Everything is relative... |
|
Создано: 14 апреля 2010 12:04 · Личное сообщение · #29 |
|
Создано: 16 апреля 2010 10:13 · Личное сообщение · #30 Небольшое подведение итогов по декомпиляции. Так как программа на сегодняшний день выполняет три функции для нескольких ВМ, то изложение буду давать пофункционально в разрезе типов ВМ и состояния дел. 1. Нахождение и анализ точек входа в ВМ. Эта функция использует алгоритмы, которые не зависят от типов ВМ, сам тип ВМ она не определяет, но анализирует и распознает следующие параметры точек входа в ВМ: - Error - ошибка при определении точки входа, тип ошибки в лог файле. - Not recognized - точка есть, но её функционал не распознан. - Done - точка обработана и устранена (в этой функции устраняется только кодированный импорт). - Cancelled - ошибочная точка, выводится только для проверки анализатора. - Processing - точка находится в состоянии обработки. - Postponed - отложенная точка, для обработки требуется определение типа ВМ, которое выполняет другая функция декомпилятора. Состояние дел: Реализовано (v1.2) и проверено на VMProtect, CodeVirtualizer. Реализовано (v1.3) и проверяется на Themida. В принципе, сложностей здесь нет, если декомпилятор не берет какой либо файл, то можете его выслать (в исходном виде (нераспакованный) мне, желательно указать ОЕП или что-нибудь близкое к нему) и декомпилятор будет доработан. 2. Восстановление импорта. Эта функция встроена в анализатор точек входа в ВМ. В процессе работы определяется адрес конкретной АПИ функции, после завершения анализа всех точек восстанавливается IAT и коды вызова АПИ функций в теле программы. Состояние дел: Реализовано (v1.2) и проверено на VMProtect. В CodeVirtualizer кодированного импорта не найдено. Есть вопрос по Themidе: Имеется ли в ней кодированный ВМ импорт? Если да, то желательно дать с ним файлик. Замену/эмуляцию нескольких стандартных библиотек я не рассматриваю, на это дело есть скрипты и данную функцию по воссстановлению этого импорта я не планирую добавлять в декомпилятор. 3. Восстановление тела функции (декомпиляция ВМ). Про эту функцию уже было много сказано, здесь только добавлю и поделю её на 3 шага, т.к. в v1.3 добавлен определитель типа ВМ: 1. Обработчики инициализации ВМ (до цикла интерпретатора) и цикла интерпретатора ВМ определяют тип ВМ и получают настройку окружения/среды ВМ. 2. Определение конкретной реализации ВМ. 3. Построение промежуточного кода и декодирование тела функции. Реализовано (v1.2) и проверено на CodeVirtualizer (шаги 2 и 3). Реализовано (v1.3) и проверено на CodeVirtualizer (шаги 1 - 3). Реализовано (v1.3) и проверено на VMProtect (шаг 1). В стадии реализации для VMProtect шаг 2, здесь для ускорения процесса может кто-нибудь поделится чистыми/значимыми телами обработчиков примитивов. Вообще-то это "скучная" работа разбора примитивов, для CV мне на разбор 168 примитивов потребовался почти месяц, здесь (VMProtect) времени нужно ещё больше, желательна помощь. В стадии реализации для Themida шаг 1, вопросов пока нет... ----- Everything is relative... |
|
Создано: 16 апреля 2010 10:48 · Личное сообщение · #31 |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 23 . 24 . >> |
eXeL@B —› Протекторы —› Декомпилятор ВМ |