장치에서 가져온 바이너리 데이터 세트를 리버스 엔지니어링하려면 어떻게 해야 할까요?

StackOverflow https://stackoverflow.com/questions/115836

문제

내 친구가 최근에 이 질문을 제기했는데, 그는 최근 자신의 심박수를 추적하고 하루 동안의 심박수 통계를 컴퓨터에 업로드할 수 있는 Garmin 심박수 모니터 장치를 구입했습니다.

유일한 문제는 Garmin USB 장치용 Linux 드라이버가 없다는 것입니다. Garmin은 모델 번호 및 사용자 세부 정보와 같은 일부 데이터를 해석했으며 본질적으로 일련의 일련의 바이너리 데이터 테이블이 있다고 가정합니다. 그의 심박수와 녹음 시간을 기록했습니다.

구조에 대해 전혀 모르는 경우 데이터를 리버스 엔지니어링하려면 어디서부터 시작해야 합니까?

도움이 되었습니까?

해결책

나는 동일한 문제가 있었고 Garmin 장치용 도구의 크로스 플랫폼 버전을 완성하는 것을 목표로 하는 이 프로젝트를 Google Code에서 처음 발견했습니다.보다: http://code.google.com/p/garmintools/.해당 프로젝트의 첫 페이지에는 필요한 프로토콜에 대한 링크가 있습니다. Garmin은 이를 공개적으로 공개할 만큼 사려 깊었습니다.

Garmin I/O 사양에 대한 직접 링크는 다음과 같습니다. http://www.garmin.com/support/pdf/IOSDK.zip

다른 팁

가장 일반적인 인코딩(ASCII, 유니코드 등)을 알고 있는 좋은 편집기인 16진수 편집기에서 데이터를 보기 시작한 다음 저장되어 있는 데이터에서 이해하려고 노력합니다.

다른 포스터에서 언급했듯이 리버스 엔지니어링은 실제로는 아니지만 합법성 측면에서 까다로울 수 있습니다.

즉, 이 프로젝트와 해당 코드를 확인하면 근본적인 질문과 관련된 모든 것을 찾을 수 있을 것입니다. 그리고 이 프로젝트는 주자의 심박수/GPS 콤보 데이터도 처리합니다.

http://www.gpsbabel.org/

출신 국가에서 리버스 엔지니어링의 합법성을 확인하는 것부터 시작하는 것이 좋습니다.대부분의 국가에는 리버스 엔지니어링 장치 및 코드와 관련하여 허용되는 것과 허용되지 않는 것에 대한 매우 엄격한 법률이 있습니다.

먼저 장치에서 어떤 데이터가 전송되는지 확인한 다음 그러한 데이터를 어떻게 표현하고 압축할 수 있는지 고려합니다.

먼저 많은 샘플을 캡처하고 어떤 패턴이 나타나는지 확인합니다. 심장 박동은 규칙적이고 심장 자체와 관련된 측정임을 암시하기 때문입니다.또한 일종의 타임 스탬프를 암시하므로 단조롭게 증가하는 비트 필드를 찾을 것입니다.

무엇이 어디에 있는지에 대한 가설을 세운 후 이를 테스트하고 결과를 그래프로 표시하여 그것이 의미가 있는지 확인하는 프로그램을 작성했습니다.그렇지 않다면 면밀히 조사해 보면 여기저기에 몇 가지 스케일링 요소가 필요하다는 것을 알 수 있을 것입니다.프로그램이 보여주는 것과 비슷하게 보이기 전에 먼저 데이터를 처리해야 하는 것도 전적으로 가능합니다.데이터 포인트를 통합해야 할 수도 있습니다.쓰레기가 생기면 다시 처음으로 돌아갑니다 :-)

또한 제조업체의 웹사이트를 확인하거나 strings 그들의 바이너리에.생체의학 공학 분야에서 일하는 사람을 찾는 것도 내 목록에 포함될 것입니다. 왜냐하면 그들은 일반적으로 어떤 프로토콜이 사용되는지 알 것이기 때문입니다.또한 이러한 프로토콜을 찾아 내가 보고 있는 데이터에 적용될 수 있는지 확인하겠습니다.

먼저 데이터의 16진수 덤프를 만드는 것부터 시작하겠습니다.아마도 2의 거듭제곱 크기의 덩어리로 막혀 있는 것 같습니다.반복되는 패턴을 찾기 시작하세요.그들이 어떤 종류의 데이터를 보낼지 생각해 보세요.각 심장 박동을 개별적으로 기록하거나 센서가 고정된 간격으로 보내는 모든 것을 기록합니다.개별 비트인 경우 시간 델타(마지막 비트 이후), 지속 시간 및 일종의 최대 또는 평균 강도가 있을 것입니다.고정 간격이라면 아마도 판독값의 단순한 벡터일 것입니다.아마도 시작 타임스탬프와 샘플링 속도가 포함된 일종의 서문이 있을 것입니다.타임스탬프를 직접 디코딩해 보거나 간단히 피드에 입력해 볼 수도 있습니다. ctime() 표준 절대 시간 형식을 사용하고 있는지 확인하세요.

많은 저렴한 A/D 변환기는 12비트 출력만 생성하므로 판독값이 16비트보다 클 가능성이 없습니다(그리고 상위 4비트가 플래그에 사용될 수 있음).장치를 "비어 있는" 상태로 재설정하고 내용을 덤프하고 저장한 다음 일련의 판독값을 취하고 결과(장치가 일반적으로 보고하는 모든 내용)를 기록한 다음 내용을 다시 덤프하고 기록된 결과를 연관시키려고 시도하는 것이 좋습니다. "빈" 덤프 이후에 나타난 모든 데이터를 사용합니다.

이것이 귀하가 찾고 있는 것인지 확실하지 않지만 Garmin은 귀하의 브라우저에서 실행되는 API를 만들었습니다.Windows 브라우저는 물론 OSX도 지원되는 것 같습니다.이 리버스 엔지니어링 대신 사용할 수 있는지 알아보기 위해 Google Chromium에서 시도해 보겠습니다.

http://developer.garmin.com/web-device/garmin-communicator-plugin/

API 기능

제품 이름 및 소프트웨어 버전과 같은 장치 제품 정보에 대한 컴퓨터 액세스에 연결된 장치의 자동 감지 지원되는 레크리에이션, 피트니스 및 내비게이션 장치의 트랙, 경로 및 웨이 포인트와 같은 트랙, 경로 및 웨이 포인트를 쓰기 트랙, 경로 및 웨이 포인트에 지원되는 레크리에이션, 피트니스 및 내비게이션 읽기 피트니스를 읽습니다. 지원되는 피트니스 장치의 데이터 지리 코드 주소 및 웨이 포인트 또는 좋아하는 읽기 및 쓰기 Garmin XML 파일 (GPX 및 TCX) 및 이진 파일로 장치에 저장하십시오.Microsoft Windows에서 인터넷 익스플로러, Firefox 및 Chrome에 대한 대부분의 Garmin 장치 (USB, USB Mass-Storage, 대부분의 직렬 장치) 지원.Mac OS X의 Safari, Firefox 및 Chrome 지원.

컴퓨터 스피커 같은 것을 사용하여 심장 박동을 합성할 수 있나요?(나는 그러한 장치가 실제로 어떻게 작동하는지 전혀 모릅니다).다양한 입력에 따라 이진 결과가 어떻게 변하는지 살펴보세요.

장치를 분해하고 내부 내용을 확인하는 것도 도움이 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top