Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,30 @@
# Repo moved to [ChronoSwitch](https://github.com/PSP-Archive/Chronoswitch)


# Chronoswitch Downgrader
Chronoswitch is a downgrader for the Playstation Portable (PSP).

## Installation
Download and extract the latest version from the releases on this github page. Copy the `PSP` folder from the extracted output to your memory stick. You will need the firmware update for version you wish to downgrade to. If you want to downgrade to 6.60, you will need the 6.60 official update. If you're downgrading a PSPgo, make sure you download the official firmware appropriate for that device.

Copy the official firmware update to `PSP/GAME/UPDATE/EBOOT.PBP` on your memory stick. If you're using a PSPgo, make sure this copied to the internal storage instead.
Copy the official firmware update to `PSP/GAME/UPDATE/EBOOT.PBP` on your memory stick. If you're using a PSPgo, you can use internal storage or the memory stick for the official firmware EBOOT

The downgrader is "signed", and can be launched without having a custom firmware installed. Once you run the application, follow the on-screen instructions.

## Changelog
### Version 7.6.1
* Added more print statements for less common issues with parsing EBOOT.PBP or the buffer
### Version 7.6
* Changed Default color, makes it a bit easier to read.
* Detect which OFW you have to make sure your flashing the proper model OFW. ( i.e You can only flash GO OFW on GO and vice versa )
### Version 7.5
* Updated Tools to encrypt EBOOT to be OS agnostic ( from Yoti's psp_pspident )
* Bugfix: GO had issue running with just Infinity/OFW running.
### Version 7.4
* PSP GO cleanup
* Detect if EBOOT.PBP is missing from `PSP/GAME/UPDATE/`
### Version 7.3
* PSP GO can boot from ms0/ef0
### Version 7.2
* Replaced 'factory firmware limitation', which prevented certain PSPs from being downgradable at all or limited them from being downgraded to certain firmwares they theoretically support.
* This fixes most cases where an IDXFFFFFFFF or CAAFFFFFCF7 error could appear.
Expand Down
20 changes: 14 additions & 6 deletions src/Makefile.signed
Original file line number Diff line number Diff line change
@@ -1,25 +1,33 @@
UNAME := $(shell uname)
release: all
bin/prxEncrypter $(TARGET).prx
pack-pbp $(EXTRA_TARGETS) PARAM.SFO icon0.png NULL NULL NULL NULL data.psp NULL
rm -f data.psp
ifeq ($(UNAME), Linux)
bin/psptools/pack_ms_game.py --vanity "$(PSP_EBOOT_TITLE)" EBOOT.PBP EBOOT.PBP
else
bin\\psptools\\pack_ms_game.py --vanity "$(PSP_EBOOT_TITLE)" EBOOT.PBP EBOOT.PBP
endif
unpack-pbp EBOOT.PBP
pack-pbp $(EXTRA_TARGETS) PARAM.SFO icon0.png NULL NULL NULL NULL DATA.PSP NULL
rm -f DATA.PSP
rm -f downgrade_ctrl.h
rm -f downgrade660_ctrl.h
@mkdir -p PSP/GAME/ChronoSwitch
@cp EBOOT.PBP PSP/GAME/ChronoSwitch/

TARGET = downgrader
OBJS = main.o kernel_exploit.o kernel_land.o rebootex.o utils.o extras.o extra_stubs.o libasm/libinfinityUser.o

INCDIR = ../include
INCDIR = include
CFLAGS = -Os -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS) -c

LIBDIR = ../lib
LIBDIR = lib
LIBS = -lpsppower

PSP_FW_VERSION = 271

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Chronoswitch Downgrader v7.2
PSP_EBOOT_TITLE = Chronoswitch Downgrader v7.6.1

BUILD_PRX = 1

Expand Down
Binary file removed src/bin/prxEncrypter.exe
Binary file not shown.
22 changes: 22 additions & 0 deletions src/bin/psptools/pack_btcnf.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env python3

import argparse

from psptool.pack import pack_btcnf
from psptool.prx import encrypt

parser = argparse.ArgumentParser(description="Infinity Boot Config Packer")
parser.add_argument('input', type=argparse.FileType('rb'),
help='The raw text file to pack')
parser.add_argument('--vanity', type=str,
help='Some vanity text in the executable header')
parser.add_argument('output', type=str,
help='The output to write the packed text')
args = parser.parse_args()

executable = args.input.read()
executable = encrypt(pack_btcnf(executable,
psptag=0x00000000), vanity=args.vanity)

with open(args.output, 'wb') as f:
f.write(executable)
22 changes: 22 additions & 0 deletions src/bin/psptools/pack_kernel_module.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env python3

import argparse

from psptool.pack import pack_prx
from psptool.prx import encrypt

parser = argparse.ArgumentParser(description="Infinity Kernel Module Packer")
parser.add_argument('input', type=argparse.FileType('rb'),
help='The raw kernel PRX to pack')
parser.add_argument('--vanity', type=str,
help='Some vanity text in the executable header')
parser.add_argument('output', type=str,
help='The output to write the packed PRX')
args = parser.parse_args()

executable = args.input.read()
executable = encrypt(pack_prx(executable, is_pbp=False,
psptag=lambda x: 0x00000000), vanity=args.vanity)

with open(args.output, 'wb') as f:
f.write(executable)
30 changes: 30 additions & 0 deletions src/bin/psptools/pack_ms_game.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/usr/bin/env python3

import argparse

from psptool.pbp import is_pbp, PBP
from psptool.pack import pack_prx
from psptool.prx import encrypt

parser = argparse.ArgumentParser(description="Infinity Game Packer")
parser.add_argument('input', type=argparse.FileType('rb'),
help='The raw PBP to pack')
parser.add_argument('--vanity', type=str,
help='Some vanity text in the executable header')
parser.add_argument('output', type=str,
help='The output to write the packed PBP')
args = parser.parse_args()

executable = args.input.read()

if not is_pbp(executable):
raise ValueError("not a PBP")

# Although there are several tags for MS demos, 0x0C000000 is the most
# portable as it exists in every firmware
pbp = PBP(executable)
pbp.prx = encrypt(pack_prx(pbp.prx, is_pbp=True,
psptag=lambda x: 0x0C000000), vanity=args.vanity)

with open(args.output, 'wb') as f:
f.write(pbp.pack())
28 changes: 28 additions & 0 deletions src/bin/psptools/pack_updater.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/usr/bin/env python3

import argparse

from psptool.pbp import is_pbp, PBP
from psptool.pack import pack_prx
from psptool.prx import encrypt

parser = argparse.ArgumentParser(description="Infinity Updater Packer")
parser.add_argument('input', type=argparse.FileType('rb'),
help='The raw PBP to pack')
parser.add_argument('--vanity', type=str,
help='Some vanity text in the executable header')
parser.add_argument('output', type=str,
help='The output to write the packed PBP')
args = parser.parse_args()

executable = args.input.read()

if not is_pbp(executable):
raise ValueError("not a PBP")

pbp = PBP(executable)
pbp.prx = encrypt(pack_prx(pbp.prx, is_pbp=True,
psptag=lambda x: 0x0B000000), vanity=args.vanity)

with open(args.output, 'wb') as f:
f.write(pbp.pack())
22 changes: 22 additions & 0 deletions src/bin/psptools/pack_user_fw_module.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env python3

import argparse

from psptool.pack import pack_prx
from psptool.prx import encrypt

parser = argparse.ArgumentParser(
description="Infinity User Firmware Module Packer")
parser.add_argument('input', type=argparse.FileType('rb'),
help='The raw user PRX to pack')
parser.add_argument('--id', type=str, help='The btcnf id to set')
parser.add_argument('output', type=str,
help='The output to write the packed PRX')
args = parser.parse_args()

executable = args.input.read()
executable = encrypt(pack_prx(executable, is_pbp=False,
psptag=lambda x: 0x457B8AF0), id=bytes.fromhex(args.id))

with open(args.output, 'wb') as f:
f.write(executable)
1 change: 1 addition & 0 deletions src/bin/psptools/psptool/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
__pycache__
Empty file.
Loading