Сейчас на форуме: (+8 невидимых) |
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... |
|
Создано: 05 марта 2010 10:24 · Личное сообщение · #2 |
|
Создано: 05 марта 2010 10:41 · Личное сообщение · #3 |
|
Создано: 05 марта 2010 11:28 · Поправил: Vamit · Личное сообщение · #4 pavka, Bronco ещё раз спасибо за ответы, больше ничего искать не надо, если потребуется сделаю сам, просто нужно было конкретно определить тип защиты. Что значит деобфускация исчезла? Если я правильно понял , то это не совсем деобфускация, а лишь одно из следствий применения виртуальной машины как защиты ?! Или? Можно сравнить два листинга полного промежуточного кода (DecodeVM.txt) и секцию а00 файла bl1210000.log, т.к. адреса у них одинаковы. Видно, что исчезла часть кода по адресам (0000-0065 без старшего слова), т.к. это блок ENTRY входа в ВМ, т.е. ответ на второй вопрос. Для ориентации по адресам скажу, что адрес в логе показывает на начало логического блока, а команда, которая под ним записана получается в конце этого блока. Смотрим далее - (00С4-00Е4) в логе это push 0x0A, а в коде это 10 инструкций асма, которые и являются обфускацией кода, т.е. ответ на первый вопрос. Принцип построения деобфускатора? Заточен только под конкретную цель? Нет, он вообще не под что не заточен и в общем виде его нет, работа по деобфускации кода выполняется в разных частях программы по мере обработки. Два примера уже было разобрано, деобфускация регистров и поглощающая деобфускация в предыдущем ответе. Здесь же "Производим деобфускацию констант и корректируем стековые смещения. Лог, секция а04." производится только остаточная деобфускация арифметических выражений типа (0x0AB0DD51 + 0x6C1558B5 ^ 0x76A93496) + 0x10FB72D6 - 0x10FB72D6 и получение из них значимых значений. Заменяем регистры ВМ нативными регистрами. Лог, секция а06. Поподробнее можно пожалуста Можно и поподробней, это просто, т.к. для данной реализации ВМ мы знаем в каком регистре ВМ лежит какой нативный регистр (ответ по регистрам), то адрес регистра ВМ заменяем именем нативного регистра. 012100B1: [119C004] = [0x004AA378] ==>> 012100B1: esi = [0x004AA378] Привидите примеры кода из вашей программы защищенной, думаю это ее не скомпрометирует. Примеры реального кода из реальной программы есть в листингах обзора. Это были ответы на все вопросы mak'а ----- Everything is relative... |
|
Создано: 05 марта 2010 14:12 · Поправил: kioresk · Личное сообщение · #5 |
|
Создано: 05 марта 2010 14:40 · Личное сообщение · #6 |
|
Создано: 05 марта 2010 15:15 · Личное сообщение · #7 эх у меня первая поделка была такого типа с инитами и юсами,но обозначения другие, но до конца не довел , по разным причинам , потом полез в другую степь , оптимизирующие компиляторы , потом совместил два вида в одно чтобы сделать один энджин для всего и тоже не до конца. Сэнкс Vamit внес большую ясность. Повод продолжать исследования ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 06 марта 2010 12:07 · Личное сообщение · #8 |
|
Создано: 06 марта 2010 14:17 · Личное сообщение · #9 |
|
Создано: 07 марта 2010 21:39 · Поправил: mak · Личное сообщение · #10 Code:
vcds_805 это случаем не указатель на программу 2008 года , по запросам эта программа часто проходила по форуму. rapidshare.com/files/312624950/VCDS-Release-8050-Installer.rar VCDS-Release-8050-Installer.rar Будет на чем потестить , если что) ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 10 марта 2010 09:14 · Личное сообщение · #11 подвержена ли точка входа конкретного типа ВМ и само тело ВМ (до цикла интерпретатора пикода) мутации при создании реализации ВМ? На этот вопрос, как я понимаю, ответа нет. OKOB Можешь выложить пару рабочих файликов, защищенных приведенными в постах 14, 22 (стр.1) ВМ, чтобы доработать декомпилятор под них? Желательно со снятыми упаковщиками... Декомпилятор никто не опробовал? Даже "подопытного кролика" дали... Плагин выложить просили, а дальше что? ----- Everything is relative... |
|
Создано: 10 марта 2010 15:02 · Личное сообщение · #12 Vamit пишет: подвержена ли точка входа конкретного типа ВМ и само тело ВМ (до цикла интерпретатора пикода) мутации при создании реализации ВМ? На этот вопрос, как я понимаю, ответа нет. Есть , просто его не заметили , и да и нет , встречалось по разному, хотя я бы назвал просто разный уровень мутации и всегда да. Можно полагаться не на сигнатуру а на контекст , или уже смарт шаблоны делать. подожди немного , не так быстро) Я там нашел то что искал ранее , именно джамповые переходы с вычислениями , времени мало все успевать , по пробе напишу позже. Vamit пишет: Плагин выложить просили, а дальше что? Наверное , некоторые его уже разобрали Vamit пишет: OKOB Можешь выложить пару рабочих файликов, защищенных приведенными в постах 14, 22 (стр.1) ВМ, чтобы доработать декомпилятор под них? Желательно со снятыми упаковщиками... В личке ... ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 10 марта 2010 15:29 · Личное сообщение · #13 |
|
Создано: 12 марта 2010 13:03 · Поправил: Vamit · Личное сообщение · #14 Решил глянуть на VMProtect изнутри, для возможности оценки доработки под него декомпилятора. Возникло несколько вопросов: 1. Code:
Так выглядит съеденный ВМ вызов апишной функции, так? 2. Code:
А так выглядит съеденный ВМ кусок тела функции, так? Если это так, тогда следующий вопрос, вместо мусора в съеденной области мы наблюдаем вполне рабочий код, это муляж или действительно вставленный откуда-то рабочий код? 3. Code:
Это съеденный ВМ стаб. Через OEP исполнение проги не проходит, бряки не срабатывают (а может защита?). Вопросы: - действительно ли, если идти по jmp, мы выполним весь стаб? - если через OEP исполнение не проходит, то как найти в ВМ точку эквивалентную этой? ----- Everything is relative... |
|
Создано: 12 марта 2010 13:50 · Личное сообщение · #15 Vamit пишет: 00457BC0 |. E8 92FD5D01 CALL VWTester.01A37957 00457BC5 |. 90 NOP Как правило в старых версиях импорт всегда наместе просто айпи покриптованы и зайдя по адресу VWTester.01A37957 ищем на подобии такой комманды MOV EAX,[4281A4] эта загружается айпи с таблички просто она покриптована,теперь просто ищем комманды изменяющии регистр еах и получаем типа таких комманд везде разные ROR EAX,0B DEC EAX ROR EAX,1F DEC EAX в еах должен раскриптоватся адрес айпи ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 12 марта 2010 14:13 · Личное сообщение · #16 ClockMan пишет: Как правило в старых версиях импорт всегда наместе Вот кусок импорта, как видно на своем месте мало что есть Code:
ClockMan пишет: эта загружается айпи с таблички просто она покриптована,теперь просто ищем комманды изменяющии регистр еах и получаем типа таких комманд везде разные Спасибо, но алгоритмы рассказывать не надо, когда потребуется спрошу, в принципе, они мне понятны, сейчас же стоит задача определиться с точками входа в ВМ. ----- Everything is relative... |
|
Создано: 12 марта 2010 14:42 · Личное сообщение · #17 Спасибо, но алгоритмы рассказывать не надо, когда потребуется спрошу, в принципе, они мне понятны, сейчас же стоит задача определиться с точками входа в ВМ. А в чем проблема, точки входа такие же как и у других протекторов. Вмпротект свои дела хранит в отдельных секциях, соответственно должны быть редиректы из кода (прямые или косвенные). |
|
Создано: 12 марта 2010 14:55 · Личное сообщение · #18 kioresk пишет: А в чем проблема, точки входа такие же как и у других протекторов В общем да, это так, визуально все точки явно определяются, кроме ОЕПа, а в частностях могут быть вопросы. Вопрос 2 про мусор очень важен, т.к. в функции должно быть место для восстановленного кода, а если ВМ заняла это место под свои нужды, то перетереть его мы не можем. ----- Everything is relative... |
|
Создано: 12 марта 2010 15:06 · Личное сообщение · #19 |
|
Создано: 12 марта 2010 15:09 · Поправил: kioresk · Личное сообщение · #20 Так выглядит съеденный ВМ вызов апишной функции, так? Так. Идет прыжок на враппер, который затем прыгает по адресу API функции, который ранее рассчитывается вмпротом. А так выглядит съеденный ВМ кусок тела функции, так? Если это так, тогда следующий вопрос, вместо мусора в съеденной области мы наблюдаем вполне рабочий код, это муляж или действительно вставленный откуда-то рабочий код? Так. Только в твоем примере защищен маленький участок кода (длинной в 6 байт), поэтому остальной код не тронут. Добавлено А, так у тебя там просто импорт защищен. Вопрос 2 про мусор очень важен, т.к. в функции должно быть место для восстановленного кода, а если ВМ заняла это место под свои нужды, то перетереть его мы не можем. В принципе это не так важно, т.к. в любом случае восстановить код на его родное место можно только после того как будут обработаны все защищенные участки. |
|
Создано: 12 марта 2010 15:48 · Поправил: Vamit · Личное сообщение · #21 kioresk пишет: Только в твоем примере защищен маленький участок кода (длинной в 6 байт), поэтому остальной код не тронут. Нет, так быть не может по 2 причинам: - во-первых, вм вешается на исходники с добавлением кода начала и конца защищаемой области, а это никак не 6 байт, во-вторых, практически невозможно найти строку исходного кода, которая скомпилируется в 6 байт даже с оптимизацией, в-третьих, какой смысл защищать одну строку исходного кода. Следовательно, места под код должно быть всегда больше, чем он сам занимал первоначально. - в данном примере ebp не инициирован, следовательно call ebp не имеет смысла в прямом выполнении, вот начало функции Code:
а значит это или мусор или ??? Возможно и разновидность апишного вызова... Отредактировано: С этим разобрался - mov ebp, апи функция в любом случае восстановить код на его родное место можно только после того как будут обработаны все защищенные участки. Это не так. Сейчас декомпилятор восстанавливает по одной функции и в проге одновременно работают как ВМ, так и восстановленный код, если конечно, вместо съеденного куска находится мусор или муляж. Если же здесь лежит рабочий код, то это сложнее - надо менять алгоритм. ----- Everything is relative... |
|
Создано: 12 марта 2010 18:26 · Личное сообщение · #22 |
|
Создано: 13 марта 2010 20:13 · Поправил: Bronco · Личное сообщение · #23 ClockMan пишет: Должна быть комманда Code:
:: Code:
----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 14 марта 2010 05:19 · Поправил: ClockMan · Личное сообщение · #24 Bronco??? /*4034CA*/ JMP 01A205F8===========>заходим в начло украденной функции /*1A24C0A*/ MOV EAX,[1A2A856]======>EAX 80CC585B /*1A2F033*/ ADD EAX,AFBF00BF=======>начало раскриптовки /*1A2F03F*/ ROL EAX,6 /*1A28D4F*/ DEC EAX /*1A28D53*/ NOT EAX /*1A28D5F*/ ADD EAX,5F508C6B /*1A28D65*/ ROR EAX,4 /*1A28D77*/ NOT EAX /*1A28D7B*/ SUB EAX,88B8FB44 /*1A362BD*/ NOT EAX================>EAX 7C809FA1 kernel32.InitializeCriticalSection /*1A2A8DB*/ PUSH DWORD PTR [ESP+44] /*1A2A8DF*/ RETN 48=================>выходим /*1A24C1A*/ NOT BP==================>заходим ) /*1A24C1D*/ MOV EBP,EAX=============>заносим значение из eax в ebp /*1A24C2E*/ JMP 004034D0============>прыгаем обратно в область кода /*4034D0*/ LEA EAX,[ESI+A4B8]=======>вышли Поэтому исследуя эти данные мы получаем что украденная фуекция есть ничто иное как mov ebp,dword[1A2A856] только ненадо её воспринемать конкретно ) ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 14 марта 2010 10:56 · Личное сообщение · #25 |
|
Создано: 14 марта 2010 12:48 · Личное сообщение · #26 Я в своё время писал простенкий трассировщик, который прогонял все прыжки, ведушие в какой-то промежуток памяти и генерил новую таблицу импорта. Только возникла проблема - приходилось фильтровать IAT и просто завиртуаленный код. Вообщем, защита импорта не самая сильная сторона прота, по крайней мере, версия очень похожа на ту, из которой ClockMan привёл код ----- Research For Food |
|
Создано: 14 марта 2010 13:14 · Личное сообщение · #27 |
|
Создано: 14 марта 2010 17:28 · Личное сообщение · #28 Исправил пару ошибок и немного обновил декомпилятор, добавил функцию поиска всех вхождений в любую ВМ, в том числе и неявных. 6543_14.03.2010_CRACKLAB.rU.tgz - VMSweeper1_1beta.rar ----- Everything is relative... |
|
Создано: 14 марта 2010 21:38 · Личное сообщение · #29 |
|
Создано: 14 марта 2010 22:07 · Поправил: Vamit · Личное сообщение · #30 Bronco Здесь (во вложении) (помечены !!!!!) точно сказано какие критерии входа в ВМ пока обязательны для декомпилятора. Если критерии другие (разновидность или тип ВМ), то получим данное сообщение. ----- Everything is relative... |
|
Создано: 18 марта 2010 02:15 · Личное сообщение · #31 |
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 23 . 24 . >> |
eXeL@B —› Протекторы —› Декомпилятор ВМ |