(Resmi olmayan) Habr uygulaması - HabrApp 2.0: erişim kazanıyor

Sakin ve zaten oldukça sıkıcı bir akşam, sayfaları karıştırıyorum resmi Habr uygulamasında çalışmayan her özellik için bir kez daha parmaklarımı büktüm. Burada mesela yorum yapamıyorsunuz, burada oy hakkınız elinden alınıyor ve genel olarak formüller neden ekranda görünmüyor?

(Resmi olmayan) Habr uygulaması - HabrApp 2.0: erişim kazanıyor
Karar verildi: Rahat, hoş, kendimize ait bir şeye ihtiyacımız vardı. Habr'a yaptığınız başvuruya ne dersiniz?
Durumu anlamanız için size birkaç ekran görüntüsü vereyim.

(Resmi olmayan) Habr uygulaması - HabrApp 2.0: erişim kazanıyorBir şekilde buna benziyor bu - ile ilgili. habr.com uygulaması

"Sıkıntıların" listesi

  • Derecelendirmesi 0'dan farklı olan bir yayını derecelendiremezsiniz
  • Yorum yazmak her zaman mümkün olmuyor
  • Anketler çalışmıyor
  • Formüller koyu temada görünmez (siyah üzerine siyah)
  • Tüm yer işaretleri mevcut değil

Evet, uygulama geçen yılın ağustos ayından bu yana güncellenmedi ancak hâlâ kötü. Genel olarak düzeltilmesi gerekiyor.

Bölüm Bir. Erişim arıyorum.

Hızlı Google Sorgusu "Habrahabr API'si" zaten oldukça eski olduğunu söylüyor havuz Github'da, o zamandan beri güncellenmiyor Kasım 21 2016ve bu, bir an için, iki buçuk yıl.

Bunun PHP olduğu gerçeğini göz ardı ederek aşağı kaydırın ve okuyun:

Uygulama Kimliğini Alma

Dan yararlanmak bu form Habrahabr'da yeni uygulamanın özünü ve API'ye ne için ihtiyaç duyduğunu kısaca açıklamanız gerekiyor.

Hiç şüphe yok ki, eğer erişim kazanmanız gerekiyorsa, o zaman buna ihtiyacınız var. Bir mektup yazıyoruz (kısaltılmış):

Письмо

PWA'ya dayalı olarak Habr'a başvuru yapma isteği var. Bunun birkaç nedeni var. 

Bunlardan ilki ve en barizi: Android uygulaması kişisel gereksinimlerimi karşılamıyor.

İkincisi: Genellikle e-postayla gelen her türlü şeyle ilgili (örneğin yorumlar) yeterli sayıda yerel bildirim yoktur.

Üçüncüsü: ilgilerimi dikkate alarak ilgimi çeken insanlar/merkezlerle ilgili kişisel özetler (bir bakış açısı olarak).

Cevap elbette pek hoş değildi ama en azından dürüsttü:

Maalesef API'mize erişim şu anda mevcut değil. API'yi sonlandırmayı tamamladıktan sonra erişim sağlamaya devam etmeyi planlıyoruz ancak henüz kesin bir tarih veremiyoruz çünkü Şu anda diğer öncelikli görevleri çözmekle meşgulüz.

"Tamam sorun yok! Bir şeyler bulacağız!" - Kendi kendime dedim ve aramaya başladım.

Bölüm iki. Derin kazılar.

Mantığa göre, eğer uygulama çalışıyorsa, API'ye erişimi vardır ve uygulamaya bağlanmıştır. Hadi analiz edelim.

Trafikle uğraştığımız için tercihimiz Wireshark. Telefonu bir masaüstü bilgisayar aracılığıyla internete bağladıktan sonra uygulamayı açıp isteklere bakıyoruz:

(Resmi olmayan) Habr uygulaması - HabrApp 2.0: erişim kazanıyor
Hiçbir şeyin net olmadığını temizle

Evet her şey şifreli ama kriptografiyle uğraşmak istemiyorum. O zaman uygulamanın içine bakmanız gerekir.

