Как я в армии в Warcraft III играл

в 17:59, , рубрики: cmd, truecrypt, warcraft 3, юзабилити, метки: , ,

В данной статье я опишу способ скрытия приложений на компьютере, удобного запуска и быстрого скрытого их завершения на примере игры Warcraft III в Windows XP.

Так сложилось, что, проходя службу в нашей доблестной армии, у меня периодически появлялся доступ к компьютеру. И так сложилось, что, уходя в армию, я забыл выложить свою флешку, которую постоянно ношу с собой в кошельке. На этой флешке было много разного барахла, один миллион папок с названием «учеба» и архив с названием… tada! wc3.rar
Радости моей не было предела, но тут появился вопрос — как проводить вечера за любимой игрой и при этом остаться незамеченным? На все про все, у меня было 2-3 секунды на закрытие игры.

1. Дружба с треем

Первое, что пришло в голову, это, конечно же, научить игру улетать в трей, а не висеть на панели задач. Было перепробовано много софта, и выбор пал на скромную программу «TrayIt!». Она прекрасно справлялась со своей задачей. Но все же, нашлось одно но. Исполняемый (одноименный с программой) файл порождал процесс, который выделялся своим корявым названием в закладке процессов диспетчера задач. Судите сами:

  • alg.exe
  • svchost.exe
  • explorer.exe
  • ...
  • TrayIt!.exe
  • ...
  • ctfmon.exe

Отвратительно, не правда ли? Я изменил название исполняемого файла на нейтральное trayit.exe. Программа дала добро на работу, породила одноименный процесс и теперь в списках процессов все красиво, аккуратно и при беглом просмотре не цепляет глаз.
Примечание: также рекомендую указать в настройках уведомлений трея, чтобы иконка приложения всегда была скрыта за стрелочкой.

2. Всех убил садовник

Свернули игру, теперь надо как-то аккуратно ее закрывать. «Диспетчер задач -> Процессы -> war3.exe -> Завершить процесс» — первое, что приходит в голову, но это долго, не красиво и не всегда есть возможность (и время) так завершить процесс. Я начал поглядывать в сторону командной строки, а именно, в сторону консольной утилиты taskkill.
Для начала создадим какую-нибудь рабочую папку для наших bat-ников. Пусть это будет %WINDIR%Scripts. в ней создаем bat-ник, который будет убивать наш процесс. Назовем его killer.bat и добавим следующее содержимое:

@TASKKILL /F /IM war3.exe

Проверяем – работает. Теперь назначим сочетание горячих клавиш на запуск этого скрипта. Для этого ярлык скрипта кидаем в «С:Documents and SettingsAll UsersГлавное меню» (оно же меню «Пуск»). В свойствах ярлыка вешаем комбинацию горячих клавиш на запуск (у меня стоит «Alt Ctrl Num -»). Переименовываем ярлык в что-нибудь не броское, например «Справочная информация», и меняем иконку ярлыка на подходящую под название.
Как я в армии в Warcraft III играл
Чтобы при запуске скрипта не вылетало черное окно с сообщениями утилиты, в свойствах ярлыка в закладке указываем цвет фона — черный, и цвет текста тоже черный, а в закладке «Ярлык» указываем режим запуска «Свернутое в значок».
Как я в армии в Warcraft III играл
Примечание: ярлыки запускаются горячими клавишами только из меню Пуск.

3. Truecrypt

Чтобы с помощью поиска, нас не обнаружили, закинем игру на шифрованный том truecrypt'а. Создаем том, удаляем из имени расширение *.tc, размещаем его в каком-нибудь неприметном месте и делаем его скрытым и системным командой:

@ATTRIB +S +H C:swap

Отключим отображение тома в проводнике на случай, если мы вдруг забыли демонтировать его. Здесь необходимо договориться, что том будет постоянно монтироваться на один и тот же диск, в моем случае это диск M: (my, мой). С помощью «Tweak UI для Windows» (идет по умолчанию в комплекте в сборке ZverCD) в панели управления в разделе «Дисководы» отключаем отображение диска M, и теперь на наш том можно зайти только через адресную строку «M:».
Как я в армии в Warcraft III играл
Неплохо было бы научить наш скрипт killer.bat не только убивать игру, но и отключать том. Добавляем команду:

@"C:Program FilesTrueCryptTrueCrypt.exe" /dismount M /quit /silence /force
4. Оптимизация запуска

Готово, что еще? Запускать неудобно: открыть truecrypt, ввести пароль, открыть проводник, ввести M:, найти игру, запустить. Согласен, долго и не удобно. Предлагаю такое решение: по определенной комбинации горячих клавиш открывается окошко (своеобразная личная командная строка), введя в которую нужную комбинацию, запускается та или иная программа. Приступим.
Для начала сделаем скрипт wc.bat, который по необходимости монтирует том и запускает игру:

@IF NOT EXIST M: @"C:Program FilesTrueCryptTrueCrypt.exe" /a /volume С:swap /p qwertypassword /letter M /quit /silence
@START M:WC3"Frozen Throne.exe"

Теперь сделаем командную строку. Создаем файл menu.bat. По аналогии с killer.bat создаем ярлык, меняем имя, иконку, вешаем комбинацию клавиш (напр. Alt + Ctrl + Num+), режим запуска оставляем по умолчанию и заливаем следующие строки.
Для отвода глаз, чтобы если кто-то случайно запустит, не понял, что это за чудо-окно:

@ECHO Cannot connect to Microsoft Download Center
@ECHO Do you want to exit? (y/n)

Как я в армии в Warcraft III играл
Отключаем вывод сообщений на экран:

@ECHO OFF

Вводим строку и записываем ее в переменную file:

@SET /P file=""

Проверяем, существует ли файл с названием %file%.bat и, если существует, запускаем его.

@IF EXIST %file%.bat @CALL %file%.bat

Если ввести имя файла, которого не существует, то окно просто закроется. Такая система довольно удобна и гибка тем, что для введения новой команды достаточно создать рядом новый скрипт, назначить ему короткое удобное имя и оно будет исполняемо через menu.bat. Так, например, помимо wc.bat я дописал еще такие bat-ники:
opr.bat

@IF NOT EXIST M: @"C:Program FilesTrueCryptTrueCrypt.exe" /a /volume С:swap /p qwertypassword /letter M /quit /silence
@START M:Operaopera.exe

ut.bat

@IF NOT EXIST M: @"C:Program FilesTrueCryptTrueCrypt.exe" /a /volume С:swap /p qwertypassword /letter M /quit /silence
@START M:uTorrentutorrent.exe

h.bat (аля, home)

@IF NOT EXIST M: @"C:Program FilesTrueCryptTrueCrypt.exe" /a /volume С:swap /p qwertypassword /letter M /quit /silence
@explorer M:

и другие.

5. Обфускация

И вот уже все отлажено, все хорошо, четко, быстро работает, необходимые скрипты написаны. Что еще?
Меня смущал один факт, все это очень легко читается. Все это легко читается даже школьником. Больше того, достаточно, не разбирая код, зайти в папку scripts, запустить любой скрипт, и он непременно выполнит то, что необходимо, и запустит то, что в данный момент лучше не запускать. Это меня смущало и я искал небольшую защиту. Идея была проста — из всего полученного нужно было сварить спагетти-код.
Переименовываем скрипт wc.bat в imagelib.01.dll или что-нибудь подобное, с целью убрать самоисполняемость файла. Удаляем в menu.bat строки:

@SET /P file=""
@IF EXIST %file%.bat @CALL %file%.bat


И вместо них пишем:

@SET /P dll=""
@IF "%dll%"=="wc" @SET dll="imagelib.01"
@IF "%dll%"=="opr" @SET dll="imagelib.02"
...
@IF EXIST %dll%.dll @COPY %dll%.dll %dll%.bat
@IF EXIST %dll%.bat @CALL %dll%.bat
@IF EXIST %dll%.bat @DEL %dll%.bat

Описание происходящего в этой каше. Файлы imagelib.01.dll, imagelib.02.dll являются своеобразными контейнерами кода, который нам необходимо выполнить. Для этого, создается исполняемый дубликат контейнера (т.е. копирование с изменением расширения на .bat), после чего дубликат запускается и удаляется.
Плюсы:
— пока не разберешь этот код, не догадаешься, что библиотеки, лежащие рядом, вовсе не библиотеки, а bat-ники, в которых содержится путь и пароль к тому
— название команды больше не зависит от имени файла
Минусы:
— +20 секунд к созданию новых команд, т.к. требуется копипастить на одну строку кода больше.

6. Использование

Жмем “Alt + Ctrl + Num+”, вводим wc, играем. Почувствовав опасность, сворачиваем игру. Выставляем пальцы на аккорд “Alt + Ctrl + Num-“ и далее действуем по обстановке.

7. Итоги

Подводя итог, мы получили собственную почти opensource командную строку, к которой можем прилепить хоть самолет. Так, одно время, у меня при запуске menu.bat отображались внутри индикатор подключения тома (смонтирован он или нет) и индикатор подключения к интернету. Можно, например, добавить парсинг запятой в последнем символе строки, и, таким образом, можно вводить несколько команд подряд. Создав пару скриптов с netsh, я быстро менял заранее подготовленные шаблоны конфигурации сети. Номер текущего шаблона отображался в окне menu.bat циферкой 1 или 2.
Но это все было, скажем так, веселья ради, свистелки-финтифлюшки и т.д. Навороченный скрипт запускался около 2 секунд, в следствие чего, вооружившись мечом KISS, я это дело быстро порезал.

8. Исходный код

Наконец, после всего вышесказанного исходный код ваших bat-ников должен выглядеть примерно так:
menu.bat

@ECHO Cannot connect to Microsoft Download Center
@ECHO Do you want to exit? (y/n)
@ECHO OFF
@SET /P dll=""
@IF "%dll%"=="wc" @SET dll="imagelib.01"
@IF "%dll%"=="opr" @SET dll="imagelib.02"
@IF "%dll%"=="ut" @SET dll="imagelib.03"
@IF "%dll%"=="h" @SET dll="imagelib.04"
@IF "%dll%"=="gp" @SET dll="imagelib.05"
@IF EXIST %dll%.dll @COPY %dll%.dll %dll%.bat
@IF EXIST %dll%.bat @CALL %dll%.bat
@IF EXIST %dll%.bat @DEL %dll%.bat

killer.bat

@TASKKILL /F /IM opera.exe /IM AIMP3.exe /IM war3.exe /IM PotPlayerMini.exe /IM utorrent.exe
@"C:Program FilesTrueCryptTrueCrypt.exe" /dismount M /quit /silence /force
@"C:Program FilesCCleanerccleaner.exe" /auto

imagelib.01.dll

@IF NOT EXIST M: @"C:Program FilesTrueCryptTrueCrypt.exe" /a /volume C:swap /p qwertypassword /letter M /quit /silence
@START M:WC3"Frozen Throne.exe"

Автор: juneuniversum

Поделиться

* - обязательные к заполнению поля