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

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


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

DS Cleaner 1.11 - Cоздаем ключ

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

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

Автор: Ara <ara86@inbox.ru>

Используемые инструменты:
- OllyDbg 1.10;
- APISpy 2.5;
- PEiD
- блокнот Windows


Вступление
"Программа DS Cleaner предназначена для удаления временных файлов Windows и очистки папки "Документы" в меню "ПУСК".Программа ведет поиск временных файлов следующих типов - BAK, OLD, TMP, _MP, CHK,
а также имеющих в расширении следующие символы: ~??, ---, ~~. Подавляющее большинство файлов
вышеперичисленных типов уже были использованы в системе и их дальнейшее хранение не имеет никакого смысла.
При этом они могут занимать немало места на жестком диске Вашего компьютера.". Так указано в HELPe к проге.
Размер установочного комплекта 532 Кб.
При загрузке выдает сообщение:"Внимание! Не найдена информация о регистрации..." и предложение посетить сайт програмы
для регистрации. В незарегистрированной версии в заголовке окна программы-надпись UNREGISTERED и
заблокиравана основная функция-поиск файлов. Причем ввести информацию о регистрации
прога не предлагает. Посещать указанный сайт мне было лень, да и незачем - мы же не собираемся
покупать лицензию. Так что начнем работу!



Распаковка
Откроем файл dscleaner.exe в PEiD:
--UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo
Для распаковки я использовал плагин к PEid, т.к. распаковка руками никакой сложности здесь не представляет,
так что время терять на ручную распаковку я не стал.
Укажу только место перехода на OEP:

004A1132 JMP SHORT dscleane.004A1115
004A1134 CALL DWORD PTR DS:[ESI+A2494]
004A113A POPAD
004A113B JMP dscleane.0047AD58<------ JMP OEP
004A1140 DD dscleane.004A1158
004A1144 DD dscleane.004A1168


