Compare commits

...
Sign in to create a new pull request.

37 commits
dev ... main

Author SHA1 Message Date
edwin170
e7eabc2fa0 update dualra1n-loader 2024-09-18 14:03:49 -04:00
edwin170
502d4f61a2 @Neustradamus thx 2024-09-18 12:03:02 -04:00
Edwin
6cb0696e7e
Delete wikiproxy.py 2024-09-12 18:58:39 -04:00
Edwin
180df7707d
Update README.md 2024-09-12 18:58:21 -04:00
edwin170
f9e2cb3186 new futurerestore without more udates 2024-09-10 09:03:25 -04:00
Edwin
b49769b07f
Merge pull request #124 from thisiskeanyvy/main
Removal of obsolete futurerestore download links and temporary correction to the latest build
2024-09-09 08:31:21 -04:00
thisiskeanyvy
1c70d0e71f
Fix futurerestore download step 2024-09-08 21:42:39 +02:00
thisiskeanyvy
f3e958a331
remove expired futurerestore download link 2024-09-08 21:02:05 +02:00
edwin170
c9a78025d6 fixed palera1n name 2024-08-14 18:04:21 -04:00
edwin170
e441d8c871 some new path 2024-08-14 17:47:32 -04:00
edwin170
f2519339d6 zip packages problem 2024-06-08 16:20:05 -04:00
edwin170
96055b3b24 ios 13 jbloader 2024-05-31 13:48:05 -04:00
edwin170
d3c710aca9 fixing futurerestore command 2024-05-28 10:39:23 -04:00
edwin170
81074d5fc9 active fixed and img4 extraction used 2024-05-27 17:40:43 -04:00
edwin170
c90d91cd3a fixed mnt6/active 2024-05-24 17:30:35 -04:00
edwin170
0ae0e15321 pylibzfse dependencie added 2024-05-22 17:23:43 -04:00
edwin170
69665ca97d thanks clement 2024-05-14 19:19:08 -04:00
edwin170
7cc24d3ca3 a8/a8x important, and thanks @Lrdsnow for sleep 2024-05-04 10:18:12 -04:00
edwin170
d71fddc7d2 let see 2024-05-01 15:55:45 -04:00
edwin170
9e9dcc8bdc sleep removed 2024-04-03 15:13:40 -04:00
edwin170
cd56555143 pylzss dir remove first 2024-03-11 16:17:32 -04:00
Edwin Nuñez
e31311a05b
fast 2024-03-10 11:43:31 -04:00
Edwin Nuñez
1b6a25d5f8
post.sh shitty 2024-03-10 11:41:24 -04:00
edwin170
52fdc582bc new jbloader 2024-03-08 19:40:19 -04:00
Edwin Nuñez
3591402383
Merge pull request #107 from sassa7777/patch-1
byebye usbmuxd logs
2024-03-04 16:07:10 -04:00
ささ
6c5599f667
Update getSSHOnLinux.sh 2024-03-04 16:43:12 +09:00
edwin170
8f38477d7f oh sasa : ) 2024-02-15 21:26:55 -04:00
edwin170
6335eb5c17 mainDir fix 2024-02-15 21:16:57 -04:00
Edwin Nuñez
c4d7c0d834
Merge pull request #97 from sasa8810/main 2024-02-14 09:00:22 -04:00
ささ
70f2b5efcf
Update downr1n.sh 2024-02-12 17:41:39 +09:00
edwin170
032347484f skill issue 2024-02-09 18:41:33 -04:00
edwin170
3c99a74ce2 fixing a possible infinite loop 2024-02-09 18:32:09 -04:00
Edwin Nuñez
27468e64c0
Update README.md 2024-02-09 15:49:50 -04:00
Edwin Nuñez
1883f27e57
Update downr1n.sh 2024-02-07 15:31:17 -04:00
Edwin Nuñez
1deef89932
Update downr1n.sh 2024-02-05 10:23:18 -04:00
edwin170
ea930d09ac pylzss come back to commit 2024-02-04 17:54:50 -04:00
edwin170
67b9942b9a thanks m1stadev for the fork fix 2024-01-30 19:37:33 -04:00
15 changed files with 268 additions and 487 deletions

2
.gitignore vendored
View file

@ -1,7 +1,5 @@
.DS_Store .DS_Store
*/.DS_Store */.DS_Store
binaries/Linux/futurerestore
binaries/Darwin/futurerestore
work work
ramdisk ramdisk
boot* boot*

View file

@ -1,12 +1,12 @@
# downr1n # downr1n
Downr1n enables tethered downgrades of checkm8 iOS devices to iOS 15, 14 and 13. Downr1n enables tethered downgrades of checkm8 iOS devices to iOS 15, 14 and 13.4 upper.
In general, dual booting is a better option than downgrading if you have the necessary storage. if you activate the localboot path it would be ultra better believe me xd. there is dualra1n too, which is a dualboot for ios like having two different ios [dualra1n](https://github.com/dualra1n/dualra1n), i would recommend more dualra1n as it is very stable.
# Usage # Usage
1: Download the IPSW file and place it in the ipsw/ directory. 1: Download the IPSW file and place it in the ipsw/ directory.
2: Execute the script without using 'sudo' on Linux. if it doesn't work please use sudo then. 2: execute: ./downr1n.sh --downgrade 14.3.
Example: ./downr1n.sh --downgrade 14.3 Example: ./downr1n.sh --downgrade 14.3
@ -14,9 +14,7 @@ The various command-line options are as follows:
--downgrade : Downgrade your device to iOS 14 tethered. --downgrade : Downgrade your device to iOS 14 tethered.
--dfuhelper : A helper tool to transition A11 devices from recovery mode to DFU mode. --jailbreak : Jailbreak with dualra1n-loader. Usage: `./downr1n.sh --jailbreak 14.8`.
--jailbreak : Jailbreak with pogo. Usage: `./downr1n.sh --jailbreak 14.8`.
--taurine : Jailbreak with taurine. Usage: `./downr1n.sh --jailbreak 14.3 --taurine`. --taurine : Jailbreak with taurine. Usage: `./downr1n.sh --jailbreak 14.3 --taurine`.
@ -26,18 +24,15 @@ The various command-line options are as follows:
--dont-restore : Avoids using futurerestore, this can be used to only create boot files. Example: `--downgrade 14.3 --dont-restore`. --dont-restore : Avoids using futurerestore, this can be used to only create boot files. Example: `--downgrade 14.3 --dont-restore`.
--fixBoot : Boots the device using fsboot.
--debug : Debug the script. --debug : Debug the script.
--- ---
# Dependencies # Dependencies
- please execute this command: python3 -m pip install pyimg4[compression] fastapi aiohttp ujson wikitextparser uvicorn. - unzip, python3, libimobiledevice-utils, libusbmuxd-tools, xz-utils, wget, curl, git, libssl-dev, usbmuxd.
- A disabled passcode on A10 and A11 devices. - A disabled passcode on A10 and A11 devices.
- unzip, python3, libimobiledevice-utils, libusbmuxd-tools, xz-utils. - An .iPSW file containing iOS 15, 14, 13.4 upper.
- An .iPSW file containing iOS 15, 14, 13. - A device running macOS or a Linux distro. It is recommended to use macOS, as it is likely more stable and faster. and for linux it is recommended to use ubuntu or debian.
- A device running macOS or a Linux distro. It is recommended to use macOS, as it is likely more stable and faster.
# Issues Putting Device in PwnDFU Mode # Issues Putting Device in PwnDFU Mode
@ -45,9 +40,13 @@ The various command-line options are as follows:
# importants things # importants things
- downgrading ios 16 to 14 or another version, you will have to bypass the setup somehow. good luck on it. - A8/A8x devices downr1n is not recommended please instead use dualra1n with --downgrade option (if you don't have enough storage for a dualboot)
- on ios 13 the touch id doesn't work so the home button on iphone 7 will not work sadly. - you can't downgrade an iphone x if the device is on ios 16
- downgrading ios 16 to 14 or another version, you should have backup your activations file in order to after downgrade and boot sucessfully restore them, you can use https://github.com/edwin170/bypassr1n.
- on ios 13 the touch id doesn't work so the home button will not work sadly.
- you can't downgrade to ios 14.2 lower on a11 devices - you can't downgrade to ios 14.2 lower on a11 devices
@ -59,7 +58,7 @@ The various command-line options are as follows:
# fix some problems # fix some problems
- please execute wikiproxy.py manually if it gives problem with server key. for ex: sudo python3 wikiproxy.py - if it gives problem with server key please execute: 1: python3 -m pip install git+https://github.com/m1stadev/wikiproxy.git 2: wikiproxy &
- if the error still after above fix, if this happend to you when you are downgrading with futurerestore again please add this arg --keyServer for example ./downr1n.sh --downgrade 14.5 --keyServer. - if the error still after above fix, if this happend to you when you are downgrading with futurerestore again please add this arg --keyServer for example ./downr1n.sh --downgrade 14.5 --keyServer.
@ -69,11 +68,9 @@ The various command-line options are as follows:
- Join my discord server: [Dualra1nServer](https://discord.gg/Gjs2P7FBuk) - Join my discord server: [Dualra1nServer](https://discord.gg/Gjs2P7FBuk)
# How to Jailbreak? # How to Jailbreak?
- Jailbreak with dualra1n-loader: ./downr1n --jailbreak (YourVer = 14.3). Note: this does not actually jailbreak the device. When I say "jailbreak," I'm referring to the process of installing Sileo and bootstrapping the device. Dualra1n-loader only installs Sileo and bootstraps with the kernel patch. - Jailbreak with dualra1n-loader: ./downr1n --jailbreak (YourVer = 14.3). Note: this does not actually jailbreak the device. When I say "jailbreak," I'm referring to the process of installing Sileo and bootstrapping the device. Dualra1n-loader only installs Sileo and bootstraps with the kpf kernel patch. (you will be able to use tweaks and most of things as normal).
- Taurine: ./downr1n --jailbreak (YourVer = 14.3) --taurine. Note: this is not recommended. - Taurine: ./downr1n --jailbreak (ex: 14.3 or YouVers) --taurine.
# This project was created with love by Edwin :)
# Credits # Credits

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -2,4 +2,4 @@
sudo systemctl stop usbmuxd sudo systemctl stop usbmuxd
sudo usbmuxd -p -f sudo usbmuxd -p -f 1>/dev/null

Binary file not shown.

View file

@ -1,29 +0,0 @@
#!/jbin/binpack/bin/bash
binpack=/jbin/binpack
# uicache loader app
$binpack/bin/rm -rf /var/.palera1n/loader.app
$binpack/usr/bin/uicache -p /Applications/Pogo.app/
$binpack/usr/bin/uicache -p /Applications/trollstore.app/
# remount r/w
/sbin/mount -uw /
/sbin/mount -uw /private/preboot/
# lauching daemon automatically
/usr/bin/launchctl load /Library/LaunchDaemons/
# update repo
if [ -f /usr/bin/apt ]; then
apt-get update
fi
# activating tweaks
/etc/rc.d/substitute-launcher
# respring
$binpack/usr/bin/uicache -a
$binpack/usr/bin/killall -9 SpringBoard
echo "[post.sh] done"
exit

Binary file not shown.

Binary file not shown.

View file

@ -1,28 +0,0 @@
#!/jbin/binpack/bin/bash
binpack=/jbin/binpack
# uicache loader app
$binpack/bin/rm -rf /var/.palera1n/loader.app
$binpack/usr/bin/uicache -p /Applications/Pogo.app/
# remount r/w
/sbin/mount -uw /
/sbin/mount -uw /private/preboot/
# lauching daemon automatically
/usr/bin/launchctl load /Library/LaunchDaemons/
# update repo
if [ -f /usr/bin/apt ]; then
apt-get update
fi
# activating tweaks
/etc/rc.d/substitute-launcher
# respring
$binpack/usr/bin/uicache -a
$binpack/usr/bin/killall -9 SpringBoard
echo "[post.sh] done"
exit

View file

@ -1,181 +0,0 @@
#!/usr/bin/env python3
from fastapi import FastAPI
from datetime import datetime
import aiohttp
import asyncio
import re
import time
import ujson
import wikitextparser as wtp
import uvicorn
DEVICE_REGEX = re.compile(r'(iPhone|AppleTV|iPad|iPod)[0-9]+,[0-9]+')
# Only allow 100 simultaneous HTTP requests
HTTP_SEMAPHORE = asyncio.Semaphore(100)
async def get_key_page(
session: aiohttp.ClientSession, identifier: str, buildid: str
) -> str:
params = {
'action': 'query',
'list': 'search',
'srsearch': f'Keys: {buildid} ({identifier})',
'srwhat': 'title',
'srlimit': '1',
'format': 'json',
'srnamespace': '2304',
}
async with HTTP_SEMAPHORE, session.get(
'https://theapplewiki.com/api.php', params=params
) as resp:
if resp.status != 200:
pass # raise error
else:
search = await resp.json()
if search['query']['searchinfo']['totalhits'] == 0:
raise ValueError(
f'No Firmware Keys page for device: {identifier}, buildid: {buildid}.'
)
params = {
'action': 'parse',
'prop': 'wikitext',
'page': search['query']['search'][0]['title'],
'format': 'json',
'formatversion': 2,
}
async with HTTP_SEMAPHORE, session.get(
'https://theapplewiki.com/api.php', params=params
) as resp:
if resp.status != 200:
pass # raise error
data = await resp.json()
return data['parse']['wikitext']
def parse_page(data: str, identifer: str, boardconfig: str = None) -> dict:
# Have to coerce wikitextparser into recognizing it as a table for easy parsing
data = (
' '.join([x for x in data.split(' ') if x != ''])
.replace('{{', '{| class="wikitable"')
.replace('}}', '|}')
)
page = wtp.parse(data)
page_data = {}
for entry in page.tables[0].data()[0]:
key, item = entry.split(' = ')
page_data[key] = item
if boardconfig is not None:
if ('Model' not in page_data.keys()) and ('Model2' not in page_data.keys()):
return page_data
if boardconfig.lower() not in [x.lower() for x in page_data.values()]:
raise ValueError(
f'Boardconfig: {boardconfig} for device: {identifer} is not valid!'
)
if page_data['Model2'].lower() == boardconfig.lower():
for key in page_data:
if '2' in key:
page_data[key.replace('2', '')] = page_data[key]
for key in list(page_data.keys()):
if '2' in key:
del page_data[key]
response = {
'identifier': page_data['Device'],
'buildid': page_data['Build'],
'codename': page_data['Codename'],
'restoreramdiskexists': 'RestoreRamdisk' in page_data,
'updateramdiskexists': 'UpdateRamdisk' in page_data,
'keys': [],
}
for component in page_data:
if component in (
'Version',
'Build',
'Device',
'Model',
'Codename',
'Baseband',
'DownloadURL',
):
continue
if any(component.endswith(x) for x in ('Key', 'IV', 'KBAG')):
continue
image = {
'image': component,
'filename': page_data[component],
'date': datetime.now().isoformat(),
}
if any(component == x for x in ('RootFS', 'RestoreRamdisk', 'UpdateRamdisk')):
image['filename'] += '.dmg'
for key in ('IV', 'Key') if component != 'RootFS' else ('Key',):
if component + key not in page_data.keys():
continue
if all(
x not in page_data[component + key]
for x in ('Unknown', 'Not Encrypted')
):
image[key.lower()] = page_data[component + key]
if (
('iv' not in image.keys())
and ('key' not in image.keys())
and not image['filename'].endswith('.dmg')
):
continue
if 'iv' in image and 'key' in image:
image['kbag'] = image['iv'] + image['key']
response['keys'].append(image)
return response
app = FastAPI()
@app.middleware('http')
async def add_process_time_header(request, call_next):
start_time = time.time()
response = await call_next(request)
response.headers['X-Process-Time'] = str(f'{time.time() - start_time:0.4f} sec')
return response
@app.get('/firmware/{identifier}/{buildid}')
async def get_firmware_keys(identifier: str, buildid: str) -> dict:
async with aiohttp.ClientSession() as session:
page = await get_key_page(session, identifier, buildid)
return parse_page(page, identifier)
@app.get('/firmware/{identifier}/{boardconfig}/{buildid}')
async def get_firmware_keys(identifier: str, boardconfig: str, buildid: str) -> dict:
async with aiohttp.ClientSession() as session:
page = await get_key_page(session, identifier, buildid)
return parse_page(page, identifier, boardconfig)
if __name__ == '__main__':
uvicorn.run(app='__main__:app', host='127.0.0.1', port='8888')