- Katılım
- 28 Tem 2017
- Mesaj
- 2,313
- Tepkime puanı
- 1,496
shiv 2.0.0 — telefonda tweak geliştirme
Selam arkadaşlar,
shiv’i terminalde çalışan bir AI asistanı olarak paylaşmıştım. Bu sürümle tweak geliştirme artık telefonda, baştan sona yapılabiliyor.
Uzun bir yazı olacak. Sadece “ne değişti” değil, nasıl çalıştığını ve neden öyle olduğunu da anlatmaya çalıştım.
Shivin, Eğitilmemiş Bir Yapay Zekaya Göre Farkı
Var olmayan bir sınıf adı yazarsınız. Kod derlenir. Tweak kurulur. Yüklenir. Ve hiçbir şey olmaz.
Hata mesajı yok. Log yok. Çökme yok.
Bu, AI’ya tweak yazdırmanın neden tehlikeli olduğunun da cevabı. Model sınıf adını uydurur, kod derlenir, siz “tamam” sanırsınız. Model kendi işini doğrulayamıyorsa işe yaramaz.
Çözüm: cihazın kendisini okumak
Her jailbreak’li iPhone’da sistemin tüm sınıfları zaten duruyor —
shiv onu doğrudan ayrıştırıyor. IPSW indirme yok, Mac yok, kurulum yok.
2190 sınıf 28 milisaniyede taranıyor.
Model bunu kendisi çalıştırıyor: kod yazmadan önce sınıfı doğruluyor, doğrulayamazsa “emin değilim” diyor. Uydurmuyor.
Cache dışındakiler de okunuyor — Control Center modülleri, Ayarlar sayfaları, uygulamalara gömülü SDK’ler ayrı dosyalarda duruyor.
App Store uygulamaları şifreli
Buraya kadar sistem sınıflarından bahsettik. Ama Instagram’a tweak yazacaksanız onun sınıflarını bilmeniz gerekiyor ve App Store uygulamaları diskte şifreli — FairPlay.
shiv cihazda çözüyor:
Ne Mac ne Python. Ölçüm: YouTube, 196 MB, cryptid 1→0, 32.929 sınıf.
Çalışan bir uygulamadan canlı liste de alınabiliyor:
Diskteki şifre burada önemli değil — uygulama çalışırken bellekte zaten çözülmüş durumda.
Nasıl çözüyor: frida — çalışan uygulamanın içine girip canlı bakan araç. Genelde istemcisi Mac’te olur ve Python ister.
Asıl mesele: bu modelin elinde. Model frida betiğini kendisi yazıyor, çalıştırıyor, çıktısını okuyor. “Bu uygulamada hangi sınıf var” sorusunu tahminle değil ölçümle cevaplıyor.
Ve derlemeden önce canlı test edilebiliyor. Paylaşılan sınıf ya da miras metot tuzağı saniyesinde görünüyor — yoksa derleyip kurup respring atıp öğreniyordunuz.
Gereken: Sileo’dan
Sınırlar:
Telefonda ne derlenir, ne derlenmez
Bu kısım yanlış biliniyor, net yazayım.
Çoğu şey telefonda derlenir. App Store uygulamalarını ve komut satırı araçlarını hedefleyen tweak’ler cihazda derlenir, imzalanır ve kurulur. Theos, clang ve
Sistem tweak’leri de büyük ölçüde derlenir. SpringBoard, CoverSheet, daemon’lar — hook kurmak, selector çağırmak, ivar okumak sorunsuz.
İstisna: kodunuz sistem sürecine bir blok veriyorsa, cihazdaki derleyici yanlış pointer-authentication ABI’si üretiyor ve cihaz Safe Mode’a düşüyor.
ActionButtonFix’in flaşı, ekran görüntüsü çalıştı; kamerası çöktü. Çünkü sisteme blok veren tek yer oydu.
Sebebi: arm64e’de blok içindeki fonksiyon pointer’ı PAC ile imzalanıyor. Cihazdaki toolchain eski ABI ile imzalıyor, sistem yeni ABI bekliyor, imza tutmuyor. Apple gerekli linker değişikliklerini açık kaynak yapmadığı için bu ancak Xcode’un kendi
shiv bu durumu tanıyor, derlemeyi reddediyor ve sebebini açıklıyor — sadece “yapamam” demiyor.
Mac’iniz varsa
Örnek: baştan sona bir tweak
Diyelim bir uygulamada bir düğmeyi gizlemek istiyorsunuz. Akış şöyle ilerliyor:
Her izin adımında komutu olduğu gibi görüyorsunuz. “Bir şeyler yaptı” değil, ne yaptığı açık.
Talimatın kendisi önemli. Ne kadar net söylerseniz o kadar dar çalışıyor:
Bulanık bırakırsanız kendince yorumlar ve bazen fazladan iş yapar.
Başlamadan önce: /env
Geliştirme ortamını ölçer: jailbreak türü, iOS sürümü, Theos yolu ve türü, SDK’lar, frida durumu, önerilen derleme akışı.
Tweak işine girmeden önce çalıştırılacak ilk şey. Tahmin yerine ölçüm koyuyor.
Theos türü neden önemli: RootHide çatalı hem rootless hem roothide şemasıyla derler, standart Theos yalnız rootless yapar. Ve dizin adı size bunu söylemez — tek geçerli ölçüm
Kurulum — kim neyi kurar
Bu ayrım net olsun:
Siz kurarsınız (Sileo/Zebra’dan):
Bir meta paket — clang, ldid, make, perl, odcctools, git ve diğerlerini çekiyor.
shiv kurar (izninizi alarak):
Theos’un kendisi Sileo’da bulunmaz, sık karıştırılıyor. shiv
Kurulum sonrası
★ /bilgi — shiv’i kendinize göre ayarlamak
Cihazınıza özgü şeyleri bir kez yazarsınız, her seferinde anlatmazsınız.
En işe yarayan kullanım — root parolası
shiv komutları alt süreç olarak çalıştırıyor ve orada kontrol terminali yok.
BILGI.md’ye şu kalıbı yazarsanız model root gerektiren komutlarda artık takılmıyor, doğrudan kullanıyor:
Her seferinde hatırlatmaya gerek kalmıyor.
Uyarı: parola düz metin olarak o dosyada duruyor ve modele gidiyor. Cihazınız sizin, ama bilerek yapın.
Başka ne yazılabilir
Proje dizininde de bir
Neden değerli: her yeni oturumda aynı şeyleri anlatmak hem zaman hem token yakıyor. Bir kez yazılan not kalıcı oluyor ve model işe daha bilerek başlıyor.
Arka plan işleri
Uzun süren bir komutu artık bekletmeden bırakabilirsiniz.
Çıktı iş sürerken de görünüyor, süre saniyede bir akıyor.
Derleme uzun sürüyorsa arka plana atıp sohbete devam edebilirsiniz.
Diğer düzeltmeler
Belgeler
Pakette shiv’den bağımsız bir tweak rehberi var —
shiv kullanmasanız da okunur. Kendiniz öğrenmek isterseniz oradan başlayın.
Kurulum
Depo: muratkurt's Repo
Node.js paket içinde geliyor, başka bir şey kurmanıza gerek yok. Terminali açıp
Tweak geliştirecekseniz ayrıca
shiv’i root ile çalıştırmayın. Dosyalar root’a geçer ve ayarlarınız bir daha yazılamaz.
Notlar
Selam arkadaşlar,
shiv’i terminalde çalışan bir AI asistanı olarak paylaşmıştım. Bu sürümle tweak geliştirme artık telefonda, baştan sona yapılabiliyor.
Uzun bir yazı olacak. Sadece “ne değişti” değil, nasıl çalıştığını ve neden öyle olduğunu da anlatmaya çalıştım.
Shivin, Eğitilmemiş Bir Yapay Zekaya Göre Farkı
Var olmayan bir sınıf adı yazarsınız. Kod derlenir. Tweak kurulur. Yüklenir. Ve hiçbir şey olmaz.
Hata mesajı yok. Log yok. Çökme yok.
Bu, AI’ya tweak yazdırmanın neden tehlikeli olduğunun da cevabı. Model sınıf adını uydurur, kod derlenir, siz “tamam” sanırsınız. Model kendi işini doğrulayamıyorsa işe yaramaz.
Çözüm: cihazın kendisini okumak
Her jailbreak’li iPhone’da sistemin tüm sınıfları zaten duruyor —
/System/Cryptexes altındaki dyld shared cache’te. iOS 13.5’ten beri sistem kodu tek tek dosyalarda değil, bu birleşik önbellekte.shiv onu doğrudan ayrıştırıyor. IPSW indirme yok, Mac yok, kurulum yok.
Kod:
shiv-sinif LockScreen
shiv-sinif –metod SBLockScreenManager
shiv-sinif –metodara notificationCount
2190 sınıf 28 milisaniyede taranıyor.
Model bunu kendisi çalıştırıyor: kod yazmadan önce sınıfı doğruluyor, doğrulayamazsa “emin değilim” diyor. Uydurmuyor.
Cache dışındakiler de okunuyor — Control Center modülleri, Ayarlar sayfaları, uygulamalara gömülü SDK’ler ayrı dosyalarda duruyor.
–tara onları da geziyor.App Store uygulamaları şifreli
Buraya kadar sistem sınıflarından bahsettik. Ama Instagram’a tweak yazacaksanız onun sınıflarını bilmeniz gerekiyor ve App Store uygulamaları diskte şifreli — FairPlay.
nm hiçbir şey vermez.shiv cihazda çözüyor:
Kod:
shiv-cek <bundle-id>
Ne Mac ne Python. Ölçüm: YouTube, 196 MB, cryptid 1→0, 32.929 sınıf.
Çalışan bir uygulamadan canlı liste de alınabiliyor:
Kod:
shiv-oku <bundle-id> [desen]
Diskteki şifre burada önemli değil — uygulama çalışırken bellekte zaten çözülmüş durumda.
Nasıl çözüyor: frida — çalışan uygulamanın içine girip canlı bakan araç. Genelde istemcisi Mac’te olur ve Python ister.
pip install frida iOS’ta çöküyor, o yüzden frida’nın C kitiyle cihazda çalışan kendi istemcimizi yazdık. Python yok, pip yok, Mac yok.Asıl mesele: bu modelin elinde. Model frida betiğini kendisi yazıyor, çalıştırıyor, çıktısını okuyor. “Bu uygulamada hangi sınıf var” sorusunu tahminle değil ölçümle cevaplıyor.
Ve derlemeden önce canlı test edilebiliyor. Paylaşılan sınıf ya da miras metot tuzağı saniyesinde görünüyor — yoksa derleyip kurup respring atıp öğreniyordunuz.
Gereken: Sileo’dan
Frida paketi. /env çalışıp çalışmadığını söylüyor.Sınırlar:
.appex uzantıları ayrı süreçte çalıştığı için bu yolla çözülmüyor. Ayrıca uiopen ile açılan uygulamaya tweak’ler yüklenir, frida’nın kendi başlattığı sürece yüklenmez — kurduğunuz tweak’i test edecekseniz uygulamayı normal yoldan açın.Telefonda ne derlenir, ne derlenmez
Bu kısım yanlış biliniyor, net yazayım.
Çoğu şey telefonda derlenir. App Store uygulamalarını ve komut satırı araçlarını hedefleyen tweak’ler cihazda derlenir, imzalanır ve kurulur. Theos, clang ve
ldid.Sistem tweak’leri de büyük ölçüde derlenir. SpringBoard, CoverSheet, daemon’lar — hook kurmak, selector çağırmak, ivar okumak sorunsuz.
İstisna: kodunuz sistem sürecine bir blok veriyorsa, cihazdaki derleyici yanlış pointer-authentication ABI’si üretiyor ve cihaz Safe Mode’a düşüyor.
Kod:
sorunsuz sorunlu
%hook / %orig object_setIvar ile @? ivar’a blok
selector çağrısı completion: parametresine blok
ivar okuma sisteme verilen ^{ } literal
ActionButtonFix’in flaşı, ekran görüntüsü çalıştı; kamerası çöktü. Çünkü sisteme blok veren tek yer oydu.
Sebebi: arm64e’de blok içindeki fonksiyon pointer’ı PAC ile imzalanıyor. Cihazdaki toolchain eski ABI ile imzalıyor, sistem yeni ABI bekliyor, imza tutmuyor. Apple gerekli linker değişikliklerini açık kaynak yapmadığı için bu ancak Xcode’un kendi
ld64’üyle üretilebiliyor.shiv bu durumu tanıyor, derlemeyi reddediyor ve sebebini açıklıyor — sadece “yapamam” demiyor.
Mac’iniz varsa
/mac ile bağlanıyor ve orada derliyor. Uygulamadan çıkmadan.Örnek: baştan sona bir tweak
Diyelim bir uygulamada bir düğmeyi gizlemek istiyorsunuz. Akış şöyle ilerliyor:
Kod:
/env
↓
ortam ölçülür: jailbreak türü, theos yolu ve TÜRÜ,
SDK, frida, önerilen derleme akışı
↓
“X uygulamasındaki Y düğmesini gizleyen bir tweak yaz”
↓
uygulama şifreli mi? ← kontrol eder
↓ evet
shiv-cek <bundle-id> ← İZİN İSTER, çözer
ya da
shiv-oku <bundle-id> ← çalışan uygulamadan canlı okur
↓
sınıfı bul ve doğrula
↓ doğrulayamadı → “emin değilim” der, DURUR
↓ doğruladı
metot adını doğrula ← bir karakter yanlış selector
derlenir ama hiçbir şey yapmaz
↓
frida ile CANLI test ← derlemeden ÖNCE
paylaşılan sınıf / miras metot
tuzağını burada yakalar
↓
Tweak.x + Makefile + filter plist + control yazılır
↓
derleme kararı:
uygulama tweak’i → cihazda derler
sisteme blok → reddeder, /mac önerir
↓
make clean package ← İZİN İSTER
↓
çıktıyı doğrula ← dm.pl satırını OKUR
(ls -t güvenilmez: build patlarsa
eski deb seçilir)
↓
dpkg -i ← İZİN İSTER
↓
uygulamayı yeniden başlat
↓
çalıştı mı? ← marker dosyası ya da size sorar
Her izin adımında komutu olduğu gibi görüyorsunuz. “Bir şeyler yaptı” değil, ne yaptığı açık.
Talimatın kendisi önemli. Ne kadar net söylerseniz o kadar dar çalışıyor:
Kod:
“Önce incele, hiçbir değişiklik yapmadan sorunu raporla”
“Düzelt ve derle, ama KURMA, benden onay bekle”
“Başka dosyalarda gereksiz değişiklik yapma”
Bulanık bırakırsanız kendince yorumlar ve bazen fazladan iş yapar.
Başlamadan önce: /env
Kod:
/ortam veya /env
Geliştirme ortamını ölçer: jailbreak türü, iOS sürümü, Theos yolu ve türü, SDK’lar, frida durumu, önerilen derleme akışı.
Tweak işine girmeden önce çalıştırılacak ilk şey. Tahmin yerine ölçüm koyuyor.
Theos türü neden önemli: RootHide çatalı hem rootless hem roothide şemasıyla derler, standart Theos yalnız rootless yapar. Ve dizin adı size bunu söylemez — tek geçerli ölçüm
vendor/mod/roothide dizininin varlığı.Kurulum — kim neyi kurar
Bu ayrım net olsun:
Siz kurarsınız (Sileo/Zebra’dan):
Kod:
theos-dependencies
shiv kurar (izninizi alarak):
Kod:
theos hiçbir depoda YOK, git ile gelir
SDK çatalda yoksa kopyalanır
Theos’un kendisi Sileo’da bulunmaz, sık karıştırılıyor. shiv
git clone komutunu size gösterip onay ister, kurar ve ne kurduğunu, nereye kurduğunu söyler.Kurulum sonrası
/env tekrar çalıştırılır — eksik varsa görünür.★ /bilgi — shiv’i kendinize göre ayarlamak
~/.shiv/BILGI.md dosyasına yazdığınız her şey her oturumda modele veriliyor. Uygulama içinden de eklenebiliyor:
Kod:
/bilgi “eklemek istediğiniz not”
Cihazınıza özgü şeyleri bir kez yazarsınız, her seferinde anlatmazsınız.
En işe yarayan kullanım — root parolası
shiv komutları alt süreç olarak çalıştırıyor ve orada kontrol terminali yok.
su parolayı terminalden okuduğu için sonsuza kadar bekler — shiv donmuş gibi görünür.BILGI.md’ye şu kalıbı yazarsanız model root gerektiren komutlarda artık takılmıyor, doğrudan kullanıyor:
Kod:
Root isteyen komutlarda parola promptu bekleme:
printf ‘PAROLAM\n’ | sudo -S <komut> kalıbını kullan
Her seferinde hatırlatmaya gerek kalmıyor.
Uyarı: parola düz metin olarak o dosyada duruyor ve modele gidiyor. Cihazınız sizin, ama bilerek yapın.
Başka ne yazılabilir
Kod:
# Cihaz
jbroot: /var/containers/Bundle/Application/.jbroot-XXXX/
SpringBoard’ın yazdığı dosyalar /rootfs/private/var/mobile/ altında
theos çatalı ~/theos-rh, standart olan ~/theos
# Tercihlerim
Derlemeden önce her zaman make clean çalıştır
Paketi kurmadan önce bana sor
Uzun açıklama yazma, komutları göster
# Bu projede
Bu tweak method_setImplementation kullanıyor, Logos değil
Prefs bundle’ı custom loader ile çalışıyor
Proje dizininde de bir
BILGI.md olabiliyor — o yalnız orada geçerli. Genel notlar ev dizininde, projeye özgü olanlar proje klasöründe.Neden değerli: her yeni oturumda aynı şeyleri anlatmak hem zaman hem token yakıyor. Bir kez yazılan not kalıcı oluyor ve model işe daha bilerek başlıyor.
Arka plan işleri
Uzun süren bir komutu artık bekletmeden bırakabilirsiniz.
Kod:
Ctrl+B çalışan işi arka plana al
↓ alttaki sayacı seç
Enter ayrıntı paneli
k işi durdur
← listeye dön
Esc kapat
Çıktı iş sürerken de görünüyor, süre saniyede bir akıyor.
Derleme uzun sürüyorsa arka plana atıp sohbete devam edebilirsiniz.
Diğer düzeltmeler
- Satır sonlarının yenmesi düzeldi — oluk işareti bu terminalde çift genişlik çiziliyormuş
- Komut kuyrukları genişlik bütçesini aşıyordu
Ctrl+Biki yere bağlıydı; arka plan dalı ulaşılmayan ölü koddu- Katlama durumu kaydediliyor,
/resumeartık açıp geri getirmiyor - Yarım kalan araç çağrısıyla bozulan oturumlar yüklenirken onarılıyor
- Mac bağlantısı ve respring izin ekranından geçiyor
Belgeler
Pakette shiv’den bağımsız bir tweak rehberi var —
belgeler/TWEAK-GELISTIRME-REHBERI.txt, 515 satır. Ortam, Theos, iki derleme akışı, caps meselesi, sınıf keşfi, hook kalıpları, doğrulama merdiveni ve dokuz duvar.shiv kullanmasanız da okunur. Kendiniz öğrenmek isterseniz oradan başlayın.
Kurulum
Depo: muratkurt's Repo
Node.js paket içinde geliyor, başka bir şey kurmanıza gerek yok. Terminali açıp
shiv yazın.Tweak geliştirecekseniz ayrıca
theos-dependencies kurmanız gerekiyor (yukarıda anlattım). Canlı inceleme için Frida.shiv’i root ile çalıştırmayın. Dosyalar root’a geçer ve ayarlarınız bir daha yazılamaz.
Notlar
- Her şey tek cihazda ölçüldü — iPhone 15 Pro, iOS 17.0.3, RootHide. Rootless build doğrulandı ama sınıf arama tarafı orada sınanmadı. Rootful için yazılanlar belgeye dayanıyor, ölçüme değil.
- Sınıf arama iOS 17’de doğrulandı. Başka bir sürümde adres çözümü kayabilir — o durumda shiv “doğrulayamıyorum” der, yanlış ad vermez.
- .appex uzantıları çözülmüyor.
- IPA paketleme ertelendi.
Son düzenleme: