Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #66, МАЙ 2006 г.

подопытные головоломки

DEEONI$ (DEEONIS@GMAIL.COM)

Спецвыпуск: Хакер, номер #066, стр. 066-050-3


Присмотримся к этому файлу поближе. Содержание не располагает ни к какому доверию, к тому же дата создания и модификации не соответствует действительности. Для того чтобы окончательно удостовериться в его виновности, запустим, а потом выключим игру еще раз и посмотрим, что произошло с ним. Как и предполагалось, дата создания/модификации изменилась, причем вновь неправильно. Если приглядеться повнимательнее, то удастся заметить, что и содержание файла не сохранило первоначальный вид. Теперь точно известно, что еще одним подозреваемым является DB365884.TMP.

Теперь проверим, насколько точно были найдены все метки, оставленные игрушкой: удалим три вышеперечисленные записи в реестре и файл DB365884.TMP, запустим игру и… О чудо! Время опять сбросилось до 60-ти минут. Некоторые особо придирчивые спросят: «А что если отведенный час истечет во время игры?» Все будет нормально — из игры тебя не выкинут.

Хорошо, конечно, но как-то не очень хочется каждый раз править реестр и удалять файл из темповой директории. Вот и автоматизируем процесс — напишем специальный загрузчик.

[алгоритм loader’а] будет очень простым, но я все-таки распишу его довольно подробно:

1 ОТКРЫТЬ КЛЮЧ HKEY_LOCAL_MACHINE\SOFTWARE\LICENSES И УДАЛИТЬ ДВА ПАРАМЕТРА, НУЖНЫЕ НАМ;

2 ЗАКРЫТЬ КЛЮЧ HKEY_LOCAL_MACHINE\SOFTWARE\LICENSES;

3 ОТКРЫТЬ КЛЮЧ HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES\CLSID\{942D82A5-DA03-640B-5E19-3CBD62700780} И УДАЛИТЬ НУЖНЫЙ ПАРАМЕТР;

4 ЗАКРЫТЬ КЛЮЧ HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES\CLSID\{942D82A5-DA03-640B-5E19-3CBD62700780};

5 ПОЛУЧИТЬ АДРЕС ВРЕМЕННОЙ ДИРЕКТОРИИ;

6 УДАЛИТЬ ФАЙЛ DB365884.TMP;

7 ЗАПУСТИТЬ LAUNCH.EXE ИЗ КАТАЛОГА, КУДА УСТАНОВЛЕНА ИГРА.

Замечу, что в третьем пункте списка значение {942D82A5-DA03-640B-5E19-3CBD62700780} относится только к данной игрушке — другие же имеют собственные GUID’ы. То же самое относится к имени файла на шестом шаге.

Будем реализовывать Loader на WinAPI-функциях, чтобы сделать код более независимым от языка программирования. Эти функции будут вызваны при помощи C++.

Пойдем по порядку. Для открытия некоторого ключа реестра понадобится функция RegOpenKey. Вот ее прототип.

LONG RegOpenKey(HKEY hKey, LPCTSTR lpSubKey, PHKEY phkResult);

Параметр hKey — это значение базовой ветки реестра, где расположен нужный нам ключ. Для начала можно указать, например, HKEY_CURRENT_USER или HKEY_LOCAL_MACHINE. lpSubKey — указатель на нуль-терминальную строку, которая содержит имя открываемого ключа в ветке.

phkResult — это адрес хендла открытого ключа. Функция запишет туда какое-то значение. Если вызов этой API завершится удачно, то вернется NULL, в противном случае — любое другое ненулевое значение.

Следующая нужная нам функция —

LONG RegDeleteValue(HKEY hKey, LPCTSTR lpValueName);

Здесь hKey — опять же хэндл ключа, либо значения по умолчанию (HKEY_CURRENT_USER и т.д.), либо хэндл, который RegOpenKey записала по адресу phkResult.

lpValueName — указатель на строку, содержащую имя параметра, который должен быть удален. Если функция выполнилась успешно, то возвращается значение ERROR_SUCCESS. В противном случае — любое другое ненулевое значение.

Назад на стр. 066-050-2  Содержание  Вперед на стр. 066-050-4