Сейчас на форуме: (+9 невидимых) |
![]() |
eXeL@B —› Протекторы —› Декомпилятор ВМ |
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 23 . 24 . >> |
Посл.ответ | Сообщение |
|
Создано: 03 марта 2010 12:33 · Личное сообщение · #1 Вашему вниманию предлагаются наработки по декомпиляции ВМ. Проект на сегодняшний день для меня завершен, но жаль если результат "ляжет на полку", может кому-нибудь и пригодится. Предлагаю сначала ознакомиться с обзором, и если будет интерес то могу выложить и сам плагин, или здесь или в личку заинтересованным лицам, каким образом, пока ещё не решил... Но если кто-либо ожидает увидеть "автоматическое чудо", то сразу скажу - его нет. Для того чтобы получить результат нужна ручная предварительная работа: - с исследуемой программы должна быть снята упаковка - точки входа в ВМ находятся вручную - возможно неоднократное "жамкание" клавиш в OllyDbg, а возможно и модификация кода, чтобы попасть в нужное место, в зависимости от защищенной функции - необходимо вручную прицепить к программе требуемый секцию - запись результатов в файл это тоже ручная работа, но уже более приятная Не всё гладко обстоит с определением реализаций ВМ, на сегодняшний день примерно каждая третья реализация автоматом не определяется, приходится под неё модернизировать плагин, т.к. не могу сразу предусмотреть все случаи "издевательств" ВМ с кодом примитивов. Лучше дела с восстановлением "исходного" кода защищенных функций - 70% нормально восстанавливается, хотя во многом это зависит от самой структуры функции. Таким образом, если будет заинтересованность и помощь в нахождении подобных ситуаций, то проект может быть доведен до релизной стадии. ЗЫ: Речь идет об Ореановских машинах. Нигде специально не упоминал. ![]() ----- Everything is relative... ![]() |
|
Создано: 08 апреля 2014 21:06 · Личное сообщение · #2 По многочисленным просьбам WMSweeper 1.5 beta 3 Изменений много, но не фиксировал, дорабатывал под себя... ![]() ----- Everything is relative... ![]() |
|
Создано: 08 апреля 2014 22:41 · Поправил: Quikken · Личное сообщение · #3 Thank you for update. My target gets IAT resolved by your plugin, but all VM functions return error. I followed all instructions, but seems the VM is not recognized properly by the plugin. Google Translation: Спасибо за обновления. Моя цель получает IAT решены вашего плагина, но все функции ВМ вернет ошибку. Я следовал всем инструкциям, но, кажется, В.М. не распознан надлежащим образом с помощью плагина. VMP Target / ВМП Целевая: http://www.sendspace.com/file/4i93ob ![]() ![]() ![]() |
|
Создано: 09 апреля 2014 10:17 · Личное сообщение · #4 Quikken пишет: Thank you for update. My target gets IAT resolved by your plugin, but all VM functions return error. I followed all instructions, but seems the VM is not recognized properly by the plugin. У вас dll файл, а в dll в последних протекторах добавлен новый примитив. Что он делает я не разбирался, следовательно обработчик примитивов под него не написан. Exe файлы декомпилируются в большинстве случаев нормально. ----- Everything is relative... ![]() |
|
Создано: 12 апреля 2014 19:13 · Личное сообщение · #5 Quikken пишет: Not recognize VM primitive 0E Code:
На вызов API похоже. ![]() |
|
Создано: 06 мая 2014 15:20 · Личное сообщение · #6 |
|
Создано: 06 мая 2014 16:21 · Личное сообщение · #7 AutumnRain Нигде ![]() ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 06 мая 2014 17:04 · Личное сообщение · #8 |
|
Создано: 06 мая 2014 18:17 · Поправил: VodoleY · Личное сообщение · #9 AutumnRain есть вариант получения декомпиляции свипера без этого примитива. я когдато так поступал, когда свипер не мог многие примитивы распозновать. тебе надо в таблице адресов примитива, неизвестный заменить на какойто известный, свипер хоть и кривой код.. но построит. НО надо будет учитывать эту поправку.. НО по крайней мере хоть валиться не будет З.Ы. 1 примитив можно и руками разобрать, и в нужных местах ставить себе пометочки. это лучше чем всю рутину лопатить ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... ![]() |
|
Создано: 06 мая 2014 19:23 · Личное сообщение · #10 VodoleY Заменить адрес примитва не получиться, т.к. таблица адресов примитивов используется в работе VMProtector'а. И потом, даже если обмануть VMSweeper, то не понятно в каких местах сгенерированного кода нужно внести коррективы. VMSweeper к сожалению не ведет лог по которому было бы виден порядок исполнения примитивов. ![]() |
|
Создано: 07 мая 2014 08:49 · Поправил: VodoleY · Личное сообщение · #11 AutumnRain ДА ЧТО ВЫ ГОВОРИТЕ???!! вы открыли глаза на суть проблемы! оказывается примитивы испрользуются ВМПротом... о как.. Курите сорцы. Фокус имменно в замене адресов в таблице примитивов. это в главном цикле виртуальной машины, табличка аля lea edx,[eax*4+xxxxxx] xxxxx-это и есть ваша таблица З.Ы, и не надо гнать на свипер. логово он ведет больше чем надо, другой вопрос что их никто не читает.. если вам с неизвестной прогой сложно, возмите пример по проще, хотя бы тот что вместе со свипером идет.. поиздевайтесь сначала над ним ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... ![]() |
|
Создано: 07 мая 2014 09:23 · Поправил: AutumnRain · Личное сообщение · #12 |
|
Создано: 07 мая 2014 10:31 · Личное сообщение · #13 |
|
Создано: 07 мая 2014 10:45 · Личное сообщение · #14 |
|
Создано: 07 мая 2014 11:22 · Личное сообщение · #15 Nightshade Это все есть в лог файлах, всё что делает Свипер (в последовательности действий) записывается в файлы. Первый код созданный свипером это промкод - примитив вм заменяется кратким исполняемым аналогом, про него и идет речь, там много push/pop, т.к. вм стековая, всё это есть в файле .trc, вообще-то где-то был пост о всех логах и что в них содержится, только большинство их читать не умеют... Свипер частенько не собирает код в нормальный вид, но это можно сделать и руками. Конечно можно, если декомпиль дошел до секции a12 final и вы умеете читать логи и способны ЛОГИЧЕСКИ ПОНИМАТЬ ПРОИСХОДЯЩЕЕ, но для этого промкод не нужен (туда можно заглядывать в исключительных случаях), в основном всё нужное находится в .log файле. ----- Everything is relative... ![]() |
|
Создано: 07 мая 2014 11:26 · Поправил: AutumnRain · Личное сообщение · #16 |
|
Создано: 07 мая 2014 11:52 · Личное сообщение · #17 |
|
Создано: 07 мая 2014 11:56 · Личное сообщение · #18 |
|
Создано: 07 мая 2014 18:33 · Личное сообщение · #19 Ловите WMSweeper 1.5 beta 4 ![]() ----- Everything is relative... ![]() |
|
Создано: 16 мая 2014 10:51 · Личное сообщение · #20 Добрый день всем. Vamit, используя ваш замечательный плагин, я часто сталкиваюсь с ошибкой преобразования кода на этапе a10. В результате в OllyDbg попадет код в следующем виде: Code:
т.е. вместо условного перехода - безусловный. Можно ли сделать так, чтобы переход все же остался условным? Хотя бы в виде: Code:
P.S. Еще раз огромное спасибо за ваш плагин. ![]() |
|
Создано: 16 мая 2014 15:06 · Поправил: Initial · Личное сообщение · #21 AutumnRain, то, что Вы видите - это промежуточный код (п-код заменен ассемблерными вариантами примитивов) На момент его создания декомпилятор еще не знает, что должно быть в конце блока (JMP или Jcc), поэтому там просто безусловный переход на одну из веток. На это не стоит обращать внимания, декомпилятор продолжает разбирать вм дальше, но это отражается только в файлах лога. Там в большинстве случаев есть вполне приемлемый для анализа код. ![]() |
|
Создано: 16 мая 2014 15:30 · Личное сообщение · #22 Initial пишет: На это не стоит обращать внимания поддерживаю предыдущий пост. свипер это инсрумент.. это не ОнеКлик софт для снятия вмпрота. попробуйте полазить по логам свипера их там предостаточно аж с избытком. если научитесь в них разбираться будет вам щастье ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... ![]() |
|
Создано: 16 мая 2014 16:08 · Личное сообщение · #23 Так я же не против полазить по логам. Просто не очень понятно зачем в исследуемой программе вставляется промежуточный код который 100% не будет работать из-за безусловных переходов. Причем вставка промежуточного кода происходит после возникновения ошибки на этапе a10. На этот момент VMSweeper уже обладает информацией для построения условного перехода. Мое предложение доработки даст возможность получить работающий код. Который можно будет оптимизировать своим плагином, до получения полного собственного удовольствия. ![]() Или простепать, если возникнет желание уточнить работу программы (сверяясь с логами VMSweeper'а) ![]() |
|
Создано: 16 мая 2014 16:38 · Поправил: OKOB · Личное сообщение · #24 Свипер уже попал в референсы статей по ВМ http://ru.scribd.com/doc/222907805/Introduction-to-Modern-Code-Virtualization ЗЫ: оказывается баян и на тутси еще в январе 2014 ----- 127.0.0.1, sweet 127.0.0.1 ![]() |
|
Создано: 16 мая 2014 17:07 · Поправил: VodoleY · Личное сообщение · #25 AutumnRain это все следствие реализации логики ВМ прота.. там идет вычисление адреса джампа из констант в ленте ПиКода, с подмешиванием флагов. поэтому там по факту всегда джамп, а вот адрес.. вопрос вычисления З.Ы т.е нет 2ух jne xxx jmp yyy, а есть один jmp eax.. ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... ![]() |
|
Создано: 16 мая 2014 17:15 · Личное сообщение · #26 AutumnRain пишет: Причем вставка промежуточного кода происходит после возникновения ошибки на этапе a10. На этот момент VMSweeper уже обладает информацией для построения условного перехода. Этот код составляется еще до секции move line в лог файле. А в случае неудачи, зачем-то в место начала декомпиляции ставится JMP на него . (наверно в отладочных целях) ![]() |
|
Создано: 16 мая 2014 17:31 · Личное сообщение · #27 |
|
Создано: 16 мая 2014 17:35 · Поправил: Initial · Личное сообщение · #28 |
|
Создано: 17 мая 2014 12:43 · Личное сообщение · #29 Initial пишет: VodoleY, все так. Но я писал про JMP который ставится на адрес начала декомпиляции, мы, стоя на нём, нажимаем F1. это вообще не то не то ![]() ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... ![]() |
|
Создано: 08 августа 2014 16:35 · Личное сообщение · #30 Может кто сталкивался, пробую декомпиль на паре фунок, идёт декомпиляция, через некоторое время получаю: Code:
свипер 1.5 beta 4, сам софт не упакован, только 4 функи под ВМ. ----- ds ![]() |
|
Создано: 09 августа 2014 10:16 · Личное сообщение · #31 |
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 23 . 24 . >> |
![]() |
eXeL@B —› Протекторы —› Декомпилятор ВМ |