Сейчас на форуме: (+9 невидимых) |
eXeL@B —› Протекторы —› Декомпилятор ВМ |
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 23 . 24 . >> |
Посл.ответ | Сообщение |
|
Создано: 03 марта 2010 12:33 · Личное сообщение · #1 Вашему вниманию предлагаются наработки по декомпиляции ВМ. Проект на сегодняшний день для меня завершен, но жаль если результат "ляжет на полку", может кому-нибудь и пригодится. Предлагаю сначала ознакомиться с обзором, и если будет интерес то могу выложить и сам плагин, или здесь или в личку заинтересованным лицам, каким образом, пока ещё не решил... Но если кто-либо ожидает увидеть "автоматическое чудо", то сразу скажу - его нет. Для того чтобы получить результат нужна ручная предварительная работа: - с исследуемой программы должна быть снята упаковка - точки входа в ВМ находятся вручную - возможно неоднократное "жамкание" клавиш в OllyDbg, а возможно и модификация кода, чтобы попасть в нужное место, в зависимости от защищенной функции - необходимо вручную прицепить к программе требуемый секцию - запись результатов в файл это тоже ручная работа, но уже более приятная Не всё гладко обстоит с определением реализаций ВМ, на сегодняшний день примерно каждая третья реализация автоматом не определяется, приходится под неё модернизировать плагин, т.к. не могу сразу предусмотреть все случаи "издевательств" ВМ с кодом примитивов. Лучше дела с восстановлением "исходного" кода защищенных функций - 70% нормально восстанавливается, хотя во многом это зависит от самой структуры функции. Таким образом, если будет заинтересованность и помощь в нахождении подобных ситуаций, то проект может быть доведен до релизной стадии. ЗЫ: Речь идет об Ореановских машинах. Нигде специально не упоминал. 9c41_03.03.2010_CRACKLAB.rU.tgz - VMSweeperLst.rar ----- Everything is relative... |
|
Создано: 15 февраля 2011 10:25 · Личное сообщение · #2 |
|
Создано: 15 февраля 2011 10:36 · Личное сообщение · #3 |
|
Создано: 15 февраля 2011 11:11 · Личное сообщение · #4 EAX=1, cpuid вернёт основную инфу про процессор. На этапе работы конверта, видимо, есть предвычисленное значение cpuid. Потом на этапе исполнения вм (в частности, дампа на другой машине) cpuid вернёт другое значение из-за другого процессора (либо TF будет взведён), значение полученное не сойдётся с сохранённым, будет не пыщ. | Сообщение посчитали полезным: Vamit |
|
Создано: 15 февраля 2011 11:26 · Поправил: Vamit · Личное сообщение · #5 Усё, врубился, на этапе распаковки проги вмпрот по адресу 0x00664B60 помещает кодированный адрес доп. секции проги (rvm_aux) в которую по смещению [rvm_aux + 0x38] помещается кодированный cpuid. Смещение для разных защищенных функций может быть разное. А далее... видно из кода защищенной функции - берется cpuid и сравнивается с ячейкой [rvm_aux + 0x38] (предвычисленный cpuid). PS: Доп. секция динамическая, создается системой при загрузке проги. ----- Everything is relative... |
|
Создано: 15 февраля 2011 14:02 · Поправил: Vamit · Личное сообщение · #6 Очередная версия VMSweeper 1.4 beta 9. Добавлено: 1. Совместный доступ ко всем файлам, создаваемым VMSweeper. 2. Вместо подсчета CRC делается коррекция CRC. 3. Обработчики FPU инструкций: fsub, fmul, fdiv и fabs. 4. Блокировка "Analyze all VM references" от повторного запуска. 5. Оптимизация log, trc и map файлов. 6. Обработка транзитных меток в промкоде при отсутствии перехода на них. 7. Реструктуризация промкода. Обработка входа в ВМ, совмещенного с меткой. 8. Девиртуализация инструкции cpuid. 9. Удаление AntiDump и AntiTrace кода. 10. Улучшен конвертер PMB to GDL. Исправлено: 1. Восстановление множителя в SIB адресации. 2. Реструктуризация промкода. Удаление лишних ветвлений. Возможно это одна из последних беток по вмпроту. В принципе, всё что у меня есть декомпилируется нормально. Осталась не реализованной девиртуализация нескольких инструкций, оперирующих с BСD данными, и девиртуализация FPU инструкций. Так же не реализована девиртуализация табличных hard switch и автоматическая декомпиляция табличных обработчиков исключений, хотя если встать на него принудительно, то декомпилировать можно. В защищенном коде их пока встретить не удалось. Самому же компилить примеры, а потом их декомпилировать - как то не интересно. Самое узкое место - восстановление соответствия регистров ЦПУ и ВМ. В большинстве случаев 100% восстановить соответствие не удается, даже с применением простых эвристических алгоритмов, с ними довольно часто происходит перебор - ложное соответствие. Всё дело в том, что регистров ЦПУ - 8, а регистров ВМ -16, причем, наблюдается довольно парадоксальная ситуация - чем круче защищен код, тем проще выявить соответствие регистров. Но, если включить мозги, то можно ручками получить всё соответствие, может оно и будет отличаться от оригинального, но не суть - оно будет рабочим. Правда, писать такие алгоритмы, дело неблагодарное, пусть лучше это останется на потом... Хотя, напрашивается ещё один способ разрешения этой ситуации - интерактивность. Можно написать "текстовый" редактор, в который будет загружен некоторый успешный лог кода, затем юзером выявляется правильное соответствие регистров в пределах разрешенных границ, далее текст ассемблируется и исходный код готов. Но, это всё на потом. Сейчас будет в основном работа над ошибками и некоторыми неучтенными моментами, поэтому жду от вас подопытных кроликов, с которыми вы что-то пытались сделать, но не получилось... Желательно чтобы это были защищенные функции, претензии к восстановленному коду самого протектора не принимаются, в нем ещё много всякого дерьма, которое я устал разгребать. 7846_15.02.2011_CRACKLAB.rU.tgz - VMSweeper14beta9.rar ----- Everything is relative... | Сообщение посчитали полезным: huckfuck, m0bscene, Gideon Vi, VodoleY, sendersu, [Nomad], _ruzmaz_, SReg, daFix, Smon, inf1kek, ClockMan, DimitarSerg |
|
Создано: 16 февраля 2011 09:29 · Личное сообщение · #7 Вот пример rghost.ru/4397634 - 6 метров Декомпилить, начиная с EP. Create Intermediate Code проходит, а на этапе Decompile Code вылазит ошибка --------------------------- Error --------------------------- Unknown identifier in mov rvm_18, 0x00DB316C --------------------------- ОК --------------------------- Что бы это значило? ----- SaNX |
|
Создано: 16 февраля 2011 11:29 · Личное сообщение · #8 SaNX пишет: Декомпилить, начиная с EP. Даже не смотря пример, могу сказать, что декомпиляция прошла успешно, но не на 100%, т.к. исходный асм код не создан. Но в этом случае - декомпиляция тела самого прота - его никто и не обещал (см. пост выше). Теперь как распознавать ошибки: 1. Смотрим лог файл с именем декомпилируемого кода, если видим начало секции Section asm, то декомпиляция успешна, а сама ошибка, типа вашей, выдается не Свипером, а ассемблером Ольки и говорит о том, что данное выражение она не может ассемблировать. Это происходит по причине нераспознанного соответствия между регистрами ВМ и CPU (всё это описано выше). В этом случае поднимаемся в логе на секцию вверх и смотрим её, если в ней идет перебор (ложное) определения соответствия, то движемся ещё выше - секция перед Section a10 reg даст достоверный результат декомпиляции, но без соответствия регистров. 2. Если лог файл отсутствует, то смотрим трейс файл, к конце его будет информация об ошибке (все секции лог и трейс файлов подробно расписаны выше). Что бы это значило? Уже ответил... Что вы хотите получить, декомпилируя ЕП? Если изучить как устроен протектор, то тогда разгребайте лог руками. На мой взгляд там одна полезная инфа - адрес ОЕП, который как писалось ранее, виден почти невооруженным взглядом при небольшой сноровке. Для приобретения сноровки рекомендуется посмотреть блок схему кода в графическом виде. ----- Everything is relative... |
|
Создано: 16 февраля 2011 12:08 · Личное сообщение · #9 |
|
Создано: 16 февраля 2011 12:15 · Личное сообщение · #10 |
|
Создано: 16 февраля 2011 17:08 · Личное сообщение · #11 |
|
Создано: 16 февраля 2011 17:26 · Поправил: Vamit · Личное сообщение · #12 Bronco Ну у тебя и стиль изложения , я понимаю не более 20% того, что ты пишешь, остальное приходится домысливать... В 90% пока только рабочий ПК. ПК в общепринятом - персональный комп, но я думаю ты имел в виду промкод. С переходниками косячки, особенно в сишных Я понимаю, что речь идет о сишном импорте, хотя в приведенной схеме переходника не вижу, есть (похоже) прямой вызов АПИ (через ИАТ, естественно). Можешь дать файлик - гляну. Оставшиеся апи стали затирать Совершенно не понял, какие оставшиеся АПИ и кто их затирает. после резет правка почему-то сохраняется Если имеется в виду код проги, то Свипер все изменения делает в памяти процесса, а в файл проги ничего не пишет, да и не нашел я такой возможности в Олькином SDK, может это в Ольке что-то включено, что приводит к автоматическому патчингу кода. Без обид..., если правильно поставишь вопрос, то и ответ будет правильным... ----- Everything is relative... |
|
Создано: 16 февраля 2011 18:05 · Личное сообщение · #13 Vamit пишет: какие оставшиеся АПИ и кто их затирает. обычно 6-7 вызовов системных функций защита не трогает, и после декомпресии кода и данных, в старой иат эти адреса остаются+"мусор". Свипу это не нравится, ему мало места для восстановления иат....)))) Сорри, с правкой этих ячеек косяк мой. //после прохода к оеп ( по скрипту), перед свип_анализом, в конце скрипта была вставка для этой проги , я о ней забыл...))) ===== Vamit пишет: Можешь дать файлик dll от загрузчика игрушки, крякеры опечатали экспортируемые функи, размеры фунок небольшие, от 20 до 100 байт. пока с релоками разгребаю. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 16 февраля 2011 18:15 · Личное сообщение · #14 Vamit пишет: Самое узкое место - восстановление соответствия регистров ЦПУ и ВМ. В большинстве случаев 100% восстановить соответствие не удается. вобщем, все равно я чего то не догоняю. Может, видео выложишь с примером распаковки какой-либо проги? Можно будет в шапку засунуть, всем будет полезно. ----- SaNX | Сообщение посчитали полезным: MasterSoft |
|
Создано: 16 февраля 2011 18:19 · Поправил: Vamit · Личное сообщение · #15 Свипу это не нравится, ему мало места для восстановления иат Да, бывает такое, хотя чаще вместо мусора вмпрот пихает туда свой код, если секционность ИАТ ( с оставшимися в ней функами) глазами не прослеживается, то можно помочь Свиперу, записав в ИАТ принудительно разделители секций (когда он просит ввести её адреса). SaNX пишет: Может, видео выложишь с примером распаковки какой-либо проги? Вот не поверишь, ни разу видео не делал, может попросим других сделать... многие уже со Свипером на ты. ----- Everything is relative... |
|
Создано: 16 февраля 2011 20:24 · Личное сообщение · #16 |
|
Создано: 16 февраля 2011 21:46 · Поправил: Vamit · Личное сообщение · #17 SaNX пишет: Просто поставить фрапс и нажать "рекорд" Ладно попробую, только без реальной проги толку от этого видео будет мало - нужно руками и головой работать. Скачай тестовый пример ЗЫ: Может, видео выложишь с примером распаковки какой-либо проги? Не понял, видео по распаковке проги или по декомпиляции какой-либо функции? Это разные вещи... ----- Everything is relative... |
|
Создано: 18 февраля 2011 20:14 · Личное сообщение · #18 |
|
Создано: 18 февраля 2011 21:23 · Личное сообщение · #19 kioresk пишет: последние версии свипера (v1.4 beta 3, 6, 7, 8, 9) не декомпилируют EP указанного тобой тестового примера Если речь идет о VmpTest.exe с либой RCMicroDogSetup.dll, то ЕП по адресу 1AAD8D6 декомпилируется без проблем, как и все другие вм в этом файле, любыми версиями Свипера. Проблему скорее всего следует искать в самой Ольке или её окружении. Я использую чистую Ольку с патчем от Int'a. ----- Everything is relative... |
|
Создано: 19 февраля 2011 00:21 · Личное сообщение · #20 Vamit пишет: Проблему скорее всего следует искать в самой Ольке или её окружении +1, чистая олька с анализом кода, + фант с патчингом для олькиных окон (возможно не обязательо) и защитой drx регистров ( на 7х64 не пашет), и стронг с хайдами (на 7х64 не пашет), патчинг от плешивого до , либо у меня нет конкретных примеров где от него есть толк.... //чтобы вкурить разницу позитива. ибо любое гавно лЁтает... и так, и на декомпиль не влияет Чтобы получить натив с любой приблуды, надо по меньшей мере быть автором свипа... ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 19 февраля 2011 15:01 · Личное сообщение · #21 Для защиты от Вмпрота: + фант с патчингом для олькиных окон (возможно не обязательо) не нужен защитой drx регистров ( на 7х64 не пашет) не нужно, есть встроенная в Свипер стронг с хайдами (на 7х64 не пашет) не нужен, возможны конфликты с инлайном Свипера патчинг от плешивого до здесь ничего сказать не могу ни за, ни против надо по меньшей мере быть автором свипа... преувеличение, если понимаешь что делаешь, то ничего сложного нет... ----- Everything is relative... |
|
Создано: 19 февраля 2011 15:48 · Личное сообщение · #22 |
|
Создано: 19 февраля 2011 16:00 · Личное сообщение · #23 |
|
Создано: 19 февраля 2011 16:17 · Личное сообщение · #24 Airenikus пишет: OllyDBG VMP Edition - где сей сабж скачать? ----- We do what we want because we can. | Сообщение посчитали полезным: Airenikus |
|
Создано: 19 февраля 2011 16:20 · Поправил: VodoleY · Личное сообщение · #25 ollydbgModPack.rar погуглите. около 22метра P.S сори не видел твоего поста обнаружилась странная хрень, както яростно ВМпротект реагирует на использование DR4 регистра. Орет на дебугер детектед. Фантом почемуто от этого не спасает (DR1..3) работают норм.. хз в чем дело Vamit я как всегда не прав. Не дочитался что примитив VMExit имеет 2 выхода. за 6 часов получил трассу с выходом на ЕП проги, такой же адрес дал свипер. Как всегда респект. P.S.S. в общих чертах закончил скрипт для ольки на хардваре бряках для создание трассы и новертор этих логов в более менее читабельный вид. если кому интересно стучите. ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... |
|
Создано: 20 февраля 2011 17:52 · Личное сообщение · #26 Vamit пишет: Если речь идет о VmpTest.exe с либой RCMicroDogSetup.dll, то ЕП по адресу 1AAD8D6 декомпилируется без проблем, как и все другие вм в этом файле, любыми версиями Свипера. Проблему скорее всего следует искать в самой Ольке или её окружении. Я использую чистую Ольку с патчем от Int'a. Разобрался — помог реанализ кода (Ctlr+A) перед началом декомпиляции EP. После него уже не ругается и декомпилирует. |
|
Создано: 20 февраля 2011 20:29 · Поправил: Je4Ry · Личное сообщение · #27 |
|
Создано: 20 февраля 2011 20:46 · Личное сообщение · #28 |
|
Создано: 21 февраля 2011 01:09 · Личное сообщение · #29 |
|
Создано: 21 февраля 2011 15:15 · Личное сообщение · #30 Унпачу либу, "родная" таблица релоков, валидная условно наполовину. Саму табличку путём сравнения двух дампов (один под олькой, второй из под приблуды), с разным IB , восстанавливаю с нуля, после импорта. Секция анти_анти_дамп готова. Вопрос к тем, кто пересекался. Для секций защиты, таблица перемещений необходима ? И второй вопрос, функи по экспорту, свип декомпилит ? //декомпиль ведь в динамике. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 21 февраля 2011 17:55 · Личное сообщение · #31 функи по экспорту, свип декомпилит ? Декомпилит всё, на что можно поставить ЕИП . Вопрос в другом - насколько корректным может быть код после него, лучший код получается когда точка входа как первоначальная, так и последующие находятся по исполняемому пути, но возможны и прыжки на них, и чем он ближе к точке, тем лучше... ----- Everything is relative... |
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 23 . 24 . >> |
eXeL@B —› Протекторы —› Декомпилятор ВМ |