Программа-невидимка

Николай "GorluM" Андреев

Хакер, номер #075, стр. 075-110-1

(gorlum@real.xakep.ru)

Делаем нашу программу невидимой в системе

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

В процессе работы, а если подумать, то и в процессе простого своего существования программа (троян, система удаленного администрирования, называй, как хочешь - смысл тот же) очень следит в системе. Она создает записи в реестре, весит в списке процессов, лежит в системной директории, в общем, делает все возможное, чтобы пользователь ее обнаружил и сдал в соответствующие инстанции. Стоит только юзеру зайти с помощью regedit.exe в ключ Run в реестре, так он сразу обнаружит автоматически загружаемого зверя. Ты можешь сказать, что кроме Run в форточках есть еще масса мест, где смог бы спрятаться троян, при этом раз за разом загружаясь при старте системы, и ты будешь абсолютно прав, но юзер может обо всех этих местах знать. А если он пользуется специальными утилитами, то даже это от него не потребуется - юзер просто нажмет кнопку и перед ним высветятся все загружаемые вместе с виндой программы. Пара щелчков мышью и все - троян сдох или, что хуже, была отправлен на опыты антивирусникам. А ведь запись в реестре - это лишь один, не самый значительный след, оставленный пребыванием программы.

Что будет, если пользователь захочет заглянуть в system32 и посмотреть последние созданные файлы (или по какому-то другому принципу вычислить программу)? Он же найдет экзешник нашего трояна, после чего жизнь программы на этом компьютере сочтена. Печально, но факт - юзер просто удалит непонятный файл и никто ему не помешает этого сделать (если файл залочен - зайдет в safe mode и оттуда удалит).

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

Как бы все это страшно не звучало, реализуется просто и с помощью уже хорошо известных и тебе и мне технологий, одной из которых является перехват API.

Ведь все списки файлов, записей реестра и прочего получаются с помощью API. Достаточно перехватить возвращаемые функциями Windows данные и вычеркнуть оттуда нашу программу. Идея простая, остается разобраться в реализации.

Перехват - это просто

О перехвате уже не раз писали, и в нашем журнале, и в замечательных книгах, и интернете. Но я все же скажу о нем пару слов. По сути дела, перехват API - это замена некоторой чужой функции в какой-нибудь запущенной программе на свою. Осуществляется это приличного вида кучей способов, но в нашем деле возможно применении только двух из них. Первый способ - непосредственное модифицирование оригинального кода перехватываемой функции. При это в начало нее поверх старого кода вставляется инструкция безусловного перехода (jmp) прямо на нашу функцию обработчик, который, в свою очередь, должен восстановить поврежденный код, запустить старую функцию сам и как-то модифицировать выходные данные. Способ хороший, потому что модифицировать надо только одно место в программе, подверженной перехвату (в отличие от второго способа), но он достаточно сложен в реализации - это раз. Любая примитивная защита, считающая контрольную сумму кода, запалит подобный метод - это два.

Содержание  Вперед на стр. 075-110-2
ttfb: 3.4890174865723 ms