このデバイスは、古典的な南京錠の機能とGPS / GSMトラッカーの機能を組み合わせているため、ロックの開閉、ロックへの物理的影響(加速度計を使用)、ロックの現在の位置などのパラメーターを制御できます。 GSMネットワークを介したイベント情報の送信。 通信に2つのオプション、GPRSチャネルと(または)SMSメッセージを使用することができます(この場合、SMS通信は本当に気になりませんので、GPRSに焦点を当てましょう)。 サポートされているフレンドリーなサービスのために、データは会社のサーバーまたはディーラーに設置されたプロキシサーバーに送信されます。 たとえば、Wialon、または会社のサーバー上にあります。 個人使用のためにデバイスを購入する個人ユーザーは、サードパーティ企業のサービスに料金を支払わずにデバイスを使用することはできません。サードパーティ企業のサービスは、非法人ユーザーにとっては不要または不要です(または、オプションとして、高い匿名性が必要です)。 私は、大規模な監視サーバーの機能が冗長であり、新しいデバイスで遊ぶ機会が動機付けられている人の1人です。 それでは始めましょう!
ツールキット
- Hex-RaysのIDA DEMO 6.6 (デバッガー、逆アセンブラー、プログラムの内部ロジックの分析に必要);
- Starcom configurator (初期デバイス設定およびプロトコル分析用);
- Starcom の公式ユーザーガイド (デバイスの操作方法を理解する必要があるため)。
コンフィギュレーター
configuratorプログラムは、開発者が開発者のために明示的に作成されたものであり(この場合は分析に大きなプラスとなります)、多くのデバッグ機能があります。 私たちにとって最も重要なのは、デバイスとプログラムの間のトラフィックを表示するウィンドウです(トラフィックは処理されずにそのまま表示されます)。
デバイスをプログラムに接続し、プログラムでローカルサーバーを起動し、ロック(またはシミュレーター)に強制的に接続するには、2つの方法があります。
1)GPRSチャネルを介して、この場合、パラメーター(IPアドレスとポート)の正しい設定をロック設定で最初に示す必要がありますが、これはこの場合は不可能です。
2)ロック付きのデータケーブルを介した通信。
サーバーの設定がそこにないと確信していたので、デバイスを物理的に接続しました。 データケーブルは、FTDIからのTTLレベルを備えた通常のUSB-SERIALアダプターです(デフォルトの交換レートは115200ボー(8ビット、パリティなし、1ストップビット)。コンフィギュレーターを介して設定で交換速度を57600に設定することもできます) 。 デバイスをコンピューターに接続するためのネイティブケーブルはおそらくないので、適切なUSB-TTLアダプターを使用できます。
情報のピン配列
デバイスが接続され、デバイスとプログラム間のトラフィック交換を観察できます。 パッケージのおおよその構造、変更されていないヘッダー、同じ長さのパッケージの絶えず変化する本体はすぐに明らかになり、トラフィック暗号化が使用されていることがすぐにわかります(プレゼンテーションと公式ユーザーガイドもこれを教えてくれます)。 ヘッダーは後で分析するために残しますが、開始バイト(0x24は文字「$」で、すべてのパケットはそれで始まります)とデバイスのシリアル番号(9A 02 00 00-666)が含まれていることがすでにわかります。 暗号化アルゴリズムとキーを見つける方法は? ここではすべてが論理的です。コンフィギュレータープログラムがパッケージの内容を受信して表示できる場合、それを解読するため、アルゴリズムとキーはコンフィギュレータープログラム自体で見つける必要があります。
プログラムはDelphiで記述されています。つまり、アセンブラーでは、 RTLやその他のガベージでさまざまな種類の呼び出しが行われ、プログラムの分析が複雑になります。 暗号化アルゴリズムを見つける方法 簡単な方法で、人気のあるアルゴリズムの既知の定数を使用して、プログラムコードでそれを探すことにしました。 この方法は常に機能するとは限りませんが、まだチャンスがあります。 列挙の結果、定数0x9E3779B9が見つかりました。これは、 TEAブロック暗号化アルゴリズムであることを意味します。 次に、このアルゴリズムのどの特定の実装オプションが使用されているかを(すでにアルゴリズムコードを分析して)理解する必要がありました。 XXTEAが使用されたことが判明しましたが、アルゴリズムがわずかに変更されたため、実装を推測し、実際には結果が適合しないことを確認したと考え、さらに調査しました。
これで、 XXTEA暗号化アルゴリズムが使用され、キーが128ビット、ブロックサイズが64ビット、32ラウンドであることがわかりました。 これで、パッケージ構造についてもう少し学習しました。 パケットのヘッダー+本体は64ビットと1バイトの余分なバイトに等しく、これは明らかにパケットのチェックサムです。 ここでも、逆アセンブラを使用して、パッケージの最後のバイトでの操作をさらに詳しく調べる必要があります。 チェックサム計算アルゴリズムはXOR8であることが判明しました。 ヘッダーの最大サイズは70バイトであり、チェックサムを含むパケット本体の最大サイズも70バイトです。 したがって、パケットは140バイトを超えることはできません。 この値は偶然に選択されたわけではありませんが、明らかに、1つのSMSメッセージで1つのパケットを確実に送信するために必要です。 これで、パッケージの構造の全体像が得られ、次の図で視覚化できます。 私は意図的にアセンブラーのリストを省略しているため、ストーリーはフクロウのドローイングガイドに少し似ています 。 しかし、これらのリストの適切で詳細な説明がなければ、それらは意味を成さず、別の記事を作成します。 スティーブン・ホーキングが書いたように、「本に加えられたすべての方程式は、売上高を半分にします。」
パケットの構造は明確で、暗号化アルゴリズムは既知です。 アシスタントプログラムを作成し、既知のパッケージを変更するか、プログラムによってどのように表示されるかを確認して、パッケージの特定のフィールドの値を理解するか、デバッガーでパッケージを受け取ったときのプログラムの動作を分析します。 パッケージはプログラムの1か所ですぐに理解されるわけではなく、必要な場合にのみ理解されるため、デバイスとコンフィギュレータープログラムの両方と通信できるアシスタントプログラムを作成することにしました。
ヘルパー
この画像はすでにプログラムの最新バージョンの1つであり、メインパッケージのほとんどすべてのフィールドを分析しましたが、すべてはデータを入力して結果を表示するためのシンプルなフォームから始まりました。 パッケージフィールドの値とその構造に関する詳細情報、およびプロジェクトのすべてのソースコードは、Bitbucket: Watchlockツールのリポジトリにあります (プロジェクトはPelles Cで収集できます)。
デバイスを操作するには、デバイスがどのように通信し、それ自体を識別するかを理解する必要があります。 パッケージの主な2つのタイプを特定しました-(リポジトリのwl_protocol.pdfを参照)PINGとTRACKING。 PINGパケットは、接続直後にデバイスからサーバーに送信されます。パッケージは最小限で、デバイスのシリアル番号、デバイスの時計の時刻、デバイスハードウェアプラットフォームのタイプ、ファームウェアバージョン、GPS座標、通信期間の設定などの重要な情報のみが含まれます 通常、TRACKINGパケットはPINGパケットの後に続き、通信の理由、センサーの状態、バッテリー電圧などのより高度な情報を既に含んでいます。 次に、確立されたセッション中に、デバイスにリクエストを送信できます。たとえば、次の接続の設定時間を変更し、必要に応じて、デバイスのIMEIモデムをリクエストし、デバイスの基本設定を読み取り/書き込みできます。 したがって、接続されたデバイスを使用すると、必要なほぼすべての操作を実行できますが、この場合、デバイスを使用してこのような広範な操作を行う必要はありません。
このような長い道のりを経て、WatchLockデバイスからメッセージを受信するためのサーバーの実装を既に開始できます。 サーバーは一般的な概念をテストするためだけにシンプルであり、もちろん、特別な目的のために公式またはサードパーティの隣にさえ立っていません。 サーバーには、接続されたクライアントの現在のステータスを表示するためのWebインターフェイスがあり、クライアントから特定のパラメーターセットをデコードできます。
テストサーバー
その結果、
すべての情報は個人使用のみを目的として提示されており、もちろん、公式またはサードパーティのデータ受信および処理サーバーを置き換えることを主張するものではありません。
*アップデート2015年2月6日
記事が公開された後、Startcomはデバイス構成プログラムへのリンクを削除しました。