航空機のエンジンの再デザインや医療機器の再生など、モノの構造を分解して再び組み立てるだけで、さまざまなことが学べます。これが「リバースエンジニアリング」の概念で、何かしらから知識や設計図を抽出することです。この例からわかるように、APIをリバースエンジニアリングするのは、ビジネスの成功のために重要なのです。

このプロセスは、当初はハードウェアに用いられていましたが、リバースエンジニアリングは、現在ではソフトウェアやデータベースにも広く用いられており、基本的にソフトウェアの「プログラムボックス」を開けて、プログラムのさまざまな構成要素と、それらがどのように連動しているかを特定します。

ソフトウェアのリバースエンジニアリングの例では、サンノゼにあるフェニックス・テクノロジーが、IBMパソコンの独自BIOS(Basic Input/Output System)と互換性のあるパソコン用BIOSを製造したのが有名です。

フェニックス社は、ソースコードを参照することなくプログラムのコピーを作成するクリーンルーム方式を採用しました。リバースエンジニアリングにより、デベロッパーはIBMのBIOSを詳細に分析し、その機能を説明することができました。

そして、同社のプログラマーが、デベロッパーから提供された説明に従って新しいコードを作成しました。つまり、フェニックス社は独自のコードを持ちながら、IBMのコードと同じように動作する新しいBIOSを作ることに成功したのです。このようにして、著作権侵害を回避しつつ、IBM互換のパソコンを製造する企業にBIOSを販売し、利益を得ることができました。

APIをリバースエンジニアリングする理由

APIをリバースエンジニアリングする主な理由の1つに「相互運用性」があります。ソフトウェアが単独で存在できた数十年前とは異なり、現在では、プログラムは複雑なOS上で動作し、さまざまな人が作った複数のライブラリとの通信を伴います。相互運用のためにAPIをリバースエンジニアリングするのは、APIを統合し、プログラムが情報を交換し使用するための新しい方法を学習するということです。また、リバースエンジニアリングで、セキュリティの失敗や非効率的なプライバシー保護の実践を暴けるようになります。例えば、保健福祉省によると、医療業界では2021年に記録的な数のデータ漏洩が発生しましたが、リバースエンジニアリングは、ソースコードをなぞって重大なセキュリティ上の欠陥を特定することでこの問題を解決し、それによってシステムの安全性が確保されます。

APIのリバースエンジニアリングに使われるWebプロキシツール

デベロッパーは、パブリックまたは個人のリバースエンジニアAPIに、プロキシを実装するツールを使います。Webプロキシサーバーは、Webサイトの実サーバーとWebブラウザーの間でHTTPリクエストを捕捉することができる代替サーバーであり、この目的のために、任意の透過的なHTTP/Sプロキシをどれでも使うことができます。

  • Mitm(Man-in-the-Middle )proxy:HTTP/1、HTTP/2、および WebSocket 用のコンソール インターフェースを備えたオープンソース プロキシ。
  • Fiddler:Windows、Linux、macOS向けにUIが強化されたデバッグ用プロキシツール。
  • Burp:ブラウザとターゲットアプリケーション間のトラフィックを傍受するWebプロキシサーバ。REST APIのエンドポイントをテストすることができ、そのエンドポイントに典型的なクライアントを使ってトラフィックを生成している場合、そのエンドポイントをテストすることができる。
  • Postman:APIを作成・利用するためのAPIプラットフォーム。Postmanでカスタムプロキシ設定をすることで、HTTP/Sリクエストをプロキシサーバ経由で転送することができる。

MITMプロキシを使ったAPIのリバースエンジニアリングの手順

ステップ1:mitmproxy.orgから実行ファイルをインストールし、サーバを起動する。

ステップ2:8080番ポートを開けるか、ファイアウォールを無効にする。

ステップ3:携帯電話のWi-Fi設定に移動し、プロキシサーバに移動して、PCのIPアドレスを入力する。

ステップ4:Androidの携帯電話でhttp://mitm.it/へ行き、必要な証明書をインストールする。iOSの場合は、iPhoneの設定にアクセスし、最近ダウンロードした証明書のインストールの確認が必要。

ステップ5:ChromeブラウザでWebサイトにアクセスすると、mitmproxy上のトラフィックが表示される。

ステップ6:任意のプライベートAPIを調査し、APIのエンドポイントとそのJSONペイロードフォーマットを熟知する。

ステップ7:APIコールを複製して、異なるオプションを表示する。

mitmproxy でリクエストを再生する場合は、必須ヘッダーの特定が必要です。API をテストするために、Postman などのブラウザ拡張機能を利用することもできますが、その際、作成される不要なヘッダを避けることはできません。

Postmanを使ったAPIのリバースエンジニアリングの手順

Postman はクライアントのリクエストをより見やすくすることで、リクエストを複製しやすくします。また、Postman を使って単一のリクエストやリクエストのストリームを検査することができます。以下は、単一のリクエストをインポートする手順です。

ステップ1:ChromeDevToolsに移動し、右クリックで【Inspect】を選択してパネルを開く。

ステップ2:【ネットワーク】タブに移動し、ネットワーク要求を表示する。

ステップ3:Postmanにインポートしたいリクエストを選択する。

ステップ4: リクエストを右クリックし、【cURLとしてコピー】を選択する。

ステップ5:Postmanアプリに移動し、【Import】ボタンをクリックする。

ステップ6:【Paste Raw Text(Rawテキストの貼付)】に移動して、cURLを貼り付け、インポートを承認する。これでリクエストがPostmanに正常にインポートされ、さらに検査が行われる。

この手順は、ウェブサイト上のHTTPトラフィックを検査し、現状を理解するのに始めるためのものです。Webサイトでは、特定のWebサイトで有効とみなされる証明書を制限するSSL証明書をピン留め(ピンニング)することがありますが、ウェブサイトが証明書の固定化を採用している場合、このような手順が機能しない可能性があることに留意することが重要です。また、認証が必要な複雑なリクエストに出くわすこともあります。

まとめ

リバースエンジニアリングは、ソフトウェアデベロッパーがコードを改善し、異なるプログラム間の相互運用性を上げるための強力なツールです。時には、APIが正しく記述されていないこともあるため、サードパーティのデベロッパーは、一緒に仕事をしたいプログラムをリバースエンジニアリングするしかないのです。

Integrate.io は、複数のデータベースからの API 呼び出しを設定することができ、リバースエンジニアリング作業を後押ししてくれます。こちらから14日間のトライアルをぜひ始めてみて下さい。

関連記事How To Upgrade Legacy Applications in Your Organization