Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

CRACKL@B CrackMe #3 или четырехзначный пароль - абсолютная защита

Обсудить статью на форуме

Очень удобно, когда все крэкерские инструменты, книги и статьи в одном месте. Используйте сборник от EXELAB - вот тут.

Статью написал: Bad_guy
Статья создана: 06.02.04

Качаем крякмис, ломаем, потом уже читаем статью:
http://cracklab.narod.ru/dload/clab3.rar

После того, как были написаны CRACKL@B CrackMe #1 и #2 я стал слышать отголоски недовольных мнений. Недовольство заключалось в том, что мои крэкми... взламываются как это не странно, однако CRACKL@B CrackMe #1 сломали всего четверо, а CRACKL@B CrackMe #2 почти каждый, кто захотел. Но ведь крэкми и написаны для того, чтобы их могли взломать, не правда ли ? Очень часто все кидают известную фразу америкоса крэкера ORC'а: "Все что можно запустить можно и взломать". А это на самом деле не так, это заявляю вам я - настоящий российский крэкер Bad_guy. Могу сделать вывод, что ORC не слышал ничего о криптографии, ну да ладно - оставим его в покое.

Достаточно часто ко мне лично или на форум CRACKL@B обрщаются с просьбой "взломать архив", имея ввиду распаковку RAR или ZIP архива, запакованного с использованием пароля, а получив ответ, что это практически невозможно (возможно только поочередным перебором всех возможных ключей до нахождения правильного) такой человек не успокаевается, говоря: "Фу, что тут за крэкеры... и т.д."

Можно сказать с уверенностью, что у нас отличные крэкеры, это хотя бы те четверо, кто взломал CRACKL@B CrackMe #1 и еще несколько, кто не захотел или поленился, но даже им не "взломать" RAR или ZIP архив. Почему ? Да потому, что при шифровании в этих архиваторах классические криптографические алгоритмы, которые разработаны "великими" математиками прошлого века, как это не смешно, мы тоже родились в прошлом веке, ну да ладно, не будем отвлекаться. Зотя бы то, что алгоритмы шифрования разработаны математиками, уже доложно наводить на некоторые раздумья, но, кроме всего прочего, при разработке алгоритма шифрования ставится задача обеспечить невозможность расшифровки информации без знания ключа - запомните эту фразу если вы собираетесь распаковывать запароленный архив и вспоминайте почаще. Я же, пожалуй, остановлюсь на этом минимуме в объяснении задач алгоритмов шифрования данных и перейду непосредственно к разбору темы этой статьи.

Многие подумали, что в заголовке этой статьи фраза "четырехзначный пароль - абсолютная защита" - нечто вроде шутки, но это не так или вернее не совсем так. Сегодня я создам такую защиту на которую буду показывать пальцем разбузившимся крэкерам, которые вообразили себя богом (замечу, чтобы не было недомолвок, что себя я богом не считаю, я просто делаю, что умею), хотя фактически это чаще происходит с новичками, сломавшими пару простых защит.

Итак, что же нас ожидает в этой защите:
 	 1.   Грамотное использование криптографических алгоритмов.
 	 1.1. Шифрование кода или данных программы (идея не моя).
 	 1.2. Многократное использование хэш алгоритмов (идея родилась сама собой).
 	 2.   Детекторы компьютера крэкера (тоже моя идея).
 	 3.   Антидизассемблерные приемы (посмотрим мою программную реализацию).
 

1. Грамотное использование криптографических алгоритмов.

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

1.1. Шифрование кода или данных программы (идея не моя).

Надо взять всего один регистрационный ключ и зашифровать его хэшем или им самим (особой разницы нет, но ключ лучше брать очень длинный - не менее 10 символов) с помощью алгоритма шифрования код или данные (в моем случае это будет просто картинка), которые будут доступны только в зарегистрированной версии программы, таким образом мы сможем создать как бы демо версию, оставляя программу в статусе Shareware (кстати, в своем крэкми я использовал алгоритм Rijndael из пакета компонентов для Дельфи - TurboPower LockBox, это просто замечательный компонент, дающий все необходимые криптоалгоритмы нам в руки: Blowfish, RSA, MD5, SHA-1, DES, triple-DES, Rijndael и цифровые подписи для сообщений, его можно скачать на torry.net или поискать в интернете). Таким образом, я зашифровал только картинку, она в данном крэкми является доказательством того, что он взломан, а все остальное лишь слова и демогогия.

1.2. Многократное использование хэш алгоритмов (идея родилась сама собой).

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

