diff --git a/CacheMaker.py b/CacheMaker.py new file mode 100644 index 0000000..9864b0a --- /dev/null +++ b/CacheMaker.py @@ -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() \ No newline at end of file diff --git a/PSFree.manifest b/PSFree.manifest new file mode 100644 index 0000000..baa6b20 --- /dev/null +++ b/PSFree.manifest @@ -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: +* diff --git a/includes/index.css b/includes/index.css new file mode 100644 index 0000000..d4f579f --- /dev/null +++ b/includes/index.css @@ -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; +} \ No newline at end of file diff --git a/includes/js/index.js b/includes/js/index.js new file mode 100644 index 0000000..0d802ab --- /dev/null +++ b/includes/js/index.js @@ -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 = ` + + `; + 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); + } diff --git a/includes/payloads/Bins/Dumper/appdumper.bin b/includes/payloads/Bins/Dumper/appdumper.bin new file mode 100644 index 0000000..3405167 Binary files /dev/null and b/includes/payloads/Bins/Dumper/appdumper.bin differ diff --git a/includes/payloads/Bins/Dumper/kerneldumper.bin b/includes/payloads/Bins/Dumper/kerneldumper.bin new file mode 100644 index 0000000..9e2d17c Binary files /dev/null and b/includes/payloads/Bins/Dumper/kerneldumper.bin differ diff --git a/includes/payloads/Bins/Dumper/moduledumper.bin b/includes/payloads/Bins/Dumper/moduledumper.bin new file mode 100644 index 0000000..669b44f Binary files /dev/null and b/includes/payloads/Bins/Dumper/moduledumper.bin differ diff --git a/includes/payloads/Bins/Dumper/ps4-dumper-vtx-900.bin b/includes/payloads/Bins/Dumper/ps4-dumper-vtx-900.bin new file mode 100644 index 0000000..4ad6248 Binary files /dev/null and b/includes/payloads/Bins/Dumper/ps4-dumper-vtx-900.bin differ diff --git a/includes/payloads/Bins/GTA/ArabicGuy-1.0-1.27-rfoodxmodz.bin b/includes/payloads/Bins/GTA/ArabicGuy-1.0-1.27-rfoodxmodz.bin new file mode 100644 index 0000000..d2fb727 Binary files /dev/null and b/includes/payloads/Bins/GTA/ArabicGuy-1.0-1.27-rfoodxmodz.bin differ diff --git a/includes/payloads/Bins/GTA/ArabicGuy-1.0-1.32-rfoodxmodz.bin b/includes/payloads/Bins/GTA/ArabicGuy-1.0-1.32-rfoodxmodz.bin new file mode 100644 index 0000000..3549749 Binary files /dev/null and b/includes/payloads/Bins/GTA/ArabicGuy-1.0-1.32-rfoodxmodz.bin differ diff --git a/includes/payloads/Bins/GTA/ArabicGuy-1.0-1.33-rfoodxmodz.bin b/includes/payloads/Bins/GTA/ArabicGuy-1.0-1.33-rfoodxmodz.bin new file mode 100644 index 0000000..4f7a12d Binary files /dev/null and b/includes/payloads/Bins/GTA/ArabicGuy-1.0-1.33-rfoodxmodz.bin differ diff --git a/includes/payloads/Bins/GTA/BeefQueefMod-1.33.bin b/includes/payloads/Bins/GTA/BeefQueefMod-1.33.bin new file mode 100644 index 0000000..22c8213 Binary files /dev/null and b/includes/payloads/Bins/GTA/BeefQueefMod-1.33.bin differ diff --git a/includes/payloads/Bins/GTA/BeefQueefMod-1.34.bin b/includes/payloads/Bins/GTA/BeefQueefMod-1.34.bin new file mode 100644 index 0000000..dfed540 Binary files /dev/null and b/includes/payloads/Bins/GTA/BeefQueefMod-1.34.bin differ diff --git a/includes/payloads/Bins/GTA/BeefQueefMod-1.38.bin b/includes/payloads/Bins/GTA/BeefQueefMod-1.38.bin new file mode 100644 index 0000000..fca2039 Binary files /dev/null and b/includes/payloads/Bins/GTA/BeefQueefMod-1.38.bin differ diff --git a/includes/payloads/Bins/GTA/WildeModz-1.32.bin b/includes/payloads/Bins/GTA/WildeModz-1.32.bin new file mode 100644 index 0000000..ec0aac6 Binary files /dev/null and b/includes/payloads/Bins/GTA/WildeModz-1.32.bin differ diff --git a/includes/payloads/Bins/GTA/WildeModz-1.33.bin b/includes/payloads/Bins/GTA/WildeModz-1.33.bin new file mode 100644 index 0000000..962e856 Binary files /dev/null and b/includes/payloads/Bins/GTA/WildeModz-1.33.bin differ diff --git a/includes/payloads/Bins/GTA/WildeModz-1.38.bin b/includes/payloads/Bins/GTA/WildeModz-1.38.bin new file mode 100644 index 0000000..5e12e75 Binary files /dev/null and b/includes/payloads/Bins/GTA/WildeModz-1.38.bin differ diff --git a/includes/payloads/Bins/Linux/LinuxLoader-900-2gb.bin b/includes/payloads/Bins/Linux/LinuxLoader-900-2gb.bin new file mode 100644 index 0000000..25f9e03 Binary files /dev/null and b/includes/payloads/Bins/Linux/LinuxLoader-900-2gb.bin differ diff --git a/includes/payloads/Bins/Linux/LinuxLoader-900-3gb.bin b/includes/payloads/Bins/Linux/LinuxLoader-900-3gb.bin new file mode 100644 index 0000000..ab51b41 Binary files /dev/null and b/includes/payloads/Bins/Linux/LinuxLoader-900-3gb.bin differ diff --git a/includes/payloads/Bins/Linux/LinuxLoader-900-4gb.bin b/includes/payloads/Bins/Linux/LinuxLoader-900-4gb.bin new file mode 100644 index 0000000..af20feb Binary files /dev/null and b/includes/payloads/Bins/Linux/LinuxLoader-900-4gb.bin differ diff --git a/includes/payloads/Bins/Linux/LinuxLoader-900-5gb.bin b/includes/payloads/Bins/Linux/LinuxLoader-900-5gb.bin new file mode 100644 index 0000000..3ff09d1 Binary files /dev/null and b/includes/payloads/Bins/Linux/LinuxLoader-900-5gb.bin differ diff --git a/includes/payloads/Bins/Linux/LinuxLoader-900.bin b/includes/payloads/Bins/Linux/LinuxLoader-900.bin new file mode 100644 index 0000000..c8483c9 Binary files /dev/null and b/includes/payloads/Bins/Linux/LinuxLoader-900.bin differ diff --git a/includes/payloads/Bins/RDR2/OystersMenu-1.00-FREE.bin b/includes/payloads/Bins/RDR2/OystersMenu-1.00-FREE.bin new file mode 100644 index 0000000..cf78ab3 Binary files /dev/null and b/includes/payloads/Bins/RDR2/OystersMenu-1.00-FREE.bin differ diff --git a/includes/payloads/Bins/RDR2/OystersMenu-1.13-FREE.bin b/includes/payloads/Bins/RDR2/OystersMenu-1.13-FREE.bin new file mode 100644 index 0000000..eba01c2 Binary files /dev/null and b/includes/payloads/Bins/RDR2/OystersMenu-1.13-FREE.bin differ diff --git a/includes/payloads/Bins/RDR2/OystersMenu-1.19-FREE.bin b/includes/payloads/Bins/RDR2/OystersMenu-1.19-FREE.bin new file mode 100644 index 0000000..eecd1e2 Binary files /dev/null and b/includes/payloads/Bins/RDR2/OystersMenu-1.19-FREE.bin differ diff --git a/includes/payloads/Bins/RDR2/OystersMenu-1.24-FREE.bin b/includes/payloads/Bins/RDR2/OystersMenu-1.24-FREE.bin new file mode 100644 index 0000000..2246fcb Binary files /dev/null and b/includes/payloads/Bins/RDR2/OystersMenu-1.24-FREE.bin differ diff --git a/includes/payloads/Bins/RDR2/OystersMenu-1.29-FREE.bin b/includes/payloads/Bins/RDR2/OystersMenu-1.29-FREE.bin new file mode 100644 index 0000000..3daa7ac Binary files /dev/null and b/includes/payloads/Bins/RDR2/OystersMenu-1.29-FREE.bin differ diff --git a/includes/payloads/Bins/Tools/Orbis-Toolbox-900.bin b/includes/payloads/Bins/Tools/Orbis-Toolbox-900.bin new file mode 100644 index 0000000..ff2be01 Binary files /dev/null and b/includes/payloads/Bins/Tools/Orbis-Toolbox-900.bin differ diff --git a/includes/payloads/Bins/Tools/ToCex.bin b/includes/payloads/Bins/Tools/ToCex.bin new file mode 100644 index 0000000..a81d8a9 Binary files /dev/null and b/includes/payloads/Bins/Tools/ToCex.bin differ diff --git a/includes/payloads/Bins/Tools/ToDev.bin b/includes/payloads/Bins/Tools/ToDev.bin new file mode 100644 index 0000000..0da9f26 Binary files /dev/null and b/includes/payloads/Bins/Tools/ToDev.bin differ diff --git a/includes/payloads/Bins/Tools/ToDex.bin b/includes/payloads/Bins/Tools/ToDex.bin new file mode 100644 index 0000000..6e6deb7 Binary files /dev/null and b/includes/payloads/Bins/Tools/ToDex.bin differ diff --git a/includes/payloads/Bins/Tools/ToKratos.bin b/includes/payloads/Bins/Tools/ToKratos.bin new file mode 100644 index 0000000..005ce8a Binary files /dev/null and b/includes/payloads/Bins/Tools/ToKratos.bin differ diff --git a/includes/payloads/Bins/Tools/WebRTE_900.bin b/includes/payloads/Bins/Tools/WebRTE_900.bin new file mode 100644 index 0000000..3ffaafe Binary files /dev/null and b/includes/payloads/Bins/Tools/WebRTE_900.bin differ diff --git a/includes/payloads/Bins/Tools/app2usb.bin b/includes/payloads/Bins/Tools/app2usb.bin new file mode 100644 index 0000000..4dd8c9d Binary files /dev/null and b/includes/payloads/Bins/Tools/app2usb.bin differ diff --git a/includes/payloads/Bins/Tools/appcache-install.bin b/includes/payloads/Bins/Tools/appcache-install.bin new file mode 100644 index 0000000..88fec03 Binary files /dev/null and b/includes/payloads/Bins/Tools/appcache-install.bin differ diff --git a/includes/payloads/Bins/Tools/backupdb.bin b/includes/payloads/Bins/Tools/backupdb.bin new file mode 100644 index 0000000..283d078 Binary files /dev/null and b/includes/payloads/Bins/Tools/backupdb.bin differ diff --git a/includes/payloads/Bins/Tools/disableaslr.bin b/includes/payloads/Bins/Tools/disableaslr.bin new file mode 100644 index 0000000..253d285 Binary files /dev/null and b/includes/payloads/Bins/Tools/disableaslr.bin differ diff --git a/includes/payloads/Bins/Tools/disableupdates.bin b/includes/payloads/Bins/Tools/disableupdates.bin new file mode 100644 index 0000000..83695f7 Binary files /dev/null and b/includes/payloads/Bins/Tools/disableupdates.bin differ diff --git a/includes/payloads/Bins/Tools/enable-browser.bin b/includes/payloads/Bins/Tools/enable-browser.bin new file mode 100644 index 0000000..29340cc Binary files /dev/null and b/includes/payloads/Bins/Tools/enable-browser.bin differ diff --git a/includes/payloads/Bins/Tools/enableupdates.bin b/includes/payloads/Bins/Tools/enableupdates.bin new file mode 100644 index 0000000..69be472 Binary files /dev/null and b/includes/payloads/Bins/Tools/enableupdates.bin differ diff --git a/includes/payloads/Bins/Tools/exitidu.bin b/includes/payloads/Bins/Tools/exitidu.bin new file mode 100644 index 0000000..2831f4e Binary files /dev/null and b/includes/payloads/Bins/Tools/exitidu.bin differ diff --git a/includes/payloads/Bins/Tools/ftp.bin b/includes/payloads/Bins/Tools/ftp.bin new file mode 100644 index 0000000..fddf40f Binary files /dev/null and b/includes/payloads/Bins/Tools/ftp.bin differ diff --git a/includes/payloads/Bins/Tools/historyblocker.bin b/includes/payloads/Bins/Tools/historyblocker.bin new file mode 100644 index 0000000..f1c02d5 Binary files /dev/null and b/includes/payloads/Bins/Tools/historyblocker.bin differ diff --git a/includes/payloads/Bins/Tools/permanent-uart.bin b/includes/payloads/Bins/Tools/permanent-uart.bin new file mode 100644 index 0000000..87b824c Binary files /dev/null and b/includes/payloads/Bins/Tools/permanent-uart.bin differ diff --git a/includes/payloads/Bins/Tools/ps4debug.bin b/includes/payloads/Bins/Tools/ps4debug.bin new file mode 100644 index 0000000..76fcaf5 Binary files /dev/null and b/includes/payloads/Bins/Tools/ps4debug.bin differ diff --git a/includes/payloads/Bins/Tools/pup-decrypt.bin b/includes/payloads/Bins/Tools/pup-decrypt.bin new file mode 100644 index 0000000..7afac47 Binary files /dev/null and b/includes/payloads/Bins/Tools/pup-decrypt.bin differ diff --git a/includes/payloads/Bins/Tools/restoredb.bin b/includes/payloads/Bins/Tools/restoredb.bin new file mode 100644 index 0000000..6a7191a Binary files /dev/null and b/includes/payloads/Bins/Tools/restoredb.bin differ diff --git a/includes/payloads/Bins/Tools/rif-renamer.bin b/includes/payloads/Bins/Tools/rif-renamer.bin new file mode 100644 index 0000000..12e8acd Binary files /dev/null and b/includes/payloads/Bins/Tools/rif-renamer.bin differ diff --git a/includes/payloads/Bins/Tools/rifrenamer.bin b/includes/payloads/Bins/Tools/rifrenamer.bin new file mode 100644 index 0000000..b32271d Binary files /dev/null and b/includes/payloads/Bins/Tools/rifrenamer.bin differ diff --git a/includes/payloads/GoldHEN/goldhen_2.3_702L.bin b/includes/payloads/GoldHEN/goldhen_2.3_702L.bin new file mode 100644 index 0000000..760e1b8 Binary files /dev/null and b/includes/payloads/GoldHEN/goldhen_2.3_702L.bin differ diff --git a/includes/payloads/GoldHEN/goldhen_2.3_755L.bin b/includes/payloads/GoldHEN/goldhen_2.3_755L.bin new file mode 100644 index 0000000..30b6a77 Binary files /dev/null and b/includes/payloads/GoldHEN/goldhen_2.3_755L.bin differ diff --git a/includes/payloads/GoldHEN/goldhen_2.4b18.3.bin b/includes/payloads/GoldHEN/goldhen_2.4b18.3.bin new file mode 100644 index 0000000..d5541fa Binary files /dev/null and b/includes/payloads/GoldHEN/goldhen_2.4b18.3.bin differ diff --git a/includes/payloads/GoldHEN/goldhen_v2.4b18.5.bin b/includes/payloads/GoldHEN/goldhen_v2.4b18.5.bin new file mode 100644 index 0000000..7850a6f Binary files /dev/null and b/includes/payloads/GoldHEN/goldhen_v2.4b18.5.bin differ diff --git a/includes/payloads/HEN/HEN.bin b/includes/payloads/HEN/HEN.bin new file mode 100644 index 0000000..ff498f3 Binary files /dev/null and b/includes/payloads/HEN/HEN.bin differ diff --git a/includes/payloads/Jailbreak.js b/includes/payloads/Jailbreak.js new file mode 100644 index 0000000..c7892a0 --- /dev/null +++ b/includes/payloads/Jailbreak.js @@ -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'; +} \ No newline at end of file diff --git a/includes/payloads/payloads.js b/includes/payloads/payloads.js new file mode 100644 index 0000000..cda9eb3 --- /dev/null +++ b/includes/payloads/payloads.js @@ -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");//< { + import('../../src/alert.mjs'); + Loadpayloadonline(PLfile); + }, 3000); // 3 seconds delay + return; + } + }) + } + }); + } else { + alert("Cannot Load Payload Because The BinLoader Server Is Busy");//< + + + + + PSFree Enhanced + + + + +
+
+ +
+ + +
+ + + + + +

