2016-02-17 12 views
8

Android projenize üçüncü taraf API'leri (paket bağımlılık enjeksiyonu, oluşturulan kitaplıklar, kaynak kodu vb.) Içe aktardığınızda, bunların reklamı yapılan gibi davranacağını varsaymış olursunuz. Çoğu zaman kod açık kaynak değildir, gizlenmiştir veya sadece derlenmiştir.Üçüncü taraf API'lerinin Android sistem kaynaklarına erişimini denetleme?

Bu API'ların erişimini ağ, kişiler, video ve ses, konum gibi önemli sistem kaynaklarına denetlemenin bir yolu var mı?

En iyi yaklaşım, sistem kaynakları için bunlara bir proxy sağlamaktır. Bu, aşağıdaki yararları olurdu:

  • Testler Vekaletnamelerde uydurma veriler sağlayarak gerçekleştirilebilir
  • Başvurunuz gerekli değilse API gerektiren tüm izinleri sağlamak olmazdı ve proxy izin verecek API reklam veya kötü niyetli kullanılan
  • Filtre olası veri kullanıcı hakkında yerel toplanmış ve bir API ev repo gönderilen verilen izin, benzemeye çalışarak nedeniyle izin kırmak değil

nasıl böyle bir bulamamışlardır soluti Kullanıcının tanımladığı faaliyetler ve hizmetler üçüncü taraf API'larının hizmetlerini kontrol edemediği veya hatta herhangi bir Android genel arayüzüne doğrudan çağrı yapmalarını engelleyemediği için uygulanabilir. Bu denetimin kendi uygulamanızın sınırları dışında olmasını istemediğiniz için, çözüm kök erişimi gerektirmemelidir. (network requestslog data of content providers, - bunun için bir cevap araştırma sırasında bana bu sorunun düşünmek lazım)

Bu sorunun içeriği bu geniş soruya Bölümünün özelliklerini ele birkaç soru ile bağlantılıdır

Not: kısa cevap hayır, ama bir tane yaratıcı olabilir (belki yerel düzeydeki hackler bu sorunu çözebilir - idk)

+1

Bu kodu, izinleri olmayan ayrı bir korumalı alanda çalıştırabilirsiniz. Ancak, genellikle bu kod belirli izinlere sahip olmasını beklediğinden, bu kod muhtemelen çökecektir. Kütüphane bağımlılık enjeksiyonunu destekliyorsa, belki de test edilmek için alay ile ilgili bir gözle, korumalı API'lere yönetilen erişim için, sanal alandan IPC'yi kullanan bir "alay" ın enjekte edilmesi için bir araç hazırlayabilirsiniz. Ancak, birkaç kütüphane bunu destekleyecektir. – CommonsWare

+0

@CommonsWare, bunun için test etmenin iyi bir yoludur, ancak bazı kötü amaçlı yazılımlar, eğer kötü niyetli bir niyetiniz varsa, test altındayken bunu tespit edebilir. Ancak, yeni bir çerçeve oluşturmayı ve API'yi kullanmaya devam etmeyi düşünüyorsanız, soru hala geçerli –

cevap

1

İstediğiniz android kaynağınız için com.myproxies adlı bir pakette korumak istediğiniz proxy sınıfını oluşturun (örn. MediaRecorder, SensorManager, Kamera, java.net.HTTPURLConnection). Proxy'de uygulamanız gerekir. alay ettiğin sınıfın tüm kamu yöntemlerini yayarsın ve erişime izin vermek için mantığı uygulaman gerekir (uygun yönteme ilet) veya inkar et. Bir yararlı adım, caller of the method'u kontrol etmek olacaktır. Eğer kaynak kodu içe planlıyorsanız

  • , refactor kodu (bu konuda yardımcı olabilir proguard) proxy'nizle paketi değiştirmek için.

  • Kitaplık kullanıyorsanız, Java kitaplıklarını yeniden paketlemeyi ve bunları kendi dağıtımınıza katmayı kolaylaştıran bir yardımcı program olan Jar Jar Links ürününü edinin ve paket adlarını paketinizin içerdiği paketin içindeki bir sınıfla değiştirin. bir vekil olarak. Maven'in veya Gradle paket bağımlılık enjeksiyon kullanıyorsanız

  • , ayrıca Maalesef

Jar Jar Linkler ithalat ve derleme zamanında (bu yapılabilir çok emin değilim) paket üstlenmeden yapmayı deneyebilirsiniz Kendimi deneyimlediğim için API'yi kırmak çok kolay ve çok sayıda el emeği var.

İlgili konular