Blog. Just Blog

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

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

Программа Detwinner предназначена для поиска и удаления дубликатов файлов или похожих изображений на компьютере. Дубликаты определяются по стопроцентному совпадению содержимого, а изображения группируются по похожести. Найденные дубли можно сразу же удалить. Незарегистрированная версия позволяет обработать только 1000 файлов за один проход, что, естественно, очень мало. И хоть цена регистрации невелика, попробуем обойтись совсем без нее.

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

Сообщение незарегистрированной программы
Сообщение незарегистрированной программы

Исполняемый файл ничем не упакован, отправляем его в дизассемблер. Когда тот закончит свою работу, поищем в листинге что-нибудь, относящееся к сообщениям о регистрации или триальности. Обычно первым делом я использую поиск по строке "unregistered". Вот что у меня нашлось:
  1. .text:0042452A                 push    12h             ; size_t
  2. .text:0042452C                 push    offset aAbout_unregist
  3. ; "about.unregistered"
  4. .text:00424531                 lea     ecx, [ebp+var_40] ; int
  5. .text:00424534                 mov     [ebp+var_2C], 0Fh
Ну все правильно, программа мультиязычная, строки загружаются не напрямую, а по их условным индексам. По всей видимости это строка в окне "О программе". Значит есть смысл поискать где-нибудь рядом строку о том, что программа зарегистрирована. Прокрутив пару экранов вверх, видим следующее:
  1. .text:004242DC                 mov     eax, [edi+38h]
  2. .text:004242DF                 lea     edx, [eax+0B8h]
  3. .text:004242E5                 lea     ecx, [eax+0D0h] ; lpWideCharStr
  4. ; Вызвать функцию проверки
  5. .text:004242EB                 call    sub_458A30
  6. .text:004242F0                 mov     [ebp+var_14], 0Fh
  7. .text:004242F7                 lea     ecx, [ebp+var_28] ; int
  8. .text:004242FA                 mov     [ebp+var_18], 0
  9. .text:00424301                 mov     byte ptr [ebp+var_28], 0
  10. ; Если она вернула AL=0, то перепрыгнуть на загрузку строки "unregistered"
  11. .text:00424305                 test    al, al
  12. .text:00424307                 jz      loc_4244A6
  13. .text:0042430D                 push    13h             ; size_t
  14. ; Загрузить строку сообщения о зарегистрированности программы
  15. .text:0042430F                 push    offset aAbout_register
  16. ; "about.registered-to"
  17. .text:00424314                 call    sub_407DC0
  18. .text:00424319                 mov     [ebp+var_4], 0
  19. .text:00424320                 mov     eax, dword_4D6234
  20. .text:00424325                 test    al, 1
Вот это то, что нам надо. Выполняется проверка, по ее результатам в окно "О программе" выводится имя, на кого она зарегистрирована или же сообщение, что надо бы выложить свои кровные денежки. Касса пока подождет, посмотрим на функцию проверки по адресу 00458A30. Она достаточно объемная, но с первого же взгляда видна работа с base64-закодированными данными, какие-то циклические вычисления, математические операции с константами и все такое прочее. Это и есть функция проверки серийного номера, которая должна вернуть AL!=0 при наличии корректной регистрации. Нам на помощь приходит классический трехбайтный патч в начало функции проверки MOV AL,1 и RET. Сохраняем изменения, запускаем.

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

В окне исчезли все надписи о резарегистрированности, в окне "О программе" написано, что программа зарегистрирована, но вместо регистрационных данных пустое место. В принципе, можно оставить и так. А можно сделать еще красивее. В папке settings внутри папки с установленной программой находится файл с настройками settings.ini.

Файл конфигурации
Файл конфигурации

Если открыть этот файл на редактирование, то один из параметров в нем будет называться UserName. Это и есть регистрационное имя, которое должно отображаться в окне "О программе". Вписываем туда нужное значение и сохраняем изменения.

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

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

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

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

Комментарии

Отзывы посетителей сайта о статье
xussr (04.06.2017 в 06:23):
0458A30:  B801000000            mov eax, 00000001h


0458A35:  C3                    ret
4kusNick (17.09.2016 в 11:11):
Я вот Similarity пользую, она ещё и музычку может на похожесть проверять)

Статья напомнила мне мои молодые годы, с такого патчинга я начинал, эх было время! =D
Vladimir (29.07.2016 в 00:08):
Перепробовал я этих программ для поиска дубликатов, а в итоге остановился вот на этой http://antidupl.sourceforge.net/

Но это просто к слову, а Detwinner надо попробовать, вдруг лучше будет...

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

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

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