From aeaa7295db973a6d5068ec71eefc253bfad3ecd0 Mon Sep 17 00:00:00 2001 From: EmptyEnergy <45885144+EmptyEnergy@users.noreply.github.com> Date: Thu, 20 Nov 2025 16:04:48 -0600 Subject: [PATCH 1/2] Add files via upload --- Feature Flag Folder Enabler.batter | Bin 0 -> 6475 bytes FeatureFlags/Global.plist | 44 +++++++ MobileGestalt/com.apple.MobileGestalt.plist | Bin 0 -> 10981 bytes .../com.apple.MobileGestalt.plist.bak | Bin 0 -> 10772 bytes run.py | 123 ++++++++++++++++-- 5 files changed, 159 insertions(+), 8 deletions(-) create mode 100644 Feature Flag Folder Enabler.batter create mode 100644 FeatureFlags/Global.plist create mode 100644 MobileGestalt/com.apple.MobileGestalt.plist create mode 100644 MobileGestalt/com.apple.MobileGestalt.plist.bak diff --git a/Feature Flag Folder Enabler.batter b/Feature Flag Folder Enabler.batter new file mode 100644 index 0000000000000000000000000000000000000000..25f0ed357d24492dd0d14d1f2565baf44f766d09 GIT binary patch literal 6475 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 + + + + SpringBoard + + Maglev + + Enabled + + + AutobahnQuickSwitchTransition + + Enabled + + + SlipSwitch + + Enabled + + + PosterEditorKashida + + Enabled + + + Domino + + Enabled + + + SuperDomino + + Enabled + + + SwiftUITimeAnimation + + Enabled + + + + + diff --git a/MobileGestalt/com.apple.MobileGestalt.plist b/MobileGestalt/com.apple.MobileGestalt.plist new file mode 100644 index 0000000000000000000000000000000000000000..dd722d673b24768c00529fdc60f3e4a7dd245a20 GIT binary patch literal 10981 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 S1jpI%<--q#G5mdn_5T2Sjlh=x literal 0 HcmV?d00001 diff --git a/MobileGestalt/com.apple.MobileGestalt.plist.bak b/MobileGestalt/com.apple.MobileGestalt.plist.bak new file mode 100644 index 0000000000000000000000000000000000000000..bd9a75ec2db1b579d425ad38c53deeb3f25e2d89 GIT binary patch literal 10772 zcmb_i3zXwld7jM@*aVt*^CI*1JUlbO>#=0Zvb-ehNS6GV@mqc;Fe_WKEk9&imYe;WQMIG%w0)fh2u#dXjU}hSSp0LQW4f;WTYe>FGK2p=%xGiG zZlc|pPyhdY-+%urUCHv;xkgoNDG2hyp^FZ`>EbuPi!cS{^G^cRcVUFo3 zGI!H(Hz~+1u`cZzR^1FkI_)TKaS#Y%!5kQAAxWIH5O&Og+DX#wa8co-*HTlX?a&A> z(#0@831Jdv4&8u$8mL!jf7ASbt;~kQGcD2A2o1Jeq@CC zak#Jkf!)IgqVWN&t5?80#7p&p3yk6Me%t6!z!;W;m&tzVYwlmQFRMS-fP(cPLOG1} z2>D6)f9m#H8hyR2IBq|39|ew5H7^yyLWhdj(f zg!v0aSm%vG_)MVhM_*sh>tm=Nmxnw=sME(VKMD1|yYIT|T_C5Qk6s7s!aT%r`Saz^ zw~k&vE*_VM{Xx|0Cgn$O!=P;H2WJaxZJkZNj-9jRMm1nO3E};J+|bYu`PUok>%e*t zC-Vp2361l?IuM}_qCT&W_3In@AnNrnKMA349P0h!bgwrL#~Ho-KU)swe^Z3Uar#$B z0*LVJK|Oq3fU&-w{&hhg>wVCFq4;|1ov;6V^>AL$2XS0}91r!AQ1934ArEmJKPj*G z!x*C8KQ4xPh)}l|pWK2ufP4A<+4JAm*U_(Q$U~eo!f&b@R|onh;W$6c!+F3M)`Ky` zae2s3!VC55eK6J|93TF@&bQLu6kfXnQ15KbVgI9FAP=^EHh6^grL^7sBF&{8(tV}R@qqHf zAAN^vJp8YxS8zUJ-MPS4EF%`Yq(mzGynO>65L z*S*7h%(7`kP@DSk1MVbT$KQGV4evU!MN)2>@pygy?VUg{6pln=Y&?-nr8C(Z-?Mv? z%jJ1aC~(D+c(PpK`D%^hqP3AMup8*)l1 zMZ$QdFNg64+6lypfH0$Rp`KS-T-5Dw47$E79%NWhDr@DN{S=Fbv+-CTMH2a1f-Hdv zR?ItbNkq$XmysKJI><~^CmkJ*{S-I&itfq9tii2@R-IXpzV?+i=* zPNj}?01?kxkuq-U2JJNBZpRdJC~pmbQfw~WSJ+54O`+u|;SFTNJ$D2US+C5+f+-~4 z>bX1NkRWV3+%`b8-Tn$LxyYKM&`R3!@p7r@i2{P|)k67tCzT3eI9BRrd2gXEfx+|6 zf}5rMxinhyaIyMM+%bszfn&SGBrp_X{2bjO2Si15&}LX$%3v1K7k2k z+vaYr=!_&9ayQhaQs4{*1UA+Z1NCipuvC_CiO0RE92ld7+oLQ`xy873fTR+*%tt#o zAiPX#AZ5E`#vA5P4tGWqXhHyEh#h~M$i!)hV&zQ7%7!p6L4q-S>3B14Po%>;?Ko4Z z_6Fu|kOb|j-4pf3Kyb*Oikac5dJI>n;n78-zGTUXh17mx&A!-lqSihj8bKl2V;rqP zHeL<{D<~2dTQuk@xWf>oZY$jD#oS7ls@OQ1%7QUm!K{PieV9GpA`@J>YULAV|8Rn? zGTq7*%g&xZDfpuVYqzHDfN-IKelXv|258sLdXqv^5rV_TP;1wGSzj=~6v%eGQsHex z!B+(idAkxMy+Sg;mm&@`ig+ERaK(X9Nm67 zLeNF3pRENd2o~q?0#2tuSAn>n==wTLW~WaKVyHh&rO-AYLW4HOSk=m9b@>u@cO}MW zWk5I@nVqUv%4Dd4w?kI_2_jZz072GwB!4I#h}3t20efDlM-Va#22VwpN{(|9QNiO$ zSi8k$BizHmiE0jfC7&E__~`)IwB@)e#V3c35Jy@E+ev4wU$k|xOsK{RSRahxZIXN{ z7LeS|dL}A|G9HXbX28t16REspcCal(>d20+wOqkc3>e(y+@?EBtdZ=7&0e3Pl>8-U z2{^E3q0y5&0VO3?tA1a@-%1vPfaulBsSX>Drs7V2zHjaol7lh{26v(Mh&|g9M8wra zyeu2$DB29>k;^GDS2@~qAfAqcELgchA*6s(AqH_Fo?MrAx&q0tuZ)l(a~KdV+#Bn3 z%57?=lE8d}P%D%7MF7#yc`IU>>;~dpp~FcPb#QI%Msv|Y+n*B(2pYk*g?hln)ONrG zi&WR?Pl=Qi@NuNMO37KOm;zn($pVElwhm%8%RYrqIa#_$0HT-h<@<4))yEKZ(TWAQ zu;0uABH8xx%?6R68ltNcN%^XgYC8#LUdt8|ZfCQOH4?EM>T?g~% zW`Y!#Bf~_p*zVJGvgmF_ctChvXvyJkZ+FsuR_IH`kf+Hs01;{V(^+RbnHoqtT%1YM zIS;EX24A}3jHSc9PPMsXW_y)xK4>HFzv}ZNU1IfsPh<>pfQ4s>>5n@dToN#!2Q36H6hO0g& z{QS26el@*x`{C!mEdIpyv%ohlf9rv2Q(Lm*Z}zum{PQ~=J#kj@Dxl8%=ht4^FFEt! z*yAVI1nZBw_8q-QJP@#|3&0>!^}1p~?S##?iP<)7u|Oa*>MqQxM=hh44ErNqFa_`& z{$PLb-rs&-%$p8_h+52NU=fqAd7cif2CkxgW{9W(Zi8*MnU>B4Mw96M(0io8-fZrtNbf>NLlID#o-toFe9` zf>sQ2yM`-aJ+alOa(ypXYb(2kMVK899g*vNJFn0}D=&);W%!k&X{hK+Tusc=nmt(O z)n?v)ZZqyG*8+_|*RU>|=cT-YROboB3qnEz2 zYw(egNPr=Z55cJcu7N`XOauD}I;gf|(*Qm04KS?j7y?%Ve#{n&*mc)M6iE&Ta2XC8 zj<8~wO}9#%&0;68ghHSg^5VVsec}EGzWCtjFMa8>`m<{|S`&DYv#583hAgzSuVuZX zEr}iVJ6c@T(ja4A3PrSkmR!3~5afg63!lvH%2+U=tY);fdVWiuF zF}Te_x!kA)wV@uD3sax-5lofY)pwe9(&@CQcS-dtaO&GL3yCv~g(4kpCyluYw~IL2 z-f+Z|E3xPHw>P|_>DEEQW~T^85=A#{o9cbiFf?v_N^ALt4{ja3D7|aA+N*v~Z@0n8 zia5MDTIyH#YQp{B_$FLp>T3qvRaaZ0#&vA!OU~Jsg`hW;0)@kdYcEy*68?(%DXaFu zjP{|-qDsYEH@MH<-nHA@Lu)VGx}{R1?ac0CiQRhO`%gb}qg2RSgx+u+Ce=ltuG~~X zlz2<6KXqj4=+x|#X$qOTVT!-@52xAb>hx{X_e?)I{oM4=XD*tVoxx^;GliL3WDj-Z{pH-{a~pHyTz0NC_tCir=e|An;@qqA zm&`BEzjHo5Uz`8n{Jrx}%|Ac?FAIkk<`x_ap@rhYsfD{19$om$g_jooXYrav>!NRw zTO2IjvG|q6XBPiq@xP1)<8?;Lc%xAC(#5^-GB*X{ou?Te^Aa z)Y1b>UtM}^=|@Zdy7bHC>E+pFDdHK%erHki zD_5+TR?I7#E9eTg;#@hta$+U7!mkuonk$d3JhAe>t5>dWte#kX_iAtTh4mNLf3p6I_5av- e^TyJ~+J=84xRKd7shzir;IqNA@I-33QTl&-;dMO# literal 0 HcmV?d00001 diff --git a/run.py b/run.py index cb9e85f..f21d799 100644 --- a/run.py +++ b/run.py @@ -229,7 +229,7 @@ def exit_func(tunnel_proc): async def create_tunnel(udid): # TODO: check for Windows - tunnel_process = subprocess.Popen(f"sudo /home/pengubow/venv/bin/python3 -m pymobiledevice3 lockdown start-tunnel --script-mode --udid {udid}", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + tunnel_process = subprocess.Popen(f"sudo pymobiledevice3 lockdown start-tunnel --script-mode --udid {udid}", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) atexit.register(exit_func, tunnel_process) while True: output = tunnel_process.stdout.readline() @@ -302,12 +302,119 @@ async def connection_context(udid):# Create a LockdownClient instance raise Exception(f"Connection not established... {e}") if __name__ == "__main__": - if len(sys.argv) != 4: - print("Usage: python run.py /path/to/file (ex. ./MobileGestalt/com.apple.MobileGestalt.plist) /path/to/file_on_iOS (like /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist)") - exit(1) - - overridefile = sys.argv[2] - path = sys.argv[3] + + print("\n==============================") + print(" Detecting connected iOS devices") + print("==============================\n") + + detected_devices = [] # [(name, udid)] + + try: + output = subprocess.check_output( + "pymobiledevice3 usbmux list", + shell=True, + stderr=subprocess.STDOUT + ).decode("utf-8", errors="ignore") + + print(output) + + # Attempt JSON parse (new pymobiledevice3 output) + import json + try: + devices_json = json.loads(output) + for entry in devices_json: + if entry.get("ConnectionType") != "USB": + continue + + name = entry.get("DeviceName", "Unknown Device") + udid = entry.get("UniqueDeviceID") + + if udid: + detected_devices.append((name, udid)) + except: + pass + + # Legacy fallback + if not detected_devices: + temp_name = None + temp_udid = None + temp_conn = None + + for line in output.splitlines(): + line = line.strip() + + if "DeviceName" in line: + temp_name = line.split(":", 1)[1].strip() + + if "ConnectionType" in line: + temp_conn = line.split(":", 1)[1].strip() + + if "SerialNumber" in line or "UniqueDeviceID" in line: + temp_udid = line.split(":", 1)[1].strip() + + if temp_name and temp_udid and temp_conn: + if temp_conn == "USB": + detected_devices.append((temp_name, temp_udid)) + temp_name = None + temp_udid = None + temp_conn = None + + except Exception as e: + print(f"Could not auto-detect devices: {e}") + + print("\nHow to find your UDID:") + print("• Run: pymobiledevice3 usbmux list") + + # AUTO SELECT if 1 USB device + if len(detected_devices) == 1: + devname, udid = detected_devices[0] + print(f"Detected 1 device via USB:\n{devname} – {udid}\nUsing automatically...\n") + + elif len(detected_devices) > 1: + print("Detected device(s):") + for idx, (devname, udid) in enumerate(detected_devices, 1): + print(f"{idx}) {devname} – {udid}") + + choice_device = input("\nSelect number OR press ENTER to type manually: ").strip() + + if choice_device.isdigit() and 1 <= int(choice_device) <= len(detected_devices): + udid = detected_devices[int(choice_device) - 1][1] + else: + udid = input("Enter UDID manually: ").strip() + + else: + udid = input("Enter your device UDID: ").strip() + + print("\n==============================") + print(" Select operation") + print("==============================\n") + print("1) MobileGestalt") + print("2) FeatureFlags (Global.plist)") + print("3) Custom file paths\n") + + choice = input("Enter option (1-4): ").strip() + + if choice == "1": + overridefile = "./MobileGestalt/com.apple.MobileGestalt.plist" + path = "/private/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist" + + elif choice == "2": + print("\n⚠️ IMPORTANT: Feature Flags Warning ⚠️") + print("---------------------------------------") + print("You MUST have a 'FeatureFlags' folder on your iOS device.") + print("Enable it using a Nugget .batter file.\n") + + overridefile = "./FeatureFlags/Global.plist" + path = "/private/var/preferences/FeatureFlags/Global.plist" + + elif choice == "3": + overridefile = input("Enter path to LOCAL file: ").strip() + path = input("Enter path on the iOS DEVICE: ").strip() + + else: + print("Invalid option.") + sys.exit(1) + info_queue = queue.Queue() os.chdir(os.path.dirname(os.path.abspath(__file__))) - asyncio.run(connection_context(sys.argv[1])) + asyncio.run(connection_context(udid)) \ No newline at end of file From 01bbd20e25fde96811b3786c1af337047f189637 Mon Sep 17 00:00:00 2001 From: EmptyEnergy <45885144+EmptyEnergy@users.noreply.github.com> Date: Thu, 20 Nov 2025 16:05:44 -0600 Subject: [PATCH 2/2] Update README title to include 'WithOptions' Renamed repository title to 'bl_sbx-WithOptions'. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d56b84e..1a1882c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# bl_sbx +# bl_sbx-WithOptions ## itunesstored & bookassetd Sandbox Escape This repository contains a proof-of-concept demonstrating how maliciously crafted `downloads.28.sqlitedb` and `BLDatabaseManager.sqlite` databases can escape the sandbox of **itunesstored** and **bookassetd** on iOS. By abusing their download mechanisms, the POC enables writing arbitrary `mobile`-owned files to restricted locations in `/private/var/`, including MobileGestalt cache files—allowing device modifications such as spoofing the device type.