-

+ + +
+

Choose your HEN flavor

+
+ + +
+
+ + + +
+ + +
+
+
+ +
+

Exploit status

+
+
--
+
+
+
+ +
+

Important notice:

+
    +
  • Make sure to close all apps before running the exploit
  • +
  • Make sure to delete cache data before running the exploit for the first time
  • +
  • It might take you more than one time
  • +
+
+
+
+
+ + +
+

Payloads

+
+
    + + + +
+
+
+
+
+
+ + +
+
+
+ + + +
+ +
+
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/about.html b/src/about.html deleted file mode 100644 index 5668d71..0000000 --- a/src/about.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - About PSFree - - - PSFree is an exploit chain for PS4 and PS5.
- PSFree is free software. PSFree's license is GNU-AGPL-3.0-or-later.
- Here is the source code of this program:
-
- HTML files:
- index.html
- about.html
- JavaScript files:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
alert.mjsGNU-AGPL-3.0-or-laterdownload
config.mjsGNU-AGPL-3.0-or-laterdownload
lapse.mjsGNU-AGPL-3.0-or-laterdownload
psfree.mjsGNU-AGPL-3.0-or-laterdownload
send.mjsGNU-AGPL-3.0-or-laterdownload
lapse/ps4/800.mjsGNU-AGPL-3.0-or-laterdownload
lapse/ps4/850.mjsGNU-AGPL-3.0-or-laterdownload
lapse/ps4/852.mjsGNU-AGPL-3.0-or-laterdownload
lapse/ps4/900.mjsGNU-AGPL-3.0-or-laterdownload
lapse/ps4/903.mjsGNU-AGPL-3.0-or-laterdownload
lapse/ps4/950.mjsGNU-AGPL-3.0-or-laterdownload
module/chain.mjsGNU-AGPL-3.0-or-laterdownload
module/int64.mjsGNU-AGPL-3.0-or-laterdownload
module/mem.mjsGNU-AGPL-3.0-or-laterdownload
module/memtools.mjsGNU-AGPL-3.0-or-laterdownload
module/offset.mjsGNU-AGPL-3.0-or-laterdownload
module/rw.mjsGNU-AGPL-3.0-or-laterdownload
module/utils.mjsGNU-AGPL-3.0-or-laterdownload
module/view.mjsGNU-AGPL-3.0-or-laterdownload
rop/ps4/800.mjsGNU-AGPL-3.0-or-laterdownload
rop/ps4/850.mjsGNU-AGPL-3.0-or-laterdownload
rop/ps4/900.mjsGNU-AGPL-3.0-or-laterdownload
rop/ps4/950.mjsGNU-AGPL-3.0-or-laterdownload
- kpatch/ files:
- kpatch/800.c
- kpatch/850.c
- kpatch/900.c
- kpatch/903.c
- kpatch/950.c
- kpatch/Makefile
- kpatch/script.ld
- kpatch/types.h
- kpatch/utils.h
- fonts/ files:
- fonts/FONTS.LICENSE
- fonts/LiberationMono-Regular.ttf
- fonts/README.txt
- - diff --git a/src/index.html b/src/index.html deleted file mode 100644 index a04fe64..0000000 --- a/src/index.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - exploit - - - - PSFree: A PS4/PS5 Exploit Chain
- See JavaScript license information for the source code and license.
-

