R0 CREW

Kaspersky keygenme

Привет, любитель пореверсить!
Приглашаем тебя попробовать свои силы во взломе в реверс-инжиниринге.
Если определишь правильный серийник для нашего xaker_crackme_01_s.exe, то можешь себя считать готовым к борьбе с вирусами.

LOL
Первые 30 финалистов получат интересные призы и возможность посетить нашу святая святых – вирлаб «Лаборатории Касперского»

http://www.kaspersky.ru/crackme

На краклабе была ветка, но развели срач и модеры прикрыли.

Я рубанул aka hack http://www.kaspersky.ru/crackme/crackers

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

Таск интересен в плане обучения. Разное крипто позволяет на практике почувствовать, что алгоритмы над учить. Трезво оценивая ситуацию, понимаю, что в 30 не войти, но ради повышения скила попробую посмотреть.

ARCHANGEL: понимаю, что в 30 не войти

Не прибедняйся, скила у тебя достаточно. Таск уже висит больше трех недель, и пока только пятерка нарисовалась. В письме приглашают “посетить нашу святая святых” на 8е августа, так, что еще 2 недели у тебя есть. Все алго уже на лабе разобрали. Дальше только лишнее откинуть и собрать оставшееся. Ну подходящую атаку на RSA прийдется все же найти. Если не будет срача, то всех желающих буду подталкивать.

OKOB, такой вопрос - каким образом вообще на RSA или другой ключ в таких кейгенми атаку делают?
просто крутиться только 2 идеи - либо сам алго разбирают и ключ генерируют (а-ля найдите валидный серийник для кейгена), либо кодят брутер и атакуют просто перебором ключей…

Если в общем, то исходить нужно из того, что алго дожен быть обратим, т.к. автор/вендор должны валидные пары (имя\ключ) генерить. И если в большинстве случаев алгоритм проверки самопальный, то алгоритм проверки удается пошагово обратить. При коротких ключах можно рипать алго проверки и брутить, для длинных больше 8 на полном словаре особо не побрутишь. Тут тоже ключ 32 хэкс символа. Так что путь один лезть в алго. А какой в RSA алго? c = m^e mod n и все, так что разбирать нечего. Все реализуется на MIRACL powmod https://certivox.org/display/EXT/9.+The+MIRACL+Routines (9.2.45 powmod) - void powmod(x,y,z,w) - w=x^y mod z. Что касается брута, то RSA 4096 не побрутишь или пофактеризуешь, о чем не двусмысленно указывается в заключительном окне.

Мы не криптоаналитики и придумать новую атаку не осилим, поэтому выбираем что нибудь из известного http://lazyurix.narod.ru/myworks/rsa_crypto_sys.htm.
В сабже кроме RSA еще MD4? AES128 и модифицированный MD5.

Какое назначение каждого из алгоритмов?

MD4 ?
MD5 ?
AES128 ?
RSA - DecryptText ?

Сколько ушло времени на полный разбор (примерно)?

Разбор там простой, все лежит в одной функции и вышеизложенная схема видна фактически сразу.
Львиная часть времени (практически все) ушла на попытки найти в чем же состоит модификация MD5, так и не нашел, тупо рипнул их код и прикрутил.
Изюмина в том, как придумать обращение, и под какую из известных атак на RSA подходят имеющиеся параметры.

Да уже поздно, оно отложилось в моем мозгу =\

Я решил попробовать для общего развития, закейгенить эту штуку. Но скила моего тут мало, поэтому было бы здорово если будешь наталкивать на правильные мысли, статьи, ссылки и т.д.

Ну начал изучение с иды и с соответствующей ветки на краклабе.

Для начало бы хотел узнать как определить это просто функция или какая-то реализация хеша md4/md5/rsa etc… ?? Парень создавший ветку выложил на pastebin его видение алгоритма http://pastebin.com/6Lt7EBZQ. И там есть например такой момент.

ctxmd4.state[1] = 0xEFCDAB89u;
      ctxmd4.state[2] = 0x98BADCFEu;
      ctxmd4.state[3] = 0x10325476u;
      ctxmd4.total[0] = 0;
      ctxmd4.total[1] = 0;
      md4_update(&ctxmd4, (int)tmp0, strlen((const char *)tmp0));
      md4_result((int)&hash2, (int)&ctxmd4);
      aes_128_set_key((int)&hash2, &ctxaes128);
      aes_ecb_decrypt((int)k, (int)k, &ctxaes128);

так вот как он определил что это именно md4_update ? или там md4_result?

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

Второй момент, где можно толково ознакомиться с данными алгоритмами. Мне подсказали, что нужно OpenSSL скачать и там копаться, но я насколько понял нашел лишь какие-то тесты и хедеры (*\Desktop\openssl-1.0.1h\openssl-1.0.1h\crypto\md4) а сам код? (например MD4_Update).

Первая ссылка.
https://www.google.com.ua/search?client=opera&q=md4.c&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest&gws_rd=ssl

Посмотрел, в целом идея ясна. Нужно только с эмулировать это хозяйство…

Статья по идентификации функций MIRACL

Я, видать, совсем дурачок, раз задаю такой вопрос. Но всё же - как, чёрт побери, докопаться до проверки серийника?! После расжатия upx’ом получаю неработоспособный файлик, который вполне годится для статического анализа. Пробовал искать по RegisterClass’у, чтобы найти хэндлер кнопки - не нашёл. Смотрение на функи, юзающие GetWindowTextW пользы тоже не принесло. Узнал, что у Оли есть некая фича, помогающая в нахождении оных хэндлеров. При попытке поставить бряк на она ругается на невалидность адреса…
MFC-based приложения никогда не реверсил, уже ушёл про них читать.
Просветите меня, будьте добры.

UPX нужно распаковывать самим UPX, а не всякими другими распаковщикими или скриптами. И будет тебе счастье.

Ну я нашел нужное место через GetWindowTextW. Нужно не смотреть на функции где оно юзается, а ставить бряки и отлавливать нужное.

Так и делал.

Так как нормально не распаковалось, запускал исходный в файл и в рантайме в олли ставил бряк на GetWindowTextW в USER32. Брякалось постоянно при активации окна. Как фильтровать бряки по состоянию call stack’а в ольге я не знаю.

Ну тогда вот тебе еще один общий сценарий.

Запустили программу в OllyDbg. Открыли список окон (Alt+W), ищем там окна с именем класса Edit.

Копируем handle, переходим к функции GetWindowTextW и ставик бряк с условием (Shift+F2) в появившемся окне пишем [esp+4]==.
Вот и всё, теперь оно брякнется только при обращении к этому эдиту.

Сработало, спасибо!

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

Начинается все на инструкции pushad и потом ставишь бряк на инструкции popad, потом пропускаешь цикл (он там в 3-5 строчек) и тот jmp после цикла будет прыгать на код. Идешь туда проходишь несколько инструкций и весь код распакован у тебя в оперативе. Теперь я просто искал текст Serial или invalid, через некоторое время увидишь знакомые надписи а там уже понятно, можно будет разобраться.

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

правая кнопка Search for -> All referenced text strings
правая кнопка -> Search for text: Serial is valid
скроллим экран вверх, до начала процедуры

Суть в том, что при анпаке upx то анпакет, но там стоят флаги (в заголовке PE), что приводит к ребэйзу ехе при загрузке. И там, где аслр включен, делается ребейз - и распакованный ехе падает, ибо нет в нём релоков. А при запуске упакованного код распаковывается и ребейзится самим upx, поэтому оно и работает. Вывод - анпакаем упыхом, а потом обнуляем флаги, которые Optional header -> Dll flags.