Сейчас на форуме: (+9 невидимых)

 eXeL@B —› Протекторы —› Декомпилятор ВМ
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 23 . 24 . >>
Посл.ответ Сообщение


Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 03 марта 2010 12:33
· Личное сообщение · #1

Вашему вниманию предлагаются наработки по декомпиляции ВМ.
Проект на сегодняшний день для меня завершен, но жаль если результат "ляжет на полку", может кому-нибудь и пригодится. Предлагаю сначала ознакомиться с обзором, и если будет интерес то могу выложить и сам плагин, или здесь или в личку заинтересованным лицам, каким образом, пока ещё не решил...
Но если кто-либо ожидает увидеть "автоматическое чудо", то сразу скажу - его нет. Для того чтобы получить результат нужна ручная предварительная работа:
- с исследуемой программы должна быть снята упаковка
- точки входа в ВМ находятся вручную
- возможно неоднократное "жамкание" клавиш в OllyDbg, а возможно и модификация кода, чтобы попасть в нужное место, в зависимости от защищенной функции
- необходимо вручную прицепить к программе требуемый секцию
- запись результатов в файл это тоже ручная работа, но уже более приятная

Не всё гладко обстоит с определением реализаций ВМ, на сегодняшний день примерно каждая третья реализация автоматом не определяется, приходится под неё модернизировать плагин, т.к. не могу сразу предусмотреть все случаи "издевательств" ВМ с кодом примитивов. Лучше дела с восстановлением "исходного" кода защищенных функций - 70% нормально восстанавливается, хотя во многом это зависит от самой структуры функции. Таким образом, если будет заинтересованность и помощь в нахождении подобных ситуаций, то проект может быть доведен до релизной стадии.

ЗЫ: Речь идет об Ореановских машинах. Нигде специально не упоминал.

9c41_03.03.2010_CRACKLAB.rU.tgz - VMSweeperLst.rar

-----
Everything is relative...





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 15 февраля 2011 10:25
· Личное сообщение · #2

Archer +1

-----
Yann Tiersen best and do not fuck





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 15 февраля 2011 10:36
· Личное сообщение · #3

Теоретическую составляющую этого кода в паре слов можно получить? Что-то я не врублюсь в принцип его работы..., хотя результат и понятен.

-----
Everything is relative...





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 15 февраля 2011 11:11
· Личное сообщение · #4

EAX=1, cpuid вернёт основную инфу про процессор. На этапе работы конверта, видимо, есть предвычисленное значение cpuid. Потом на этапе исполнения вм (в частности, дампа на другой машине) cpuid вернёт другое значение из-за другого процессора (либо TF будет взведён), значение полученное не сойдётся с сохранённым, будет не пыщ.

| Сообщение посчитали полезным: Vamit


Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 15 февраля 2011 11:26 · Поправил: Vamit
· Личное сообщение · #5

Усё, врубился, на этапе распаковки проги вмпрот по адресу 0x00664B60 помещает кодированный адрес доп. секции проги (rvm_aux) в которую по смещению [rvm_aux + 0x38] помещается кодированный cpuid.
Смещение для разных защищенных функций может быть разное.
А далее... видно из кода защищенной функции - берется cpuid и сравнивается с ячейкой [rvm_aux + 0x38] (предвычисленный cpuid).

PS: Доп. секция динамическая, создается системой при загрузке проги.

-----
Everything is relative...





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 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

Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 16 февраля 2011 09:29
· Личное сообщение · #7

Вот пример rghost.ru/4397634 - 6 метров

Декомпилить, начиная с EP.

Create Intermediate Code проходит, а на этапе Decompile Code вылазит ошибка

---------------------------
Error
---------------------------
Unknown identifier in mov rvm_18, 0x00DB316C
---------------------------
ОК
---------------------------


Что бы это значило?

-----
SaNX





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 16 февраля 2011 11:29
· Личное сообщение · #8

SaNX пишет:
Декомпилить, начиная с EP.

Даже не смотря пример, могу сказать, что декомпиляция прошла успешно, но не на 100%, т.к. исходный асм код не создан. Но в этом случае - декомпиляция тела самого прота - его никто и не обещал (см. пост выше).
Теперь как распознавать ошибки:
1. Смотрим лог файл с именем декомпилируемого кода, если видим начало секции Section asm, то декомпиляция успешна, а сама ошибка, типа вашей, выдается не Свипером, а ассемблером Ольки и говорит о том, что данное выражение она не может ассемблировать. Это происходит по причине нераспознанного соответствия между регистрами ВМ и CPU (всё это описано выше). В этом случае поднимаемся в логе на секцию вверх и смотрим её, если в ней идет перебор (ложное) определения соответствия, то движемся ещё выше - секция перед Section a10 reg даст достоверный результат декомпиляции, но без соответствия регистров.
2. Если лог файл отсутствует, то смотрим трейс файл, к конце его будет информация об ошибке (все секции лог и трейс файлов подробно расписаны выше).

Что бы это значило?
Уже ответил... Что вы хотите получить, декомпилируя ЕП? Если изучить как устроен протектор, то тогда разгребайте лог руками. На мой взгляд там одна полезная инфа - адрес ОЕП, который как писалось ранее, виден почти невооруженным взглядом при небольшой сноровке. Для приобретения сноровки рекомендуется посмотреть блок схему кода в графическом виде.

-----
Everything is relative...




Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 16 февраля 2011 12:08
· Личное сообщение · #9

Это все понятно. Но такое происходит и на декомпиляции функций в программе, встречал уже пример.

-----
SaNX





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 16 февраля 2011 12:15
· Личное сообщение · #10

Но такое происходит и на декомпиляции функций в программе, встречал уже пример.
Конечно происходит. Повторяю:
Самое узкое место - восстановление соответствия регистров ЦПУ и ВМ. В большинстве случаев 100% восстановить соответствие не удается.

-----
Everything is relative...





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 16 февраля 2011 17:08
· Личное сообщение · #11

В 90% пока только рабочий ПК.
//респект
С переходниками косячки, особенно в сишных, многое определяет как "Cancelled"
push reg
call vm
-------
pop reg
call vm
======
Оставшиеся апи стали затирать, после резет правка почему-то сохраняется.

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 16 февраля 2011 17:26 · Поправил: Vamit
· Личное сообщение · #12

Bronco
Ну у тебя и стиль изложения , я понимаю не более 20% того, что ты пишешь, остальное приходится домысливать...
В 90% пока только рабочий ПК. ПК в общепринятом - персональный комп, но я думаю ты имел в виду промкод.
С переходниками косячки, особенно в сишных Я понимаю, что речь идет о сишном импорте, хотя в приведенной схеме переходника не вижу, есть (похоже) прямой вызов АПИ (через ИАТ, естественно). Можешь дать файлик - гляну.
Оставшиеся апи стали затирать Совершенно не понял, какие оставшиеся АПИ и кто их затирает.
после резет правка почему-то сохраняется Если имеется в виду код проги, то Свипер все изменения делает в памяти процесса, а в файл проги ничего не пишет, да и не нашел я такой возможности в Олькином SDK, может это в Ольке что-то включено, что приводит к автоматическому патчингу кода.

Без обид..., если правильно поставишь вопрос, то и ответ будет правильным...

-----
Everything is relative...





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 16 февраля 2011 18:05
· Личное сообщение · #13

Vamit пишет:
какие оставшиеся АПИ и кто их затирает.

обычно 6-7 вызовов системных функций защита не трогает, и после декомпресии кода и данных, в старой иат эти адреса остаются+"мусор".
Свипу это не нравится, ему мало места для восстановления иат....))))
Сорри, с правкой этих ячеек косяк мой.
//после прохода к оеп ( по скрипту), перед свип_анализом, в конце скрипта была вставка для этой проги , я о ней забыл...)))
=====

Vamit пишет:
Можешь дать файлик

