Guest User

Fallout Shelter Objectives Fixer

a guest
Aug 26th, 2015
1,503
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.01 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Text;
  4. using System.Security.Cryptography;
  5. using System.Text.RegularExpressions;
  6.  
  7. //{"objective":{"objectiveID":"EquipRandomWeapon","requirements":[{"requirementID":"r1","satisfied":false,"currentEquippedDwellers":0,"targetWeaponIDs":["MissileLauncher","MissileLauncher_Rusty","MissileLauncher_Enhanced","MissileLauncher_Hardened","MissileLauncher_Guided","MissileLauncher_MissLauncher"]}],"completed":false,"incrementLevel":1},"incLevel":6,"lottery":[false,true,true,true,true]}]}
  8.  
  9.  
  10. public static class FalloutShelterDecrypt
  11. {
  12.     private const string initVector = "tu89geji340t89u2";
  13.     private const string passPhrase = "UGxheWVy";
  14.     private const int keysize = 256;
  15.  
  16.  
  17.     private const string m_strObjetive_EquipMissileLauncher_NotComplete = "\"targetWeaponIDs\":[\"MissileLauncher\",\"MissileLauncher_Rusty\",\"MissileLauncher_Enhanced\",\"MissileLauncher_Hardened\",\"MissileLauncher_Guided\",\"MissileLauncher_MissLauncher\"]}],\"completed\":false,";
  18.     private const string m_strObjetive_EquipMissileLauncher____Replaced = "\"targetWeaponIDs\":[\"Shotgun\"]}],\"completed\":true,";
  19.  
  20.  
  21.  
  22.     public static bool IsBase64String(this string s)
  23.     {
  24.         s = s.Trim();
  25.         return (s.Length % 4 == 0) && Regex.IsMatch(s, @"^[a-zA-Z0-9\+/]*={0,3}$", RegexOptions.None);
  26.  
  27.     }
  28.  
  29.     public static bool IsObjectiveBug_EquipMissileLauncher(String strText)
  30.     {
  31.         return (strText.IndexOf(m_strObjetive_EquipMissileLauncher_NotComplete) != -1);
  32.     }
  33.  
  34.     public static string Encrypt(string Text)
  35.     {
  36.         byte[] initVectorBytes = Encoding.UTF8.GetBytes(initVector);
  37.         byte[] plainTextBytes = Encoding.UTF8.GetBytes(Text);
  38.         Rfc2898DeriveBytes password = new Rfc2898DeriveBytes(passPhrase, initVectorBytes);
  39.         byte[] keyBytes = password.GetBytes(keysize / 8);
  40.         RijndaelManaged symmetricKey = new RijndaelManaged();
  41.         symmetricKey.Mode = CipherMode.CBC;
  42.         ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes);
  43.         MemoryStream memoryStream = new MemoryStream();
  44.         CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
  45.         cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
  46.         cryptoStream.FlushFinalBlock();
  47.         byte[] Encrypted = memoryStream.ToArray();
  48.         memoryStream.Close();
  49.         cryptoStream.Close();
  50.         return Convert.ToBase64String(Encrypted);
  51.     }
  52.  
  53.     public static string Decrypt(string EncryptedText)
  54.     {
  55.         byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
  56.         byte[] DeEncryptedText = Convert.FromBase64String(EncryptedText);
  57.         Rfc2898DeriveBytes password = new Rfc2898DeriveBytes(passPhrase, initVectorBytes);
  58.         byte[] keyBytes = password.GetBytes(keysize / 8);
  59.         RijndaelManaged symmetricKey = new RijndaelManaged();
  60.         symmetricKey.Mode = CipherMode.CBC;
  61.         ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes);
  62.         MemoryStream memoryStream = new MemoryStream(DeEncryptedText);
  63.         CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
  64.         byte[] plainTextBytes = new byte[DeEncryptedText.Length];
  65.         int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
  66.         memoryStream.Close();
  67.         cryptoStream.Close();
  68.         return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);
  69.     }
  70.  
  71.     static void Main(string[] args)
  72.     {
  73.         if (args.Length < 1)
  74.         {
  75.             Console.WriteLine("Usage: FOSFixObjectives.exe input_file (or drag the save file onto this file)");
  76.             Console.Read();
  77.             return; //nothing to do.
  78.         }
  79.  
  80.         String data = File.ReadAllText(args[0]);
  81.  
  82.         if (IsBase64String(data))
  83.         {
  84.             String decryptedData = Decrypt(data);
  85.             int nQuestsCompleted = 0;
  86.             while (IsObjectiveBug_EquipMissileLauncher(decryptedData))
  87.             {
  88.                 decryptedData = decryptedData.Replace(m_strObjetive_EquipMissileLauncher_NotComplete, m_strObjetive_EquipMissileLauncher____Replaced);
  89.                 nQuestsCompleted++;
  90.             }
  91.  
  92.             if (nQuestsCompleted > 0)
  93.             {
  94.                 File.WriteAllText(args[0], Encrypt(decryptedData));
  95.                 Console.WriteLine("{0:D} Equip Missile Launcher Objective(s) Replaced.", nQuestsCompleted);
  96.                 Console.Read();
  97.                 return; //done.
  98.             }
  99.             else
  100.             {
  101.                 Console.WriteLine("No \"Equip Missile Launcher Objective\" found to fix! If Objectives Still does not work, please submit your save file for investigation!");
  102.                 Console.Read();
  103.                 return; //done
  104.             }
  105.         }
  106.         else
  107.         {
  108.             Console.WriteLine("not a valid Fallout Shelter Save File");
  109.             Console.Read();
  110.             return; //done
  111.         }
  112.     }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment