Blog. Just Blog

Исследование защиты программы Disk Size Manager

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

Программа Disk Size Manager предназначена для ответа на вопрос: куда делось место на диске? Она показывает в виде диаграммы какие файлы и в каких папках занимают больше всего места. Проблема нехватки дискового пространства возникает регулярно, поэтому триальный срок в 30 дней надо устранить.

Забираем с офсайта дистрибутив, устаналиваем, смотрим. Главный исполняемый файл накрыт протектором ASProtect. Снять его можно при помощи утилиты DecomAS от PE_kill, но делать это мне пришлось на ноутбуке с Windows XP, так как на других системах на выходе получался нерабочий файл.

Распаковываем файл
Распаковываем файл

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

Окно "О программе"
Окно "О программе"

Хорошая зацепка - счетчик оставшихся дней в окне "О программе". Он точно появляется, если программа не зарегистрирована. Но тут нас ждет разочарование. Код для формирования этого сообщения в программе есть, но вот ссылок на эту процедуру нет. Поиском по строке "trial" обнаруживается еще одно характерное место:
  1. CODE:005A9CDB                 push    ebp
  2. CODE:005A9CDC                 push    offset loc_5A9D2C
  3. CODE:005A9CE1                 push    dword ptr fs:[eax]
  4. CODE:005A9CE4                 mov     fs:[eax], esp
  5. ; Проверить значение переменной
  6. CODE:005A9CE7                 cmp     ds:dword_5BA378, 0
  7. ; Если значение больше 0, то переход
  8. CODE:005A9CEE                 jg      short loc_5A9D16
  9. CODE:005A9CF0                 lea     edx, [ebp+var_4]
  10. ; Загрузить строку из переменной по указанному адресу
  11. CODE:005A9CF3                 mov     eax, ds:dword_5BA384
  12. CODE:005A9CF8                 call    @Sysutils@Trim$qqrx17System@AnsiString
  13. CODE:005A9CFD                 cmp     [ebp+var_4], 0
  14. ; Если строка не пустая, то переход
  15. CODE:005A9D01                 jnz     short loc_5A9D16
  16. ; Вывести сообщение об окончании триального периода
  17. CODE:005A9D03                 push    30h             ; uType
  18. CODE:005A9D05                 push    offset aTrialPeriodExp
  19. ; "Trial Period Expired!"
  20. CODE:005A9D0A                 push    offset aLicenseKeyNotF
  21. ; "License key not found!\r\rPlease purchase"...
  22. CODE:005A9D0F                 push    0               ; hWnd
  23. CODE:005A9D11                 call    j_MessageBoxA_0
  24. CODE:005A9D16 loc_5A9D16:
  25. CODE:005A9D16                 xor     eax, eax
  26. CODE:005A9D18                 pop     edx
  27. CODE:005A9D19                 pop     ecx
  28. CODE:005A9D1A                 pop     ecx
Если посмотреть значение dword_5BA378 в распакованном файле, то там обнаружится число 1Eh, то есть 30 в десятичной системе счисления. Это соответствует начальному значению счетчика дней. В принципе, можно поискать место, где это значение инициализируется или меняется и сделать вечный триал. Решение хорошее, но оставим его на потом и посмотрим на вторую проверку. Она выполняется в том случае, если счетчик дней дошел до нулевой отметки. Чтобы сообщение об окончании триального срока не появилось, по адресу, на который указывает переменная dword_5BA384, должна быть какая-то непустая строка. После снятия навесного протектора там, естественно, ничего не появится. Заменим нулевое значение на адрес строки, которая гарантированно есть в программе, да хотя бы адрес той же строки об окончании триального срока, то есть на 005A9D38. Не забываем про обратный порядок байт в DWORD. Запускаем программу, открываем окно "О программе", наблюдаем там вместо счетчика дней надпись об окончании триального срока, что и ожидалось. Теперь эта строка является регистрационным именем. Осталось заменить текст строки об окончании триала на желаемое регистрационное имя, например, на "ManHunter / PCL", чтобы оно использовалось в качестве лицензионного:

Заменяем строку
Заменяем строку

Сохраняем изменения, запускаем.

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

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

Поделиться ссылкой ВКонтакте
Просмотров: 1864 | Комментариев: 6

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Олег (10.10.2020 в 21:14):
Также SpaceSniffer попробуйте. Хорошая визуализация.
ManHunter (03.10.2020 в 09:48):
Так смысл же статьи не в поиске аналогов и не в их сравнении.
hjkb (03.10.2020 в 09:37):
На правах рекламы.
WinDirStat - то же самое, но легче, быстрее и даром!
1 (02.10.2020 в 17:33):
Интересное решение
ManHunter (02.10.2020 в 07:58):
Так я как раз для этих целей и держу старый нетбук с WinXP. Что армудила, что аспр, все наиболее корректно распаковывается именно под XP. Никакая виртуалка не заменит.
0101 (02.10.2020 в 07:51):
Вот XP и пригодилась!) Давно использую эти две бесплатные программы для определения занятого места. Так что нет никакого "охотничьего" интереса добывать ещё одну..
https://yadi.sk/d/p76dz3QL1idB2Q

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

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

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