Compare commits

..
1 Commits
Author SHA1 Message Date
ec676a15ae merge (#421)
* Update tui_screen_options.c

* Me

* Update problem.yml

* libusb 1.0.27

* Update mbedtls

* Fix downloading mbedtls

* fixup! Update mbedtls

* Revert MBedTLS changes

* Add new assignee for issues

* New assignee

---------

Co-authored-by: Samara <[email protected]>
Co-authored-by: sam <[email protected]>
Co-authored-by: Nick Chan <[email protected]>
2024-05-29 22:38:40 -07:00
26 changed files with 204 additions and 333 deletions

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
name: No Template
description: Create a standard issue, no template involved.
labels: [palera1n help]
labels: [palera1n]
body:
- type: textarea
id: description
+3
View File
@@ -3,3 +3,6 @@ contact_links:
- name: Mention us on X (formerly known as Twitter)
url: https://twitter.com/palera1n
about: Mention us about your issue if you're not comfortable with using Github issues.
- name: Support Server
url: https://dsc.gg/palera1n
about: If you wanna ask support via Discord, thats an available option as well. Though, we recommend you do one of the previous options if possible.
+1 -1
View File
@@ -1,6 +1,6 @@
name: Feature Request
description: Request a feature in palera1n!
labels: [enhancement]
labels: [enhancement, palera1n]
body:
- type: textarea
id: feature-request
+6 -1
View File
@@ -1,6 +1,11 @@
name: Create Issue
description: Ask help for palera1n regarding support or generally how it works!
labels: [palera1n help]
labels: [palera1n]
assignees:
- khcrysalis
- asdfugil
- elliessurviving
- hg13bs
body:
- type: input
id: device
+44 -154
View File
@@ -26,7 +26,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v3
- name: Install dependencies (packages)
run: |
@@ -72,26 +72,21 @@ jobs:
gnu_triple: aarch64-apple-darwin
os: iphoneos
minos: 7.0
runs-on: macos-15
runs-on: macos-12
env:
MBEDTLS_VERSION: 3.5.2
READLINE_VERSION: 8.2
LIBIMOBILEDEVICE_COMMIT: ed0d66d0341562731bb19928dfe48155509fa7a7
LIBIRECOVERY_COMMIT: 7ce02c347b7c26e59498e6af31c9da51018d0fa1
LIBIMOBILEDEVICE_GLUE_COMMIT: 362f7848ac89b74d9dd113b38b51ecb601f76094
LIBPLIST_COMMIT: 2117b8fdb6b4096455bd2041a63e59a028120136
LIBUSBMUXD_COMMIT: a7f0543fb1ecb20ac7121c0fd77297200e0e43fc
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Install dependencies (packages)
run: |
sudo /usr/local/bin/pip3 install jsonschema jinja2
brew install make autoconf automake pkg-config gnu-sed gettext libtool
brew install make autoconf automake pkg-config gnu-sed gettext
sudo rm -rf /usr/local/Frameworks/Python*
curl -LO https://github.com/ProcursusTeam/ldid/releases/download/v2.1.5-procursus7/ldid_macosx_x86_64
sudo install -m755 ldid_macosx_x86_64 /usr/local/bin/ldid
@@ -100,9 +95,23 @@ jobs:
run: |
echo "SDK=$(xcrun -sdk ${{ matrix.os }} --show-sdk-path)" >> $GITHUB_ENV
- name: Download dependencies (source code)
run: |
curl -LOOOOOO \
https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/v${{ env.MBEDTLS_VERSION }}.tar.gz \
https://mirror-hk.koddos.net/gnu/readline/readline-${{ env.READLINE_VERSION }}.tar.gz
tar -xf v${{ env.MBEDTLS_VERSION }}.tar.gz
tar -xf readline-${{ env.READLINE_VERSION }}.tar.gz
git clone --depth=1 https://github.com/libimobiledevice/libplist
git clone --depth=1 https://github.com/libimobiledevice/libimobiledevice-glue
git clone --depth=1 https://github.com/libimobiledevice/libirecovery
git clone --depth=1 https://github.com/libimobiledevice/libusbmuxd
git clone --depth=1 https://github.com/libimobiledevice/libimobiledevice
- name: Select correct Xcode
run: |
sudo xcode-select -s /Applications/Xcode_16.2.app
sudo xcode-select -s /Applications/Xcode_14.2.app
- name: Setup environment
run: |
@@ -114,14 +123,16 @@ jobs:
echo "CC=$(xcrun --find cc)" >> $GITHUB_ENV
echo "CXX=$(xcrun --find c++)" >> $GITHUB_ENV
echo "CPP=$(xcrun --find cc) -E" >> $GITHUB_ENV
echo "CFLAGS=-g -Os -isystem ${{ env.SDK }}/usr/include/c++/v1 -arch ${{ matrix.arch }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -isysroot ${{ env.SDK }} -isystem $(pwd)/sysroot/usr/local/include -Os -g -flto=full -Wl,-object_path_lto,lto.o -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64" >> $GITHUB_ENV
echo "CPPFLAGS=-g -Os -isystem ${{ env.SDK }}/usr/include/c++/v1 -arch ${{ matrix.arch }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -isysroot ${{ env.SDK }} -isystem $(pwd)/sysroot/usr/local/include -Wno-error-implicit-function-declaration -Os -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64" >> $GITHUB_ENV
echo "CXXFLAGS=-stdlib=libc++ -g -Os -isystem$(TARGET_SYSROOT)/usr/include/c++/v1 -isysroot ${{ env.SDK }} -arch ${{ matrix.arch }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -isystem $(pwd)/sysroot/usr/local/include -Os -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64" >> $GITHUB_ENV
echo "CFLAGS=-g -Os -arch ${{ matrix.arch }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -isysroot ${{ env.SDK }} -isystem $(pwd)/sysroot/usr/local/include -Os -g -flto=full -Wl,-object_path_lto,lto.o -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64" >> $GITHUB_ENV
echo "CPPFLAGS=-g -Os -arch ${{ matrix.arch }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -isysroot ${{ env.SDK }} -isystem $(pwd)/sysroot/usr/local/include -Wno-error-implicit-function-declaration -Os -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64" >> $GITHUB_ENV
echo "CXXFLAGS=-stdlib=libc++ -g -Os -isysroot ${{ env.SDK }} -arch ${{ matrix.arch }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -isystem $(pwd)/sysroot/usr/local/include -Os -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64" >> $GITHUB_ENV
echo "LDFLAGS=-g -Wl,-dead_strip -arch ${{ matrix.arch }} -isysroot ${{ env.SDK }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -L$(pwd)/sysroot/usr/local/lib" >> $GITHUB_ENV
echo "CFLAGS_FOR_BUILD=-arch $(uname -m) -isysroot $(xcrun -sdk macosx --show-sdk-path) -Os" >> $GITHUB_ENV
echo "CXXFLAGS_FOR_BUILD=-stdlib=libc++ -arch $(uname -m) -isysroot $(xcrun -sdk macosx --show-sdk-path) -Os" >> $GITHUB_ENV
echo "CPPFLAGS_FOR_BUILD=-arch $(uname -m) -isysroot $(xcrun -sdk macosx --show-sdk-path) -Wno-error-implicit-function-declaration -Os" >> $GITHUB_ENV
echo "LDFLAGS_FOR_BUILD=-Wl,-dead_strip" >> $GITHUB_ENV
mkdir -p $(pwd)/sysroot/usr/local/lib
ln -sf $(pwd)/sysroot/usr/local/lib{,64}
- name: Prepare iPhoneOS environment
if: matrix.os == 'iphoneos'
@@ -162,59 +173,7 @@ jobs:
gsed -E /'__API_UNAVAILABLE'/d < ${TARGET_SYSROOT}/usr/include/pthread.h > sysroot/usr/local/include/pthread.h
gsed -i -E s/'__API_UNAVAILABLE\(.*\)'// sysroot/usr/local/include/IOKit/IOKitLib.h
- name: Check dependencies cache
run: |
echo "target: ${{ matrix.os }}-${{ matrix.arch }}" > cache.txt
echo "mbedtls ${{ env.MBEDTLS_VERSION }}" >> cache.txt
echo "readline: ${{ env.READLINE_VERSION }}" >> cache.txt
echo "libimobiledevice: ${{ env.LIBIMOBILEDEVICE_COMMIT }}" >> cache.txt
echo "libirecovery: ${{ env.LIBIRECOVERY_COMMIT }}" >> cache.txt
echo "libimobiledevice-glue: ${{ env.LIBIMOBILEDEVICE_GLUE_COMMIT }}" >> cache.txt
echo "libplist: ${{ env.LIBPLIST_COMMIT }}" >> cache.txt
echo "libusbmuxd: ${{ env.LIBUSBMUXD_COMMIT }}" >> cache.txt
echo "cc: $($(xcrun --find cc) --version)" >> cache.txt
echo "CACHE_TXT_CHECKSUM=sysroot-$(shasum -a 512 cache.txt | cut -d' ' -f1)" >> $GITHUB_ENV
- name: Download cached sysroot
id: sysroot_cache
uses: actions/cache@v3
with:
path: sysroot-${{ env.CACHE_TXT_CHECKSUM }}.txz
key: sysroot-${{ env.CACHE_TXT_CHECKSUM }}
- name: Extract cached sysroot
if: steps.sysroot_cache.outputs.cache-hit == 'true'
run: |
xz -dcT0 sysroot-${{ env.CACHE_TXT_CHECKSUM }}.txz | tar -x
- name: Setup sysroot
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
mkdir -p $(pwd)/sysroot/usr/local/lib
ln -sf $(pwd)/sysroot/usr/local/lib{,64}
- name: Download dependencies (source code)
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
curl -LOOOOOO \
https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/v${{ env.MBEDTLS_VERSION }}.tar.gz \
https://mirror-hk.koddos.net/gnu/readline/readline-${{ env.READLINE_VERSION }}.tar.gz
tar -xf v${{ env.MBEDTLS_VERSION }}.tar.gz
tar -xf readline-${{ env.READLINE_VERSION }}.tar.gz
git clone --depth=1 https://github.com/libimobiledevice/libplist
git clone --depth=1 https://github.com/libimobiledevice/libimobiledevice-glue
git clone --depth=1 https://github.com/libimobiledevice/libirecovery
git clone --depth=1 https://github.com/libimobiledevice/libusbmuxd
git clone --depth=1 https://github.com/libimobiledevice/libimobiledevice
cd libplist && git fetch origin ${{ env.LIBPLIST_COMMIT }} && git reset --hard ${{ env.LIBPLIST_COMMIT }} && cd ..
cd libirecovery && git fetch origin ${{ env.LIBIRECOVERY_COMMIT }} && git reset --hard ${{ env.LIBIRECOVERY_COMMIT }} && cd ..
cd libimobiledevice-glue && git fetch origin ${{ env.LIBIMOBILEDEVICE_GLUE_COMMIT }} && git reset --hard ${{ env.LIBIMOBILEDEVICE_GLUE_COMMIT }} && cd ..
cd libimobiledevice && git fetch origin ${{ env.LIBIMOBILEDEVICE_COMMIT }} && git reset --hard ${{ env.LIBIMOBILEDEVICE_COMMIT }} && cd ..
cd libusbmuxd && git fetch origin ${{ env.LIBUSBMUXD_COMMIT }} && git reset --hard ${{ env.LIBUSBMUXD_COMMIT }} && cd ..
- name: Build Mbed TLS
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
cd mbedtls-${{ env.MBEDTLS_VERSION }}
cat ../patches/mbedtls/0001-Allow-empty-x509-cert-issuer.patch | patch -sN -d . -p1
@@ -239,7 +198,6 @@ jobs:
cd ..
- name: Build readline
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
cd readline-${{ env.READLINE_VERSION }}
CC=clang CXX=clang++ ./configure ${{ env.CONFIGURE_ARGS }} ac_cv_type_sig_atomic_t=no
@@ -248,7 +206,6 @@ jobs:
cd ..
- name: Build libplist
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
cd libplist
autoreconf -fiv
@@ -258,7 +215,6 @@ jobs:
cd ..
- name: Build libimobiledevice-glue
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
cd libimobiledevice-glue
autoreconf -fiv
@@ -268,7 +224,6 @@ jobs:
cd ..
- name: Build libirecovery
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
sudo cp -a sysroot/usr/local/* /usr/local
cd libirecovery
@@ -284,7 +239,6 @@ jobs:
cd ..
- name: Build libusbmuxd
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
cd libusbmuxd
autoreconf -fiv
@@ -294,11 +248,10 @@ jobs:
cd ..
- name: Build libimobiledevice
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
cd libimobiledevice
autoreconf -fiv
./configure ${{ env.CONFIGURE_ARGS }} --with-mbedtls --disable-debug --disable-wireless-pairing
./configure ${{ env.CONFIGURE_ARGS }} --with-mbedtls --enable-debug
echo -e 'all:\ninstall:' > tools/Makefile
gmake -j$(sysctl -n hw.ncpu)
gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }}
@@ -309,15 +262,15 @@ jobs:
cp -a sysroot/${{ env.PREFIX }}/{include,lib} dep_root
find dep_root -name '*.dylib' -delete
find dep_root -name '*.la' -delete
gmake -j$(sysctl -n hw.ncpu) ROOTFUL=1
gmake -j$(sysctl -n hw.ncpu) TUI=1
cp src/palera1n palera1n-${{ matrix.os }}-${{ matrix.arch }}
dsymutil palera1n-${{ matrix.os }}-${{ matrix.arch }}
strip palera1n-${{ matrix.os }}-${{ matrix.arch }}
- name: Build palera1n (Development)
run: |
gmake -j$(sysctl -n hw.ncpu) clean
gmake -j$(sysctl -n hw.ncpu) DEV_BUILD=1 TUI=1 ROOTFUL=1
CC="${{ matrix.triple }}-gcc" gmake -j$(sysctl -n hw.ncpu) clean
CC="${{ matrix.triple }}-gcc" gmake -j$(sysctl -n hw.ncpu) DEV_BUILD=1 TUI=1 ROOTFUL=1
cp src/palera1n palera1n-${{ matrix.os }}-${{ matrix.arch }}.development
- name: Prepare artifact
@@ -349,7 +302,7 @@ jobs:
- name: Upload ${{ matrix.os }} thin ${{ matrix.arch }} build
if: ${{ github.event_name != 'pull_request' }}
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: palera1n-${{ matrix.os }}-${{ matrix.arch }}
path: palera1n-${{ matrix.os }}-${{ matrix.arch }}
@@ -357,7 +310,7 @@ jobs:
- name: Upload ${{ matrix.os }} thin ${{ matrix.arch }} build (Development)
if: ${{ github.event_name != 'pull_request' }}
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: palera1n-${{ matrix.os }}-${{ matrix.arch }}.development
path: palera1n-${{ matrix.os }}-${{ matrix.arch }}.development
@@ -366,24 +319,19 @@ jobs:
- name: Upload ${{ matrix.os }} thin ${{ matrix.arch }} debug symbols
if: ${{ github.event_name != 'pull_request' }}
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: palera1n-${{ matrix.os }}-${{ matrix.arch }}.dSYM
path: palera1n-${{ matrix.os }}-${{ matrix.arch }}.dSYM
retention-days: 1
- name: Generate cached sysroot archive
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
tar -c sysroot | xz -zce9T 0 > sysroot-${{ env.CACHE_TXT_CHECKSUM }}.txz
darwin-dist:
if: ${{ github.event_name != 'pull_request' }}
runs-on: macos-latest
needs: build-darwin
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v3
with:
fetch-depth: 0
@@ -395,7 +343,7 @@ jobs:
mirror: 'https://apt.procurs.us/'
- name: Download all Darwin artifacts
uses: actions/download-artifact@v4
uses: actions/download-artifact@v3
- name: Prepare artifact
run: |
@@ -497,14 +445,14 @@ jobs:
run: echo "$(git describe --dirty --tags --abbrev=7 | sed 's|-dirty||')" > build-tag.txt
- name: Upload build tag
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: build-tag
path: build-tag.txt
- name: Get branch name
id: branch-name
uses: tj-actions/branch-names@v9
uses: tj-actions/branch-names@v7
- name: Upload artifact
if: ${{ github.event_name != 'pull_request' }}
@@ -533,16 +481,10 @@ jobs:
LIBUSB_VERSION: 1.0.27
READLINE_VERSION: 8.2
GPM_VERSION: 1.20.7
LIBIMOBILEDEVICE_COMMIT: ed0d66d0341562731bb19928dfe48155509fa7a7
LIBIRECOVERY_COMMIT: 7ce02c347b7c26e59498e6af31c9da51018d0fa1
LIBIMOBILEDEVICE_GLUE_COMMIT: 362f7848ac89b74d9dd113b38b51ecb601f76094
USBMUXD_COMMIT: bc0b91ca856811f4393318dc83db6dc3c1ac326d
LIBPLIST_COMMIT: 2117b8fdb6b4096455bd2041a63e59a028120136
LIBUSBMUXD_COMMIT: a7f0543fb1ecb20ac7121c0fd77297200e0e43fc
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v3
with:
fetch-depth: 0
@@ -554,7 +496,7 @@ jobs:
- name: Download toolchain checksum
run: |
curl -u ${{ secrets.ACTIONS_RESOURCES_LOGIN }} -LO https://static.palera.in/action-resources/musl-cross/SHA512SUMS
curl -LO https://musl.cc/SHA512SUMS
echo "TOOLCHAIN_CHECKSUM="$(grep ${{ matrix.triple }}-cross.tgz SHA512SUMS | cut -d' ' -f1) >> $GITHUB_ENV
- name: Download toolchain (cached)
@@ -567,7 +509,7 @@ jobs:
- name: Download toolchain
if: steps.toolchain_cache.outputs.cache-hit != 'true'
run: |
curl -u ${{ secrets.ACTIONS_RESOURCES_LOGIN }} -LO https://static.palera.in/action-resources/musl-cross/${{ matrix.triple }}-cross.tgz
curl -LO https://musl.cc/${{ matrix.triple }}-cross.tgz
- name: Setup environment
run: |
@@ -601,41 +543,10 @@ jobs:
echo "PREFIX=/usr/local" >> $GITHUB_ENV
echo "CONFIGURE_ARGS=--build=x86_64-linux-gnu --host=${{ matrix.triple }} --prefix=/usr/local --disable-shared --enable-static" >> $GITHUB_ENV
echo "CROSS_COMPILE=${{ matrix.triple }}-" >> $GITHUB_ENV
- name: Check dependencies cache
run: |
echo "target: ${{ matrix.triple }}" > cache.txt
echo "mbedtls ${{ env.MBEDTLS_VERSION }}" >> cache.txt
echo "readline: ${{ env.READLINE_VERSION }}" >> cache.txt
echo "libimobiledevice: ${{ env.LIBIMOBILEDEVICE_COMMIT }}" >> cache.txt
echo "libirecovery: ${{ env.LIBIRECOVERY_COMMIT }}" >> cache.txt
echo "libimobiledevice-glue: ${{ env.LIBIMOBILEDEVICE_GLUE_COMMIT }}" >> cache.txt
echo "libplist: ${{ env.LIBPLIST_COMMIT }}" >> cache.txt
echo "libusbmuxd: ${{ env.LIBUSBMUXD_COMMIT }}" >> cache.txt
echo "usbmuxd: ${{ env.USBMUXD_COMMIT }}" >> cache.txt
echo "cc: $(${{ env.CROSS_COMPILE }}gcc --version)" >> cache.txt
echo "CACHE_TXT_CHECKSUM=sysroot-$(sha512sum cache.txt | cut -d' ' -f1)" >> $GITHUB_ENV
- name: Download cached sysroot
id: sysroot_cache
uses: actions/cache@v3
with:
path: sysroot-${{ env.CACHE_TXT_CHECKSUM }}.txz
key: sysroot-${{ env.CACHE_TXT_CHECKSUM }}
- name: Extract cached sysroot
if: steps.sysroot_cache.outputs.cache-hit == 'true'
run: |
xz -dcT0 sysroot-${{ env.CACHE_TXT_CHECKSUM }}.txz | tar -x
- name: Setup sysroot
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
mkdir -p $(pwd)/sysroot/usr/local/lib
ln -sf $(pwd)/sysroot/usr/local/lib{,64}
- name: Download dependencies (source code)
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
curl -LOOOOOOO \
https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/v${{ env.MBEDTLS_VERSION }}.tar.gz \
@@ -653,15 +564,8 @@ jobs:
git clone --depth=1 https://github.com/libimobiledevice/libusbmuxd
git clone --depth=1 https://github.com/libimobiledevice/libimobiledevice
git clone --depth=1 https://github.com/libimobiledevice/usbmuxd
cd libplist && git fetch origin ${{ env.LIBPLIST_COMMIT }} && git reset --hard ${{ env.LIBPLIST_COMMIT }} && cd ..
cd libirecovery && git fetch origin ${{ env.LIBIRECOVERY_COMMIT }} && git reset --hard ${{ env.LIBIRECOVERY_COMMIT }} && cd ..
cd libimobiledevice-glue && git fetch origin ${{ env.LIBIMOBILEDEVICE_GLUE_COMMIT }} && git reset --hard ${{ env.LIBIMOBILEDEVICE_GLUE_COMMIT }} && cd ..
cd usbmuxd && git fetch origin ${{ env.USBMUXD_COMMIT }} && git reset --hard ${{ env.USBMUXD_COMMIT }} && cd ..
cd libimobiledevice && git fetch origin ${{ env.LIBIMOBILEDEVICE_COMMIT }} && git reset --hard ${{ env.LIBIMOBILEDEVICE_COMMIT }} && cd ..
cd libusbmuxd && git fetch origin ${{ env.LIBUSBMUXD_COMMIT }} && git reset --hard ${{ env.LIBUSBMUXD_COMMIT }} && cd ..
- name: Build Mbed TLS
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
cd mbedtls-${{ env.MBEDTLS_VERSION }}
cat ../patches/mbedtls/0001-Allow-empty-x509-cert-issuer.patch | patch -sN -d . -p1
@@ -686,7 +590,6 @@ jobs:
cd ..
- name: Build libusb
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
cd libusb-${{ env.LIBUSB_VERSION }}
./configure ${{ env.CONFIGURE_ARGS }} --disable-udev
@@ -695,7 +598,6 @@ jobs:
cd ..
- name: Build readline
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
cd readline-${{ env.READLINE_VERSION }}
./configure ${{ env.CONFIGURE_ARGS }}
@@ -704,7 +606,6 @@ jobs:
cd ..
- name: Build GPM
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
cd gpm-${{ env.GPM_VERSION }}
cat ../patches/gpm/*.patch | patch -sN -d . -p1
@@ -716,7 +617,6 @@ jobs:
cd ..
- name: Build libplist
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
cd libplist
autoreconf -fiv
@@ -726,7 +626,6 @@ jobs:
cd ..
- name: Build libimobiledevice-glue
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
cd libimobiledevice-glue
autoreconf -fiv
@@ -736,7 +635,6 @@ jobs:
cd ..
- name: Build libirecovery (sorta)
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
sudo mv /usr/local /usr/local.bak
sudo ln -s ${{ env.DESTDIR }}${{ env.PREFIX }} /usr/local
@@ -750,7 +648,6 @@ jobs:
cd ..
- name: Build libusbmuxd
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
cd libusbmuxd
autoreconf -fiv
@@ -760,11 +657,10 @@ jobs:
cd ..
- name: Build libimobiledevice
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
cd libimobiledevice
autoreconf -fiv
./configure ${{ env.CONFIGURE_ARGS }} --with-mbedtls --disable-debug --disable-wireless-pairing
./configure ${{ env.CONFIGURE_ARGS }} --with-mbedtls --enable-debug
echo -e 'all:\ninstall:' > tools/Makefile
make -j$(nproc)
make -j$(nproc) install DESTDIR=${{ env.DESTDIR }}
@@ -773,7 +669,6 @@ jobs:
sudo mv /usr/local.bak /usr/local
- name: Build usbmuxd
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
cd usbmuxd
autoreconf -fiv
@@ -794,7 +689,7 @@ jobs:
cp -a ${{ env.DESTDIR }}/${{ env.PREFIX }}/{include,lib} dep_root
find dep_root -name '*.so' -delete
find dep_root -name '*.la' -delete
CC="${{ matrix.triple }}-gcc" make -j$(nproc) ROOTFUL=1
CC="${{ matrix.triple }}-gcc" make -j$(nproc) TUI=1
cp src/palera1n palera1n.release
- name: Seperate debug symbols
@@ -807,7 +702,7 @@ jobs:
- name: Build palera1n (Development)
run: |
CC="${{ matrix.triple }}-gcc" make -j$(nproc) clean
CC="${{ matrix.triple }}-gcc" make -j$(nproc) DEV_BUILD=1 ROOTFUL=1
CC="${{ matrix.triple }}-gcc" make -j$(nproc) DEV_BUILD=1 TUI=1 ROOTFUL=1
cp src/palera1n palera1n.development
- name: Prepare artifact
@@ -872,25 +767,20 @@ jobs:
localDir: 'usbmuxd-static/'
remoteDir: "/palera1n/artifacts/usbmuxd-static"
- name: Generate cached sysroot archive
if: steps.sysroot_cache.outputs.cache-hit != 'true'
run: |
tar -c sysroot | xz -zce9T 0 > sysroot-${{ env.CACHE_TXT_CHECKSUM }}.txz
finish-build:
runs-on: ubuntu-latest
if: ${{ github.event_name != 'pull_request' }}
needs: [build-docs, build-darwin, darwin-dist, build-Linux]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v3
- name: Get branch name
id: branch-name
uses: tj-actions/branch-names@v7
- name: Download build tag
uses: actions/download-artifact@v4
uses: actions/download-artifact@v3
with:
name: build-tag
-1
View File
@@ -4,7 +4,6 @@ dep_root/**
!contrib/.keep
contrib/
*.o
dep_root*.tgz
.vscode
checkra1n*
payload.c
+5 -2
View File
@@ -3,7 +3,7 @@ DEP = $(SRC)/dep_root
STRIP = strip
CC ?= cc
CFLAGS += -isystem $(DEP)/include -I$(SRC)/include -I$(SRC) -D_XOPEN_SOURCE=500
CFLAGS += -Wall -Wextra -Wno-unused-parameter -DPALERAIN_VERSION=\"2.1\" -DHAVE_LIBIMOBILEDEVICE
CFLAGS += -Wall -Wextra -Wno-unused-parameter -DPALERAIN_VERSION=\"2.0\" -DHAVE_LIBIMOBILEDEVICE
CFLAGS += -Wno-unused-variable -I$(SRC)/src -std=c99 -pedantic-errors -D_C99_SOURCE -D_POSIX_C_SOURCE=200112L
LIBS += $(DEP)/lib/libimobiledevice-1.0.a $(DEP)/lib/libirecovery-1.0.a $(DEP)/lib/libusbmuxd-2.0.a
LIBS += $(DEP)/lib/libimobiledevice-glue-1.0.a $(DEP)/lib/libplist-2.0.a -pthread -lm
@@ -59,12 +59,15 @@ ifneq ($(BAKERAIN_DEVELOPE_R),)
CFLAGS += -DBAKERAIN_DEVELOPE_R="\"$(BAKERAIN_DEVELOPE_R)\""
endif
BUILD_DATE := $(shell LANG=C date)
BUILD_NUMBER := $(shell git rev-list --count HEAD)
BUILD_TAG := $(shell git describe --dirty --tags --abbrev=7)
BUILD_WHOAMI := $(shell whoami)
BUILD_BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
BUILD_COMMIT := $(shell git rev-parse HEAD)
CFLAGS += -DBUILD_STYLE="\"$(BUILD_STYLE)\"" -DBUILD_TAG="\"$(BUILD_TAG)\""
CFLAGS += -DBUILD_STYLE="\"$(BUILD_STYLE)\"" -DBUILD_DATE="\"$(BUILD_DATE)\""
CFLAGS += -DBUILD_WHOAMI="\"$(BUILD_WHOAMI)\"" -DBUILD_TAG="\"$(BUILD_TAG)\""
CFLAGS += -DBUILD_NUMBER="\"$(BUILD_NUMBER)\"" -DBUILD_BRANCH="\"$(BUILD_BRANCH)\""
CFLAGS += -DBUILD_COMMIT="\"$(BUILD_COMMIT)\""
+4 -41
View File
@@ -15,6 +15,9 @@ Jailbreak for A8 through A11, T2 devices, on iOS/iPadOS/tvOS 15.0, bridgeOS 5.0
## Device Support
> [!NOTE]
> Apple TV & iBridge support are not currently in the beta releases of palera1n, ETA s0n
<!--- Mobile --->
| iPhone(s) | iPad(s) | iPod(s) | Apple TV(s) |
@@ -27,8 +30,6 @@ Jailbreak for A8 through A11, T2 devices, on iOS/iPadOS/tvOS 15.0, bridgeOS 5.0
| iPhone 8 | iPad Pro (12.9") (1st generation) | | |
| iPhone 8 Plus | iPad Pro (10.5") | | |
| iPhone X | iPad Pro (12.9") (2nd generation) | | |
| | iPad Air 2 | | |
> Note that on `A11` (iPhone X, 8, 8 Plus), **you must disable your passcode while in the jailbroken state** (on iOS 16, you need to **reset your device** before proceeding with palera1n).
@@ -75,44 +76,12 @@ Jailbreak for A8 through A11, T2 devices, on iOS/iPadOS/tvOS 15.0, bridgeOS 5.0
> USB-C port on Apple Silicon Macs *may* require manual unplugging and replugging of the lightning cable after checkm8 exploit. This problem may be solved by connecting via USB hub, though extensions can vary.
## Usage
```
Usage: palera1n [-DEhpvVdsSLRnPI] [-e boot arguments] [-k Pongo image] [-o overlay file] [-r ramdisk file] [-K KPF file] [-i checkra1n file]
--version Print version
--force-revert Remove jailbreak
-d, --demote Demote
-D, --dfuhelper Exit after entering DFU
-e, --boot-args <boot arguments> XNU boot arguments
-E, --enter-recovery Enter recovery mode
-h, --help Show this help
-i, --override-checkra1n <file> Override checkra1n
-k, --override-pongo <file> Override Pongo image
-K, --override-kpf <file> Override kernel patchfinder
-L, --jbinit-log-to-file Make jbinit log to /cores/jbinit.log (can be read from sandbox while jailbroken)
-n, --exit-recovery Exit recovery mode
-I, --device-info Print info about the connected device
-o, --override-overlay <file> Override overlay
-p, --pongo-shell Boots to PongoOS shell
-P, --pongo-full Boots to a PongoOS shell with default images already uploaded
-r, --override-ramdisk <file> Override ramdisk
-R, --reboot-device Reboot connected device in normal mode
-s, --safe-mode Enter safe mode
-S, --no-colors Disable colors on the command line
-v, --debug-logging Enable debug logging
This option can be repeated for extra verbosity.
-V, --verbose-boot Verbose boot
Environmental variables:
TMPDIR temporary diretory (path the built-in checkra1n will be extracted to)
```
## Installing
Visit https://palera.in
## Disclaimers
We are **NOT** responsible for any data loss, or the result of a device being bricked. When using palera1n, the user should accept responsibility if anything happens to their device during the process.
- If your device is stuck in recovery, please run futurerestore `--exit-recovery`, or use `irecovery -n`, or `palera1n -n`.
- If your device is stuck in recovery, please run futurerestore `--exit-recovery`, or use `irecovery -n`.
- If you're unable to get out of recovery via these methods please restore with iTunes or Finder.
- palera1n **will not work** in VirtualBox, VMware or any virtual machine that doesn't support PCI passthrough.
@@ -125,9 +94,3 @@ Make sure you're following the guides provided [here](https://palera.in), also w
- Panic logs, if panicked then send latest `panic-full` log from your device.
Create an issue here: https://github.com/palera1n/palera1n/issues/new/choose
## Credits
[All credits for palera1n can be found here](https://palera.in/)
If proper credit isn't shown please message us or create an issue.
+29 -25
View File
@@ -2,11 +2,11 @@
.\" Copyright (c) 2024 Nick Chan
.\" SPDX-License-Identifier: MIT
.\"
.Dd "23 December 2024"
.Dd "30 March 2024"
.Dt palera1n 1
.Sh NAME
.Nm palera1n
.Nd arm64 iOS/iPadOS/tvOS 15.0-26.0, bridgeOS 5.0-10.0 jailbreaking tool
.Nd arm64 iOS/iPadOS/tvOS 15.0-17.5, bridgeOS 5.0-8.3 jailbreaking tool
.Sh SYNOPSIS
.Nm
.Op Fl cCdDEfhIlLnpRsSTvV
@@ -20,21 +20,19 @@
.Op Fl -force-revert
.Sh DESCRIPTION
.Nm
jailbreaks an arm64 (arm64e excluded) iOS/iPadOS/tvOS 15.0-26.0, bridgeOS 5.0-10.0 device,
jailbreaks an iOS/iPadOS/tvOS 15.0-17.5, bridgeOS 6.0-8.3 device with an arm64 (arm64e excluded) on iOS 15.0-17.5,
utilizing the
.Em checkm8
bootROM exploit.
.Pp
.Nm
provides rootful and rootless jailbreak modes.
On iOS/iPadOS 15.0 and later and on tvOS 18.2 or later,
On iOS/iPadOS,
.Nm
is able to jailbreak the device in fakefs-rootful mode, where /
is writable, as well as rootless mode, where / cannot be written to.
On tvOS and bridgeOS,
only rootful is supported. On versions where fakefs-rootful is not
applicable, palera1n modifies the actual root filesystem instead
of making a fakefs
only rootful is supported, and it uses the actual filesystem instead of a fakefs.
.Pp
Due to the nature of the
.Em checkm8
@@ -59,7 +57,7 @@ In the remainder of this document, the term "iOS" and "iPadOS" will be used inte
as the difference is negligible as far as the jailbreak is concerened.
.Pp
.Sh SUPPORTED DEVICES
As described above, arm64 iOS 15.0-18.0 devices are supported, here is an explicit
As described above, arm64 iOS 15.0-17.5 devices are supported, here is an explicit
list of supported devicecs:
.Bl -tag -compact
@@ -103,7 +101,9 @@ list of supported devicecs:
.It Apple T2 MacBookPro15,3
.It Apple T2 MacBookAir8,1
.It Apple T2 MacBookPro15,4
.It iBridge2,11 (Unknown Mac)
.It Apple T2 MacBookAir8,2
.It iBridge2,13 (Unknown Mac)
.It Apple T2 MacBookPro16,1
.It Apple T2 MacBookAir9,1
.It Apple T2 MacBookPro16,2
@@ -139,14 +139,12 @@ Like
but the size of the created fakefs is smaller at the expense of having unwritable
parts in rarely-written paths. When jailbreaking 16 GB devices, this option must be used
when setting up fakefs for rootful, as they do not have enough storage for full fakefs.
This flag is supported on iOS/iPadOS 15.0 or later and tvOS 18.2 or later, as they
require fakefs for rootful.
This flag is only supported on iOS/iPadOS.
.It Fl c , -setup-fakefs
When used with
.Fl f , -fakefs ,
creates the new APFS volume required for rootful. Will fail if one already exists.
This flag is supported on iOS/iPadOS 15.0 or later and tvOS 18.2 or later, as they
require fakefs for rootful.
This flag is only supported on iOS/iPadOS.
.It Fl C , -clean-fakefs
This option is not currently supported and is a no-operation in this version of
.Nm
@@ -157,13 +155,18 @@ Set the effective production fuse to 0, so as to enable hardware debugging featu
Execute the DFU helper to guide the user into putting the device into DFU mode
then exit.
.It Fl e , -boot-args Ar boot arguments
Specify custom XNU kernel command line. Additionally, the
Specify custom XNU kernel command line. The
.Em rootdev=md0
argument is used by
.Nm
and cannot be overriden. Additionally, the
.Em wdt=-1
argument is used during fakefs setup.
.It Fl E , -enter-recovery
Exit after entering recovery mode.
.It Fl f , -fakefs
Proceed in rootful mode. Despite its name, this applies to both full, partial fakefs, as well as realfs, and it still applies even when trying to force revert.
Proceed in rootful mode. This applies to both full, partial fakefs, as well as realfs.
This option is not supported on iOS/iPadOS 17.
.It Fl h , -help
Prints help text.
.It Fl i , -checkra1n-file Ar checkra1n file
@@ -181,6 +184,10 @@ command. If in doubt, use
iOS15 branch or your own fork of it.
.It Fl l , -rootless
Proceed in rootless mode. This option is only supported on iOS/iPadOS.
.It Fl L , -jbinit-log-to-file
This option is not currently supported and is a no-operation in this version of
.Nm
\[char46]
.It Fl n , -exit-recovery
Exit recovery mode and exit.
.It Fl o , -override-overlay Ar overlay file
@@ -235,13 +242,13 @@ is extracted and executed here. When not set, /tmp is used.
.Sh EXAMPLES
To (re-)jailbreak in rootless mode:
.Pp
.Dl "palera1n -l"
.Dl "palera1n"
.Pp
To setup fakefs for rootful mode:
.Pp
.Dl "palera1n -fc"
.Pp
After the device has rebooted into recovery mode, follow the following example.
After the device has rebooted, follow the following example.
.Pp
To re-jailbreak in rootful mode:
.Pp
@@ -298,7 +305,7 @@ option might cause some versions for tvOS to crash and not boot.
Offical Apple USB-C cables as well as some other USB-C cables cannot be used to enter DFU mode.
USB-A cable with male USB-C to female USB-A adapter works fine.
.Sh POST INSTALLATION (iOS/iPadOS)
The palera1n loader app will take up to 1 minute to appear on the homescreen after the
The palera1n loader app will take up to 30 seconds to appear on the homescreen after the
device has booted. If it does not appear, you can try using the shortcut:
.Pp
.Lk https://www.icloud.com/shortcuts/8cd5f489c8854ee0ab9ee38f2e62f87d
@@ -326,7 +333,7 @@ loader app to install additional jailbreak files.
.Bl -tag -width "/var/jb/Library/LaunchDaemons"
.It Pa /cores
The location of the temporary filesystem where jailbreak files are stashed during boot.
The location of the temporary filesystem where jailbreak files are stash during boot.
.It Pa /Library/LaunchDaemons
The directory where jailbreak-specific
.Xr launchd.plist 5
@@ -346,17 +353,14 @@ has been mounted.
.El
.Sh BUGS
.Nm
may crash if the machine it is running on has non-compliant USB devices plugged in.
may crash if the machine it is running on:
.Pp
.Nm
will fail to initialize on Linux when there are no USB devices plugged in.
Usually this is not a problem on PCs since the built-in root hubs are also
USB devices. However, on platforms such as Apple Silicon Macs in Linux, since
there are no built-in USB hubs, at least one USB device needs to be manually
plugged in for palera1n to be initialized.
.Dl "- Has non-compliant USB devices plugged in"
.Pp
The exploit may also work less reliably on some hosts, like AMD desktops, or some MediaTek devices.
.Pp
The device may randomly crash and reboot due to launchd using too much memory.
.Pp
The built-in SSH server might be not accessible with password after bootstrapping rootful,
since the bootstrap uses a custom crypt() function that is not supported
by the built-in SSH server.
+5 -1
View File
@@ -72,7 +72,7 @@ usb_ret_t USBBulkUpload(usb_device_handle_t handle, void *data, uint32_t len);
#endif
#ifndef PALERAIN_VERSION
#define PALERAIN_VERSION "2.2"
#define PALERAIN_VERSION "2.0"
#endif
#if defined(__APPLE__)
@@ -204,9 +204,12 @@ boyermoore_horspool_memmem(const unsigned char* haystack, size_t hlen,
const unsigned char* needle, size_t nlen);
extern void* pongo_usb_callback(stuff_t* arg);
usb_ret_t USBControlTransfer(usb_device_handle_t handle, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint32_t wLength, void *data, uint32_t *wLenDone);
const char *usb_strerror(usb_ret_t err);
int wait_for_pongo(void);
int upload_pongo_file(usb_device_handle_t, unsigned char*, unsigned int);
int issue_pongo_command(usb_device_handle_t, char*);
int tui(void);
int optparse(int argc, char* argv[]);
@@ -218,6 +221,7 @@ bool set_found_pongo(bool val);
uint64_t get_ecid_wait_for_dfu(void);
uint64_t set_ecid_wait_for_dfu(uint64_t ecid);
void write_stdout(char *buf, uint32_t len);
void io_start(stuff_t *stuff);
void io_stop(stuff_t *stuff);
+6
View File
@@ -102,9 +102,12 @@ void tui_draw_rectangle(int x1, int y1, int x2, int y2);
#define TUI_VERSION "Unknown Version"
#endif
extern int tui_state;
extern int tui_x_offset;
extern int tui_y_offset;
extern bool tui_can_start;
extern int tui_mouse_x;
extern int tui_mouse_y;
@@ -164,6 +167,8 @@ struct tui_connected_device {
extern struct tui_connected_device *tui_connected_devices;
int tui_compare_versions(const char *firstVersion, const char *secondVersion);
void tui_jailbreak(void);
extern bool tui_is_jailbreaking;
extern int tui_jailbreak_stage;
@@ -174,6 +179,7 @@ void tui_jailbreak_status_changed(void);
extern bool tui_is_restarting;
void tui_terminate(int sig);
extern bool tui_options_allow_untested;
extern bool tui_options_safe_mode;
extern bool tui_options_verbose_boot;
extern bool tui_options_force_revert;
+1 -1
View File
@@ -68,7 +68,7 @@ BUILD_OPTIONS += TUI
CFLAGS += -DTUI
endif
CHECKRA1N_VERSION ?= 0.1337.3
CHECKRA1N_VERSION ?= 0.1337.2
LIPO = lipo
LDID = ldid
+20 -28
View File
@@ -40,7 +40,7 @@
int dfuhelper_thr_running = false;
static void step(int time, int time2, char *text, bool (*cond)(uint64_t), uint64_t cond_arg) {
void step(int time, int time2, char *text, bool (*cond)(uint64_t), uint64_t cond_arg) {
for (int i = time2; i < time; i++) {
printf(
(palerain_flags & palerain_option_no_colors)
@@ -59,7 +59,7 @@ static void step(int time, int time2, char *text, bool (*cond)(uint64_t), uint64
if (time2 == 0) puts("");
}
static int connected_normal_mode(const usbmuxd_device_info_t *usbmuxd_device) {
int connected_normal_mode(const usbmuxd_device_info_t *usbmuxd_device) {
devinfo_t dev;
int ret;
ret = devinfo_cmd(&dev, usbmuxd_device->udid);
@@ -67,30 +67,13 @@ static int connected_normal_mode(const usbmuxd_device_info_t *usbmuxd_device) {
LOG(LOG_ERROR, "Unable to get device information");
return 0;
}
if (strcmp(dev.CPUArchitecture, "arm64")) {
if (strncmp(dev.CPUArchitecture, "arm64", strlen("arm64"))) {
devinfo_free(&dev);
LOG(LOG_WARNING, "Ignoring non-arm64 device...");
LOG(LOG_WARNING, "palera1n doesn't and never will work on A12+ (arm64e)");
return -1;
}
if ((palerain_flags & palerain_option_device_info)) {
printf("Mode: normal\n");
printf("ProductType: %s\n", dev.productType);
printf("Architecture: %s\n", dev.CPUArchitecture);
printf("Version: %s\n", dev.productVersion);
printf("DisplayName: %s\n", dev.displayName);
device_has_booted = true;
set_spin(0);
unsubscribe_cmd();
return 0;
}
/* For Booting Linux etc */
if (!getenv("PALERA1N_BYPASS_PASSCODE_CHECK") &&
!strncmp(dev.productType, "iPhone10,", strlen("iPhone10,")
)) {
if (!strncmp(dev.productType, "iPhone10,", strlen("iPhone10,"))) {
if (!(palerain_flags & palerain_option_device_info))
LOG(LOG_VERBOSE2, "Product %s requires passcode to be disabled", dev.productType);
unsigned char passcode_state = 0;
@@ -108,10 +91,19 @@ static int connected_normal_mode(const usbmuxd_device_info_t *usbmuxd_device) {
return -1;
}
}
if (getenv("PALERA1N_BYPASS_PASSCODE_CHECK"))
LOG(LOG_WARNING, "Bypassed passcode check");
if ((palerain_flags & palerain_option_device_info)) {
printf("Mode: normal\n");
printf("ProductType: %s\n", dev.productType);
printf("Architecture: %s\n", dev.CPUArchitecture);
printf("Version: %s\n", dev.productVersion);
printf("DisplayName: %s\n", dev.displayName);
device_has_booted = true;
set_spin(0);
unsubscribe_cmd();
return 0;
}
if (verbose > 1) {
/* (LOG_VERBOSE - 3) or below*/
LOG(LOG_INFO, "Telling device with udid %s to enter recovery mode immediately", usbmuxd_device->udid);
@@ -133,7 +125,7 @@ static bool conditional(uint64_t ecid) {
return get_ecid_wait_for_dfu() != ecid;
}
static void* connected_recovery_mode(struct irecv_device_info* info) {
void* connected_recovery_mode(struct irecv_device_info* info) {
int ret;
uint64_t ecid;
uint32_t cpid, bdid;
@@ -223,7 +215,7 @@ static void* connected_recovery_mode(struct irecv_device_info* info) {
return NULL;
}
static void* connected_dfu_mode(struct irecv_device_info* info) {
void* connected_dfu_mode(struct irecv_device_info* info) {
if (get_ecid_wait_for_dfu() == info->ecid) {
set_ecid_wait_for_dfu(0);
puts("");
@@ -240,7 +232,7 @@ static void* connected_dfu_mode(struct irecv_device_info* info) {
return NULL;
}
static void device_event_cb(const usbmuxd_event_t *event, void* userdata) {
void device_event_cb(const usbmuxd_event_t *event, void* userdata) {
if (event->device.conn_type != CONNECTION_TYPE_USB) return;
switch (event->event) {
case UE_DEVICE_ADD:
@@ -265,7 +257,7 @@ static void device_event_cb(const usbmuxd_event_t *event, void* userdata) {
}
}
static void irecv_device_event_cb(const irecv_device_event_t *event, void* userdata) {
void irecv_device_event_cb(const irecv_device_event_t *event, void* userdata) {
pthread_t recovery_thread, dfu_thread;
int ret;
+2 -4
View File
@@ -57,7 +57,7 @@ void thr_cleanup(void* ptr) {
*(int*)ptr = 0;
}
static int build_checks(void) {
int build_checks(void) {
#ifndef NO_CHECKRAIN
#if defined(__APPLE__)
struct mach_header_64* c1_header = (struct mach_header_64*)&checkra1n[0];
@@ -96,7 +96,7 @@ int saved_argc;
char** saved_argv;
char** saved_envp;
static int palera1n(int argc, char *argv[], char *envp[]) {
int palera1n(int argc, char *argv[], char *envp[]) {
saved_argc = argc;
saved_argv = argv;
saved_envp = envp;
@@ -148,8 +148,6 @@ static int palera1n(int argc, char *argv[], char *envp[]) {
palerain_option_device_info)
) || device_has_booted)
goto normal_exit;
pthread_cancel(pongo_thread);
pthread_join(pongo_thread, NULL);
if (exec_checkra1n()) goto cleanup;
if ((palerain_flags & (palerain_option_pongo_exit | palerain_option_demote)))
+17 -4
View File
@@ -19,6 +19,7 @@
#endif
uint64_t* palerain_flags_p = &palerain_flags;
static bool force_use_verbose_boot = false;
char* gOverrideLibcheckra1nHelper = NULL;
static struct option longopts[] = {
@@ -56,8 +57,8 @@ static struct option longopts[] = {
#endif
#ifdef TUI
{"tui", no_argument, NULL, 't'},
#endif
{"cli", no_argument, NULL, palerain_option_case_cli},
#endif
{NULL, 0, NULL, 0}
};
@@ -77,7 +78,7 @@ static int usage(int e, char* prog_name)
#endif
"] [-e boot arguments] [-k Pongo image] [-o overlay file] [-r ramdisk file] [-K KPF file] [-i checkra1n file]\n"
"Copyright (C) 2024, palera1n team, All Rights Reserved.\n\n"
"iOS/iPadOS/tvOS 15.0-26.0, bridgeOS 5.0-10.0 arm64 jailbreaking tool\n\n"
"iOS/iPadOS/tvOS 15.0-17.5, bridgeOS 5.0-8.3 arm64 jailbreaking tool\n\n"
"\t--version\t\t\t\tPrint version\n"
"\t--force-revert\t\t\t\tRemove jailbreak\n"
#ifdef DEV_BUILD
@@ -147,9 +148,11 @@ int optparse(int argc, char* argv[]) {
case 'B':
palerain_flags |= palerain_option_setup_partial_root;
palerain_flags |= palerain_option_setup_rootful;
palerain_flags |= palerain_option_verbose_boot;
break;
case 'c':
palerain_flags |= palerain_option_setup_rootful;
palerain_flags |= palerain_option_verbose_boot;
break;
case 'C':
palerain_flags |= palerain_option_clean_fakefs;
@@ -172,12 +175,16 @@ int optparse(int argc, char* argv[]) {
break;
case 'V':
palerain_flags |= palerain_option_verbose_boot;
force_use_verbose_boot = true;
#ifdef TUI
tui_options_verbose_boot = true;
#endif
break;
case 'e':
if (strlen(optarg) > (sizeof(xargs_cmd) - 0x20)) {
if (strstr(optarg, "rootdev=") != NULL) {
LOG(LOG_FATAL, "The boot arg rootdev= is already used by palera1n and cannot be overriden");
return -1;
} else if (strlen(optarg) > (sizeof(xargs_cmd) - 0x20)) {
LOG(LOG_FATAL, "Boot arguments too long");
return -1;
}
@@ -306,10 +313,10 @@ int optparse(int argc, char* argv[]) {
case 't':
palerain_flags |= palerain_option_tui;
break;
#endif
case palerain_option_case_cli:
palerain_flags |= palerain_option_cli;
break;
#endif
#ifdef DEV_BUILD
case '1':
palerain_flags |= palerain_option_test1;
@@ -344,8 +351,10 @@ int optparse(int argc, char* argv[]) {
printf(
"palera1n " PALERAIN_VERSION "\n"
BUILD_COMMIT " " BUILD_NUMBER " (" BUILD_BRANCH ")\n\n"
"Build date: " BUILD_DATE "\n"
"Build style: " BUILD_STYLE "\n"
"Build tag: " BUILD_TAG "\n"
"Built by: " BUILD_WHOAMI "\n"
#ifdef USE_LIBUSB
"USB backend: libusb\n"
#else
@@ -360,6 +369,10 @@ int optparse(int argc, char* argv[]) {
LOG(LOG_WARNING, "telnetd is enabled, this is a security hole");
}
if ((strstr(xargs_cmd, "serial=") != NULL) && !force_use_verbose_boot && (palerain_flags & palerain_option_setup_rootful)) {
palerain_flags &= ~palerain_option_verbose_boot;
}
if ((palerain_flags & (palerain_option_tui)) && (palerain_flags & (palerain_option_cli))) {
LOG(LOG_FATAL, "cannot specify both --tui and --cli");
return -1;
+1
View File
@@ -14,6 +14,7 @@
#include <sys/mman.h>
#include <errno.h>
int override_file(override_file_t *finfo, niarelap_file_t** orig, unsigned int *orig_len, char *filename) {
int ret = 0;
int fd = open(filename, O_RDONLY);
+6 -13
View File
@@ -21,10 +21,6 @@ int pongo_thr_running = 0;
#define ERR(...) LOG(LOG_VERBOSE, __VA_ARGS__)
static int issue_pongo_command(usb_device_handle_t, char*);
static int upload_pongo_file(usb_device_handle_t, unsigned char*, unsigned int);
static void write_stdout(char *buf, uint32_t len);
void* pongo_helper(void* ptr) {
pongo_thr_running = 1;
pthread_cleanup_push(thr_cleanup, &pongo_thr_running);
@@ -36,7 +32,7 @@ void* pongo_helper(void* ptr) {
return NULL;
}
static void *pongo_usb_callback(stuff_t *arg) {
void *pongo_usb_callback(stuff_t *arg) {
if (get_found_pongo())
return NULL;
set_found_pongo(1);
@@ -46,9 +42,6 @@ static void *pongo_usb_callback(stuff_t *arg) {
}
#endif
LOG(LOG_INFO, "Found PongoOS USB Device");
if (palerain_flags & palerain_option_pongo_exit)
goto done;
usb_device_handle_t handle = arg->handle;
#ifdef TUI
if (tui_is_jailbreaking) {
@@ -121,10 +114,10 @@ static void *pongo_usb_callback(stuff_t *arg) {
#ifdef ROOTFUL
if ((palerain_flags & palerain_option_setup_partial_root)) {
LOG(LOG_INFO, "Please wait up to 5 minutes for the bindfs to be created.");
LOG(LOG_INFO, "Once the device reboots into recovery mode, run again without the -B (Create BindFS) option to jailbreak.");
LOG(LOG_INFO, "Once the device boots up to iOS, run again without the -B (Create BindFS) option to jailbreak.");
} else if ((palerain_flags & palerain_option_setup_rootful)) {
LOG(LOG_INFO, "Please wait up to 10 minutes for the fakefs to be created.");
LOG(LOG_INFO, "Once the device reboots into recovery mode, run again without the -c (Create FakeFS) option to jailbreak.");
LOG(LOG_INFO, "Once the device boots up to iOS, run again without the -c (Create FakeFS) option to jailbreak.");
}
#endif
if (dfuhelper_thr_running) {
@@ -149,7 +142,7 @@ done:
return NULL;
}
static int issue_pongo_command(usb_device_handle_t handle, char *command)
int issue_pongo_command(usb_device_handle_t handle, char *command)
{
uint32_t outpos = 0;
uint32_t outlen = 0;
@@ -211,7 +204,7 @@ bad:
return ret;
}
static int upload_pongo_file(usb_device_handle_t handle, unsigned char *buf, unsigned int buf_len)
int upload_pongo_file(usb_device_handle_t handle, unsigned char *buf, unsigned int buf_len)
{
int ret = 0;
ret = USBControlTransfer(handle, 0x21, 1, 0, 0, 4, &buf_len, NULL);
@@ -267,7 +260,7 @@ void io_stop(stuff_t *stuff)
#endif
}
static void write_stdout(char *buf, uint32_t len)
void write_stdout(char *buf, uint32_t len)
{
while(len > 0) {
if (verbose >= 3) {
+9 -9
View File
@@ -3,7 +3,7 @@
#include <palerain.h>
#include <tui.h>
static irecv_device_t tui_get_recovery_device(uint64_t ecid) {
irecv_device_t tui_get_recovery_device(uint64_t ecid) {
irecv_client_t client = NULL;
for (int i = 0; i <= 5; i++) {
irecv_error_t err = irecv_open_with_ecid(&client, ecid);
@@ -28,7 +28,7 @@ static irecv_device_t tui_get_recovery_device(uint64_t ecid) {
struct tui_connected_device *tui_connected_devices = NULL;
static void* tui_connected_recovery_mode(struct irecv_device_info* info) {
void* tui_connected_recovery_mode(struct irecv_device_info* info) {
//printf("Recovery mode device %" PRIu64 " connected\n", info->ecid);
tui_last_event = TUI_EVENT_CONNECTED_DEVICES_CHANGED;
sem_post(tui_event_semaphore);
@@ -36,7 +36,7 @@ static void* tui_connected_recovery_mode(struct irecv_device_info* info) {
return NULL;
}
static void* tui_disconnected_recovery_mode(struct irecv_device_info* info) {
void* tui_disconnected_recovery_mode(struct irecv_device_info* info) {
//printf("Recovery mode device %" PRIu64 " disconnected\n", info->ecid);
tui_last_event = TUI_EVENT_CONNECTED_DEVICES_CHANGED;
sem_post(tui_event_semaphore);
@@ -44,7 +44,7 @@ static void* tui_disconnected_recovery_mode(struct irecv_device_info* info) {
return NULL;
}
static void* tui_connected_dfu_mode(struct irecv_device_info* info) {
void* tui_connected_dfu_mode(struct irecv_device_info* info) {
//printf("DFU mode device %" PRIu64 " connected\n", info->ecid);
tui_last_event = TUI_EVENT_CONNECTED_DEVICES_CHANGED;
sem_post(tui_event_semaphore);
@@ -52,7 +52,7 @@ static void* tui_connected_dfu_mode(struct irecv_device_info* info) {
return NULL;
}
static void* tui_disconnected_dfu_mode(struct irecv_device_info* info) {
void* tui_disconnected_dfu_mode(struct irecv_device_info* info) {
//printf("DFU mode device %" PRIu64 " disconnected\n", info->ecid);
tui_last_event = TUI_EVENT_CONNECTED_DEVICES_CHANGED;
sem_post(tui_event_semaphore);
@@ -60,7 +60,7 @@ static void* tui_disconnected_dfu_mode(struct irecv_device_info* info) {
return NULL;
}
static int tui_connected_normal_mode(const usbmuxd_device_info_t *usbmuxd_device) {
int tui_connected_normal_mode(const usbmuxd_device_info_t *usbmuxd_device) {
struct tui_connected_device *tui_dev = malloc(sizeof(struct tui_connected_device));
strcpy(tui_dev->udid, usbmuxd_device->udid);
tui_dev->next = tui_connected_devices;
@@ -105,7 +105,7 @@ static int tui_connected_normal_mode(const usbmuxd_device_info_t *usbmuxd_device
return 0;
}
static void tui_disconnected_normal_mode(const usbmuxd_device_info_t *usbmuxd_device) {
void tui_disconnected_normal_mode(const usbmuxd_device_info_t *usbmuxd_device) {
struct tui_connected_device *cur = tui_connected_devices;
struct tui_connected_device *prev = NULL;
while (cur) {
@@ -126,7 +126,7 @@ static void tui_disconnected_normal_mode(const usbmuxd_device_info_t *usbmuxd_de
sem_post(tui_event_semaphore);
}
static void tui_device_event_cb(const usbmuxd_event_t *event, void* userdata) {
void tui_device_event_cb(const usbmuxd_event_t *event, void* userdata) {
if (event->device.conn_type != CONNECTION_TYPE_USB) return;
switch (event->event) {
case UE_DEVICE_ADD:
@@ -140,7 +140,7 @@ static void tui_device_event_cb(const usbmuxd_event_t *event, void* userdata) {
}
}
static void tui_irecv_device_event_cb(const irecv_device_event_t *event, void* userdata) {
void tui_irecv_device_event_cb(const irecv_device_event_t *event, void* userdata) {
pthread_t recovery_thread, dfu_thread;
int ret;
+5 -6
View File
@@ -28,14 +28,13 @@ int proc_pidpath(int pid, void * buffer, uint32_t buffersize);
char random_sem_name[sizeof("palera1n.tui_event_semaphore") + 16 + 1];
#endif
static int tui_state = 0;
int tui_state = 0;
int tui_x_offset = 0;
int tui_y_offset = 0;
bool supports_bright_colors = true;
static struct termios saved_termios;
struct termios saved_termios;
int redraw_screen(void) {
SETCOLOR(FG_BRIGHT_WHITE, BG_BLACK);
@@ -84,7 +83,7 @@ int redraw_screen(void) {
return 0;
}
static int destroy_window(void) {
int destroy_window(void) {
if (!tui_started) return 0;
tui_started = false;
tcsetattr(STDIN_FILENO, 0, &saved_termios);
@@ -98,7 +97,7 @@ static int destroy_window(void) {
return 0;
}
static int init_window(void) {
int init_window(void) {
setlocale(LC_ALL, NULL);
tui_started = true;
@@ -152,7 +151,7 @@ void tui_terminate(int sig) {
}
}
static void resize_handler(int sig) {
void resize_handler(int sig) {
redraw_screen();
}
+10 -10
View File
@@ -28,9 +28,9 @@
#include <palerain.h>
#include <tui.h>
static int tui_enter_dfu_nav_selection = 1;
static bool tui_device_is_entering_dfu = false;
static int tui_enter_dfu_status = 0;
int tui_enter_dfu_nav_selection = 1;
bool tui_device_is_entering_dfu = false;
int tui_enter_dfu_status = 0;
enum {
DEVICE_TYPE_IPHONE_SE,
@@ -41,7 +41,7 @@ enum {
DEVICE_TYPE_IPOD_TOUCH
} device_type;
static int tui_product_type_to_device_type(char *product_type) {
int tui_product_type_to_device_type(char *product_type) {
if (strcmp(product_type, "iPhone8,1") == 0 || strcmp(product_type, "iPhone8,2") == 0) {
return DEVICE_TYPE_IPHONE_6S;
}
@@ -68,11 +68,11 @@ static int tui_product_type_to_device_type(char *product_type) {
return DEVICE_TYPE_IPHONE_SE;
}
static int tui_enter_dfu_device_type = DEVICE_TYPE_IPHONE_SE;
int tui_enter_dfu_device_type = DEVICE_TYPE_IPHONE_SE;
static int tui_enter_dfu_loading_progress = 1;
int tui_enter_dfu_loading_progress = 1;
static void tui_screen_enter_dfu_nav(void) {
void tui_screen_enter_dfu_nav(void) {
MOVETOT(80 - 22, 23);
printf("%s[ Cancel ]" COLOR(FG_WHITE, BG_BLACK) " %s[ %s ]" COLOR(FG_WHITE, BG_BLACK),
tui_device_is_entering_dfu || tui_enter_dfu_status == 1 ? (supports_bright_colors ? COLOR(FG_BRIGHT_BLACK, BG_BLACK) : COLOR(FG_BLUE, BG_BLACK)) : tui_enter_dfu_nav_selection == 0 ? "\033[30;107m" : (
@@ -343,9 +343,9 @@ void tui_screen_enter_dfu_redraw(void) {
}
// TODO: IMPLEMENT REAL ENTER RECOVERY
static int dfu_time = 0;
int dfu_time = 0;
static tui_screen_t tui_enter_dfu(void) {
tui_screen_t tui_enter_dfu(void) {
if (tui_connected_devices && !tui_connected_devices->next) {
if (tui_connected_devices->mode == TUI_DEVICE_MODE_NORMAL) {
tui_enter_dfu_status = 0;
@@ -391,7 +391,7 @@ static tui_screen_t tui_enter_dfu(void) {
return JAILBREAK_SCREEN;
}
static int tui_enter_dfu_nav_mouse_select = -1;
int tui_enter_dfu_nav_mouse_select = -1;
tui_screen_t tui_screen_enter_dfu(void) {
if (tui_connected_devices && !tui_connected_devices->next) {
+9 -9
View File
@@ -18,7 +18,7 @@ int tui_enter_recovery_nav_selection = 1;
bool tui_device_is_entering_recovery = false;
bool tui_enter_recovery_mode_failed = false;
static void tui_screen_enter_recovery_nav(void) {
void tui_screen_enter_recovery_nav(void) {
MOVETOT(80 - 22, 23);
printf("%s[ Back ]" COLOR(FG_WHITE, BG_BLACK) " %s[ Next ]" COLOR(FG_WHITE, BG_BLACK),
tui_device_is_entering_recovery ? (supports_bright_colors ? COLOR(FG_BRIGHT_BLACK, BG_BLACK) : COLOR(FG_BLUE, BG_BLACK)) : tui_enter_recovery_nav_selection == 0 ? "\033[30;107m" : (
@@ -34,7 +34,7 @@ static void tui_screen_enter_recovery_nav(void) {
);
}
static char enter_recovery_loading[9][8] = {
char enter_recovery_loading[9][8] = {
"........",
"|.......",
".|......",
@@ -46,7 +46,7 @@ static char enter_recovery_loading[9][8] = {
".......|"
};
static char enter_recovery_loading_troll[9][8] = {
char enter_recovery_loading_troll[9][8] = {
".......",
"t......",
".r.....",
@@ -57,10 +57,10 @@ static char enter_recovery_loading_troll[9][8] = {
"......d",
};
static bool is_troll;
static int tui_enter_recovery_loading_progress = 0;
bool is_troll;
int tui_enter_recovery_loading_progress = 0;
static void tui_screen_enter_recovery_loading(void) {
void tui_screen_enter_recovery_loading(void) {
SETCOLOR(FG_YELLOW, BG_BLACK);
PRINTATT(3, 8, "Entering recovery mode ");
printf("%.8s", is_troll ? enter_recovery_loading_troll[tui_enter_recovery_loading_progress] : enter_recovery_loading[tui_enter_recovery_loading_progress]);
@@ -88,9 +88,9 @@ void tui_screen_enter_recovery_redraw(void) {
fflush(stdout);
}
static int recovery_time = 0;
int recovery_time = 0;
static tui_screen_t tui_enter_recovery(void) {
tui_screen_t tui_enter_recovery(void) {
enter_recovery_cmd(tui_connected_devices->udid);
is_troll = false;
if (rand() % 1000 == 0) {
@@ -128,7 +128,7 @@ static tui_screen_t tui_enter_recovery(void) {
}
}
static int tui_enter_recovery_nav_mouse_select = -1;
int tui_enter_recovery_nav_mouse_select = -1;
tui_screen_t tui_screen_enter_recovery(void) {
tui_device_is_entering_recovery = false;
+4 -5
View File
@@ -15,7 +15,7 @@
bool tui_is_jailbreaking = false;
static void tui_screen_jailbreak_nav(void) {
void tui_screen_jailbreak_nav(void) {
if (tui_is_jailbreaking) {
if (supports_bright_colors) {
SETCOLOR(FG_BRIGHT_BLACK, BG_BLACK);
@@ -29,8 +29,7 @@ static void tui_screen_jailbreak_nav(void) {
SETCOLOR(FG_WHITE, BG_BLACK);
}
static pthread_t tui_jailbreak_thread_id;
pthread_t tui_jailbreak_thread_id;
int tui_jailbreak_stage = 0;
char *tui_jailbreak_status = NULL;
@@ -39,7 +38,7 @@ void tui_jailbreak_status_changed(void) {
sem_post(tui_event_semaphore);
}
static void *tui_jailbreak_thread(void *arg) {
void *tui_jailbreak_thread(void *arg) {
tui_jailbreak_stage = 1;
tui_jailbreak_status = "About to execute checkra1n";
@@ -122,7 +121,7 @@ void tui_screen_jailbreak_redraw(void) {
tui_screen_jailbreak_nav();
}
static int tui_jailbreak_nav_mouse_select = -1;
int tui_jailbreak_nav_mouse_select = -1;
tui_screen_t tui_screen_jailbreak(void) {
redraw_screen();
+10 -12
View File
@@ -13,11 +13,9 @@
#include <palerain.h>
#include <tui.h>
static int tui_compare_versions(const char *firstVersion, const char *secondVersion);
bool showing_ecid = false;
static bool showing_ecid = false;
static char palera1n_logo[17][16] = {
char palera1n_logo[17][16] = {
" ++ ",
" #@@# ",
" +@@@@+ ",
@@ -36,7 +34,7 @@ static char palera1n_logo[17][16] = {
" :++: "
};
static char random_quotes[][150] = {
char random_quotes[][150] = {
"panic(cpu 1 caller 0xfffffff0232bd958): SEP Panic",
"Now with Apple TV support!",
"checkra1n will open source in 2020",
@@ -51,10 +49,10 @@ static char random_quotes[][150] = {
#define PALERA1N_URL "https://palera.in"
static int tui_main_nav_selection = 1;
static bool quick_mode_enabled = false;
static bool tui_can_start = false;
static int random_quote;
int tui_main_nav_selection = 1;
bool quick_mode_enabled = false;
bool tui_can_start = false;
int random_quote;
bool easter_egg = false;
@@ -208,7 +206,7 @@ void tui_screen_main_redraw(void) {
fflush(stdout);
}
static int tui_main_nav_mouse_select = -1;
int tui_main_nav_mouse_select = -1;
tui_screen_t tui_screen_main(void) {
random_quote = ((unsigned int)((rand()+rand())/2)) % 8;
@@ -331,7 +329,7 @@ tui_screen_t tui_screen_main(void) {
return MAIN_SCREEN;
}
static int tui_version_extract_component(const char *version, int index) {
int tui_version_extract_component(const char *version, int index) {
int component = 0;
int componentIndex = 0;
for (int i = 0; version[i] != '\0'; i++) {
@@ -350,7 +348,7 @@ static int tui_version_extract_component(const char *version, int index) {
return component;
}
static int tui_compare_versions(const char *firstVersion, const char *secondVersion) {
int tui_compare_versions(const char *firstVersion, const char *secondVersion) {
if (strcmp(firstVersion, secondVersion) == 0) {
return 0;
}
+3 -3
View File
@@ -13,10 +13,10 @@
#include <palerain.h>
#include <tui.h>
static int tui_options_nav_selection = 0;
static int tui_options_nav_mouse_select = 0;
int tui_options_nav_selection = 0;
int tui_options_nav_mouse_select = 0;
static bool tui_options_allow_untested = false;
bool tui_options_allow_untested = false;
bool tui_options_safe_mode = false;
bool tui_options_verbose_boot = false;
bool tui_options_force_revert = false;
+1 -1
View File
@@ -208,7 +208,7 @@ static const int pongo_usb_product = PONGO_USB_PRODUCT;
int wait_for_pongo(void) {
kern_return_t ret;
stuff_t stuff = {0};
stuff_t stuff;
io_iterator_t found, lost;
void* cfdict_keys[3];
+2 -1
View File
@@ -180,7 +180,8 @@ static int LostDevice(libusb_context *ctx, libusb_device *dev, libusb_hotplug_ev
int wait_for_pongo(void)
{
stuff_t stuff = {0};
stuff_t stuff;
stuff.handle = NULL;
libusb_hotplug_callback_handle hp[2];
libusb_context* ctx = NULL;