Еще раз вернемся к названию статьи: "...четырехзначный пароль - абсолютная защита". Как же четырехзначный пароль может быть абсолютной защитой, если известно, что стойки пароль - это не менее, чем 8-10 символьный набор случайных букв и цифр ? Все очень просто. Дело в том, что стойкость пароля определяется скоростью его перебора из символов, которые в него могут входить. Как же сделать так, чтобы пароли перебирались медленно ? Нужно просто сделать так, чтобы процедура генерации пароля из введенного ключа работала достаточно долго (не менее 1 секунды) на среднем по быстродействии компьютере и при оптимальнейшей реализации процедуры генерации пароля.

Давайте прикинем какую стойкость защиты нам даст 4 символьный пароль, если мы используем в ключе буквы большие и маленькие английские и цифры - значит всего 26+26+10=62 различных символа. Палитра символов нам дает количество возможных комбинаций ключей 62 в степени 4, где 62 - количество различных символов, которые могут присутстовать в нашем ключе, а 4 - длина нашего ключа (в данном случае она нам известна, потому что я ее знаю). То есть перебрав 62^4 = 14'776'336 паролей мы найдем ключ с 100% вероятностью. Однако мы не можем перебрать их быстро так как, чтобы провести проверку надо пропустить каждый ключ через процедуру, которая работает 1 секунду, значит все пароли переберутся за 14'776'336 секунд, а это 4104 часов или 171 день или примерно полгода. Допустим, что компьютер очень крутой и их у нас 3 - тогда примерно месяц, а может даже и меньше, думаю что для крякмиса достаточно такой стойкости. А если пишем полезную программу - берем пятисимвольный пароль и крэкер будет брутфорсить программу 30 лет, после чего она ему уже вряд ли понадобится.

Как проще всего сделать процедуру так, чтобы ее нельзя было "упростить" и чтобы она работала примерно 1 секунду над созданием пароля из введенного ключа. Используем хэш относительно самого себя примерно 30000 раз. Сначала я хотел взять 100000 раз, но увидел, что и 30000 вполне достаточно, вот такой код примерно будет:
 	var Key: string; i : integer;
  	Key := Edit1.Text;
 	for i := 1 to 30000 do Key := MD5String(Key);
 

2. Детекторы компьютера крэкера (тоже моя идея).

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

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

Дело в том, что почти все крэкеры пользуются одними и теми же программами для исследования ваших программ, это:
  • отладчики: SoftIce, OllyDbg, TRW, ...
  • дизассемблеры: IDA, WinDASM, ...
  • шестнадцатиричные редакторы: HIEW, WinHEX, ...
  • PE-редакторы: LordPE, ProcDump, PE Tools, ...
  • мониторы: RegMon, FileMon, APIMon, ...
  • редакторы ресурсов: Restorator, ResHacker, ...
  • спец. утилиты: ImpRec, Revirgin, PEiD, ...
Ничто не мешает поискать эти программы на компьютере при запуске вашей программы. Можете посмотреть мой пример, но если у вас не установлены вышеуказанные программы - вы ничего не увидете - http://cracklab.narod.ru/dload/find.rar. Конечно искать надо не поиском по всем дискам - это долго, да и это заметят (винчестер хрустит и комп подвисает), а искать надо, например, в реестре по известным путям (их вы можете выяснить тем же RegMon'ом), а определенных файлах, в процессах, по ярлыкам на рабочем столе, в панели быстрого запуска и так далее - на что фантазии хватит. Такой поиск занимает 1-2 секунды и, найдя "интересующие" вас программы, вы можете пойти по одному из этих путей:
  1. Показать окно: "Йоу, крэкер - закрываем программу".
  2. Показать окно: "Error №1686: OLE initialization error".
  3. Ничего не показывать, но вызывать "случайные" сбои при работе программы.
  4. Запороть все найденные крэкерские программы, а может и еще что-нибудь... на что, опять же фантазии хватит.
  5. Подменить алгоритм регистрации на другой.

1 и 4 способы применять глупо: 1 - ваша программа еще больше заинтересует крэкера и будет взломана в первую очередь. 4 - вашу программу объявят вирусом, занесут в антивирусные базы, ваш сайт могут закрыть, а вас в тюрьму посадить, это правда взависимости от того сколько у вас фантазии было при запарывании крэкерского компьютера...

2 и 5 способы очень неплохие. 2 - крэкер не будет отлаживать программу, а скорее просто либо отбросит ее или автору баг репорт отправит, вот кстати можно крэкеру в ответ будет отправить ту же программу с защитой по типу 4 и наилучшими пожеланиями, но это только, если вы настоящий Bad_guy... 5 способ - очень неплохой и мне кажется что таким способом программисты уже немножко пользуются, чем еще объяснить такое множество неправильных крэков и неверных ключей на крэк-сайтах.

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

3. Антидизассемблерные приемы (посмотрим мою программную реализацию).

Сейчас я тут буду саморекламой заниматься - не-е переключайтесь !

Возьмем продукт BGCorp - Delphi String Protect с сайта bgcorp.narod.ru, кстати BGCorp - Bad_guy Corporation.

