Yanıtlar:
Bildiğim 3 yol var. Apple inceleme ekibinde çalışmadığım için bunlar sadece biraz spekülasyon.
otool -L
Bu, uygulamanın bağlandığı tüm kitaplıkları listeler. Açıkça kullanmamanız gereken bir şey, IOKit ve WebKit gibi, bununla tespit edilebilir.
nm -u
Bu, tüm bağlantılı sembolleri listeleyecektir. Bu tespit edebilir
UITouch._phase
nedeni olabilir .)strings
Objective-C seçicileri, ikilinin özel bir bölgesinde saklanır ve bu nedenle Apple, içeriği oradan çıkarabilir ve bazı belgelenmemiş Objective-C yöntemlerini kullanıp kullanmadığınızı kontrol edebilir -[UIDevice setOrientation:]
.
Seçiciler, mesajlaştığınız sınıftan bağımsız olduğundan, özel sınıfınız -setOrientation:
UIDevice ile ilgisiz tanımlasa bile , reddedilme olasılığı olacaktır.
Özel API'ler (yanlış alarmlar) nedeniyle olası reddi tespit etmek için Erica Sadun'un APIKit'ini kullanabilirsiniz.
(Bu kontrolleri gerçekten gerçekten gerçekten çözmek istiyorsanız, aşağıdaki gibi çalışma zamanı özelliklerini kullanabilirsiniz.
-valueForKey:
; object_getInstanceVariable, object_getIvar vb.bu özel kütüphaneleri, sınıfları, yöntemleri ve ivarları elde etmek için. )
Bir Mach-O programındaki seçicileri, Terminal'de aşağıdaki tek satırlık kullanarak listeleyebilirsiniz:
otool -s __TEXT __objc_methname "$1" |expand -8 | cut -c17- | sed -n '3,$p' | perl -n -e 'print join("\n",split(/\x00/,scalar reverse (reverse unpack("(a4)*",pack("(H8)*",split(/\s/,$_))))))'
Diyelim ki bazı özel API kullanmak istiyorsunuz; C hedefi, bir dizeden herhangi bir SEL oluşturmanıza izin verir:
SEL my_sel = NSSelectorFromString([NSString stringWithFormat:\
@"%@%@%@", "se","tOr","ientation:"]);
[UIDevice performSelector:my_sel ...];
Bir robot veya kütüphane taraması bunu nasıl yakalayabilir? Bunu, çalışma zamanında özel erişimleri izleyen bir araç kullanarak yakalamak zorunda kalacaklardı. Böyle bir çalışma zamanı aracı oluşturmuş olsalar bile, yakalamak zordur çünkü bu çağrı nadiren uygulanan bir yolda gizlenmiş olabilir.
İkilinizin içe aktarmaya çalıştığı tüm sembollere baktıklarını (sembol tablosunda hiç şüphesiz bilgi onlara kolayca erişilebilir) ve bu sembollerden herhangi biri kendi "özel API listesinde" bulunursa sizi rahatsız ettiklerini hayal ediyorum. Aslında, otomatikleştirmek oldukça kolay.
Bir yürütülebilir dosya tam olarak bir kara kutu değildir. Bir kütüphaneye seslenirseniz, bulması kolay bir şeydir. Bu nedenle, modern bilgisayar bilimleri eğitimlerinde montaj dillerinin kaybına üzülüyorum. =] Ldd gibi araçlar size neye bağlandığınızı söyleyecektir, ancak ldd'nin mac iPhone geliştirici kitine nasıl geldiğini hatırlamıyorum.
sembol araştırmasının yanı sıra ...
apple, sdk'nin, belirtilen yöntemlerden birinden girildiğinden emin olmak için çağrıldığında her özel yöntem yığınını kontrol eden bir sdk sürümüne kolayca sahip olabilir.
Statik olarak bağlansanız bile, en kötü ihtimalle, kendi listelerindeki özel API'lerden kodun örneklerini alabilir ve bunlara karşı ikili programınızı arayabilirler (ayrıca otomatikleştirilmesi nispeten kolaydır).
Apple'ı tanıyarak, kapsamlı, otomatik bir sisteme sahip olduklarına bahse girerim ve herhangi bir belirsizlik muhtemelen reddedilir veya manuel olarak incelenir.
Günün sonunda, Apple'ı kandırmaya çalışmak muhtemelen çabaya değmeyeceğini düşünüyorum.
Bu masaüstü uygulaması, App Scanner , Mach-O Binary dosyasını ayırarak .app dosyalarını özel api kullanımı için tarayabilir. Mümkünse, Apple da yapabilir!
Tersine mühendislik için bir kodu incelemeye izin veren birçok araç vardır.
nm
- nesne dosyalarındaki sembolleri listeler objdump
- nesne dosyalarındaki bilgileri görüntüleyin.otool
- Mach-O [Hakkında] çalıştırılabilir dosyaların içeriğini görüntüleyinstrings
- bu size tüm ipleri verecek.Bu komutları kullanmanın örneklerini / temsilini Objective-C ve Swift için özetlerde bulabilirsiniz.