210 lines
8.4 KiB
C#
210 lines
8.4 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: Costura.AssemblyLoader
|
|
// Assembly: Client, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
|
|
// MVID: 92DF2D60-35B0-4A06-AFD8-50A246F39510
|
|
// Assembly location: C:\Users\user\Desktop\v3.8.0 Deluxe Plugins (v4.0.0) cracked\Builder\Client.exe
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.IO;
|
|
using System.IO.Compression;
|
|
using System.Reflection;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Threading;
|
|
|
|
#nullable disable
|
|
namespace Costura;
|
|
|
|
[CompilerGenerated]
|
|
internal static class AssemblyLoader
|
|
{
|
|
private static object nullCacheLock = new object();
|
|
private static Dictionary<string, bool> nullCache = new Dictionary<string, bool>();
|
|
private static Dictionary<string, string> assemblyNames = new Dictionary<string, string>();
|
|
private static Dictionary<string, string> symbolNames = new Dictionary<string, string>();
|
|
private static int isAttached;
|
|
|
|
private static string CultureToString(CultureInfo culture)
|
|
{
|
|
return culture == null ? string.Empty : culture.Name;
|
|
}
|
|
|
|
private static Assembly ReadExistingAssembly(AssemblyName name)
|
|
{
|
|
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
|
|
{
|
|
AssemblyName name1 = assembly.GetName();
|
|
// ISSUE: reference to a compiler-generated method
|
|
// ISSUE: reference to a compiler-generated method
|
|
if (string.Equals(name1.Name, name.Name, StringComparison.InvariantCultureIgnoreCase) && string.Equals(AssemblyLoader.CultureToString(name1.CultureInfo), AssemblyLoader.CultureToString(name.CultureInfo), StringComparison.InvariantCultureIgnoreCase))
|
|
return assembly;
|
|
}
|
|
return (Assembly) null;
|
|
}
|
|
|
|
private static string GetAssemblyResourceName(AssemblyName requestedAssemblyName)
|
|
{
|
|
string lowerInvariant = requestedAssemblyName.Name.ToLowerInvariant();
|
|
if (requestedAssemblyName.CultureInfo != null && !string.IsNullOrEmpty(requestedAssemblyName.CultureInfo.Name))
|
|
{
|
|
// ISSUE: reference to a compiler-generated method
|
|
lowerInvariant = $"{AssemblyLoader.CultureToString(requestedAssemblyName.CultureInfo)}.{lowerInvariant}".ToLowerInvariant();
|
|
}
|
|
return lowerInvariant;
|
|
}
|
|
|
|
private static void CopyTo(Stream source, Stream destination)
|
|
{
|
|
byte[] buffer = new byte[81920 /*0x014000*/];
|
|
int count;
|
|
while ((count = source.Read(buffer, 0, buffer.Length)) != 0)
|
|
destination.Write(buffer, 0, count);
|
|
}
|
|
|
|
private static Stream LoadStream(string fullName)
|
|
{
|
|
Assembly executingAssembly = Assembly.GetExecutingAssembly();
|
|
if (!fullName.EndsWith(".compressed"))
|
|
return executingAssembly.GetManifestResourceStream(fullName);
|
|
using (Stream manifestResourceStream = executingAssembly.GetManifestResourceStream(fullName))
|
|
{
|
|
using (DeflateStream source = new DeflateStream(manifestResourceStream, CompressionMode.Decompress))
|
|
{
|
|
MemoryStream destination = new MemoryStream();
|
|
// ISSUE: reference to a compiler-generated method
|
|
AssemblyLoader.CopyTo((Stream) source, (Stream) destination);
|
|
destination.Position = 0L;
|
|
return (Stream) destination;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static Stream LoadStream(Dictionary<string, string> resourceNames, string name)
|
|
{
|
|
string fullName;
|
|
// ISSUE: reference to a compiler-generated method
|
|
return resourceNames.TryGetValue(name, out fullName) ? AssemblyLoader.LoadStream(fullName) : (Stream) null;
|
|
}
|
|
|
|
private static byte[] ReadStream(Stream stream)
|
|
{
|
|
byte[] buffer = new byte[stream.Length];
|
|
stream.Read(buffer, 0, buffer.Length);
|
|
return buffer;
|
|
}
|
|
|
|
private static Assembly ReadFromEmbeddedResources(
|
|
Dictionary<string, string> assemblyNames,
|
|
Dictionary<string, string> symbolNames,
|
|
AssemblyName requestedAssemblyName)
|
|
{
|
|
// ISSUE: reference to a compiler-generated method
|
|
string assemblyResourceName = AssemblyLoader.GetAssemblyResourceName(requestedAssemblyName);
|
|
byte[] rawAssembly;
|
|
// ISSUE: reference to a compiler-generated method
|
|
using (Stream stream = AssemblyLoader.LoadStream(assemblyNames, assemblyResourceName))
|
|
{
|
|
if (stream == null)
|
|
return (Assembly) null;
|
|
// ISSUE: reference to a compiler-generated method
|
|
rawAssembly = AssemblyLoader.ReadStream(stream);
|
|
}
|
|
// ISSUE: reference to a compiler-generated method
|
|
using (Stream stream = AssemblyLoader.LoadStream(symbolNames, assemblyResourceName))
|
|
{
|
|
if (stream != null)
|
|
{
|
|
// ISSUE: reference to a compiler-generated method
|
|
byte[] rawSymbolStore = AssemblyLoader.ReadStream(stream);
|
|
return Assembly.Load(rawAssembly, rawSymbolStore);
|
|
}
|
|
}
|
|
return Assembly.Load(rawAssembly);
|
|
}
|
|
|
|
public static Assembly ResolveAssembly(object sender, ResolveEventArgs e)
|
|
{
|
|
string name = e.Name;
|
|
AssemblyName assemblyName = new AssemblyName(name);
|
|
// ISSUE: reference to a compiler-generated field
|
|
lock (AssemblyLoader.nullCacheLock)
|
|
{
|
|
// ISSUE: reference to a compiler-generated field
|
|
if (AssemblyLoader.nullCache.ContainsKey(name))
|
|
return (Assembly) null;
|
|
}
|
|
// ISSUE: reference to a compiler-generated method
|
|
Assembly assembly1 = AssemblyLoader.ReadExistingAssembly(assemblyName);
|
|
if ((object) assembly1 != null)
|
|
return assembly1;
|
|
// ISSUE: reference to a compiler-generated field
|
|
// ISSUE: reference to a compiler-generated field
|
|
// ISSUE: reference to a compiler-generated method
|
|
Assembly assembly2 = AssemblyLoader.ReadFromEmbeddedResources(AssemblyLoader.assemblyNames, AssemblyLoader.symbolNames, assemblyName);
|
|
if ((object) assembly2 == null)
|
|
{
|
|
// ISSUE: reference to a compiler-generated field
|
|
lock (AssemblyLoader.nullCacheLock)
|
|
{
|
|
// ISSUE: reference to a compiler-generated field
|
|
AssemblyLoader.nullCache[name] = true;
|
|
}
|
|
if ((assemblyName.Flags & AssemblyNameFlags.Retargetable) != AssemblyNameFlags.None)
|
|
assembly2 = Assembly.Load(assemblyName);
|
|
}
|
|
return assembly2;
|
|
}
|
|
|
|
static AssemblyLoader()
|
|
{
|
|
// ISSUE: reference to a compiler-generated field
|
|
AssemblyLoader.assemblyNames.Add("costura", "costura.costura.dll.compressed");
|
|
// ISSUE: reference to a compiler-generated field
|
|
AssemblyLoader.symbolNames.Add("costura", "costura.costura.pdb.compressed");
|
|
// ISSUE: reference to a compiler-generated field
|
|
AssemblyLoader.assemblyNames.Add("messagepacklib", "costura.messagepacklib.dll.compressed");
|
|
// ISSUE: reference to a compiler-generated field
|
|
AssemblyLoader.assemblyNames.Add("system.buffers", "costura.system.buffers.dll.compressed");
|
|
}
|
|
|
|
public static void Attach(bool subscribe)
|
|
{
|
|
// ISSUE: reference to a compiler-generated field
|
|
if (Interlocked.Exchange(ref AssemblyLoader.isAttached, 1) == 1 || !subscribe)
|
|
return;
|
|
AppDomain.CurrentDomain.AssemblyResolve += (ResolveEventHandler) ((sender, e) =>
|
|
{
|
|
string name = e.Name;
|
|
AssemblyName assemblyName = new AssemblyName(name);
|
|
// ISSUE: reference to a compiler-generated field
|
|
lock (AssemblyLoader.nullCacheLock)
|
|
{
|
|
// ISSUE: reference to a compiler-generated field
|
|
if (AssemblyLoader.nullCache.ContainsKey(name))
|
|
return (Assembly) null;
|
|
}
|
|
// ISSUE: reference to a compiler-generated method
|
|
Assembly assembly1 = AssemblyLoader.ReadExistingAssembly(assemblyName);
|
|
if ((object) assembly1 != null)
|
|
return assembly1;
|
|
// ISSUE: reference to a compiler-generated field
|
|
// ISSUE: reference to a compiler-generated field
|
|
// ISSUE: reference to a compiler-generated method
|
|
Assembly assembly2 = AssemblyLoader.ReadFromEmbeddedResources(AssemblyLoader.assemblyNames, AssemblyLoader.symbolNames, assemblyName);
|
|
if ((object) assembly2 == null)
|
|
{
|
|
// ISSUE: reference to a compiler-generated field
|
|
lock (AssemblyLoader.nullCacheLock)
|
|
{
|
|
// ISSUE: reference to a compiler-generated field
|
|
AssemblyLoader.nullCache[name] = true;
|
|
}
|
|
if ((assemblyName.Flags & AssemblyNameFlags.Retargetable) != AssemblyNameFlags.None)
|
|
assembly2 = Assembly.Load(assemblyName);
|
|
}
|
|
return assembly2;
|
|
});
|
|
}
|
|
}
|