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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Hiroshi Kurokawa
August 20, 2014
Technology
0
2.1k
モバイルアプリ開発者のための 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.2k
Chasing TransactionTooLargeException in The Wild
hkurokawa
0
480
Code Review as a Collaborative Journey
hkurokawa
3
1k
Room 2.1
hkurokawa
2
930
Introduction to Q#
hkurokawa
0
110
Surviving a discontinuous world
hkurokawa
1
3k
Making onActivityResult More Easy
hkurokawa
1
370
RxJava実践入門
hkurokawa
2
670
How to start a podcast
hkurokawa
1
420
Other Decks in Technology
See All in Technology
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
780
ブロックテーマ、WordPress でウェブサイトをつくるということ / 2026.02.07 Gifu WordPress Meetup
torounit
0
200
生成AIと余白 〜開発スピードが向上した今、何に向き合う?〜
kakehashi
PRO
0
160
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
10k
StrandsとNeptuneを使ってナレッジグラフを構築する
yakumo
1
130
日本の85%が使う公共SaaSは、どう育ったのか
taketakekaho
1
240
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
610
Agent Skils
dip_tech
PRO
0
130
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
340
登壇駆動学習のすすめ — CfPのネタの見つけ方と書くときに意識していること
bicstone
3
130
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
480
1,000 にも届く AWS Organizations 組織のポリシー運用をちゃんとしたい、という話
kazzpapa3
0
180
Featured
See All Featured
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
110
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
120
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.2k
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
Optimizing for Happiness
mojombo
379
71k
ラッコキーワード サービス紹介資料
rakko
1
2.3M
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
650
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
950
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
58
50k
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 で 快適なアプリ開発を!