Added new entry
This commit is contained in:
@@ -208,6 +208,9 @@ namespace AssetStudio
|
||||
break;
|
||||
case GameType.GirlsFrontline:
|
||||
reader = DecryptGirlsFrontline(reader);
|
||||
break;
|
||||
case GameType.Reverse1999:
|
||||
reader = DecryptReverse1999(reader);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user