From cb9d391d5227f3e8596e0eaa7aa6682143d3d964 Mon Sep 17 00:00:00 2001 From: Katy Coe Date: Thu, 31 Oct 2019 02:22:02 +0100 Subject: [PATCH] Il2CppDumper: More robust command-line processing --- Il2CppDumper/Il2CppDumper.csproj | 4 +++ Il2CppDumper/Program.cs | 42 +++++++++++++++----------------- README.md | 18 +++++++++++--- 3 files changed, 38 insertions(+), 26 deletions(-) diff --git a/Il2CppDumper/Il2CppDumper.csproj b/Il2CppDumper/Il2CppDumper.csproj index 0a70bc0..c6a9ed8 100644 --- a/Il2CppDumper/Il2CppDumper.csproj +++ b/Il2CppDumper/Il2CppDumper.csproj @@ -15,4 +15,8 @@ + + + + diff --git a/Il2CppDumper/Program.cs b/Il2CppDumper/Program.cs index 3b7c52c..7b9ae43 100644 --- a/Il2CppDumper/Program.cs +++ b/Il2CppDumper/Program.cs @@ -4,7 +4,9 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using Il2CppInspector.Reflection; +using Microsoft.Extensions.Configuration; namespace Il2CppInspector { @@ -17,24 +19,26 @@ namespace Il2CppInspector Console.WriteLine("(c) 2017-2019 Katy Coe - www.djkaty.com"); Console.WriteLine(""); - // Command-line usage: dotnet run [ [ []]] + // Command-line usage: dotnet run [--bin=] [--metadata=] [--cs-out=] [--py-out=] [--exclude-namespaces=|none] // Defaults to libil2cpp.so or GameAssembly.dll if binary file not specified - string imageFile = "libil2cpp.so"; - string metaFile = "global-metadata.dat"; - string outFile = "types.cs"; + IConfiguration config = new ConfigurationBuilder().AddCommandLine(args).Build(); - if (args.Length == 0) - if (!File.Exists(imageFile)) - imageFile = "GameAssembly.dll"; + string imageFile = config["bin"] ?? "libil2cpp.so"; + string metaFile = config["metadata"] ?? "global-metadata.dat"; + string outCsFile = config["cs-out"] ?? "types.cs"; + string outPythonFile = config["py-out"] ?? "ida.py"; - if (args.Length >= 1) - imageFile = args[0]; + // Exclusions + var excludedNamespaces = config["exclude-namespaces"]?.Split(',').ToList() ?? + new List { + "System", + "UnityEngine", + "Mono", + "Microsoft.Win32" + }; - if (args.Length >= 2) - metaFile = args[1]; - - if (args.Length >= 3) - outFile = args[2]; + if (excludedNamespaces.Count == 1 && excludedNamespaces[0].ToLower() == "none") + excludedNamespaces = null; // Check files if (!File.Exists(imageFile)) { @@ -51,14 +55,6 @@ namespace Il2CppInspector if (il2cppInspectors == null) Environment.Exit(1); - // Exclusions - var excludedNamespaces = new List { - "System", - "UnityEngine", - "Mono", - "Microsoft.Win32" - }; - // Write output file int i = 0; foreach (var il2cpp in il2cppInspectors) { @@ -66,7 +62,7 @@ namespace Il2CppInspector var model = new Il2CppModel(il2cpp); // C# signatures output - new Il2CppCSharpDumper(model) {ExcludedNamespaces = excludedNamespaces}.WriteFile(outFile + (i++ > 0 ? "-" + (i-1) : "")); + new Il2CppCSharpDumper(model) {ExcludedNamespaces = excludedNamespaces}.WriteFile(outCsFile + (i++ > 0 ? "-" + (i-1) : "")); // IDA Python script output // TODO: IDA Python script output diff --git a/README.md b/README.md index cc63548..301c00b 100644 --- a/README.md +++ b/README.md @@ -31,18 +31,30 @@ The output binary is placed in `Il2CppInspector/Il2CppDumper/bin/Release/netcore ### Usage ``` -Il2CppDumper [ [ []]] +Il2CppDumper [--bin=] [--metadata=] [--cs-out=] [--exclude-namespaces=|none] ``` Defaults if not specified: -- _binary-file_ - searches for `libil2cpp.so` and `GameAssembly.dll` +- _binary-file_ - searches for `libil2cpp.so` - _metadata-file_ - `global-metadata.dat` - _output-file_ - `types.cs` +To exclude types from certain namespaces from being generated in the C¤ source file output, provide a comma-separated list of case-sensitive namespaces in `--exclude-namespaces`. The following namespaces will be excluded if no argument is specified: + +``` +System +Mono +UnityEngine +Microsoft.Win32 +``` + +Providing an argument to `--exclude-namespaces` will override the default list. To output all namespaces, use `--exclude-namespaces=none`. + + File format and architecture are automatically detected. -For Apple Universal Binaries, multiple output files will be generated, with each filename suffixed by the index of the image in the Universal Binary. Unsupported images will be skipped. +For Apple Universal Binaries, multiple output files will be generated, with each filename besides the first suffixed by the index of the image in the Universal Binary. Unsupported images will be skipped. ### Running tests