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


Скриншот программы RAM Saver Pro

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

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


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

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

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


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

Никаких надписей в окне нет, так как программа мультиязычная и накладывает строки в диалоговых окнах в зависимости от выбранного языка. Но по расположению элементов триальное окно опознается без проблем. Раньше нам обычно попадались только числовые индексы в описании ресурсов, а тут текстовый индекс. Поищем его в дизассемблированном исполняемом файле, но уже как строку "DLGG".
...
seg000:004048F3                 push    0               ; lpTimerFunc
seg000:004048F5                 push    3E8h            ; uElapse
seg000:004048FA                 push    esi             ; nIDEvent
seg000:004048FB                 push    eax             ; hWnd
seg000:004048FC                 call    ds:SetTimer
seg000:00404902                 call    sub_404ED0
seg000:00404907                 call    sub_4066B0
; Вызывается какая-то функция проверки
seg000:0040490C                 call    sub_406810
seg000:00404911                 test    eax, eax
seg000:00404913                 jnz     short loc_40495C
; Если она вернула EAX=0, то программа незарегистрирована и надо вывести
; триальное окно
seg000:00404915                 mov     ecx, ds:hwnd
seg000:0040491B                 mov     edx, ds:hInst
seg000:00404921                 push    eax             ; dwInitParam
seg000:00404922                 push    offset sub_405120 ; lpDialogFunc
seg000:00404927                 push    ecx             ; hWndParent
seg000:00404928                 push    offset aDlgg    ; "DLGG"
seg000:0040492D                 push    edx             ; hInstance
seg000:0040492E                 call    ds:DialogBoxParamW
seg000:00404934                 test    eax, eax
seg000:00404936                 jz      short loc_404954
seg000:00404938                 mov     eax, ds:hwnd
seg000:0040493D                 push    esi             ; uIDEvent
seg000:0040493E                 mov     esi, ds:KillTimer
seg000:00404944                 push    eax             ; hWnd
seg000:00404945                 call    esi ; KillTimer
seg000:00404947                 mov     ecx, ds:hwnd
seg000:0040494D                 push    2               ; uIDEvent
seg000:0040494F                 push    ecx             ; hWnd
seg000:00404950                 call    esi ; KillTimer
seg000:00404952                 jmp     short loc_40497E
seg000:00404954 ; -----------------------------------------------------
seg000:00404954 loc_404954:
; Установить флаг, что программа работает в зарегистрированном режиме
seg000:00404954                 mov     ds:dword_41CB00, esi
seg000:0040495A                 jmp     short loc_40497E
seg000:0040495C ; -----------------------------------------------------
seg000:0040495C loc_40495C:
seg000:0040495C                 mov     ds:dword_41CB00, esi
seg000:00404962                 push    offset aRvsmr   ; "rvsmr"
seg000:00404967                 mov     esi, offset String ; "0"
seg000:0040496C                 call    sub_401CD0
seg000:00404971                 add     esp, 4
seg000:00404974                 mov     ds:uFlags, 1
seg000:0040497E loc_40497E:
seg000:0040497E                 push    offset FileName ; lpFileName
seg000:00404983                 push    0               ; nDefault
seg000:00404985                 push    offset aRamstart ; "RamStart"
seg000:0040498A                 push    offset aOptions ; "OPTIONS"
seg000:0040498F                 call    ebx ; GetPrivateProfileIntW
...

По адресу 0040490C вызывается какая-то функция, на основании результатов которой и принимается решение о выводе триального окна или переводе программы в полноценный режим работы. Классический патч функции по адресу 00406810 командами MOV EAX,1 и RET навсегда переводит программу в полноценный режим работы.


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

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

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


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

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


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

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


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

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


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

Не забывайте, что все заменяемые строчки должны быть в формате ASCIIZ. Ну вот, теперь точно все готово, монитор стал самостоятельной программой, которая работает без RAM Saver Pro и может запускаться даже с флешки. Монитор памяти отвязывается точно так же.
Добавлено: 14 Сентября 2013 09:47:13 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...