スマホアプリを使っていると、画面の裏側でどんなAPIが呼ばれているのか気になることがある。Androidでは、配布されるAPKに実行用のDEXコードや設定、リソースが含まれる。これはアプリを動かすために必要なものなので、公開後のAPKを調べれば、通信先やリクエストの形といった手掛かりを得られる場合がある。
ここで誤解しやすいのは、APKの解析が「署名を破る」ことではない点だ。APK署名は改変を検出し、正規の更新であることを確認する仕組みである。秘密鍵を解読しなくても、配布されたアプリに含まれるコードや設定は調べられる。もっとも、改変したAPKは正規アプリとして更新・配布できない。
AIは何を変えるのか
AIが暗号を魔法のように破るわけではない。変わるのは、コード中の文字列、通信先、データ形式、複数バージョンの差分から「どこを確認すべきか」を探すコストである。これまで専門知識と時間を要した調査の入口は、AIによって低くなっていく。
ただし、APIの存在や呼び出し方が分かっただけで、利用者のデータにアクセスできるわけではない。OAuthやJWTなどの認証方式がアプリ内から読み取れても、サーバーが署名、有効期限、利用者の権限、アクセス対象を正しく検証していれば、それだけで突破にはならない。
「隠すこと」は防御にならない
認証なしのAPIがすべて危険というわけでもない。公開コンテンツやアプリ初期設定など、誰でも取得してよい情報を返すAPIは普通にある。問題は、本来は利用者ごとの確認が必要な情報や操作まで、アプリの中にしかURLがないことを前提に守ろうとする設計である。
アプリからAPIが見えることを前提に、サーバー側で認証・認可・入力検証を完結させる。
守るべきなのはAPIのURLそのものではなく、誰が、どのデータを、どこまで扱えるのかというサーバー側の判定だ。AI時代には、アプリを難読化して「見つかりにくくする」努力だけでは足りない。アプリが解析されても成立する設計になっているかを、開発側は改めて問われることになる。
なお、アプリ解析や通信検証は、自分が管理するアプリ、または明確な許諾を得た対象で行うべきである。

