気まずく、すでに退屈な夜に、私はHabrの公式アプリをめくって、もう一度、アイドル機能ごとに1本指を曲げました。 ここでは、たとえば、コメントすることは不可能であり、投票する権利が拒否されています。一般に、数式が画面に表示されないのはなぜですか?
快適で快適な何かが必要です。 Habrのアプリケーションはどうですか?
状況を理解するために、いくつかのスクリーンショットを提供しましょう。
どういうわけか、 このように見える-の。 habr.comアプリケーション
- 評価が0以外のパブリケーションを評価することはできません
- コメントを書くことは常に可能ではありません
- 調査が機能しない
- 数式は暗いトピックでは表示されません(黒地に黒)
- すべてのブックマークが利用できるわけではありません
はい、アプリケーションは昨年8月から更新されていませんが、それでも問題はありません。 一般に、それを修正する必要があります。
パート1 アクセスを求めて。
Googleの「habrahabr API」へのクイックリクエストは 、2016年11月21日以降更新されていない古いgithub リポジトリによって既に発行されており、これは一瞬で2年半です。
これがPHPであるという事実を無視して、下にスクロールして読みます。
アプリケーションIDを取得
Habrahabrでこのフォームを使用して 、新しいアプリケーションの本質と、APIが必要な目的を簡単に説明する必要があります。
アクセスする必要があるかどうかは問題ではありませんが、必要です。 手紙を(略語で)書きます:
PWAに基づいてHabrのアプリケーションを作成したいという要望があります。 これにはいくつかの理由があります。
最初で最も理解しやすいのは、Androidアプリケーションが私の個人的な要件を満たしていないことです。
第二に、通常郵便局に来るあらゆる種類の物事についての十分なネイティブ通知がありません(例えば、コメント)。
第三:私の興味を考えれば、私に興味のある人/ハブの個人的なダイジェスト(見込み客として)。
答えは、もちろん、あまり楽しいものではありませんでしたが、少なくとも正直です。
残念ながら、APIへのアクセスは現在利用できません。 APIの最終化が完了した後、アクセスの提供を再開する予定ですが、まだ正確な日付はありません。 現在、他の優先タスクで忙しいです。
「わかりました、それは問題ではありません! 私たちは何かを思いつきます!」私は自分自身に言い、検索を始めました。
パート2 深い掘削。
ロジックに基づいて、アプリケーションが機能する場合、APIにアクセスし、アプリケーションに接続されます。 分析しましょう。
トラフィックを処理しているため、Wiresharkが選択されます。 携帯電話を固定コンピューターを介してインターネットに接続し、アプリケーションを開いてリクエストを確認することで、苦痛を感じることなく:
何も明確ではないことを明確にする
はい、すべてが暗号化されていますが、暗号化を台無しにしたくありません。 次に、アプリケーション自体の内部を調べる必要があります。
.apkを逆コンパイルすると、検索を開始します。 APIには何が必要ですか? そうです、 エンドポイント 、すべてのリクエストが送信される場所。 これはおそらくhttp(s)です。「https://」を見つけてください。
ファイルAuthLinkManager.smali
で見つけます
.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"
これはAndroid仮想マシン( Dalvik VM )のコードであり、人間にとってはあまり明確ではありませんが、それでも非常に有益です。 これらの3つの定数は、その内容と名前、およびGitHubリポジトリによって判断され、 GET
メソッドを使用してアクセストークンを要求するために使用されます。
さらに調べます。 検索で見つかった次のNetworkModule.smali
ファイル:
const-string v0, "https://habr.com/api/v1/"
そして、ここがリクエストに対応する場所です!
自己client_id
クライアントが適切に動作するためには、あと1つだけを見つける必要がありますclient_id
、おそらくアプリケーションの一意の識別子です。
しかし、ソースでこのテキストを検索しても、関連する情報は見つかりませんでした...
しかし、突然、あるファイルで、私の目は興味深い行に注目しました。
const-string p8, "log-tag" invoke-static {p8, p2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
理解できるように、これはログエントリです。 しかし、何の記録?
パート3。 ここにログがあります!
アプリケーションログを表示するには、 adb logcat
を使用します。
予想外ですが、ログは予想よりさらに詳細でした。
ここにclient_id
だけでなく、ユーザー/アプリケーショントークン 、およびクリアテキストのユーザー名とパスワードもあります!
adb
接続のいずれかでしか読み取れないため、ログインおよびパスワードログの存在自体は何も害を与えません。 しかし、Habrを読んでいる人の中には、デバッグを有効にすることができるアンドロイドの開発者がいるという事実のために、これは問題になります。
この場合、空港での「無料請求」はアカウントの盗難につながる可能性がありますが
これらのログから次を作成できます。
- apiにアクセスするには
client_id
とapikey
必要です。 - ユーザー認証URL(奇妙なことですが、このメソッドについてリポジトリに何もありません。おそらく提供されていないのでしょうか?)
そしてそれが起こった。 この小さな調査に基づいて、モバイルアプリケーションの独自の実装である小規模プロジェクトの作業が既に進行中です。 あなたが助けたいなら、メッセージを書いてください、そして、他のみんな-投票してください(誰かがこれを必要とするかどうか理解したいので)。
ご清聴ありがとうございました!