Вторую ольку использую сейчас как основной инструмент — рекомендую.
НО!
Проблема с плагинами, поэтому у меня всегда на подхвате первая версия с полным настроенным комплектом нужных инструментов.
Вполне вероятно что под двойку уже есть решения, но у меня есть старый принцип — я ленив, и самому тестировать ошибки не охота (а тем более разбираться ошибки ли это в моем коде или в плагине).
Поэтому я все еще жду заключений от людей, которых я считаю экспертами, о том что «плагин Х во второй ольке работает корректно».
Позволю себе не согласится с данными утверждениями.
Криптографический матаппарат работающий с использованием полей Галуа крайне неудачная точка виртуализации кода всвязи с сильной просадкой производительности его алгоритма, поэтому он обычно используется в виде нативного кода вызываемого VM.
Подход с искажением данных исполнения, для восстановления которых могут применяться коды Рида-Соломона — это очень редкий подход, просто немного затрудняющий анализ кода исследуемого приложения (да и вообще я за всю жизнь таких только два встречал).
Динамический декрипт кода, также не оправдывает возлагаемых на него надежд, я думаю вы помните историю с армой, которая распаковала сама себя…
Вложенные VM — да, вот это прямое попадание, здесь есть просадка (tсли не считаnь обфусцированного кода выполняемого в цикле оригинальной VM)
Ну а защита от дампа — это, пардон, нельзя даже рассматривать как защиту. Так — шутка…
Да. правильно. А тормозить там нечему, т.к. обфускация одной реальной ASM инструкции сводится примерно к 250-ти ASM строчкам, что практически не показатель. В современных коммерческих протекторах размер кода эмулирущего выполнение инструкции в разы больше и не тормозит ничего (ну в смысле это можно заметить только замеряя специально, а для человека это не заметно).
Гарантированно имеются, ребята из касперского развернули всю логику данной VM за вечер (информация, скажем так, из инсайда :).
Но я бы удивился если бы у них на такой случай небыло бы инструментов :)
Если честно нет, я IDA в повседневной работе мало использую (только как инструмент для внешнего анализа) поэтому мог и пропустить такой момент :)
Основной инструмент всегда был и есть Olly
Согласен, но… имеем то, что имеем. Видимо у автора были на то причины не писать интерпретатор, а выкладывать именно в том виде с которым и шла работа :)
На самом деле терпения нужно не много.
Чистого времени было затрачено в районе 28 часов, из которых первоначальный анализ (до второго конверта включительно) около 30 минут и разбор логики VM в районе двух часов. Остальное время заняло рутинное написание инструментария, без которого никак (а это почти девять вечеров).
Но правда у меня было небольшое преимущество — такой реверс, это практически один из основных этапов моей основной работы (нет, я не вирусный аналитик), поэтому можно сказать я занимался своей повседневной рутиной :)
Изначально keygenme шел с валидной парой, поэтому я рассмматривал именно этот вариант.
Впрочем, отсутствие валидной пары всего лишь немного задержало бы поный реверс алгоритма, ибо в этом случае пришлось бы дополнительно проанализировать одну единственную процедуру логики во всех семи матоперациях (за исключением пятой).
Ну лишние часа полтора в итоге заняло бы (граф же сразу все показывает).
Ну почему? Это просто видимо не ваша область и всего-то. К примеру я очень сильно плаваю в Базах Данных и к примеру вот такие статьи навивают на меня тоску: habrahabr.ru/post/27439/
Ибо читая их я тоже понимаю насколько далек от этой области :)
Насколько я помню оригинальное обсуждение с MsRem — этот пикод был результатом работы одной из его наработок (некоего протектора) который он в итоге так и не опубликовал. Сам протектор строил пикод через дизассемблер.
А смысла ж не имеет.
К примеру сделали мы пяток наследников от TStrings, где принципиально «забыли» перекрыть Add().
В пятом наследнике вызываем данный метод и получаем EAbstractError в классе TStrings.
НО!
Проблема с плагинами, поэтому у меня всегда на подхвате первая версия с полным настроенным комплектом нужных инструментов.
Вполне вероятно что под двойку уже есть решения, но у меня есть старый принцип — я ленив, и самому тестировать ошибки не охота (а тем более разбираться ошибки ли это в моем коде или в плагине).
Поэтому я все еще жду заключений от людей, которых я считаю экспертами, о том что «плагин Х во второй ольке работает корректно».
Криптографический матаппарат работающий с использованием полей Галуа крайне неудачная точка виртуализации кода всвязи с сильной просадкой производительности его алгоритма, поэтому он обычно используется в виде нативного кода вызываемого VM.
Подход с искажением данных исполнения, для восстановления которых могут применяться коды Рида-Соломона — это очень редкий подход, просто немного затрудняющий анализ кода исследуемого приложения (да и вообще я за всю жизнь таких только два встречал).
Динамический декрипт кода, также не оправдывает возлагаемых на него надежд, я думаю вы помните историю с армой, которая распаковала сама себя…
Вложенные VM — да, вот это прямое попадание, здесь есть просадка (tсли не считаnь обфусцированного кода выполняемого в цикле оригинальной VM)
Ну а защита от дампа — это, пардон, нельзя даже рассматривать как защиту. Так — шутка…
Возвращает True если wParam не равен $4D5A или $5A4D
Но я бы удивился если бы у них на такой случай небыло бы инструментов :)
Основной инструмент всегда был и есть Olly
Чистого времени было затрачено в районе 28 часов, из которых первоначальный анализ (до второго конверта включительно) около 30 минут и разбор логики VM в районе двух часов. Остальное время заняло рутинное написание инструментария, без которого никак (а это почти девять вечеров).
Но правда у меня было небольшое преимущество — такой реверс, это практически один из основных этапов моей основной работы (нет, я не вирусный аналитик), поэтому можно сказать я занимался своей повседневной рутиной :)
Впрочем, отсутствие валидной пары всего лишь немного задержало бы поный реверс алгоритма, ибо в этом случае пришлось бы дополнительно проанализировать одну единственную процедуру логики во всех семи матоперациях (за исключением пятой).
Ну лишние часа полтора в итоге заняло бы (граф же сразу все показывает).
Ибо читая их я тоже понимаю насколько далек от этой области :)
Но вообще на www.crackmes.de/ можно найти много разных вариантов :)
Выдает текст: Abstract Error.
К примеру сделали мы пяток наследников от TStrings, где принципиально «забыли» перекрыть Add().
В пятом наследнике вызываем данный метод и получаем EAbstractError в классе TStrings.