
Скриншот программы 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 и может запускаться даже с флешки. Монитор памяти отвязывается точно так же.