Анализ
Немного поразмыслим - где может храниться информация о регистрации! Вероятнее всего - в реестре,
чуть менее вероятно - в каком-либо файле, совсем моловероятно - в теле самой программы ( я лично еще не встречал).
Как автор защитил программу, мы и будем выяснять. Здесь я использовал для анализа всех вызовов API функций
программу APISpy 2.5.(ее регистрацию я рассмотрел в предыдущей статье). Кроме адресов вызовов API можно посмотреть
и параметры вызова, и возвращенный результат. Поэтому запускаем APISpy, открываем в нем наш распакованный файл и запускаем.
Когда вылезет окно о ненайденной информации о регистрации, сохраним лог-файл работы APISpy. Закрываем пока
нашу прогу и посмотрим получше на лог, точнее на последние вызовы API. Такой вид имеет кусочек лог-файла, представляющий
для нас интерес.
........
0040811A:CreateFileA(LPSTR:00B61E8C:"D:\PROGRA~1\DSCLEA~1\dscln.key"...
0040811F:CreateFileA = 98 (DSCLEA~3.EXE)
004081A5:SetFilePointer(HANDLE:00000098,DWORD:00000000,LPDATA:00000000,DWORD:00000001)
004081AA:SetFilePointer = 0 (DSCLEA~3.EXE)
004081A5:SetFilePointer(HANDLE:00000098,DWORD:00000000,LPDATA:00000000,DWORD:00000002)
004081AA:SetFilePointer = C (DSCLEA~3.EXE)
004081A5:SetFilePointer(HANDLE:00000098,DWORD:00000000,LPDATA:00000000,DWORD:00000000)
004081AA:SetFilePointer = 0 (DSCLEA~3.EXE)
004081A5:SetFilePointer(HANDLE:00000098,DWORD:00000000,LPDATA:00000000,DWORD:00000001)
004081AA:SetFilePointer = 0 (DSCLEA~3.EXE)
0040815C:ReadFile(HANDLE:00000098,LPDATA:00B61EB8,DWORD:0000000C,LPDATA:0012FD88,LPDATA:00000000)
00408161:ReadFile = 1 (DSCLEA~3.EXE)
004081AD:CloseHandle(HANDLE:00000098)
004081B2:CloseHandle = 1 (DSCLEA~3.EXE)
0042E44F:CreateWindowExA(DWORD:00000101,LPSTR:0012FC10:"TMessageForm"...
0042E454:CreateWindowExA = 4019A (DSCLEA~3.EXE)
........

Кто еще не разобрался в этом листинге, объясню все по порядку вызовов функций.
Первой в нашем кусочке идет функция CreateFileA, параметр-имя файла. Используется для открытия или создания нового файла.
Возвращаемое значение(чуть ниже)-хэндл файла = 98.

Следующие четыре вызова SetFilePointer на первый взгляд мне показались странными-зачем 4 раза подряд
устанавливать указатель файла на 0. Присмотревшись к последнему параметру, который указывает, откуда
вести отсчет указателю(FILE_BEGIN=0, FILE_CURRENT=1, FILE_END=2), можно понять, что таким образом подсчитывается количество байт в файле.
Сначало указатель в начало, затем в конец - разницей и будет кол-во байт.SetFilePointer = C (DSCLEA~3.EXE) = 12байт
Затем идет ReadFile (третий параметр как раз С - 12 байт).

Далее CloseHandle(HANDLE:00000098)-закрытие файла.
CreateWindowExA(DWORD:00000101,LPSTR:0012FC10:"TMessageForm"...-создание окна с сообщением о ненайденной регистрации.

Подведем итоги - прога открывает файл dscln.key из своей папки, получает его размер в байтах,
считывает полученное количество байт в память, закрывает файл и выводит гнусное сообщение.
Логично предположить, что после считывания двенадцати байт где-то будут эти байты проверяться
и только потом выдается сообщение(если проверка не прошла). Поэтому берем отладчик.


Нахождение ключа
Я использовал OllyDbg, но можно и айс, это вопрос вкусов. Ставим бряк на адрес вызова ReadFile( адрес берем из лог файла).
Можно поставить bpx ReadFile, что тоже не принципиально. Да, сперва посмотрим, что это за файл читает прога.
dscln.key - это вовсе не файл реестра, как пишет Windows, а обычный текстовый файл с изменееным расширением. Вот и откроем его при помощи Блокнота, например.
У меня файл состоял всего из одного слова, зато какого - unregistered! Ровно 12 байт.
Ну чтож, будем ковырять. Жмем F9,останавливаемся на ReadFile.Далее F8. В ЕАХ получилась единица, значит ститалось все хорошо.
Если посмотреть память по адресу ESI, то как раз увидим наш ungeristered. Далее протопаем по F8 не замечая попадающиеся Call
до интересного места:

0047928B MOV EAX,DWORD PTR SS:[EBP-4]
0047928E MOV EDX,dscleane.00479418
00479293 CALL dscleane.00403EDC
00479298 JE SHORT dscleane.004792E0

Посмотрим, что лежит в памяти по EAX и EDX - они стоят перед переходом на процедуру.

По ЕАХ - unregistered.
По EDX - license:%%R^wad$@<<>> (очень интересно!)

Зайдя в процедуру по F7 увидим:

00403EE3 CMP EAX,EDX
00403EE5 JE dscleane.00403F7A

Вот, похоже, мы и нашли место сравнения считанных байт с верными. Здесь можно поступить по разному. Можно поменять переход JE на JMP
после выполнения процедуры проверки. А лучше и красивее подкорректировать файл dscln.key. Открываем его в Блокноте
и вместо unregistered пишем полученную строку license:%%R^wad$@<<>>.
Запускаем прогу - она зарегистрирована.


Заключение
Статья опять же ориентирована на новичка, в ней затронуты вопросы нахождения мест проверки регистрационных данных
без ввода информации. Следует также отметить, что нахождение верного ключа не составило труда ввиду
лени или нежелания автора генерировать уникальные строки для сравнения с dscln.key, что затруднило бы его поиски,
а использовал одну строку, заранее сформированную программой в виде константы. Не все проги (авторы) так поступают!
В заключении сначала хотел поблагодарить автора APISpy, которая уже не раз мне помогла, а потом передумал.
Все-таки он хотел за нее немного дензнаков, мог бы и бесплатной сделать. Тогда бы честь ему и хвала.
Удачного вам реверсинга!

____________________________________________________________________________________________________________________
Ara Ltd. ara86@inbox.ru 2004г.

Обсуждение статьи: DS Cleaner 1.11 - Cоздаем ключ >>>


Комментарии к статье: DS Cleaner 1.11 - Cоздаем ключ

Scar Shock Spade 01.07.2004 12:33:40
Все круто. Вот я, например, не в состоянии написать любой киген, но патчи у меня уже получались (я считаю, что если мне завтра будет 18 и у меня дома нет компа, а беру в соседа). Да, самое главное, чтобы мозги были на месте, а потом киген сможешь писать так как хотишь -:) (ну в худшем случае патчи).
Ведь я же юзаю древний P90, IDA3.7, WDasm32, TD32 и Hiew :( (а также... ArtMoney!).
---
RUslan 06.07.2005 22:46:39
/*Можно поменять переход JE на JMP
. А лучше и красивее подкорректировать файл dscln.key.*/
Нет лучше всего удалить файл dscln.key результат будет тотже.
Статья хорошая, твердая 4.
---
Flosy 08.04.2006 01:55:56
Для новичков в самый раз, всё по полочкам...
Автор не поленился.
---

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



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


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