dll от загрузчика игрушки, крякеры опечатали экспортируемые функи, размеры фунок небольшие, от 20 до 100 байт. пока с релоками разгребаю.

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 16 февраля 2011 18:15
· Личное сообщение · #14

Vamit пишет:
Самое узкое место - восстановление соответствия регистров ЦПУ и ВМ. В большинстве случаев 100% восстановить соответствие не удается.

вобщем, все равно я чего то не догоняю. Может, видео выложишь с примером распаковки какой-либо проги? Можно будет в шапку засунуть, всем будет полезно.

-----
SaNX


| Сообщение посчитали полезным: MasterSoft


Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 16 февраля 2011 18:19 · Поправил: Vamit
· Личное сообщение · #15

Свипу это не нравится, ему мало места для восстановления иат
Да, бывает такое, хотя чаще вместо мусора вмпрот пихает туда свой код, если секционность ИАТ ( с оставшимися в ней функами) глазами не прослеживается, то можно помочь Свиперу, записав в ИАТ принудительно разделители секций (когда он просит ввести её адреса).

SaNX пишет:
Может, видео выложишь с примером распаковки какой-либо проги?

Вот не поверишь, ни разу видео не делал, может попросим других сделать... многие уже со Свипером на ты.

-----
Everything is relative...




Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 16 февраля 2011 20:24
· Личное сообщение · #16

Vamit пишет:
Вот не поверишь, ни разу видео не делал

www.fraps.com/download.php

Просто поставить фрапс и нажать "рекорд"

-----
SaNX





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 16 февраля 2011 21:46 · Поправил: Vamit
· Личное сообщение · #17

SaNX пишет:
Просто поставить фрапс и нажать "рекорд"

Ладно попробую, только без реальной проги толку от этого видео будет мало - нужно руками и головой работать.
Скачай тестовый пример отсюда, если раньше этого не делал, он 100% декомпилится. Сложность там одна - куда поставить хардбряк для проведения полного анализа проги, т.к. ОЕП полностью сожран протом. Подсказка - 454150, и вперед, если что не получится - сообщи. Если же этот пример тобой уже обкатан, то и на любой другой проге можно понять что нужно делать, а видео здесь не поможет, т.к. в каждом случае нужно думать головой, да и хелп перечитать не помешает.

ЗЫ: Может, видео выложишь с примером распаковки какой-либо проги? Не понял, видео по распаковке проги или по декомпиляции какой-либо функции? Это разные вещи...

-----
Everything is relative...





Ранг: 154.2 (ветеран), 66thx
Активность: 0.080
Статус: Участник
REVENGE Crew

Создано: 18 февраля 2011 20:14
· Личное сообщение · #18

Vamit,

У меня кстати последние версии свипера (v1.4 beta 3, 6, 7, 8, 9) не декомпилируют EP указанного тобой тестового примера — дважды ругается «Not leveled stack (pos = 0)», а потом «Cycle VMProtect not recognized!».




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 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...





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 19 февраля 2011 00:21
· Личное сообщение · #20

Vamit пишет:
Проблему скорее всего следует искать в самой Ольке или её окружении

+1, чистая олька с анализом кода, + фант с патчингом для олькиных окон (возможно не обязательо) и защитой drx регистров ( на 7х64 не пашет), и стронг с хайдами (на 7х64 не пашет), патчинг от плешивого до , либо у меня нет конкретных примеров где от него есть толк....
//чтобы вкурить разницу позитива.
ибо любое гавно лЁтает... и так, и на декомпиль не влияет
Чтобы получить натив с любой приблуды, надо по меньшей мере быть автором свипа...

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 19 февраля 2011 15:01
· Личное сообщение · #21

Для защиты от Вмпрота:
+ фант с патчингом для олькиных окон (возможно не обязательо) не нужен
защитой drx регистров ( на 7х64 не пашет) не нужно, есть встроенная в Свипер
стронг с хайдами (на 7х64 не пашет) не нужен, возможны конфликты с инлайном Свипера
патчинг от плешивого до здесь ничего сказать не могу ни за, ни против

