Blog. Just Blog

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

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

Программа Sound Booster предназначена для усиления до 5 раз уровня звука в любом приложении. Это очень удобно, особенно когда смотришь на ноутбуках фильмы с недостаточным уровнем громкости, ну или что-то в этом роде. Этакий прокси-сервер для звукового потока.

Скачиваем дистрибутив, устанавливаем, запускаем, смотрим, за что можно зацепиться при исследовании. В окне "О программе" находится характерная строчка "Trial Version":

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

Поищем ее в файле. Эта строчка найдется в секции ресурсов с индексом 137 в десятичной или 89h в шестнадцатеричной системе счисления. Посмотрим в дизассемблере, где эта строчка загружается и используется.
  1. ...
  2. .text:00403EEE                 call    eax
  3. .text:00403EF0                 lea     edi, [eax+10h]
  4. .text:00403EF3                 mov     [esp+24h+var_10], edi
  5. ; Загрузить строку из ресурсов
  6. .text:00403EF7                 push    89h             ; unsigned int
  7. .text:00403EFC                 mov     byte ptr [esp+28h+var_4], 1
  8. .text:00403F01                 call    ?AfxFindStringResourceHandle
  9. .text:00403F06                 test    eax, eax
  10. .text:00403F08                 jz      short loc_403F1D
  11. .text:00403F0A                 push    89h             ; int
  12. .text:00403F0F                 push    eax             ; hModule
  13. .text:00403F10                 lea     ecx, [esp+2Ch+var_10]
  14. .text:00403F14                 call    sub_401C60
  15. .text:00403F19                 mov     edi, [esp+24h+var_10]
  16. ...
Чуть выше по тексту есть вот такой код с красноречивыми названиями вызываемых функций:
  1. .text:00403E42                 push    esi
  2. .text:00403E43                 push    edi
  3. .text:00403E44                 mov     eax, dword_4DD520
  4. .text:00403E49                 xor     eax, esp
  5. .text:00403E4B                 push    eax
  6. .text:00403E4C                 lea     eax, [esp+24h+var_C]
  7. .text:00403E50                 mov     large fs:0, eax
  8. .text:00403E56                 mov     esi, ecx
  9. ; Активировано?
  10. .text:00403E58                 push    offset a20986331705021
  11. ; "20986331705021ca58edc424.96250074"
  12. .text:00403E5D                 call    ds:IsActivated
  13. .text:00403E63                 add     esp, 4
  14. ; Функция должна вернуть EAX=0
  15. .text:00403E66                 test    eax, eax
  16. ; Если это так, то устанавливается флаг в регистре BL
  17. .text:00403E68                 setnz   bl
  18. .text:00403E6B                 xor     eax, eax
  19. .text:00403E6D                 test    bl, bl
  20. .text:00403E6F                 setnz   al
  21. .text:00403E72                 lea     eax, ds:83h[eax*8]
  22. .text:00403E79                 mov     [esi+254h], eax
  23. .text:00403E7F                 call    sub_401960
  24. .text:00403E84                 mov     ecx, [esi+20h]
  25. .text:00403E87                 push    ecx             ; hWnd
  26. .text:00403E88                 lea     edi, [eax+4]
  27. .text:00403E8B                 call    ds:GetMenu
  28. .text:00403E91                 push    eax
  29. ; На основании этого флага добавлять в меню пункт регистрации или нет
  30. .text:00403E92                 call    ?FromHandle@CMenu
  31. .text:00403E97                 mov     edx, [edi]
  32. .text:00403E99                 push    eax
  33. .text:00403E9A                 mov     eax, [edx+14h]
  34. .text:00403E9D                 push    esi
  35. .text:00403E9E                 mov     ecx, edi
Как мне кажется, функция с названием IsActivated может отвечать только за активацию. Если есть сомнения, то можете пройти этот участок кода под отладчиком и убедиться в правильности догадки. Но вот где находится эта функция? Какая же все-таки какая хорошая штука дизассемблер! Пара секунд - и мы знаем откуда что импортируется. А именно интересующая нас функция IsActivated находится во внешней библиотеке TurboActivate.dll
  1. .idata:004BA388 ;
  2. .idata:004BA388 ; Imports from TurboActivate.dll
  3. .idata:004BA388 ;
  4. .idata:004BA388                 extrn TrialDaysRemaining:dword
  5. .idata:004BA38C                 extrn Deactivate:dword
  6. .idata:004BA390                 extrn GetFeatureValue:dword
  7. .idata:004BA394                 extrn UseTrial:dword
  8. .idata:004BA398                 extrn IsActivated:dword
Закрываем в дизассемблере основной исполняемый файл, вместо него открываем файл TurboActivate.dll и находим функцию IsActivated
  1. .text:10010ADC                 public IsActivated
  2. .text:10010ADC IsActivated     proc near
  3. .text:10010ADC
  4. .text:10010ADC var_68          = byte ptr -68h
  5. .text:10010ADC var_64          = dword ptr -64h
  6. .text:10010ADC var_60          = byte ptr -60h
  7. .text:10010ADC var_4           = dword ptr -4
  8. .text:10010ADC arg_0           = dword ptr  8
  9. .text:10010ADC
  10. .text:10010ADC                 push    5Ch
  11. .text:10010ADE                 mov     eax, offset loc_10078C01
  12. .text:10010AE3                 call    __EH_prolog3_catch_GS
  13. .text:10010AE8                 mov     esi, dword_100A1840
  14. .text:10010AEE                 test    esi, esi
  15. .text:10010AF0                 jnz     short loc_10010B09
  16. .text:10010AF2                 call    sub_100118BF
  17. ...
Программа, как вы уже могли прочитать в ее описании на офсайте, мало того, что привязывается к параметрам железа компа, так еще и в обязательном порядке требует он-лайн активацию. Так что ни секунды не будем тратить на поиск всяких алгоритмов генерации, а сразу же пропатчим эту функцию, чтобы она всегда возвращала EAX = 0. Для этого в начало функции записываем пару команд XOR EAX,EAX и RET. Теперь, по идее, при любом раскладе программа должна чувствовать себя активированной. Проверим:

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

Сообщение о триальном режиме пропало. Из меню в трее пропал пункт о регистрации. Программа не "щелкает" каждые три минуты при усилении звука. Значит наша цель достигнута! И, как мне кажется, одной такой пропатченной библиотеки должно хватить и на все будущие версии программы. Можно даже написать свою dll с теми же экспортируемыми функциями, но сразу же возвращающую нужные значения.

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

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

Комментарии

Отзывы посетителей сайта о статье
ManHunter (05.12.2015 в 08:23):
Я ничего никуда не высылаю. И любые ваши проблемы - это ВАШИ проблемы, а не мои.
User3 (05.12.2015 в 00:17):
ManHunter, можешь кинуть и мне уже исправленный TurboActivate.dll?? Дизассемблер я не нашел, та и пользоваться трансляторами не умею) Буду очень благодарен за помощь. Почта Yurec@LinkinPark.ru
Lieder (08.04.2015 в 14:34):
Скиньте pls исправленный TurboActivate.dll на lieder@bk.ru
ManHunter (30.07.2014 в 14:08):
Ситуацию не отслеживаю, не знаю. Может кто и ломал. Я ей все равно не пользуюсь.
denis7656 (30.07.2014 в 14:03):
ManHunter, а че последнюю версию еще никто не крякнул ?
Она более стабильная. а крека нигде нету.
Rice (05.05.2014 в 00:02):
Для kukish-mukish. Я мониторю громкость приложений стандартным "Микшером громкости", c:\Windows\System32\SndVol.exe.
kukish-mukish (25.03.2014 в 02:28):
Кто-нибудь знает программу для защиты слуха и убавления внезапно усилившейся громкости? К примеру, смотришь тихий фильм в наушниках, вроде негромко, а тут бабах спецэффект и оглох. Или разговариваешь по скайпу на полной громкости, а тут внезапно другая софтина как заорет со всей дури и оглох.
user (27.09.2013 в 17:35):
К сожалению, прога оказалась негодной - при просмотре видео онлайн подвешивает Flash-Player наглухо.
user (25.08.2013 в 16:45):
Согласен с sim31,
с уточнением, что эта программа не "усиливает" звук,а "нормирует" его (просто более точный термин).
Причём нормирует туповато, без динамической подстройки уровня нормирования, как это умеет делать упомянутый плагин к Winamp (называется AudioStocker).
То-есть, если у меня уже 100% отнормированная запись, то увеличения громкости от этого бустера не происходит (просто некуда уже), но сильно обрезаются пики и, как следствие, сильные периодические шумы. Просто нужно вручную регулировать уровень нормирования.
Впрочем, полезная штука, именно для просмотра фильмов, когда можно пренебречь качеством звука.
sim31 (18.07.2013 в 14:01):
Сильно усиленный звук начинает хрипеть, так как уходит в насыщение, зашкаливает 16 бит цифровой канал. Тоже использую Media Player Classic, но усиление не на максимум, в 1.5-2 раза. С алгоритмом усиления непонятно, хотелось бы усиления слабых звуков, но не трогать громкие звуки, для winamp был такой плагин.
ManHunter (01.07.2013 в 10:59):
Не все же пользуются MPC, да и рипы не всегда идеальные, особенно старые. Опять же, на одном только MPC звуковые программы на компе не заканчиваются, и не в каждой звучащей софтине есть свой встроенный бустер. Так что прога имеет место быть.
semenov (01.07.2013 в 05:40):
У Media Player Classic есть свой бустер, но сейчас рипы все нормальные попадаются, не помню когда включал. ИМХО софт сомнительной нужности

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

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

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