Tag Archives: Android

Burp Suiteを使ってスマホアプリの通信を調査する

目的
スマホアプリの作成やマルウエアが流行しているので手軽に通信を解析できる手段を確保しておきたいと思いました。
今回、Burp Suiteと呼ばれるHTTPやHTTPSを解析するソフトウェアの使い方を紹介したいと思います。

※ SSL/TLSの仕組みなどについてはある程度、知識があることが前提で解説を進めます。

準備
Burp Suiteのダウンロードページからburpsuite_free_v1.6.jarをダウンロードして実行します。
※ このソフトウエアの実行にはJavaのランタイムが必要です。

Burp Suiteの起動
ダウンロードしたjarファイルをダブルクリックしてBurp Suiteを起動します。

Burp Suiteの設定
標準設定ではローカルホスト内でしかアクセスできないため、他の端末からアクセスできるように設定します。

Burp Suiteを起動したら、以下の様なウインドウが表示されます。
WS000002

[Proxy]タブをクリックし、[Options]タブをクリックします。
8080番のポートを使う設定がデフォルトで入っているのでそれを選択し、[Edit]をクリックします。
WS000003

[All interfaces]にチェックを入れて[OK]をクリックします。
WS000004

これで他の端末からこの、PCで起動しているBurp Suiteへアクセスできるようになったはずです。

Burp Suiteの証明書作成
クライアント側のブラウザなどに導入するルート証明書を作成します。

[Proxy]タブをクリックして、[Options]タブをクリックします。

[CA certificate …]をクリックすると以下のようなウインドウが表示されます。
[Export]の中にある[Certificate in DER format]を選択して[Next]を押します。
WS000005

途中、保存先の選択などがありますがファイル名(拡張子:crt)などを指定するだけで特に困ることもないはずです。

証明書を作成すると以下の様なファイルが生成されます。
WS000007

Android端末への証明書導入
先ほど作成した証明書をSDカードなどにコピーしてAndroid端末に導入します。

[設定]から[セキュリティ]をクリックし、[SDカードからインストール]をクリックします。
2014_07_12_14.29.27

証明書を置いた場所まで移動し、証明書を選択します。
2014_07_12_14.44.22

証明書の名前を指定して[OK]をクリックします。
2014_07_12_14.45.30

Android端末のProxy設定
無線LANのアクセスポイント名からProxy設定(Burp Suiteを起動しているパソコンのIPアドレスとポート番号)を行います。
※ Android端末でのProxy設定については情報がありふれているので省略します。

Android端末で行われている通信の確認
Android端末上で動いているアプリが行った通信の内容が確認します。

[Proxy]タブをクリックして、[HTTP history]タブをクリックします。
HTTPだけでなくHTTPSの通信も複合されているためリクエスト・レスポンス双方の通信内容を確認する事ができます。
WS000009

今回、Android端末を用いて書いていますが、基本は対象がiPhoneでもパソコンでも行う事はさほど変わりません。

以下は、状況に応じて設定してください。

Burp Suiteで通信を毎回止めたくない時の設定
Burp Suiteを介して通信を行うとリクエストごとに毎回[Forward]ボタンを押さなければなりません。
リクエスト内容を書き換えたいときは便利なのですが、単純に通信を見たいときは邪魔なので以下の設定を行います。

[Proxy]タブをクリックして、[Options]タブをクリックします。

[Intercept Client Requests]で[Is in target scope]を選択して有効化します。
WS000008

Burp Suiteの日本語表示
Burp Suiteで解析した通信に日本語が混在していた場合、日本語が化けて見えなくなるため、見えるように設定します。

[Options]タブをクリックして、[Display]タブをクリックします。
[HTTP Message Display]のフォント設定を日本語用のフォントに変更します。
WS000006

※ 証明書の導入などもあるため大丈夫だとは思いますが、くれぐれも悪用などしないようお願い致します。

参考サイト
Burp Proxy で iPhone の通信をパケットキャプチャ
[改訂版] iPhoneアプリのSSL接続をパケットキャプチャする方法 | [ bROOM.LOG ! ]

XMLを解析して和訳するRubyスクリプト REXML、Microsoftの翻訳APIを使用

Androidのアプリを日本語化したくなったのでXMLを和訳していたんですが、面倒になったのでスクリプトをサクっと書いて見ました。RubyでXMLを構文解析して読み取り、Microsoftの翻訳APIを利用し自動で機械翻訳して再びXMLで出力しちゃいます。XMLを翻訳して出力プログラムはあまり見かけないのでそれなりに需要があるかなと思い公開してみました。

結構最近は機械翻訳も精度が上がっているようですねw 驚かされました。数百数千行を一個一個手動で訳すよりはある程度自動化したほうが楽ですよね~

※ 機械翻訳は万能ではないのでそれなりに変な訳が出力されます。← 言い切ります
※ リビルドする時にエラーが発生するかもしれませんがその時は手動で直してください。
(多分エディタの自動置換機能とか使えば全然大したことはないと思います)
※ APPIDは下記の参考にさせて頂いたサイト(simultechnology.blog様)を参考にしてください。

#!/usr/bin/ruby -KU
require 'net/http'
require 'rexml/document'
require 'json'

#----------(Settings)----------#
in_file = "strings.xml"
ex_file = "strings_.xml"
$debug = true
$sleep = 3
$appid = "*************************"
#------------------------------#

$rank = 0

def sp
  "  " * $rank
end
def run elem
  if $debug
    print "================================\n"
    print sp + "name : #{elem.name}\n"
    attrs = elem.attributes
    attrs.each{|a,e|
      print sp + "attr : #{a} = #{e}\n"
    }
    print sp + "text : \n--\n#{elem.text}\n--\n"
  end

  if elem.text =~ /\w/ then
    text = URI.escape(elem.text)
    h = Net::HTTP.new("api.microsofttranslator.com")
    response = h.get("/V2/Http.svc/Translate?appid=#{$appid}&from=en&to=ja&text=#{text}")

    if response.message == 'OK'
      doc = REXML::Document.new(response.body)
      elem.text = doc.root.text
    end
  end

  print "#{elem.text}\n"
  sleep $sleep

  if elem.has_elements? then
    elem.each_element{|e|
      $rank += 1
      run e
      $rank -= 1
    }
  end
end

doc = REXML::Document.new(File.new(in_file))
run doc.root
doc.write(File.new(ex_file, "w"))

プログラムを書く上で参考にさせて頂いたサイト
REXML であそぶ http://www.namikilab.tuat.ac.jp/~sasada/prog/rexml.html
simultechnology.blog http://simultechnology.blendmix.jp/blog/archives/1101