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




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 11 января 2012 17:43
· Личное сообщение · #2

Выложи файл и адрес скажи.




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

Создано: 12 января 2012 10:09
· Личное сообщение · #3

Nightshade пишет:
Потрассировал обработчик. Получилось такое

edx = [ebp]
ebp += 4
push 0x02F1B781
push edx
ret


balookrd пишет:
у меня подобная ситуация и сам примитив такой же, есть подвижки в решении?


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

-----
Everything is relative...





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

Создано: 12 января 2012 12:22
· Личное сообщение · #4

int пишет:
Выложи файл и адрес скажи.

Уже давали файлы раньше
http://sderni.ru/96372
Интересует вызов 02EEC9B9



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 12 января 2012 12:57
· Личное сообщение · #5

Nightshade
>Указанный файл не найден!




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

Создано: 12 января 2012 15:28 · Поправил: Nightshade
· Личное сообщение · #6

Vamit его скачивал уже. Толку 0
http://narod.ru/disk/36727366001/pvpwar_update_15.1.1_fixed_BSB.exe.html
Вот последняя версия данного файла.
Имя rfonline.bin
сверху накрыт энигмой. В энигму вшита длл. Она накрыта последним вмпротом.
Вызов можно глянуть здесь
00790A96 E8 4FC07502 CALL 02EECAEA
02EECAEA /E9 5B771200 JMP 0301424A - вызов вм
Недостающие файлы могу выложить если интересно глянуть
upd
http://sderni.ru/104272
тут длл для запуска




Ранг: 266.8 (наставник), 5thx
Активность: 0.220.03
Статус: Участник
very WELL :)

Создано: 19 января 2012 11:39
· Личное сообщение · #7

Сорри за офтоп. Кто-нибудь может помочь снять с ехешника вмпрот? Только распаковать. Ссылку на файл скину в личку.



Ранг: 35.4 (посетитель), 15thx
Активность: 0.020
Статус: Участник

Создано: 01 марта 2012 18:24
· Личное сообщение · #8

Code:
  1. Parse: 0 - 0x10002B38: push 10002B3Dh
  2.                                  0x10002B3D
  3. Parse: 1 - 0x1045B6A3: sbb dword ptr ds:[edx + 26h], ecx
  4.                                  edx[0x00000026] - ecx
  5. Parse: 2 - 0x1045B6A6: inc eax
  6.                                  eax + 1
  7. Parse: 3 - 0x1045B6A7: sub ch, byte ptr ss:[ebp + 0FFFFFFAEh]
  8.                                  ecx - ebp[0xFFFFFFAE]
  9. #ERROR# Not define transition in instruction - jecxz.
  10. Parse assign memory
  11. Parse assign registers
  12. Parse assign stack
  13. Adjust block 001
  14. Compile ASSIGN (0, 0)
  15. Compile ASSIGN (1, 1)
  16. Compile ASSIGN (2, 2)
  17. Optimized text a00

Code:
  1. #ERROR# 10211A77: Can't create instruction - FCOMI ST,ST(2)
  2. Parse: 0 - 0x10007A22: push 10007A27h
  3.                                  0x10007A27
  4. Parse: 1 - 0x10211A74: fxch

такие ошибки можно ли считать достаточно серьезными чтоб выкладывать подопытный образец?




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

Создано: 01 марта 2012 21:09
· Личное сообщение · #9

neprovad
Можно не выкладывать - времени всё равно что-либо делать нет...

-----
Everything is relative...





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

Создано: 01 марта 2012 22:09
· Личное сообщение · #10

Vamit
Дайте сорцы декомпиля народу, что ли. Вы, я так понимаю, уже не будете что-то там исправлять.

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


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

Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 02 марта 2012 03:03
· Личное сообщение · #11

ARCHANGEL пишет:
Вы, я так понимаю, уже не будете что-то там исправлять.

зато дерматолог будет

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


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

Создано: 02 марта 2012 09:38
· Личное сообщение · #12

ни кто и не просит выложить для всех. На последних версиях вмпрота декомпиль уже не работает и толку с него уже почти нет. А так бы может поправили




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

Создано: 02 марта 2012 10:29
· Личное сообщение · #13

ARCHANGEL
Сорцы лежат на SVN (годовалой давности), все желающие приглашались в проект, но т.к. толку от этого никакого, то их там перестал обновлять.

SReg
зато дерматолог будет
Это точно, последний вмпрот это показал, я не уверен, что некоторые фишки были добавлены в вмпрот в противодействие Свиперу, но очень на то похоже... Поэтому и прекратил писать обзоры - что и как в вмпроте реализовано.

Nightshade
На последних версиях вмпрота декомпиль уже не работает
Уже работает, изменения касались нескольких разновидностей примитивов, но на очередную бетку ещё не наработал...

А то что я написал Можно не выкладывать - времени всё равно что-либо делать нет... относится не к самому Свиперу, а к прогам им накрытым, посмотреть все запросы и реализовать их я не состоянии, но дорабатываю декомпиль по мере того в чем ковыряюсь сам...

-----
Everything is relative...


| Сообщение посчитали полезным: NIKOLA, neprovad, [Anth]


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

Создано: 17 марта 2012 13:20
· Личное сообщение · #14

Фишка нового вмпрота - переход на новый цикл вм со всеми его атрибутами (направление чтения пикода, хеширование пикода, набор примитивов) в процессе работы вм. Появились два новых примитива, а может быть и больше, которые меняют цикл вм на лету... Теперь нужно обучить этому и декомпилятор...

-----
Everything is relative...




Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 17 марта 2012 16:15
· Личное сообщение · #15

Vamit пишет:
Теперь нужно обучить этому и декомпилятор...

Новый круг гонок вооружения!
Вопрос: можно ли использовать плагин когда а) применена только виртуализация б) только обфускация. Сейчас я так понимаю плаг работает когда обе?




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

Создано: 17 марта 2012 19:08
· Личное сообщение · #16

sendersu
У вмпрота три типа "разжижения" кода:
1. Мутация - вм отсутствует, код обфусцирован, декомпиль не берет. Любая функа декомпилируется руками и головой за несколько минут.
2. Виртуализация - код виртуализован и испольняется под вм, декомпиль работает.
3. Ультра - сначала код мутируется, затем виртуализуется, декомпиль работает, но восстановленный код будет мутирован, который чистится вручную.

-----
Everything is relative...


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


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

Создано: 17 марта 2012 19:37
· Личное сообщение · #17

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

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


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


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

Создано: 18 марта 2012 04:24
· Личное сообщение · #18

на екзетулсе вроде когда то выкладывали



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 18 марта 2012 16:32
· Личное сообщение · #19

Надо бы в хелп или в шапку добавить, что означают ошибки и как с ними бороться. Например, что означают эти ошибки?
Transition outside of a picode - 0x51E54346
Not recognize VM primitive 06
Can't execute VM handler ExitVm in address 0x0083A2D1!




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

Создано: 18 марта 2012 17:04
· Личное сообщение · #20

Transition outside of a picode - 0x51E54346 - условный/безусловный переход идет на пикод с указанным адресом (не путать с реальным переходом, это переход внутри вм на другой кусок пикода).
Not recognize VM primitive 06 - не распознан примитив с номером 6, требуется доработка декомпиля.
Can't execute VM handler ExitVm in address 0x0083A2D1! - при вызове примитива ExitVm декомпилятор не смог построить промкод, а почему - подробности в трейс или лог файле.
С этими ошибками практически юзеру бороться бесполезно, нужна доработка декомпиля, вот только сначала требуется обнаружить истинную причину такой ошибки...

-----
Everything is relative...


| Сообщение посчитали полезным: Vovan666, VodoleY, obfuskator, [Anth]


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

Создано: 21 марта 2012 10:08 · Поправил: Vamit
· Личное сообщение · #21

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

-----
Everything is relative...


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

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

Создано: 21 марта 2012 11:14 · Поправил: VodoleY
· Личное сообщение · #22

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

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





Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 21 марта 2012 13:05 · Поправил: OnLyOnE
· Личное сообщение · #23

VodoleY пишет:
вряд ли будет вся прога такой кашей завернута

Оптимист)
Там где производительность особо не нужна .. там будет
Само собой игры никто не будет накрывать этим..

-----
aLL rIGHTS rEVERSED!


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


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

Создано: 23 марта 2012 09:24
· Личное сообщение · #24

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

-----
Everything is relative...





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 08 апреля 2012 19:36
· Личное сообщение · #25

Vamit а можно к плагину добавить пункт или возможность выбора, чтобы ставить сразу брэйкпоинты на все постпонед точки?!

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





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

Создано: 08 апреля 2012 22:33
· Личное сообщение · #26

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

-----
Everything is relative...





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 09 апреля 2012 00:37 · Поправил: mak
· Личное сообщение · #27

Vamit

Понятно, просто например есть 30 вызовов, я ставил вручную на первые 11 и они при пользовании предварительном не сработали. А вот на 12 все окей, все адреса идут по порядке следования памяти и там вручную рутина ставить останов для декода. В самом листвью нельзя выделить сразу несколько. Может это и не правильно, из за не знания некоторых особенностей порядка декомпиляции, но в некоторых случаях установка на все точки сразу автоматом выбирала первую попавшуюся, а потом уже просьба о перезапуске.

У меня у одного так ?! При защите точки входа можно было бы дать выбор пользователю где ставить хард бряк или мемори бряк на весь ряд постпонед, не хранить эти адресса, но давать возможность установить сразу брэйки на все точки.

То есть я говорю о начальной сессии даже до перезапуска ольки. Я так понял анализ идет не сразу всех блоков а только выбранного.

Или же плагин шагает сам после первого входа в вм по остальным блокам?! Из выше сказанного следует, что изначально нужно выбрать первую правильную конкретную точку входа в целом?! .. Или надо по первому адресу добить прогу, чтобы она вошла в первый постпонед адрес?!

Спасибо!

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

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





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

Создано: 09 апреля 2012 09:41
· Личное сообщение · #28

mak
Написал, конечно, сумбурно и некоторые вопросы вообще не понять... Что можно на всё это ответить - нельзя во всем полагаться на декомпилятор, он не настолько совершенен, включайте голову - и могу ответить по опыту, что получить исходный код большинства функций, накрытых вмпротом, при правильном использовании двух инструментов - головы и декомпилятора - ВОЗМОЖНО. Если же использовать только один инструмент из двух, то НЕТ.

Теперь о точках, найденных декомпилем на стадии анализа кода. Не нужно забывать, что это только ВЕРОЯТНЫЕ входы в вм и не все они нам нужны для декомпиляции функций. На данной стадии они не анализируются на наличие вм определенного типа и включают в себя как начальные точки входа в вм, так и промежуточные, если они расположены в сегменте кода. Точный анализ вм осуществляется только при декомпиляции функции (F1) и правильго его запускать только на фактической точке входа в начало функции, но не на промежуточной.
Я поступаю следующим образом:
- на ОЕП выполняется анализ всех точек входа, окно с результатами сохраняю в файл.
- делаю дамп файла с восстановлением импорта (большую работу по восстановлению импорта декомпиль делает сам, бывает и полностью справляется, но иногда приходиться делать ручную юстировку).
- кормлю дамп Иде и анализирую на РЕАЛЬНЫЕ точки входа в вм на защищенных функциях. Здесь уже, если есть голова, не промахнешся.
- выхожу из Ольки, перезагружаю прогу на ОЕП, нахожу интересующую точку - ставлю на неё бряк, запускаю прогу, если сработал - то F1, если не сработал - то стопаюсь наиболее близко к нему, чтобы стек был раскручен, далее принудительно EIP на точку и F1. Далее, если декомпиль способен, то выдаст вам полсчастья, которое можно довести по долного ручками и головой...

-----
Everything is relative...


| Сообщение посчитали полезным: ClockMan, VodoleY, [Anth], mak


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

Создано: 12 апреля 2012 17:26
· Личное сообщение · #29

Новая версия VMSweeper v1.5 beta 0

VmProtect - включена обработка последней версии
Добавлено:
1. Обработчик примитива вызова простой функции без аргументов и возвращаемого значения.
2. Распознавание примитивов Push/Pop RvmLong с индексацией пикодом.
3. Обработка нескольких ВМ на одной функции, как пакетно, так и отдельным вызовом функции
(опция Decompilate packet в ini файле). Рекомендуется отключить, но если имеются
сложности с нахождением точки входа в пакетную функцию, то следует опцию включить.
4. Декомпиляция кода в зонах смены регистров (опция Decompilate change register zones в ini файле).
При включении эта опция создает дополнительный "мусор" в log файле, рекомендуется использовать
только в том случае, если созданный код без этой опции имеет пропущенные инструкции.
5. Много мелких косметических нюансов.
Исправлено:
1. Реструктуризация промкода.
2. Определение размера аргументов вызываемых функций.

-----
Everything is relative...


| Сообщение посчитали полезным: HandMill, verdizela, ajax, m0bscene, -Sanchez-, schokk_m4ks1k, Yotun, Bronco, YDS, Dart Raiden, _ruzmaz_, obfuskator, huckfuck, daFix, Gideon Vi, yagello, Ultras, antipod, NikolayD, hlmadip, SReg, MarcElBichon, stas_02


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

Создано: 13 апреля 2012 22:37
· Личное сообщение · #30

mak пишет:
возможность выбора, чтобы ставить сразу брэйкпоинты на все постпонед точки

не понял почему это нельзя сделать в плагине - если учесть что прога уже распакована и защита протом этих точек снята




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

Создано: 14 апреля 2012 00:20 · Поправил: Vamit
· Личное сообщение · #31

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

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