Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
モバイルアプリ開発者のための mitmproxy 入門
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hiroshi Kurokawa
August 20, 2014
Technology
2.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
モバイルアプリ開発者のための mitmproxy 入門
potatotips 第8回で発表した資料です (2014/08/20)
Hiroshi Kurokawa
August 20, 2014
More Decks by Hiroshi Kurokawa
See All by Hiroshi Kurokawa
ART of Q
hkurokawa
3
1.3k
Chasing TransactionTooLargeException in The Wild
hkurokawa
0
550
Code Review as a Collaborative Journey
hkurokawa
3
1.1k
Room 2.1
hkurokawa
2
980
Introduction to Q#
hkurokawa
0
150
Surviving a discontinuous world
hkurokawa
1
3.1k
Making onActivityResult More Easy
hkurokawa
1
440
RxJava実践入門
hkurokawa
2
700
How to start a podcast
hkurokawa
1
460
Other Decks in Technology
See All in Technology
Local CI × GitHub Actions
gogutan
2
190
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
330
AIカンパニーへの転換を支えた、エンジニアの仕事の再定義
kworkdev
PRO
2
1.2k
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
170
20261017福岡devIO 「AIは"良いダッシュボード"を作れるか?
jtakeda
0
140
「事実」を「計測」して、「解釈」する 〜AWS Lambdaのメモリ最適解の見つけ方〜
maimyyym
0
170
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
110
LambdaWebFunctionsを試してみた / exploring-lambda-web-functions
koukihosaka
1
340
Kiro Crewをはじめよう
kizawa2020
1
160
コンテナ運用におけるネットワーク・コンテナコストの削減方法/How to Reduce Network and Container Costs in Container Operations
masakiokuda
1
150
Optunaの最新リリースv5.0について
pfn
PRO
0
120
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
920
Featured
See All Featured
Building Adaptive Systems
keathley
44
3.2k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Chasing Engaging Ingredients in Design
codingconduct
0
360
Documentation Writing (for coders)
carmenintech
77
5.6k
A Tale of Four Properties
chriscoyier
163
24k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Darren the Foodie - Storyboard
khoart
PRO
4
4k
How to Ace a Technical Interview
jacobian
280
24k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
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 で 快適なアプリ開発を!