using await Task for Creating a Certificate
This commit is contained in:
parent
4c90f1b85b
commit
5f12c859a6
@ -187,6 +187,7 @@
|
||||
<Compile Include="Handle Packet\Packet.cs" />
|
||||
<Compile Include="Handle Packet\HandleProcessManager.cs" />
|
||||
<Compile Include="Helper\AsyncTask.cs" />
|
||||
<Compile Include="Helper\CreateCertificate.cs" />
|
||||
<Compile Include="Helper\IconInjector.cs" />
|
||||
<Compile Include="Helper\ListViewColumnSorter.cs" />
|
||||
<Compile Include="Helper\ListviewDoubleBuffer.cs" />
|
||||
|
@ -54,7 +54,7 @@
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(149, 39);
|
||||
this.button1.TabIndex = 2;
|
||||
this.button1.Text = "Ok";
|
||||
this.button1.Text = "OK";
|
||||
this.button1.UseVisualStyleBackColor = true;
|
||||
this.button1.Click += new System.EventHandler(this.Button1_Click);
|
||||
//
|
||||
|
@ -1,16 +1,6 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Org.BouncyCastle.Asn1.X509;
|
||||
using Org.BouncyCastle.Crypto;
|
||||
using Org.BouncyCastle.Crypto.Generators;
|
||||
using Org.BouncyCastle.Crypto.Operators;
|
||||
using Org.BouncyCastle.Crypto.Parameters;
|
||||
using Org.BouncyCastle.Crypto.Prng;
|
||||
using Org.BouncyCastle.Math;
|
||||
using Org.BouncyCastle.Security;
|
||||
using Org.BouncyCastle.X509;
|
||||
using Org.BouncyCastle.X509.Extension;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
@ -43,75 +33,7 @@ namespace AsyncRAT_Sharp.Forms
|
||||
}
|
||||
}
|
||||
|
||||
public static X509Certificate2 CreateCertificate(string certName, X509Certificate2 ca, int keyStrength)
|
||||
{
|
||||
// github.com/quasar/QuasarRAT/blob/master/Quasar.Server/Helper/CertificateHelper.cs
|
||||
var caCert = DotNetUtilities.FromX509Certificate(ca);
|
||||
var random = new SecureRandom(new CryptoApiRandomGenerator());
|
||||
var keyPairGen = new RsaKeyPairGenerator();
|
||||
keyPairGen.Init(new KeyGenerationParameters(random, keyStrength));
|
||||
AsymmetricCipherKeyPair keyPair = keyPairGen.GenerateKeyPair();
|
||||
|
||||
var certificateGenerator = new X509V3CertificateGenerator();
|
||||
|
||||
var CN = new X509Name("CN=" + certName);
|
||||
var SN = BigInteger.ProbablePrime(120, random);
|
||||
|
||||
certificateGenerator.SetSerialNumber(SN);
|
||||
certificateGenerator.SetSubjectDN(CN);
|
||||
certificateGenerator.SetIssuerDN(caCert.IssuerDN);
|
||||
certificateGenerator.SetNotAfter(DateTime.MaxValue);
|
||||
certificateGenerator.SetNotBefore(DateTime.UtcNow.Subtract(new TimeSpan(1, 0, 0, 0)));
|
||||
certificateGenerator.SetPublicKey(keyPair.Public);
|
||||
certificateGenerator.AddExtension(X509Extensions.SubjectKeyIdentifier, false, new SubjectKeyIdentifierStructure(keyPair.Public));
|
||||
certificateGenerator.AddExtension(X509Extensions.AuthorityKeyIdentifier, false, new AuthorityKeyIdentifierStructure(caCert.GetPublicKey()));
|
||||
|
||||
var caKeyPair = DotNetUtilities.GetKeyPair(ca.PrivateKey);
|
||||
|
||||
ISignatureFactory signatureFactory = new Asn1SignatureFactory("SHA512WITHRSA", caKeyPair.Private, random);
|
||||
|
||||
var certificate = certificateGenerator.Generate(signatureFactory);
|
||||
|
||||
certificate.Verify(caCert.GetPublicKey());
|
||||
|
||||
var certificate2 = new X509Certificate2(DotNetUtilities.ToX509Certificate(certificate));
|
||||
certificate2.PrivateKey = DotNetUtilities.ToRSA(keyPair.Private as RsaPrivateCrtKeyParameters);
|
||||
|
||||
return certificate2;
|
||||
}
|
||||
|
||||
public static X509Certificate2 CreateCertificateAuthority(string caName, int keyStrength)
|
||||
{
|
||||
var random = new SecureRandom(new CryptoApiRandomGenerator());
|
||||
var keyPairGen = new RsaKeyPairGenerator();
|
||||
keyPairGen.Init(new KeyGenerationParameters(random, keyStrength));
|
||||
AsymmetricCipherKeyPair keypair = keyPairGen.GenerateKeyPair();
|
||||
|
||||
var certificateGenerator = new X509V3CertificateGenerator();
|
||||
|
||||
var CN = new X509Name("CN=" + caName);
|
||||
var SN = BigInteger.ProbablePrime(120, random);
|
||||
|
||||
certificateGenerator.SetSerialNumber(SN);
|
||||
certificateGenerator.SetSubjectDN(CN);
|
||||
certificateGenerator.SetIssuerDN(CN);
|
||||
certificateGenerator.SetNotAfter(DateTime.MaxValue);
|
||||
certificateGenerator.SetNotBefore(DateTime.UtcNow.Subtract(new TimeSpan(2, 0, 0, 0)));
|
||||
certificateGenerator.SetPublicKey(keypair.Public);
|
||||
certificateGenerator.AddExtension(X509Extensions.SubjectKeyIdentifier, false, new SubjectKeyIdentifierStructure(keypair.Public));
|
||||
certificateGenerator.AddExtension(X509Extensions.BasicConstraints, true, new BasicConstraints(true));
|
||||
|
||||
ISignatureFactory signatureFactory = new Asn1SignatureFactory("SHA512WITHRSA", keypair.Private, random);
|
||||
|
||||
var certificate = certificateGenerator.Generate(signatureFactory);
|
||||
|
||||
var certificate2 = new X509Certificate2(DotNetUtilities.ToX509Certificate(certificate));
|
||||
certificate2.PrivateKey = DotNetUtilities.ToRSA(keypair.Private as RsaPrivateCrtKeyParameters);
|
||||
|
||||
return certificate2;
|
||||
}
|
||||
|
||||
private void Button1_Click(object sender, EventArgs e)
|
||||
private async void Button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -119,18 +41,36 @@ namespace AsyncRAT_Sharp.Forms
|
||||
|
||||
button1.Text = "Please wait";
|
||||
button1.Enabled = false;
|
||||
|
||||
string backup = Application.StartupPath + "\\BackupCertificate.zip";
|
||||
Settings.ServerCertificate = CreateCertificateAuthority(textBox1.Text, 4096);
|
||||
File.WriteAllBytes(Settings.CertificatePath, Settings.ServerCertificate.Export(X509ContentType.Pkcs12));
|
||||
|
||||
using (ZipArchive archive = ZipFile.Open(backup, ZipArchiveMode.Create))
|
||||
textBox1.Enabled = false;
|
||||
await Task.Run(() =>
|
||||
{
|
||||
archive.CreateEntryFromFile(Settings.CertificatePath, Path.GetFileName(Settings.CertificatePath));
|
||||
}
|
||||
MessageBox.Show(this, "Created a ZIP backup (BackupCertificate.zip)", "Certificate backup", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
MessageBox.Show(this, "If you want to use an updated version of AsyncRAT, remember to copy+paste your certificate", "Certificate backup", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
this.Close();
|
||||
try
|
||||
{
|
||||
string backup = Application.StartupPath + "\\BackupCertificate.zip";
|
||||
Settings.ServerCertificate = Helper.CreateCertificate.CreateCertificateAuthority(textBox1.Text, 4096);
|
||||
File.WriteAllBytes(Settings.CertificatePath, Settings.ServerCertificate.Export(X509ContentType.Pkcs12));
|
||||
|
||||
using (ZipArchive archive = ZipFile.Open(backup, ZipArchiveMode.Create))
|
||||
{
|
||||
archive.CreateEntryFromFile(Settings.CertificatePath, Path.GetFileName(Settings.CertificatePath));
|
||||
}
|
||||
Program.form1.listView1.BeginInvoke((MethodInvoker)(() =>
|
||||
{
|
||||
MessageBox.Show(this, "If you want to use an updated version of AsyncRAT, remember to copy+paste your certificate", "Certificate", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
this.Close();
|
||||
}));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Program.form1.listView1.BeginInvoke((MethodInvoker)(() =>
|
||||
{
|
||||
MessageBox.Show(this, ex.Message, "Certificate", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
||||
button1.Text = "OK";
|
||||
button1.Enabled = true;
|
||||
textBox1.Enabled = true;
|
||||
}));
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -139,5 +79,6 @@ namespace AsyncRAT_Sharp.Forms
|
||||
button1.Enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
53
AsyncRAT-C#/AsyncRAT-Sharp/Helper/CreateCertificate.cs
Normal file
53
AsyncRAT-C#/AsyncRAT-Sharp/Helper/CreateCertificate.cs
Normal file
@ -0,0 +1,53 @@
|
||||
using Org.BouncyCastle.Asn1.X509;
|
||||
using Org.BouncyCastle.Crypto;
|
||||
using Org.BouncyCastle.Crypto.Generators;
|
||||
using Org.BouncyCastle.Crypto.Operators;
|
||||
using Org.BouncyCastle.Crypto.Parameters;
|
||||
using Org.BouncyCastle.Crypto.Prng;
|
||||
using Org.BouncyCastle.Math;
|
||||
using Org.BouncyCastle.Security;
|
||||
using Org.BouncyCastle.X509;
|
||||
using Org.BouncyCastle.X509.Extension;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AsyncRAT_Sharp.Helper
|
||||
{
|
||||
public static class CreateCertificate
|
||||
{
|
||||
public static X509Certificate2 CreateCertificateAuthority(string caName, int keyStrength)
|
||||
{
|
||||
var random = new SecureRandom(new CryptoApiRandomGenerator());
|
||||
var keyPairGen = new RsaKeyPairGenerator();
|
||||
keyPairGen.Init(new KeyGenerationParameters(random, keyStrength));
|
||||
AsymmetricCipherKeyPair keypair = keyPairGen.GenerateKeyPair();
|
||||
|
||||
var certificateGenerator = new X509V3CertificateGenerator();
|
||||
|
||||
var CN = new X509Name("CN=" + caName);
|
||||
var SN = BigInteger.ProbablePrime(120, random);
|
||||
|
||||
certificateGenerator.SetSerialNumber(SN);
|
||||
certificateGenerator.SetSubjectDN(CN);
|
||||
certificateGenerator.SetIssuerDN(CN);
|
||||
certificateGenerator.SetNotAfter(DateTime.MaxValue);
|
||||
certificateGenerator.SetNotBefore(DateTime.UtcNow.Subtract(new TimeSpan(2, 0, 0, 0)));
|
||||
certificateGenerator.SetPublicKey(keypair.Public);
|
||||
certificateGenerator.AddExtension(X509Extensions.SubjectKeyIdentifier, false, new SubjectKeyIdentifierStructure(keypair.Public));
|
||||
certificateGenerator.AddExtension(X509Extensions.BasicConstraints, true, new BasicConstraints(true));
|
||||
|
||||
ISignatureFactory signatureFactory = new Asn1SignatureFactory("SHA512WITHRSA", keypair.Private, random);
|
||||
|
||||
var certificate = certificateGenerator.Generate(signatureFactory);
|
||||
|
||||
var certificate2 = new X509Certificate2(DotNetUtilities.ToX509Certificate(certificate));
|
||||
certificate2.PrivateKey = DotNetUtilities.ToRSA(keypair.Private as RsaPrivateCrtKeyParameters);
|
||||
|
||||
return certificate2;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user