Delphi String Protect автоматически защищает исходники перед компиляцией от последующего String reference взлома, о котором вы можете узнать в моей статье CRACKL@B CrackMe #1.

Кстати: Delphi String Protect - платная программа, но ее цена всего 100 рублей, тем не менее, когда я ее писал защитил при помощи протектора Armadillo 3.10 и оставил триал на 10 запусков. Оказалось, что триал армадилы снимается не сложнее любого другого (об этом мне сообщил чел под ником DDA)
 [Crack DSP.bat]
 echo off
 del c:\tmp\*.tmp
 del c:\windows\temp\*.tmp
 start "DSP.reg"
 
 [DSP.reg]
 REGEDIT4
 [-HKEY_LOCAL_MACHINE\Software\Licenses]
 [-HKEY_LOCAL_MACHINE\Software\CLASSES\CLSID\{E51398FD-7A14-6CFB-EFFA-BF613AA2C59D}]
 

Теперь давайте поглядим исходники

Качаем исходники: crme3.rar
Чтобы откомпилировать еще понадобятся:
Delphi 5 или выше;
RXlib - качаем где-нибудь в сети;
XPLib - http://cracklab.narod.ru/lib/xpcompack.zip;
TurboPower LockBox - ищем на torry.net

Защита данного крякми настолько надежная, что даже исходники не помогут ее сломать...

Теперь самые интересные моменты:

Генерация пароля и проверка его правильности.
 Application.ProcessMessages; - чтобы интерфейс программы не подвисал, пока цикл работает.
 for i := 1 to 30000 do Key := MD5DigestToStr(Md5String(Key));
 if Copy(MD5DigestToStr(Md5String(Key)),1,6) = BGCorp(15,6) then test := true;
 сравниваются 6 символов хэша с 6 символами правильного хэша.
 
Всего лишь индикация.
 Code.Text := BGCorp(21,25);
 Led.Color := clRed;
 Led.Visible := True;
 Timer1.Enabled := True;
 таймер просто показывает красную "лампочку" и гасит ее через секунду,
 если введен неправильный код.
 
Тоже всего лишь графические эффекты в процедуре кнопки Too Hard
 procedure TForm1.ExittClick(Sender: TObject);
 var bb: boolean; i: integer;
 begin
 bb := true;
 for i := 1 to 20 do
 begin
 r.Visible := bb;
 t.Visible := not bb;
 bb := not bb;
 Application.ProcessMessages;
 sleep(50);
 end;
 Application.Terminate;
 end;
 
Вот проверка на компьютер крэкера, но здесь нет процедуры numz, которая занималась поиском крэкерских утилит. это по нескольким причинам - чтобы нам какой-нибудь умник за 20 секунд не устроил "Cracker Bomb", во вторых обращайтесь - bad_guy@mail333.com - продам за 3 бакса. Вирмэкер и шутник не будет покупать, а для программиста - всегда пожалуйста.
 procedure TForm1.FormCreate(Sender: TObject);
 var numz: integer;
 begin
 numz := 0;
 If numz > 2 then Если найдено больше 2 крэк инструментов, показываем окно.
 begin
 MessageDlg('Ошибка 998:'#13#10+BGCorp(46,41),mtError, [mbOk], 0);
 if ParamCount = 0 then halt(998); Выходим с ошибкой 998
 If ParamStr(1) <> '/' then halt(998);
 если запустить крякмис с
 параметром / программа не вылетит (на всякий случай написал,
 чтобы если кто-то скажет, что это чисто баг я
 бы сказал, как этого избежать).
 end;
 end;
 
А это уже Unit2.pas и это наша зашифрованная картинка, которую все так хотят увидеть. WinHEX легко делает такой исходник из любого файла.
 data: array[0..2399] of byte = (
 	$E3, $F2, $64, $72, $8E, $28, $94, $67, $C8, $5B, $6E, $F9, $B9, $6A, $C1, $04,
 	$A7, $47, $E2, $2B, $7E, $AA, $9A, $AF, $4E, $8D, $3F, $BC, $FF, $B8, $73, $25,
 	$AD, $43, $76, $DC, $47, $12, $80, $E7, $CD, $28, $03, $60, $62, $F4, $D5, $93,
 	$24, $1B, $CD, $90, $92, $D8, $9A, $FB, $B6, $65, $B2, $47, $51, $4C, $30, $ED,
 ...
 ...
 ...
 
А это как мы эту картинку расшифруем и покажем победившему брутфорсеру. Стрим позволяет не сохранять bmp на диск, а сразу показывать.
 procedure TForm2.FormShow(Sender: TObject);
 var s: Tmemorystream;
 begin
  If length(key) <> 32 then exit;
  LbRijndael1.GenerateKey(key);
  LbRijndael1.DecryptBuffer(data,sizeof(data),ee);
  if (ee[0] = 71) and (ee[1] = 73) then
  begin
   S := TmemoryStream.Create;
   try
   S.WriteBuffer(ee,Sizeof(ee));
   s.position := 0;
   image1.Picture.Graphic.LoadFromStream(S);
   finally s.free; end;
  end
 end;
 

Взлом

odIsZaPc написал брутфорсер для подбора ключа к данному крэкми. На моем компьютере он показывает, что будет работать где-то 80 дней. Поменяв набор символов на оптимальную комбинацию :) я увидел, что данный брутфорсер способен найти правильный пароль, так что через пару месяцев пароль будет известен широкой публике. Может кто хочет помочь быстрее найти пароль ? Обращайтесь к odIsZaPc, его имэйл указан в исходниках, которые можно получить здесь: crme3brut.zip

А я пароль не скажу ! Но он существует и может быть подобран данным брутфорсером.

ФОРУМ

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

Bad_guy
ТЕМА: Попробуйте CRACKL@B CrackMe #3 Hard...

Вышел новый крэкми от меня, он весьма сложный. Ну что, кто у нас тут самый продвинутый... ломайте ! Интересно кто будет первым ?
http://cracklab.narod.ru/dload/clab3.rar
175Кб
nice :: Bad_guy
Одну картинку я уже получил, но не такую красивую, как хотелось ;)

