chovy-sign/LibChovy/VersionKey/CMAVersionKeyHelper.cs

62 lines
2.2 KiB
C#

using GameBuilder.Psp;
using Li.Utilities;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Vita.ContentManager;
using Vita.PsvImgTools;
namespace LibChovy.VersionKey
{
public class CMAVersionKeyHelper
{
public static PSVIMGFileStream? GetFileFromPsvImg(string psvImgFile, string fileToOpen, byte[] cmaKey)
{
try
{
FileStream psvImgFileStream = File.OpenRead(psvImgFile);
PSVIMGStream psvImgStream = new PSVIMGStream(psvImgFileStream, cmaKey);
PSVIMGFileStream fileStream = new PSVIMGFileStream(psvImgStream, fileToOpen);
return fileStream;
}
catch { return null; }
}
public static NpDrmInfo? GetKeyFromGamePsvimg(string gameBackupFolder, string accountId, int keyIndex)
{
string gamePsvimgFile = Path.Combine(gameBackupFolder, "game", "game.psvimg");
if (!File.Exists(gamePsvimgFile)) return null;
byte[] accountIdBin = MathUtil.StringToByteArray(accountId);
byte[] cmaKey = KeyGenerator.GenerateKey(accountIdBin);
using (PSVIMGFileStream? pbp = GetFileFromPsvImg(gamePsvimgFile, "/EBOOT.PBP", cmaKey))
{
if (pbp is null) return null;
return EbootPbpMethod.GetVersionKey(pbp, keyIndex);
}
}
public static NpDrmRif? GetRifFromLicensePsvimg(string gameBackupFolder, string accountId)
{
string licensePsvImgFile = Path.Combine(gameBackupFolder, "license", "license.psvimg");
if (!File.Exists(licensePsvImgFile)) return null;
byte[] accountIdBin = MathUtil.StringToByteArray(accountId);
byte[] cmaKey = KeyGenerator.GenerateKey(accountIdBin);
using (PSVIMGFileStream? rif = GetFileFromPsvImg(licensePsvImgFile, ".RIF", cmaKey))
{
if (rif is null) return null;
byte[] rifData = new byte[rif.Length];
rif.Read(rifData, 0x00, rifData.Length);
return new NpDrmRif(rifData);
}
}
}
}