Пример #1
0
        private static void WriteStub(CryptCommand command)
        {
            var asm     = Assembly.GetEntryAssembly();
            var asmName = asm.GetName().Name;


            //Bit of ugly logic to resolve the project files
            var resourceStream = asm.GetManifestResourceNames();

            for (int i = 0; i < resourceStream.Length; i++)
            {
                var resourceName = resourceStream[i];
                var resource     = Assembly.GetEntryAssembly().GetManifestResourceStream(resourceName);
                if (resourceStream[i].StartsWith(asmName + "." + asmName))
                {
                    resourceStream[i] = resourceName.Replace(asmName + "." + asmName, asmName);
                }
                else
                {
                    resourceStream[i] = resourceName.Replace(asmName + ".", string.Empty);
                }

                var resourceBytes = ReadFully(resource);
                var filePath      = Path.Combine(command.SrcStubOutput, resourceStream[i]);
                File.WriteAllBytes(filePath, resourceBytes);
            }
        }
Пример #2
0
        public static void WriteInputFilesToStub(CryptCommand command)
        {
            var seed            = Guid.NewGuid().ToString();
            var projectFilePath = Path.Combine(command.SrcStubOutput, ProjectFileName);
            var stubSrcFilePath = Path.Combine(command.SrcStubOutput, StubFileName);
            var csProjLines     = File.ReadAllLines(projectFilePath).ToList();

            csProjLines[csProjLines.Count - 1] = "";
            string stubSourceText    = File.ReadAllText(stubSrcFilePath);
            string inFilesStubString = "";

            stubSourceText = stubSourceText.Replace(DecryptionGuidVar, "\"" + seed + "\"");

            foreach (var inFile in command.InputFiles)
            {
                var cipher           = new IsaacRandom(seed);
                var extension        = Path.GetExtension(inFile);
                var outputFileName   = command.RandomiseOutputFileNames ? Guid.NewGuid().ToString() + extension : Path.GetFileName(inFile);
                var encryptionOutput = Path.Combine(command.SrcStubOutput, outputFileName);

                byte[] inputFile = File.ReadAllBytes(inFile);

                for (int i = 0; i < inputFile.Length; i++)
                {
                    inputFile[i] += cipher.NextByte();
                }
                File.WriteAllBytes(encryptionOutput, inputFile);
                csProjLines.Add(string.Format(ResourceText, outputFileName));

                inFilesStubString += "\"" + outputFileName + "\"";
                if (!command.InputFiles.Last().Equals(inFile))
                {
                    inFilesStubString += ", ";
                }
            }

            stubSourceText = stubSourceText.Replace(ResourceNameVar, inFilesStubString);
            stubSourceText = stubSourceText.Replace(SecondsDelayVar, command.DelayExecution.ToString());
            csProjLines.Add(ProjectEndText);

            File.WriteAllText(stubSrcFilePath, stubSourceText);
            File.WriteAllText(projectFilePath, string.Join('\n', csProjLines));
        }
Пример #3
0
 public static void Publish(CryptCommand command)
 {
     using Process p              = new Process();
     p.StartInfo.FileName         = "dotnet.exe";
     p.StartInfo.WorkingDirectory = command.SrcStubOutput;
     p.StartInfo.Arguments        = "publish -r " + command.Runtime + " -c " + command.PublishConfiguration;
     p.Start();
     p.WaitForExit();
     if (p.ExitCode == 0)
     {
         var outputExe =
             Path.Combine(command.SrcStubOutput, "bin", command.PublishConfiguration, "netcoreapp3.0", command.Runtime, "publish", "MCrypt.Stub.Exe");
         var outputPath = Path.Combine(command.OutputDir, command.OutputFileName);
         Console.WriteLine("Copying files to " + outputPath);
         File.Move(outputExe, outputPath);
     }
     else
     {
         Console.WriteLine("Error publishing application");
     }
 }