

以下の質問の内容が気になって質問します

> [webサーバーからスマホアプリの操作](https://ja.stackoverflow.com/q/23068/5505)
>
>
> ぷらぷら検索していましたら、モバイル向けのフリマアプリ（メルカリ）にweb上から出品できるサービスを見つけました（メルポンというやつです）。メルカリはスマホアプリのみから出品可能で、web上からは出品できません。このサービスはどういった仕組みでスマホアプリを操作しているのでしょうか。  
>  それ用のツールなどがあるのでしょうか。

この質問ではスマホからしかできないメルカリのサーバーとの通信を第三者が用意したサーバーでどのようにして利用しているのかが知りたいとのことですが、メルカリはサーバーとの通信にサーバーAPIを利用していると考えられます。

ですが第三者はそのAPIはどのようにして取得して利用しているのでしょうか？


CC BY-SA 3.0
2016-03-13T10:44:27.590
23090
2016-03-16T07:48:28.590
2017-04-13T12:52:39.113
-1
5505
question
ios android network
スマホアプリの非公開APIを調べるには？


APIの調査はスマホからの通信を自分で用意したプロキシサーバーを経由させることによって可能だと思われます。

プロキシサーバーは通信を代理でやってくれるサーバーのことで  
伝言ゲームの真ん中に入ってくれるひとのような役割を果たします  
**伝言ゲームでは真ん中に入ってくれたひとが言葉をこっそりメモに書いたりそのまま伝えたり改ざんしたりできますよね、それと同じです**  
プロキシサーバーでもそれとおなじようにスマホから受けたリクエストのログをとったりそのままだったり改ざんしたりして  
サーバーに伝えるということができます

**プロキシサーバーの主な役目**

  * **通信を記録してどのような通信をしているのか調べる（デバッグ目的）**

> [モバイルアプリ開発者のための mitmproxy
> 入門](http://qiita.com/hkurokawa/items/9034274cc1b9e1405c68)  
>  モバイルアプリを開発しているときに、アプリとサーバー間の通信を確認したいときがあります。たとえば、期待通りの HTTP  
>  リクエストが送られているか調べたり、サーバーからのレスポンスが間違っていないか確認したりする必要が生じます。  
>
> そんなときに、いちいちデバッガで止めても良いのですが、プロキシをはさめば簡単に通信を覗くことができます。しかも、レスポンスを改竄して、わざと不正なレスポンスにしてアプリがクラッシュしないかテストしたり、特定のリクエストだけブロックしてサーバー障害を擬似的に再現することができます。

  * **通信の内容を調査・改ざんする（セキュリティの脆弱性をしらべる。チート目的）**

>
> [iOS実機のSSL通信をプロキシによって傍受したり改ざんする方法](http://qiita.com/yimajo/items/c67cb711851f747c35e5)  
>
> スマートフォンアプリ開発でAPIを介しWeb/APIサーバーとやりとりをする場合、「httpsを使っていれば通信はユーザーにバレない」なんてことはなく、Webアプリでツールを使ってできるのと同じようにユーザーには通信内容の確認や改竄などができます。  
>
> そのため、そのことを前提にアプリやサーバーAPIの設計と実装を行わない場合、アプリ利用者によるゲームスコア結果送信の改竄や、ソーシャルゲームにおけるレイドボスなどへのダメージ操作、ECサイトアプリでの購入操作なども可能になってしまいます。
>
>
> [![プロキシサーバーによるデータ改ざんの仕組み](https://i.stack.imgur.com/0AVlC.jpg)](https://i.stack.imgur.com/0AVlC.jpg)

  * **サーバーとの通信の代理を行いクライアントを匿名化(匿名通信目的)**

> [匿名通信「Tor」は何を可能にしているのか](http://canon-
> its.jp/eset/malware_info/special/150804/)  
>
> 一般的にクライアント（ユーザー）はWebサーバーなどに対してリクエストを行う際、間に第三者を入れる必要はなく、直接、送信元の情報を相手に渡してやりとりをする。プロキシはクライアントとサーバーの間に入り、クライアントの代理としてサーバーにリクエストを行う。つまり、サーバー側に残るアクセス情報はプロキシからのものだけで、本来アクセスしているクライアントの情報をサーバー側は受け取ることがない。

  * **クライアントからの特定URLへのアクセスを防止(フィルタリング目的)**

>
> [プロキシを使用したコンテンツのフィルタリング](https://docs.oracle.com/cd/E19636-01/819-3160/agfltr.html)  
>  URL のフィルタリング
>
> URL のファイルを使用して、プロキシサーバーが取得するコンテンツを設定することができます。プロキシが常にサポートする URL  
>  のリストと、プロキシがサポートしない URL のリストを設定できます。
>
> たとえば、子どもに適したコンテンツを持つ、プロキシサーバーを実行するインターネットサービスプロバイダであれば、子どもが閲覧することが認可された  
>  URL のリストを設定します。そうすると、認可された URL  
>  のみを取得するようにプロキシサーバーを設定することができます。クライアントがサポートされていない URL  
>  にアクセスしようとすると、プロキシからデフォルトの「Forbidden」メッセージを返すようにするか、クライアントがその URL  
>  にアクセスできなかった理由を示すカスタムメッセージを作成することができます。

  * **レスポンスの高速化（キャッシュ目的）**

> [プロキシ
> Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7)  
>  高速なアクセス  
>
> 同一プロバイダの管轄内のような独立のネットワークの内部から、外部のウェブサーバにアクセスしデータを受け取る場合、一度目のアクセスでウェブサーバの返してきたデータをネットワークの出入り口に設置したプロキシに一時的に保存しておき（このプロキシ内のデータはキャッシュと呼ばれる）、次回からのアクセスはウェブサーバではなく、このプロキシサーバからキャッシュされたデータを受け取るようにすれば、データの取得を高速化できる。

今回は以下の記事のように **通信の内容を調査・改ざんする（セキュリティの脆弱性をしらべる。チート目的）** における **通信内容の調査**
が当てはまると考えられ、SSL通信などをプロキシを利用して調査したのだと考えられます

[iOS実機のSSL通信をプロキシによって傍受したり改ざんする方法](http://qiita.com/yimajo/items/c67cb711851f747c35e5)

プロキシについては [プロキシ
Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7)
に詳しく記載されております。


CC BY-SA 3.0
2016-03-13T10:44:27.590
23091
2016-03-16T07:48:28.590
2016-03-16T07:48:28.590
5505
5505
23090
answer