shiv 2.0.0 — Yapay Zeka ile Telefonda Tweak Geliştirme

murat

Yetkili
Administrator
Katılım
28 Tem 2017
Mesaj
2,313
Tepkime puanı
1,496
shiv 2.0.0 — telefonda tweak geliştirme

banner.png


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
Bir meta paket — clang, ldid, make, perl, odcctools, git ve diğerlerini çekiyor.

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+B iki yere bağlıydı; arka plan dalı ulaşılmayan ölü koddu
  • Katlama durumu kaydediliyor, /resume artı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:
Geri
Üst