8


2

私の友人は先日、この疑問を提起しました。彼は最近自分の心拍数を追跡し、自分のコンピュータにその日の心拍数統計をアップロードすることを可能にするガーミン心拍数モニター装置を購入しました。

唯一の問題は、garmin USBデバイス用のLinuxドライバがないことです。彼は、モデル番号やユーザーの詳細など、一部のデータを解釈することに成功し、一連のバイナリデータを表すと仮定するバイナリデータテーブルがいくつかあります。彼の心拍数とその記録がとられた時間の記録。

構造について何も知らないときに、データをリバースエンジニアリングするとどこから始まるのでしょうか。

8 Answer


4


私は同じ問題を抱えていて、最初にGarminデバイス用のツールのクロスプラットフォームバージョンを完成させることを目的としたこのプロジェクトをGoogle Codeで見つけました…​ http://code.google.com/p/garmintools/を参照してください。 そのプロジェクトの最初のページにあなたが必要とするプロトコルへのリンクがあります、Garminは公にリリースするのに十分に思慮深かったです。

そして、これがGarminのI / O仕様への直接のリンクです:http://www.garmin.com/support/pdf/IOSDK.zip


1


私は16進数のエディタでデータを見始めます。うまくいけば最も一般的なエンコーディング(ASCII、Unicodeなど)を知っていて、それからあなたがそれが格納していることを知っているデータからそれを理解しようとします。


1


別のポスターが述べたように、リバースエンジニアリングは毛深いことができます。実際にはそうではなく、合法的です。

そうは言っても、あなたはこのプロジェクトとそのコードをチェックすることで手元にあるあなたの根本的な質問に関連するすべてを見つけることができるかもしれません…​そして彼らはランナーの心拍数/ GPSコンボデータも処理します


0


あなたの出身国でリバースエンジニアリングの合法性をチェックすることから始めることをお勧めします。 ほとんどの国では、許可されているものとリバースエンジニアリングデバイスおよびコードに関して許可されていないものに関して非常に厳密な法律があります。


0


どのようなデータがデバイスから送信されているのかを確認することから始め、次にそのようなデータを表現してパックする方法を検討します。

心拍は規則的なものであり、それは心臓自体に関連した測定であることを示唆しているので、私は最初に多くのサンプルを捕獲し、そして何らかのパターンがそれ自体を提示するかどうか確かめる。 それはある種のタイムスタンプを示唆するので、私はまた単調に増加しているビットフィールドを探すでしょう。

何がどこにあるかについての仮説を立てたので、それをテストして結果をグラフにしてそれが理にかなっているかどうかを確かめるプログラムを書くでしょう。 完全ではないにしても、詳細に調べると、ここまたはそこにいくつかの倍率が必要であることが明らかになります。 それは彼らのプログラムが示しているもののように見える前に、私が最初にデータを処理する必要があることも全く可能です。 データポイントを統合する必要があるかもしれません。 ゴミが出たら、それは製図板に戻ります:-)

私はまた製造元のWebサイトをチェックするか、あるいはバイナリで `strings`を実行します。 生物医学工学の分野で働いている人を見つけることも私のリストにあるでしょう。 私はまたこれらのプロトコルを探し、そして私が見ているデータに何か適用できるかどうかを確かめるでしょう。


0


データの16進ダンプを作成することから始めます。 図それはおそらく2のべき乗サイズの塊でブロックされています。 繰り返しパターンを探し始めます。 どのような種類のデータを送信しているのでしょうか。 彼らはそれぞれの心拍を個別に記録しているか、あるいはセンサーが一定間隔で送信しているものは何でも記録しています。 それが個々の拍子であるならば、時間差(最後の拍子以来)、持続期間、そしてある種の最大または平均強さがあるでしょう。 それが固定間隔なら、それはおそらく読みの単純なベクトルになるでしょう。 おそらく開始タイムスタンプとサンプリングレートを含むある種のプリアンブルがあるでしょう。 あなたは自分でタイムスタンプをデコードすることを試みることができます、あるいは単にそれを `ctime()`に渡してそれらが標準の絶対時間フォーマットを使っているかどうかを確かめることを試みるかもしれません。

多くの安価なA / Dコンバータは12ビットの出力しか生成しないので、読み取り値が16ビットより大きくなることはほとんどありません(フラグには上位4ビットが使用される可能性があります)。 デバイスをリセットして「空白」にし、内容をダンプして保存してから、一連の測定値を取得し、結果を記録し(デバイスが通常報告するものは何でも)、内容を再度ダンプして記録結果を関連付けるようにします。 「空の」ダンプの後に表示されたデータが何であれ。


0


これがあなたが探しているものであるかどうかは定かではありませんが、Garminはあなたのブラウザで動くAPIを作成しました。 OSXは、Windowsブラウザと同様にサポートされているようです…​ Google Chromiumから試して、このリバースエンジニアリングの代わりに使用できるかどうかを確認します。

  • APIの機能*

_ コンピューターに接続されたデバイスの自動検出製品名やソフトウェアバージョンなどのデバイス製品情報へのアクセスサポートされているレクリエーション、フィットネス、ナビゲーションデバイスからのトラック、ルート、ウェイポイントの読み取りサポートされているレクリエーション、フィットネス、ナビゲーションデバイスへのトラック、ルート、ウェイポイントの書き込みフィットネスの読み取りサポートされているフィットネスデバイスからのデータ住所をジオコードし、ウェイポイントまたはお気に入りとしてデバイスに保存しますGarmin XMLファイル(GPXおよびTCX)およびバイナリファイルの読み取りと書き込み。 ほとんどのGarminデバイス(USB、USB大容量記憶装置、ほとんどのシリアルデバイス)のサポートMicrosoft Windows上のInternet Explorer、Firefox、およびChromeのサポート。 Mac OS XでのSafari、Firefox、およびChromeのサポート。 _


-1


コンピュータのスピーカーのようなものを使って心拍を合成できますか。 (私はそのようなデバイスが実際にどのように機能するのかわかりません)。 バイナリ入力がさまざまな入力に基づいてどのように変化するかを確認します。

装置を引き裂いて、中に入っているものをチェックするのもおそらく助けになるでしょう。