Примеры реальных взломов: Record Now

Дата публикации 7 апр 2003

Примеры реальных взломов: Record Now — Архив WASM.RU

…и угораздило же меня приобрести "писец" (то бишь CD-RW) в OEM-поставке! И ведь спрашивал продавца: а где, позвольте, тут пишущий софт или, по крайней мере, драйвера? На что продавец, удивленно так пожимая плечами, ответил: какие драйвера? Втыкаете - работает. А пишущие программы подходят любые, вот купите в соседнем магазине диск с Neuro CD. Мне, обладателю retail-"писца" от PHILPS, еще тогда это показалось странным, поскольку, я хорошо помнил, что диск с драйверами в коробке PHILPS'а был, а Easy CD Creator - непосредственно сам пишущий софт, - располагался совсем на другом диске. Но ведь как-то же справляются с OEM-продукцией другие люди, подумал я, и… купил.

Наскоро воткнув новехонький 40-скоростной NEC в свой компьютер, я был немало удивлен, когда Neuro CD наотрез отказался признать его "писцом". Не помог тут и Easy CD Creator, взятый с Филечкиного CD. Провозившись битый час и, ничего ровным счетом так и не выяснив, я, зверски разозленный на продавца, решил сделать ход конем, установив NEC на компьютер с "девяносто восьмой" Windows, вернув PHILPS'а себе. Никаких изменений! Собравшись было отдавать привод назад продавцу, я неожиданно вспомнил, что в одном из последних номеров Компьютер Пресс был обзор пишущих программ, причем демонстрационные версии всех этих программ содержались на прилагаемом к журналу компакт-диске. Из всех программ NEC'овый писец опознала лишь одна: Record NOW, которая, к счастью не имела никаких функциональных ограничений, исключая, правда 30-днейвый триальный период. Причем, программа оказалась такой уютной и удобной, что расставаться с ней мне не захотелось, но и расставаться со своими деньгами мне не хотелось тоже.

Как выглядит защита? При каждом запуске программа выводит противный nag-screen, напоминающий сколько дней ей еще "жить" осталось, и тем самым страшно нервирующий: Хорошо, ищем фразу "Number of days remaining in evaluation" во всех файлах программы и, если наша искалка поддерживает уникод, быстро выясняется, что данный текст содержится в файле lockers.dll, открыв который любым редактором ресурсов, мы обнаруживаем в нем тот самый заветный диалог! Остается выяснить: кто же выводит этот диалог на экран? Ищем строку "lockres.dll" во всех файлах программы. ОК, это lockout.dll. Да… и эти разработчики не в ладах с юмором. Запускам dumpbin и смотрим список экспортируемых функций:

Код (Text):
  1.  
  2. Dump of file lockout.dll
  3.  
  4. File Type: DLL
  5.  
  6.   Section contains the following exports for lockout.dll
  7.  
  8.            0 characteristics
  9.     3C855E8D time date stamp Wed Mar 06 03:10:53 2002
  10.         0.00 version
  11.            1 ordinal base
  12.           23 number of functions
  13.           23 number of names
  14.  
  15.     ordinal hint RVA      name
  16.  
  17.           3    0 0000CFF0 ?DESDecrypt@@YAKPBDPAD0@Z
  18.           4    1 0000CC40 ?DESEncrypt@@YAKPBDPAD0@Z
  19.           1    2 00003520 EvalModeTest
  20.           2    3 00003930 EvalModeTestVB
  21.           6    4 0000B230 _ezLICENSE_Check_Delphi@16
  22.           7    5 0000B1A0 _ezLICENSE_Check_VB@16
  23.           9    6 0000BC20 _ezLICENSE_ChkExpire_Delphi@16
  24.          10    7 0000BB90 _ezLICENSE_ChkExpire_VB@16
  25.          12    8 00009DB0 _ezLICENSE_ChkFileCRC_Delphi@8
  26.          13    9 00009D40 _ezLICENSE_ChkFileCRC_VB@8
  27.          15    A 0000BA30 _ezLICENSE_Clear_Delphi@12
  28.          16    B 0000B9B0 _ezLICENSE_Clear_VB@12
  29.          18    C 0000A320 _ezLICENSE_GetRestNumber_Delphi@16
  30.          19    D 0000A290 _ezLICENSE_GetRestNumber_VB@16
  31.          22    E 0000A6C0 _ezLICENSE_Upgrade_Delphi@20
  32.          23    F 0000A610 _ezLICENSE_Upgrade_VB@20
  33.           5   10 0000B2C0 ezLICENSE_Check
  34.           8   11 0000BCA0 ezLICENSE_ChkExpire
  35.          11   12 00009E20 ezLICENSE_ChkFileCRC
  36.          14   13 0000BAA0 ezLICENSE_Clear
  37.          17   14 0000A3B0 ezLICENSE_GetRestNumber
  38.          20   15 00009C30 ezLICENSE_GetVersion
  39.          21   16 0000A770 ezLICENSE_Upgrade

Сурово! Во-первых, обращает на себя пара функция DES Encrypt/DES Decrypt, что-то (как и следует из ее названия) зашифровывающая/расшифровывающая. Во-вторых, тройственный подход к наименованию функций, наводит на мысль, что мы имеем дело с "конвертной" защитой, разработанной независимо от защищенной с ее помощью программы, и поддерживающий все основные языки программирования: Си/Си++, Дельфи и конечно же, Visual Basic, узнаваемый по суффиксу VB. В-третьих, такое обилие всевозможных проверочных функций предвещает, что исследование защиты и защищенной программы окажется делом отнюдь не легким! Причем, в те три сотни килобайт, которые занимает файл lockout.dll можно много всяких ловушек и хитростей понапхать, так что на скорый успех нам рассчитывать не приходится. Но… глаза страшатся, а руки делают. Начнем с того, что посмотрим: какие именно функции защитной библиотеки использует программа.

…вот тебе и раз! Защищенная-то программа состряпана на Визуальном Бейсике, о чем красноречиво свидетельствует единственная явно загружаемая ею библиотека MSVBVM60.DLL! Ах, так?! Хорошо, пойдем напролом. Просто удаляем lockout.dll из каталога программы и подсовываем ей любую другую DLL, предварительно переименованную в данную. Запускаем программу. На экране незамедлительно появляется сообщение об ошибке: среда Visual Basic'а ругается, что не может найти функцию EvalModeTestVB. Что ж, это уже кое-что! Загружаем lockout.dll в дизассемблер, находим в нем эту самую "Eval", быстро выясняем, что она является "переходником" к EvalModeTest, которая… которая… Ой-ой-ой, которая занимает до черта килобайт и содержит в себе крайне запутанный с большим количеством глубоко вложенных друг в друга процедур программный код. Да чтобы проанализировать все это и месяца не хватит! А кто сказал, что этот код вообще следует анализировать?! Достаточно просто подсунуть нужный код возврата и все! Весь вопрос в том: какой именно код нужный. Бегло просмотр содержимого функции показал, что существуют как минимум три различных кода возврата: "0", "2" и "3". Если это так, то скорее всего одному из них соответствует состояние "программа не зарегистрирована, но лицензия еще не истекала", "программа не зарегистрирована и лицензия уже истекла", и, наконец, "программа зарегистрирована". Что ж, на перебор трех вариантов не уйдет много времени! Взяв в руки HIEW, переписываем код защитной функции "с нуля": XOR EAX, EAX/RETN.

Возвращаем lockout.dll на ее прежнее место, запускаем Record NOW и… не можем поверить свои глазам, - программа исправно работает! "Исправно" - в том смысле, что nag?screen уже не выводится и по истечении положенных тридцати дней писец по-прежнему живет, а не умирает.

Хорошо, а если бы разработчик защищенного приложения, не поленился бы воткнуть проверку на успешность загрузки функции EvalModeTestVB и при ее отсутствии немотивированно прекращал свою работу? Смогли бы мы тогда узнать: какие функции библиотеки lockout используется, а какие нет? Уговорили! Взломаем программу другим путем! Погоняем курсор к MyCDPro.exe и, нажав на , пытаемся найти lockout.dll прямым контекстным поиском. Вот, пожалуйста:


Поиск ссылки на lockout.dll в защищенной программе

Прямым текстом: "lockout.dll" и рядышком с ней EvalModeTestVB. Имена остальных защитных функций в исследуемой программе отсутствуют. Самое забавное, что в модуле lockout.dll присутствует огромное количество строк типа: "'User has turned back their clock, so calculating days based on last and init", "The CRC file is valid", "Failed to update the Last Accessed time", - т. е. защита составлена довольно грамотно и в состоянии как следует за себя постоять. Если, конечно, разработчик защищаемого приложения использовал все, предоставленные ей возможности, сполна. Увы, этого не произошло и на этот раз… © Крис Касперски


0 891
archive

archive
New Member

Регистрация:
27 фев 2017
Публикаций:
532