-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathExecute-AppDomainAssembly.cs
50 lines (35 loc) · 1.53 KB
/
Execute-AppDomainAssembly.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public static string Execute(string Arguments = "")
{
string output = "";
TextWriter realStdOut = Console.Out;
TextWriter realStdErr = Console.Error;
TextWriter stdOutWriter = new StringWriter();
TextWriter stdErrWriter = new StringWriter();
Console.SetOut(stdOutWriter);
Console.SetError(stdErrWriter);
AppDomain.CurrentDomain.AssemblyResolve += (sender, args2) =>
{
String resourceName = new AssemblyName(args2.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
var loadedAssembly = Assembly.Load(assemblyData);
return loadedAssembly;
}
};
string[] args = Arguments.Split(' ');
typeof(Task).GetMethod("FixCodePage", BindingFlags.Public | BindingFlags.Static).Invoke(null, null);
typeof(Sharphound).GetMethod("Main", BindingFlags.Public | BindingFlags.Static).Invoke(null, new object[] { args });
Console.Out.Flush();
Console.Error.Flush();
Console.SetOut(realStdOut);
Console.SetError(realStdErr);
output += stdOutWriter.ToString();
output += stdErrWriter.ToString();
return output;
}
public static void FixCodePage()
{
ICSharpCode.SharpZipLib.Zip.ZipConstants.DefaultCodePage = 850;
}