Compare commits

...
24 Commits
Author SHA1 Message Date
Nick Chan 4219552729 fix some normal mode queries 2023-12-19 18:48:59 +08:00
Nick Chan db7e1e511d Delete lockdown_helper 2023-11-23 12:40:24 +08:00
Nick Chan 04f6d975ca check malloc returns 2023-11-23 12:36:13 +08:00
Nick Chan 74ebacf120 fix embedded resources w/ 16-bit int 2023-11-23 12:21:28 +08:00
Nick Chan 891a89d26f fix macos build 2023-11-21 11:11:48 +08:00
Nick Chan b0aa963b6f Makefile: linux build improvements 2023-11-17 18:48:12 +08:00
Nick Chan 5a4bc455c3 fix some formatting on 32-bit PC 2023-11-07 17:05:22 +08:00
Nick Chan ded58231fb makefile structure changes 2023-11-06 01:54:57 +08:00
Nick Chan 6605a10b2f compress kpf too 2023-11-02 15:17:09 +08:00
Nick Chan c24710eb83 changes 2023-11-02 02:18:53 +08:00
Nick Chan d4b498ba7a plooshInit support 2023-10-30 17:41:32 +08:00
Nick Chan 6f30ad8314 Compressed ramdisk support 2023-10-30 17:37:46 +08:00
Nick Chan f2ac3ae8d7 actions: update mbedtls to 3.5.0 2023-10-30 17:16:20 +08:00
Nick Chan 4ecd75bea7 Makefile: noname 2023-10-29 15:57:35 +08:00
samara 5dac69db66 chore: was my bad . 2023-10-25 20:07:24 -07:00
Nick Chan 91c5de6408 docs: s/17.0/17.1/ 2023-10-26 10:33:14 +08:00
samara d65877f851 chore: why use mirror 2023-10-23 20:59:31 -07:00
Nick Chan 3df6791ebd actions: build a static linux usbmuxd 2023-10-14 18:23:02 +08:00
samara 06a93e697b chore: minor spelling mistake 2023-10-02 16:41:51 -07:00
Nick Chan ffad44ce10 docs/palera1n.1: minor formatting and version fixes 2023-10-02 23:02:55 +08:00
alexia 4775c8ab23 chore: update palera1n-ios description (#399)
Added a note saying it is not an untether, and about bad success rate.
2023-08-08 04:28:43 -07:00
kok3shidoll 7992b1e2a9 Makefile: Change Pongo.bin and kpf paths 2023-07-28 03:18:02 +09:00
samara 3fdb75b9fa chore: change readme 2023-07-27 05:57:29 -07:00
samara 3b0d8ece54 chore: Update Makefile 2023-07-16 11:09:47 -07:00
32 changed files with 388 additions and 482 deletions

No files matched your search

+128 -56
View File
@@ -36,8 +36,8 @@ jobs:
- name: Build Documentation - name: Build Documentation
run: | run: |
make -j$(nproc) docs make -j$(nproc) docs
mkdir ready mkdir -p ready/docs
cp docs/*.html docs/mandoc.css docs/palera1n.1 ready cp docs/*.html docs/mandoc.css docs/palera1n.1 ready/docs
- name: Get branch name - name: Get branch name
id: branch-name id: branch-name
@@ -74,7 +74,7 @@ jobs:
minos: 7.0 minos: 7.0
runs-on: macos-12 runs-on: macos-12
env: env:
MBEDTLS_VERSION: 3.4.0 MBEDTLS_VERSION: 3.5.0
READLINE_VERSION: 8.2 READLINE_VERSION: 8.2
SLANG_VERSION: 2.3.3 SLANG_VERSION: 2.3.3
NEWT_VERSION: 0.52.23 NEWT_VERSION: 0.52.23
@@ -317,17 +317,25 @@ jobs:
find dep_root -name '*.dylib' -delete find dep_root -name '*.dylib' -delete
find dep_root -name '*.la' -delete find dep_root -name '*.la' -delete
gmake -j$(sysctl -n hw.ncpu) gmake -j$(sysctl -n hw.ncpu)
mkdir -p ready cp src/palera1n palera1n-${{ matrix.os }}-${{ matrix.arch }}
mv src/palera1n palera1n-${{ matrix.os }}-${{ matrix.arch }}
dsymutil palera1n-${{ matrix.os }}-${{ matrix.arch }} dsymutil palera1n-${{ matrix.os }}-${{ matrix.arch }}
strip palera1n-${{ matrix.os }}-${{ matrix.arch }} strip palera1n-${{ matrix.os }}-${{ matrix.arch }}
- name: Build palera1n (Development)
run: |
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
run: |
mkdir -p ready/build_depends
tar -zcf ready/build_depends/dep_root-${{ matrix.os }}-${{ matrix.arch }}.tgz dep_root
if [ "${{ matrix.os }}" == "macosx" ]; then if [ "${{ matrix.os }}" == "macosx" ]; then
ldid -S palera1n-${{ matrix.os }}-${{ matrix.arch }} ldid -S palera1n-${{ matrix.os }}-${{ matrix.arch }}{,.development}
else else
ldid -Ssrc/usb.xml palera1n-${{ matrix.os }}-${{ matrix.arch }} ldid -Ssrc/usb.xml palera1n-${{ matrix.os }}-${{ matrix.arch }}{,.development}
fi fi
mkdir -p ready
tar -zcf ready/dep_root-${{ matrix.os }}-${{ matrix.arch }}.tgz dep_root
- name: Get branch name - name: Get branch name
id: branch-name id: branch-name
@@ -344,7 +352,7 @@ jobs:
forceUpload: true forceUpload: true
dryRun: false dryRun: false
localDir: 'ready/' localDir: 'ready/'
remoteDir: "/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch || github.ref }}/${{ github.run_number }}" remoteDir: "/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch || github.ref_name }}/${{ github.run_number }}"
- name: Upload ${{ matrix.os }} thin ${{ matrix.arch }} build - name: Upload ${{ matrix.os }} thin ${{ matrix.arch }} build
if: ${{ github.event_name != 'pull_request' }} if: ${{ github.event_name != 'pull_request' }}
@@ -354,6 +362,15 @@ jobs:
path: palera1n-${{ matrix.os }}-${{ matrix.arch }} path: palera1n-${{ matrix.os }}-${{ matrix.arch }}
retention-days: 1 retention-days: 1
- name: Upload ${{ matrix.os }} thin ${{ matrix.arch }} build (Development)
if: ${{ github.event_name != 'pull_request' }}
uses: actions/upload-artifact@v3
with:
name: palera1n-${{ matrix.os }}-${{ matrix.arch }}.development
path: palera1n-${{ matrix.os }}-${{ matrix.arch }}.development
retention-days: 1
- name: Upload ${{ matrix.os }} thin ${{ matrix.arch }} debug symbols - name: Upload ${{ matrix.os }} thin ${{ matrix.arch }} debug symbols
if: ${{ github.event_name != 'pull_request' }} if: ${{ github.event_name != 'pull_request' }}
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
@@ -377,25 +394,31 @@ jobs:
with: with:
packages: sed coreutils packages: sed coreutils
cache: true cache: true
mirror: 'https://procursus.itsnebula.net/' mirror: 'https://apt.procurs.us/'
- name: Download all Darwin artifacts - name: Download all Darwin artifacts
uses: actions/download-artifact@v3 uses: actions/download-artifact@v3
- name: Prepare artifact - name: Prepare artifact
run: | run: |
find .
lipo -create -arch arm64 ./palera1n-macosx-arm64/palera1n-macosx-arm64 -arch x86_64 ./palera1n-macosx-x86_64/palera1n-macosx-x86_64 -output palera1n-macos lipo -create -arch arm64 ./palera1n-macosx-arm64/palera1n-macosx-arm64 -arch x86_64 ./palera1n-macosx-x86_64/palera1n-macosx-x86_64 -output palera1n-macos
lipo -create -arch arm64 ./palera1n-macosx-arm64.development/palera1n-macosx-arm64.development -arch x86_64 ./palera1n-macosx-x86_64.development/palera1n-macosx-x86_64.development -output palera1n-macos.development
mkdir -p palera1n-macos.dSYM/Contents/Resources/DWARF mkdir -p palera1n-macos.dSYM/Contents/Resources/DWARF
cp ./palera1n-macosx-x86_64.dSYM/Contents/Info.plist palera1n-macos.dSYM/Contents cp ./palera1n-macosx-x86_64.dSYM/Contents/Info.plist palera1n-macos.dSYM/Contents
lipo -create -arch arm64 palera1n-macosx-arm64.dSYM/Contents/Resources/DWARF/palera1n-macosx-arm64 -arch x86_64 palera1n-macosx-x86_64.dSYM/Contents/Resources/DWARF/palera1n-macosx-x86_64 -output palera1n-macos.dSYM/Contents/Resources/DWARF/palera1n-macos lipo -create -arch arm64 palera1n-macosx-arm64.dSYM/Contents/Resources/DWARF/palera1n-macosx-arm64 -arch x86_64 palera1n-macosx-x86_64.dSYM/Contents/Resources/DWARF/palera1n-macosx-x86_64 -output palera1n-macos.dSYM/Contents/Resources/DWARF/palera1n-macos
mkdir ready mkdir -p ready/{debian,binaries,debug_symbols,binaries_development}
cp palera1n-macos ready/palera1n-macos-universal cp palera1n-macos.development ready/binaries_development/palera1n-macos-universal.development
cp ./palera1n-macosx-x86_64/palera1n-macosx-x86_64 ready/palera1n-macos-x86_64 cp palera1n-macos ready/binaries/palera1n-macos-universal
cp ./palera1n-macosx-arm64/palera1n-macosx-arm64 ready/palera1n-macos-arm64 cp ./palera1n-macosx-x86_64/palera1n-macosx-x86_64 ready/binaries/palera1n-macos-x86_64
cp ./palera1n-iphoneos-arm64/palera1n-iphoneos-arm64 ready/palera1n-iphoneos-arm64 cp ./palera1n-macosx-arm64/palera1n-macosx-arm64 ready/binaries/palera1n-macos-arm64
zip -r9 ready/palera1n-iphoneos-arm64.dSYM.zip palera1n-iphoneos-arm64.dSYM cp ./palera1n-iphoneos-arm64/palera1n-iphoneos-arm64 ready/binaries/palera1n-iphoneos-arm64
zip -r9 ready/palera1n-macos.dSYM.zip palera1n-macos.dSYM cp ./palera1n-macosx-x86_64.development/palera1n-macosx-x86_64.development ready/binaries_development/palera1n-macos-x86_64.development
cp ./palera1n-macosx-arm64.development/palera1n-macosx-arm64.development ready/binaries_development/palera1n-macos-arm64.development
cp ./palera1n-iphoneos-arm64.development/palera1n-iphoneos-arm64.development ready/binaries_development/palera1n-iphoneos-arm64.development
zip -r9 ready/debug_symbols/palera1n-iphoneos-arm64.dSYM.zip palera1n-iphoneos-arm64.dSYM
zip -r9 ready/debug_symbols/palera1n-macosx-arm64.dSYM.zip palera1n-macosx-arm64.dSYM
zip -r9 ready/debug_symbols/palera1n-macosx-x86_64.dSYM.zip palera1n-macosx-x86_64.dSYM
zip -r9 ready/debug_symbols/palera1n-macos.dSYM.zip palera1n-macos.dSYM
- name: Build debs - name: Build debs
run: | run: |
@@ -411,12 +434,12 @@ jobs:
gsed 's|@DEB_ARCH@|darwin-amd64|g' -i stage/DEBIAN/control gsed 's|@DEB_ARCH@|darwin-amd64|g' -i stage/DEBIAN/control
gsed "s|@DEB_VERSION@|$version|g" -i stage/DEBIAN/control gsed "s|@DEB_VERSION@|$version|g" -i stage/DEBIAN/control
ginstall -Dm644 ready/palera1n-macos-x86_64 stage/opt/procursus/bin/palera1n ginstall -Dm644 ready/binaries/palera1n-macos-x86_64 stage/opt/procursus/bin/palera1n
ginstall -Dm644 docs/palera1n.1 stage/opt/procursus/usr/share/man/man1/palera1n.1 zstd -c19 docs/palera1n.1 > stage/opt/procursus/usr/share/man/man1/palera1n.1.zst
chmod +x stage/opt/procursus/bin/palera1n chmod 644 stage/opt/procursus/usr/share/man/man1/palera1n.1.zst
chmod 755 stage/opt/procursus/bin/palera1n
dpkg-deb -Zzstd -b stage palera1n_darwin-amd64.deb dpkg-deb --root-owner-group -Zzstd -b stage palera1n_darwin-amd64.deb
mv palera1n*.deb ready/
rm -rf stage rm -rf stage
# Darwin arm64 # Darwin arm64
@@ -428,12 +451,12 @@ jobs:
gsed 's|@DEB_ARCH@|darwin-arm64|g' -i stage/DEBIAN/control gsed 's|@DEB_ARCH@|darwin-arm64|g' -i stage/DEBIAN/control
gsed "s|@DEB_VERSION@|$version|g" -i stage/DEBIAN/control gsed "s|@DEB_VERSION@|$version|g" -i stage/DEBIAN/control
ginstall -Dm644 ready/palera1n-macos-arm64 stage/opt/procursus/bin/palera1n ginstall -Dm644 ready/binaries/palera1n-macos-arm64 stage/opt/procursus/bin/palera1n
ginstall -Dm644 docs/palera1n.1 stage/opt/procursus/usr/share/man/man1/palera1n.1 zstd -c19 docs/palera1n.1 > stage/opt/procursus/usr/share/man/man1/palera1n.1.zst
chmod +x stage/opt/procursus/bin/palera1n chmod 644 stage/opt/procursus/usr/share/man/man1/palera1n.1.zst
chmod 755 stage/opt/procursus/bin/palera1n
dpkg-deb -Zzstd -b stage palera1n_darwin-arm64.deb dpkg-deb --root-owner-group -Zzstd -b stage palera1n_darwin-arm64.deb
mv palera1n*.deb ready/
rm -rf stage rm -rf stage
# iPhoneOS # iPhoneOS
@@ -445,12 +468,12 @@ jobs:
gsed 's|@DEB_ARCH@|iphoneos-arm|g' -i stage/DEBIAN/control gsed 's|@DEB_ARCH@|iphoneos-arm|g' -i stage/DEBIAN/control
gsed "s|@DEB_VERSION@|$version|g" -i stage/DEBIAN/control gsed "s|@DEB_VERSION@|$version|g" -i stage/DEBIAN/control
ginstall -Dm644 ready/palera1n-iphoneos-arm64 stage/usr/bin/palera1n ginstall -Dm644 ready/binaries/palera1n-iphoneos-arm64 stage/usr/bin/palera1n
ginstall -Dm644 docs/palera1n.1 stage/usr/share/man/man1/palera1n.1 zstd -c19 docs/palera1n.1 > stage/usr/share/man/man1/palera1n.1.zst
chmod +x stage/usr/bin/palera1n chmod 644 stage/usr/share/man/man1/palera1n.1.zst
chmod 755 stage/usr/bin/palera1n
dpkg-deb -Zzstd -b stage palera1n_iphoneos-arm.deb dpkg-deb --root-owner-group -Zzstd -b stage palera1n_iphoneos-arm.deb
mv palera1n*.deb ready/
rm -rf stage rm -rf stage
# iPhoneOS (rootless) # iPhoneOS (rootless)
@@ -462,13 +485,15 @@ jobs:
gsed 's|@DEB_ARCH@|iphoneos-arm64|g' -i stage/DEBIAN/control gsed 's|@DEB_ARCH@|iphoneos-arm64|g' -i stage/DEBIAN/control
gsed "s|@DEB_VERSION@|$version|g" -i stage/DEBIAN/control gsed "s|@DEB_VERSION@|$version|g" -i stage/DEBIAN/control
ginstall -Dm644 ready/palera1n-iphoneos-arm64 stage/var/jb/usr/bin/palera1n ginstall -Dm644 ready/binaries/palera1n-iphoneos-arm64 stage/var/jb/usr/bin/palera1n
ginstall -Dm644 docs/palera1n.1 stage/var/jb/usr/share/man/man1/palera1n.1 zstd -c19 docs/palera1n.1 > stage/var/jb/usr/share/man/man1/palera1n.1.zst
chmod +x stage/var/jb/usr/bin/palera1n chmod 644 stage/var/jb/usr/share/man/man1/palera1n.1.zst
chmod 755 stage/var/jb/usr/bin/palera1n
dpkg-deb -Zzstd -b stage palera1n_iphoneos-arm64.deb dpkg-deb --root-owner-group -Zzstd -b stage palera1n_iphoneos-arm64.deb
mv palera1n*.deb ready/
rm -rf stage rm -rf stage
mv palera1n*.deb ready/debian
- name: Save build tag - name: Save build tag
run: echo "$(git describe --dirty --tags --abbrev=7 | sed 's|-dirty||')" > build-tag.txt run: echo "$(git describe --dirty --tags --abbrev=7 | sed 's|-dirty||')" > build-tag.txt
@@ -494,7 +519,7 @@ jobs:
forceUpload: true forceUpload: true
dryRun: false dryRun: false
localDir: 'ready/' localDir: 'ready/'
remoteDir: "/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch || github.ref }}/${{ github.run_number }}" remoteDir: "/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch || github.ref_name }}/${{ github.run_number }}"
build-Linux: build-Linux:
strategy: strategy:
@@ -506,7 +531,7 @@ jobs:
- aarch64-linux-musl - aarch64-linux-musl
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
MBEDTLS_VERSION: 3.4.0 MBEDTLS_VERSION: 3.5.0
LIBUSB_VERSION: 1.0.26 LIBUSB_VERSION: 1.0.26
READLINE_VERSION: 8.2 READLINE_VERSION: 8.2
SLANG_VERSION: 2.3.3 SLANG_VERSION: 2.3.3
@@ -601,12 +626,14 @@ jobs:
git clone --depth=1 https://github.com/libimobiledevice/libirecovery 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/libusbmuxd
git clone --depth=1 https://github.com/libimobiledevice/libimobiledevice git clone --depth=1 https://github.com/libimobiledevice/libimobiledevice
git clone --depth=1 https://github.com/libimobiledevice/usbmuxd
- name: Build Mbed TLS - name: Build Mbed TLS
run: | run: |
cd mbedtls-${{ env.MBEDTLS_VERSION }} cd mbedtls-${{ env.MBEDTLS_VERSION }}
cat ../patches/mbedtls/0001-Allow-empty-x509-cert-issuer.patch | patch -sN -d . -p1 cat ../patches/mbedtls/0001-Allow-empty-x509-cert-issuer.patch | patch -sN -d . -p1
mkdir build mkdir build
if [ "${{ matrix.triple }}" = "i486-linux-musl" ]; then sed -i '/define MBEDTLS_AESNI_C/d' include/mbedtls/mbedtls_config.h; fi
cd build cd build
cmake .. \ cmake .. \
-DCMAKE_BUILD_TYPE=Release \ -DCMAKE_BUILD_TYPE=Release \
@@ -750,26 +777,52 @@ jobs:
sudo rm /usr/local sudo rm /usr/local
sudo mv /usr/local.bak /usr/local sudo mv /usr/local.bak /usr/local
- name: Build usbmuxd
run: |
cd usbmuxd
autoreconf -fiv
./configure ${{ env.CONFIGURE_ARGS }} --without-systemd
${{ matrix.triple }}-gcc ${{ env.CFLAGS }} -I${{ env.DESTDIR }}/${{ env.PREFIX }}/include/libusb-1.0 src/*.c \
-DHAVE_CONFIG_H -no-pie \
-I. -static ${{ env.LDFLAGS }}} -limobiledevice-1.0 -lusbmuxd-2.0 -limobiledevice-glue-1.0 \
-lplist-2.0 -lusb-1.0 -lmbedtls -lmbedcrypto -lmbedx509 -lpthread -o usbmuxd
mkdir -p ${{ env.DESTDIR }}/${{ env.PREFIX }}/sbin
${{ matrix.triple }}-objcopy --only-keep-debug usbmuxd usbmuxd.debug
${{ matrix.triple }}-strip --strip-debug --strip-unneeded usbmuxd
${{ matrix.triple }}-objcopy --add-gnu-debuglink=usbmuxd.debug usbmuxd
install -m755 usbmuxd usbmuxd.debug ${{ env.DESTDIR }}/${{ env.PREFIX }}/sbin
cd ..
- name: Build palera1n - name: Build palera1n
run: | run: |
cp -a sysroot/${{ env.PREFIX }}/{include,lib} dep_root cp -a ${{ env.DESTDIR }}/${{ env.PREFIX }}/{include,lib} dep_root
find dep_root -name '*.so' -delete find dep_root -name '*.so' -delete
find dep_root -name '*.la' -delete find dep_root -name '*.la' -delete
CC="${{ matrix.triple }}-gcc" make -j$(nproc) CC="${{ matrix.triple }}-gcc" make -j$(nproc)
cp src/palera1n palera1n.release
- name: Seperate debug symbols - name: Seperate debug symbols
run: | run: |
${{ matrix.triple }}-objcopy --only-keep-debug src/palera1n palera1n.debug ${{ matrix.triple }}-objcopy --only-keep-debug palera1n.release palera1n.debug
${{ matrix.triple }}-strip --strip-debug --strip-unneeded src/palera1n ${{ matrix.triple }}-strip --strip-debug --strip-unneeded palera1n.release
${{ matrix.triple }}-objcopy --add-gnu-debuglink=palera1n.debug src/palera1n ${{ matrix.triple }}-objcopy --add-gnu-debuglink=palera1n.debug palera1n.release
chmod -x palera1n.debug chmod -x palera1n.debug
- name: Build palera1n (Development)
run: |
CC="${{ matrix.triple }}-gcc" make -j$(nproc) clean
CC="${{ matrix.triple }}-gcc" make -j$(nproc) DEV_BUILD=1 TUI=1 ROOTFUL=1
cp src/palera1n palera1n.development
- name: Prepare artifact - name: Prepare artifact
run: | run: |
mkdir ready mkdir -p ready/{binaries,debian,binaries_development,build_depends,debug_symbols} usbmuxd-static
mv palera1n.debug ready/palera1n-${{ env.CHECKRA1N_NAME }}.debug mv palera1n.debug ready/debug_symbols/palera1n-${{ env.CHECKRA1N_NAME }}.debug
mv src/palera1n ready/palera1n-${{ env.CHECKRA1N_NAME }} mv palera1n.release ready/binaries/palera1n-${{ env.CHECKRA1N_NAME }}
tar -zcf ready/dep_root_${{ matrix.triple }}.tgz dep_root mv palera1n.development ready/binaries_development/palera1n-${{ env.CHECKRA1N_NAME }}.development
tar -zcf ready/build_depends/dep_root_${{ matrix.triple }}.tgz dep_root
install -m755 sysroot/${{ env.PREFIX }}/sbin/usbmuxd usbmuxd-static/usbmuxd-${{ env.CHECKRA1N_NAME }}
install -m755 sysroot/${{ env.PREFIX }}/sbin/usbmuxd.debug usbmuxd-static/usbmuxd-${{ env.CHECKRA1N_NAME }}.debug
- name: Build debs - name: Build debs
run: | run: |
@@ -784,12 +837,13 @@ jobs:
sed 's|@DEB_ARCH@|${{ env.ARCH_NAME }}|g' -i stage/DEBIAN/control sed 's|@DEB_ARCH@|${{ env.ARCH_NAME }}|g' -i stage/DEBIAN/control
sed "s|@DEB_VERSION@|$version|g" -i stage/DEBIAN/control sed "s|@DEB_VERSION@|$version|g" -i stage/DEBIAN/control
install -Dm644 ready/palera1n-${{ env.CHECKRA1N_NAME }} stage/usr/bin/palera1n install -Dm644 ready/binaries/palera1n-${{ env.CHECKRA1N_NAME }} stage/usr/bin/palera1n
install -Dm644 docs/palera1n.1 stage/usr/share/man/man1/palera1n.1 gzip -c9 docs/palera1n.1 > stage/usr/share/man/man1/palera1n.1.gz
chmod +x stage/usr/bin/palera1n chmod 755 stage/usr/bin/palera1n
chmod 644 stage/usr/share/man/man1/palera1n.1.gz
dpkg-deb -b stage palera1n_${{ env.ARCH_NAME }}.deb dpkg-deb --root-owner-group -b stage palera1n_${{ env.ARCH_NAME }}.deb
mv palera1n*.deb ready/ mv palera1n*.deb ready/debian
rm -rf stage rm -rf stage
- name: Get branch name - name: Get branch name
@@ -807,7 +861,20 @@ jobs:
forceUpload: true forceUpload: true
dryRun: false dryRun: false
localDir: 'ready/' localDir: 'ready/'
remoteDir: "/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch || github.ref }}/${{ github.run_number }}" remoteDir: "/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch || github.ref_name }}/${{ github.run_number }}"
- name: Upload usbmuxd artifact
if: ${{ github.event_name != 'pull_request' }}
uses: wangyucode/[email protected]
with:
host: ${{ secrets.NICKCHAN_FTP_HOST }}
port: ${{ secrets.NICKCHAN_FTP_PORT }}
username: palera1n
password: ${{ secrets.NICKCHAN_FTP_PASS }}
forceUpload: true
dryRun: false
localDir: 'usbmuxd-static/'
remoteDir: "/palera1n/artifacts/usbmuxd-static"
finish-build: finish-build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -826,8 +893,13 @@ jobs:
with: with:
name: build-tag name: build-tag
- uses: geekyeggo/delete-artifact@v2
with:
name: '*'
failOnError: false
- name: Send Discord build message - name: Send Discord build message
run: | run: |
COMMITMESSAGE=`git log --pretty=format:'- \`%h\` %s' -1 --reverse` && COMMITMESSAGE=`git log --pretty=format:'- \`%h\` %s' -1 --reverse` &&
(curl "${{ secrets.DISCORD_WEBHOOK }}" -sS -H "Content-Type:application/json" -X POST -d "{\"content\":null,\"embeds\":[{\"title\":\"[palera1n:${{ steps.branch-name.outputs.ref_branch }}] Nightly Build ${{ github.run_number }}\",\"url\":\"https://github.com/palera1n/palera1n/actions/runs/${GITHUB_RUN_ID}\",\"color\":2829617,\"fields\":[{\"name\":\"Build tag\",\"value\":\"- \`$(cat build-tag.txt | sed 's|\n||')\`\"},{\"name\":\"Destination\",\"value\":\"- https://cdn.nickchan.lol/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch }}/${{ github.run_number }}\"},{\"name\":\"Documentation\",\"value\":\"- [palera1n.1.html](https://cdn.nickchan.lol/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch }}/${{ github.run_number }}/palera1n.1.html)\"},{\"name\":\"Main Artifacts\",\"value\":\"- [palera1n-iphoneos-arm64](https://cdn.nickchan.lol/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch }}/${{ github.run_number }}/palera1n-iphoneos-arm64)\n- [palera1n-linux-arm64](https://cdn.nickchan.lol/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch }}/${{ github.run_number }}/palera1n-linux-arm64)\n- [palera1n-linux-armel](https://cdn.nickchan.lol/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch }}/${{ github.run_number }}/palera1n-linux-armel)\n- [palera1n-linux-x86](https://cdn.nickchan.lol/palera1n/artifacts/c-rewrite/$${{ steps.branch-name.outputs.ref_branch }}/${{ github.run_number }}/palera1n-linux-x86)\n- [palera1n-linux-x86_64](https://cdn.nickchan.lol/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch }}/${{ github.run_number }}/palera1n-linux-x86_64)\n- [palera1n-macos-universal](https://cdn.nickchan.lol/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch }}/${{ github.run_number }}/palera1n-macos-universal)\"}],\"footer\":{\"text\":\"${{ github.actor }}\", \"icon_url\": \"https://github.com/${{ github.actor }}.png\",\"timestamp\":\"$(date -u +"%FT%TZ")\"}}],\"username\":\"GitHub Actions\",\"avatar_url\":\"https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png\"}") (curl "${{ secrets.DISCORD_WEBHOOK }}" -sS -H "Content-Type:application/json" -X POST -d "{\"content\":null,\"embeds\":[{\"title\":\"[palera1n:${{ steps.branch-name.outputs.ref_branch }}] Nightly Build ${{ github.run_number }}\",\"url\":\"https://github.com/palera1n/palera1n/actions/runs/${GITHUB_RUN_ID}\",\"color\":2829617,\"fields\":[{\"name\":\"Build tag\",\"value\":\"- \`$(cat build-tag.txt | sed 's|\n||')\`\"},{\"name\":\"Destination\",\"value\":\"- https://cdn.nickchan.lol/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch }}/${{ github.run_number }}\"},{\"name\":\"Documentation\",\"value\":\"- [palera1n.1.html](https://cdn.nickchan.lol/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch }}/${{ github.run_number }}/docs/palera1n.1.html)\"},{\"name\":\"Main Artifacts\",\"value\":\"- [palera1n-iphoneos-arm64](https://cdn.nickchan.lol/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch }}/${{ github.run_number }}/binaries/palera1n-iphoneos-arm64)\n- [palera1n-linux-arm64](https://cdn.nickchan.lol/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch }}/${{ github.run_number }}/binaries/palera1n-linux-arm64)\n- [palera1n-linux-armel](https://cdn.nickchan.lol/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch }}/${{ github.run_number }}/binaries/palera1n-linux-armel)\n- [palera1n-linux-x86](https://cdn.nickchan.lol/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch }}/${{ github.run_number }}/binaries/palera1n-linux-x86)\n- [palera1n-linux-x86_64](https://cdn.nickchan.lol/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch }}/${{ github.run_number }}/binaries/palera1n-linux-x86_64)\n- [palera1n-macos-universal](https://cdn.nickchan.lol/palera1n/artifacts/c-rewrite/${{ steps.branch-name.outputs.ref_branch }}/${{ github.run_number }}/binaries/palera1n-macos-universal)\"}],\"footer\":{\"text\":\"${{ github.actor }}\", \"icon_url\": \"https://github.com/${{ github.actor }}.png\",\"timestamp\":\"$(date -u +"%FT%TZ")\"}}],\"username\":\"GitHub Actions\",\"avatar_url\":\"https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png\"}")
+1
View File
@@ -11,6 +11,7 @@ src/palera1n
!xxd-embedded.h !xxd-embedded.h
src/binpack.dmg src/binpack.dmg
src/ramdisk.dmg src/ramdisk.dmg
src/ramdisk.dmg.lzma
src/xxd-*.c src/xxd-*.c
.DS_Store .DS_Store
!palera1n.1 !palera1n.1
+15 -8
View File
@@ -1,16 +1,17 @@
NAME = Ο άλφα είναι ρατσιστής
SRC = $(shell pwd) SRC = $(shell pwd)
DEP = $(SRC)/dep_root DEP = $(SRC)/dep_root
STRIP = strip STRIP = strip
CC ?= cc CC ?= cc
CFLAGS += -I$(DEP)/include -I$(SRC)/include -I$(SRC) -D_XOPEN_SOURCE=500 CFLAGS += -isystem $(DEP)/include -I$(SRC)/include -I$(SRC) -D_XOPEN_SOURCE=500
CFLAGS += -Wall -Wextra -Wno-unused-parameter -DPALERAIN_VERSION=\"2.0.0\" CFLAGS += -Wall -Wextra -Wno-unused-parameter -DPALERAIN_VERSION=\"2.0.0\" -DHAVE_LIBIMOBILEDEVICE
CFLAGS += -Wno-unused-variable -I$(SRC)/src -std=c99 -pedantic-errors -D_C99_SOURCE -D_POSIX_C_SOURCE=200112L 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-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 LIBS += $(DEP)/lib/libimobiledevice-glue-1.0.a $(DEP)/lib/libplist-2.0.a -pthread -lm
ifeq ($(TARGET_OS),) ifeq ($(TARGET_OS),)
TARGET_OS = $(shell uname -s) TARGET_OS = $(shell uname -s)
UNAME = $(TARGET_OS)
else
UNAME = $(shell uname -s)
endif endif
ifeq ($(TARGET_OS),Darwin) ifeq ($(TARGET_OS),Darwin)
CFLAGS += -Wno-nullability-extension CFLAGS += -Wno-nullability-extension
@@ -21,7 +22,7 @@ LDFLAGS += -Wl,-dead_strip
LIBS += -framework CoreFoundation -framework IOKit LIBS += -framework CoreFoundation -framework IOKit
else else
CFLAGS += -fdata-sections -ffunction-sections CFLAGS += -fdata-sections -ffunction-sections
LDFLAGS += -static -no-pie -Wl,--gc-sections LDFLAGS += -Wl,--gc-sections
endif endif
LIBS += $(DEP)/lib/libmbedtls.a $(DEP)/lib/libmbedcrypto.a $(DEP)/lib/libmbedx509.a $(DEP)/lib/libreadline.a LIBS += $(DEP)/lib/libmbedtls.a $(DEP)/lib/libmbedcrypto.a $(DEP)/lib/libmbedx509.a $(DEP)/lib/libreadline.a
@@ -48,6 +49,12 @@ BUILD_STYLE = RELEASE
endif endif
LIBS += -lc LIBS += -lc
ifeq ($(TARGET_OS),Linux)
ifneq ($(shell echo '$(BUILD_STYLE)' | grep -q '[A-Z]\+SAN' && echo 1),1)
LDFLAGS += -static -no-pie
endif
endif
ifneq ($(BAKERAIN_DEVELOPE_R),) ifneq ($(BAKERAIN_DEVELOPE_R),)
CFLAGS += -DBAKERAIN_DEVELOPE_R="\"$(BAKERAIN_DEVELOPE_R)\"" CFLAGS += -DBAKERAIN_DEVELOPE_R="\"$(BAKERAIN_DEVELOPE_R)\""
endif endif
@@ -64,7 +71,7 @@ CFLAGS += -DBUILD_WHOAMI="\"$(BUILD_WHOAMI)\"" -DBUILD_TAG="\"$(BUILD_TAG)\""
CFLAGS += -DBUILD_NUMBER="\"$(BUILD_NUMBER)\"" -DBUILD_BRANCH="\"$(BUILD_BRANCH)\"" CFLAGS += -DBUILD_NUMBER="\"$(BUILD_NUMBER)\"" -DBUILD_BRANCH="\"$(BUILD_BRANCH)\""
CFLAGS += -DBUILD_COMMIT="\"$(BUILD_COMMIT)\"" CFLAGS += -DBUILD_COMMIT="\"$(BUILD_COMMIT)\""
export SRC DEP CC CFLAGS LDFLAGS LIBS TARGET_OS DEV_BUILD BUILD_DATE BUILD_TAG BUILD_WHOAMI BUILD_STYLE BUILD_NUMBER BUILD_BRANCH export SRC DEP UNAME CC CFLAGS LDFLAGS LIBS SHELL TARGET_OS DEV_BUILD BUILD_DATE BUILD_TAG BUILD_WHOAMI BUILD_STYLE BUILD_NUMBER BUILD_BRANCH
all: palera1n all: palera1n
@@ -76,13 +83,13 @@ clean:
$(MAKE) -C docs clean $(MAKE) -C docs clean
download-deps: download-deps:
$(MAKE) -C src checkra1n-macos checkra1n-linux-arm64 checkra1n-linux-armel checkra1n-linux-x86 checkra1n-linux-x86_64 checkra1n-kpf-pongo ramdisk.dmg binpack.dmg Pongo.bin $(MAKE) -C src $(patsubst %, resources/%, checkra1n-macos checkra1n-linux-arm64 checkra1n-linux-armel checkra1n-linux-x86 checkra1n-linux-x86_64 checkra1n-kpf-pongo ramdisk.dmg binpack.dmg Pongo.bin)
docs: docs:
$(MAKE) -C docs $(MAKE) -C docs
distclean: clean distclean: clean
rm -rf palera1n-* palera1n*.dSYM src/checkra1n-* src/checkra1n-kpf-pongo src/ramdisk.dmg src/binpack.dmg src/Pongo.bin $(MAKE) -C src distclean
.PHONY: all palera1n clean docs distclean .PHONY: all palera1n clean docs distclean
+1 -1
View File
@@ -51,4 +51,4 @@ Make sure you provide full details on your device, such as:
Using `-VvL` would help with debugging. Using `-VvL` would help with debugging.
Join the [Support Discord](https://dsc.gg/palera1n), and create a thread in [#support](https://discord.com/channels/1028398973452570725/1028730487700738130) or ask in [#general](https://discord.com/channels/1028398973452570725/1028398976640229380). Join the [Support Discord](https://dsc.gg/palera1n)
+4 -10
View File
@@ -2,11 +2,11 @@
.\" Copyright (c) 2023 Nick Chan .\" Copyright (c) 2023 Nick Chan
.\" SPDX-License-Identifier: MIT .\" SPDX-License-Identifier: MIT
.\" .\"
.Dd "2 July 2023" .Dd "26 October 2023"
.Dt palera1n 1 .Dt palera1n 1
.Sh NAME .Sh NAME
.Nm palera1n .Nm palera1n
.Nd iOS 15.0-16.5.1 arm64 iOS/iPadOS jailbreaking tool .Nd iOS 15.0-17.1 arm64 iOS/iPadOS jailbreaking tool
.Sh SYNOPSIS .Sh SYNOPSIS
.Nm .Nm
.Op Fl dDEhILnpRsSvV .Op Fl dDEhILnpRsSvV
@@ -124,13 +124,6 @@ iOS15 branch or your own fork of it.
Makes jbinit log to Makes jbinit log to
.Em /cores/jbinit.log .Em /cores/jbinit.log
This file may be viewed from sandboxed applications while jailbroken. This file may be viewed from sandboxed applications while jailbroken.
.It Fl l , -rootless
Proceed in rootless mode, this is the default when neither
.Fl l , -rootless
and
.Fl f , -fakefs
is specified.
>>>>>>> a8e6075 (paleinfo v2)
.It Fl n , -exit-recovery .It Fl n , -exit-recovery
Exit recovery mode and exit. Exit recovery mode and exit.
.It Fl o , -override-overlay Ar overlay file .It Fl o , -override-overlay Ar overlay file
@@ -274,4 +267,5 @@ December 13, 2022. Later, the first attempt to rewrite palera1n into C begins on
01 2023. The 01 2023. The
.Nm .Nm
utility described here is the second attempt, which first started on January 16, 2023, utility described here is the second attempt, which first started on January 16, 2023,
using checkra1n 1337 and the plush KPF. using checkra1n 1337 and a custom KPF.
Something happened on August 15, 2023.
+13 -7
View File
@@ -18,12 +18,12 @@ typedef uint64_t palerain_option_t;
#define palerain_option_rootful (UINT64_C(1) << 0) /* rootful jailbreak */ #define palerain_option_rootful (UINT64_C(1) << 0) /* rootful jailbreak */
#define palerain_option_rootless (UINT64_C(1) << 1) /* rootless jailbreak */ #define palerain_option_rootless (UINT64_C(1) << 1) /* rootless jailbreak */
#define palerain_option_setup_rootful (UINT64_C(1) << 2) /* create fakefs */ #define palerain_option_setup_rootful (UINT64_C(1) << 2) /* create fakefs */
/* reserved */ // (UINT64_C(1) << 3) /* Deprecated and removed */
#define palerain_option_setup_partial_root (UINT64_C(1) << 4) /* fakefs creating should be partial */ #define palerain_option_setup_partial_root (UINT64_C(1) << 4) /* fakefs creating should be partial */
#define palerain_option_checkrain_is_clone (UINT64_C(1) << 5) /* supplied checkra1n is checkra1n clone */ #define palerain_option_checkrain_is_clone (UINT64_C(1) << 5) /* supplied checkra1n is checkra1n clone */
#define palerain_option_rootless_livefs (UINT64_C(1) << 6) /* mount root livefs on rootless */ #define palerain_option_rootless_livefs (UINT64_C(1) << 6) /* mount root livefs on rootless */
// #define palerain_option_no_ssv (UINT64_C(1) << 7) /* no signed system volume */ #define palerain_option_ssv (UINT64_C(1) << 7) /* has signed system volume */
// #define palerain_option_force_fakefs (UINT64_C(1) << 8) /* force fakefs, even without SSV */ // (UINT64_C(1) << 8) /* reserved */
#define palerain_option_clean_fakefs (UINT64_C(1) << 9) /* clean fakefs, but does not delete it */ #define palerain_option_clean_fakefs (UINT64_C(1) << 9) /* clean fakefs, but does not delete it */
#define palerain_option_tui (UINT64_C(1) << 10) /* terminal user interface */ #define palerain_option_tui (UINT64_C(1) << 10) /* terminal user interface */
// #define palerain_option_gui (UINT64_C(1) << 11) /* graphical user interface*/ // #define palerain_option_gui (UINT64_C(1) << 11) /* graphical user interface*/
@@ -42,9 +42,10 @@ typedef uint64_t palerain_option_t;
#define palerain_option_force_revert (UINT64_C(1) << 24) /* Unjailbreak */ #define palerain_option_force_revert (UINT64_C(1) << 24) /* Unjailbreak */
#define palerain_option_safemode (UINT64_C(1) << 25) /* Enter safe mode */ #define palerain_option_safemode (UINT64_C(1) << 25) /* Enter safe mode */
#define palerain_option_verbose_boot (UINT64_C(1) << 26) /* verbose boot */ #define palerain_option_verbose_boot (UINT64_C(1) << 26) /* verbose boot */
// #define palerain_option_sf_ssh (UINT64_C(1) << 27) /* safe mode with bootstrap ssh */
#define palerain_option_jbinit_log_to_file (UINT64_C(1) << 50) /* make ramdisk log to file (jbinit2) */ // #define palerain_option_sf_launchdaemons (UINT64_C(1) << 28) /* safe mode with launchdaemons */
#define palerain_option_setup_rootful_forced (UINT64_C(1) << 51) /* create fakefs over an existing one (jbinit2) */ // #define palerain_option_emerg_mode (UINT64_C(1) << 29) /* emergency mode (early boot usb shell) */
#define palerain_option_jbinit_log_to_file (UINT64_C(1) << 30) /* deprecated (kept for compatibility) */
#define palerain_option_flower_chain (UINT64_C(1) << 61) /* Flower chain */ #define palerain_option_flower_chain (UINT64_C(1) << 61) /* Flower chain */
#define palerain_option_test1 (UINT64_C(1) << 62) /* Developer test option 1 */ #define palerain_option_test1 (UINT64_C(1) << 62) /* Developer test option 1 */
@@ -52,6 +53,9 @@ typedef uint64_t palerain_option_t;
#define PALEINFO_MAGIC 'PLSH' #define PALEINFO_MAGIC 'PLSH'
#pragma clang diagnostic push
#pragma clang diagnostic warning "-Wpadded"
/* paleinfo version 2, appended to ramdisk */ /* paleinfo version 2, appended to ramdisk */
struct paleinfo { struct paleinfo {
uint32_t magic; /* 'PLSH' */ uint32_t magic; /* 'PLSH' */
@@ -60,6 +64,8 @@ struct paleinfo {
uint64_t kslide; /* kernel slide */ uint64_t kslide; /* kernel slide */
uint64_t flags; /* unified palera1n flags */ uint64_t flags; /* unified palera1n flags */
char rootdev[0x10]; /* ex. disk0s1s8 */ char rootdev[0x10]; /* ex. disk0s1s8 */
}__attribute__((packed)); };
#pragma clang diagnostic pop
#endif #endif
+6 -6
View File
@@ -32,7 +32,7 @@
#define USB_RET_NOT_RESPONDING LIBUSB_ERROR_OTHER #define USB_RET_NOT_RESPONDING LIBUSB_ERROR_OTHER
#define USB_RET_IO LIBUSB_ERROR_IO #define USB_RET_IO LIBUSB_ERROR_IO
#define USB_RET_NO_DEVICE LIBUSB_ERROR_NO_DEVICE #define USB_RET_NO_DEVICE LIBUSB_ERROR_NO_DEVICE
typedef int usb_ret_t; typedef int32_t usb_ret_t;
typedef libusb_device_handle *usb_device_handle_t; typedef libusb_device_handle *usb_device_handle_t;
typedef struct stuff typedef struct stuff
@@ -80,8 +80,8 @@ usb_ret_t USBBulkUpload(usb_device_handle_t handle, void *data, uint32_t len);
#define MH_CIGAM_64 0xcffaedfe #define MH_CIGAM_64 0xcffaedfe
#define MH_KEXT_BUNDLE 0xb #define MH_KEXT_BUNDLE 0xb
typedef int cpu_type_t; typedef int32_t cpu_type_t;
typedef int cpu_subtype_t; typedef int32_t cpu_subtype_t;
#define CPU_ARCH_ABI64 0x01000000 #define CPU_ARCH_ABI64 0x01000000
#define CPU_TYPE_ARM ((cpu_type_t) 12) #define CPU_TYPE_ARM ((cpu_type_t) 12)
@@ -131,7 +131,7 @@ typedef struct {
typedef struct { typedef struct {
int mode; int mode;
unsigned int cpid; int cpid;
char product_type[0x20]; char product_type[0x20];
char display_name[0x20]; char display_name[0x20];
char iboot_ver[0x20]; char iboot_ver[0x20];
@@ -140,9 +140,9 @@ typedef struct {
typedef struct { typedef struct {
uint32_t magic; /* 0xd803b376*/ uint32_t magic; /* 0xd803b376*/
unsigned char* ptr; /* pointer to the override file in memory */ unsigned char* ptr; /* pointer to the override file in memory */
unsigned int len; /* length of override file */ uint32_t len; /* length of override file */
unsigned char* orig_ptr; /* pointer to the overriden file */ unsigned char* orig_ptr; /* pointer to the overriden file */
unsigned int orig_len; /* length of the overriden file */ uint32_t orig_len; /* length of the overriden file */
int fd; /* file descriptor of the override file */ int fd; /* file descriptor of the override file */
} override_file_t; } override_file_t;
+15 -13
View File
@@ -5,24 +5,26 @@
#include <TargetConditionals.h> #include <TargetConditionals.h>
#endif #endif
extern unsigned char checkra1n[]; #include <stdint.h>
extern unsigned int checkra1n_len;
extern unsigned char checkra1n_kpf_pongo[]; extern uint8_t checkra1n[];
extern unsigned int checkra1n_kpf_pongo_len; extern uint32_t checkra1n_len;
extern unsigned char ramdisk_dmg[]; extern uint8_t checkra1n_kpf_pongo_lzma[];
extern unsigned int ramdisk_dmg_len; extern uint32_t checkra1n_kpf_pongo_lzma_len;
extern unsigned char binpack_dmg[]; extern uint8_t ramdisk_dmg_lzma[];
extern unsigned int binpack_dmg_len; extern uint32_t ramdisk_dmg_lzma_len;
extern unsigned char Pongo_bin[]; extern uint8_t binpack_dmg[];
extern unsigned int Pongo_bin_len; extern uint32_t binpack_dmg_len;
#if defined(__APPLE__) && (TARGET_OS_IPHONE || defined(DEV_BUILD)) extern uint8_t Pongo_bin[];
extern unsigned char libcheckra1nhelper_dylib[]; extern uint32_t Pongo_bin_len;
extern unsigned int libcheckra1nhelper_dylib_len;
#if defined(__APPLE__) && (TARGET_OS_IPHONE || defined(DEV_BUILD) || defined(FORCE_HELPER))
extern uint8_t libcheckra1nhelper_dylib[];
extern uint32_t libcheckra1nhelper_dylib_len;
#endif #endif
#endif #endif
+5
View File
@@ -15,3 +15,8 @@ Description: iOS 15.0-16.5.1 semi-tethered checkm8 jailbreak
palera1n is able to jailbreak the device in fakefs-rootful mode, palera1n is able to jailbreak the device in fakefs-rootful mode,
where / is writable, as well as rootless mode, where / cannot be where / is writable, as well as rootless mode, where / cannot be
written to. written to.
.
IMPORTANT: This does NOT make palera1n untethered or allow you to
jailbreak your current device without a computer. It just allows
you to jailbreak another iDevice using this device, given you have
an appropriate cable. Also, the success rate is likely to be bad.
+78 -47
View File
@@ -1,57 +1,57 @@
all: palera1n all: palera1n
OBJECTS = main.o dfuhelper.o devhelper.o lockdown_helper.o OBJDIR = obj
OBJECTS += optparse.o override_file.o log.o lock_vars.o credits.o GENDIR = gen
OBJECTS += fake_embedded.o exec_checkra1n.o pongo_helper.o RESOURCES_DIR = resources
OBJECTS += boyermoore_memmem.o
C_SRC = $(wildcard *.c)
OBJS = $(patsubst %,$(OBJDIR)/%,$(C_SRC:.c=.c.o))
ifeq (,$(findstring macosx, $(CFLAGS))) ifeq (,$(findstring macosx, $(CFLAGS)))
ifneq (,$(findstring version-min=, $(CFLAGS))) ifneq (,$(findstring version-min=, $(CFLAGS)))
OBJECTS += xxd-libcheckra1nhelper.dylib.o C_SRC += $(GENDIR)/gen-libcheckra1nhelper.dylib.c
endif endif
endif endif
ifeq ($(FORCE_HELPER),1) ifeq ($(FORCE_HELPER),1)
OBJECTS += xxd-libcheckra1nhelper.dylib.o C_SRC += $(GENDIR)/gen-libcheckra1nhelper.dylib.c
CFLAGS += -DFORCE_HELPER CFLAGS += -DFORCE_HELPER
BUILD_OPTIONS += FORCE_HELPER BUILD_OPTIONS += FORCE_HELPER
endif endif
ifneq ($(NO_RAMDISK),1) ifneq ($(NO_RAMDISK),1)
OBJECTS += xxd-ramdisk.dmg.o C_SRC += $(GENDIR)/gen-ramdisk.dmg.lzma.c
else else
CFLAGS += -DNO_RAMDISK CFLAGS += -DNO_RAMDISK -DRAMDISK_COMPRESSED_SIZE=\"0\"
BUILD_OPTIONS += NO_RAMDISK BUILD_OPTIONS += NO_RAMDISK
endif endif
ifneq ($(NO_KPF),1) ifneq ($(NO_KPF),1)
OBJECTS += xxd-checkra1n-kpf-pongo.o C_SRC += $(GENDIR)/gen-checkra1n-kpf-pongo.lzma.c
else else
CFLAGS += -DNO_KPF CFLAGS += -DNO_KPF
BUILD_OPTIONS += NO_KPF BUILD_OPTIONS += NO_KPF
endif endif
ifneq ($(NO_OVERLAY),1) ifneq ($(NO_OVERLAY),1)
OBJECTS += xxd-binpack.dmg.o C_SRC += $(GENDIR)/gen-binpack.dmg.c
else else
CFLAGS += -DNO_OVERLAY CFLAGS += -DNO_OVERLAY
BUILD_OPTIONS += NO_OVERLAY BUILD_OPTIONS += NO_OVERLAY
endif endif
ifneq ($(NO_CHECKRAIN),1) ifneq ($(NO_CHECKRAIN),1)
OBJECTS += xxd-checkra1n.o C_SRC += $(GENDIR)/gen-checkra1n.c
else else
CFLAGS += -DNO_CHECKRAIN CFLAGS += -DNO_CHECKRAIN
BUILD_OPTIONS += NO_CHECKRAIN BUILD_OPTIONS += NO_CHECKRAIN
endif endif
ifneq ($(NO_CUSTOM_PONGO),1) ifneq ($(NO_CUSTOM_PONGO),1)
OBJECTS += xxd-Pongo.bin.o C_SRC += $(GENDIR)/gen-Pongo.bin.c
else else
CFLAGS += -DNO_CUSTOM_PONGO CFLAGS += -DNO_CUSTOM_PONGO
BUILD_OPTIONS += NO_CUSTOM_PONGO BUILD_OPTIONS += NO_CUSTOM_PONGO
endif endif
ifeq ($(TUI),1) ifeq ($(TUI),1)
OBJECTS += tui_screen_enter_recovery.o tui_screen_enter_dfu.o tui_main.o
OBJECTS += tui_screen_jailbreak.o tui_screen_main.o tui_screen_options.o
BUILD_OPTIONS += TUI BUILD_OPTIONS += TUI
CFLAGS += -DTUI CFLAGS += -DTUI
endif endif
@@ -62,20 +62,18 @@ LDID = ldid
ifeq ($(TARGET_OS),Darwin) ifeq ($(TARGET_OS),Darwin)
ifneq ($(USE_LIBUSB),1) ifneq ($(USE_LIBUSB),1)
OBJECTS += usb_iokit.o
else else
LIBS += -framework SystemConfiguration -framework Security LIBS += -framework SystemConfiguration -framework Security
BUILD_OPTIONS += USE_LIBUSB BUILD_OPTIONS += USE_LIBUSB
endif endif
# add lto and debug symbols for lto # add lto and debug symbols for lto
CFLAGS += -flto=full -g CFLAGS += -flto=full -g
LDFLAGS += -Wl,-object_path_lto,lto.o LDFLAGS += -Wl,-object_path_lto,obj/lto.o
else else
USE_LIBUSB = 1 USE_LIBUSB = 1
endif endif
ifeq ($(USE_LIBUSB),1) ifeq ($(USE_LIBUSB),1)
OBJECTS += usb_libusb.o
CFLAGS += -DUSE_LIBUSB=1 CFLAGS += -DUSE_LIBUSB=1
LIBS += $(DEP)/lib/libusb-1.0.a LIBS += $(DEP)/lib/libusb-1.0.a
endif endif
@@ -91,64 +89,97 @@ endif
CFLAGS += -DBUILD_OPTIONS=\""$(BUILD_OPTIONS)"\" CFLAGS += -DBUILD_OPTIONS=\""$(BUILD_OPTIONS)"\"
checkra1n-%: ifeq ($(TARGET_OS),Linux)
curl -LO https://assets.checkra.in/downloads/preview/$(CHECKRA1N_VERSION)/$@ ifeq ($(UNAME),Linux)
ifeq ($(CHECKRA1N_NAME),)
ifeq ($(shell arch),x86_64)
CHECKRA1N_NAME := linux-x86_64
else ifeq ($(shell arch | grep -q 'i[3-7]86' && echo 1),1)
CHECKRA1N_NAME := linux-x86
else ifeq ($(shell arch | grep -v '\(arm\|aarch\)[a-z]\?\+64' | grep -q arm && echo 1),1)
CHECKRA1N_NAME := linux-armel
else ifeq ($(shell arch | grep -q '\(arm\|aarch\)[a-z]\?\+64' && echo 1),1)
CHECKRA1N_NAME := linux-arm64
endif
endif
endif
endif
$(RESOURCES_DIR)/checkra1n-%:
curl -Lfo $@ https://assets.checkra.in/downloads/preview/$(CHECKRA1N_VERSION)/$$(echo $@ | cut -d/ -f2)
chmod 755 $@ chmod 755 $@
checkra1n: checkra1n-macos usb.xml $(RESOURCES_DIR)/checkra1n: $(RESOURCES_DIR)/checkra1n-macos usb.xml
ifeq ($(TARGET_OS),Darwin) ifeq ($(TARGET_OS),Darwin)
ifneq (,$(findstring arm64, $(CFLAGS))) ifneq (,$(findstring arm64, $(CFLAGS)))
$(LIPO) -thin arm64 -output checkra1n checkra1n-macos $(LIPO) -thin arm64 -output $(RESOURCES_DIR)/checkra1n $(RESOURCES_DIR)/checkra1n-macos
else ifneq (,$(findstring x86_64, $(CFLAGS))) else ifneq (,$(findstring x86_64, $(CFLAGS)))
$(LIPO) -thin x86_64 -output checkra1n checkra1n-macos $(LIPO) -thin x86_64 -output $(RESOURCES_DIR)/checkra1n $(RESOURCES_DIR)/checkra1n-macos
else ifeq ($(shell arch),i386) else ifeq ($(shell arch),i386)
$(LIPO) -thin x86_64 -output checkra1n checkra1n-macos $(LIPO) -thin x86_64 -output $(RESOURCES_DIR)/checkra1n $(RESOURCES_DIR)/checkra1n-macos
else else
$(LIPO) -thin $(shell arch) -output checkra1n checkra1n-macos $(LIPO) -thin $(shell arch) -output $(RESOURCES_DIR)/checkra1n $(RESOURCES_DIR)/checkra1n-macos
endif endif
ifeq (,$(findstring macosx, $(CFLAGS))) ifeq (,$(findstring macosx, $(CFLAGS)))
ifneq (,$(findstring version-min=, $(CFLAGS))) ifneq (,$(findstring version-min=, $(CFLAGS)))
vtool -remove-build-version 1 -replace -output checkra1n checkra1n vtool -remove-build-version 1 -replace -output $(RESOURCES_DIR)/checkra1n $(RESOURCES_DIR)/checkra1n
vtool -set-build-version $(FAKE_PLATFORM) $(FAKE_MINOS) $(FAKE_SDK) -replace -output checkra1n checkra1n vtool -set-build-version $(FAKE_PLATFORM) $(FAKE_MINOS) $(FAKE_SDK) -replace -output $(RESOURCES_DIR)/checkra1n $(RESOURCES_DIR)/checkra1n
install_name_tool -change /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit /System/Library/Frameworks/IOKit.framework/IOKit checkra1n install_name_tool -change /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit /System/Library/Frameworks/IOKit.framework/IOKit $(RESOURCES_DIR)/checkra1n
install_name_tool -change /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation checkra1n install_name_tool -change /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation $(RESOURCES_DIR)/checkra1n
$(LDID) -Susb.xml checkra1n $(LDID) -Susb.xml $(RESOURCES_DIR)/checkra1n
endif endif
endif endif
else else
cp checkra1n-$(CHECKRA1N_NAME) checkra1n cp $(RESOURCES_DIR)/checkra1n-$(CHECKRA1N_NAME) $(RESOURCES_DIR)/checkra1n
endif endif
xxd-%.c: % $(GENDIR)/gen-%.c: $(RESOURCES_DIR)/%
xxd -iC $< > $@ echo '#include <stdint.h>' > $(RESOURCES_DIR)/../$@
cd $(RESOURCES_DIR) && xxd -iC $$(echo $< | cut -d/ -f2) | sed -e 's/unsigned int/uint32_t/' -e 's/unsigned char/uint8_t/' >> ../$@
%.o: %.c $(wildcard ../include/*.h)
$(CC) -c $(CFLAGS) $<
palera1n: $(OBJECTS) $(OBJDIR)/pongo_helper.c.o: pongo_helper.c $(wildcard ../include/*.h) $(RESOURCES_DIR)/ramdisk.dmg $(RESOURCES_DIR)/checkra1n-kpf-pongo
$(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) $(LIBS) -o palera1n $(CC) -c -o $@ $(CFLAGS) -DRAMDISK_UNCOMPRESSED_SIZE="\"$$(wc -c < $(RESOURCES_DIR)/ramdisk.dmg | tr -d ' ')\"" -DKPF_UNCOMPRESSED_SIZE="\"$$(wc -c < $(RESOURCES_DIR)/checkra1n-kpf-pongo | tr -d ' ')\"" $<
$(OBJDIR)/%.c.o: $(GENDIR)/gen-%.c $(wildcard ../include/*.h)
$(CC) $(CFLAGS) -c -o $<
$(OBJDIR)/%.c.o: %.c $(wildcard ../include/*.h)
$(CC) $(CFLAGS) -c -o $@ $<
palera1n: $(OBJS)
$(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) $(LIBS) -o palera1n
ifeq (,$(findstring macosx, $(CFLAGS))) ifeq (,$(findstring macosx, $(CFLAGS)))
ifneq (,$(findstring version-min=, $(CFLAGS))) ifneq (,$(findstring version-min=, $(CFLAGS)))
$(LDID) -Susb.xml palera1n $(LDID) -Susb.xml palera1n
endif endif
endif endif
libcheckra1nhelper.dylib: chkstk.S $(RESOURCES_DIR)/libcheckra1nhelper.dylib: chkstk.S
$(CC) $(CFLAGS) $(LDFLAGS) -shared chkstk.S -o libcheckra1nhelper.dylib $(CC) $(CFLAGS) $(LDFLAGS) -shared chkstk.S -o $@
checkra1n-kpf-pongo: $(RESOURCES_DIR)/checkra1n-kpf-pongo:
curl -LO https://cdn.nickchan.lol/palera1n/artifacts/kpf/checkra1n-kpf-pongo curl -Lfo $@ https://cdn.nickchan.lol/palera1n/artifacts/kpf/iOS15/checkra1n-kpf-pongo
ramdisk.dmg: $(RESOURCES_DIR)/ramdisk.dmg.lzma: $(RESOURCES_DIR)/ramdisk.dmg
curl -LO https://cdn.nickchan.lol/palera1n/c-rewrite/deps/ramdisk.dmg xz --format=lzma -vfc6ekT 0 $< > $@
binpack.dmg: $(RESOURCES_DIR)/checkra1n-kpf-pongo.lzma: $(RESOURCES_DIR)/checkra1n-kpf-pongo
curl -LO https://cdn.nickchan.lol/palera1n/c-rewrite/deps/binpack.dmg xz --format=lzma -vfc6ekT 0 $< > $@
Pongo.bin: $(RESOURCES_DIR)/ramdisk.dmg:
curl -LO https://cdn.nickchan.lol/palera1n/artifacts/kpf/Pongo.bin curl -Lfo $@ https://cdn.nickchan.lol/palera1n/c-rewrite/deps/ramdisk.dmg
$(RESOURCES_DIR)/binpack.dmg:
curl -Lfo $@ https://cdn.nickchan.lol/palera1n/c-rewrite/deps/binpack.dmg
$(RESOURCES_DIR)/Pongo.bin:
curl -Lfo $@ https://cdn.nickchan.lol/palera1n/artifacts/kpf/iOS15/Pongo.bin
clean: clean:
rm -rf *.o palera1n checkra1n checkra1n.c palera1n.dSYM libcheckra1nhelper.dylib rm -rf $(OBJDIR)/*.o $(GENDIR)/*.c $(GENDIR)/*.o palera1n palera1n.dSYM libcheckra1nhelper.dylib
distclean: clean
rm -rf $(RESOURCES_DIR)/*
.PHONY: all clean .PHONY: all clean
+15 -16
View File
@@ -28,8 +28,6 @@
#include <libimobiledevice/diagnostics_relay.h> #include <libimobiledevice/diagnostics_relay.h>
#include <plist/plist.h> #include <plist/plist.h>
#include "lockdown_helper.h"
#ifdef HAVE_LIB_TV_CONTROL #ifdef HAVE_LIB_TV_CONTROL
#include <libtvcontrol.h> #include <libtvcontrol.h>
#endif #endif
@@ -104,6 +102,7 @@ int unsubscribe_cmd(void)
int devinfo_cmd(devinfo_t *dev, const char *udid) int devinfo_cmd(devinfo_t *dev, const char *udid)
{ {
int ret;
uint64_t this_ecid = 0; uint64_t this_ecid = 0;
char *productType = NULL; char *productType = NULL;
char *productVersion = NULL; char *productVersion = NULL;
@@ -112,67 +111,67 @@ int devinfo_cmd(devinfo_t *dev, const char *udid)
char *CPUArchitecture = NULL; char *CPUArchitecture = NULL;
idevice_t device = NULL; idevice_t device = NULL;
lockdownd_client_t lockdown = NULL; lockdownd_client_t lockdown = NULL;
if (idevice_new(&device, udid) != IDEVICE_E_SUCCESS) if ((ret = idevice_new_with_options(&device, udid, IDEVICE_LOOKUP_USBMUX)) != IDEVICE_E_SUCCESS)
{ {
LOG(LOG_ERROR, "Error connecting to device."); LOG(LOG_ERROR, "Error connecting to device: %d (%s)", ret, lockdownd_strerror(ret));
return -1; return -1;
} }
if (lockdownd_client_new(device, &lockdown, "palera1n") != LOCKDOWN_E_SUCCESS) if ((ret = lockdownd_client_new_with_handshake(device, &lockdown, "palera1n")) != LOCKDOWN_E_SUCCESS)
{ {
(void)idevice_free(device); (void)idevice_free(device);
LOG(LOG_ERROR, "Device is not in normal mode."); LOG(LOG_ERROR, "Device is not in normal mode: %d (%s)", ret, lockdownd_strerror(ret));
return -1; return -1;
} }
plist_t node = NULL; plist_t node = NULL;
if (lockdownd_get_value(lockdown, NULL, "UniqueChipID", &node) != LOCKDOWN_E_SUCCESS) if ((ret = lockdownd_get_value(lockdown, NULL, "UniqueChipID", &node)) != LOCKDOWN_E_SUCCESS)
{ {
(void)lockdownd_client_free(lockdown); (void)lockdownd_client_free(lockdown);
(void)idevice_free(device); (void)idevice_free(device);
LOG(LOG_ERROR, "Error getting ECID"); LOG(LOG_ERROR, "Error getting ECID: %d (%s)", ret, lockdownd_strerror(ret));
return -1; return -1;
} }
plist_get_uint_val(node, &this_ecid); plist_get_uint_val(node, &this_ecid);
plist_free(node); plist_free(node);
node = NULL; node = NULL;
if (lockdownd_get_value(lockdown, NULL, "ProductType", &node) != LOCKDOWN_E_SUCCESS) if ((ret = lockdownd_get_value(lockdown, NULL, "ProductType", &node)) != LOCKDOWN_E_SUCCESS)
{ {
(void)lockdownd_client_free(lockdown); (void)lockdownd_client_free(lockdown);
(void)idevice_free(device); (void)idevice_free(device);
LOG(LOG_ERROR, "Error getting product type"); LOG(LOG_ERROR, "Error getting product type: %d (%s)", ret, lockdownd_strerror(ret));
return -1; return -1;
} }
plist_get_string_val(node, &productType); plist_get_string_val(node, &productType);
plist_free(node); plist_free(node);
node = NULL; node = NULL;
if (lockdownd_get_value(lockdown, NULL, "CPUArchitecture", &node) != LOCKDOWN_E_SUCCESS) if ((ret = lockdownd_get_value(lockdown, NULL, "CPUArchitecture", &node)) != LOCKDOWN_E_SUCCESS)
{ {
(void)lockdownd_client_free(lockdown); (void)lockdownd_client_free(lockdown);
(void)idevice_free(device); (void)idevice_free(device);
LOG(LOG_ERROR, "Error getting CPU type"); LOG(LOG_ERROR, "Error getting CPU type: %d (%s)", ret, lockdownd_strerror(ret));
return -1; return -1;
} }
plist_get_string_val(node, &CPUArchitecture); plist_get_string_val(node, &CPUArchitecture);
plist_free(node); plist_free(node);
node = NULL; node = NULL;
if (lockdownd_get_value(lockdown, NULL, "ProductVersion", &node) != LOCKDOWN_E_SUCCESS) if ((ret = lockdownd_get_value(lockdown, NULL, "ProductVersion", &node)) != LOCKDOWN_E_SUCCESS)
{ {
(void)lockdownd_client_free(lockdown); (void)lockdownd_client_free(lockdown);
(void)idevice_free(device); (void)idevice_free(device);
LOG(LOG_ERROR, "Error getting product version"); LOG(LOG_ERROR, "Error getting product version: %d (%s)", ret, lockdownd_strerror(ret));
return -1; return -1;
} }
plist_get_string_val(node, &productVersion); plist_get_string_val(node, &productVersion);
plist_free(node); plist_free(node);
node = NULL; node = NULL;
if (lockdownd_get_value(lockdown, NULL, "BuildVersion", &node) != LOCKDOWN_E_SUCCESS) if ((ret = lockdownd_get_value(lockdown, NULL, "BuildVersion", &node)) != LOCKDOWN_E_SUCCESS)
{ {
(void)lockdownd_client_free(lockdown); (void)lockdownd_client_free(lockdown);
(void)idevice_free(device); (void)idevice_free(device);
LOG(LOG_ERROR, "Error getting build version"); LOG(LOG_ERROR, "Error getting build version: %d (%s)", ret, lockdownd_strerror(ret));
return -1; return -1;
} }
plist_get_string_val(node, &buildVersion); plist_get_string_val(node, &buildVersion);
+2 -2
View File
@@ -218,7 +218,7 @@ void irecv_device_event_cb(const irecv_device_event_t *event, void* userdata) {
event->mode == IRECV_K_RECOVERY_MODE_3 || event->mode == IRECV_K_RECOVERY_MODE_3 ||
event->mode == IRECV_K_RECOVERY_MODE_4) { event->mode == IRECV_K_RECOVERY_MODE_4) {
if (!(palerain_flags & palerain_option_device_info)) if (!(palerain_flags & palerain_option_device_info))
LOG(LOG_VERBOSE, "Recovery mode device %ld connected", event->device_info->ecid); LOG(LOG_VERBOSE, "Recovery mode device %" PRIu64 " connected", event->device_info->ecid);
if ((palerain_flags & palerain_option_exit_recovery)) { if ((palerain_flags & palerain_option_exit_recovery)) {
ret = exitrecv_cmd(event->device_info->ecid); ret = exitrecv_cmd(event->device_info->ecid);
if (!ret) { if (!ret) {
@@ -258,7 +258,7 @@ void irecv_device_event_cb(const irecv_device_event_t *event, void* userdata) {
pthread_create(&recovery_thread, NULL, (pthread_start_t)connected_recovery_mode, event->device_info); pthread_create(&recovery_thread, NULL, (pthread_start_t)connected_recovery_mode, event->device_info);
} else if (event->mode == IRECV_K_DFU_MODE) { } else if (event->mode == IRECV_K_DFU_MODE) {
if (!(palerain_flags & palerain_option_device_info)) if (!(palerain_flags & palerain_option_device_info))
LOG(LOG_VERBOSE, "DFU mode device %ld connected", event->device_info->ecid); LOG(LOG_VERBOSE, "DFU mode device %" PRIu64 " connected", event->device_info->ecid);
if ((palerain_flags & palerain_option_device_info)) { if ((palerain_flags & palerain_option_device_info)) {
recvinfo_t info; recvinfo_t info;
+16 -3
View File
@@ -15,6 +15,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/wait.h> #include <sys/wait.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <inttypes.h>
#include <sys/utsname.h> #include <sys/utsname.h>
#if defined(__APPLE__) #if defined(__APPLE__)
@@ -42,6 +43,10 @@ int exec_checkra1n(void) {
#ifndef NO_CUSTOM_PONGO #ifndef NO_CUSTOM_PONGO
if (pongo_path == NULL) { if (pongo_path == NULL) {
pongo_path = malloc(strlen(tmpdir) + 20); pongo_path = malloc(strlen(tmpdir) + 20);
if (pongo_path == NULL) {
LOG(LOG_FATAL, "memory allocation failed\n");
return -1;
}
snprintf(pongo_path, strlen(tmpdir) + 20, "%s/Pongo.bin.XXXXXX", tmpdir); snprintf(pongo_path, strlen(tmpdir) + 20, "%s/Pongo.bin.XXXXXX", tmpdir);
fd_pongo = mkstemp(pongo_path); fd_pongo = mkstemp(pongo_path);
if (fd_pongo == -1) { if (fd_pongo == -1) {
@@ -51,7 +56,7 @@ int exec_checkra1n(void) {
} }
ssize_t didWrite_Pongo_bin = write(fd_pongo, Pongo_bin, Pongo_bin_len); ssize_t didWrite_Pongo_bin = write(fd_pongo, Pongo_bin, Pongo_bin_len);
if (didWrite_Pongo_bin != (ssize_t)Pongo_bin_len) { if (didWrite_Pongo_bin != (ssize_t)Pongo_bin_len) {
LOG(LOG_FATAL, "Size written to %s does not match expected: %lld != %d: %d (%s)", pongo_path, didWrite_Pongo_bin, Pongo_bin_len, errno, strerror(errno)); LOG(LOG_FATAL, "Size written to %s does not match expected: %zd != %" PRIu32 ": %d (%s)", pongo_path, didWrite_Pongo_bin, Pongo_bin_len, errno, strerror(errno));
close(fd_pongo); close(fd_pongo);
unlink(pongo_path); unlink(pongo_path);
free(pongo_path); free(pongo_path);
@@ -61,6 +66,10 @@ int exec_checkra1n(void) {
} else external_pongo = true; } else external_pongo = true;
#endif #endif
checkra1n_path = malloc(strlen(tmpdir) + 20); checkra1n_path = malloc(strlen(tmpdir) + 20);
if (checkra1n_path == NULL) {
LOG(LOG_FATAL, "memory allocation failed\n");
return -1;
}
snprintf(checkra1n_path, strlen(tmpdir) + 20, "%s/checkra1n.XXXXXX", tmpdir); snprintf(checkra1n_path, strlen(tmpdir) + 20, "%s/checkra1n.XXXXXX", tmpdir);
fd_checkra1n = mkstemp(checkra1n_path); fd_checkra1n = mkstemp(checkra1n_path);
if (fd_checkra1n == -1) { if (fd_checkra1n == -1) {
@@ -71,7 +80,7 @@ int exec_checkra1n(void) {
} }
ssize_t didWrite_checkra1n = write(fd_checkra1n, checkra1n, checkra1n_len); ssize_t didWrite_checkra1n = write(fd_checkra1n, checkra1n, checkra1n_len);
if (didWrite_checkra1n != (ssize_t)checkra1n_len) { if (didWrite_checkra1n != (ssize_t)checkra1n_len) {
LOG(LOG_FATAL, "Size written to %s does not match expected: %lld != %d: %d (%s)", checkra1n_path, didWrite_checkra1n, checkra1n_len, errno, strerror(errno)); LOG(LOG_FATAL, "Size written to %s does not match expected: %zd != %" PRIu32 ": %d (%s)", checkra1n_path, didWrite_checkra1n, checkra1n_len, errno, strerror(errno));
close(fd_checkra1n); close(fd_checkra1n);
unlink(checkra1n_path); unlink(checkra1n_path);
free(checkra1n_path); free(checkra1n_path);
@@ -98,6 +107,10 @@ int exec_checkra1n(void) {
if (darwinMajor < 20) { if (darwinMajor < 20) {
#endif #endif
libcheckra1nhelper_dylib_path = malloc(strlen(tmpdir) + 40); libcheckra1nhelper_dylib_path = malloc(strlen(tmpdir) + 40);
if (libcheckra1nhelper_dylib_path == NULL) {
LOG(LOG_FATAL, "memory allocation failed\n");
return -1;
}
snprintf(libcheckra1nhelper_dylib_path, strlen(tmpdir) + 40, "%s/libcheckra1nhelper.dylib.XXXXXX", tmpdir); snprintf(libcheckra1nhelper_dylib_path, strlen(tmpdir) + 40, "%s/libcheckra1nhelper.dylib.XXXXXX", tmpdir);
int helper_fd = mkstemp(libcheckra1nhelper_dylib_path); int helper_fd = mkstemp(libcheckra1nhelper_dylib_path);
if (helper_fd == -1) { if (helper_fd == -1) {
@@ -106,7 +119,7 @@ int exec_checkra1n(void) {
} }
ssize_t didWrite_libcheckra1nhelper = write(helper_fd, libcheckra1nhelper_dylib, libcheckra1nhelper_dylib_len); ssize_t didWrite_libcheckra1nhelper = write(helper_fd, libcheckra1nhelper_dylib, libcheckra1nhelper_dylib_len);
if ((unsigned int)didWrite_libcheckra1nhelper != libcheckra1nhelper_dylib_len) { if ((unsigned int)didWrite_libcheckra1nhelper != libcheckra1nhelper_dylib_len) {
LOG(LOG_FATAL, "Size written does not match expected: %lld != %d: %d (%s)", didWrite_libcheckra1nhelper, libcheckra1nhelper_dylib_len, errno, strerror(errno)); LOG(LOG_FATAL, "Size written does not match expected: %zd != %" PRIu32 ": %d (%s)", didWrite_libcheckra1nhelper, libcheckra1nhelper_dylib_len, errno, strerror(errno));
close(helper_fd); close(helper_fd);
unlink(libcheckra1nhelper_dylib_path); unlink(libcheckra1nhelper_dylib_path);
return -1; return -1;
+4 -4
View File
@@ -1,13 +1,13 @@
#include <stdlib.h> #include <stdlib.h>
#ifdef NO_KPF #ifdef NO_KPF
unsigned char* checkra1n_kpf_pongo = NULL; unsigned char* checkra1n_kpf_pongo_lzma = NULL;
unsigned int checkra1n_kpf_pongo_len = 0; unsigned int checkra1n_kpf_pongo_lzma_len = 0;
#endif #endif
#ifdef NO_RAMDISK #ifdef NO_RAMDISK
unsigned char* ramdisk_dmg = NULL; unsigned char* ramdisk_dmg_lzma = NULL;
unsigned int ramdisk_dmg_len = 0; unsigned int ramdisk_dmg_lzma_len = 0;
#endif #endif
#ifdef NO_CHECKRAIN #ifdef NO_CHECKRAIN
+1
View File
@@ -0,0 +1 @@
*.o
+1
View File
@@ -0,0 +1 @@
.
-245
View File
@@ -1,245 +0,0 @@
#ifndef HAVE_LIBIMOBILEDEVICE
#include "lockdown_helper.h"
#include <usbmuxd.h>
#include <arpa/inet.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#ifdef DEBUG
#define log_debug(...) fprintf(stderr, __VA_ARGS__); fputc('\n', stderr)
#else
#define log_debug(...) do {} while (0)
#endif
#define log_error(...) fprintf(stderr, __VA_ARGS__); fputc('\n', stderr)
int lockdown_connect_handle(uint32_t handle) {
int fd = usbmuxd_connect(handle, 62078);
if (fd < 0) {
log_debug("Can't connect to lockownd on device #%u", handle);
}
return fd;
}
int lockdown_connect_udid(const char* udid) {
usbmuxd_device_info_t device;
if (usbmuxd_get_device_by_udid(udid, &device) < 0) {
log_debug("Can't find device %s", udid);
return -ENOENT;
}
return lockdown_connect_handle(device.handle);
}
void lockdown_disconnect(int fd) {
usbmuxd_disconnect(fd);
}
int lockdown_check_type(int fd, const char* type_match);
static const char QUERY_TYPE_REQUEST[] = "____<plist version=\"1.0\"><dict><key>Label</key><string>palera1n</string><key>Request</key><string>QueryType</string></dict></plist>";
static const char GET_VALUE_DOMAIN_REQUEST_FMT[] = "____<plist version=\"1.0\"><dict><key>Label</key><string>palera1n</string><key>Domain</key><string>%s</string><key>Key</key><string>%s</string><key>Request</key><string>GetValue</string></dict></plist>";
static const char GET_VALUE_REQUEST_FMT[] = "____<plist version=\"1.0\"><dict><key>Label</key><string>palera1n</string><key>Key</key><string>%s</string><key>Request</key><string>GetValue</string></dict></plist>";
static const char VALUE_KEY_NODE[] = "<key>Value</key>";
static const char INTEGER_NODE[] = "<integer>";
static const char STRING_NODE[] = "<string>";
static const char ENTER_RECOVERY_REQUEST[] = "____<plist version=\"1.0\"><dict><key>Label</key><string>palera1n</string><key>Request</key><string>EnterRecovery</string></dict></plist>";
static const char ERROR_KEY_NODE[] = "<key>Error</key>";
static const char ENTER_RECOVERY_STRING_NODE[] = "<string>EnterRecovery</string>";
static const int VALUE_KEY_NODE_SIZE = sizeof(VALUE_KEY_NODE)-1;
static const int INTEGER_NODE_SIZE = sizeof(INTEGER_NODE)-1;
static const int STRING_NODE_SIZE = sizeof(STRING_NODE)-1;
static const int ERROR_KEY_NODE_SIZE = sizeof(ERROR_KEY_NODE)-1;
static void skip_ws(char** cur, char* end) {
char* p = *cur;
while (p < end && ((*p == ' ') || (*p == '\t') || (*p == '\r') || (*p == '\n'))) {
p++;
}
*cur = p;
}
static char* _send_request_and_get_reply(int fd, const char* request, uint32_t len, uint32_t* received) {
uint32_t sent_bytes = 0;
usbmuxd_send(fd, request, len, &sent_bytes);
if (sent_bytes != len) {
usbmuxd_disconnect(fd);
log_error("Failed to send data payload");
return NULL;
}
uint32_t recv_bytes = 0;
uint32_t besize = 0;
int r = usbmuxd_recv(fd, (char*)&besize, sizeof(besize), &recv_bytes);
if (recv_bytes != sizeof(besize)) {
usbmuxd_disconnect(fd);
log_error("Failed to get size of packet (%d)", r);
return NULL;
}
uint32_t resp_size = ntohl(besize);
char* resp = (char*)malloc(resp_size+1);
recv_bytes = 0;
usbmuxd_recv(fd, resp, resp_size, &recv_bytes);
if (recv_bytes != resp_size) {
usbmuxd_disconnect(fd);
free(resp);
log_error("Failed to receive payload");
return NULL;
}
resp[resp_size] = '\0';
*received = resp_size;
return resp;
}
int lockdown_check_type(int fd, const char* type_match) {
unsigned char tmp[512];
uint32_t len = (uint32_t)snprintf((char*)tmp, 512, QUERY_TYPE_REQUEST);
uint32_t belen = htonl(len-4);
*(uint32_t*)tmp = belen;
uint32_t resp_size = 0;
char* resp = _send_request_and_get_reply(fd, (char*)tmp, len, &resp_size);
if (!resp) {
log_error("Failed to get lockdown type");
return -1;
}
int result = (strstr(resp, type_match) == NULL) ? -1 : 0;
free(resp);
return result;
}
int lockdown_get_uint_value(int fd, const char* domain, const char* key, uint64_t* value) {
char tmp[1024];
uint32_t len;
if (domain) {
len = snprintf(tmp, 1024, GET_VALUE_DOMAIN_REQUEST_FMT, domain, key);
} else {
len = snprintf(tmp, 1024, GET_VALUE_REQUEST_FMT, key);
}
*(uint32_t*)&tmp = htonl(len-4);
uint32_t resp_size = 0;
char* resp = _send_request_and_get_reply(fd, tmp, len, &resp_size);
if (!resp) {
log_error("Failed to get value for key %s", key);
return -1;
}
char* p = strstr(resp, VALUE_KEY_NODE);
if (!p) {
log_debug("Failed to get Value key node?!");
return -1;
}
p += VALUE_KEY_NODE_SIZE;
skip_ws(&p, resp+resp_size);
if (p >= resp+resp_size) {
log_debug("Failed to get value node");
return -1;
}
if (strncmp(p, INTEGER_NODE, INTEGER_NODE_SIZE) != 0) {
log_debug("Failed to parse value node");
return -1;
}
p += INTEGER_NODE_SIZE;
*value = (uint64_t)strtoll(p, NULL, 10);
free(resp);
return 0;
}
int lockdown_get_string_value(int fd, const char* domain, const char* key, char** value) {
char tmp[1024];
uint32_t len;
if (domain) {
len = snprintf(tmp, 1024, GET_VALUE_DOMAIN_REQUEST_FMT, domain, key);
} else {
len = snprintf(tmp, 1024, GET_VALUE_REQUEST_FMT, key);
}
*(uint32_t*)&tmp = htonl(len-4);
uint32_t resp_size = 0;
char* resp = _send_request_and_get_reply(fd, tmp, len, &resp_size);
if (!resp) {
log_error("Failed to get value for key %s", key);
return -1;
}
char* p = strstr(resp, VALUE_KEY_NODE);
if (!p) {
log_debug("Failed to get Value key node?!");
free(resp);
return -1;
}
p += VALUE_KEY_NODE_SIZE;
skip_ws(&p, resp+resp_size);
if (p >= resp+resp_size) {
log_debug("Failed to get value node");
free(resp);
return -1;
}
if (strncmp(p, STRING_NODE, STRING_NODE_SIZE) != 0) {
log_debug("Failed to parse value node");
free(resp);
return -1;
}
p += STRING_NODE_SIZE;
char* str_start = p;
while (*p != '<' && *p != '\0') p++;
if (*p == '\0') {
log_debug("Failed to parse string value node");
free(resp);
return -1;
}
size_t str_len = p - str_start;
*value = (char*)malloc(str_len + 1);
snprintf(*value, str_len, "%s", str_start);
(*value)[str_len] = '\0';
free(resp);
return 0;
}
int lockdown_enter_recovery(int fd) {
char tmp[512];
uint32_t len = (uint32_t)snprintf(tmp, 512, ENTER_RECOVERY_REQUEST);
*(uint32_t*)&tmp = htonl(len-4);
uint32_t resp_size = 0;
char* resp = _send_request_and_get_reply(fd, tmp, len, &resp_size);
if (!resp) {
log_error("Failed to enter recover?");
return -1;
}
int result = -1;
char* p = strstr(resp, ERROR_KEY_NODE);
if (p) {
char* str_start = NULL;
size_t str_len = 0;
p += ERROR_KEY_NODE_SIZE;
skip_ws(&p, resp+resp_size);
if (*p && !strncmp(p, STRING_NODE, STRING_NODE_SIZE)) {
p += STRING_NODE_SIZE;
str_start = p;
while (*p != '<' && *p != '\0') p++;
if (*p == '<') {
str_len = p - str_start;
}
}
if (str_start && str_len > 0) {
log_error("ERROR: Failed to make device enter recovery mode: %.*s", (int)str_len, str_start);
} else {
log_error("ERROR: Failed to make device enter recovery mode: (unknown error)");
}
result = -2;
} else {
result = (strstr(resp, ENTER_RECOVERY_STRING_NODE) == NULL) ? -1 : 0;
}
free(resp);
return result;
}
#endif
-30
View File
@@ -1,30 +0,0 @@
#ifndef __LOCKDOWN_HELPER_H
#define __LOCKDOWN_HELPER_H
#ifndef HAVE_LIBIMOBILEDEVICE
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
int lockdown_connect_udid(const char* udid);
int lockdown_connect_handle(uint32_t handle);
void lockdown_disconnect(int fd);
int lockdown_check_type(int fd, const char* type_match);
int lockdown_get_uint_value(int fd, const char* domain, const char* key, uint64_t* value);
int lockdown_get_string_value(int fd, const char* domain, const char* key, char** value);
int lockdown_enter_recovery(int fd);
#ifdef __cplusplus
}
#endif
#endif
#endif
+6 -17
View File
@@ -33,11 +33,13 @@
#define OVERRIDE_MAGIC 0xd803b376 #define OVERRIDE_MAGIC 0xd803b376
unsigned int verbose = 0; unsigned int verbose = 0;
char xargs_cmd[0x270] = "xargs ", palerain_flags_cmd[0x30] = "deadbeef"; /* we want to write to them so don't use string literals */
char xargs_cmd[0x270] = { 'x', 'a', 'r', 'g', 's', '\0' },
palerain_flags_cmd[0x30] = { 'd', 'e', 'a', 'd', 'b', 'e', 'e', 'f', '\0' };
extern char** environ; extern char** environ;
niarelap_file_t* kpf_to_upload_1 = &checkra1n_kpf_pongo; niarelap_file_t* kpf_to_upload_1 = &checkra1n_kpf_pongo_lzma;
niarelap_file_t* ramdisk_to_upload_1 = &ramdisk_dmg; niarelap_file_t* ramdisk_to_upload_1 = &ramdisk_dmg_lzma;
niarelap_file_t* overlay_to_upload_1 = &binpack_dmg; niarelap_file_t* overlay_to_upload_1 = &binpack_dmg;
niarelap_file_t** kpf_to_upload = &kpf_to_upload_1; niarelap_file_t** kpf_to_upload = &kpf_to_upload_1;
@@ -74,19 +76,6 @@ int build_checks(void) {
if (boyermoore_horspool_memmem(&checkra1n[0], checkra1n_len, (const unsigned char *)"[ra1npoc15-part] thanks to", strlen("[ra1npoc15-part] thanks to")) != NULL) { if (boyermoore_horspool_memmem(&checkra1n[0], checkra1n_len, (const unsigned char *)"[ra1npoc15-part] thanks to", strlen("[ra1npoc15-part] thanks to")) != NULL) {
palerain_flags |= palerain_option_checkrain_is_clone; palerain_flags |= palerain_option_checkrain_is_clone;
} }
#endif
#ifndef NO_KPF
struct mach_header_64 *kpf_hdr = (struct mach_header_64 *)checkra1n_kpf_pongo;
if (kpf_hdr->magic != MH_MAGIC_64 && kpf_hdr->magic != MH_CIGAM_64) {
LOG(LOG_FATAL, "Broken build: Invalid kernel patchfinder: Not thin 64-bit Mach-O");
return -1;
} else if (kpf_hdr->filetype != MH_KEXT_BUNDLE) {
LOG(LOG_FATAL, "Broken build: Invalid kernel patchfinder: Not a kext bundle");
return -1;
} else if (kpf_hdr->cputype != CPU_TYPE_ARM64) {
LOG(LOG_FATAL, "Broken build: Invalid kernel patchfinder: CPU type is not arm64");
return -1;
}
#endif #endif
return 0; return 0;
} }
@@ -135,7 +124,7 @@ int palera1n(int argc, char *argv[]) {
if (!(palerain_flags & palerain_option_device_info)) if (!(palerain_flags & palerain_option_device_info))
LOG(LOG_INFO, "Waiting for devices"); LOG(LOG_INFO, "Waiting for devices");
if (access("/var/run/usbmuxd", F_OK) != 0) if (getenv("USBMUXD_SOCKET_ADDRESS") == NULL && access("/var/run/usbmuxd", F_OK) != 0)
LOG(LOG_WARNING, "/var/run/usbmuxd not found, normal mode device detection will not work."); LOG(LOG_WARNING, "/var/run/usbmuxd not found, normal mode device detection will not work.");
pthread_create(&pongo_thread, NULL, pongo_helper, NULL); pthread_create(&pongo_thread, NULL, pongo_helper, NULL);
+1
View File
@@ -0,0 +1 @@
*.o
+1
View File
@@ -0,0 +1 @@
.
+16 -7
View File
@@ -200,18 +200,22 @@ int optparse(int argc, char* argv[]) {
return -1; return -1;
} }
pongo_path = malloc(strlen(optarg) + 1); pongo_path = malloc(strlen(optarg) + 1);
strcpy(pongo_path, optarg); if (pongo_path == NULL) {
LOG(LOG_FATAL, "memory allocation failed");
return -1;
}
snprintf(pongo_path, strlen(optarg) + 1, "%s", optarg);
break; break;
case 'o': case 'o':
if (override_file(&override_overlay, overlay_to_upload, &binpack_dmg_len, optarg)) if (override_file(&override_overlay, overlay_to_upload, &binpack_dmg_len, optarg))
return 1; return 1;
break; break;
case 'r': case 'r':
if (override_file(&override_ramdisk, ramdisk_to_upload, &ramdisk_dmg_len, optarg)) if (override_file(&override_ramdisk, ramdisk_to_upload, &ramdisk_dmg_lzma_len, optarg))
return 1; return 1;
break; break;
case 'K': case 'K':
if (override_file(&override_kpf, kpf_to_upload, &checkra1n_kpf_pongo_len, optarg)) if (override_file(&override_kpf, kpf_to_upload, &checkra1n_kpf_pongo_lzma_len, optarg))
return 1; return 1;
struct mach_header_64* hdr = (struct mach_header_64*)override_kpf.ptr; struct mach_header_64* hdr = (struct mach_header_64*)override_kpf.ptr;
if (hdr->magic != MH_MAGIC_64 && hdr->magic != MH_CIGAM_64) { if (hdr->magic != MH_MAGIC_64 && hdr->magic != MH_CIGAM_64) {
@@ -323,19 +327,24 @@ int optparse(int argc, char* argv[]) {
if ((strstr(xargs_cmd, "serial=") != NULL) && !force_use_verbose_boot && (palerain_flags & palerain_option_setup_rootful)) { if ((strstr(xargs_cmd, "serial=") != NULL) && !force_use_verbose_boot && (palerain_flags & palerain_option_setup_rootful)) {
palerain_flags &= ~palerain_option_verbose_boot; palerain_flags &= ~palerain_option_verbose_boot;
} }
if ((palerain_flags & (palerain_option_rootless | palerain_option_rootful)) == 0) {
LOG(LOG_FATAL, "must specify -l option");
return -1;
}
snprintf(palerain_flags_cmd, 0x30, "palera1n_flags 0x%" PRIx64, palerain_flags); snprintf(palerain_flags_cmd, 0x30, "palera1n_flags 0x%" PRIx64, palerain_flags);
LOG(LOG_VERBOSE3, "palerain_flags: %s", palerain_flags_cmd); LOG(LOG_VERBOSE3, "palerain_flags: %s", palerain_flags_cmd);
if (override_kpf.magic == OVERRIDE_MAGIC) { if (override_kpf.magic == OVERRIDE_MAGIC) {
LOG(LOG_VERBOSE4, "kpf override length %u -> %u", override_kpf.orig_len, checkra1n_kpf_pongo_len); LOG(LOG_VERBOSE4, "kpf override length %" PRIu32 " -> %" PRIu32, override_kpf.orig_len, checkra1n_kpf_pongo_lzma_len);
LOG(LOG_VERBOSE4, "kpf override ptr %p -> %p", override_kpf.orig_ptr, **kpf_to_upload); LOG(LOG_VERBOSE4, "kpf override ptr %p -> %p", override_kpf.orig_ptr, **kpf_to_upload);
} }
if (override_ramdisk.magic == OVERRIDE_MAGIC) { if (override_ramdisk.magic == OVERRIDE_MAGIC) {
LOG(LOG_VERBOSE4, "ramdisk override length %u -> %u", override_ramdisk.orig_len, ramdisk_dmg_len); LOG(LOG_VERBOSE4, "ramdisk override length %" PRIu32 " -> %" PRIu32, override_ramdisk.orig_len, ramdisk_dmg_lzma_len);
LOG(LOG_VERBOSE4, "ramdisk override ptr %p -> %p", override_ramdisk.orig_ptr, **ramdisk_to_upload); LOG(LOG_VERBOSE4, "ramdisk override ptr %p -> %p", override_ramdisk.orig_ptr, **ramdisk_to_upload);
} }
if (override_overlay.magic == OVERRIDE_MAGIC) { if (override_overlay.magic == OVERRIDE_MAGIC) {
LOG(LOG_VERBOSE4, "overlay override length %u -> %u", override_overlay.orig_len, binpack_dmg_len); LOG(LOG_VERBOSE4, "overlay override length %" PRIu32 " -> %" PRIu32, override_overlay.orig_len, binpack_dmg_len);
LOG(LOG_VERBOSE4, "overlay override ptr %p -> %p", override_overlay.orig_ptr, **overlay_to_upload); LOG(LOG_VERBOSE4, "overlay override ptr %p -> %p", override_overlay.orig_ptr, **overlay_to_upload);
} }
@@ -360,7 +369,7 @@ int optparse(int argc, char* argv[]) {
if (!((palerain_flags & palerain_option_pongo_exit) || (palerain_flags & palerain_option_pongo_exit))) if (!((palerain_flags & palerain_option_pongo_exit) || (palerain_flags & palerain_option_pongo_exit)))
{ {
#ifdef NO_KPF #ifdef NO_KPF
if (checkra1n_kpf_pongo_len == 0) if (checkra1n_kpf_pongo_lzma_len == 0)
{ {
LOG(LOG_FATAL, "kernel patchfinder omitted in build but no override specified"); LOG(LOG_FATAL, "kernel patchfinder omitted in build but no override specified");
return -1; return -1;
+14 -10
View File
@@ -41,20 +41,24 @@ void *pongo_usb_callback(stuff_t *arg) {
issue_pongo_command(handle, NULL); issue_pongo_command(handle, NULL);
issue_pongo_command(handle, "fuse lock"); issue_pongo_command(handle, "fuse lock");
issue_pongo_command(handle, "sep auto"); issue_pongo_command(handle, "sep auto");
upload_pongo_file(handle, **kpf_to_upload, checkra1n_kpf_pongo_len); upload_pongo_file(handle, **kpf_to_upload, checkra1n_kpf_pongo_lzma_len);
issue_pongo_command(handle, "modload"); if (*kpf_to_upload == &checkra1n_kpf_pongo_lzma) {
issue_pongo_command(handle, palerain_flags_cmd); issue_pongo_command(handle, "modload " KPF_UNCOMPRESSED_SIZE);
if ((palerain_flags & palerain_option_rootful)) } else {
{ issue_pongo_command(handle, "modload");
issue_pongo_command(handle, "rootfs");
} }
issue_pongo_command(handle, palerain_flags_cmd);
#ifdef NO_RAMDISK #ifdef NO_RAMDISK
if (ramdisk_dmg_len != 0) if (ramdisk_dmg_lzma_len != 0)
#endif #endif
{ {
strncat(xargs_cmd, " rootdev=md0", 0x270 - strlen(xargs_cmd) - 1); // strncat(xargs_cmd, " rootdev=md0", 0x270 - strlen(xargs_cmd) - 1);
upload_pongo_file(handle, **ramdisk_to_upload, ramdisk_dmg_len); upload_pongo_file(handle, **ramdisk_to_upload, ramdisk_dmg_lzma_len);
issue_pongo_command(handle, "ramdisk"); if ((*ramdisk_to_upload) == &ramdisk_dmg_lzma)
issue_pongo_command(handle, "ramdisk " RAMDISK_UNCOMPRESSED_SIZE);
else {
issue_pongo_command(handle, "ramdisk");
}
} }
#ifdef NO_OVERLAY #ifdef NO_OVERLAY
if (binpack_dmg_len != 0) if (binpack_dmg_len != 0)
+2
View File
@@ -0,0 +1,2 @@
*
!.gitignore
+5
View File
@@ -1,3 +1,4 @@
#ifdef TUI
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdint.h> #include <stdint.h>
@@ -99,3 +100,7 @@ out:
tui_started = false; tui_started = false;
return 0; return 0;
} }
#else
/* ISO C forbids an empty translation unit */
extern char** environ;
#endif
+6
View File
@@ -1,3 +1,4 @@
#ifdef TUI
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdint.h> #include <stdint.h>
@@ -13,3 +14,8 @@
#include <tui.h> #include <tui.h>
tui_screen_t tui_screen_enter_dfu(void) { return JAILBREAKING_SCREEN; } tui_screen_t tui_screen_enter_dfu(void) { return JAILBREAKING_SCREEN; }
#else
/* ISO C forbids an empty translation unit */
extern char** environ;
#endif
+6
View File
@@ -1,3 +1,4 @@
#ifdef TUI
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdint.h> #include <stdint.h>
@@ -13,3 +14,8 @@
#include <tui.h> #include <tui.h>
tui_screen_t tui_screen_enter_recovery(void) { return ENTER_DFU_SCREEN; } tui_screen_t tui_screen_enter_recovery(void) { return ENTER_DFU_SCREEN; }
#else
/* ISO C forbids an empty translation unit */
extern char** environ;
#endif
+6
View File
@@ -1,3 +1,4 @@
#ifdef TUI
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdint.h> #include <stdint.h>
@@ -13,3 +14,8 @@
#include <tui.h> #include <tui.h>
tui_screen_t tui_screen_jailbreak(void) { return EXIT_SCREEN; } tui_screen_t tui_screen_jailbreak(void) { return EXIT_SCREEN; }
#else
/* ISO C forbids an empty translation unit */
extern char** environ;
#endif
+6
View File
@@ -1,3 +1,4 @@
#ifdef TUI
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdint.h> #include <stdint.h>
@@ -45,3 +46,8 @@ tui_screen_t tui_screen_main(void) {
newtFormDestroy(form); newtFormDestroy(form);
return ret; return ret;
} }
#else
/* ISO C forbids an empty translation unit */
extern char** environ;
#endif
+6
View File
@@ -1,3 +1,4 @@
#ifdef TUI
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdint.h> #include <stdint.h>
@@ -73,3 +74,8 @@ tui_screen_t tui_screen_options(void) {
newtFormDestroy(form); newtFormDestroy(form);
return ret; return ret;
} }
#else
/* ISO C forbids an empty translation unit */
extern char** environ;
#endif
+5
View File
@@ -24,6 +24,7 @@
* SOFTWARE. * SOFTWARE.
* *
*/ */
#ifndef USE_LIBUSB
#include <errno.h> #include <errno.h>
#include <fcntl.h> // open #include <fcntl.h> // open
#include <pthread.h> #include <pthread.h>
@@ -250,3 +251,7 @@ int wait_for_pongo(void) {
CFRelease(cfdict); CFRelease(cfdict);
return 0; return 0;
} }
#else
/* ISO C forbids an empty translation unit */
extern char** environ;
#endif
+3
View File
@@ -264,4 +264,7 @@ int wait_for_pongo(void)
libusb_exit(ctx); libusb_exit(ctx);
return 0; return 0;
} }
#else
/* ISO C forbids an empty translation unit */
extern char** environ;
#endif #endif