Blog. Just Blog

Исследование защиты программы GPS Location Remover For Photos

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

Я думал, что уже всякой бесполезной хрени в жизни насмотрелся, а тут вот оно чо, Михалыч. Шароварное поделие GPS Location Remover For Photos, как можно догадаться из названия, предназначено для удаления геотегов из EXIF-секции фотографий. Типа это сохранит вашу приватность при размещении фотографий в соцсетях, а злобные враги не смогут узнать, где было сделано фото. То, что обычно фотографии сопровождаются всякими чекинами и камментами "Зоцените мы с посонами тусим в кабаке на Пушкенской", это в расчет не берется. Это не говоря уже о том, что кроме геотегов в EXIF остается много интересной информации. В который раз убеждаюсь в истинности пословицы "Без лоха жизнь плоха", и что абсолютно бесполезный продукт тоже можно пытаться продать.

Начинаем с загрузки дистрибутива. После установки и запуска наблюдаем полный комплект триальных надписей. Судя по структуре каталогов установленной программы, в ней используются языковые файлы. Логично предположить, что все текстовые строчки хранятся именно там. Откроем, к примеру, файл english.xml. Там легко обнаружатся строки, относящиеся к триальному режиму работы:

<Text.NotLicensed Text="Not Licensed"/>
<Text.TrialVersion Text="Trial Version"/>
<Text.YouAreUsingTheTrialVersion Text="You are using the 15-day trial version."/>

На самом деле их там гораздо больше, но нам хватит и этого. Переходим к исполняемому файлу. Он ничем не упакован. Размер большой, дизассемблеру потребуется немало времени для анализа, так что не будем с этим медлить. Параллельно поищем строчки из языкового файла, причем искать надо по названию XML-тега, а не по самому тексту:

Строка в файле
Строка в файле

Посмотрим, где и как эта строчка используется. Из-за юникода текст по перекрестным ссылкам в дизассемблере не виден, но виден в HiEW.
  1. .text:00AED358                 push    offset loc_AED60F
  2. .text:00AED35D                 push    dword ptr fs:[eax]
  3. .text:00AED360                 mov     fs:[eax], esp
  4. ; Указатель
  5. .text:00AED363                 mov     eax, off_B2C02C
  6. ; Проверить DWORD по этому указателю
  7. .text:00AED368                 cmp     dword ptr [eax], 0
  8. ; Если он не равен 0, то программа зарегистрирована
  9. .text:00AED36B                 jnz     loc_AED4A7
  10. .text:00AED371                 lea     ecx, [ebp+var_C]
  11. .text:00AED374                 mov     edx, offset off_AED628
  12. .text:00AED379                 mov     eax, ds:off_8803AC
  13. .text:00AED37E                 call    sub_880AB0
  14. .text:00AED383                 push    [ebp+var_C]
Проверим адрес указателя, на основании которого выполняется проверка и срабатывает условный переход.

Перекрестные ссылки на указатель
Перекрестные ссылки на указатель

На указатель есть три ссылки. Одну мы уже видели, осталось посмотреть остальные.
  1. .text:00880036                 mov     edx, off_B2C02C
  2. .text:0088003C                 mov     edx, [edx]
  3. .text:0088003E                 mov     eax, [ebx+3E8h]
  4. .text:00880044                 call    sub_543124
Здесь условных переходов нет, очень похоже на инициализацию указателя. Последний кусочек кода:
  1. ; Указатель
  2. .text:00AF01E5                 mov     eax, off_B2C02C
  3. .text:00AF01EA                 cmp     dword ptr [eax], 0
  4. ; Проверить DWORD по этому указателю
  5. .text:00AF01ED                 jnz     short loc_AF021E
  6. .text:00AF01EF                 mov     eax, [ebx+474h]
  7. .text:00AF01F5                 cmp     byte ptr [eax+69h], 0
  8. .text:00AF01F9                 jnz     short loc_AF022B
  9. .text:00AF01FB                 mov     edx, [ebx+420h]
  10. .text:00AF0201                 mov     ecx, [edx+54h]
  11. .text:00AF0204                 add     ecx, [edx+5Ch]
  12. .text:00AF0207                 inc     ecx
  13. .text:00AF0208                 mov     edx, ecx
  14. .text:00AF020A                 call    sub_542544
  15. .text:00AF020F                 mov     eax, [ebx+474h]
  16. .text:00AF0215                 mov     dl, 1
  17. .text:00AF0217                 call    sub_542FD4
  18. .text:00AF021C                 jmp     short loc_AF022B
  19. .text:00AF021E ; ---------------------------------------
  20. .text:00AF021E loc_AF021E:
  21. .text:00AF021E                 mov     eax, [ebx+474h]
  22. .text:00AF0224                 xor     edx, edx
  23. .text:00AF0226                 call    sub_542FD4
  24. .text:00AF022B loc_AF022B:
  25. .text:00AF022B                 mov     edx, offset off_AF03DC
  26. .text:00AF0230                 mov     eax, ebx
  27. .text:00AF0232                 call    sub_543124
Приступаем к хирургии. Поскольку в программе нет кода инициализации, явно записывающего ноль или не-ноль в DWORD, отвечающий за регистрацию, придется патчить условные переходы. Их всего два, по адресу 00AED36B и 00AF01ED, заменяем каждый на безусловный. Почему опять патч, а не серийник? Регистрация программы проверяется на сервере, без интернета вы даже не сможете ввести серийник. Кроме того, при каждой проверке обновления, регистрационный ключ также сливается на сервер. Поэтому, на мой взгляд, для программ с подобной схемой регистрации/активации предпочтительнее патч. Сохраняем изменения, запускаем.

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

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

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

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

Комментарии

Отзывы посетителей сайта о статье
SVS (10.04.2017 в 13:26):
Умеешь с юмором преподать материал. Обожаю тебя за эти статьи юморные)))

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

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

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