More Related Content
Similar to Css2013 api distance (20)
Css2013 api distance
- 12. コールグラフ - parsing dex file
• アプリの実行ファイル(Dexファイル)を解析
– 実行命令コード列(bytecode)
• 各メソッドのcode_itemセクション, Insns領域
– メソッド呼び出し命令 (10種類)
• invoke-kind (virtual, super, direct, static, interface)
• invoke-kind/range
• bytecode内のinvoke-kind(/range)の呼び出し
関係からコールグラフが生成できる
12
- 14. コールグラフ – drawing graph
解析したbytecodeから
コールグラフを生成
Dougalek(The Movie)のコールグラフ
※メソッド名は省略
14
- 15. 機能間距離 – 定義
• 任意の2つの機能を使用しているメソッドの
コールグラフ上の距離
– グラフのエッジの重みを1とする
距離:0
距離:1
距離:2
1
1
A
B
1
A
B
A
B
15
- 16. 機能間距離 – 定義
• 共通の呼び出し元(メソッド)がある場合のみ
を対象とする
– 共通の呼び出し元がない
= 同じコールスタック内で2つの機能が
呼ばれることがない
A
B
機能間距離の算出が出来ないケース
A
B
機能間距離の算出が可能なケース
16
- 17. 機能間距離 – 拡張
• 非同期処理の開始メソッドと実行メソッドをコールグ
ラフ上で結合する拡張を行う
– 外部への通信処理などは非同期的な実装がされ
ることが多いため
• 対象
– Thread.start() → Thread.run()
– AsyncTask.execute() → AsyncTask.doInBackground()
17
- 22. 検証方法
• 検証対象
– 個人情報 → アドレス帳の電話番号、アドレス
– 送信機能 → HTTP, Socketによる通信
• 検証方法
– 検証用サンプル(後述)のアドレス帳情報の送信
に関する機能間距離を算出
– 静的解析の実施
• 外部にアドレス帳の情報が送信されるかを確認
22
- 24. 機能間距離の算出 – 対象
• 情報送信機能
– HTTP通信
• org.apache.http.impl.client.DefaultHttpClient.execute()
など
– Socket通信
• java.net.URLConnection.getOutputStream など
• アドレス帳アクセス
– アドレス帳DBアクセス時に使用する定数の参照
• android.provider.Contacts.Phones.CONTENT_URI など
24
- 27. 静的解析
• 解析対象
– 機能間距離が算出できたサンプル (146個)
– 機能間距離が算出できなかったサンプルの一部 (40個)
• ツール
– JEB Interactive Android Decompiler を使用
• 解析内容
– アドレス帳情報の送信機能の有無を確認
27