mirror of
https://github.com/LBPUnion/UnionPatcher.git
synced 2025-08-02 14:18:44 +00:00
task test 1
This commit is contained in:
parent
b67f63fff4
commit
d9c1ff7b40
2 changed files with 159 additions and 137 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -9,6 +9,7 @@
|
||||||
*.user
|
*.user
|
||||||
*.userosscache
|
*.userosscache
|
||||||
*.sln.docstates
|
*.sln.docstates
|
||||||
|
.vscode
|
||||||
|
|
||||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
*.userprefs
|
*.userprefs
|
||||||
|
|
|
@ -5,6 +5,7 @@ using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using LBPUnion.UnionPatcher.Communication;
|
using LBPUnion.UnionPatcher.Communication;
|
||||||
|
|
||||||
namespace LBPUnion.UnionPatcher;
|
namespace LBPUnion.UnionPatcher;
|
||||||
|
@ -13,28 +14,33 @@ public class RemotePatch
|
||||||
{
|
{
|
||||||
private readonly PS3MAPI _ps3Mapi = new();
|
private readonly PS3MAPI _ps3Mapi = new();
|
||||||
|
|
||||||
private static Dictionary<string, string> GetUsers(string ps3Ip, string user, string pass)
|
private static Dictionary<string, string> GetUsersAsync(string ps3Ip, string user, string pass)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Getting users...");
|
Console.WriteLine("Getting users...");
|
||||||
|
|
||||||
Dictionary<string, string> users = new();
|
Task<Dictionary<string, string>> users = Task.Run(() =>
|
||||||
|
|
||||||
string[] userFolders = FTP.ListDirectory($"ftp://{ps3Ip}/dev_hdd0/home/", user, pass);
|
|
||||||
|
|
||||||
string username = "";
|
|
||||||
|
|
||||||
for (int i = 0; i < userFolders.Length; i++)
|
|
||||||
{
|
{
|
||||||
username = FTP.ReadFile($"ftp://{ps3Ip}/dev_hdd0/home/{userFolders[i]}/localusername", user,
|
Dictionary<string, string> users = new();
|
||||||
pass);
|
|
||||||
users.Add(userFolders[i], username);
|
|
||||||
|
|
||||||
Console.WriteLine("User found: " + username + $" <{userFolders[i]}>");
|
string[] userFolders = FTP.ListDirectory($"ftp://{ps3Ip}/dev_hdd0/home/", user, pass);
|
||||||
}
|
|
||||||
|
|
||||||
return users;
|
string username = "";
|
||||||
|
|
||||||
|
for (int i = 0; i < userFolders.Length; i++)
|
||||||
|
{
|
||||||
|
username = FTP.ReadFile($"ftp://{ps3Ip}/dev_hdd0/home/{userFolders[i]}/localusername", user,
|
||||||
|
pass);
|
||||||
|
users.Add(userFolders[i], username);
|
||||||
|
|
||||||
|
Console.WriteLine("User found: " + username + $" <{userFolders[i]}>");
|
||||||
|
}
|
||||||
|
|
||||||
|
return users;
|
||||||
|
});
|
||||||
|
|
||||||
|
return users.Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void LaunchSCETool(string args)
|
public static void LaunchSCETool(string args)
|
||||||
{
|
{
|
||||||
string platformExecutable = "";
|
string platformExecutable = "";
|
||||||
|
@ -44,13 +50,15 @@ public class RemotePatch
|
||||||
platformExecutable = "scetool/win64/scetool.exe";
|
platformExecutable = "scetool/win64/scetool.exe";
|
||||||
break;
|
break;
|
||||||
case OSPlatform.Linux:
|
case OSPlatform.Linux:
|
||||||
if(RuntimeInformation.ProcessArchitecture == Architecture.X64)
|
if (RuntimeInformation.ProcessArchitecture == Architecture.X64)
|
||||||
{
|
{
|
||||||
platformExecutable = "scetool/linux64/scetool";
|
platformExecutable = "scetool/linux64/scetool";
|
||||||
} else if (RuntimeInformation.ProcessArchitecture == Architecture.Arm)
|
}
|
||||||
|
else if (RuntimeInformation.ProcessArchitecture == Architecture.Arm)
|
||||||
{
|
{
|
||||||
platformExecutable = "scetool/linuxarm/scetool";
|
platformExecutable = "scetool/linuxarm/scetool";
|
||||||
} else if (RuntimeInformation.ProcessArchitecture == Architecture.Arm64)
|
}
|
||||||
|
else if (RuntimeInformation.ProcessArchitecture == Architecture.Arm64)
|
||||||
{
|
{
|
||||||
platformExecutable = "scetool/linuxarm64/scetool";
|
platformExecutable = "scetool/linuxarm64/scetool";
|
||||||
}
|
}
|
||||||
|
@ -90,151 +98,164 @@ public class RemotePatch
|
||||||
public void RevertEBOOT(string ps3ip, string gameID, string serverURL, string user, string pass)
|
public void RevertEBOOT(string ps3ip, string gameID, string serverURL, string user, string pass)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Restoring original EBOOT.BIN from EBOOT.BIN.BAK");
|
Console.WriteLine("Restoring original EBOOT.BIN from EBOOT.BIN.BAK");
|
||||||
|
|
||||||
// Create a simple directory structure
|
Task.Run(() =>
|
||||||
Directory.CreateDirectory(@"eboot");
|
|
||||||
Directory.CreateDirectory($@"eboot/{gameID}");
|
|
||||||
Directory.CreateDirectory($@"eboot/{gameID}/original");
|
|
||||||
|
|
||||||
// Now we'll check and see if a backup exists on the server, if so download it and then upload it back as EBOOT.BIN
|
|
||||||
if (FTP.FileExists($"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN.BAK", user, pass))
|
|
||||||
{
|
{
|
||||||
FTP.DownloadFile($"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN.BAK", @$"eboot/{gameID}/original/EBOOT.BIN.BAK", user, pass);
|
// Create a simple directory structure
|
||||||
FTP.UploadFile(@$"eboot/{gameID}/original/EBOOT.BIN.BAK", $"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN", user, pass);
|
Directory.CreateDirectory(@"eboot");
|
||||||
}
|
Directory.CreateDirectory($@"eboot/{gameID}");
|
||||||
else
|
Directory.CreateDirectory($@"eboot/{gameID}/original");
|
||||||
{
|
|
||||||
throw new WebException("Could not find EBOOT.BIN.BAK on server.");
|
// Now we'll check and see if a backup exists on the server, if so download it and then upload it back as EBOOT.BIN
|
||||||
}
|
if (FTP.FileExists($"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN.BAK", user, pass))
|
||||||
|
{
|
||||||
|
|
||||||
|
FTP.DownloadFile($"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN.BAK", @$"eboot/{gameID}/original/EBOOT.BIN.BAK", user, pass);
|
||||||
|
FTP.UploadFile(@$"eboot/{gameID}/original/EBOOT.BIN.BAK", $"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN", user, pass);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new WebException("Could not find EBOOT.BIN.BAK on server.");
|
||||||
|
}
|
||||||
|
}).Wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PSNEBOOTRemotePatch(string ps3ip, string gameID, string serverURL, string user, string pass)
|
public void PSNEBOOTRemotePatch(string ps3ip, string gameID, string serverURL, string user, string pass)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Detected Digital Copy - Running in Full Mode");
|
Console.WriteLine("Detected Digital Copy - Running in Full Mode");
|
||||||
|
|
||||||
string idps = "";
|
|
||||||
string contentID = "";
|
|
||||||
Dictionary<string, string> users;
|
|
||||||
|
|
||||||
this._ps3Mapi.ConnectTarget(ps3ip);
|
// Create a new thread so we don't occupy the UI thread.
|
||||||
this._ps3Mapi.PS3.RingBuzzer(PS3MAPI.PS3Cmd.BuzzerMode.Double);
|
Task.Run(() =>
|
||||||
this._ps3Mapi.PS3.Notify("UnionRemotePatcher Connected! Patching...");
|
|
||||||
|
|
||||||
// Create simple directory structure
|
|
||||||
Directory.CreateDirectory(@"rifs");
|
|
||||||
Directory.CreateDirectory(@"eboot");
|
|
||||||
Directory.CreateDirectory($@"eboot/{gameID}");
|
|
||||||
Directory.CreateDirectory($@"eboot/{gameID}/original");
|
|
||||||
Directory.CreateDirectory($@"eboot/{gameID}/patched");
|
|
||||||
|
|
||||||
// Let's grab and backup our EBOOT
|
|
||||||
FTP.DownloadFile($"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN",
|
|
||||||
@$"eboot/{gameID}/original/EBOOT.BIN", user, pass);
|
|
||||||
|
|
||||||
// Now we'll check and see if a backup exists on the server or not, if we don't have one on the server, then upload one
|
|
||||||
if (!FTP.FileExists($"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN.BAK", user, pass))
|
|
||||||
FTP.UploadFile(@$"eboot/{gameID}/original/EBOOT.BIN",
|
|
||||||
$"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN.BAK", user, pass);
|
|
||||||
|
|
||||||
// Start getting idps and act.dat - these will help us decrypt a PSN eboot
|
|
||||||
idps = PS3MAPI.PS3MAPIClientServer.PS3_GetIDPS();
|
|
||||||
|
|
||||||
File.WriteAllBytes(@"data/idps", IDPSHelper.StringToByteArray(idps));
|
|
||||||
|
|
||||||
// Scan the users on the system
|
|
||||||
users = GetUsers(ps3ip, user, pass);
|
|
||||||
|
|
||||||
// Scan the system for a license for the game
|
|
||||||
foreach (string currentUser in users.Keys.ToArray())
|
|
||||||
{
|
{
|
||||||
if (FTP.FileExists($"ftp://{ps3ip}/dev_hdd0/home/{currentUser}/exdata", user, pass))
|
string idps = "";
|
||||||
|
string contentID = "";
|
||||||
|
Dictionary<string, string> users;
|
||||||
|
|
||||||
|
this._ps3Mapi.ConnectTarget(ps3ip);
|
||||||
|
this._ps3Mapi.PS3.RingBuzzer(PS3MAPI.PS3Cmd.BuzzerMode.Double);
|
||||||
|
this._ps3Mapi.PS3.Notify("UnionRemotePatcher Connected! Patching...");
|
||||||
|
|
||||||
|
// Create simple directory structure
|
||||||
|
Directory.CreateDirectory(@"rifs");
|
||||||
|
Directory.CreateDirectory(@"eboot");
|
||||||
|
Directory.CreateDirectory($@"eboot/{gameID}");
|
||||||
|
Directory.CreateDirectory($@"eboot/{gameID}/original");
|
||||||
|
Directory.CreateDirectory($@"eboot/{gameID}/patched");
|
||||||
|
|
||||||
|
// Let's grab and backup our EBOOT
|
||||||
|
FTP.DownloadFile($"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN",
|
||||||
|
@$"eboot/{gameID}/original/EBOOT.BIN", user, pass);
|
||||||
|
|
||||||
|
// Now we'll check and see if a backup exists on the server or not, if we don't have one on the server, then upload one
|
||||||
|
if (!FTP.FileExists($"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN.BAK", user, pass))
|
||||||
|
FTP.UploadFile(@$"eboot/{gameID}/original/EBOOT.BIN",
|
||||||
|
$"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN.BAK", user, pass);
|
||||||
|
|
||||||
|
// Start getting idps and act.dat - these will help us decrypt a PSN eboot
|
||||||
|
idps = PS3MAPI.PS3MAPIClientServer.PS3_GetIDPS();
|
||||||
|
|
||||||
|
File.WriteAllBytes(@"data/idps", IDPSHelper.StringToByteArray(idps));
|
||||||
|
|
||||||
|
// Scan the users on the system
|
||||||
|
users = GetUsersAsync(ps3ip, user, pass);
|
||||||
|
|
||||||
|
// Scan the system for a license for the game
|
||||||
|
foreach (string currentUser in users.Keys.ToArray())
|
||||||
{
|
{
|
||||||
foreach (string fileName in FTP.ListDirectory(
|
if (FTP.FileExists($"ftp://{ps3ip}/dev_hdd0/home/{currentUser}/exdata", user, pass))
|
||||||
$"ftp://{ps3ip}/dev_hdd0/home/{currentUser}/exdata/", user, pass))
|
{
|
||||||
if (fileName.Contains(gameID))
|
foreach (string fileName in FTP.ListDirectory(
|
||||||
{
|
$"ftp://{ps3ip}/dev_hdd0/home/{currentUser}/exdata/", user, pass))
|
||||||
FTP.DownloadFile($"ftp://{ps3ip}/dev_hdd0/home/{currentUser}/exdata/act.dat", @"data/act.dat",
|
if (fileName.Contains(gameID))
|
||||||
user,
|
{
|
||||||
pass);
|
FTP.DownloadFile($"ftp://{ps3ip}/dev_hdd0/home/{currentUser}/exdata/act.dat", @"data/act.dat",
|
||||||
|
user,
|
||||||
FTP.DownloadFile($"ftp://{ps3ip}/dev_hdd0/home/{currentUser}/exdata/{fileName}",
|
pass);
|
||||||
@$"rifs/{fileName}", user, pass);
|
|
||||||
|
FTP.DownloadFile($"ftp://{ps3ip}/dev_hdd0/home/{currentUser}/exdata/{fileName}",
|
||||||
contentID = fileName.Substring(0, fileName.Length - 4);
|
@$"rifs/{fileName}", user, pass);
|
||||||
|
|
||||||
Console.WriteLine($"Got content ID {contentID}");
|
contentID = fileName.Substring(0, fileName.Length - 4);
|
||||||
}
|
|
||||||
|
Console.WriteLine($"Got content ID {contentID}");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Finally, let's decrypt the EBOOT.BIN
|
// Finally, let's decrypt the EBOOT.BIN
|
||||||
LaunchSCETool($" -v -d \"{Path.GetFullPath(@$"eboot/{gameID}/original/EBOOT.BIN")}\" \"{Path.GetFullPath(@$"eboot/{gameID}/original/EBOOT.ELF")}\"");
|
LaunchSCETool($" -v -d \"{Path.GetFullPath(@$"eboot/{gameID}/original/EBOOT.BIN")}\" \"{Path.GetFullPath(@$"eboot/{gameID}/original/EBOOT.ELF")}\"");
|
||||||
|
|
||||||
// Now, patch the EBOOT;
|
// Now, patch the EBOOT;
|
||||||
Patcher.PatchFile($"eboot/{gameID}/original/EBOOT.ELF", serverURL, $"eboot/{gameID}/patched/EBOOT.ELF");
|
Patcher.PatchFile($"eboot/{gameID}/original/EBOOT.ELF", serverURL, $"eboot/{gameID}/patched/EBOOT.ELF");
|
||||||
|
|
||||||
// Encrypt the EBOOT (PSN)
|
// Encrypt the EBOOT (PSN)
|
||||||
LaunchSCETool($"--verbose " +
|
LaunchSCETool($"--verbose " +
|
||||||
$"--sce-type=SELF" +
|
$"--sce-type=SELF" +
|
||||||
$" --skip-sections=FALSE" +
|
$" --skip-sections=FALSE" +
|
||||||
$" --self-add-shdrs=TRUE" +
|
$" --self-add-shdrs=TRUE" +
|
||||||
$" --compress-data=TRUE" +
|
$" --compress-data=TRUE" +
|
||||||
$" --key-revision=0A" +
|
$" --key-revision=0A" +
|
||||||
$" --self-app-version=0001000000000000" +
|
$" --self-app-version=0001000000000000" +
|
||||||
$" --self-auth-id=1010000001000003" +
|
$" --self-auth-id=1010000001000003" +
|
||||||
$" --self-vendor-id=01000002" +
|
$" --self-vendor-id=01000002" +
|
||||||
$" --self-ctrl-flags=0000000000000000000000000000000000000000000000000000000000000000" +
|
$" --self-ctrl-flags=0000000000000000000000000000000000000000000000000000000000000000" +
|
||||||
$" --self-cap-flags=00000000000000000000000000000000000000000000003B0000000100040000" +
|
$" --self-cap-flags=00000000000000000000000000000000000000000000003B0000000100040000" +
|
||||||
$" --self-type=NPDRM" +
|
$" --self-type=NPDRM" +
|
||||||
$" --self-fw-version=0003005500000000" +
|
$" --self-fw-version=0003005500000000" +
|
||||||
$" --np-license-type=FREE" +
|
$" --np-license-type=FREE" +
|
||||||
$" --np-app-type=SPRX" +
|
$" --np-app-type=SPRX" +
|
||||||
$" --np-content-id={contentID}" +
|
$" --np-content-id={contentID}" +
|
||||||
$" --np-real-fname=EBOOT.BIN" +
|
$" --np-real-fname=EBOOT.BIN" +
|
||||||
$" --encrypt eboot/{gameID}/patched/EBOOT.ELF eboot/{gameID}/patched/EBOOT.BIN");
|
$" --encrypt eboot/{gameID}/patched/EBOOT.ELF eboot/{gameID}/patched/EBOOT.BIN");
|
||||||
|
|
||||||
// And upload the encrypted, patched EBOOT to the system.
|
// And upload the encrypted, patched EBOOT to the system.
|
||||||
FTP.UploadFile(@$"eboot/{gameID}/patched/EBOOT.BIN",
|
FTP.UploadFile(@$"eboot/{gameID}/patched/EBOOT.BIN",
|
||||||
$"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN", user, pass);
|
$"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN", user, pass);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cut-down version that only patches disc copies
|
// Cut-down version that only patches disc copies
|
||||||
public void DiscEBOOTRemotePatch(string ps3ip, string gameID, string serverURL, string user, string pass)
|
public void DiscEBOOTRemotePatch(string ps3ip, string gameID, string serverURL, string user, string pass)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Detected Disc Copy - Running in Simplified Mode");
|
Console.WriteLine("Detected Disc Copy - Running in Simplified Mode");
|
||||||
|
|
||||||
// Create a simple directory structure
|
|
||||||
Directory.CreateDirectory(@"eboot");
|
|
||||||
Directory.CreateDirectory($@"eboot/{gameID}");
|
|
||||||
Directory.CreateDirectory($@"eboot/{gameID}/original");
|
|
||||||
Directory.CreateDirectory($@"eboot/{gameID}/patched");
|
|
||||||
|
|
||||||
// Let's grab and backup our EBOOT
|
// Create a new thread so we don't occupy the UI thread.
|
||||||
FTP.DownloadFile($"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN",
|
Task.Run(() =>
|
||||||
@$"eboot/{gameID}/original/EBOOT.BIN", user, pass);
|
{
|
||||||
|
// Create a simple directory structure
|
||||||
|
Directory.CreateDirectory(@"eboot");
|
||||||
|
Directory.CreateDirectory($@"eboot/{gameID}");
|
||||||
|
Directory.CreateDirectory($@"eboot/{gameID}/original");
|
||||||
|
Directory.CreateDirectory($@"eboot/{gameID}/patched");
|
||||||
|
|
||||||
// Now we'll check and see if a backup exists on the server or not, if we don't have one on the server, then upload one
|
// Let's grab and backup our EBOOT
|
||||||
if (!FTP.FileExists($"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN.BAK", user, pass))
|
FTP.DownloadFile($"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN",
|
||||||
FTP.UploadFile(@$"eboot/{gameID}/original/EBOOT.BIN",
|
@$"eboot/{gameID}/original/EBOOT.BIN", user, pass);
|
||||||
$"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN.BAK", user, pass);
|
|
||||||
|
|
||||||
// Check for keys in the data directory
|
// Now we'll check and see if a backup exists on the server or not, if we don't have one on the server, then upload one
|
||||||
if (!File.Exists("data/keys"))
|
if (!FTP.FileExists($"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN.BAK", user, pass))
|
||||||
throw new FileNotFoundException(
|
FTP.UploadFile(@$"eboot/{gameID}/original/EBOOT.BIN",
|
||||||
"UnionRemotePatcher cannot find the keys, ldr_curves, or vsh_curves files required to continue. Please make sure you have copies of these files placed in the data directory where you found the executable to run UnionRemotePatcher. Without them, we can't patch your game.");
|
$"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN.BAK", user, pass);
|
||||||
|
|
||||||
// Decrypt the EBOOT
|
// Check for keys in the data directory
|
||||||
LaunchSCETool($"-v -d eboot/{gameID}/original/EBOOT.BIN eboot/{gameID}/original/EBOOT.ELF");
|
if (!File.Exists("data/keys"))
|
||||||
|
throw new FileNotFoundException(
|
||||||
|
"UnionRemotePatcher cannot find the keys, ldr_curves, or vsh_curves files required to continue. Please make sure you have copies of these files placed in the data directory where you found the executable to run UnionRemotePatcher. Without them, we can't patch your game.");
|
||||||
|
|
||||||
// Now, patch the EBOOT;
|
// Decrypt the EBOOT
|
||||||
Patcher.PatchFile($"eboot/{gameID}/original/EBOOT.ELF", serverURL, $"eboot/{gameID}/patched/EBOOT.ELF");
|
LaunchSCETool($"-v -d eboot/{gameID}/original/EBOOT.BIN eboot/{gameID}/original/EBOOT.ELF");
|
||||||
|
|
||||||
// Encrypt the EBOOT (Disc)
|
// Now, patch the EBOOT;
|
||||||
LaunchSCETool(
|
Patcher.PatchFile($"eboot/{gameID}/original/EBOOT.ELF", serverURL, $"eboot/{gameID}/patched/EBOOT.ELF");
|
||||||
$" -v --sce-type=SELF --skip-sections=FALSE --key-revision=0A --self-app-version=0001000000000000 --self-auth-id=1010000001000003 --self-vendor-id=01000002 --self-ctrl-flags=0000000000000000000000000000000000000000000000000000000000000000 --self-cap-flags=00000000000000000000000000000000000000000000003B0000000100040000 --self-type=APP --self-fw-version=0003005500000000 --compress-data true --encrypt \"{Path.GetFullPath(@$"eboot/{gameID}/patched/EBOOT.ELF")}\" \"{Path.GetFullPath(@$"eboot/{gameID}/patched/EBOOT.BIN")}\"");
|
|
||||||
|
|
||||||
// And upload the encrypted, patched EBOOT to the system.
|
// Encrypt the EBOOT (Disc)
|
||||||
FTP.UploadFile(@$"eboot/{gameID}/patched/EBOOT.BIN",
|
LaunchSCETool(
|
||||||
$"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN", user, pass);
|
$" -v --sce-type=SELF --skip-sections=FALSE --key-revision=0A --self-app-version=0001000000000000 --self-auth-id=1010000001000003 --self-vendor-id=01000002 --self-ctrl-flags=0000000000000000000000000000000000000000000000000000000000000000 --self-cap-flags=00000000000000000000000000000000000000000000003B0000000100040000 --self-type=APP --self-fw-version=0003005500000000 --compress-data true --encrypt \"{Path.GetFullPath(@$"eboot/{gameID}/patched/EBOOT.ELF")}\" \"{Path.GetFullPath(@$"eboot/{gameID}/patched/EBOOT.BIN")}\"");
|
||||||
|
|
||||||
|
// And upload the encrypted, patched EBOOT to the system.
|
||||||
|
FTP.UploadFile(@$"eboot/{gameID}/patched/EBOOT.BIN",
|
||||||
|
$"ftp://{ps3ip}/dev_hdd0/game/{gameID}/USRDIR/EBOOT.BIN", user, pass);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue