Blog. Just Blog

Исследование защиты программы SSD Ready

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы SSD Ready
Скриншот программы SSD Ready

Программа SSD Ready предназначена для сбора статистики о том, какое приложение, на какой диск и сколько записывает данных. Полученные данные используются для приблизительной оценки, на сколько хватит ресурса SSD в случае замены на него HDD при такой активности использования. Если SSD уже установлен, то эти данные используются для расчета времени его жизни. В бесплатном варианте бесполезна чуть менее, чем полностью, а нормальную информацию показывает только при наличии платной лицензии.

Забираем с сайта дистрибутив, устанавливаем, смотрим что и как. Главный исполняемый файл ничем не упакован, отправляем его на разбор в дизассемблер.

Для регистрации программы используется кнопка Buy, она же выполняет роль кнопки "О программе", через нее же можно совершить покупку, если по какой-то причине вы находитесь не в совсем здравом уме.

Окно для ввода серийного номера
Окно для ввода серийного номера

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

Перебором строк типа "license", "registered" и тому подобных, обнаруживается вот такое интересное место в коде:
  1. .text:00409936                 mov     eax, dword_45DBA0
  2. .text:0040993B                 mov     dword ptr [eax+2B8h], 0
  3. .text:00409945                 mov     dword ptr [eax+2B4h], 0
  4. .text:0040994F                 mov     dword ptr [eax+2BCh], 0
  5. .text:00409959 loc_409959:
  6. .text:00409959                 mov     ecx, [eax+2B8h]
  7. .text:0040995F                 test    ecx, ecx
  8. .text:00409961                 jz      loc_4099ED
  9. .text:00409967                 cmp     dword ptr [eax+2C8h], 0
  10. .text:0040996E                 jz      short loc_4099A3
  11. .text:00409970                 cmp     ecx, 2
  12. .text:00409973                 jnb     short loc_4099A3
  13. .text:00409975                 push    0
  14. .text:00409977                 push    0
  15. .text:00409979                 push    offset aThisLicenseInN
  16. ; "This license in not for server version "...
  17. .text:0040997E                 mov     dword ptr [eax+2B8h], 0
  18. .text:00409988                 mov     dword ptr [eax+2B4h], 0
  19. .text:00409992                 mov     dword ptr [eax+2BCh], 0
  20. .text:0040999C                 call    sub_41D627
  21. .text:004099A1                 pop     esi
  22. .text:004099A2                 retn
Текст сообщения недвусмысленно намекает, что где-то тут выполняется проверка лицензии и ее типов. Чуть выше обнаружится следующие характерные строки кода:
  1. .text:004098F0                 push    dword ptr [esi+298h]
  2. .text:004098F6                 lea     ecx, [ecx+17Ch]
  3. .text:004098FC                 call    sub_406750
  4. .text:00409901                 push    offset a0d3ed78e011853
  5. ; "0D3ED78E0118535B29B"
  6. .text:00409906                 push    dword ptr [esi+298h]
  7. .text:0040990C                 call    sub_42B56F
  8. .text:00409911                 add     esp, 8
  9. .text:00409914                 test    eax, eax
  10. .text:00409916                 jz      short loc_409936
  11. .text:00409918                 push    offset a13de4355012b9b
  12. ; "13DE4355012B9B3FA0C"
  13. .text:0040991D                 push    dword ptr [esi+298h]
  14. .text:00409923                 call    sub_42B56F
  15. .text:00409928                 add     esp, 8
  16. .text:0040992B                 test    eax, eax
  17. .text:0040992D                 jz      short loc_409936
Если пройти это место под отладчиком, то тут видно, как выполняются два последовательных сравнения введенного серийника с записями из "черного списка". Когда-то это были официальные серийники, которые автор выкладывал на разные технические ресурсы для подогрева интереса к своему поделию и халявной наработки базы данных.

Строки серийников в файле
Строки серийников в файле

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

Программа успешно зарегистрирована
Программа успешно зарегистрирована

Первый серийник регистрирует на Professional License, второй предназначен для серверной версии. Поскольку заблокированные серийники присутствуют в каждой версии, можно легко сделать универсальный патч-разбаниватель. К тому же мы получили информацию о формате серийного номера.

Теперь попробуем разобрать алгоритм генерации и проверки серийника. Вернемся к отладчику и проверкам "черного списка". Прямо перед ними по адресу 004098FC есть еще один вызов функции, параметром которого является введенный серийник. Давайте посмотрим ее повнимательнее. Первым делом считается длина строки введенного серийника. Строка юникодная, по два байта на символ, поэтому и такой корявый алгоритм.
  1. .text:004067B0 loc_4067B0:
  2. .text:004067B0                 mov     ax, [ecx]
  3. .text:004067B3                 add     ecx, 2
  4. .text:004067B6                 test    ax, ax
  5. .text:004067B9                 jnz     short loc_4067B0
  6. .text:004067BB                 sub     ecx, edx
  7. .text:004067BD                 sar     ecx, 1
  8. .text:004067BF                 or      ebx, 0FFFFFFFFh
  9. ; Длина получилась 13h символов?
  10. .text:004067C2                 cmp     ecx, 13h
  11. ; Нет, переход на ошибку
  12. .text:004067C5                 jnz     loc_406895
  13. .text:004067CB                 lea     ecx, [esp+444h+var_418]
13h - это 19 в десятичной системе счисления. Значит длина серийника должна быть ровно 19 символов. Впрочем, программа просто не даст ввести больше, а при попытке скопировать и вставить длинную строку появится соответствующее предупреждение. Дальше берутся первые 11 символов и от них считается контрольная сумма по определенному алгоритму.
  1. .text:00406836                 mov     eax, [esp+444h+var_41C]
  2. .text:0040683A                 or      ecx, ebx
  3. .text:0040683C                 xor     edi, edi
  4. .text:0040683E                 mov     edi, edi
  5. ; Вычислить контрольную сумму для каждого из 11 первых символов
  6. .text:00406840 loc_406840:
  7. .text:00406840                 movzx   esi, byte ptr [eax+edi*2]
  8. .text:00406844                 movzx   edx, cl
  9. .text:00406847                 xor     esi, edx
  10. .text:00406849                 shr     ecx, 8
  11. .text:0040684C                 xor     ecx, [esp+esi*4+444h+var_418]
  12. .text:00406850                 inc     edi
  13. .text:00406851                 cmp     edi, 0Bh
  14. .text:00406854                 jb      short loc_406840
  15. .text:00406856                 not     ecx
  16. ; Контрольная сумма правильная?
  17. .text:00406858                 cmp     ecx, [esp+444h+var_424]
После цикла вычисления полученная контрольная сумма сравнивается с "хвостом" серийника, то есть последними 8 знаками. Сравнение удалось - регистрационные данные корректные. Если в отладчике посмотреть, по какой таблице XOR'ятся данные по адресу 0040684C, то обнаружится следующее:

Таблица для расчета CRC32
Таблица для расчета CRC32

Внимательный читатель без труда опознает тут табличный расчет CRC32. Таким образом проверка серийника сводится к расчету CRC32 от первых 11 символов, последние 8 символов являются полученной контрольной суммой в верхнем регистре. Валидным серийником, например, может быть "FFFFFFFFFFF5E395A2E" или "0123456789AA1787DC9".

Программа успешно зарегистрирована
Программа успешно зарегистрирована

При вводе любого из них программа переходит в зарегистрированный режим работы со всеми доступными опциями. Хотите - напишите кейген сами, не хотите - воспользуйтесь онлайн сервисом CRC-32 Checksum Calculator для расчета "хвоста" серийника. В любом случае цель достигнута.

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 426 | Комментариев: 6

Комментарии

Отзывы посетителей сайта о статье
Вообще (20.09.2021 в 10:10):
другая версия на офф.сайте
Musika (18.09.2021 в 22:17):
Привет,
программа SSDLife Pro (2.5.82), показывает, что на SSD, постоянно, что- то пишется. Вроде всё, что можно отключено и тем не менее..
С помощью SSD Ready 1.40 Pro - выяснить не получается.
Может посоветуете инструмент, для "тонкого" отслеживания записи на SSD?
user (14.09.2021 в 21:48):
Утиль двойного назначения.
Не знаю, как там для ssd-дисков,
но как монитор файловых операций вроде бы может быть полезна.

Слинкована для Vista+, но можно поправить значения в PE-заголовке,
тогда будет работать и в WinXP.

Это можно сделать либо ручками, либо используя Hiew32-плагин "PE_Win9x.HEM".
old-dos.ru/dl.php?id=22653
voffka (13.09.2021 в 13:54):
11-й символ тип лицензии 1,2,3 про,сервер,анлим соответственно
9-10-й символы количество 01-FF лицензий, в случае если тип лицензии 1 или 2
ManHunter (13.09.2021 в 11:30):
Дистрибутив точно этот, проверил. Не менялся с момента оформления статьи.
newfuck (13.09.2021 в 08:45):
скачал по ссылке "дистрибутив", установил, а прога мало того, что х64, так ещё и обфусцированна чем-то: exeinfo ничего не показывает, но глазами видно, что вообще код странный - отсутстуют вызовы "call" и т.п.

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0036 сек.) / Память: 4.75 Mb
Наверх