Blog. Just Blog

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

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

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

Начинаем с дистрибутива. Скачиваем, устанавливаем, все как обычно. Размер инсталлятора великоват, потом посмотрим, с чем это связано. А пока запустим программу и выясним, как она будет реагировать на неправильную регистрацию.

Сообщение о неправильной регистрации
Сообщение о неправильной регистрации

Посмотрим на исполняемый файл. Он написан на визуальном басице (Visual Basic, кто не понял) и ничем не упакован. В свое время я считал визуальный басиц абсолютным злом для ковыряния, но это ровно до появления дотнета :) Но сейчас речь не об этом. Загоняем файл в дизассемблер и смотрим, где появляется строка сообщения о неправильной регистрации:
  1. .text:004926A4                 test    eax, eax
  2. .text:004926A6                 jz      loc_492759
  3. .text:004926AC                 mov     [ebp+var_4], 0Bh
  4. .text:004926B3                 mov     [ebp+var_80], 80020004h
  5. .text:004926BA                 mov     [ebp+var_88], 0Ah
  6. .text:004926C4                 mov     [ebp+var_70], 80020004h
  7. .text:004926CB                 mov     [ebp+var_78], 0Ah
  8. .text:004926D2                 mov     [ebp+var_D0], offset aInvaild
  9. ; "Invaild"
  10. .text:004926DC                 mov     [ebp+var_D8], 8
  11. .text:004926E6                 lea     edx, [ebp+var_D8]
  12. .text:004926EC                 lea     ecx, [ebp+var_68]
  13. .text:004926EF                 call    __vbaVarDup
  14. .text:004926F4                 mov     [ebp+var_C0], offset aInvalidCode_
  15. ; "Invalid Code."
  16. .text:004926FE                 mov     [ebp+var_C8], 8
  17. .text:00492708                 lea     edx, [ebp+var_C8]
  18. .text:0049270E                 lea     ecx, [ebp+var_58]
  19. .text:00492711                 call    __vbaVarDup
Чуть выше два похожих участка кода, в которых выполняются операции сравнения с очень интересными строками:
  1. .text:00492549                 lea     eax, [ebp+var_58]
  2. .text:0049254C                 push    eax
  3. .text:0049254D                 lea     eax, [ebp+var_68]
  4. .text:00492550                 push    eax
  5. .text:00492551                 call    rtcTrimVar
  6. .text:00492556                 mov     [ebp+var_C0], offset aVr8374d12cb
  7. ; Сравнение со строкой "VR8374D12CB"
  8. .text:00492560                 mov     [ebp+var_C8], 8008h
  9. .text:0049256A                 mov     eax, [ebp+arg_0]
  10. .text:0049256D                 mov     eax, [eax]
  11. .text:0049256F                 push    [ebp+arg_0]
  12. .text:00492572                 call    dword ptr [eax+308h]
  13. .text:00492578                 push    eax
  1. .text:004925F1                 mov     [ebp+var_88], 8
  2. .text:004925FB                 lea     eax, [ebp+var_88]
  3. .text:00492601                 push    eax
  4. .text:00492602                 lea     eax, [ebp+var_98]
  5. .text:00492608                 push    eax
  6. .text:00492609                 call    rtcTrimVar
  7. .text:0049260E                 mov     [ebp+var_D0], offset aVrsa277c5wd
  8. ; Сравнение со строкой "VRSA277C5WD"
  9. .text:00492618                 mov     [ebp+var_D8], 8008h
  10. .text:00492622                 lea     eax, [ebp+var_68]
  11. .text:00492625                 push    eax
  12. .text:00492626                 lea     eax, [ebp+var_C8]
  13. .text:0049262C                 push    eax
  14. .text:0049262D                 lea     eax, [ebp+var_78]
  15. .text:00492630                 push    eax
  16. .text:00492631                 call    __vbaVarCmpEq
  17. .text:00492636                 push    eax
Если хоть одно совпадение найдено, то введенный серийник признается неправильным. Как несложно догадаться, это проверка на "черный список" скомпрометированных серийных номеров. Немного ниже еще одна интересная проверка:
  1. .text:004927EE                 lea     eax, [ebp+var_58]
  2. .text:004927F1                 push    eax
  3. .text:004927F2                 lea     eax, [ebp+var_68]
  4. .text:004927F5                 push    eax
  5. .text:004927F6                 call    rtcTrimVar
  6. .text:004927FB                 mov     [ebp+var_C0], offset aVr1i3d4chip
  7. ; Сравнение со строкой "VR1I3D4CHIP"
  8. .text:00492805                 mov     [ebp+var_C8], 8008h
  9. .text:0049280F                 lea     eax, [ebp+var_68]
  10. .text:00492812                 push    eax
  11. .text:00492813                 lea     eax, [ebp+var_C8]
  12. .text:00492819                 push    eax
  13. .text:0049281A                 call    __vbaVarTstEq
  14. ...
  15. ...
  16. ...
  17. .text:0049286E                 mov     [ebp+var_78], 0Ah
  18. .text:00492875                 mov     [ebp+var_D0], offset aExpired
  19. ; "Expired"
  20. .text:0049287F                 mov     [ebp+var_D8], 8
  21. .text:00492889                 lea     edx, [ebp+var_D8]
  22. .text:0049288F                 lea     ecx, [ebp+var_68]
  23. .text:00492892                 call    __vbaVarDup
  24. .text:00492897                 mov     [ebp+var_C0], offset aTheSpecialVers
  25. ; "The Special Version Expired. Please buy"...
  26. .text:004928A1                 mov     [ebp+var_C8], 8
Тут тоже не надо быть семи пядей во лбу, чтобы догадаться, что когда-то была выпущена специальная версия программы для читателей журнала "CHIP", после чего акционный серийный номер был также заблокирован. Итого у нас на руках имеется три валидных серийника, которые занесены в "черный список". В таких случаях достаточно вычистить из программы упоминания о них, заменив на какой-нибудь заведомо левый мусор, а сами серийники можно будет использовать для регистрации. Такие фокусы мы уже проделывали раньше. Поищем в файле строчки с любым из трех серийных номеров.

Серийники в файле
Серийники в файле

Но что это? В "черном списке" три серийника, а тут их явно больше. Не участвуют в проверках на наличие в "черном списке" следующие серийники: "VR7341658WD", "VRSAGK852WD", "VRSAP0461WD", "VRSA99F20WD" и "VRSA099T3WD". Попробуем воспользоваться одним из них, чтобы посмотреть на реакцию программы.

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

Вот такие пироги с котятами. Небольшой список правильных серийных номеров хранится в открытом виде в самой программе. Да, такое тоже до сих пор встречается. Регистрация хранится в файле %APPDATA%\vsound.dll.

Возвращаясь к вопросу, почему инсталлятор имеет такой размер. Если заглянуть в папку \data, то там обнаружится файл "conv.exe", который, в свою очередь, является ни чем иным, как бесплатным медиаконвертером FFmpeg. То есть программа Video Rotator является платной оболочкой для запуска бесплатной программы, которая и делает всю основную работу. Естественно, никаких упоминаний о FFmpeg ни на сайте, ни в программе нет.

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

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

Комментарии

Отзывы посетителей сайта о статье
ManHunter (12.08.2017 в 16:30):
Korvet, не нравится как я пишу - найди сайты где распаковывают VMP и пишут об этом статьи, иди туда и читай. В чем проблема? Уже начинают напрягать подобные комментарии. Если не хватает сил не ходить сюда, то могу помочь, бан тут выдается очень быстро.
Korvet (12.08.2017 в 13:29):
Как не зайду в эту рубрику всегда расматриваются лёгкие случаи защиты. Ни разу не встречалась статейка с распаковой ВМпротектора например. Взламывая ниочёмные защиты, автор выставляет себя каратистом с чёрным поясом, который колотит женщин и детей.
user (12.08.2017 в 07:46):
Большая часть пипла именно от этого и получает удовольствие.
У них захватывает дух от таких "наворотов".

Закон Мерфи:
-- Любая сущность стремится в своём развитии к усложнённости.
-- Достигнув максимальной усложнённости, сущность погибает.

Как-то так.
ManHunter (10.08.2017 в 10:54):
Плохая практика вообще срать где-то за пределами папки, куда программа установлена. И совсем днище маскировать какие-то данные под системные библиотеки.
Anonymous (09.08.2017 в 00:01):
>> Регистрация хранится в файле %APPDATA%\vsound.dll.
Обычно вирусня такие файлы создаёт...
Плохая практика - срать прямо в %APPDATA%, а не в %APPDATA%\Папка_с_настройками_программы

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

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

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