mirror of
https://github.com/BestPig/BackPork.git
synced 2026-10-19 07:10:03 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ebac9ffd79 | ||
|
|
8649785cfa |
No files matched your search
@@ -32,6 +32,8 @@ Original concept and some code by idlesauce
|
||||
|
||||
## Usage
|
||||
|
||||
> Note: To boot a game, you must downgrade its `eboot.bin` and every `prx`/`sprx` using this tool [ps5_elf_sdk_downgrade.py](https://gist.github.com/idlesauce/2ded24b7b5ff296f21792a8202542aaa); without this, the system will refuse to launch the title.
|
||||
|
||||
1. Place your replacement libraries in a `fakelib` folder inside the game's installation directory (`PPSSAXXXXX/fakelib/`)
|
||||
2. Run the `backpork.elf` payload on your PS5
|
||||
3. Launch your game - the fakelibs will be automatically mounted
|
||||
@@ -49,6 +51,8 @@ It is recommended to sideload as few libraries as possible, as there is no guara
|
||||
|
||||
I provide patches in the `patches/` folder (BPS format) to patch libraries from firmware 10.01 and make them functional on firmware 7.61. This is probably achievable for lower firmwares as well, but it has not been tested and would require additional patches.
|
||||
|
||||
> Warning: Patches are split by firmware. I recommend using the highest patch set that matches your firmware instead of using lower versions because I had to alter the normal behavior of some functions to make it work.
|
||||
|
||||
To apply a patch:
|
||||
1. The library to patch must be decrypted (ELF format, not SELF)
|
||||
2. Use an online patcher like [RomPatcher.js](https://www.marcrobledo.com/RomPatcher.js/)
|
||||
@@ -68,5 +72,9 @@ This project is provided for educational and research purposes.
|
||||
|
||||
## Credits
|
||||
|
||||
- [idlesauce](https://github.com/idlesauce/) For the idea, code and support
|
||||
- [john-tornblom](https://github.com/john-tornblom) For the SDK
|
||||
- [idlesauce](https://github.com/idlesauce/) for the idea, code and support
|
||||
- [john-tornblom](https://github.com/john-tornblom) for the SDK
|
||||
- [EchoStretch](https://github.com/EchoStretch/) for endlessly testing my stupid, broken patches!
|
||||
- kira for helping me figure out some patches (also known as my useful notepad)
|
||||
- SlimGary for being there every day, for years.
|
||||
- [Hakim](https://x.com/Hakim9919271/status/2013605108848718219) for the love of **pork** 🐷😍
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <sys/mount.h>
|
||||
#include <sys/stat.h>
|
||||
@@ -17,6 +18,11 @@
|
||||
|
||||
#define PAYLOAD_NAME "backpork.elf"
|
||||
|
||||
typedef struct notify_request {
|
||||
char unused[45];
|
||||
char message[3075];
|
||||
} notify_request_t;
|
||||
|
||||
typedef struct app_info {
|
||||
uint32_t app_id;
|
||||
uint64_t unknown1;
|
||||
@@ -24,8 +30,18 @@ typedef struct app_info {
|
||||
char unknown2[0x3c];
|
||||
} app_info_t;
|
||||
|
||||
extern int sceKernelSendNotificationRequest(int, notify_request_t*, size_t, int);
|
||||
extern int sceKernelGetAppInfo(pid_t pid, app_info_t *info);
|
||||
|
||||
static void notify(const char* fmt, ...) {
|
||||
notify_request_t req = {};
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
vsnprintf(req.message, sizeof(req.message) - 1, fmt, args);
|
||||
va_end(args);
|
||||
sceKernelSendNotificationRequest(0, &req, sizeof(req), 0);
|
||||
}
|
||||
|
||||
// from john-tornblom
|
||||
static pid_t find_pid(const char *name) {
|
||||
int mib[4] = {1, 14, 8, 0};
|
||||
@@ -271,6 +287,7 @@ static void cleanup_game(pid_t pid, const char *sandbox_id, char *fake_mount_pat
|
||||
snprintf(sandbox_dir, sizeof(sandbox_dir), "/mnt/sandbox/%s", sandbox_id);
|
||||
printf("[INFO] Removing directory %s\n", sandbox_dir);
|
||||
if (cleanup_directory(sandbox_dir) == 0) {
|
||||
notify("Directory removed successfully.");
|
||||
printf("[INFO] Directory removed successfully\n");
|
||||
} else {
|
||||
printf("[WARNING] Failed to remove directory: %s\n", strerror(errno));
|
||||
@@ -307,6 +324,7 @@ static void patch_game(pid_t child_pid, const char *title_id) {
|
||||
return;
|
||||
}
|
||||
|
||||
notify("Detected game %s. Patching...", title_id);
|
||||
printf("[INFO] Detected game %s (pid %d) in sandbox %s. Patching...\n", title_id, child_pid, sandbox_id);
|
||||
|
||||
char src_path[PATH_MAX];
|
||||
@@ -315,6 +333,7 @@ static void patch_game(pid_t child_pid, const char *title_id) {
|
||||
char* fake_mount_path = mount_fakelibs(sandbox_id, src_path, child_pid, random_folder);
|
||||
|
||||
if (fake_mount_path) {
|
||||
notify("Patch successful. Waiting for game to exit...");
|
||||
printf("[INFO] Patch successful. Waiting for game to exit...\n");
|
||||
wait_for_pid_exit(child_pid);
|
||||
cleanup_game(child_pid, sandbox_id, fake_mount_path);
|
||||
@@ -358,6 +377,7 @@ int main() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
notify("Welcome To BackPork 0.1 By BestPig 🐷");
|
||||
printf("[INFO] Monitoring SceSysCore.elf (pid %d) for game launches...\n", syscore_pid);
|
||||
|
||||
pid_t child_pid = -1;
|
||||
@@ -401,3 +421,4 @@ int main() {
|
||||
close(kq);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# 6.xx Notes
|
||||
|
||||
Some games needs an extra patch on `sce_module/libc.prx` to work.
|
||||
|
||||
```bash
|
||||
perl -0777 -i -pe 's/4h6F1LLbTiw#A#B/IWIBBdTHit4#A#B/g' sce_module/libc.prx
|
||||
```
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
BPS1O‰O‰€|~–ž(“œž‘œž‘œž‘œž‘œž‘œž‘œ£@ŠØž‘£ÓÞO'…šN†¿�ß¡?€¡‰žAž\�¿À€� Œ�gŠÿ¡tƒ�¢!ÐtþÇ,}†4œ�Â|Ï\€P¹÷Cn@Vñî`
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Reference in new issue
Block a user