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

 eXeL@B —› Протекторы —› VMProtect (Туторы, скрипты, плагины, ...)
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 14 . 15 . >>
Посл.ответ Сообщение


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

Создано: 18 марта 2010 11:56 · Поправил: kioresk
· Личное сообщение · #1

Решил создать отдельную тему по VMProtect'у, чтобы собирать в одном месте информацию по этому проту и обсуждать детали.

Для начала ответ на самый распространенный вопрос.

1. Почему OllyDbg вылетает при запуске программы, защищенной VMProtect'ом?

Потому что VMProtect использует баг с переполнением буфера в старых версиях dbghelp.dll, из-за которого отладчик падает. Чтобы обойти его необходимо исправить баг в dbghelp.dll или положить в папку отладчика новую версию файла dbghelp.dll, который можно взять из комплекта Debugging Tools for Windows:

http://www.microsoft.com/whdc/devtools/debugging/default.mspx

Добавлено

Microsoft включил дистрибутив Debugging Tools в состав пакета Windows SDK (который весит достаточно прилично), поэтому вот альтернативные ссылки на:

1. Дистрибутив Debugging Tools v6.12.2.633 x86 от 26.02.2010 (18,3 Мбайт)

2. Только библиотека dbghelp.dll из дистрибутива Debugging Tools v6.12.2.633 x86 (0,5 Мбайт)



Ранг: 6.0 (гость), 1thx
Активность: 0.050
Статус: Участник

Создано: 11 октября 2015 23:47
· Личное сообщение · #2

Djeck, вот и я не видел, придется курить туторы LCF-AT, хотя они не особо понятные, она не очень объясняет почему именно так. Кстати на сайте много туторов по экзекриптору с аспротектором, интересно почему никто про вмпрот не хочет писать, наверняка им тоже увлекаются крекеры.



Ранг: 196.0 (ветеран), 72thx
Активность: 0.140.02
Статус: Участник

Создано: 12 октября 2015 02:48
· Личное сообщение · #3

mazaxak, если интересует именно распаковка (без вм), то в принципе в нем супер тяжелого ничего нет. ОЕП найти не сложно, как иат восстановить видел в каком-то туторе LCF-AT, причем написано очень даже не плохо. Про инлайн я писал тутор.
Другое дело если программа защищена с вм. По виртуальной машине прота вообще не густо. А если разработчик защитил вм, т.к. написано в хелпе протектора, то труба. В этом случае и оеп можно не найти.



Ранг: 6.0 (гость), 1thx
Активность: 0.050
Статус: Участник

Создано: 12 октября 2015 03:33
· Личное сообщение · #4

Djeck пишет:
если интересует именно распаковка (без вм)

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



Ранг: 196.0 (ветеран), 72thx
Активность: 0.140.02
Статус: Участник

Создано: 12 октября 2015 05:32
· Личное сообщение · #5

mazaxak пишет:
В смысле распаковка других, а не вмпрота

Нет именно вмпрот. Я о том, что без покрытия участков кода виртуальной машиной вмпрот не так силен.
mazaxak пишет:
Протекторы с виртуальной машиной обычно снимал, прикручивая начальные байты по шаблонам. В Execryptor обычно так можно легко сдампить прогу, не изучая саму машину его, а все восстановить по шаблонному началу, подсматривая в стек и регистры.

В вмпроте не так всё легко Вм там действительно сильная, но это моё личное мнение.



Ранг: 6.0 (гость), 1thx
Активность: 0.050
Статус: Участник

Создано: 12 октября 2015 11:00
· Личное сообщение · #6

Djeck пишет:
В вмпроте не так всё легко Вм там действительно сильная, но это моё личное мнение.

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



Ранг: 196.0 (ветеран), 72thx
Активность: 0.140.02
Статус: Участник

Создано: 12 октября 2015 12:06
· Личное сообщение · #7

Если мне не изменяет память (давно протом не занимался), то там достаточно найти оеп, востановить импорт и сдампить образ. Вм находится в секции протектора (а не в выделенной области памяти), поэтому там нужно лишь немного поправить несколько адресов и прога должна работать. Для примера возьми скрипт от вышеуказанной дамы и распакуй им прот с вм.
mazaxak пишет:
Кстати возможно ли при наличии машины получить нормальный код, а то прогу распаковываешь, а из-за этой машины сложно его потом анализировать

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



Ранг: 6.0 (гость), 1thx
Активность: 0.050
Статус: Участник

Создано: 13 октября 2015 03:20
· Личное сообщение · #8

Djeck, а у ВМПротекторе есть какие-нибудь проверки на модификацию кода ? Скачал софт PowerArchiver, накрыто вмпротом, но секция кода не пожата и доступна сразу, попробовал патчить ее, запустил все работает, не срабатывают никакие проверки на модификацию.



Ранг: 196.0 (ветеран), 72thx
Активность: 0.140.02
Статус: Участник

Создано: 13 октября 2015 03:47
· Личное сообщение · #9

Да у протектора есть проверки (посмотри мой тутор про инлайн патч). Если у тебя всётак просто, то может прога и не защищена? Так как так просто всё быть не может




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

Создано: 13 октября 2015 13:38
· Личное сообщение · #10

при переходе от EP к OEP нужно следить за LocalAlloc; HeapCreate; HeapAlloc и VirtualAlloc



Ранг: 6.0 (гость), 1thx
Активность: 0.050
Статус: Участник

Создано: 13 октября 2015 22:18
· Личное сообщение · #11

Djeck, Die2 говорит, что на ней VmProtect. Да и старт не из секции кода 401000. На делфи написана.



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

Создано: 02 марта 2016 21:12 · Поправил: Electric Wind
· Личное сообщение · #12

Не знаю какую версию я смотрел, но там заметны характерные паттерны, без которых программа работать в принципе не может: запись данных в память/стек, чтение данных из памяти/стека, также ret для создания call-а, а 8 байтами выше адресс возврата. sse, разумеется не виртуализирован. В итоге лишь следить за вызовами с выделением памяти, а когда доходит до примитива записи/чтения - знать че это за память и ловить что пишет/читает. Обычно запись это финальная инструкция mov [reg64_1+reg64_2], reg64_3, а как он там прятался и тайком вычислял секретное значение ваще по-барабану.

Математика/условные переходы действительно не знаю как реализованы(через стек наверняка, как ему ещё быть...). Ещё наверное, есть уникальные примитивы и инстанс(когда несколько раз используется разными чуваками). Поэтому желательно иметь graph view как в ида, но вот чтоб не скакать по всему файлу(из-за адского кол-ва jmp), а чтобы примитивы с кодом+мусором были сразу все на экране по нодам разложены, чтоб красивенько так.

В итоге весь код можно восстановить чуть ли не автоматически если ещё и эмулировать и память + сторонние память-аллокаторы если импортируются, но нужен виртуальный процессор. Есть такой(x64)? Потому как переходы между примитивами обычно jmp reg64(нужно высчитывать рантайм) и ещё cheatengine нифига не можеть трейсить эту вм, в конце вываливается на инструкции add [rax],al. Че-то сбивается... именно на мусоре вм... Поэтому спрашиваю, чтобы самому не делать.




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

Создано: 02 марта 2016 23:30
· Личное сообщение · #13

куда не глянь везде Он,если дальше так пойдёт то распаковка вмпрота будет самая популярная тема на крэклабе,раньше нас пугали броненосцем и стариком теперь любая самоделка кроется последней версией vmp что творится в датском королевстве




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

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

Electric Wind

можешь использовать эмулятор x86_64 от ntldr:
https://exelab.ru/f/action=vthread&forum=6&topic=19688&page=0#12

Пример инициализации, выполнения 1-й инструкции (расположенной по адресу instrAddr) и возврата конечного EIP (который будет после выполнения инструкции).

bool EmuInit()
{
emu_stack = (char *) pStack;
ZeroMemory(emu_stack, sizeof(pStack));

params.flags = 0;
params.limit = 0;
params.mode = EMU_MODE_32;
params.on_interrupt = win32_int_callback;
params.on_resolveip = win32_resolve_ip;
params.do_loadmem_8 = win32_loadmem_8;
params.do_loadmem16 = win32_loadmem16;
params.do_loadmem32 = win32_loadmem32;
params.do_loadmem64 = win32_loadmem64;
params.do_savemem_8 = win32_savemem_8;
params.do_savemem16 = win32_savemem16;
params.do_savemem32 = win32_savemem32;
params.do_savemem64 = win32_savemem64;
params.custom_ops[ID_SYSENTER].new_op = win32_sysenter;

ctx.regs_seg.CS = 0x1B;
ctx.regs_seg.DS = 0x23;
ctx.regs_seg.ES = 0x23;
ctx.regs_seg.FS = 0x3B;
ctx.regs_seg.GS = 0;
ctx.regs_seg.SS = 0x23;
ctx.regs_gen.EFL = 0x202;
ctx.params = &params;

ctx.regs_gen.EAX = 0x12345671;
ctx.regs_gen.ECX = 0x12345672;
ctx.regs_gen.EDX = 0x12345673;
ctx.regs_gen.EBX = 0x12345674;
ctx.regs_gen.EBP = 0x12345675;
ctx.regs_gen.ESP = u32t(emu_stack + STACK_SIZE/2);
ctx.regs_gen.ESI = 0x12345677;
ctx.regs_gen.EDI = 0x12345678;

return true;
}

DWORD EmuExecInstr(DWORD instrAddr, struct INSTRUCTION *instr)
{
ctx.regs_gen.EIP = u32t(instrAddr);
ctx.jumped = false;
int status = emu_execute(&ctx, instr);

return ctx.regs_gen.EIP;
}

| Сообщение посчитали полезным: Gideon Vi, Electric Wind, 4kusNick, bizkitlimp


Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 03 марта 2016 06:15
· Личное сообщение · #15

не большой офик: все по svn на http, браузером ползают, или только я чего-то не знаю?



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

Создано: 03 марта 2016 11:05 · Поправил: VodoleY
· Личное сообщение · #16

Electric Wind а вы пробовали теорию читать? типа как VMSweeper работает.. (плагин для девиртуализации VMProta).. ток вы так бодро топик подняли.. а то без вас 6 месяцев не обновлялся..
script_kidis да почемуже везде ОН.. просто везде ЕГО просят за 200 рублей снять.. вот поэтому и ОН
ЗЫ. не надо бутать распаковку и девиртуализацию. если вмпрот навешен сверху(тырили чужую прогу) то это совсем другая песня

Добавлено спустя 14 минут
https://exelab.ru/f/action=vthread&forum=13&topic=15906&page=0#1
это для желающих поработать с вмпротом
ЗЫЫ.. немного офтопа.. но как по мне очень уместно

XXX: Здравствуйте . Игра рассчитана на одноядерный процессор , как сделать , чтобы игра шла на всех ядрах на многоядерном процессоре , а то она грузит только одно ядро и из-за этого плохо идет . Говорят ее как-то Переписывают , если в это так , то как это сделать ?
YYY: берем исходный код игры у разработчиков. Анализируем код, пишем новый код с учетом многопоточности. И вуаля всё работает как нужно.
XXX: Куда писать этот код , как его списать ?
ZZZ: (facepalm)
BBB: парень, зря ты сюда зашел)

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


| Сообщение посчитали полезным: script_kidis, Electric Wind


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

Создано: 03 марта 2016 13:30
· Личное сообщение · #17

VodoleY пишет:
просто везде ЕГО просят за 200 рублей снять

Ясна теперь причина популярности... Но отнюдь не везде так...

VodoleY пишет:
типа как VMSweeper работает.. (плагин для девиртуализации VMProta)..

Интересно, как VMSweeper будет девуртуализировать ленты в дровах или вообще на iOS

-----
IZ.RU




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

Создано: 03 марта 2016 13:43 · Поправил: VodoleY
· Личное сообщение · #18

DenCoder а никто не говорит что это панацея. вопрос был в понимании принципа. я чудесно пользовался свипером использую от него только распознование примитивов.. чтоб руками их не чистить
ЗЫ. а дрова то тут причем? чем это тебе не exe.. один хрен анализ статический. Вообще странные вопросы.. от человека который по рылся в вмпроте

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





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

Создано: 03 марта 2016 15:18
· Личное сообщение · #19

VodoleY
VodoleY пишет:
ЗЫ. а дрова то тут причем? чем это тебе не exe.. один хрен анализ статический. Вообще странные вопросы.. от человека который по рылся в вмпроте

Это были не вопросы!

А в применении к дровам хочешь сказать, что можно также воспользоваться олькой и свипером? То есть, я правильно понимаю, что твой подход - 1) дёрнул из дрова коды хендлеров, 2) переложил их в exe, 3) под олькой запустил sweeper и дёрнул все по очереди. Так?

Если так, то
минусы в подходе:
1) возможны привилегированные мусорные инструкции, на что надо писать также и хендлер исключения, в котором корректно обходить такие
2) по времени работа с копипастой кода для 80 примитивов одной вм занимает больше, чем ручное распознание

Возможен у тебя подход номер 2 - 1) корректно переделать дров в exe, 2) запустить под олькой со свипером
минусы:
1) возможны привилегированные мусорные инструкции, на что надо писать также и хендлер исключения, в котором корректно обходить такие
2) стоит позаботиться как-то запретить все вызовы внешних функций, ибо в дрове, переделанном в exe, они не работают

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

Ну и главный минус всех подходов в применении к дровам - ГЕМОРНО!!!

Принципы вариантов данного подхода - имеем дебаггер, но один хрен анализ статический
Почему бы не поменять местами - не имеем дебаггер, но анализ один хрен динамический?!

Добавлено спустя 1 минуту
Или я не понимаю ваших проблем?

-----
IZ.RU




Ранг: 12.2 (новичок), 11thx
Активность: 0.020
Статус: Участник

Создано: 03 марта 2016 15:30 · Поправил: srm60171
· Личное сообщение · #20

>>возможны привилегированные мусорные инструкции
vmp такое не генерирует, а в софте лично я встречал максимум mov eax, crX; wrmsr; sti; cli; in; out
Спец примитив есть только на PushCr0 и PopCr0
Остальное это выход из вм + инструкция + возврат в вм (VMSweeper это вполне нормально обрабатывает)
Никакие спец обработчики исключений не нужны, крах - рестарт, Shift + F1 и поехали дальше.
Импорт у дрова прибивается, полезли во вне - крах - рестарт и ..

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




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

Создано: 03 марта 2016 15:31 · Поправил: DenCoder
· Личное сообщение · #21

DenCoder пишет:
2) для некоторых примитивов, работающих с "вм-регистрами" по сути понадобится угадать декодинг заранее, чтоб не писать ещё хендлеров для обработки исключительный ситуаций

Не совсем корректно написал... и в теории этот минус можно устранить...

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

Добавлено спустя 9 минут
srm60171 пишет:
Так что дров нормально можно разбирать.

А виндовый дров под ARM?

Добавлено спустя 12 минут
srm60171 пишет:
Я уж не говорю про написание заглушек функций ядра, с таким удается даже общаться с отлаживаемым драйвером (эмитируя IRP например)

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

-----
IZ.RU




Ранг: 12.2 (новичок), 11thx
Активность: 0.020
Статус: Участник

Создано: 03 марта 2016 15:44 · Поправил: srm60171
· Личное сообщение · #22

DenCoder пишет:
А виндовый дров под ARM?

лично я говорю про свипер, а он только под x86.
Остальные архитектуры это вообще ноль работающих инструментов под вмп.

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



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

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

DenCoder пишет:
Или я не понимаю ваших проблем?

а где я писал что у меня проблемы?

Добавлено спустя 10 минут
более того.. я вобщем считаю что полный девирт кода (не путать с отдельными кусками кода) это весьма трудоемкий и в 99проц случаев не благодарный труд. Тем более создание утилит полной автоматизации процесса.
в тех редких 1 проц. случаев, когда у заказчика позволяет бюджет, или желание размять мозг все сводиться к одному и тому же сценанирю
1. находим главный цикл ВМ
2. декодим таблицу примитивов
3. по желанию строим трассу выполнения, разбирая ленту.. либо в динамике (дебагером) либо в статике.. не суть важно
4. в случае вмпрота.. чешем репу с пермутацией кода ..
5. выдираем ключевое алго, и пишем заказчику.. давай бабало

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


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


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

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

VodoleY пишет:
чешем репу с пермутацией кода

Блин, у меня нет на неё (конкретно, мутацию в вмпроте 2.x) аллергии

VodoleY пишет:
я вобщем считаю что полный девирт кода... не благодарный труд. Тем более создание утилит полной автоматизации процесса.

Никого не переубеждаю! Но решение этой задачи, хоть она и неблагодарная, вполне может принести пользу )

-----
IZ.RU




Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 06 марта 2016 10:44
· Личное сообщение · #25

VMSweeper под x64 - миф или реальность?



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

Создано: 06 марта 2016 10:50
· Личное сообщение · #26

ELF_7719116 пишет:
VMSweeper под x64 - миф или реальность?

на сколько я знаю миф

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





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 06 марта 2016 12:22
· Личное сообщение · #27

ELF_7719116 пишет:
VMSweeper под x64 - миф или реальность?


Vamit пишет:
Да всё просто, анализ кода, девиртуализация и декомпиляция базируются на полном разборе всех вариантов асм инструкций, в х64 - другие инструкции, следовательно под каждую их них должен быть написан свой обработчик. А среда анализа - это Олька 1.10 со своим асмом и дизасмом, Свипер же не законченная прога, а плагин, который базируется на конкретном SDK под Ольку... вот и весь ответ.




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

Создано: 06 марта 2016 13:53
· Личное сообщение · #28

На китайском форуме - http://www.52pojie.cn/thread-394179-1-1.html я нашел информацию о скрипте [OllyScript] VMProtect 2.12.3 IAT. Он, судя по размеру в 165.18 KB, достаточно большой, и с многими прибамбасами (если посмотреть выложенные скриншоты). Однако скачать мне его не удалось, поскольку там нужна регистрация на китайском языке. Возможно у кого-либо имеется этот скрипт, или возможность скачать его..

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

Ранг: 134.1 (ветеран), 246thx
Активность: 0.220.1
Статус: Участник
realist

Создано: 07 марта 2016 18:26
· Личное сообщение · #29

--> VMP_ODPlugin - OoWoodOne <--
https://github.com/OoWoodOne/VMP_ODPlugin




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

Создано: 07 марта 2016 22:36
· Личное сообщение · #30

Jaa, для чего этот плагин?



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

Создано: 08 марта 2016 00:41
· Личное сообщение · #31

Господа а может кто-нибудь переложить VMSweeper beta 2


<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 14 . 15 . >>
 eXeL@B —› Протекторы —› VMProtect (Туторы, скрипты, плагины, ...)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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