From 205334a39062b1be2eaea06f8e9b1f4d6132c516 Mon Sep 17 00:00:00 2001 From: mgeeky Date: Mon, 18 Jan 2021 14:49:59 -0800 Subject: [PATCH] Added option to only save serialized loader delegate to output file. --- DotNetToJScript/Program.cs | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/DotNetToJScript/Program.cs b/DotNetToJScript/Program.cs index 05e4668..2a232a6 100644 --- a/DotNetToJScript/Program.cs +++ b/DotNetToJScript/Program.cs @@ -161,6 +161,7 @@ static void Main(string[] args) string entry_class_name = DEFAULT_ENTRY_CLASS_NAME; string additional_script = String.Empty; bool mscorlib_only = false; + bool raw_serialized = false; bool scriptlet_moniker = false; bool scriptlet_uninstall = false; bool enable_debug = false; @@ -175,11 +176,13 @@ static void Main(string[] args) { "m", "Build a scriptlet file in moniker format.", v => scriptlet_moniker = v != null }, { "u", "Build a scriptlet file in uninstall format.", v => scriptlet_uninstall = v != null }, { "d", "Enable debug output from script", v => enable_debug = v != null }, + { "r", "Output a raw serialized loader delegate (encoded as Base64 stream) instead of a fully-fledged script", v => raw_serialized = v != null }, { "l|lang=", String.Format("Specify script language to use ({0})", GetEnumString(typeof(ScriptLanguage))), v => ParseEnum(v, out language) }, { "v|ver=", String.Format("Specify .NET version to use ({0})", GetEnumString(typeof(RuntimeVersion))), v => ParseEnum(v, out version) }, { "o=", "Specify output file (default is stdout).", v => output_file = v }, + { "c=", String.Format("Specify entry class name (default {0})", entry_class_name), v => entry_class_name = v }, { "s=", "Specify file with additional script. 'o' is created instance.", v => additional_script = File.ReadAllText(v) }, { "clsid=", "Specify a CLSID for the scriptlet", v => clsid = new Guid(v) }, @@ -210,7 +213,11 @@ static void Main(string[] args) generator = new VBScriptGenerator(); break; default: - throw new ArgumentException("Invalid script language option"); + { + if (!raw_serialized) throw new ArgumentException("Invalid script language option"); + generator = new JScriptGenerator(); + } + break; } byte[] assembly = File.ReadAllBytes(assembly_path); @@ -245,8 +252,17 @@ static void Main(string[] args) MemoryStream stm = new MemoryStream(); fmt.Serialize(stm, mscorlib_only ? BuildLoaderDelegateMscorlib(assembly) : BuildLoaderDelegate(assembly)); - string script = generator.GenerateScript(stm.ToArray(), entry_class_name, additional_script, version, enable_debug); - if (scriptlet_moniker || scriptlet_uninstall) + string script = ""; + if(raw_serialized) + { + script = System.Convert.ToBase64String(stm.ToArray()); + } + else + { + script = generator.GenerateScript(stm.ToArray(), entry_class_name, additional_script, version, enable_debug); + } + + if (!raw_serialized && (scriptlet_moniker || scriptlet_uninstall)) { if (!generator.SupportsScriptlet) {