All streams
Search
Write a publication
Pull to refresh
159
0
Александр (Rouse_) Багель @Rouse

Инженер — программист

Send message
Вторую ольку использую сейчас как основной инструмент — рекомендую.
НО!
Проблема с плагинами, поэтому у меня всегда на подхвате первая версия с полным настроенным комплектом нужных инструментов.
Вполне вероятно что под двойку уже есть решения, но у меня есть старый принцип — я ленив, и самому тестировать ошибки не охота (а тем более разбираться ошибки ли это в моем коде или в плагине).
Поэтому я все еще жду заключений от людей, которых я считаю экспертами, о том что «плагин Х во второй ольке работает корректно».
Позволю себе не согласится с данными утверждениями.
Криптографический матаппарат работающий с использованием полей Галуа крайне неудачная точка виртуализации кода всвязи с сильной просадкой производительности его алгоритма, поэтому он обычно используется в виде нативного кода вызываемого VM.
Подход с искажением данных исполнения, для восстановления которых могут применяться коды Рида-Соломона — это очень редкий подход, просто немного затрудняющий анализ кода исследуемого приложения (да и вообще я за всю жизнь таких только два встречал).
Динамический декрипт кода, также не оправдывает возлагаемых на него надежд, я думаю вы помните историю с армой, которая распаковала сама себя…
Вложенные VM — да, вот это прямое попадание, здесь есть просадка (tсли не считаnь обфусцированного кода выполняемого в цикле оригинальной VM)
Ну а защита от дампа — это, пардон, нельзя даже рассматривать как защиту. Так — шутка…
function IsNotMZorZM(wParam: Word): Boolean;
asm
  cmp ax, $4D5A
  jne @check_5a4d
  xor eax, eax
  ret
@check_5a4d:
  xor ax, $5A4D
  or  al, ah
end;


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

type
  T = TStrings;

procedure TForm4.Button1Click(Sender: TObject);
var
  A: T;
begin
  A := T.Create;
  A.Add('qwe');
end;


Выдает текст: Abstract Error.

А смысла ж не имеет.
К примеру сделали мы пяток наследников от TStrings, где принципиально «забыли» перекрыть Add().
В пятом наследнике вызываем данный метод и получаем EAbstractError в классе TStrings.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity