From 471900210936d7085af7f0ee800d7802c0aa8770 Mon Sep 17 00:00:00 2001
From: valnoxy
Date: Tue, 22 Feb 2022 16:07:56 +0100
Subject: [PATCH] =?UTF-8?q?=F0=9F=93=A6=20deploya=20Core=2012.0.0.401?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- deploya Core with version 12.0.0.401 (rewritten)
- deploya UI (Empty)
---
.gitattributes | 2 +
.gitignore | 334 +++++++++++++++
README.md | 42 ++
deploya-core/deploya-core.sln | 41 ++
deploya-core/deploya-core/ConsoleUtility.cs | 34 ++
deploya-core/deploya-core/Program.cs | 388 ++++++++++++++++++
deploya-core/deploya-core/app.manifest | 79 ++++
.../deploya-core/deploya-core - Backup.csproj | 35 ++
deploya-core/deploya-core/deploya-core.csproj | 38 ++
deploya-core/deploya-core/deploya.ico | Bin 0 -> 205844 bytes
deploya-core/deploya/App.xaml | 17 +
deploya-core/deploya/App.xaml.cs | 17 +
deploya-core/deploya/AssemblyInfo.cs | 10 +
deploya-core/deploya/MainWindow.xaml | 17 +
deploya-core/deploya/MainWindow.xaml.cs | 28 ++
deploya-core/deploya/deploya.csproj | 18 +
16 files changed, 1100 insertions(+)
create mode 100644 .gitattributes
create mode 100644 .gitignore
create mode 100644 README.md
create mode 100644 deploya-core/deploya-core.sln
create mode 100644 deploya-core/deploya-core/ConsoleUtility.cs
create mode 100644 deploya-core/deploya-core/Program.cs
create mode 100644 deploya-core/deploya-core/app.manifest
create mode 100644 deploya-core/deploya-core/deploya-core - Backup.csproj
create mode 100644 deploya-core/deploya-core/deploya-core.csproj
create mode 100644 deploya-core/deploya-core/deploya.ico
create mode 100644 deploya-core/deploya/App.xaml
create mode 100644 deploya-core/deploya/App.xaml.cs
create mode 100644 deploya-core/deploya/AssemblyInfo.cs
create mode 100644 deploya-core/deploya/MainWindow.xaml
create mode 100644 deploya-core/deploya/MainWindow.xaml.cs
create mode 100644 deploya-core/deploya/deploya.csproj
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..eba1110
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4d13c54
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,334 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding add-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# JetBrains Rider
+.idea/
+*.sln.iml
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..7118023
--- /dev/null
+++ b/README.md
@@ -0,0 +1,42 @@
+
+
+deploya
+
+ Configure Windows automatically
+
+ Version: 12.0
+
+
+ No downloads available
+
+
+ Report Bug
+ ·
+ Discussions
+
+
+
+![-----------------------------------------------------](https://dl.exploitox.de/t440p-oc/rainbow.png)
+
+## 🔔 Information
+deploya is a little application for deploying Windows on a machine.
+
+- Deploy WIM-FIles on any drive.
+- Auto initialize with AutoInit plugin + AutoDeploya
+- Install applications like Firefox, Adobe Reader and Remote Management Control with winget.
+- Capture Windows installation
+- Install Windows from the Cloud
+
+⚠ **This tool is designed to use in a internal environment. If you want to use this tool as a "template" or just for testing, you will need to compile it for yourself.**
+
+## ℹ️ Disclaimer
+> This application will modify the system. I won't be responsible for any damage you've done yourself trying to use this application.
+
+## ⚙️ Compiling the source code
+For compiling, you'll need ```Visual Studio 2022``` and ```.NET 6.0```.
+Clone this source and restore the NUGET Packages.
+
+## 🧾 License
+deploya is licensed under [GNU GENERAL PUBLIC LICENSE](https://github.com/valnoxy/deploya/blob/main/LICENSE). So you are allowed to use freely and modify the application. I will not be responsible for any outcome. Proceed with any action at your own risk.
+
+```Copyright (c) 2018 - 2022 valnoxy. By Jonas G. ```
diff --git a/deploya-core/deploya-core.sln b/deploya-core/deploya-core.sln
new file mode 100644
index 0000000..2144bcc
--- /dev/null
+++ b/deploya-core/deploya-core.sln
@@ -0,0 +1,41 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.32014.148
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "deploya-core", "deploya-core\deploya-core.csproj", "{1426C8F0-619B-44BA-8A0E-1ABFC1C6E50F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "deploya", "deploya\deploya.csproj", "{67E38F1B-7162-40AA-84A2-55131CDB631B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|x64 = Debug|x64
+ Release|Any CPU = Release|Any CPU
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1426C8F0-619B-44BA-8A0E-1ABFC1C6E50F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1426C8F0-619B-44BA-8A0E-1ABFC1C6E50F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1426C8F0-619B-44BA-8A0E-1ABFC1C6E50F}.Debug|x64.ActiveCfg = Debug|x64
+ {1426C8F0-619B-44BA-8A0E-1ABFC1C6E50F}.Debug|x64.Build.0 = Debug|x64
+ {1426C8F0-619B-44BA-8A0E-1ABFC1C6E50F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1426C8F0-619B-44BA-8A0E-1ABFC1C6E50F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1426C8F0-619B-44BA-8A0E-1ABFC1C6E50F}.Release|x64.ActiveCfg = Release|x64
+ {1426C8F0-619B-44BA-8A0E-1ABFC1C6E50F}.Release|x64.Build.0 = Release|x64
+ {67E38F1B-7162-40AA-84A2-55131CDB631B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {67E38F1B-7162-40AA-84A2-55131CDB631B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {67E38F1B-7162-40AA-84A2-55131CDB631B}.Debug|x64.ActiveCfg = Debug|x64
+ {67E38F1B-7162-40AA-84A2-55131CDB631B}.Debug|x64.Build.0 = Debug|x64
+ {67E38F1B-7162-40AA-84A2-55131CDB631B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {67E38F1B-7162-40AA-84A2-55131CDB631B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {67E38F1B-7162-40AA-84A2-55131CDB631B}.Release|x64.ActiveCfg = Release|x64
+ {67E38F1B-7162-40AA-84A2-55131CDB631B}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {4A0B5FB9-31AB-4973-AFC5-12CF9572E46C}
+ EndGlobalSection
+EndGlobal
diff --git a/deploya-core/deploya-core/ConsoleUtility.cs b/deploya-core/deploya-core/ConsoleUtility.cs
new file mode 100644
index 0000000..3d2cd58
--- /dev/null
+++ b/deploya-core/deploya-core/ConsoleUtility.cs
@@ -0,0 +1,34 @@
+using System;
+
+namespace deploya_core
+{
+ static class ConsoleUtility
+ {
+ private const char _block = '■';
+ private const string _back = "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b";
+ private const string _twirl = "-\\|/";
+
+ public static void WriteProgressBar(int percent, bool update = false)
+ {
+ if (update)
+ Console.Write("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
+ Console.Write("[");
+ int num = (int)(percent / 10.0 + 0.5);
+ for (int index = 0; index < 10; ++index)
+ {
+ if (index >= num)
+ Console.Write(' ');
+ else
+ Console.Write('■');
+ }
+ Console.Write("] {0,3:##0}%", percent);
+ }
+
+ public static void WriteProgress(int progress, bool update = false)
+ {
+ if (update)
+ Console.Write("\b");
+ Console.Write("-\\|/"[progress % "-\\|/".Length]);
+ }
+ }
+}
diff --git a/deploya-core/deploya-core/Program.cs b/deploya-core/deploya-core/Program.cs
new file mode 100644
index 0000000..ba2e247
--- /dev/null
+++ b/deploya-core/deploya-core/Program.cs
@@ -0,0 +1,388 @@
+/*
+ * deploya - Fast and Easy way to deploy Windows
+ * Copyright (c) 2018 - 2022 Exploitox.
+ *
+ * deploya is licensed under MIT License (https://github.com/valnoxy/deploya/blob/main/LICENSE).
+ * So you are allowed to use freely and modify the application.
+ * I will not be responsible for any outcome.
+ * Proceed with any action at your own risk.
+ *
+ * Source code: https://github.com/valnoxy/deploya
+ */
+
+using CommandLine;
+using CommandLine.Text;
+using Microsoft.Wim;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+
+namespace deploya_core
+{
+ internal class Program
+ {
+ public static string ver = "12.0.0";
+ public static string build = "401";
+ public static string codename = "deploya Core";
+ public static string copyright = "Copyright (c) 2018 - 2022 Exploitox. All rights reserved.";
+ public static bool uimode = false;
+
+ #region Parser options
+ class Options
+ {
+ [Option('w', "wim", Required = true, HelpText = "Input WIM-file to be processed.")]
+ public string wimfile { get; set; }
+
+
+ [Option(Default = false, Hidden = true, HelpText = "Used for deploya UI - Network Installation")]
+ public bool uimode { get; set; }
+
+
+ [Option('i', "index", Required = true, HelpText = "Index ID of the selected Windows-Installation.")]
+ public int index { get; set; }
+
+
+ [Option('e', "efi", Default = false, HelpText = "Use EFI for installation.")]
+ public bool efi { get; set; }
+
+
+ [Option('d', "driveid", Required = true, HelpText = "Hard Drive ID of the destination hard drive.")]
+ public int driveid { get; set; }
+
+
+ [Option('l', "legacy", Default = false, HelpText = "Use legacy bootloader for XP and below.")]
+ public bool legacy { get; set; }
+
+ /*
+ [Usage(ApplicationAlias = "deployaCLI")]
+ public static IEnumerable Examples
+ {
+ get
+ {
+ return new List() {
+ new Example("Apply WIM file on a EFI system", new Options { driveid = 0, wimfile = "file.wim", index = 1, efi = true, legacy = false })
+ };
+ }
+ }
+ */
+ }
+
+ static void DisplayHelp(ParserResult result, IEnumerable errs)
+ {
+ var helpText = HelpText.AutoBuild(result, h =>
+ {
+ h.AdditionalNewLineAfterOption = false; // Remove the extra newline between options
+ h.Heading = Program.codename + " [Version: " + Program.ver + "." + Program.build + "]"; // Change header
+ h.Copyright = Program.copyright; // Change copyright text
+ return HelpText.DefaultParsingErrorsHandler(result, h);
+ }, e => e);
+ Console.WriteLine(helpText);
+ }
+ #endregion
+
+ static void Main(string[] args)
+ {
+ var parser = new CommandLine.Parser(with => with.HelpWriter = null);
+ var parserResult = parser.ParseArguments(args);
+ parserResult
+ .WithParsed(options => Run(options))
+ .WithNotParsed(errs => DisplayHelp(parserResult, errs));
+ }
+
+ private static void Run(Options options)
+ {
+ string image = options.wimfile.ToString();
+ string Index = options.index.ToString();
+ string diskId = options.driveid.ToString();
+ uimode = options.uimode;
+
+ if (diskId.Contains("\\\\.\\PHYSICALDRIVE"))
+ diskId = new string(Enumerable.ToArray(Enumerable.Where((IEnumerable)diskId, new Func(char.IsDigit))));
+
+ // -----------------------------
+ #region Check options
+
+ #region WIM-File
+ Console.ForegroundColor = ConsoleColor.Magenta;
+ if (!File.Exists(image))
+ {
+ Console.WriteLine("[i] Image not exist.");
+ Console.ForegroundColor = (ConsoleColor)15;
+ Environment.Exit(1);
+ }
+ Console.WriteLine("[i] Image = " + image);
+ #endregion
+
+ #region Target
+ if (Program.GetDiskIndex(diskId) > 0U)
+ {
+ Console.ForegroundColor = ConsoleColor.Red;
+ Console.WriteLine("[!] Target not exist. ID: " + Program.GetDiskIndex(diskId).ToString());
+ Console.ResetColor();
+ Environment.Exit(1);
+ }
+ Console.WriteLine("[i] Target = disk" + diskId);
+ #endregion
+
+ #region BIOS type & Bootloader
+
+ if (options.efi && options.legacy)
+ {
+ Console.ForegroundColor = ConsoleColor.Red;
+ Console.WriteLine("[!] You cannot use EFI with a legacy bootloader. Aborting ...");
+ Console.ResetColor();
+ Environment.Exit(1);
+ }
+
+ if (options.efi)
+ {
+ Console.WriteLine("[i] Firmware = EFI");
+ Console.WriteLine("[i] Legacy = false");
+ }
+ else if (options.legacy)
+ {
+ Console.WriteLine("[i] Firmware = BIOS");
+ Console.WriteLine("[i] Legacy = true");
+ }
+ else
+ {
+ Console.WriteLine("[i] Firmware = BIOS");
+ Console.WriteLine("[i] Legacy = false");
+ }
+
+ #endregion
+
+ #endregion
+ // -----------------------------
+
+ #region Partitioning destination
+ Process partDest = new Process();
+ partDest.StartInfo.FileName = "diskpart.exe";
+ partDest.StartInfo.UseShellExecute = false;
+ partDest.StartInfo.CreateNoWindow = true;
+ partDest.StartInfo.RedirectStandardInput = true;
+ partDest.StartInfo.RedirectStandardOutput = true;
+ partDest.Start();
+ if (!options.efi)
+ {
+ if (options.legacy)
+ {
+ partDest.StandardInput.WriteLine("select disk " + diskId);
+ partDest.StandardInput.WriteLine("clean");
+ partDest.StandardInput.WriteLine("create partition primary");
+ partDest.StandardInput.WriteLine("format quick fs=ntfs label=Windows");
+ partDest.StandardInput.WriteLine("active");
+ partDest.StandardInput.WriteLine("assign letter=W");
+ partDest.StandardInput.WriteLine("exit");
+ partDest.WaitForExit();
+ if (!Program.uimode)
+ ConsoleUtility.WriteProgressBar(100, true);
+ }
+ if (!options.legacy)
+ {
+ partDest.StandardInput.WriteLine("select disk " + diskId);
+ partDest.StandardInput.WriteLine("clean");
+ partDest.StandardInput.WriteLine("create partition primary size=100");
+ partDest.StandardInput.WriteLine("format quick fs=ntfs label=System");
+ partDest.StandardInput.WriteLine("assign letter=S");
+ partDest.StandardInput.WriteLine("active");
+ partDest.StandardInput.WriteLine("create partition primary");
+ partDest.StandardInput.WriteLine("shrink minimum=650");
+ partDest.StandardInput.WriteLine("format quick fs=ntfs label=Windows");
+ partDest.StandardInput.WriteLine("assign letter=W");
+ partDest.StandardInput.WriteLine("create partition primary");
+ partDest.StandardInput.WriteLine("format quick fs=ntfs label=Recovery");
+ partDest.StandardInput.WriteLine("assign letter=R");
+ partDest.StandardInput.WriteLine("set id=27");
+ partDest.StandardInput.WriteLine("exit");
+ partDest.WaitForExit();
+ if (!Program.uimode)
+ ConsoleUtility.WriteProgressBar(100, true);
+ }
+ }
+ if (options.efi)
+ {
+ partDest.StandardInput.WriteLine("select disk " + diskId);
+ partDest.StandardInput.WriteLine("clean");
+ partDest.StandardInput.WriteLine("convert gpt");
+ partDest.StandardInput.WriteLine("create partition efi size=100");
+ partDest.StandardInput.WriteLine("format quick fs=fat32 label=System");
+ partDest.StandardInput.WriteLine("assign letter=S");
+ partDest.StandardInput.WriteLine("create partition msr size=16");
+ partDest.StandardInput.WriteLine("create partition primary");
+ partDest.StandardInput.WriteLine("shrink minimum=650");
+ partDest.StandardInput.WriteLine("format quick fs=ntfs label=Windows");
+ partDest.StandardInput.WriteLine("assign letter=W");
+ partDest.StandardInput.WriteLine("create partition primary");
+ partDest.StandardInput.WriteLine("format quick fs=ntfs label=Recovery");
+ partDest.StandardInput.WriteLine("assign letter=R");
+ partDest.StandardInput.WriteLine("set id=de94bba4-06d1-4d40-a16a-bfd50179d6ac");
+ partDest.StandardInput.WriteLine("gpt attributes=0x8000000000000001");
+ partDest.StandardInput.WriteLine("exit");
+ partDest.WaitForExit();
+ if (!Program.uimode)
+ ConsoleUtility.WriteProgressBar(100, true);
+ }
+
+ if (partDest.ExitCode != 0)
+ {
+ Console.ForegroundColor = ConsoleColor.Red;
+ Console.WriteLine("");
+ Console.WriteLine(" An Error has occurred.");
+ Console.WriteLine(" Error: " + partDest.ExitCode.ToString());
+ if (!Program.uimode)
+ Console.WriteLine(); // Only write new line if ui mode is disabled, so that the ui can read the error code above.
+ Console.ResetColor();
+ return;
+ }
+ #endregion
+
+ #region Apply WIM file & Bootloader
+ Program.applyWim(image, Index, "W:\\");
+
+ if (!Program.uimode)
+ {
+ Console.Write("[*] Installing Bootloader ... ");
+ ConsoleUtility.WriteProgressBar(0);
+ }
+ if (Program.uimode) { Console.WriteLine("[A] Installing Bootloader ..."); }
+
+ Process bootld = new Process();
+ bootld.StartInfo.FileName = "cmd.exe";
+
+ #region Legacy check
+ if (options.legacy)
+ {
+ if (diskId.EndsWith("\\"))
+ {
+ diskId = diskId.Remove(diskId.Length - 1);
+ bootld.StartInfo.Arguments = "/c \"bootsect /nt52 " + diskId + " /force /mbr\"";
+ }
+ else
+ {
+ bootld.StartInfo.Arguments = "/c \"bootsect.exe /nt52 " + diskId + " /force /mbr > nul\"";
+ }
+ }
+ #endregion
+
+ #region BIOS / EFI check
+ if (!options.legacy)
+ {
+ if (!options.efi) // BIOS
+ bootld.StartInfo.Arguments = "/c \"bcdboot.exe W:\\Windows /s S: /f BIOS >NUL\"";
+
+ if (options.efi) // EFI
+ bootld.StartInfo.Arguments = "/c \"bcdboot.exe W:\\Windows /s S: /f UEFI >NUL\"";
+ }
+ #endregion
+
+ bootld.Start();
+ bootld.WaitForExit();
+
+ if (bootld.ExitCode != 0)
+ {
+ Console.ForegroundColor = ConsoleColor.Red;
+ Console.WriteLine("");
+ Console.WriteLine(" An Error has occurred.");
+ Console.WriteLine(" Error: " + bootld.ExitCode.ToString());
+ if (!Program.uimode)
+ Console.WriteLine(); // Only write new line if ui mode is disabled, so that the ui can read the error code above.
+ Console.ResetColor();
+ Environment.Exit(bootld.ExitCode);
+ }
+
+ if (!Program.uimode)
+ {
+ ConsoleUtility.WriteProgressBar(100, true);
+ Console.WriteLine("");
+ }
+
+ Console.ForegroundColor = ConsoleColor.Green;
+ Console.WriteLine("[*] Installation completed.");
+ Console.ResetColor();
+ Environment.Exit(0);
+ #endregion
+ }
+
+ #region Modules
+
+ #region Get Disk index
+ public static int GetDiskIndex(string diskId)
+ {
+ string tempPath = Path.GetTempPath();
+ File.WriteAllText(tempPath + "getdiskindex.cmd", "@wmic diskdrive get index | more +1");
+ Process process = new Process();
+ process.StartInfo.UseShellExecute = false;
+ process.StartInfo.RedirectStandardOutput = true;
+ process.StartInfo.FileName = tempPath + "getdiskindex.cmd";
+ process.Start();
+ string end = process.StandardOutput.ReadToEnd();
+ process.WaitForExit();
+
+ try { File.Delete(Path.Combine(tempPath, "getdiskindex.cmd")); } catch { }
+ return end.Contains(diskId) ? 0 : -1;
+ }
+ #endregion
+
+ #region Apply Wim file
+ private static void applyWim(string ImagePath, string Index, string Drive)
+ {
+ Environment.GetCommandLineArgs();
+ if (!Program.uimode)
+ {
+ Console.Write("[*] Applying Image ... ");
+ ConsoleUtility.WriteProgressBar(0);
+ }
+ if (Program.uimode) { Console.WriteLine("[A] Applying Image ..."); }
+
+ string path = Drive;
+ using (WimHandle file = WimgApi.CreateFile(ImagePath, WimFileAccess.Read, WimCreationDisposition.OpenExisting, WimCreateFileOptions.None, WimCompressionType.None))
+ {
+ WimgApi.SetTemporaryPath(file, Environment.GetEnvironmentVariable("TEMP"));
+ WimgApi.RegisterMessageCallback(file, new WimMessageCallback(Program.MyCallbackMethod));
+ try
+ {
+ using (WimHandle imageHandle = WimgApi.LoadImage(file, Convert.ToInt32(Index)))
+ WimgApi.ApplyImage(imageHandle, path, WimApplyImageOptions.None);
+ }
+ finally
+ {
+ WimgApi.UnregisterMessageCallback(file, new WimMessageCallback(Program.MyCallbackMethod));
+ }
+ }
+ }
+ #endregion
+
+ #region WimCallbackMessage
+ private static WimMessageResult MyCallbackMethod(WimMessageType messageType, object message, object userData)
+ {
+ switch (messageType)
+ {
+ case WimMessageType.Progress:
+ WimMessageProgress wimMessageProgress = (WimMessageProgress)message;
+ if (!Program.uimode)
+ ConsoleUtility.WriteProgressBar(wimMessageProgress.PercentComplete, true);
+ if (Program.uimode)
+ {
+ Console.WriteLine(wimMessageProgress.PercentComplete);
+ break;
+ }
+ break;
+ case WimMessageType.Error:
+ WimMessageError wimMessageError = (WimMessageError)message;
+ Console.WriteLine($"Error: {0} ({1})", (object)wimMessageError.Path, (object)wimMessageError.Win32ErrorCode);
+ break;
+ case WimMessageType.Warning:
+ WimMessageWarning wimMessageWarning = (WimMessageWarning)message;
+ Console.WriteLine($"Warning: {0} ({1})", (object)wimMessageWarning.Path, (object)wimMessageWarning.Win32ErrorCode);
+ break;
+ }
+ return WimMessageResult.Success;
+ }
+ #endregion
+
+ #endregion
+ }
+}
diff --git a/deploya-core/deploya-core/app.manifest b/deploya-core/deploya-core/app.manifest
new file mode 100644
index 0000000..4d5c3f9
--- /dev/null
+++ b/deploya-core/deploya-core/app.manifest
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/deploya-core/deploya-core/deploya-core - Backup.csproj b/deploya-core/deploya-core/deploya-core - Backup.csproj
new file mode 100644
index 0000000..cf90172
--- /dev/null
+++ b/deploya-core/deploya-core/deploya-core - Backup.csproj
@@ -0,0 +1,35 @@
+
+
+
+ Exe
+ net6.0
+ deploya_core
+ true
+ true
+ true
+ win-x64
+ false
+ deployaCLI
+ deploya.ico
+ app.manifest
+ AnyCPU;x64
+ embedded
+ False
+ deploya
+ 12.0.0.401
+ valnoxy
+ Exploitox
+ deploya
+ CLI version of deploya
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/deploya-core/deploya-core/deploya-core.csproj b/deploya-core/deploya-core/deploya-core.csproj
new file mode 100644
index 0000000..1bd2623
--- /dev/null
+++ b/deploya-core/deploya-core/deploya-core.csproj
@@ -0,0 +1,38 @@
+
+
+
+ Exe
+ net6.0
+ deploya_core
+ true
+ true
+ true
+ win-x64
+ false
+ deployaCLI
+ deploya.ico
+ app.manifest
+ AnyCPU;x64
+ embedded
+ False
+ deploya
+ 12.0.0.401
+ valnoxy
+ Exploitox
+ deploya
+ CLI version of deploya
+ Copyright (c) 2018 - 2022 Exploitox.
+ https://github.com/valnoxy/deploya
+ CLI version of deploya
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/deploya-core/deploya-core/deploya.ico b/deploya-core/deploya-core/deploya.ico
new file mode 100644
index 0000000000000000000000000000000000000000..834a5f9fb42849ca72bf88939d2d5bc30a742f92
GIT binary patch
literal 205844
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