From c9387706d04bd2563d40ee5cefb2838e9defa222 Mon Sep 17 00:00:00 2001 From: js6pak Date: Sat, 3 Apr 2021 23:45:38 +0200 Subject: [PATCH] 2021.3.31.3 --- Reactor.Greenhouse/Generation/TypeContext.cs | 37 +++++++++++++------ Reactor.Greenhouse/Mappings | 2 +- Reactor.Greenhouse/Program.cs | 2 +- Reactor.Greenhouse/Reactor.Greenhouse.csproj | 2 +- Reactor.Greenhouse/Setup/Game.cs | 17 ++++----- Reactor.Greenhouse/Setup/GameVersion.cs | 20 +++++----- .../Setup/Provider/SteamProvider.cs | 4 +- .../GenerateReferences.cs | 2 +- .../Reactor.OxygenFilter.MSBuild.csproj | 6 +-- Reactor.OxygenFilter.MSBuild/Reobfuscate.cs | 11 +++++- nuget.config | 6 +++ 11 files changed, 70 insertions(+), 39 deletions(-) create mode 100644 nuget.config diff --git a/Reactor.Greenhouse/Generation/TypeContext.cs b/Reactor.Greenhouse/Generation/TypeContext.cs index babb8c7..8eb64fc 100644 --- a/Reactor.Greenhouse/Generation/TypeContext.cs +++ b/Reactor.Greenhouse/Generation/TypeContext.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text.RegularExpressions; using Mono.Cecil; using Mono.Cecil.Rocks; using Reactor.OxygenFilter; @@ -33,8 +32,6 @@ namespace Reactor.Greenhouse.Generation return CleanFullName; } - private static readonly Regex CompilerGeneratedRegex = new Regex(@"^<([\w\d]+)>.__\d+$", RegexOptions.Compiled); - public void UpdateNested() { if (ObfuscatedType.NestedTypes.Count == CleanType.NestedTypes.Count) @@ -49,16 +46,32 @@ namespace Reactor.Greenhouse.Generation } } + private static string Clean(string name) + { + return name.Replace("<", "_").Replace(">", "_"); + } + public MappedType ToMappedType() { - var match = CompilerGeneratedRegex.Match(CleanType.Name); - var mappedType = new MappedType(ObfuscatedType.FullName, match.Success ? (match.Groups[1].Value + "__d") : CleanType.Name.Replace("<>", "")); + var mappedType = new MappedType(ObfuscatedType.FullName, Clean(CleanType.Name)); + + if (!string.IsNullOrEmpty(CleanType.Namespace)) + { + mappedType.Mapped = CleanType.Namespace + "." + mappedType.Mapped; + } + + if (ObfuscatedType.FullName == CleanFullName) + { + mappedType.Mapped = null; + } if (ObfuscatedType.Fields.Count == CleanType.Fields.Count) { + var sortedCleanFields = CleanType.Fields.OrderBy(x => x.HasConstant && x.Constant is string).ToArray(); + for (var i = 0; i < CleanType.Fields.Count; i++) { - var cleanField = CleanType.Fields[i]; + var cleanField = sortedCleanFields[i]; var obfuscatedField = ObfuscatedType.Fields[i]; if (ObfuscatedType.DeclaringType != null) @@ -76,11 +89,11 @@ namespace Reactor.Greenhouse.Generation continue; } - var fieldMatch = CompilerGeneratedRegex.Match(obfuscatedField.Name); + var clean = Clean(obfuscatedField.Name); - if (fieldMatch.Success) + if (clean != obfuscatedField.Name) { - mappedType.Fields.Add(new MappedMember(obfuscatedField.Name, fieldMatch.Groups[1].Value)); + mappedType.Fields.Add(new MappedMember(obfuscatedField.Name, clean)); continue; } } @@ -161,11 +174,11 @@ namespace Reactor.Greenhouse.Generation { foreach (var obfuscatedMethod in ObfuscatedType.Methods) { - var methodMatch = CompilerGeneratedRegex.Match(obfuscatedMethod.Name); + var clean = Clean(obfuscatedMethod.Name); - if (methodMatch.Success) + if (clean != obfuscatedMethod.Name) { - mappedType.Methods.Add(new MappedMethod(obfuscatedMethod, methodMatch.Groups[1].Value)); + mappedType.Methods.Add(new MappedMethod(obfuscatedMethod, clean)); } } } diff --git a/Reactor.Greenhouse/Mappings b/Reactor.Greenhouse/Mappings index 30b991d..0738e25 160000 --- a/Reactor.Greenhouse/Mappings +++ b/Reactor.Greenhouse/Mappings @@ -1 +1 @@ -Subproject commit 30b991d6a8531077b0c004a77f39b14eb3477fa8 +Subproject commit 0738e2569e603163621b0b56ebc2397d0be9c29e diff --git a/Reactor.Greenhouse/Program.cs b/Reactor.Greenhouse/Program.cs index 09eed7d..22faa46 100644 --- a/Reactor.Greenhouse/Program.cs +++ b/Reactor.Greenhouse/Program.cs @@ -38,7 +38,7 @@ namespace Reactor.Greenhouse ContractResolver = ShouldSerializeContractResolver.Instance, }; - var oldFile = Path.Combine("work", "Assembly-CSharp-2020.12.9s.dll"); + var oldFile = Path.Combine("work", "Assembly-CSharp-2021.3.31.dll"); Console.WriteLine($"Generating mappings from {oldFile}"); using var cleanModule = ModuleDefinition.ReadModule(File.OpenRead(oldFile)); diff --git a/Reactor.Greenhouse/Reactor.Greenhouse.csproj b/Reactor.Greenhouse/Reactor.Greenhouse.csproj index c4735d8..3f33e0a 100644 --- a/Reactor.Greenhouse/Reactor.Greenhouse.csproj +++ b/Reactor.Greenhouse/Reactor.Greenhouse.csproj @@ -13,6 +13,6 @@ - + diff --git a/Reactor.Greenhouse/Setup/Game.cs b/Reactor.Greenhouse/Setup/Game.cs index dddee80..a519871 100644 --- a/Reactor.Greenhouse/Setup/Game.cs +++ b/Reactor.Greenhouse/Setup/Game.cs @@ -39,12 +39,13 @@ namespace Reactor.Greenhouse.Setup return; // TODO } - var version = GameVersionParser.Parse(System.IO.Path.Combine(Path, "Among Us_Data", "globalgamemanagers")); + // TODO version patch is hardcoded to version shower, wtf!? + // var version = GameVersionParser.Parse(System.IO.Path.Combine(Path, "Among Us_Data", "globalgamemanagers")); - if (!Provider.Version.Equals(new GameVersion(version), true)) - { - throw new Exception("Downloaded game has invalid version"); - } + // if (!Provider.Version.Equals(new GameVersion(version), true)) + // { + // throw new Exception("Downloaded game has invalid version"); + // } } public void Dump() @@ -71,10 +72,8 @@ namespace Reactor.Greenhouse.Setup Path, new Config { - RequireAnyKey = false, - GenerateScript = false, - DumpProperty = true, - DumpAttribute = true + GenerateStruct = false, + GenerateDummyDll = true }, Console.WriteLine )) diff --git a/Reactor.Greenhouse/Setup/GameVersion.cs b/Reactor.Greenhouse/Setup/GameVersion.cs index ea88653..1f32366 100644 --- a/Reactor.Greenhouse/Setup/GameVersion.cs +++ b/Reactor.Greenhouse/Setup/GameVersion.cs @@ -5,7 +5,7 @@ namespace Reactor.Greenhouse.Setup { public class GameVersion { - private static readonly Regex _regex = new Regex(@"^(?[0-9]+)\.(?[0-9]+)\.(?[0-9]+)(?[sia])?", RegexOptions.Compiled); + private static readonly Regex _regex = new Regex(@"^(?[0-9]+)\.(?[0-9]+)\.(?[0-9]+)(\.(?[0-9]+))?(?[sia])?", RegexOptions.Compiled); public static GamePlatform GamePlatformFromShorthand(string shorthand) { @@ -18,8 +18,9 @@ namespace Reactor.Greenhouse.Setup }; } - public int Major { get; } - public int Minor { get; } + public int Year { get; } + public int Month { get; } + public int Day { get; } public int Patch { get; } public GamePlatform? Platform { get; } @@ -27,9 +28,10 @@ namespace Reactor.Greenhouse.Setup { var match = _regex.Match(version); - Major = int.Parse(match.Groups["major"].Value); - Minor = int.Parse(match.Groups["minor"].Value); - Patch = int.Parse(match.Groups["patch"].Value); + Year = int.Parse(match.Groups["year"].Value); + Month = int.Parse(match.Groups["month"].Value); + Day = int.Parse(match.Groups["day"].Value); + Patch = match.Groups["patch"].Success ? int.Parse(match.Groups["patch"].Value) : 0; var platform = match.Groups["platform"]; Platform = platform.Success && !string.IsNullOrEmpty(platform.Value) ? GamePlatformFromShorthand(platform.Value) : null; @@ -37,7 +39,7 @@ namespace Reactor.Greenhouse.Setup public override string ToString() { - return $"{Major}.{Minor}.{Patch}" + Platform switch + return $"{Year}.{Month}.{Day}{(Patch == 0 ? string.Empty : $".{Patch}")}" + Platform switch { GamePlatform.Steam => "s", GamePlatform.Itch => "i", @@ -52,7 +54,7 @@ namespace Reactor.Greenhouse.Setup if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; - return Major == other.Major && Minor == other.Minor && Patch == other.Patch && (ignorePlatform || Platform == other.Platform); + return Year == other.Year && Month == other.Month && Day == other.Day && Patch == other.Patch && (ignorePlatform || Platform == other.Platform); } public override bool Equals(object obj) @@ -62,7 +64,7 @@ namespace Reactor.Greenhouse.Setup public override int GetHashCode() { - return HashCode.Combine(Major, Minor, Patch, Platform); + return HashCode.Combine(Year, Month, Day, Patch, Platform); } } diff --git a/Reactor.Greenhouse/Setup/Provider/SteamProvider.cs b/Reactor.Greenhouse/Setup/Provider/SteamProvider.cs index 77ea343..b5efdbe 100644 --- a/Reactor.Greenhouse/Setup/Provider/SteamProvider.cs +++ b/Reactor.Greenhouse/Setup/Provider/SteamProvider.cs @@ -16,7 +16,9 @@ namespace Reactor.Greenhouse.Setup.Provider { [new GameVersion("2019.10.10s")] = 3162069540887216240, [new GameVersion("2020.12.9s")] = 3306639722673334636, - [new GameVersion("2021.3.5s")] = 5200448423569257054 + [new GameVersion("2021.3.5s")] = 5200448423569257054, + [new GameVersion("2021.3.31s")] = 9177722260012976528, + [new GameVersion("2021.3.31.3s")] = 3941730972865408291 }; public ulong Manifest { get; } diff --git a/Reactor.OxygenFilter.MSBuild/GenerateReferences.cs b/Reactor.OxygenFilter.MSBuild/GenerateReferences.cs index b23ae98..8c4d275 100644 --- a/Reactor.OxygenFilter.MSBuild/GenerateReferences.cs +++ b/Reactor.OxygenFilter.MSBuild/GenerateReferences.cs @@ -47,7 +47,7 @@ namespace Reactor.OxygenFilter.MSBuild var dumperConfig = new Il2CppDumper.Config { - GenerateScript = false, + GenerateStruct = false, GenerateDummyDll = true }; diff --git a/Reactor.OxygenFilter.MSBuild/Reactor.OxygenFilter.MSBuild.csproj b/Reactor.OxygenFilter.MSBuild/Reactor.OxygenFilter.MSBuild.csproj index 21fb92c..ec8d40b 100644 --- a/Reactor.OxygenFilter.MSBuild/Reactor.OxygenFilter.MSBuild.csproj +++ b/Reactor.OxygenFilter.MSBuild/Reactor.OxygenFilter.MSBuild.csproj @@ -4,7 +4,7 @@ latest true - 0.2.10 + 0.3.0 git https://github.com/NuclearPowered/Reactor.OxygenFilter LGPL-3.0-or-later @@ -21,8 +21,8 @@ - - + + diff --git a/Reactor.OxygenFilter.MSBuild/Reobfuscate.cs b/Reactor.OxygenFilter.MSBuild/Reobfuscate.cs index 9b97178..d2fa198 100644 --- a/Reactor.OxygenFilter.MSBuild/Reobfuscate.cs +++ b/Reactor.OxygenFilter.MSBuild/Reobfuscate.cs @@ -282,7 +282,16 @@ namespace Reactor.OxygenFilter.MSBuild foreach (var pair in toObfuscate) { - pair.Key.Name = pair.Value; + if (pair.Key is TypeReference typeReference) + { + var lastIndexOf = pair.Value.LastIndexOf('.'); + typeReference.Namespace = lastIndexOf == -1 ? null : pair.Value.Substring(0, lastIndexOf); + typeReference.Name = pair.Value.Substring(lastIndexOf + 1); + } + else + { + pair.Key.Name = pair.Value; + } } foreach (var typeReference in moduleDefinition.GetTypeReferences()) diff --git a/nuget.config b/nuget.config new file mode 100644 index 0000000..4b1385e --- /dev/null +++ b/nuget.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file