Сейчас на форуме: (+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...





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

Создано: 08 апреля 2014 21:06
· Личное сообщение · #2

По многочисленным просьбам WMSweeper 1.5 beta 3
Изменений много, но не фиксировал, дорабатывал под себя...

62f8_08.04.2014_EXELAB.rU.tgz - VMSweeper.rar

-----
Everything is relative...


| Сообщение посчитали полезным: Quikken, SReg, Jaa, Airenikus, 4kusNick, daFix, Gideon Vi, VodoleY, CyberGod, Ultras, BAHEK, mak, Isaev

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

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








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

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




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

Создано: 12 апреля 2014 19:13
· Личное сообщение · #5

Quikken пишет:
Not recognize VM primitive 0E


Code:
  1.          mov al, byte ds:[esi-1]
  2.          ~~~
  3.          movzx ecx,al
  4.          lea eax,[ecx*4+ebp]
  5.          mov dword ss:[ebp-4],eax
  6.          test ecx,ecx
  7.          je label1
  8. label2:
  9.          xor eax, eax
  10.          xchg dword ss:[ecx*4+ebp],eax
  11.          push eax
  12.          dec ecx
  13.          jne label2
  14. label1:
  15.          xor eax,eax
  16.          xchg dword ss:[ebp],eax
  17.          call eax
  18.          mov ebp, dword ss:[ebp-4]
  19.          mov dword ss:[ebp],eax

На вызов API похоже.



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

Создано: 06 мая 2014 15:20
· Личное сообщение · #6

Я тоже столкнулся с таким примитивом.
Если нужно могу прислать код примитива или файл полностью.

P.S. Не нашел где можно скачать исходники VMSweeper




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 06 мая 2014 16:21
· Личное сообщение · #7

AutumnRain
Нигде

-----
Stuck to the plan, always think that we would stand up, never ran.


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

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

Создано: 06 мая 2014 17:04
· Личное сообщение · #8

Плохо. Тогда будем ждать Vamit



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

Создано: 06 мая 2014 18:17 · Поправил: VodoleY
· Личное сообщение · #9

AutumnRain есть вариант получения декомпиляции свипера без этого примитива. я когдато так поступал, когда свипер не мог многие примитивы распозновать. тебе надо в таблице адресов примитива, неизвестный заменить на какойто известный, свипер хоть и кривой код.. но построит. НО надо будет учитывать эту поправку.. НО по крайней мере хоть валиться не будет
З.Ы. 1 примитив можно и руками разобрать, и в нужных местах ставить себе пометочки. это лучше чем всю рутину лопатить

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




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

Создано: 06 мая 2014 19:23
· Личное сообщение · #10

VodoleY Заменить адрес примитва не получиться, т.к. таблица адресов примитивов используется в работе VMProtector'а.

И потом, даже если обмануть VMSweeper, то не понятно в каких местах сгенерированного кода нужно внести коррективы. VMSweeper к сожалению не ведет лог по которому было бы виден порядок исполнения примитивов.



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

Создано: 07 мая 2014 08:49 · Поправил: VodoleY
· Личное сообщение · #11

AutumnRain ДА ЧТО ВЫ ГОВОРИТЕ???!! вы открыли глаза на суть проблемы! оказывается примитивы испрользуются ВМПротом... о как.. Курите сорцы. Фокус имменно в замене адресов в таблице примитивов. это в главном цикле виртуальной машины, табличка аля lea edx,[eax*4+xxxxxx] xxxxx-это и есть ваша таблица
З.Ы, и не надо гнать на свипер. логово он ведет больше чем надо, другой вопрос что их никто не читает.. если вам с неизвестной прогой сложно, возмите пример по проще, хотя бы тот что вместе со свипером идет.. поиздевайтесь сначала над ним

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




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

Создано: 07 мая 2014 09:23 · Поправил: AutumnRain
· Личное сообщение · #12

VodoleY Я наверно не точно выразился. Сами адреса из таблицы адресов в виде данных используются. По ним считается CRC. Которая потом идет еще куда-то.
Я вставлял в код не распознанного примитива jmp на код распознанного примитива. Но полученный код сильно уходит в сторону от оригинала.




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

Создано: 07 мая 2014 10:31
· Личное сообщение · #13

Привет всем!
Если у вас dll, то пока с ними ковыряться некогда, там ещё есть что-то..., если же экзешник с неизвестным примитивом то могу помочь - высылайте прогу и инфу где падает.
Насчет логов - там есть всё, даже то, что вам никогда не понадобится

-----
Everything is relative...





Ранг: 241.9 (наставник), 107thx
Активность: 0.140.01
Статус: Участник

Создано: 07 мая 2014 10:45
· Личное сообщение · #14

Vamit
Как-то раз видел как свипер создал код из кучи push и pop. Этот код потом оптимизировался и приводился в нормальный вид. Можно ли в свипере добавить галку оставлять код в таком виде? Свипер частенько не собирает код в нормальный вид, но это можно сделать и руками.




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

Создано: 07 мая 2014 11:22
· Личное сообщение · #15

Nightshade
Это все есть в лог файлах, всё что делает Свипер (в последовательности действий) записывается в файлы.
Первый код созданный свипером это промкод - примитив вм заменяется кратким исполняемым аналогом, про него и идет речь, там много push/pop, т.к. вм стековая, всё это есть в файле .trc, вообще-то где-то был пост о всех логах и что в них содержится, только большинство их читать не умеют...
Свипер частенько не собирает код в нормальный вид, но это можно сделать и руками.
Конечно можно, если декомпиль дошел до секции a12 final и вы умеете читать логи и способны ЛОГИЧЕСКИ ПОНИМАТЬ ПРОИСХОДЯЩЕЕ, но для этого промкод не нужен (туда можно заглядывать в исключительных случаях), в основном всё нужное находится в .log файле.

-----
Everything is relative...




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

Создано: 07 мая 2014 11:26 · Поправил: AutumnRain
· Личное сообщение · #16

Vamit
Вот ссылка на файлы




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

Создано: 07 мая 2014 11:52
· Личное сообщение · #17

AutumnRain
Доступ к данному ресурсу закрыт оператором связи по решению Роскомнадзора, прикрепи файл прямо к посту - размер небольшой...

-----
Everything is relative...





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 07 мая 2014 11:56
· Личное сообщение · #18

http://rghost.ru/55001876
перезалил

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


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

Создано: 07 мая 2014 18:33
· Личное сообщение · #19

Ловите WMSweeper 1.5 beta 4

eaa8_07.05.2014_EXELAB.rU.tgz - VMSweeper.rar

-----
Everything is relative...


| Сообщение посчитали полезным: Jaa, AutumnRain, VodoleY, mak, CyberGod, vnekrilov, daFix, MarcElBichon, v00doo, Gideon Vi, Ra1n0, ClockMan, Mishar_Hacker

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

Создано: 16 мая 2014 10:51
· Личное сообщение · #20

Добрый день всем.

Vamit, используя ваш замечательный плагин, я часто сталкиваюсь с ошибкой преобразования кода на этапе a10. В результате в OllyDbg попадет код в следующем виде:

Code:
  1. 00060391   FF35 1C000600    PUSH DWORD PTR DS:[6001C]
  2. 00060397   FF35 08000600    PUSH DWORD PTR DS:[60008]
  3. 0006039D   FF35 04000600    PUSH DWORD PTR DS:[60004]
  4. 000603A3   FF35 28000600    PUSH DWORD PTR DS:[60028]
  5. 000603A9   FF35 1C000600    PUSH DWORD PTR DS:[6001C]
  6. 000603AF   FF35 30000600    PUSH DWORD PTR DS:[60030]
  7. 000603B5   FF35 24000600    PUSH DWORD PTR DS:[60024]
  8. 000603BB   68 7697598B      PUSH 8B599776
  9. 000603C0   FF35 3C000600    PUSH DWORD PTR DS:[6003C]
  10. 000603C6   58               POP EAX
  11. 000603C7   010424           ADD DWORD PTR SS:[ESP],EAX
  12. 000603CA   9C               PUSHFD
  13. 000603CB   8F05 2C000600    POP DWORD PTR DS:[6002C]
  14. 000603D1   FF35 10000600    PUSH DWORD PTR DS:[60010]
  15. 000603D7   FF35 38000600    PUSH DWORD PTR DS:[60038]
  16. 000603DD   58               POP EAX
  17. 000603DE   030424           ADD EAX,DWORD PTR SS:[ESP]
  18. 000603E1   E9 00000000      JMP 000603E6
  19. 000603E6   8F05 04000600    POP DWORD PTR DS:[60004]
  20. 000603EC   68 8A68A674      PUSH 74A6688A


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

Code:
  1. CMP EAX, jccAddr0
  2. JE newAddr0
  3. JMP newAdd4


P.S. Еще раз огромное спасибо за ваш плагин.



Ранг: 3.5 (гость), 3thx
Активность: 0.010
Статус: Участник

Создано: 16 мая 2014 15:06 · Поправил: Initial
· Личное сообщение · #21

AutumnRain, то, что Вы видите - это промежуточный код (п-код заменен ассемблерными вариантами примитивов)

На момент его создания декомпилятор еще не знает, что должно быть в конце блока (JMP или Jcc), поэтому там просто безусловный переход на одну из веток.

На это не стоит обращать внимания, декомпилятор продолжает разбирать вм дальше, но это отражается только в файлах лога. Там в большинстве случаев есть вполне приемлемый для анализа код.

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

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

Создано: 16 мая 2014 15:30
· Личное сообщение · #22

Initial пишет:
На это не стоит обращать внимания

поддерживаю предыдущий пост. свипер это инсрумент.. это не ОнеКлик софт для снятия вмпрота. попробуйте полазить по логам свипера их там предостаточно аж с избытком. если научитесь в них разбираться будет вам щастье

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




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

Создано: 16 мая 2014 16:08
· Личное сообщение · #23

Так я же не против полазить по логам. Просто не очень понятно зачем в исследуемой программе вставляется промежуточный код который 100% не будет работать из-за безусловных переходов.

Причем вставка промежуточного кода происходит после возникновения ошибки на этапе a10. На этот момент VMSweeper уже обладает информацией для построения условного перехода.

Мое предложение доработки даст возможность получить работающий код. Который можно будет оптимизировать своим плагином, до получения полного собственного удовольствия.
Или простепать, если возникнет желание уточнить работу программы (сверяясь с логами VMSweeper'а)




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

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


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

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

Создано: 16 мая 2014 17:07 · Поправил: VodoleY
· Личное сообщение · #25

AutumnRain это все следствие реализации логики ВМ прота.. там идет вычисление адреса джампа из констант в ленте ПиКода, с подмешиванием флагов. поэтому там по факту всегда джамп, а вот адрес.. вопрос вычисления

З.Ы т.е нет 2ух jne xxx jmp yyy, а есть один jmp eax..

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


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

Ранг: 3.5 (гость), 3thx
Активность: 0.010
Статус: Участник

Создано: 16 мая 2014 17:15
· Личное сообщение · #26

AutumnRain пишет:
Причем вставка промежуточного кода происходит после возникновения ошибки на этапе a10. На этот момент VMSweeper уже обладает информацией для построения условного перехода.


Этот код составляется еще до секции move line в лог файле.
А в случае неудачи, зачем-то в место начала декомпиляции ставится JMP на него . (наверно в отладочных целях)



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

Создано: 16 мая 2014 17:31
· Личное сообщение · #27

Initial jmp еще ставится как прыжок между 2мя блоками пикода, это когда идет смена адреса, но без пересчета хеша пикода. это внутренняя кухня

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




Ранг: 3.5 (гость), 3thx
Активность: 0.010
Статус: Участник

Создано: 16 мая 2014 17:35 · Поправил: Initial
· Личное сообщение · #28

VodoleY, все так.
Но я писал про JMP который ставится на адрес начала декомпиляции, мы, стоя на нём, нажимаем F1.

PS: хотя, Вы наверно это в ответ на другой пост



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

Создано: 17 мая 2014 12:43
· Личное сообщение · #29

Initial пишет:
VodoleY, все так.
Но я писал про JMP который ставится на адрес начала декомпиляции, мы, стоя на нём, нажимаем F1.

это вообще не то не то) там условных переходов нету. вход в ВМ до главного цикла ВМ это инициализация ВМ. к условным переходам вообще отношения не имеет. там все условные переходы или фиктивные.. или 2 равноценных ветки с разным морфом.. т.е пофигу куда ходить

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





Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 08 августа 2014 16:35
· Личное сообщение · #30

Может кто сталкивался, пробую декомпиль на паре фунок, идёт декомпиляция, через некоторое время получаю:
Code:
  1. ---------------------------
  2. Error
  3. ---------------------------
  4. Unknown identifier in test efl, 0x00000100
  5. ---------------------------
  6. OK   
  7. ---------------------------


свипер 1.5 beta 4, сам софт не упакован, только 4 функи под ВМ.

-----
ds





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

Создано: 09 августа 2014 10:16
· Личное сообщение · #31

DimitarSerg пишет:
идёт декомпиляция, через некоторое время получаю

А в логе что? Секция а12 есть? тогда это конец...

-----
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 » Выход » ЛС
   Для печати Для печати