Blog. Just Blog

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

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

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

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

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

По тексту строки находим код, где это сообщение выводится. Функция достаточно объемная, для наглядности я ее сокращу, так как больше ничего интересного в ней нет.
  1. .text:004AC7D0                 push    0FFFFFFFFh
  2. .text:004AC7D2                 push    offset sub_4F80FD
  3. .text:004AC7D7                 mov     eax, large fs:0
  4. .text:004AC7DD                 push    eax
  5. .text:004AC7DE                 sub     esp, 10h
  6. ...
  7. ...
  8. ...
  9. .text:004AC8AB                 push    0FFFFFFFFh
  10. .text:004AC8AD                 push    0
  11. .text:004AC8AF                 lea     eax, [esp+38h+var_1C]
  12. .text:004AC8B3                 push    offset aTheTrialVersio
  13. ; "The trial version adds watermark to rec"...
  14. .text:004AC8B8                 push    eax
  15. .text:004AC8B9                 call    ds:?tr@QObject@@SA?AVQString@@PBD0H@Z
  16. .text:004AC8BF                 add     esp, 10h
  17. .text:004AC8C2                 mov     ecx, [esi+38h]
  18. .text:004AC8C5                 push    eax
Как я сказал, тут нет никаких проверок и условных переходов. По единственной перекрестной ссылке на эту функцию переходим выше по цепочке вызовов.
  1. .text:004ACA90 sub_4ACA90      proc near
  2. .text:004ACA90                 push    0FFFFFFFFh
  3. .text:004ACA92                 push    offset sub_4F3368
  4. .text:004ACA97                 mov     eax, large fs:0
  5. .text:004ACA9D                 push    eax
  6. .text:004ACA9E                 push    ecx
  7. .text:004ACA9F                 push    esi
  8. .text:004ACAA0                 mov     eax, ___security_cookie
  9. .text:004ACAA5                 xor     eax, esp
  10. .text:004ACAA7                 push    eax
  11. .text:004ACAA8                 lea     eax, [esp+18h+var_C]
  12. .text:004ACAAC                 mov     large fs:0, eax
  13. .text:004ACAB2                 mov     esi, ecx
  14. .text:004ACAB4                 mov     [esp+18h+var_10], esi
  15. .text:004ACAB8                 mov     eax, [esp+18h+arg_0]
  16. .text:004ACABC                 push    eax
  17. .text:004ACABD                 call    sub_4631E0
  18. .text:004ACAC2                 push    esi
  19. .text:004ACAC3                 lea     ecx, [esi+30h]
  20. .text:004ACAC6                 mov     [esp+1Ch+var_4], 0
  21. .text:004ACACE                 mov     dword ptr [esi], offset off_512CD4
  22. .text:004ACAD4                 mov     dword ptr [esi+8], offset off_512CB0
  23. .text:004ACADB                 mov     dword ptr [esi+18h], offset off_512C90
  24. .text:004ACAE2                 call    sub_4AC2F0
  25. .text:004ACAE7                 mov     ecx, esi
  26. .text:004ACAE9                 call    sub_4AC210
  27. .text:004ACAEE                 mov     ecx, esi
  28. .text:004ACAF0                 call    sub_4AC7D0
  29. .text:004ACAF5                 mov     eax, esi
  30. .text:004ACAF7                 mov     ecx, [esp+18h+var_C]
  31. .text:004ACAFB                 mov     large fs:0, ecx
  32. .text:004ACB02                 pop     ecx
  33. .text:004ACB03                 pop     esi
  34. .text:004ACB04                 add     esp, 10h
  35. .text:004ACB07                 retn    4
  36. .text:004ACB07 sub_4ACA90      endp
Тут тоже никаких проверок, код абсолютно линейный. Переходим выше по единственной перекрестной ссылке и попадаем на характерный код с проверкой и условным ветвлением алгоритма. Именно здесь и принимается решение, выводить триальное предупреждение или нет.
  1. ; Вызвать функцию проверки
  2. .text:0045400E                 call    sub_455380
  3. ; По ее результатам (не)выполнить условный переход
  4. .text:00454013                 test    al, al
  5. .text:00454015                 jnz     short loc_454095
  6. .text:00454017                 push    esi
  7. .text:00454018                 lea     ecx, [esp+1B4h+var_18C]
  8. ; Вывести сообщение
  9. .text:0045401C                 call    sub_4ACA90
  10. .text:00454021                 mov     ecx, esi
  11. .text:00454023                 mov     [esp+1B0h+var_4], 1
  12. .text:0045402E                 call    ds:?winId@QWidget@@QBEIXZ
  13. .text:00454034                 push    0FFFFFFECh      ; nIndex
  14. .text:00454036                 push    eax             ; hWnd
  15. .text:00454037                 call    ds:GetWindowLongW
  16. .text:0045403D                 shr     eax, 3
Перейдя на функцию проверки мы обнаруживаем там переходник в виде безусловного перехода. Ссылок на этот переходник около десятка, так что можно предположить, что как раз он и отвечает за все проявления триальности.
  1. .text:00455380 sub_455380      proc near
  2. .text:00455380                 jmp     sub_4031E0
  3. .text:00455380 sub_455380      endp
При этом мы знаем, что функция проверки должна вернуть AL=1. Дальше ходить не будем, просто заменим этот переходник на пару команд MOV AL,1 и RET. Сохраняем изменения, запускаем программу. Из интерфейса пропала иконка покупки, при записи ролика никаких предупреждений не появляется, надпись на готовое видео не наносится. Таким образом можно считать, что цель достигнута.

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

Комментарии

Отзывы посетителей сайта о статье
ManHunter (24.10.2019 в 21:32):
pawel97, никак. Поэтому я пользуюсь связкой HIEW + IDA, в одной ищу строки, а в другой уже смотрю всю движуху. Хоть мне уже неоднократно высказывали, что HIEW устарела, но пока IDA не научится нормально пережевывать юникод, я буду работать именно с HIEW. То есть всегда :)
pawel97 (24.10.2019 в 21:02):
Вопрос не совсем по исследованию этой проги, но близко...
У Ida из версии в версию кочует одна болезнь.
Допустим юникодная строка "Register": 5200650067006900730074006500720000
Как научить ida воспринимать это именно как юникодную строку, а не ссылку на адрес 650052? Причём автоматически, не помечать же руками все много тыщ строк как строки...
Не приходило разрабам в голову, что ссылка из сегмента данных на середину процедуры - это странно? Может плагин/скрипт/опция есть? Сам не нашёл...
ManHunter (22.10.2019 в 10:47):
Это дело на любителя. Мне, например, очень нравится HyperCam, пользуюсь ей уже фиг знает сколько лет.
Василий (21.10.2019 в 18:55):
После OBS Studio подобные программы больше не интересуют, только если для тренировки)))

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

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

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