Исследование защиты программы RAM Saver Pro
Скриншот программы RAM Saver Pro
Программа RAM Saver Pro от компании Godlike Developers предназначена для ручной или автоматической оптимизации оперативной памяти компьютера. Оптимизация достигается за счет выгрузки из памяти неиспользуемых библиотек, дефрагментации памяти и очистки "утекшей" памяти других приложений. Так это или нет, действительно ли программа дает хоть какой-то прирост производительности - я не знаю. Да и вообще, есть у меня большие сомнения на счет всех подобных программ.
Скачиваем дистрибутив, распаковываем, устанавливаем, запускаем. Первым делом программа радует нас наг-скрином с количеством оставшихся триальных дней и полем ввода серийного номера.
Наг-скрин при старте программы
Вариант с подбором серийного номера смотрится привлекательнее, но конкретно в этом случае мой единственный выбор - патч. Я не первый год знаком с программами этого разработчика, некоторыми даже пользуюсь постоянно, поэтому знаю, о чем я говорю. "Противодействие брони и снаряда" продолжается на протяжении всех этих лет. Различные команды с переменным успехом изготавливают кейгены для всех продуктов Godlike Developers, некоторые даже работают, программа принимает серийные номера, благодарит за регистрацию, а после перезапуска снова переходит в триальный режим. Кроме этого, даже с якобы "правильными" серийниками ситуация тоже не такая простая, форумы в интернете пестрят десятками сообщений пользователей, что при различных условиях регистрация все равно слетает. Так что патч и только патч, каких-то иных решений для программ Godlike Developers я не приемлю в принципе.
Беглый осмотр исполняемых файлов показывает, что они накрыты ASProtect. Хех, раньше это был ASPack, затем было много версий совсем без упаковщика, а тут вот оно чо. Ну ладно, не впервой. Лично я распаковываю эту версию под отладчиком с использованием скрипта от VolX, вы можете воспользоваться каким-нибудь автоматическим инструментом. Так или иначе, мы получили распакованный исполняемый файл ramsaverpro.exe, отправляем его в дизассемблер, а сами пока посмотрим его в редакторе ресурсов на предмет наг-скрина. Далеко ходить не пришлось, вот он.
Описание окна в ресурсах
Никаких надписей в окне нет, так как программа мультиязычная и накладывает строки в диалоговых окнах в зависимости от выбранного языка. Но по расположению элементов триальное окно опознается без проблем. Раньше нам обычно попадались только числовые индексы в описании ресурсов, а тут текстовый индекс. Поищем его в дизассемблированном исполняемом файле, но уже как строку "DLGG".
Code (Assembler) : Убрать нумерацию
- ...
- 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
- ...
Пункт регистрации неактивен
Пропало триальное окно при запуске программы, а пункт регистрации в контекстном меню стал неактивным. Перевод системной даты на пару месяцев вперед также никак не повлиял на работоспособность программы. Значит главная цель успешно достигнута.
Но это еще не все. В комплекте RAM Saver Pro идут две прикольных программки moncpu.exe и monram.exe, отображающие, соответственно, загрузку процессора и загрузку памяти в реальном времени. Они ничем не защищены, но работают только из папки с установленной RAM Saver Pro. Если их перенести в отдельную папку и попробовать запустить, то они молча закрываются. Рассмотрим процесс отвязки на примере монитора загрузки процессора moncpu. Файл небольшой, посмотрим визуально что-нибудь интересное.
Строки, относящиеся к родительской программе
Можно предположить, что программа при старте проверяет наличие файла ramsaverpro.exe, раз уж он присутствует в файле. Заменим его на строчку moncpu.exe.
Заменяем строку названия программы в формате ASCIIZ
Никаких проблем, монитор прекрасно запустился. Естественно, что переименовывать его теперь нельзя, не внося соответствующих изменений в сам файл.
Монитор работает самостоятельно
После завершения работы монитор создает в своей папке файл ramsaverpro.ini, в котором записывает координаты своего окна. Понятно дело, что в изначальном варианте это было сделано для совместимости с конфигом основной программы, но мы же теперь работаем самостоятельно. Поэтому заменим название файла конфигурации на свое:
Заменяем строку названия файла конфига в формате ASCIIZ
Не забывайте, что все заменяемые строчки должны быть в формате ASCIIZ. Ну вот, теперь точно все готово, монитор стал самостоятельной программой, которая работает без RAM Saver Pro и может запускаться даже с флешки. Монитор памяти отвязывается точно так же.
Просмотров: 7838 | Комментариев: 8
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
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 выполняющих поиск файлов.
Так, как каталог уровнем выше - ".." и текущий каталог - "." всегда в наличии, в независимости от размещения файла, то эти два объекта всегда присутствуют в наличии функции API выполняющих поиск файлов.
Ret
(28.12.2012 в 17:26):
Отличная статья, спасибо!
ManHunter
(24.12.2012 в 07:45):
Ну если судить по тоннам наполовину работающих кейгенов и десяткам таких же наполовину работающих серийников, то я бы не сказал, что внимания на защиту не уделяется. Да и я в этой статье больше хотел сделать упор на отвязку мониторов, чем на банальный патч основной программы.
Ivann
(24.12.2012 в 07:26):
У Godlike Developers всегда неприхотливая защита. Видимо "Богам" не присуще обращать большого внимания на защиту.
Хантер, спасибо заинтересную статью :-)
Хантер, спасибо заинтересную статью :-)
Добавить комментарий
Заполните форму для добавления комментария
Хотелось бы найти такую программку, которая сама и на самом деле оптимизировала память, но я разочаровался в таком софте. Разве что через AceHelper вручную осаживать заевшееся приложение. Сброс кило конечно не большой, но от критических ситуаций может немного спасти.