Aplikasi Habr resmi (un) - HabrApp 2.0: akses

Dalam satu malam yang tenang dan sudah agak membosankan, aku, membalik-balik aplikasi resmi Habr, sekali lagi menekuk jari, satu untuk setiap fitur kosong. Di sini, misalnya, tidak mungkin untuk berkomentar, mereka ditolak hak untuk memilih, dan secara umum, mengapa formula tidak terlihat di layar?



Diputuskan: Anda membutuhkan sesuatu yang nyaman, menyenangkan, milik Anda sendiri. Bagaimana dengan aplikasi Anda untuk Habr?
Mari kita beri beberapa tangkapan layar untuk memahami situasinya.

Entah bagaimana sepertinya ini - dari. aplikasi habr.com

Daftar "ketidaknyamanan"
  • Anda tidak dapat memberi peringkat pada publikasi yang peringkatnya selain dari 0
  • Tidak selalu mungkin untuk menulis komentar
  • Survei tidak berfungsi
  • Rumus tidak terlihat dalam topik gelap (hitam di atas hitam)
  • Tidak Semua Bookmark Tersedia

Ya, aplikasi belum diperbarui sejak Agustus lalu, tetapi masih buruk. Secara umum, Anda harus memperbaikinya.

Bagian Satu Mencari akses.


Permintaan cepat ke Google "habrahabr API" sudah dikeluarkan oleh repositori github usang, yang belum diperbarui sejak 21 November 2016 , dan ini, sebentar, adalah dua setengah tahun .

Mengabaikan fakta bahwa ini adalah PHP, gulir ke bawah dan baca:


Dapatkan ID Aplikasi



Dengan menggunakan formulir ini di Habrahabr, Anda perlu menjelaskan secara singkat esensi aplikasi baru dan tujuan dibutuhkannya API.


Ini bukan pertanyaan jika Anda perlu mendapatkan akses, maka Anda harus melakukannya. Kami menulis surat (disingkat):


Sepucuk surat

Ada keinginan untuk membuat aplikasi untuk Habr berdasarkan PWA. Ada beberapa alasan untuk ini.


Yang pertama dan paling bisa dimengerti: aplikasi Android tidak memenuhi persyaratan pribadi saya.


Kedua: tidak ada pemberitahuan asli yang cukup tentang semua jenis hal yang biasanya datang ke kantor pos (komentar, misalnya).


Ketiga: intisari pribadi (sebagai prospek) untuk orang / hub yang menarik minat saya, mengingat minat saya.


Jawabannya, tentu saja, tidak terlalu menyenangkan, tetapi setidaknya jujur:


Sayangnya, akses ke API kami saat ini tidak tersedia. Kami berencana untuk melanjutkan menyediakan akses setelah kami menyelesaikan finalisasi API, tetapi kami belum memiliki tanggal pasti, karena saat ini kami sedang sibuk menyelesaikan tugas-tugas prioritas lainnya.


"Oke, itu tidak masalah! Kami akan datang dengan sesuatu! " Aku berkata pada diriku sendiri, dan mulai mencari.


Bagian Dua Penggalian dalam.


Berdasarkan logika, jika aplikasi berfungsi, maka ia memiliki akses ke API, dan itu ditransfer ke dalam aplikasi. Mari kita analisa.


Karena kita berurusan dengan lalu lintas, Wireshark adalah pilihan kita. Bukan tanpa siksaan dengan menghubungkan ponsel ke Internet melalui komputer stasioner, buka aplikasi dan lihat permintaan:


Jelas bahwa tidak ada yang jelas

Ya, semuanya dienkripsi, tetapi saya tidak ingin mengacaukan kriptografi. Maka Anda perlu melihat ke dalam aplikasi itu sendiri.

Setelah mendekompilasi .apk , kami mulai mencari. Apa yang dibutuhkan API? Itu benar, titik akhir , tempat semua permintaan pergi. Ini mungkin http, coba temukan "https: //":

Dalam file AuthLinkManager.smali kita temukan


 .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" 

Ini adalah kode untuk mesin virtual Android ( Dalvik VM ), tidak begitu jelas bagi manusia, tetapi masih cukup informatif. Tiga konstanta ini, dilihat dari konten dan namanya, serta repositori GitHub, digunakan untuk meminta token akses menggunakan metode GET .


Kami melihat lebih jauh. File NetworkModule.smali berikutnya yang Anda temukan dalam pencarian Anda:


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

Dan di sini adalah tempat untuk pergi dengan permintaan!


Untuk operasi normal dari klien yang menulis sendiri, hanya ada satu hal yang tersisa untuk mencari tahu - client_id , yang kemungkinan besar merupakan pengidentifikasi unik untuk aplikasi tersebut.


Namun, pencarian teks ini di sumber tidak mengarah pada pencarian informasi yang relevan ...


Tapi tiba-tiba, dalam satu file, mata saya menangkap garis yang menarik:


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

Ini, seperti yang bisa Anda pahami, adalah entri log. Tapi catatan apa?


Bagian tiga. Ini lognya!


Kami menggunakan adb logcat untuk melihat log aplikasi.



Tanpa diduga, tetapi log bahkan lebih rinci dari yang diharapkan.


Di sini bukan hanya client_id kita client_id , tetapi juga token pengguna / aplikasi, serta login dan kata sandi plaintext!


Beberapa teori konspirasi
Kehadiran log masuk dan kata sandi itu sendiri tidak membahayakan apa pun, karena log ini hanya dapat dibaca dengan hak root atau koneksi adb . Tetapi karena fakta bahwa di antara orang-orang yang membaca Habr, ada pengembang di android yang dapat mengaktifkan debug, ini menjadi masalah.

Dalam hal ini, "biaya gratis" di bandara dapat mengakibatkan pencurian akun , meskipun siapa yang membutuhkannya?

Dari log ini Anda dapat membuat:

  • client_id dan apikey diperlukan untuk mengakses api ;
  • URL otorisasi pengguna (aneh, tetapi tidak ada dalam repositori tentang metode ini, mungkin itu tidak disediakan?)

Dan begitulah yang terjadi. Berdasarkan studi kecil ini, pekerjaan sudah berlangsung pada proyek kecil - penerapan sendiri aplikasi mobile. Jika Anda ingin membantu, silakan menulis dalam pesan, dan semua orang - untuk memilih (karena saya ingin mengerti jika ada yang membutuhkan ini).

Terima kasih atas perhatian anda!

Source: https://habr.com/ru/post/id447148/


All Articles