Added new entry

This commit is contained in:
Razmoth
2023-10-28 16:59:16 +04:00
parent fabdaec614
commit e863310354
3 changed files with 58 additions and 1 deletions

View File

@@ -208,6 +208,9 @@ namespace AssetStudio
break;
case GameType.GirlsFrontline:
reader = DecryptGirlsFrontline(reader);
break;
case GameType.Reverse1999:
reader = DecryptReverse1999(reader);
break;
}
}

View File

@@ -40,6 +40,7 @@ namespace AssetStudio
Games.Add(index++, new Game(GameType.ProjectSekai));
Games.Add(index++, new Game(GameType.CodenameJump));
Games.Add(index++, new Game(GameType.GirlsFrontline));
Games.Add(index++, new Game(GameType.Reverse1999));
}
public static Game GetGame(GameType gameType) => GetGame((int)gameType);
public static Game GetGame(int index)
@@ -150,7 +151,8 @@ namespace AssetStudio
AliceGearAegis,
ProjectSekai,
CodenameJump,
GirlsFrontline
GirlsFrontline,
Reverse1999
}
public static class GameTypes

View File

@@ -898,5 +898,57 @@ namespace AssetStudio
ms.Position = 0;
return new FileReader(reader.FullPath, ms);
}
public static FileReader DecryptReverse1999(FileReader reader)
{
Logger.Verbose($"Attempting to decrypt file {reader.FileName} with Reverse: 1999 encryption");
var signatureBytes = reader.ReadBytes(8);
var signature = Encoding.UTF8.GetString(signatureBytes[..7]);
if (signature == "UnityFS")
{
Logger.Verbose("Found UnityFS signature, file might not be encrypted");
reader.Position = 0;
return reader;
}
var key = GetAbEncryptKey(Path.GetFileNameWithoutExtension(reader.FileName));
for (int i = 0; i < signatureBytes.Length; i++)
{
signatureBytes[i] ^= key;
}
signature = Encoding.UTF8.GetString(signatureBytes[..7]);
if (signature == "UnityFS")
{
Logger.Verbose($"Found UnityFS signature, key 0x{key:X2} is valid, decrypting the rest of the stream");
var remaining = reader.ReadBytes((int)reader.Remaining);
for (int i = 0; i < remaining.Length; i++)
{
remaining[i] ^= key;
}
Logger.Verbose("Decrypted Reverse: 1999 file successfully !!");
var stream = new MemoryStream();
stream.Write(signatureBytes);
stream.Write(remaining);
stream.Position = 0;
return new FileReader(reader.FullPath, stream);
}
Logger.Verbose("File doesn't match any of the encryption types");
reader.Position = 0;
return reader;
static byte GetAbEncryptKey(string md5Name)
{
byte key = 0;
foreach (var c in md5Name)
{
key += (byte)c;
}
return (byte)(key + (byte)(2 * ((key & 1) + 1)));
}
}
}
}