Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
モバイルアプリ開発者のための mitmproxy 入門
Search
Hiroshi Kurokawa
August 20, 2014
Technology
0
1.9k
モバイルアプリ開発者のための mitmproxy 入門
potatotips 第8回で発表した資料です (2014/08/20)
Hiroshi Kurokawa
August 20, 2014
Tweet
Share
More Decks by Hiroshi Kurokawa
See All by Hiroshi Kurokawa
ART of Q
hkurokawa
3
1.1k
Chasing TransactionTooLargeException in The Wild
hkurokawa
0
410
Code Review as a Collaborative Journey
hkurokawa
3
920
Room 2.1
hkurokawa
2
840
Introduction to Q#
hkurokawa
0
68
Surviving a discontinuous world
hkurokawa
1
2.7k
Making onActivityResult More Easy
hkurokawa
1
310
RxJava実践入門
hkurokawa
2
630
How to start a podcast
hkurokawa
1
390
Other Decks in Technology
See All in Technology
オーティファイ会社紹介資料 / Autify Company Deck
autifyhq
10
120k
20250125_Agent for Amazon Bedrock試してみた
riz3f7
2
110
さいきょうのアーキテクチャを生み出すセンスメイキング
jgeem
0
270
Platform EngineeringがあればSREはいらない!? 新時代のSREに求められる役割とは
mshibuya
2
4k
Redshiftを中心としたAWSでのデータ基盤
mashiike
0
100
srekaigi2025-hajimete-ippo-aws
masakichieng
0
240
バクラクの組織とアーキテクチャ(要約)2025/01版
shkomine
13
2.9k
DevSecOps入門:Security Development Lifecycleによる開発プロセスのセキュリティ強化
yuriemori
0
230
BLEAでAWSアカウントのセキュリティレベルを向上させよう
koheiyoshikawa
0
130
インシデントキーメトリクスによるインシデント対応の改善 / Improving Incident Response using Incident Key Metrics
nari_ex
0
4.1k
SREとしてスタッフエンジニアを目指す / SRE Kaigi 2025
tjun
15
6.3k
企業テックブログにおける執筆ネタの考え方・見つけ方・広げ方 / How to Think of, Find, and Expand Writing Topics for Corporate Tech Blogs
honyanya
0
800
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
229
18k
How to train your dragon (web standard)
notwaldorf
89
5.8k
How GitHub (no longer) Works
holman
312
140k
Optimising Largest Contentful Paint
csswizardry
33
3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
52k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
How to Think Like a Performance Engineer
csswizardry
22
1.3k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
Music & Morning Musume
bryan
46
6.3k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.4k
Transcript
モバイルアプリ 開発者のための mitmproxy 入門
mitmproxy とは mitm (Man-in-the-Middle) proxy とは、 マンインザミドル型のプロキシである 通常のプロキシができることはだいたいできる 通信の傍受 通信の改竄
リプレイ モバイル向けのサポー トが手厚い Android / iOS / browser ssh 通信もサポー ト Wi-fi 接続時のみ使用可能
セットアップはとても簡単 1. mitmproxy を自分のマシンにインストー ルして起動 2. Android/iPhone のネットワー ク設定を変更してプロキシ に、
ステップ 1. で起動した mitmproxy の情報を指定 3. 端末のブラウザで http://mitm.it にアクセス 4. 対応するアイコンをタップして証明書をインストー ル
mitmproxy で できること
通信の傍受 端末が行っている通信を全部見られる `l' キー でフィルタリング URL だけでなく、 ヘッダやボディも指定可能 `F' キー
でフォワー ディング・ モー ド
通信の改竄 `i' キー で intercept するパター ンを指定できる intercept した通信は、 リクエスト内容やレスポンス内容を
改竄可能 ボディだけでなく、 メソッドやヘッダも編集できる
リプレイ 一度行った通信を編集して、 もう一度通信することができ る 下の図は、mitmproxy のサイトに載っていた、 リプレイで ハイスコアを記録した例 ハイスコアが 2^31
- 1 = 2,147,483,647 になっている
スクリプト 通信内容の改竄などは、 手動でやらなくても、 スクリプト (Python) で自動化できる > mitmproxy -s "path_to_the_script
[arg1] [arg2]..."
便利なスクリプト (1) レスポンス内容の強制置換 # -*- coding: utf-8 -*- def response(context,
flow): path = flow.request.path if path.startswith('/1.0/getRecommendedArticles'): flow.response.replace("艦これ", "HOGEHOGE")
便利なスクリプト (2) 擬似的な不安定なネットワー ク ランダムにリクエストを kill して接続が切断された状態 を再現する # -*-
coding: utf-8 -*- import random def start(ctx, argv): if len(argv) != 3: raise ValueError('Usage: -s "pseudo_unstable_network.py hostname percentage(0-10)"') # You may want to use Python's argparse for more sophisticated argument parsing. ctx.arg1, ctx.arg2 = argv[1], argv[2] def request(context, flow): host = flow.request.host if host.endswith(context.arg1) and random.randint(0, 10) <= int(context.arg2): context.log("Kill the request for %s. Host: %s" % (flow.request.get_url(), host)) flow.kill(context._master) > mitmproxy -s "./pseudo_unstable_network.py api.example.com 8"
mitmproxy を使った開発 通信内容の確認 クライアントとサー バー、 どちらに問題があるか調べる アプリ開発者以外もカジュアルに挙動を確認できる テスト 特定の条件を満たさないと発生しないようなリクエスト のテストをしたい
予期しないレスポンスが返ってきたときにアプリがクラ ッシュしないか調べる 通信が返ってこない、 途中で通信が切れるなどの不安定 な状況でアプリが正常に動作するか確認する
みなさんも mitmproxy で 快適なアプリ開発を!