示例#1
0
        public static void DecryptSave(string game, string browsedSave)
        {
            string save = "";

            if (game == "BTD5")
            {
                save = Serializer.cfg.SavePathBTD5 + "\\Profile.save";
            }
            if (game == "BTDB")
            {
                save = Serializer.cfg.SavePathBTDB + "\\Profile.save";
            }

            if (browsedSave != "" && browsedSave != null)
            {
                save = browsedSave;
                game = "UnknownGame";
            }

            if (!Directory.Exists(savemodDir))
            {
                Directory.CreateDirectory(savemodDir);
            }

            FileInfo f = new FileInfo(save);

            if (!f.Exists)
            {
                ConsoleHandler.force_append_Notice("Save file does not exist... Unable to continue");
                return;
            }

            byte[] encoded = File.ReadAllBytes(f.FullName);

            JObject decoded = DgUtil.nk_decrypt(encoded);

            if (decoded == null)
            {
                ConsoleHandler.force_append_Notice("This file is not a valid JSON file... Unable to continue");
                return;
            }

            byte[] newBytes = Encoding.ASCII.GetBytes(decoded.ToString());

            File.WriteAllBytes(savemodDir + "\\" + game + "_Profile.save", newBytes);
            ConsoleHandler.append_Force_CanRepeat("Finished decrypting save file...");
        }
示例#2
0
        public static void EncryptSave(string game)
        {
            string unencryptedSave = "";
            string encryptedSave   = "";
            string dirPath         = "";

            if (game == "BTD5")
            {
                unencryptedSave = savemodDir + "\\BTD5_Profile.save";
                encryptedSave   = Serializer.cfg.SavePathBTD5 + "\\Profile.save";
                dirPath         = Serializer.cfg.SavePathBTD5;
            }
            if (game == "BTDB")
            {
                unencryptedSave = savemodDir + "\\BTDB_Profile.save";
                encryptedSave   = Serializer.cfg.SavePathBTDB + "\\Profile.save";
                dirPath         = Serializer.cfg.SavePathBTDB;
            }
            if (game == "UnknownGame")
            {
                MessageBox.Show("Your save file doesn't have a specified game. Please choose where you want to save it...");
                unencryptedSave = savemodDir + "\\UnknownGame_Profile.save";

                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Title  = "Export save file";
                sfd.Filter = "Save files (*.save)|*.save|All files (*.*)|*.*";
                if (sfd.ShowDialog() != DialogResult.OK)
                {
                    return;
                }
                encryptedSave = sfd.FileName;

                if (!encryptedSave.EndsWith(".save"))
                {
                    encryptedSave = encryptedSave + ".save";
                }
            }

            if (!Directory.Exists(savemodDir))
            {
                Directory.CreateDirectory(savemodDir);
            }

            if (!Directory.Exists(dirPath))
            {
                Directory.CreateDirectory(dirPath);
            }

            FileInfo f = new FileInfo(unencryptedSave);

            if (!f.Exists)
            {
                ConsoleHandler.force_append_Notice("Save file does not exist... Unable to continue");
                return;
            }

            byte[] encoded_bytes = File.ReadAllBytes(f.FullName);
            string encoded_str   = Encoding.ASCII.GetString(encoded_bytes);


            JObject decoded = JObject.Parse(encoded_str);

            if (decoded == null)
            {
                ConsoleHandler.force_append_Notice("This file is not a valid JSON file... Unable to continue");
                return;
            }


            if (game == "BTDB")
            {
                int bypasses = 0;

                if (decoded["HigherVersionProfile"] != null && ((string)decoded["HigherVersionProfile"]).Length > 0)
                {
                    JObject HigherVersionProfile = JObject.Parse(decoded["HigherVersionProfile"] + "");

                    foreach (JProperty hvProp in HigherVersionProfile.Properties())
                    {
                        if (decoded[hvProp.Name] != null)
                        {
                            HigherVersionProfile[hvProp.Name] = decoded[hvProp.Name];
                        }
                    }

                    bypasses++;
                }

                if (decoded["DetectedHacks"] != null)
                {
                    decoded["DetectedHacks"] = 0;
                    bypasses++;
                }
                if (decoded["DateTime"] != null)
                {
                    decoded["DateTime"] = DateTimeOffset.UtcNow.ToUnixTimeSeconds();

                    bypasses++;
                }
            }

            byte[] encoded = DgUtil.nk_encrypt(decoded);

            if (encoded == null)
            {
                ConsoleHandler.force_append_Notice("Encryption failed for some reason...");
                return;
            }

            File.WriteAllBytes(encryptedSave, encoded);
            ConsoleHandler.append_Force_CanRepeat("Finished writing save file...");
        }