Fiddlerで5000兆を手に入れてみるテスト

# 前段

○○銀行のアプリで5000兆円手に入れる! とか壮大なことをやってみたかったのですが、コンプライアンス的にも、法的にもマズそうな気がしたので、Fiddlerと弊社のサービス `FANSHIP` のデモ用アプリを使って5000兆（円とは言っていない）を手に入れてみます。

# Fiddlerの紹介

ひとことで言えばプロキシです。通信を覗き見たり、リクエストを操作したり、レスポンスを改ざんしたりできるスグレモノで、アプリのテストには非常に有用なツールです。例えば、預金残高5000兆円のテストデータを作るためには、△△システムの○○を××して…次にこの○○から□□して…などの調整の手間を省くことができます。

.NETで動いているWindowsのソフトウェアです。MacOSでmonoを使ってインストールはできるのですが、 `TLS1.1、1.2に対応していない` ため、今どきのアプリの試験には利用しづらいのが難点です。

（インストール方法や、モバイル端末での利用方法は、参考情報にまとめたのでそちらを御覧ください）

# レスポンスを改ざんしてみる

以下のものを準備しました。

 - Fiddler
 - iPhone端末＋FANSHIPのデモ用のアプリ

<img width="200" alt="アプリのイメージ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531375/ad591e89-09d7-12ce-6df0-b443953e2cf6.png">

自分の持っているポイントを、クーポンに交換したりできるよ！ というデモ用のアプリです。

## まずは通信を見てみる

アプリでポイント残高を表示すると、Fiddlerにずらっと通信の一覧が並びます。この中からポイント残高を返却している通信を探し出して選択します。

![2019-12-06 (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531375/d5cfcf89-bcdc-482f-4b97-4794f6746197.png)

## レスポンスを保存する

イチからレスポンスヘッダを書くのは面倒なので、レスポンス全体を保存します。通信を選択した状態で、

`Save`　＞ `Response`　＞　`Entire Response` を選ぶと、ファイルに保存できます。

![2019-12-06 (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531375/657bd3d1-22f9-903f-4971-070e31a5c379.png)

## Auto Responder機能を設定する

先程の通信を選んだままの状態で、

右ウィンドウの `AutoResponder` タブ　＞　`Add Rule` ポタンを押すと `Rule Editor` に `EXACT: [URI文字列] ` が追加されます。

![2019-12-06 (26).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531375/23f2b7a6-6ec3-4875-fd21-eaf70703de08.png)

続いて、条件にマッチした場合の操作を選択します。今回はレスポンスのファイルを指定したいので `Find a file` を選択してから `Save` ボタンを押します。
![2019-12-06 (27).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531375/5284fd99-757d-e921-185e-dfa17dcde63b.png)

`Enable rules` にチェックを入れると、AutoResponder機能が有効になります。
なお、隣にある `Unmatched requests passthrogh` のチェックも忘れずに入れておきましょう。「条件にマッチしていない通信は、通常通りの通信を返却する」という設定です。
![2019-12-06_enable.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531375/3b02ed74-2305-0dcf-fd00-6280c0938a27.png)

## レスポンスを書き換える
5000兆ポイントをゲットするため、適当なエディタで、レスポンスのファイルの100ポイントを5000兆ポイントに変更します。 `"point":100` という部分があるので、ここを書き換えればポイントが書き換わりそうです。
![2019-12-06 (16).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531375/d503f904-5ec0-abdb-2e01-35d58a6cf252.png)

が、レスポンスBodyを書き換えただけでは、端末上ではエラーになってしまいます。
<img width="200" alt="IMG_1606.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531375/a6aea6e5-4ad8-b8e8-86e0-ac2a6a4ef8df.png">

100を5000000000000000に変更したので、コンテンツが13文字増えていますね。ということで、`Content-Length` の修正も忘れずにやりましょう。

![2019-12-06 (22).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531375/212c6802-c12c-99ab-3844-b2d758effbd3.png)

## これで5000兆ゲット！
これで5000兆（※ポイント）ゲット！  ・・・ん？

<img width="200" alt="IMG_1607.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531375/d1cbfe8e-e39b-73f5-2ee8-bbf3c1894220.png">

表示が2行になってしまい、なんだかカッコ悪い感じになってしまいました。
実運用では5000兆ポイントを付与することはありえないので、問題ないということにしましょう。

# まとめ

このように簡単に通信を改ざんすることができるので、アプリのテストにおいてFiddlerは非常に有用なツールです。が、くれぐれも悪用はしないように・・・お願いします。

# 参考情報
HTTP通信のキャプチャをとるツールFiddlerをWindowsにインストールする
https://qiita.com/taketakekaho/items/397bc6e9afa32329edd0

fiddlerでiPhoneの通信を見るためにやったことメモ
https://qiita.com/dolls/items/6ad469c271f88a95a6f9