125 lines
3.6 KiB
JavaScript
125 lines
3.6 KiB
JavaScript
/**
|
|
* PSFree Payload Manager
|
|
* Compatible with PS4 FW 9.00 Browser
|
|
* TODO: Add support for multiple payloads and payload verification
|
|
*/
|
|
|
|
// Global state for payloads
|
|
window.payloadState = {
|
|
defaultPayload: null,
|
|
customPayloads: {},
|
|
selectedPayload: 'payload.bin'
|
|
};
|
|
|
|
// Function to load the default payload
|
|
function loadDefaultPayload() {
|
|
console.log('Loading default payload...');
|
|
|
|
fetch('./payload.bin')
|
|
.then(response => {
|
|
if (!response.ok) {
|
|
throw new Error('Failed to load default payload');
|
|
}
|
|
return response.arrayBuffer();
|
|
})
|
|
.then(arrayBuffer => {
|
|
window.payloadState.defaultPayload = new Uint32Array(arrayBuffer);
|
|
window.pld = window.payloadState.defaultPayload; // For backward compatibility
|
|
console.log('Default payload loaded successfully');
|
|
|
|
// Dispatch event for UI to update
|
|
document.dispatchEvent(new CustomEvent('payloadLoaded', {
|
|
detail: {
|
|
name: 'payload.bin',
|
|
size: arrayBuffer.byteLength
|
|
}
|
|
}));
|
|
})
|
|
.catch(error => {
|
|
console.error('Error loading default payload:', error);
|
|
|
|
// Dispatch event for UI to update
|
|
document.dispatchEvent(new CustomEvent('payloadError', {
|
|
detail: {
|
|
name: 'payload.bin',
|
|
error: error.message
|
|
}
|
|
}));
|
|
});
|
|
}
|
|
|
|
// Function to load a custom payload
|
|
function loadCustomPayload(name, arrayBuffer) {
|
|
console.log(`Loading custom payload: ${name}`);
|
|
|
|
try {
|
|
const payload = new Uint32Array(arrayBuffer);
|
|
window.payloadState.customPayloads[name] = payload;
|
|
|
|
console.log(`Custom payload "${name}" loaded successfully`);
|
|
|
|
// Dispatch event for UI to update
|
|
document.dispatchEvent(new CustomEvent('customPayloadLoaded', {
|
|
detail: {
|
|
name: name,
|
|
size: arrayBuffer.byteLength
|
|
}
|
|
}));
|
|
|
|
return true;
|
|
} catch (error) {
|
|
console.error(`Error loading custom payload "${name}":`, error);
|
|
|
|
// Dispatch event for UI to update
|
|
document.dispatchEvent(new CustomEvent('payloadError', {
|
|
detail: {
|
|
name: name,
|
|
error: error.message
|
|
}
|
|
}));
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Function to select a payload
|
|
function selectPayload(name) {
|
|
console.log(`Selecting payload: ${name}`);
|
|
|
|
if (name === 'payload.bin') {
|
|
if (window.payloadState.defaultPayload) {
|
|
window.pld = window.payloadState.defaultPayload;
|
|
window.payloadState.selectedPayload = name;
|
|
return true;
|
|
}
|
|
return false;
|
|
} else if (window.payloadState.customPayloads[name]) {
|
|
window.pld = window.payloadState.customPayloads[name];
|
|
window.payloadState.selectedPayload = name;
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// Function to get the currently selected payload
|
|
function getSelectedPayload() {
|
|
const name = window.payloadState.selectedPayload;
|
|
|
|
if (name === 'payload.bin') {
|
|
return window.payloadState.defaultPayload;
|
|
} else {
|
|
return window.payloadState.customPayloads[name];
|
|
}
|
|
}
|
|
|
|
// Initialize by loading the default payload
|
|
loadDefaultPayload();
|
|
|
|
// Export functions to window for access from other scripts
|
|
window.payloadManager = {
|
|
loadCustomPayload,
|
|
selectPayload,
|
|
getSelectedPayload
|
|
};
|