■Android ID(2011/10/29)

 Android端末には、端末固有のIDがある。「Android ID」と呼ばれているもので、Android Marketとの通信プロトコルでも用いられているそうだ。Android IDのフォーマットは、16進数(4bit)×16桁=64bitのデータで、例えば "0123456789abcdef" みたいな感じである。今回は、謎ロイド端末のAndroid IDの取得方法を実験してみる。

 なお、お約束であるが、これはあくまで実験なので、結果は保証しない。このコラムを真似て自分の端末で実験し、結果不具合が出たとしても、当局は一切関知しないので、そのつもりで。実験は自己責任で計画的に・・・

 まず、Android端末をUSBデバッグモードに設定する。今回実験に使用した端末は、毎度お馴染みの「原道 N50」だ。PC側では、Android SDKの最新版を入れておく。結構時間がかかるので、覚悟しておこう。

 なお、これは余計なことかもしれないが、やっておくと便利な設定がある。予めWindowsの「システムのプロパティ」→「詳細設定」→「環境設定」→「システム環境変数」で、」「path」に以下を追加しておく。(なお、以下の例では、Android SDKをFドライブのProgram Filesにインストールした場合について示している。)

 F:\Program Files\Android\Android-sdk\tools\;F:\Program Files\Android\Android-sdk\platform-tools\

 上記pathを追加することで、Android SDKの中にある「abd.exe」と「sqlite3.exe」が、どこでも使用できるようになる。

さて、以上の準備が整ったならば、USBデバッグモードに設定したAndroid端末とPCとを接続し、例によって「android-sdk」の「tools」に格納されている「ddms.bat」を起動し、Android端末の状況をDalvik Debug Monitor Serverで確認する。

Android端末側を「USBデバッグモード」に設定する。

Windowsのpath設定 #1
「システムのプロパティ」→「詳細設定」を開き、「環境変数」をクリックする。

Windowsのpath設定 #2
「システム環境変数」から「path」の項目を選択し、「編集」をクリックする。

Windowsのpath設定 #3
「path」に、Android SDKをインストールした際の「platform-tools」と「tools」フォルダを、フルパス名で追加しておく。

ddbs.batの起動
準備が整ったら、Android端末とPCとをUSBケーブルで接続して、「ddbs.bat(Dalvik Debug Monitor Server)」を起動し、Android端末の状況を確認する。
高解像度JPEG

 さて、PCとAndroid端末がADB(Android Debug Bridge)で接続されたら、PCのデスクトップ上で新たなコマンドプロンプトを開く。先ほどのパス設定を行っておけば、特にフォルダへ移動することは無いのだが、そうでない場合には、Android SDKをインストールしたフォルダへ移動する。以下の例はFドライブにインストールした場合だ。

 F:\Program Files\Android\android-sdk\platform-tools

 「dir」を取ると、「platform-tools」フォルダの中には「adb.exe」というプログラムがある。これを、shellとして起動させる。

 F:\>adb shell ↓

 ここで、「↓」はリターンキー入力を示す。

 素性のよろしい国産製端末では、「$」となり一般ユーザ権限としてログインするのだが、多くの怪しい謎ロイドでは、いきなり「#」となりsuされた状態になっていることが多い。もう、adminもクソも無い世界なんだよな、きっと。。。便利っちゃ便利だけどさぁ。

 suする手間が省けたので、さっそく「ls」でリスト表示させ、中身が見えているかどうかを確認する。ここから先はLinuxのコマンドラインとなる。「Android ID」が格納されているディレクトリだが、Androidのバージョンや機種によって微妙に異なるようだ。当方が試した謎ロイド端末では、下記のフォルダに格納されていた。

 /data/data/com.android.providers.settings/databases/

 確認はしていないが、モノによっては以下のような例もあるようだ。感じとしては、バージョンが古い機種は下記のパスになっているような希ガス。

 /data/data/com.google.android.googleapps/databases/

コマンドプロンプトを起動
ddms.batを起動させたら、新たにコマンドプロンプトを起動させ、Android SDKをインストールしたフォルダに移動する。この例ではFドライブにインストールしている。SDKの中で「platform-tools」というフォルダがあるので、その中に入り、「adb.exe」があることを確認する。「adb shell」と入力し、プログラムを起動させる。

ADBでAndroid端末と接続する
adbを起動させると、謎ロイドでは多くの端末がいきなり「#」となり、スーパーユーザーモードになっちゃってる状態で始まる。お行儀の良い端末は「$」で一般ユーザになるので、suする必要あり。「ls」で端末の中身を確認する。

Android IDが格納されているデータベースがあるフォルダは、機種やOSのバージョンに寄って異なっているみたいだが、一応筆者環境のOS Ver 2.2.1では
/data/data/com.android.providers.settings/databases/
となっていた。「cd」でこのフォルダに入り、中身を確認する。

 Android IDが格納されているデータベースがあるフォルダに移動し「ls」を取ると、

 settings.db

 というデータベースが1個、入っているのが判る。これを「sqlite3」で開けてやる。コマンドライン上で

 # sqlite3 settings.db ↓

 と入力すると、「>sqlite」プロンプトに変わる。この状態で「settings.db」を取り扱えるようになっている。sqlite3のhelpは、「.help」、抜けるのは「.quit」だ。

 「settings.db」というデータベースの中に、どのようなテーブルがあるかを調べてみよう。sqlite3のコマンドプロンプトで「.tables」と入力すると、内部のテーブル一覧が表示される。今回の場合、settings.dbの中には、5個のテーブルが入っていた。いったいどのテーブルにAndroid IDが格納されているのかは、開けてみるまではワカラナイ。そこで、片っ端から「.dump」コマンドで中身を見てみると、「secure」というテーブルに目的のものが入っていることが確認できた。

 sqlite> .dump secure ↓

 目的となるAndroid IDは、Values 21に登録されており、確かに16進の64ビットデータになっている。書式はこんな感じ、、、

 'android_id','0123456789abcdef'

 へ〜、成るほどねぇ。ということでオシマイ!!!

 (・∀・)ニヤニヤ 

sqlite3のhelp一覧
使い方が分かんない場合には「.help」でコマンド一覧が表示される。

settings.db内部のテーブル構造
settings.db内部のテーブル構成を見るには、「.tables」コマンドを使用する。この例では、5個のテーブルから構成されていることが判る。

secureテーブルのダンプ結果
「.dump」コマンドを用いて「secure」テーブルの内部を見たところ。確かにAndroid IDが登録されているのが判る。

 さて、今回どうしてこのようなコラムを書いたかと言うと、ネット上で以下の記載を見たからだ。

 android market 使う方法 (使えなくなった場合) 1

 それまで、Android Marketは使えて当然、と思っていたのだが、どうやらこの記事によると、謎ロイドでは使える方が「不思議」とまで書いている。その他、Android IDでググってみると、多くの開発者やユーザが、Android IDについて取り上げているのを見いだすことができる。とある記事では、「Android IDは、googleのサーバとのアクティべーション時に生成され、googleのサーバと端末に登録される」というようなことが書かれており、どうやら正規に登録された端末IDで無いと、Android Marketに接続できない、ということになりそうだ。この辺については、もう少し調査が必要だな。。。

 なお、全く関係の無いことだが、「sqlite3」では、「update meta set intvalue」コマンドでテーブル中の任意の名称のレコードを書き換えることができるんだってさ。で、このワードで検索すると、ここが出てきたりしちゃう。なんか感じの良さそうなページなので、思わず読んで行くと、面白いことが書いてあったから、さっそく次回試してみようホトトギス!

 sqlite3> update meta set intvalue='xxxxxxxxxxxxxxxx' where name='android_id'";



<< Menu Page



Copyright (C) Studio Pooh & Catty
1996-2011