PDA

Просмотр полной версии : CrackMe1


gr0t
21.01.2010, 13:08
Всем привет, недавно скачал крякмис. Автор пишет что серийник там есть в теле где-то))..где и как он вычисляется не могу понять, закинул в иду...но не могу понять как высчитывается и где хранится серийник. Кто поопытней направление подскажите. Крякмис для начинающих.
Залил крякмис http://www.multiupload.com/4EVCZTPHS1

spider-intruder
21.01.2010, 14:43
loludididtcongtatz :D

0xF0RD
21.01.2010, 15:20
Пробуй пароль:
x{xap}p}`w{zsfu`n

Смысл крякмиса в том, что к каждому вводимому символу (вернее к его коду) прибавляется значение 0x14h
Вводимая строка кодируется по заданному алгоритму, затем сравнивается со строкой, жестко зашитой в программе.
Вот она:
loludiditcongratzЕсли эту строку ввести под отладчиком, то будет найден вышеприведенный пароль!!!

spider-intruder
21.01.2010, 15:40
к каждому вводимому символу прибавляется значение 0x14h - Тут ты не прав ИМХО. Щас я проверю, но даже судя из строки для "шифрования" и пароля, они не отличаются побайтно на 0x14h даже визуально.

0xF0RD
21.01.2010, 15:58
2spider-intruder
А ты пробовал вводить в крякмис строку
loludididtcongtatz
посмотри в отладчике цикл, начинающийся по адресу
0x402a53 (olly)

0xF0RD
21.01.2010, 16:12
Смысл вот в чем:
Например, для буквы "a"
ASCII-код буквы a=61H, если к этому коду добавить 14H, то получим 75H=коду буквы "u", но дело в том, что если код буквы+14Н будет больше, чем 80Н, там это дело как-то преобразуется!!!
Это я пишу навскидку, если разобраться, можно до конца разобрать алгоритм шифрования

0xF0RD
21.01.2010, 16:38
Все, разобрался!
Первое мнение было ошибочным!!!!
Вот он, правильный ответ:
Каждый символьный код вводимой строки ксорится значением 14Н,
например:
код "а"=61Н
61H xor 14H = 75H, что соответствует букве '"u"

"l'=6CH, 6ch xor 14H=78H, 78H="x", и так далее.

spider-intruder
21.01.2010, 17:38
Вот теперь возьми пирожок с полки :-)

sub_401BE0(1u, *(_BYTE *)i ^ 0x14);
if ( &v25 != (char *)-4 )
{
if ( !&v25 )
_invalid_parameter_noinfo(v16, v15);
if ( v28 < 0x10 )
v17 = &v26;
else
v17 = v26;
if ( i >= (unsigned int)((char *)v17 + v27) )
_invalid_parameter_noinfo(v16, (char *)v17 + v27);
}

gr0t
21.01.2010, 23:47
Парни спасибо за ответы, loludididtcongtatz видел и напрямую вводил, не подходит)) получается это типа шаблон на котором строиться правильный серийник?
Тоесть ксорим каждую букву loludididtcongtatz по 14H и получаем серийник?

0xF0RD
22.01.2010, 02:28
Именно так!!!

gr0t
22.01.2010, 03:20
Именно так!!!
Спс, посмотрю завтра, в репу закинул

recton
23.04.2010, 10:24
Аналогичная проблема. Как я понял, правильный серийник не хранится, а проверяется путем замудренного преобразования, никак не могу его отследить. Процедура проверки 004011F0. сам файл http://slil.ru/29003280