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




Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 01 ноября 2012 21:54 · Поправил: Kuzya69
· Личное сообщение · #2

Может лучше в личку или Аську, чтоб здесь тему не засорять?

Сообщение последнее в строке статуса какое?
Еще-бы знать, где это находится? Или имелся ввиду Олли-дебагер?
Та строка с процентом выполнения погасла, я как-бы просто в Олли нахожусь. На переходнике "push-jmp" в следующую ВМ.



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

Создано: 02 ноября 2012 00:01 · Поправил: vnekrilov
· Личное сообщение · #3

Kuzya69 пишет:
Может лучше в личку или Аську, чтоб здесь тему не засорять?


Материалов по практике применения декомпилятора VM очень мало. До многого приходится доходить самому. Поэтому такая открытая переписка может оказаться полезной для всех, кто работает с декомпилятором, и которая показывает, на какие грабли не нужно наступать.

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


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

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

vnekrilov
Если кому-то, что-то непонятно по Свиперу и Вмпроту, то спрашивайте - отвечу.

-----
Everything is relative...


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


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

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

Статья Protect&Sweeper содержит основные материалы этой темы по алгоритмам защиты ВмПротекта и методам их устранения Свипером с добавлением эксклюзивного нигде ранее не опубликованного материала.
Будет полезна всем, имеющим дело с декомпилятором и протектором.

-----
Everything is relative...


| Сообщение посчитали полезным: Veliant, schokk_m4ks1k, SReg, daFix, Hugo Chaves, tihiy_grom, Gideon Vi, antipod, -Sanchez-, m0bscene, obfuskator, stas_02, zeppe1in, NikolayD, sivorog, bitgame, Jupiter, BoRoV, MattRoss

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

Создано: 02 ноября 2012 14:52 · Поправил: schokk_m4ks1k
· Личное сообщение · #6

Vamit
статья полезная спору нет, только твоя статья вышла 25 марта 2010, за два года с лишним уже произошли изменения в вмпроте! или нету разницы в сроке давности статьи? если я в чем то не прав, поправь меня)




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

Создано: 02 ноября 2012 15:06
· Личное сообщение · #7

schokk_m4ks1k
Конечно не прав, статья вышла сегодня, а к тем пунктам которые изменились в ней имеются Примечания.

-----
Everything is relative...


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

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

Создано: 02 ноября 2012 15:17
· Личное сообщение · #8

Vamit

Прекрасная работа. Мне очень понравилась. Удачи тебе.



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

Создано: 02 ноября 2012 15:26
· Личное сообщение · #9

Vamit Как всегда респект

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




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

Создано: 02 ноября 2012 16:08
· Личное сообщение · #10

Vamit пишет:
Конечно не прав, статья вышла сегодня, а к тем пунктам которые изменились в ней имеются Примечания.

спасибо за разьяснения) статья супер! может ты б дату в статье поменял? ну вообщем разницы не имеет) я от тебя услышал что статья свежая, мне этого хватило! Пасибо тебе!!!




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

Создано: 02 ноября 2012 16:12
· Личное сообщение · #11

schokk_m4ks1k
Для тех, кто не понял, даты в статье - это хронология постов из этой темы форума.

-----
Everything is relative...




Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 03 ноября 2012 06:47
· Личное сообщение · #12

А что означает ошибка:
"Decompiled code is too long " ?




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

Создано: 03 ноября 2012 11:04
· Личное сообщение · #13

Kuzya69
Восстановленный Свипером асм код имеет два адреса - начальный (адрес начала декомпиляции, на котором нажали F1) и конечный (адрес конца восстановленного кода). Если последний адрес по каким либо причинам Свипер вычислить не смог и он равен нулю, то и будет выдано это сообщение.

-----
Everything is relative...


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

Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

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

А не предусмотрено, принудительно задать конечный адрес?




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

Создано: 03 ноября 2012 12:24
· Личное сообщение · #15

Vamit пишет:
то спрашивайте - отвечу

может проще зациклить тех кто часто спрашивает друг на друга в одну группу с единой задачей
в отдельном топике




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

Создано: 03 ноября 2012 14:21
· Личное сообщение · #16

Kuzya69
Нет, этот адрес Свипер вычисляет сам, если не смог, значит есть какие-то ошибки, и принудительность здесь не поможет.

r99
Не думаю...

-----
Everything is relative...





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

Создано: 03 ноября 2012 18:13
· Личное сообщение · #17

Я встречал, когда адрес выхода из call не совпадал и свипер вешался.



Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 04 ноября 2012 16:44 · Поправил: Kuzya69
· Личное сообщение · #18

Все оказалось до банальности просто. Надо быть вниманетельней. Правильно выбирать точку входа и границы областей. У меня свипер даже подменный код сам внедрил в программу. И этот код заработал.
Я восхищаюсь вашим творением, мастер!
Остался правда вопрос, почему подменный код, размером меньше украденного? В одном месте раза в два различие. Это что, чудеса деобсфускации?




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

Создано: 04 ноября 2012 18:09
· Личное сообщение · #19

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

-----
Everything is relative...




Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 04 ноября 2012 18:22 · Поправил: Kuzya69
· Личное сообщение · #20

Ну да, функи мелкие, просто интересовало:
"А не пропустил, ли свипер чего?"


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




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

Создано: 09 ноября 2012 11:45
· Личное сообщение · #21

Kuzya69
Из скрипта вызвать нельзя

-----
Everything is relative...




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

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

Уважаемый Vamit а можно как-то решить проблему с длиной инструкции вызова импорта? Прошу извинить если уже поднимался вопрос.
до плагина
E8 8D224100 CALL 00863F3B
после плагина
FF15 5C165300 CALL DWORD PTR DS:[53165C] ; user32.DispatchMessageW




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

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

neprovad
Ну и что здесь неправильно? Импортируемые функции вызываются через IAT.

-----
Everything is relative...


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

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

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

Vamit
Инструкция, измененная плагином, длинней предыдущей из-за чего следующая инструкция после CALL искажается на один байт. Хотя, по идее, можно было бы менять в последовательности CALL->JMP API сам JMP API вместо CALL. Сама ситуация меня не напрягает просто чем не идея для последующей доработки плагина?




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

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


искажается на один байт

этот байт как правило не нужен




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 12 ноября 2012 13:24 · Поправил: ClockMan
· Личное сообщение · #26

neprovad пишет:
Хотя, по идее, можно было бы менять в последовательности CALL->JMP API сам JMP API вместо CALL.

Цитата из фильма "Иван Васильевичь меняет проффесию"
Когда вы говорите Иван Васильевичь в печатление такое что вы бредите!
Что FF15 5C165300 CALL DWORD PTR DS:[53165C] или FF25 5C165300 JMP DWORD PTR DS:[53165C] длина комманд одинаковая, или вы хотите может чтоб сразу было JMP user32.DispatchMessageW

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.


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


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

Создано: 12 ноября 2012 13:31
· Личное сообщение · #27

Вообще, сдаётся мне, он имеет в виду, что не менять call, а заставить его указывать на jmp [], который указывает на импорт и который уже и менять. И тогда проблем с длиной не будет. Чем его 1 перезаписанный байт не устраивает, я хз. Возможно, тем, что иногда лишний байт после колла, а иногда ДО, и не всегда ситуация распознаётся корректно. Впрочем, с предложенным вариантом, чтобы call указывал на jmp [], тоже не всё гладко. Иногда лишний байт перед коллом-это push reg32, который надо снимать со стека.

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

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

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

А когда после CALL DispatchMessage идет вполне осмысленный переход?

Code:
  1. EB 0F                             jmp     short loc_451CBF


то появление POP ES на месте JMP не совсем то чего ждешь.
[quote ]Когда вы говорите Иван Васильевичь в печатление такое что вы бредите![/quote]
Единственное что я хочу чтобы плагин не вносил искажений в код. Вручную я уже все исправил но все же это немного утомляет.




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

Создано: 12 ноября 2012 18:58
· Личное сообщение · #29

neprovad пишет:
чтобы плагин не вносил искажений в код

реальный пример с указанием места ошибки - автору плагина



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

Создано: 22 июля 2013 21:49 · Поправил: NeverMore
· Личное сообщение · #30

Any update?



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

Создано: 04 декабря 2013 13:30
· Личное сообщение · #31

NeverMore

--> Last one Beta2 <--

-----
...или ты работаешь хорошо, или ты работаешь много...



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