-  
-  
-
diff --git a/src/lapse.mjs b/src/lapse.mjs
index 3c6a8d3..40105d2 100644
--- a/src/lapse.mjs
+++ b/src/lapse.mjs
@@ -1979,7 +1979,16 @@ function runPayload(path) {
 
 kexploit().then((success) => {
   if (success) {
-    // runPayload("./payload.bin");
-    runBinLoader();
+    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
+}
\ No newline at end of file
diff --git a/src/lapse/ps4/700.mjs b/src/lapse/ps4/700.mjs
index 4a9c6e1..e0ac04c 100644
--- a/src/lapse/ps4/700.mjs
+++ b/src/lapse/ps4/700.mjs
@@ -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`
diff --git a/src/lapse/ps4/750.mjs b/src/lapse/ps4/750.mjs
index 9a16db2..a3c10a4 100644
--- a/src/lapse/ps4/750.mjs
+++ b/src/lapse/ps4/750.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`
diff --git a/src/lapse/ps4/751.mjs b/src/lapse/ps4/751.mjs
index 541ef99..81238c1 100644
--- a/src/lapse/ps4/751.mjs
+++ b/src/lapse/ps4/751.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.
diff --git a/src/lapse/ps4/800.mjs b/src/lapse/ps4/800.mjs
index b29d107..6986199 100644
--- a/src/lapse/ps4/800.mjs
+++ b/src/lapse/ps4/800.mjs
@@ -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`
diff --git a/src/lapse/ps4/850.mjs b/src/lapse/ps4/850.mjs
index f7d2475..4099a00 100644
--- a/src/lapse/ps4/850.mjs
+++ b/src/lapse/ps4/850.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`
diff --git a/src/lapse/ps4/852.mjs b/src/lapse/ps4/852.mjs
index 25f65cd..67671fa 100644
--- a/src/lapse/ps4/852.mjs
+++ b/src/lapse/ps4/852.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`
diff --git a/src/lapse/ps4/900.mjs b/src/lapse/ps4/900.mjs
index 407dc9d..1e1d232 100644
--- a/src/lapse/ps4/900.mjs
+++ b/src/lapse/ps4/900.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`
diff --git a/src/lapse/ps4/903.mjs b/src/lapse/ps4/903.mjs
index fb1179d..8604eeb 100644
--- a/src/lapse/ps4/903.mjs
+++ b/src/lapse/ps4/903.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`
diff --git a/src/lapse/ps4/950.mjs b/src/lapse/ps4/950.mjs
index 085d74e..ab5598c 100644
--- a/src/lapse/ps4/950.mjs
+++ b/src/lapse/ps4/950.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`
diff --git a/src/rop/ps4/700.mjs b/src/rop/ps4/700.mjs
index b693100..ab68c6f 100644
--- a/src/rop/ps4/700.mjs
+++ b/src/rop/ps4/700.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);