コード例 #1
0
        public byte[] GenerateShellcode(byte[] payload, DonutRequest request, Build.Architecture arch)
        {
            // donut api requires files
            var rand           = new Random();
            var tmpFilename    = rand.NextString(16);
            var tmpPayloadFile = Path.Combine(m_TempPath, tmpFilename + ".dll");
            var tmpDonutFile   = Path.Combine(m_TempPath, tmpFilename + ".donut");

            WriteToFile(payload, tmpPayloadFile);

            var config = new DonutLibrary.DonutConfig
            {
                arch      = (int)(arch == Build.Architecture.X64 ? DonutLibrary.Architecture.X64 : DonutLibrary.Architecture.X86),
                mod_type  = (int)(DonutLibrary.ModuleType.DLL),
                format    = (int)request.format,
                compress  = (int)request.compress,
                entropy   = (int)request.entropy,
                inst_type = (int)DonutLibrary.InstanceType.PIC,
                input     = tmpPayloadFile,
                output    = tmpDonutFile,
                bypass    = (int)request.bypass,
                inst_len  = 0
            };

            try
            {
                DonutLibrary.GenerateShellcode(config);
                return(File.ReadAllBytes(tmpDonutFile));
            }
            finally
            {
                CleanupFile(tmpPayloadFile);
                CleanupFile(tmpDonutFile);
            }
        }
コード例 #2
0
ファイル: GatewayController.cs プロジェクト: wisdark/C3
        public IActionResult GetGatewayExeArchitecture(Build.Architecture architecture, string name, [FromServices] ICustomizer customizer, [FromServices] GatewaysSyncService gss)
        {
            using (var ms = new MemoryStream())
            {
                var rand          = new Random();
                var agentId       = new HexId(rand.NextU64()).ToString();
                var nameOrAgentId = name ?? agentId;
                using (var zipArchive = new ZipArchive(ms, ZipArchiveMode.Create))
                {
                    var gatewayEntry = zipArchive.CreateEntry($"Gateway{architecture}_{nameOrAgentId}.exe");
                    using (var bw = new BinaryWriter(gatewayEntry.Open()))
                    {
                        bw.Write(customizer.GetGateway(architecture));
                    }

                    var configEntry = zipArchive.CreateEntry("GatewayConfiguration.json");
                    var config      = new JObject()
                    {
                        ["BuildId"]         = new HexId(rand.NextU16()).ToString(),
                        ["AgentId"]         = agentId,
                        ["Name"]            = nameOrAgentId,
                        ["API Bridge IP"]   = gss.conf.apiBridge.ipAddress.ToString(),
                        ["API Bridge port"] = gss.conf.apiBridge.port,
                    };
                    using (var w = new StreamWriter(configEntry.Open()))
                    {
                        w.Write(config.ToString());
                    }
                }
                return(File(ms.ToArray(), "application/zip", $"Gateway_{nameOrAgentId}.zip"));
            }
        }
コード例 #3
0
        private static string GetBinaryDescription(Build.Architecture arch, bool debug = false)
        {
            var config = debug ? "d" : "r";
            var ar     = arch == Build.Architecture.X64 ? "64" : "86";

            return($"{config}{ar}");
        }
コード例 #4
0
        private string GetBinaryDescription(Build.Architecture arch)
        {
            string config;

            if (this.UseDebugBinaries)
            {
                config = "d";
            }
            else if (this.UseRWDIBinaries)
            {
                config = "rwdi";
            }
            else
            {
                config = "r";
            }
            var ar = arch == Build.Architecture.X64 ? "64" : "86";

            return($"{config}{ar}");
        }
コード例 #5
0
        public byte[] GetGateway(Build.Architecture arch)
        {
            var c3FileName = Path.Combine(PayloadTemplateDir, GetGatewayFileName(arch));

            return(File.ReadAllBytes(c3FileName));
        }
コード例 #6
0
 private string GetGatewayFileName(Build.Architecture arch) =>
 String.Format(gatewayFile, GetBinaryDescription(arch));
コード例 #7
0
 private string GetRelayFileName(Build.BinaryType binaryType, Build.Architecture arch) =>
 String.Format(payloadTemplateFiles[binaryType], GetBinaryDescription(arch));
コード例 #8
0
 public NewBuild(RelayBuild relayBuild)
 {
     BuildId = relayBuild.BuildId;
     Command = relayBuild.StartupCommands[0].ToObject <Command>().Data;
     Arch    = relayBuild.Arch;
 }
コード例 #9
0
 private static string GetGatewayFileName(Build.Architecture arch, bool debug = false) =>
 String.Format(gatewayFile, GetBinaryDescription(arch, debug));
コード例 #10
0
 private static string GetRelayFileName(Build.BinaryType binaryType, Build.Architecture arch, bool debug = false) =>
 String.Format(payloadTemplateFiles[binaryType], GetBinaryDescription(arch, debug));