ADB Helperをハックしてみた(adb-socket.js篇)

目次

前回:ADB Helperをハックしてみた(adb-running-checker.js篇)に引き続き、
adb-helperをハックしていきたいと思います

  1. フォルダ内のファイル構成
  2. 予備知識
  3. adb-socket.js
  4. 今回のまとめ
  5. バックナンバー

フォルダ内のファイル構成

[解凍フォルダ内のjsファイル群]
windows mac linux
install.rdf
main.js
adb.js
adb-client.js
adb-running-checker.js
adb-socket.js
bootstrap.js
scanner.js
subprocess.js
subprocess_worker_unix.js
subprocess_worker_win.js

前回に引き続き、adb-running-checker.jsファイルをハックしていきたいと思います。

予備知識

サンドボックス (セキュリティ)
http://is.gd/P7iDNm

JavaScript コードモジュールの利用(jsm)

JavaScript コードモジュールは、Gecko 1.9 で導入されたコンセプトであり、
特権を持った異なるスコープ間でコードを共有するために用いられます。

また、モジュールは、グローバルな JavaScript のシングルトンオブジェクトを
生成するために用いることもできます(以前は JavaScript XPCOM オブジェクトを使う必要がありました)。

JavaScript コードモジュールは、登録されたパスに配置された純粋な JavaScript のコードです。
Components.utils.import() を使って、 XUL スクリプトや JavaScript XPCOM スクリプトのような
特定のJavaScript のスコープへモジュールを読み込むことができます。
https://developer.mozilla.org/ja/docs/Mozilla/JavaScript_code_modules/Using

adb-socket.js

ご覧の通り、各OSでの差異はありません。
adb-socket

モジュールは、今まで一番少ないかもしれませんね・・・・(^^;;;
スクリーンショット 2015-01-05 20.48.41

コメントには、このように記載されています。

Workaround until bug 920586 is fixed
in order to allow TCPSocket usage in chrome code
without exposing it to content

【訳文】
bug920586までの回避策は修正されています。
クロムコードにおいてTCPSocketが危険にさらされずに
使用許可する仕様から変わる所まで。

function createTCPSocket()


 ・scopeオブジェクトにChromeのSandboxを定義します。
 ・scopeのDOMErrorにChromeのServices.jsmをDOMErrorを割り当てます。
 ・Services.scriptloaderを使って、TCPSocket.jsをロードし、
  scopeオブジェクトに代入します。
 ・scopeオブジェクトを返します。

TCPSocketを上記createTCPSocketで定義します。

コメントには、このように記載されています。


Creates a socket connected to the adb instance.
This instantiation is sync, and returns before we know if opening the
connection succeeds. Callers must attach handlers to the s field.

【訳文】
adb instanceへCreateしたsocketを接続します。
上記処理で同期し、私達が知る限り必ず成功します。
呼び出し元は必ず、このハンドラはattach しなければらない。

AdbSocketクラスを定義します。
  1. initializeメソッド
     TCPSocketをオープンします。
     アドレスはローカルホスト,binaryType,ポート:5037
  2. _hexdumpメソッド
     コメントには、このように記載されています。
     
     Dump the first few bytes of the given array to the console.
     

     【訳文】
     配列の先頭数バイトをDumpする為にコンソールへ渡します。

     ・decoderを定義し、TextDecoder(“windows-1252”)でデコードします。
     ・Uint8Array型の配列arrayを定義します。
     ・配列arrayの長さを格納します
     ・配列arrayの長さ分の文字変換を行います。
     ・コンソールへ出力します。

  3. sendメソッド
     コメントには、このように記載されています。
     
     Create a new Uint8Array in case the array we got is of a different type
     (like Uint32Array), since the old API takes a Uint8Array.
     

     【訳文】
     得た配列が違う型をなっているといけないから、新しいUint8Arrayを作成しなければいけない
     (Uint32Arrayのように)古いAPIがUint8Arrayを取得するので。 

     ・古いソケットAPIの場合、Uint8Arrayで送信します
     ・同じ型の場合は、そのまま送信

  4. closeメソッド
     ・待機状態が”open”又は”connecting”は接続を切断します。

AdbSocketクラスをエクスポートします。

今回のまとめ

今回は、大分早く公開出来ました。

次回はbootstrap.jsファイルの中身をハックしていきたいと思います。
お時間のある方、宜しかったら見て下さい。m(__)m
グンマー@坊主五厘

追伸
何か間違いが有った場合は、ご指摘ください。

バックナンバー

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です