надо по меньшей мере быть автором свипа... преувеличение, если понимаешь что делаешь, то ничего сложного нет...

-----
Everything is relative...




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 19 февраля 2011 15:48
· Личное сообщение · #22

Bronco скачал подборку разных сборок ольки, для ВМ прота ща юзаю OllyDBG VMP Edition. Пока доволен

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 88.2 (постоянный), 111thx
Активность: 0.070.01
Статус: Участник

Создано: 19 февраля 2011 16:00
· Личное сообщение · #23

OllyDBG VMP Edition - где сей сабж скачать?



Ранг: 129.0 (ветеран), 116thx
Активность: 0.060
Статус: Участник

Создано: 19 февраля 2011 16:17
· Личное сообщение · #24

Airenikus пишет:
OllyDBG VMP Edition - где сей сабж скачать?

OllyDBG VMP Edition

-----
We do what we want because we can.


| Сообщение посчитали полезным: Airenikus

Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 19 февраля 2011 16:20 · Поправил: VodoleY
· Личное сообщение · #25

ollydbgModPack.rar погуглите. около 22метра
P.S сори не видел твоего поста
обнаружилась странная хрень, както яростно ВМпротект реагирует на использование DR4 регистра. Орет на дебугер детектед. Фантом почемуто от этого не спасает (DR1..3) работают норм.. хз в чем дело
Vamit я как всегда не прав. Не дочитался что примитив VMExit имеет 2 выхода. за 6 часов получил трассу с выходом на ЕП проги, такой же адрес дал свипер. Как всегда респект.
P.S.S. в общих чертах закончил скрипт для ольки на хардваре бряках для создание трассы и новертор этих логов в более менее читабельный вид. если кому интересно стучите.

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 154.2 (ветеран), 66thx
Активность: 0.080
Статус: Участник
REVENGE Crew

Создано: 20 февраля 2011 17:52
· Личное сообщение · #26

Vamit пишет:
Если речь идет о VmpTest.exe с либой RCMicroDogSetup.dll, то ЕП по адресу 1AAD8D6 декомпилируется без проблем, как и все другие вм в этом файле, любыми версиями Свипера. Проблему скорее всего следует искать в самой Ольке или её окружении. Я использую чистую Ольку с патчем от Int'a.


Разобрался — помог реанализ кода (Ctlr+A) перед началом декомпиляции EP.
После него уже не ругается и декомпилирует.



Ранг: 1.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 февраля 2011 20:29 · Поправил: Je4Ry
· Личное сообщение · #27

Why only this thread was protected from Google Translator ?
I want to learn too !!!

Copying + Pasting every single post into Google is bit boring .

Thanks .




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 20 февраля 2011 20:46
· Личное сообщение · #28

Learn russian language.

-----
Лучше быть одиноким, но свободным © $me


| Сообщение посчитали полезным: _ruzmaz_, VodoleY

Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 21 февраля 2011 01:09
· Личное сообщение · #29

не в той стране родился

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 21 февраля 2011 15:15
· Личное сообщение · #30

Унпачу либу, "родная" таблица релоков, валидная условно наполовину. Саму табличку путём сравнения двух дампов (один под олькой, второй из под приблуды), с разным IB , восстанавливаю с нуля, после импорта.
Секция анти_анти_дамп готова. Вопрос к тем, кто пересекался. Для секций защиты, таблица перемещений необходима ?
И второй вопрос, функи по экспорту, свип декомпилит ?
//декомпиль ведь в динамике.

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 21 февраля 2011 17:55
· Личное сообщение · #31

функи по экспорту, свип декомпилит ?
Декомпилит всё, на что можно поставить ЕИП . Вопрос в другом - насколько корректным может быть код после него, лучший код получается когда точка входа как первоначальная, так и последующие находятся по исполняемому пути, но возможны и прыжки на них, и чем он ближе к точке, тем лучше...

-----
Everything is relative...



<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 23 . 24 . >>
 eXeL@B —› Протекторы —› Декомпилятор ВМ
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати