62 lines
2.2 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|