コード例 #1
0
ファイル: Misc.cs プロジェクト: tjcomserv/SuperGrate
 /// <summary>
 /// Deletes a list of SIDs (Security Identifiers (User Profiles)) from a host.
 /// </summary>
 /// <param name="Host">Host to delete profiles from.</param>
 /// <param name="SIDs">List of SIDs that identify the profiles that need to be deleted.</param>
 /// <returns>Awaitable Task.</returns>
 public static Task DeleteFromSource(string Host, string[] SIDs)
 {
     ShouldCancelRemoteProfileDelete = false;
     return(Task.Run(async() =>
     {
         try
         {
             Logger.Information("Sending Profile Delete Daemon...");
             string exePath = Path.Combine(GetBestPathToC(Host), @"ProgramData\SuperGratePD.exe");
             FileStream SuperGratePD = File.OpenWrite(exePath);
             SuperGratePD.Write(
                 Properties.Resources.SuperGrateProfileDelete,
                 0,
                 Properties.Resources.SuperGrateProfileDelete.Length
                 );
             SuperGratePD.Close();
             int count = 0;
             foreach (string SID in SIDs)
             {
                 if (ShouldCancelRemoteProfileDelete)
                 {
                     break;
                 }
                 string name = GetUserByIdentity(SID);
                 Logger.Information("Deleting '" + name + "' from " + Host + "...");
                 await Remote.StartProcess(
                     Host,
                     @"C:\ProgramData\SuperGratePD.exe " + SID,
                     @"C:\ProgramData\"
                     );
                 Logger.UpdateProgress((int)((++count - 0.5) / SIDs.Length * 100));
                 await Remote.WaitForProcessExit(Host, "SuperGratePD");
             }
             Logger.Information("Removing Daemon...");
             File.Delete(exePath);
             Logger.Success("Done.");
         }
         catch (Exception e)
         {
             Logger.Exception(e, "Failed to delete user(s) from target: " + Host + ".");
         }
     }));
 }
コード例 #2
0
        public static Task <bool> Do(USMTMode Mode, string[] IDs)
        {
            Canceled = false;
            Failed   = false;
            string exec         = "";
            string configParams = "";

            if (Mode == USMTMode.LoadState)
            {
                exec          = "loadstate.exe";
                configParams  = Config.Settings["LoadStateParameters"];
                CurrentTarget = Main.DestinationComputer;
            }
            if (Mode == USMTMode.ScanState)
            {
                exec          = "scanstate.exe";
                configParams  = Config.Settings["ScanStateParameters"];
                CurrentTarget = Main.SourceComputer;
            }
            return(Task.Run(async() => {
                DetectedArch = await Misc.GetRemoteArch(CurrentTarget);
                if (Canceled || DetectedArch == Misc.OSArchitecture.Unknown)
                {
                    return false;
                }
                Failed = !await CopyUSMT();
                if (Canceled || Failed)
                {
                    return false;
                }
                Logger.UpdateProgress(0);
                foreach (string ID in IDs)
                {
                    if (Canceled || Failed)
                    {
                        break;
                    }
                    string SID = "";
                    if (Mode == USMTMode.LoadState)
                    {
                        Logger.Information("Applying user state: '" + Misc.GetUserByIdentity(ID) + "' on '" + CurrentTarget + "'...");
                        Failed = !await DownloadFromStore(ID);
                        SID = await Misc.GetSIDFromStore(ID);
                        if (Canceled || Failed || SID == null)
                        {
                            break;
                        }
                    }
                    if (Mode == USMTMode.ScanState)
                    {
                        Logger.Information("Capturing user state: '" + Misc.GetUserByIdentity(ID) + "' on '" + CurrentTarget + "'...");
                        SID = ID;
                    }
                    Failed = !await Remote.StartProcess(CurrentTarget,
                                                        Path.Combine(PayloadPathLocal, exec) + " " +
                                                        PayloadPathLocal + " " +
                                                        @"/ue:*\* " +
                                                        "/ui:" + SID + " " +
                                                        "/l:SuperGrate.log " +
                                                        "/progress:SuperGrate.progress " +
                                                        configParams
                                                        , PayloadPathLocal);
                    if (Canceled || Failed)
                    {
                        break;
                    }
                    Running = true;
                    StartWatchLog("SuperGrate.log");
                    StartWatchLog("SuperGrate.progress");
                    Failed = !await WaitForUsmtExit(exec.Replace(".exe", ""));
                    if (Canceled || Failed)
                    {
                        break;
                    }
                    Logger.UpdateProgress(0);
                    if (Mode == USMTMode.LoadState)
                    {
                        Failed = !await SetStoreExportParameters(ID);
                        if (Canceled || Failed)
                        {
                            break;
                        }
                    }
                    if (Mode == USMTMode.ScanState)
                    {
                        Failed = !await UploadToStore(SID);
                        if (Canceled || Failed)
                        {
                            break;
                        }
                    }
                    Logger.UpdateProgress(0);
                }
                Failed = !await CleaupUSMT();
                if (Canceled || Failed)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }));
        }