Derlenmiş . APK, aramaya başlayalım. Herhangi bir API'nin neye ihtiyacı vardır? Sağ, Son nokta, tüm isteklerin gittiği yer. Bu muhtemelen http(s), hadi “https://” bulmaya çalışalım:

Dosyada AuthLinkManager.smali bulmak

.field OAUTH:Ljava/lang/String; = "https://habrahabr.ru/auth/o/%s/"
.field OAUTH_PARAMS:Ljava/lang/String; = "?client_id=%s&response_type=token&redirect_uri=%s"
.field OAUTH_REDIRECT_URL:Ljava/lang/String; = "http://cleverpumpkin.ru"

Bu, Android sanal makinesinin kodudur (Dalvik VM), insanlar için pek anlaşılır değil ama yine de oldukça bilgilendirici. İçeriklerine ve adlarına ve GitHub deposuna göre değerlendirilen bu üç sabit, yöntemi kullanarak bir erişim belirteci istemek için kullanılır. GET.

Daha ileriye bakalım. Aramada bir sonraki ortaya çıkan dosya: NetworkModule.smali:

const-string v0, "https://habr.com/api/v1/"

Ve işte isteklerinizi ileteceğiniz yer burası!

Kendi kendine yazılan istemcinin düzgün çalışması için çözülmesi gereken tek bir şey kaldı: client_idbüyük olasılıkla uygulama için benzersiz bir tanımlayıcıdır.

Ancak bu metni kaynak kodunda aramak, ilgili bilginin bulunmasına yol açmadı...

Ama birdenbire dosyalardan birinde gözlerim bazı ilginç satırlara takıldı:

const-string p8, "log-tag"
invoke-static {p8, p2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

Bu, anlayabileceğiniz gibi bir günlük girişidir. Ama neyi kaydetmek?

Üçüncü bölüm. Bunlar günlükler!

Kullanırız adb logcat Uygulama günlüklerini görüntülemek için.

(Resmi olmayan) Habr uygulaması - HabrApp 2.0: erişim kazanıyor

Beklenmedik bir şekilde, günlüklerin beklenenden daha ayrıntılı olduğu ortaya çıktı.

Burada sadece ihtiyacımız olan şey yok client_idama jeton kullanıcı/uygulama ve giriş и şifre düz metin olarak!

Bazı komplo teorileriGünlüklerde yalnızca kullanıcı adı ve parolanın bulunması hiçbir şeye zarar vermez, çünkü bu günlükler yalnızca kök haklarıyla veya üzerinden yapılan bir bağlantıyla okunabilir. adb. Ancak Habr'ı okuyan insanlar arasında hata ayıklamayı etkinleştirmiş olabilecek Android geliştiricileri olduğu için bu bir sorun haline geliyor.

Bu durumda havalimanında “ücretsiz şarj” hesap hırsızlığına yol açabilir ama buna kimin ihtiyacı var?
Bu günlüklerden şunları çıkarabiliriz:

  • client_id и apikeyerişim için gerekli api;
  • Kullanıcı yetkilendirme URL'si (garip, ancak depoda bu yöntemle ilgili hiçbir şey yok, belki de sağlanmamıştır?)

İşte böyle oldu. Bu küçük araştırmaya dayanarak, küçük bir proje üzerinde - kendi mobil uygulama uygulamamız - üzerinde çalışmalar zaten devam ediyor. Yardım etmek isteyenlerden mesaj yazmalarını ve diğer herkesten oy vermelerini rica ediyorum (çünkü birinin buna ihtiyacı olup olmadığını anlamak istiyorum).

Teşekkürler!

Ankete sadece kayıtlı kullanıcılar katılabilir. Giriş yapLütfen.

Habr mobil uygulamasını kullanıyor musunuz?

  • Evet kullanıyorum, memnunum

  • Evet kullanıyorum, uygulama rahatsızlık veriyor

  • Hayır, telefonumda web sürümünü kullanıyorum

  • Hayır, Habr'ı bilgisayarımdan kullanıyorum

357 kullanıcı oy kullandı. 30 kişi çekimser kaldı.

Kaynak: habr.com

Yorum ekle