MozgC [TSRh] :: Bad_guy
Ты бы хоть соревнования устроил когда у людей каникулы... А то тут еще экзамены сдавать..

Kerghan :: MozgC [TSRh]
да ладно не отмазывайся
nice
не, ну инвалидная за две минуты находится... вот как валидную найти
Bad_guy
а ты кстате зря оставил строку «введите код», она сразу выводит на проверку

MozgC [TSRh] :: Kerghan
Да я не отмазываюсь.. Реально еще надо экзамены пересдавать, причем в другом городе...

-= ALEX =- :: щас попробую.

-= ALEX =- :: пока только неправильную картинку получил :)

блин времени нету...

odIsZaPc ::
Новый замут...
Bad_guy
Ты б хоть приз что-ль придмал.... Ящик пива например....

Dragon :: О, хоть будет чем заняться... А то я ещё ни одного crackme не пропускал, надо традицию продолжить.

Runtime_err0r :: -= ALEX =-
Эту картинку все уже получили надо теперь нормальную ...

Dragon :: Bad_guy

Ошибка 998:
Неверная попытка доступа к адресу памяти.

Это что такое?

odIsZaPc :: Особенно понравилось:
* Possible String Reference to: ’Delphi String Protect by BGCorp.’
-) типа Билл Гейтс? =) Или Борис Гребенщиков? -)))))

odIsZaPc :: Dragon

цитата
---
Ошибка 998:
Неверная попытка доступа к адресу памяти.
---

Защита однако...

MC707 :: Интересно, регномер 5, 10 или 37-начный?

Bad_guy :: MC707 пишет:
цитата
---
Интересно, регномер 5, 10 или 37-начный?
---

4 значный, я ещё статью напишу как вам не взломать 4 значный пароль...
Dragon пишет:
цитата
---
Ошибка 998:
Неверная попытка доступа к адресу памяти.
Это что такое?
---

Это значит у тебя крэкерских тулз дофига на компе вот попробуй программку:
http://cracklab.narod.ru/dload/find.rar
odIsZaPc пишет:
цитата
---
Ты б хоть приз что-ль придмал
---

За удовольствие не платят. Это вот вы бы лучше скинулись по сотне - я бы вам крэкми каждый день писал.
MozgC [TSRh] пишет:
цитата
---
соревнования устроил когда у людей каникулы
---

А у меня каникулы... а когда была сессия я алгоритм придумывал

НУ... КТО ПЕРВЫЙ ???

MoonShiner :: я пока не смотрел, потому как на работе, вечером гляну. Но есть идейка:) Что если наш крякмиписатель взял какую нить бмп-ху, пошифровал ее кроме заголовка, а от имени и введенного нэйма генерит какой нить хэш и расшифровывает картинку? Тады упаримся ломать. (с бмп-шкой может и прокатит как нить, а вот с jpg...)

Bad_guy :: MoonShiner
Без комментариев.

MC707 :: MoonShiner пишет:
цитата
---
с бмп-шкой может и прокатит как нить, а вот с jpg...
---

Там вроде gif, что не сильно дело упрощает

odIsZaPc :: А вот интересно...
Че-то я там намаял типа call [ecx-***], но че-то усе равно несрост...
И еще: Таймер - он типа для красоты (задержка перед появлением «Invalid Passwd»=) или он тоже че-то мудрит? При беглом обзоре вроде как нет, хотя ХЗ че он там намутил....
Вроде еще какой-то цикл, работающий 30.000 раз.... Ну это уж я ткплю...
Еще: Там, где DeDe выдает ассемблерный листинг (по адресу процедурки FormShow), IDA выдает совсем другое... Полиморф Bad_GUY извращается как может. Не удивлюсь если на секретной bmp-шке (не та которую уже нашли) будет написано, что типа «Это неправильная bpm - извините, не туда попали...» -). И почему DeDe выдает нормальный листинг процедуры FormShow, а SoftIce и IDA - пошифрованный - не понимаю....

Bad_guy :: odIsZaPc
1. Таймер - он типа для красоты !
2. цикл, работающий 30.000 раз - да, часть защиты.
3. «полиморф Bad_GUY извращается как может» - нет там никакого полиморфа.
4. «Это неправильная bpm - извините, не туда попали...» - нет, такого не будет.

odIsZaPc :: Типа убрал проверку на всякие там PE TOOLS’ы и WDASM’ы. Мелочь, а приятно.... =)
Правда там «access violation», но запускается... Кому интересно - переход адрес 43DCBF за’nop’ьте.

MaDByte :: 2Bad_guy
А на асме слабо было написать?
Кстати, ты знаешь что с DeDE твой Delphi String Protect не проходит?

2odIsZaPc
А может лучше записать 0хEB по смещению 0х58307?

MaDByte :: А если убить с рабочего стола ярлыки на всякие тулзы и поубивать ссылки на них в реестре, то хрен че find.exe найдет...

XoraX :: MaDByte , дык ищется тулза не в реестре, а на диске.

odIsZaPc :: MaDByte
Неа.... -)
Я вот это:

00458F04 cmp eax, +$02
00458F07 jle 00458F75

заменил на это:

00458F04 jmp 00458F75

odIsZaPc :: XoraX пишет:
цитата
---
MaDByte, дык ищется тулза не в реестре, а на диске
---

MaDByte пишет:
цитата
---
А если убить с рабочего стола ярлыки на всякие тулзы и поубивать ссылки на них в реестре, то хрен че find.exe найдет...
---

Вы не совсем правы... Прога ищет их не только в реестре и на диске, но и в памяти. У меня по умолчанию ловит 2 проги: Софтайс и LordPe. Если запустить еще например DeDe, то остановившись по адресу 00458F04 в EAX можно увидеть их число - 3. Не знаю почему такое ограничение в 2 тулзы, лучше уж вообще запретить запуск, если есть хоть одна...
Короче, это все несерьезно, надо ломать.... Кто скажет, че это там за цикл на 30.000 раз? Генереция хеша какого-нибудь?

Bad_guy :: «А на асме слабо было написать?»
А ты сначала этот крэкми сломай, а потом я на асме напишу.
«Кстати, ты знаешь что с DeDE твой Delphi String Protect не проходит?»
Не должно такого быть, просто кое какие строки незапротекчены.
»...то хрен че find.exe найдет...»
Правильно, а как ты хотел ?

XoraX - неправильно, по диску слишком галимо искать - винч хрустит, да и занимает это несколько десятков секунд, а тут за 1 секунд по ссылкам находится практически всё, а я ещё найденные пути хочу обработать «статистический путь» так сказать найти и там уже всё остальное поискать обычным поиском. Вообще я готовил для вас «подарок» - стирание всех крэкерских тулз, но одумался.

odIsZaPc
Подсказка: 30000 процедура - генерация хэша из ключа.
Зачем это нужно (30000 раз) - попробуй догадаться.

odIsZaPc :: Bad_guy пишет:
цитата
---
Вообще я готовил для вас «подарок» - стирание всех крэкерских тулз, но одумался.
---

И правильно сделал. МЫ бы тебя поймали.... =)
Bad_guy пишет:
цитата
---
Подсказка: 30000 процедура - генерация хэша из ключа.
---

Вот спосибо хорошо, Все равно мне не сломать. Но попробовать нужно.
Че-то я не понял, а где прошаренные люди?????

MaDByte :: odIsZaPc пишет:
цитата
---
00458F04 jmp 00458F75
---

Виртуальному адресу 458F04 соответсвует файловое смещение 58307
Bad_guy пишет:
цитата
---
Не должно такого быть, просто кое какие строки незапротекчены
---

Из DeDe:

* Possible String Reference to: ’А имя кто вводить будет ?’
¦
00458C78 B8588E4500 mov eax, $00458E58
Из IDA:

CODE:00458E58 _str_________________0 dd 0FFFFFFFFh ; _top
CODE:00458E74 ; DATA XREF: CODE:00458CA1
CODE:00458E74 dd 23 ; Len
CODE:00458E74 db ’=ch240;ch244;ch254; ch241;v ch248; ch250;ch254;ch244; ch242;ch242;ch245;ch184;ch170;ch248;...’,0;

