public static void EncryptFile(Punch punch, string inputFile, string outputFile) { string key = GenerateKey(punch); byte[] keyBytes; keyBytes = Encoding.Unicode.GetBytes(key); Rfc2898DeriveBytes derivedKey = new Rfc2898DeriveBytes(key, keyBytes); RijndaelManaged rijndaelCSP = new RijndaelManaged(); rijndaelCSP.Key = derivedKey.GetBytes(rijndaelCSP.KeySize / 8); rijndaelCSP.IV = derivedKey.GetBytes(rijndaelCSP.BlockSize / 8); ICryptoTransform encryptor = rijndaelCSP.CreateEncryptor(); FileStream inputFileStream = new FileStream(inputFile, FileMode.Open, FileAccess.Read); byte[] inputFileData = new byte[(int)inputFileStream.Length]; inputFileStream.Read(inputFileData, 0, (int)inputFileStream.Length); FileStream outputFileStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write); CryptoStream encryptStream = new CryptoStream(outputFileStream, encryptor, CryptoStreamMode.Write); encryptStream.Write(inputFileData, 0, (int)inputFileStream.Length); encryptStream.FlushFinalBlock(); rijndaelCSP.Clear(); encryptStream.Close(); inputFileStream.Close(); outputFileStream.Close(); }
public static int BuildPunch(Punch punch) { DateTime now = DateTime.Now; string buildDate = String.Format("{0:MMMM dd yyyy} at {0:hh:mm:ss tt}", now); using (StreamWriter buildDateFile = new StreamWriter(Path.Combine(punch.resources_dir, "attackDate.txt"))) { buildDateFile.Write(buildDate); } string dotNetDir = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(); string msbuildPath = Path.Combine(dotNetDir, "msbuild.exe"); if (File.Exists(msbuildPath)) { Process msbuild = new Process(); msbuild.StartInfo.FileName = msbuildPath; msbuild.StartInfo.Arguments = punch.build_args; msbuild.StartInfo.UseShellExecute = false; msbuild.StartInfo.RedirectStandardOutput = true; msbuild.StartInfo.RedirectStandardError = true; Console.WriteLine("Running build with this command: {0} {1}", msbuild.StartInfo.FileName, msbuild.StartInfo.Arguments); msbuild.Start(); string output = msbuild.StandardOutput.ReadToEnd(); Console.WriteLine(output); string err = msbuild.StandardError.ReadToEnd(); Console.WriteLine(err); msbuild.WaitForExit(); int exitCode = msbuild.ExitCode; msbuild.Close(); return exitCode; } return 999; }
public static string GenerateKey(Punch punch) { string keyPath = Path.Combine(punch.modules_dir, "key.txt"); if (!(File.Exists(keyPath))) { string key = RandomString(64); File.WriteAllText(keyPath, key, Encoding.Unicode); } return File.ReadAllText(keyPath, Encoding.Unicode); }
public static void BuildCsproj(List<Module> modules, Punch punch) { punch.ClearCsproj(); List<string> files = new List<string>(); foreach (Module module in modules) { files.Add(CryptoUtils.EncryptString(punch, module.name)); } PSPunchCSProj csproj = new PSPunchCSProj(); csproj.Session = new Dictionary<string, object>(); csproj.Session.Add("files", files); csproj.Initialize(); var generatedCode = csproj.TransformText(); Console.WriteLine("Writing PSPunch.csproj to {0}", punch.csproj_file); File.WriteAllText(punch.csproj_file, generatedCode); }
public static string EncryptString(Punch punch, string text) { string key = GenerateKey(punch); byte[] keyBytes; keyBytes = Encoding.Unicode.GetBytes(key); Rfc2898DeriveBytes derivedKey = new Rfc2898DeriveBytes(key, keyBytes); RijndaelManaged rijndaelCSP = new RijndaelManaged(); rijndaelCSP.Key = derivedKey.GetBytes(rijndaelCSP.KeySize / 8); rijndaelCSP.IV = derivedKey.GetBytes(rijndaelCSP.BlockSize / 8); ICryptoTransform encryptor = rijndaelCSP.CreateEncryptor(); byte[] inputbuffer = Encoding.Unicode.GetBytes(text); byte[] outputBuffer = encryptor.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length); return Convert.ToBase64String(outputBuffer).Replace("/","_"); }