Skip to content

Commit f8b59a3

Browse files
author
Twursc
committed
支持上传大文件
1 parent f353bb9 commit f8b59a3

File tree

1 file changed

+65
-11
lines changed

1 file changed

+65
-11
lines changed

sharpwmi/sharpwmi/Program.cs

+65-11
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Threading;
44
using System.IO;
55
using System.Management;
6+
using System.Collections.Generic;
67

78
namespace sharpwmi
89
{
@@ -139,7 +140,7 @@ public void run(string[] args)
139140
{
140141
string powershell_command = "powershell -enc " + Base64Encode(args[4]);
141142

142-
string code = "$a=(" + powershell_command + ");$b=[Convert]::ToBase64String([System.Text.UnicodeEncoding]::Unicode.GetBytes($a));$reg = Get-WmiObject -List -Namespace root\\default | Where-Object {$_.Name -eq \"StdRegProv\"};$reg.SetStringValue(2147483650,\"\",\"txt\",$b)";
143+
string code = "$a=(" + powershell_command + ");$b=[Convert]::ToBase64String([System.Text.UnicodeEncoding]::Unicode.GetBytes($a));$reg = Get-WmiObject -List -Namespace root\\default | Where-Object {$_.Name -eq \"StdRegProv\"};$reg.SetStringValue(2147483650,\"\",\"ft_rcx\",$b)";
143144

144145

145146
ExecCmd("powershell -enc " + Base64Encode(code));
@@ -152,36 +153,63 @@ public void run(string[] args)
152153
ManagementBaseObject inParams = registry.GetMethodParameters("GetStringValue");
153154

154155
inParams["sSubKeyName"] = "";
155-
inParams["sValueName"] = "txt";
156+
inParams["sValueName"] = "ft_rcx";
156157
ManagementBaseObject outParams = registry.InvokeMethod("GetStringValue", inParams, null);
157158
// (String)outParams["sValue"];
158159

159-
Console.WriteLine("[+]output -> \n\n" + Base64Decode(outParams["sValue"].ToString()));
160+
Console.WriteLine("[+]output -> \n" + Base64Decode(outParams["sValue"].ToString()));
160161
}
161162
else if (args[3] == "upload")
162163
{
163164

164-
165-
166165
//写注册表
167166
byte[] str = File.ReadAllBytes(args[4]);
168-
167+
List<byte[]> pChunks = splitChunks(str);
169168

170169
ManagementClass registry = new ManagementClass(this.scope, new ManagementPath("StdRegProv"), null);
170+
171+
//写segment数量
171172
ManagementBaseObject inParams = registry.GetMethodParameters("SetStringValue");
172173
inParams["hDefKey"] = 2147483650; //HKEY_LOCAL_MACHINE;
173174
inParams["sSubKeyName"] = @"";
174-
inParams["sValueName"] = "upload";
175-
176-
inParams["sValue"] = Convert.ToBase64String(str);
175+
inParams["sValueName"] = "ft_segs";
176+
inParams["sValue"] = pChunks.Count;
177177
ManagementBaseObject outParams = registry.InvokeMethod("SetStringValue", inParams, null);
178178

179+
//写文件大小
180+
ManagementBaseObject inParams2 = registry.GetMethodParameters("SetStringValue");
181+
inParams["hDefKey"] = 2147483650; //HKEY_LOCAL_MACHINE;
182+
inParams["sSubKeyName"] = @"";
183+
inParams["sValueName"] = "ft_size";
184+
inParams["sValue"] = str.Length;
185+
ManagementBaseObject outParams2 = registry.InvokeMethod("SetStringValue", inParams, null);
186+
187+
//写segment内容
188+
int curChunk = 0;
189+
foreach (byte[] curData in pChunks)
190+
{
191+
ManagementBaseObject _inParams3 = registry.GetMethodParameters("SetStringValue");
192+
_inParams3["hDefKey"] = 2147483650; //HKEY_LOCAL_MACHINE;
193+
_inParams3["sSubKeyName"] = @"";
194+
_inParams3["sValueName"] = "ft_p" + curChunk.ToString();
195+
_inParams3["sValue"] = Convert.ToBase64String(curData);
196+
ManagementBaseObject _outParams3 = registry.InvokeMethod("SetStringValue", _inParams3, null);
197+
curChunk++;
198+
}
179199

180200

181201
//通过注册表还原文件
182-
string pscode = string.Format("$wmi = [wmiclass]\"Root\\default:stdRegProv\";$data=($wmi.GetStringValue(2147483650,\"\",\"upload\")).sValue;$byteArray = [Convert]::FromBase64String($data);[io.file]::WriteAllBytes(\"{0:s}\",$byteArray);;", args[5]);
202+
//string pscode = string.Format("$wmi = [wmiclass]\"Root\\default:stdRegProv\";$data=($wmi.GetStringValue(2147483650,\"\",\"upload\")).sValue;$byteArray = [Convert]::FromBase64String($data);[io.file]::WriteAllBytes(\"{0:s}\",$byteArray);;", args[5]);
203+
//string pscode = string.Format("$wmi=[wmiclass]\"Root\\default:stdRegProv\";$ftsegs=($wmi.GetStringValue(2147483650,\"\",\"ft_segs\")).sValue;$ftsize=($wmi.GetStringValue(2147483650,\"\",\"ft_size\")).sValue;$fbytes=New-Object Byte[] 0;for($sid=0;$sid-lt$ftsegs;$sid++){$sdata=($wmi.GetStringValue(2147483650,\"\",\"ft_p$sid\")).sValue;$fbytes+=[Convert]::FromBase64String($sdata);}[io.file]::WriteAllBytes(\"{0:s}\",$fbytes);", args[5]);
204+
//TODO:文件合成完毕后删除相关注册表
205+
string pscode = Encoding.UTF8.GetString(Convert.FromBase64String("JHdtaT1bd21pY2xhc3NdIlJvb3RcZGVmYXVsdDpzdGRSZWdQcm92IjskZnRzZWdzPSgkd21pLkdldF" +
206+
"N0cmluZ1ZhbHVlKDIxNDc0ODM2NTAsIiIsImZ0X3NlZ3MiKSkuc1ZhbHVlOyRmdHNpemU9KCR3bWkuR2V0U3RyaW5nVmFsdWUoMjE0NzQ4MzY1MCwiIiwiZnRfc2l6ZSIpKS5zVmFsd" +
207+
"WU7JGZieXRlcz1OZXctT2JqZWN0IEJ5dGVbXSAwO2Zvcigkc2lkPTA7JHNpZC1sdCRmdHNlZ3M7JHNpZCsrKXskc2RhdGE9KCR3bWkuR2V0U3RyaW5nVmFsdWUoMjE0NzQ4MzY1MCwi" +
208+
"IiwiZnRfcCRzaWQiKSkuc1ZhbHVlOyRmYnl0ZXMrPVtDb252ZXJ0XTo6RnJvbUJhc2U2NFN0cmluZygkc2RhdGEpO31baW8uZmlsZV06OldyaXRlQWxsQnl0ZXMoIg=="))
209+
+ args[5] + Encoding.UTF8.GetString(Convert.FromBase64String("IiwkZmJ5dGVzKTs="));
183210
string powershell_command = "powershell -enc " + Base64Encode(pscode);
184211

212+
//Console.WriteLine(pscode);
185213
Thread.Sleep(delay);
186214
ExecCmd(powershell_command);
187215
Console.WriteLine("[+]Upload file done!");
@@ -199,5 +227,31 @@ static void Main(string[] args)
199227
myWMICore.run(args);
200228

201229
}
230+
231+
static List<byte[]> splitChunks(byte[] input)
232+
{
233+
List<byte[]> pChunks = new List<byte[]>();
234+
int curSize = 0;
235+
int setSize = 262144;
236+
byte[] curChunk = new byte[setSize];
237+
for(int ch = 0; ch < input.Length; ch++)
238+
{
239+
if (curSize >= setSize)
240+
{
241+
pChunks.Add(curChunk);
242+
curSize = 0;
243+
curChunk = new byte[setSize];
244+
}
245+
curChunk[curSize] = input[ch];
246+
curSize += 1;
247+
248+
}
249+
250+
byte[] lastChunk = new byte[curSize];
251+
Array.Copy(curChunk, lastChunk, curSize);
252+
pChunks.Add(lastChunk);
253+
254+
return pChunks;
255+
}
202256
}
203-
}
257+
}

0 commit comments

Comments
 (0)