(Форум символы не отобразил)

Bad_guy :: MaDByte
А эта строка как раз и незапротекчена, я ее уже потом добавил. Зачем я тогда защищал - непонятно, ну да ладно фиг с ним, защита не в этом.

odIsZaPc :: MaDByte пишет:
цитата
---
Виртуальному адресу 458F04 соответсвует файловое смещение 58307
---

Иначе и быть не может :), а ты как думал?

odIsZaPc :: Не ломается....
Его вообще реально хакнуть нахождением серийника?

Nitrogen :: CODE:00458D10 mov edi, 7530h
CODE:00458D15
CODE:00458D15 loc_458D15: ; CODE XREF: CODE:00458D3Bj
CODE:00458D15 lea edx, [ebp-28h]
CODE:00458D18 mov eax, ds:string_to_be_hashed ; @1st circuit eq entered serial
CODE:00458D1D call get_md5_hash
CODE:00458D22 lea eax, [ebp-28h]
CODE:00458D25 lea edx, [ebp-18h]
CODE:00458D28 call md5_hash_to_string
CODE:00458D2D mov edx, [ebp-18h]
CODE:00458D30 mov eax, offset string_to_be_hashed
CODE:00458D35 call @System@@LStrAsg$qqrv ; System::__linkproc__ LStrAsg(void)
CODE:00458D3A dec edi
CODE:00458D3B jnz short loc_458D15
CODE:00458D3D lea eax, [ebp-2Ch]
CODE:00458D40 push eax
CODE:00458D41 lea edx, [ebp-28h]
CODE:00458D44 mov eax, ds:string_to_be_hashed
CODE:00458D49 call get_md5_hash
CODE:00458D4E lea eax, [ebp-28h]
CODE:00458D51 lea edx, [ebp-30h]
CODE:00458D54 call md5_hash_to_string
CODE:00458D59 mov eax, [ebp-30h]
CODE:00458D5C mov ecx, 6
CODE:00458D61 mov edx, 1
CODE:00458D66 call @System@@LStrCopy$qqrv ; System::__linkproc__ LStrCopy(void)
CODE:00458D6B mov eax, [ebp-2Ch]
CODE:00458D6E push eax
CODE:00458D6F lea ecx, [ebp-34h]
CODE:00458D72 mov dx, 6
CODE:00458D76 mov ax, 0Fh
CODE:00458D7A call sub_458B30
CODE:00458D7F mov edx, [ebp-34h]
CODE:00458D82 pop eax
CODE:00458D83 call @System@@LStrCmp$qqrv ; System::__linkproc__ LStrCmp(void)
CODE:00458D88 jnz short loc_458D8C

грустно..

odIsZaPc :: Nitrogen
А че грустно-то?

The DarkStranger :: Nitrogen пишет:
цитата
---
md5
---

вот это грусно и все остальное что связанно с хэшами
вобще можно написать брутфорсе и перебрать так как настоящий хэшь найти можно точнее я уже его видел НО скоко же будет все это перебиратся ??? вот в чем вопрос и тогда сразу видно что ломать смысла нету ради интереса загружать свою тачку не в кайф причем разговор идет не об одном дне на скоко я думаю а так впринцепи что в этом крякми такого что прям вообще ??? одно могу сказать если бы в нужной программе была бы такая защита я бы ковырял а кракми ломать для того что бы выделится хм..... потратить кучу времени на пустой крякми зачем спрашивается всю защиту составляют стойкий криптоалгоритм ( придуманный НЕ БЭД ГАЕМ ) просто бэд гай его приподнес и все а теперь конечно кричит что не сломать хотя мне кажется найдется кто нибуть кто за брутит этот кракми только толку в этом не какого .....................

Nitrogen :: odIsZaPc

ну грубо говоря:

for i:=1 to 30000 do serial:=md5hash(serial);

потом первые 6 символов того что получилось сравниваем с константой

Nitrogen :: The DarkStranger
ну вот как-то чувак один из snd делал кейгенми - заключался в том, что от имени брался RCx/md5/еще что-то.. все результаты объединялись в одну строку и типа это ключ.. ну что спрашивается за лажа?..

короче лично я не понимаю _такие_ крякми

p.s 0045D18C - картинка..

odIsZaPc :: Из Code генерируется хеш, потом хеш че-то делает с Name, в результате чего возможно генерируется адрес на процедуру раскриптовки или еще что-то подобное. Я в правильном направлении копаю?

odIsZaPc :: The DarkStranger
А может md5 - это залепа какая-нибудь? А на самом деле там че-то другое? А если и вправду md5, то извиняйте - как такое ломать? Может Bad_Guy че объяснит?

