Blog. Just Blog

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

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

Программа RAM Saver Pro от компании Godlike Developers предназначена для ручной или автоматической оптимизации оперативной памяти компьютера. Оптимизация достигается за счет выгрузки из памяти неиспользуемых библиотек, дефрагментации памяти и очистки "утекшей" памяти других приложений. Так это или нет, действительно ли программа дает хоть какой-то прирост производительности - я не знаю. Да и вообще, есть у меня большие сомнения на счет всех подобных программ.

Скачиваем дистрибутив, распаковываем, устанавливаем, запускаем. Первым делом программа радует нас наг-скрином с количеством оставшихся триальных дней и полем ввода серийного номера.

Наг-скрин при старте программы
Наг-скрин при старте программы

Вариант с подбором серийного номера смотрится привлекательнее, но конкретно в этом случае мой единственный выбор - патч. Я не первый год знаком с программами этого разработчика, некоторыми даже пользуюсь постоянно, поэтому знаю, о чем я говорю. "Противодействие брони и снаряда" продолжается на протяжении всех этих лет. Различные команды с переменным успехом изготавливают кейгены для всех продуктов Godlike Developers, некоторые даже работают, программа принимает серийные номера, благодарит за регистрацию, а после перезапуска снова переходит в триальный режим. Кроме этого, даже с якобы "правильными" серийниками ситуация тоже не такая простая, форумы в интернете пестрят десятками сообщений пользователей, что при различных условиях регистрация все равно слетает. Так что патч и только патч, каких-то иных решений для программ Godlike Developers я не приемлю в принципе.

Беглый осмотр исполняемых файлов показывает, что они накрыты ASProtect. Хех, раньше это был ASPack, затем было много версий совсем без упаковщика, а тут вот оно чо. Ну ладно, не впервой. Лично я распаковываю эту версию под отладчиком с использованием скрипта от VolX, вы можете воспользоваться каким-нибудь автоматическим инструментом. Так или иначе, мы получили распакованный исполняемый файл ramsaverpro.exe, отправляем его в дизассемблер, а сами пока посмотрим его в редакторе ресурсов на предмет наг-скрина. Далеко ходить не пришлось, вот он.

Описание окна в ресурсах
Описание окна в ресурсах

Никаких надписей в окне нет, так как программа мультиязычная и накладывает строки в диалоговых окнах в зависимости от выбранного языка. Но по расположению элементов триальное окно опознается без проблем. Раньше нам обычно попадались только числовые индексы в описании ресурсов, а тут текстовый индекс. Поищем его в дизассемблированном исполняемом файле, но уже как строку "DLGG".
  1. ...
  2. seg000:004048F3                 push    0               ; lpTimerFunc
  3. seg000:004048F5                 push    3E8h            ; uElapse
  4. seg000:004048FA                 push    esi             ; nIDEvent
  5. seg000:004048FB                 push    eax             ; hWnd
  6. seg000:004048FC                 call    ds:SetTimer
  7. seg000:00404902                 call    sub_404ED0
  8. seg000:00404907                 call    sub_4066B0
  9. ; Вызывается какая-то функция проверки
  10. seg000:0040490C                 call    sub_406810
  11. seg000:00404911                 test    eax, eax
  12. seg000:00404913                 jnz     short loc_40495C
  13. ; Если она вернула EAX=0, то программа незарегистрирована и надо вывести
  14. ; триальное окно
  15. seg000:00404915                 mov     ecx, ds:hwnd
  16. seg000:0040491B                 mov     edx, ds:hInst
  17. seg000:00404921                 push    eax             ; dwInitParam
  18. seg000:00404922                 push    offset sub_405120 ; lpDialogFunc
  19. seg000:00404927                 push    ecx             ; hWndParent
  20. seg000:00404928                 push    offset aDlgg    ; "DLGG"
  21. seg000:0040492D                 push    edx             ; hInstance
  22. seg000:0040492E                 call    ds:DialogBoxParamW
  23. seg000:00404934                 test    eax, eax
  24. seg000:00404936                 jz      short loc_404954
  25. seg000:00404938                 mov     eax, ds:hwnd
  26. seg000:0040493D                 push    esi             ; uIDEvent
  27. seg000:0040493E                 mov     esi, ds:KillTimer
  28. seg000:00404944                 push    eax             ; hWnd
  29. seg000:00404945                 call    esi ; KillTimer
  30. seg000:00404947                 mov     ecx, ds:hwnd
  31. seg000:0040494D                 push    2               ; uIDEvent
  32. seg000:0040494F                 push    ecx             ; hWnd
  33. seg000:00404950                 call    esi ; KillTimer
  34. seg000:00404952                 jmp     short loc_40497E
  35. seg000:00404954 ; -----------------------------------------------------
  36. seg000:00404954 loc_404954:
  37. ; Установить флаг, что программа работает в зарегистрированном режиме
  38. seg000:00404954                 mov     ds:dword_41CB00, esi
  39. seg000:0040495A                 jmp     short loc_40497E
  40. seg000:0040495C ; -----------------------------------------------------
  41. seg000:0040495C loc_40495C:
  42. seg000:0040495C                 mov     ds:dword_41CB00, esi
  43. seg000:00404962                 push    offset aRvsmr   ; "rvsmr"
  44. seg000:00404967                 mov     esi, offset String ; "0"
  45. seg000:0040496C                 call    sub_401CD0
  46. seg000:00404971                 add     esp, 4
  47. seg000:00404974                 mov     ds:uFlags, 1
  48. seg000:0040497E loc_40497E:
  49. seg000:0040497E                 push    offset FileName ; lpFileName
  50. seg000:00404983                 push    0               ; nDefault
  51. seg000:00404985                 push    offset aRamstart ; "RamStart"
  52. seg000:0040498A                 push    offset aOptions ; "OPTIONS"
  53. seg000:0040498F                 call    ebx ; GetPrivateProfileIntW
  54. ...
По адресу 0040490C вызывается какая-то функция, на основании результатов которой и принимается решение о выводе триального окна или переводе программы в полноценный режим работы. Классический патч функции по адресу 00406810 командами MOV EAX,1 и RET навсегда переводит программу в полноценный режим работы.

Пункт регистрации неактивен
Пункт регистрации неактивен

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

Но это еще не все. В комплекте RAM Saver Pro идут две прикольных программки moncpu.exe и monram.exe, отображающие, соответственно, загрузку процессора и загрузку памяти в реальном времени. Они ничем не защищены, но работают только из папки с установленной RAM Saver Pro. Если их перенести в отдельную папку и попробовать запустить, то они молча закрываются. Рассмотрим процесс отвязки на примере монитора загрузки процессора moncpu. Файл небольшой, посмотрим визуально что-нибудь интересное.

Строки, относящиеся к родительской программе
Строки, относящиеся к родительской программе

Можно предположить, что программа при старте проверяет наличие файла ramsaverpro.exe, раз уж он присутствует в файле. Заменим его на строчку moncpu.exe.

Заменяем строку названия программы в формате ASCIIZ
Заменяем строку названия программы в формате ASCIIZ

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

Монитор работает самостоятельно
Монитор работает самостоятельно

После завершения работы монитор создает в своей папке файл ramsaverpro.ini, в котором записывает координаты своего окна. Понятно дело, что в изначальном варианте это было сделано для совместимости с конфигом основной программы, но мы же теперь работаем самостоятельно. Поэтому заменим название файла конфигурации на свое:

Заменяем строку названия файла конфига в формате ASCIIZ
Заменяем строку названия файла конфига в формате ASCIIZ

Не забывайте, что все заменяемые строчки должны быть в формате ASCIIZ. Ну вот, теперь точно все готово, монитор стал самостоятельной программой, которая работает без RAM Saver Pro и может запускаться даже с флешки. Монитор памяти отвязывается точно так же.

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

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

Комментарии

Отзывы посетителей сайта о статье
Rice (25.07.2013 в 16:12):
Оптимизация памяти вопрос актуальный, особенно с хромом.
Хотелось бы найти такую программку, которая сама и на самом деле оптимизировала память, но я разочаровался в таком софте. Разве что через AceHelper вручную осаживать заевшееся приложение. Сброс кило конечно не большой, но от критических ситуаций может немного спасти.
addhaloka (16.02.2013 в 12:25):
Hat, > а такой код "\." или "\..". Это не катит, но можно всё проще сделать: 0000086Bh 75 > EB. Строку ramsaverpo.exe уже не нужно менять (только ramsaverpo.ini), и moncpu.exe по-всякому обозвать можно. :)
ChVL (12.01.2013 в 04:14):
Скачал с офсайта RAM Saver Pro 13.0. Там всего-то надо поправить 1 (один!) байт по адресу 404913...
ChVL (11.01.2013 в 22:18):
Как всегда, статью читаешь с интересом.
С основной программой этого разработчика уже давненько, правда, была схожая ситуация. Зарегистрировал каким-то серийником и сразу обнаружил, что сие чудо привязывает регистрацию к компу. Поскольку это решительно не устраивало, то, не дожидаясь полётов регистрации, сразу отправил прогу на перевоспитание в отладчик. Помню, был удивлён элементарностью защиты (если можно это назвать таковой). Глянул архивчик: аналогично заглушен блок и ещё подправлены пара байтов.
Hat (31.12.2012 в 17:38):
Можно попробовать указать не строчку "\moncpu.exe" вместо "\ramsaverpro.exe", а такой код "\." или "\.."

Так, как каталог уровнем выше - ".." и текущий каталог - "." всегда в наличии, в независимости от размещения файла, то эти два объекта всегда присутствуют в наличии функции API выполняющих поиск файлов.
Ret (28.12.2012 в 17:26):
Отличная статья, спасибо!
ManHunter (24.12.2012 в 07:45):
Ну если судить по тоннам наполовину работающих кейгенов и десяткам таких же наполовину работающих серийников, то я бы не сказал, что внимания на защиту не уделяется. Да и я в этой статье больше хотел сделать упор на отвязку мониторов, чем на банальный патч основной программы.
Ivann (24.12.2012 в 07:26):
У Godlike Developers всегда неприхотливая защита. Видимо "Богам" не присуще обращать большого внимания на защиту.
Хантер, спасибо заинтересную статью :-)

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

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

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