古いバージョンのAndroidでスクリーンショットをキャプチャするためにルート化された電話が必要なのはなぜですか?


21

携帯電話のスクリーンショットをキャプチャするには、すべてのスクリーンショットアプリケーションでルート化された携帯電話が必要です。これはなぜですか?Windowsのように、Android向けのシンプルなスクリーンショットアプリケーションを作成できないのはなぜですか?


2
iPhoneがこの機能をすぐに実装する一方で、Androidで有効にすることは大きな問題であることが常に興味深いと感じています。
シャンブル

1
およそAndroid 4.0以降、ボリュームダウン+電源ボタンを押してスクリーンショットを撮ることができます。これはすぐに使用できる機能であり、アプリは必要ありません(後世および検索エンジン用にここに記載)
Piskvor

回答:


17

答えはかなり単純で、権限の問題です。

Androidは、ビデオディスプレイにフレームバッファと呼ばれるものを使用します。フレームバッファーは/ dev / graphics / fb0にあります。この「ファイル」は、基本的にはユーザーインターフェイスの変更が発生したときにデバイスが書き込むストリームであり、画面表示の〜2フレームが含まれています。

フレームバッファファイルの権限はrw- rw- ---です。最後の「グループ」には3つの「-」があります。つまり、あなたがowner(rootでない)場合は、そのファイルから読み取ることすら許可されていません。

システムにインストールされたアプリケーションがあり、スクリーンショットを撮ることができた場合、フレームバッファから読み取る許可が与えられます。これが、Motorola Xoomがスクリーンショットを撮ることができる方法だと思います。システムアプリとして、デバイスにアプリケーションがインストールされています。

開発者にとって、フレームバッファーの読み取りは、読み取り権限があれば簡単です。


1
Googleは許可をに更新する必要があるように思えますr--。これは、アプリが画面をスパイできる場合にセキュリティ上のリスクを引き起こす可能性がありますが、インストールする前に承認する必要がある許可(このアプリは画面を監視できます)の1つではありませんか?それまたはGoogleは、メニューのフライアウトに組み込みのスクリーンキャプチャを追加する必要があります。そうすると、他の誰もアクセスできなくなります。後者は非常によくあることで、Chromeに印刷プレビューを追加しているところです。
JD Isaacks

3
o + rのmodは、市場のアプリだけが画面を読み取ることができる場合、セキュリティ上の問題になると思います。
kzh

状況によると思います。Windows OSは、アプリケーションがスクリーンショットを撮ることを妨げません。これまでのところ、スクリーンショットが原因のセキュリティ上の問題はありましたか?
Cheokヤンチェン

Windowsでスクリーンショットを撮る必要はありません。Windowsマシンからデータを取得するはるかに簡単な方法があります。モバイルは大きな懸念事項だと思います。クレジットカードを処理するSquareのようなアプリについて考えてみてください。私はカードをスワイプされたときのために耳を傾けサービスを書いた場合、私は等のクレジットカード番号、名前、のような画面のグラブとプル情報を可能に行うことができます
ライアン・コンラッド

7

Androidはすべてのアプリを互いのデータから分離することに重点を置いているため、悪意のあるアプリが信頼するアプリのデータを盗んだり変更したりするのを防ぐため、アプリが他のアプリのスクリーンショットを撮ることを許可しません。

OCRなどの機能を使用して写真をテキストに変換できるアプリの数を考えてみてください。これを行うことができるスマートフォン上のアプリは少なくとも4つ考えられます。外国語のテキストブロックの翻訳。信頼できないアプリに見せたくないテキストを画面に表示するアプリの数を考えてみましょう。さまざまなシステムのパスワードの暗号化されたデータベースを備えた携帯電話にパスワードデータベースアプリがあり、悪意のあるスクリーンセーバーアプリが待つ可能性がありますそのパスワードアプリが実行されるまで、ログイン詳細が記載された画面の写真を撮り、OCRして送信します。連絡先データベースやブラウザの履歴へのアクセス許可をアプリに付与しなくても、連絡先リストのすべてに対して同じことを行うことができます。またはチャットログなど。これは、画面へのアクセスを悪用する唯一の方法です。

これが、スクリーンショットを普遍的にするために、OS内にある必要がある理由です(すべてのデータで既に信頼しています)。これが、スクリーンショット機能が組み込まれている携帯電話に、別個のアプリとしてではなく、システムの一部として追加された理由です。

電話をルート化して、アプリがスクリーンショットを撮ることを許可すると、他のアプリやそのデータへのアクセスや干渉を含め、システムが実行できるすべてのことをアプリが暗黙的に信頼することを事実上言っています。そのアクセスを悪用しないことを完全に信頼します。これはAndroidがシステム/ OS以外にできることではありません。


6

簡単な答え:1)コンピューターは複雑であり、2)スクリーンショット機能は実際には非常に単純ではありません(ユーザーではなくプログラマーにとって)。

言い換えれば、スクリーンショットを撮るには、スクリーンショット作成プロセスがOS内部にかなり深く引っ掛かり、それらを少し混乱させ、再びフック解除する必要があります。Androidは(Windowsで見られる「ボルトオン後付け」とは対照的に)組み込みのセキュリティモデルを使用しようとするため、いくつかのセキュリティ障壁についてスクリーンショットを撮ります。これらバイパスできますが、現在実用的な唯一の方法(カーネルにホールを作成すること、および潜在的な脆弱性を作成すること以外)は、強力なルートアカウントを使用することです。これは制限の対象ではありません。


1
コンピューターのハードウェアの動作についてはあまり知りませんが、GPUが画面に「イメージ」を送信すると想定しています。その画像を傍受して保存できませんでしたか?
JDイザックス

2
@John Isaacks、それは基本的にフレームバッファで起こることです。それでもrootが必要な理由については、私の答えをご覧ください。
ライアンコンラッド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.