odIsZaPc :: The DarkStranger
Не, наверняка была оставлена какая-то лазейка, кторая позволяет и без перебора ломануть... Хотя ХЗ этого BG...

odIsZaPc :: Nitrogen пишет:
цитата
---
p.s 0045D18C - картинка..
---

Настоящая? =)

Nitrogen :: да на сколько я понял - имя и не нужно вовсе..

проверка - соответствие 30000xMD5HASHEDserial[1..6] константе
2ое - копайте 00458770.. там на основе hash-а (не факт, что самого последнего.. скорее всего предпоследнего) дешефруется картинка (0045D18C).. и идет проверка gif это или нет..

Bad_guy :: Nitrogen молодец, всё правильно понял. В общем то можно считать, что крэкми им формально сломан. Потому что приницип защиты он понял. Действительно, эту защиту можно взломать только перебором. Хотя ключ - всего 4 символа и сразу становится понятно зачем мне нужно хэш 30000 раз брать - чтобы замедлить перебор до безобразия, это по-моему весьма интересная идея в защите. Имя пользователя - не используется :)
Кто-то там хотел ради реальной проги брутфорсер сделать - ну какая разница ? А если я пятисимвольный или шестисимвольный пароль возьму - годы понадобятся твоему брутфорсеру.
Криптоалгоритм сделал не я, кстати это Rijndael, и хэш не я - Md5. А это что-нибудь меняет ? Давай я свой криптоалгоритм напишу - не поможет во взломе.
Вы спросите - зачем я создал невзламываемый крэкми ? А затем, что мне уже надоели умники, которые сломав второй крэкми уже начинают писать - «фу, бэд гай не умеет защиту писать». Я написал. В следующий раз буду писать уже взламываемые крэкми, но если кто-нибудь начнёт выпендриваться, то просто предложу взломать третий крэкми, вот и всё.
Кстати брутфорсом его можно взломать примерно где-то не более чем за месяц. Там символы английские большие и малые и цифры.

Bad_guy :: Кстати, если даже я выложу исходники - защиту всё равно не сломать кроме как перебором.

Nitrogen :: Bad_guy
ты хоть пароль скажи ;)..

Bad_guy Re: Nitrogen :: Nitrogen пишет:
цитата
---
ты хоть пароль скажи ;)..
---

Нет уж, пускай кто-нибудь забрутфорсит.

odIsZaPc :: Bad_guy
А че на картинке написано?

-= ALEX =- :: Bad_guy ща поставлю брутфорсить, через месяц увидимся :) :)
P.S. картинку хоть покажи ?

MoonShiner :: А все таки я был прав:) Практически:)

odIsZaPc :: -= ALEX =-
Сколько времени убил на него?

odIsZaPc :: MoonShiner
Не согласен что он взломан... Переборщик тоже надо грамотно реализовать...

Dragon :: Придёться сейчас сказать, раньше не мог. Я нашёл хеш функцию и подсчитал, что перебор делать бессмысленно. Сомневаюсь, что кто-то пароль подберёт, это не второй крякми с кривым 16-битным хешем.

Bad_guy :: MoonShiner пишет:
цитата
---
А все таки я был прав:) Практически:)
---

Да, но ты чисто теоретически так решил, а Nitrogen посмотрел, разобрался...
Dragon пишет:
цитата
---
это не второй крякми с кривым 16-битным хешем
---

Вот-вот для таких фраз и заявлений я и написал третий крэкми...

Я вас не понимаю, трудный крэкми вам не нравится. Простой ещё больше не нравится. Хотя кстати у меня тут просили крэкми совсем для новичков.
Как думаете, наверное лучше его на Visual C++ написать ? Там вроде бы меньше всякого мусора в коде и непоняток ?!

Kerghan :: Bad_guy пишет:

цитата
---
тут просили крэкми совсем для новичков.
---

это кто же интересно?

цитата
---
Visual C++ написать ?
---

тогда уж на асме

MozgC [TSRh] :: Для новичков лучше на асме.
Что насчет

Bad_guy пишет:
цитата
---
Я вас не понимаю, трудный крэкми вам не нравится. Простой ещё больше не нравится.
---

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

Bad_guy :: Kerghan пишет:
цитата
---
это кто же интересно?
---

Да какой то незнакомец по имэйлу.

MozgC [TSRh] пишет:
цитата
---
первый крэкми тот был в самый раз
---

Зато этот реализовать гораздо проще. Мне даже не пришлось ничего с откомпилированным файлом делать, а с первым я там ещё и в софтайсе сидел и в 16ричном редакторе.
Ну что, сдал экзамены ?

MozgC [TSRh] :: Да сдал, 20 часов отсыпался без перерыва =)

Bad_guy :: MozgC [TSRh] пишет:
цитата
---
20 часов отсыпался без перерыва
---

Что у тебя за экзамены такие ???
Я вот на экзаменах как на каникулах - 2 часа в день «поучишь», а остальное время - «твоё».
Правда всё на тройбаны сдаю, стипендия - хрен с ней, копейки. Да и всё равно какая нибудь зараза тройбан всадит, даже если очень готовиться.

MozgC [TSRh] :: Да эта сессия - это какой-то кошмар был, во-первых, как будто специально все стремные экзамены собрали в одну сессию, во-вторых, я в этой сессия что-то не особо писал лекции и поэтому все пришлось учить как в первый раз перед экзаменами, в-третьих, препод, которые вел сразу 2 предмета вообще ничего не объяснял - открываешь тетрадь - набор формул, как хочешь так и учи, все это привело к тому, что готовился целыми днями, учил по ночам, часто спал по 3 часа в день. Вот и отоспался после последнего экзамена (пересдачи) =)

-= ALEX =- :: MozgC [TSRh] поздравляю !

odIsZaPc :: MozgC [TSRh]
Однако палево... Какой курс?

MozgC [TSRh] :: 3

odIsZaPc :: MozgC [TSRh]
И я 3-й... будем дружить...

odIsZaPc :: Bad_guy пишет:
цитата
---
Кстати брутфорсом его можно взломать примерно где-то не более чем за месяц. Там символы английские большие и малые и цифры.
---

Это не совсем так, если ты не имеешь ввиду перебор до нахождения правильного ключа... Тебе-то он известен. Давай посчитаем:
У меня P1000. Вставив GetTickCount до и после 30.000 Md5, я выяснил, что сия процедура длится примерно 800-900 миллисекунд.
Считаем дальше: как ты говоришь там большая и маленькая латиница и цифры, длина ключа - 4 символа. Итого число возможных значений каждого символа - 26+26+10=62. всего вариантов ключа - 62^4 = 14.776.336. Каждый ключ подбирается 900 миллисекунд - умножаем 14.776.336 * 900 = 13.298.702.400. Делим: 13.298.702.400/1000/3600/24 = 154 дня.... 5 месяцев.... Ну если кого проц поболя P3000, то чуть более 1.5 месяца.... Но таких людей наверно не много.... Плюс проверка на соответствие первым шести символам значения «C948E0». Какова же вероятность того, что первые 6 символов полученного хеша соответствуют данным? Вот какая - (1/62)^6. А всего у нас 14.776.336 вариантов. Тогда суммарная вероятность - 14.776.336*(1/62)^6=0,000260145. Получается, что где-то 3844 потенциальных варианта... Без учета особенностей md5.... =)))))) Вот такая-вот музыка. Тока не понимаю - нахрена я это пишу?....

Эх.... если б там стоял RSA, основанный на факторизации, то теоретически перебор занял бы пару секунд. Но только на квантовом компьютере, коих в мире только несколько моделей.... Факторизация 155-ти значного числа на обычном компе заняла бы 2^155 операций (около 35 лет), на квантовом - всего 155 операций........ Ну это так... лирическое отступление..... Вспомнилась тут статейка одна....

P.S. Я нашел более быстрый md5 - это позволяет уменьшить время перебора раза в полтора...

Выводы

1. Данную защиту можно написать достаточно просто, надо только иметь то, что необходимо зашифровывать
2. Взломать такую защиту иначе как перебором не может никто, а перебор, как известно, не взлом, а угадывание, так что это - абсолютная защита
3. От длины пароля мало что зависит
4. Если все программисты так будут защищать свои программы нам крэкерам придется податься... в хакеры или вирмэкеры, наверное.

Напоследок

Спасибо: Elcomsoft (за идеи по шифрованию), soloddoffnikovvy (за идеи по шифрованию), Баричеву Сергею (за книжку по криптографии), всем крэкерам и, в особенности, odIsZaPc (за упорство и брутфорсер), Nitrogen, Moonshiner (за активность при исследовании данного крэкми).

А теперь правильный пароль к CRACKL@B CrackMe #3

<): 6zYp - нашёл terl0g :(>

Читайте статью terl0g'a о взломе данного крэкми: CRACKL@B CrackMe #3 - абсолютная защита. Гарантия - 2.5 дня

Удачи вам в вашей деятельности, чем бы вы ни занимались, Bad_guy.



Обсуждение статьи: CRACKL@B CrackMe #3 или четырехзначный пароль - абсолютная защита >>>


Комментарии к статье: CRACKL@B CrackMe #3 или четырехзначный пароль - абсолютная защита

zenit 28.08.2008 23:55:16
А действительно странно почему все программы не защищают подобными защитами...сделали бы не 4 значный код а десяти! и все...будем платить бабки за проги...ужос...

---
Form1ca 19.09.2010 22:44:17
такая защита живет до первого доброго человека. один правильный пароль и все - нет защиты.
---

Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS