문제

나는 질문을 형성하는 방법을 확신하지 못했기 때문에 제목이 오도 된 경우 사과드립니다. 또한, 당신은 커피를 마시고 이것을위한 자리를 잡고 싶을 수도 있습니다 ... 그것은 길다.

기본적으로 Windows Mobile Live Search 애플리케이션에서 사용하는 프로토콜을 CellID를 기반으로 한 위치를 가져 오기 위해 리버스 엔지니어링하려고합니다. 계속하기 전에 다른 오픈 소스 서비스 (예 : OpenCellid)를 알고 있지만 이것은 교육을 위해 더 많은 것입니다.

내가 캡처 한 패킷에 따르면, 사후 요청이 ...

mobile.search.live.com/positionlookupservice_1/service.aspx

... 몇 가지 특정 헤더 (에이전트, 콘텐츠 길이 등)와 본체가 없습니다. 이 작업이 진행되면 서버는 100 컨티인의 응답을 다시 보냅니다. 이 시점에서 응용 프로그램은이 데이터를 제출합니다 (패킷 헤더를 잘게 뽑았습니다).

                  00 00 00 01 00 00 00 05 55 54         ........UT
46 2d 38 05 65 6e 2d 55 53 05 65 6e 2d 55 53 01   F-8.en-US.en-US.
06 44 65 76 69 63 65 05 64 75 6d 6d 79 01 06 02   .Device.dummy...
50 4c 08 0e 52 65 76 65 72 73 65 47 65 6f 63 6f   PL..ReverseGeoco
64 65 01 07 0b 47 50 53 43 68 69 70 49 6e 66 6f   de...GPSChipInfo
01 20 06 09 43 65 6c 6c 54 6f 77 65 72 06 03 43   . ..CellTower..C
47 49 08 03 4d 43 43 b6 02 07 03 4d 4e 43 03 34   GI..MCC....MNC.4
31 30 08 03 4c 41 43 cf 36 08 02 43 49 fd 01 00   10..LAC.6..CI...
00 00 00                                          ...

응답으로 이것을받습니다 (패킷 및 HTTP 응답 헤더 다진) :

         00 00 00 01 00 00 00 00 01 06 02 50 4c      ...........PL
06 08 4c 6f 63 61 6c 69 74 79 06 08 4c 6f 63 61   ..Locality..Loca
74 69 6f 6e 07 03 4c 61 74 09 34 32 2e 33 37 35   tion..Lat.42.375
36 32 31 07 04 4c 6f 6e 67 0a 2d 37 31 2e 31 35   621..Long.-71.15
38 39 33 38 00 07 06 52 61 64 69 75 73 09 32 30   8938...Radius.20
30 30 2e 30 30 30 30 00 42 07 0c 4c 6f 63 61 6c   00.0000.B..Local
69 74 79 4e 61 6d 65 09 57 61 74 65 72 74 6f 77   ityName.Watertow
6e 07 16 41 64 6d 69 6e 69 73 74 72 61 74 69 76   n..Administrativ
65 41 72 65 61 4e 61 6d 65 0d 4d 61 73 73 61 63   eAreaName.Massac
68 75 73 65 74 74 73 07 10 50 6f 73 74 61 6c 43   husetts..PostalC
6f 64 65 4e 75 6d 62 65 72 05 30 32 34 37 32 07   odeNumber.02472.
0b 43 6f 75 6e 74 72 79 4e 61 6d 65 0d 55 6e 69   .CountryName.Uni
74 65 64 20 53 74 61 74 65 73 00 00 00            ted States...

이제 지금까지 결정한 내용은 다음과 같습니다.

  • 모든 문자열은 길이와 동등한 소수점 인 1 바이트로 선정됩니다.

  • 요청과 응답 전반에 걸쳐 사용되는 세 가지 캐스트가있는 것 같습니다. 그들은 길이 바이트 전에 1 바이트로 나타납니다. 세 가지 유형이 다음과 같이 매핑된다고 결론지었습니다.

    1. 0x06- 부모 요소 (후속 값은 어린이이며 0x00으로 닫힙니다)
    2. 0x07- 문자열
    3. 0x08 -int?

이러한 결정에 근거하여, 여기에 요청과 응답이 더 읽기 쉬운 방식으로 보이는 것입니다 (괄호로 둘러싸인 값은 길이와 괄호로 둘러싸인 값을 나타내는 값을 나타내고 괄호로 표시)를 나타냅니다.

\0x00\0x00\0x00\0x01\0x00\0x00\0x00
[5]UTF-8
[5]en-US
[5]en-US
\0x01
[6]Device
[5]dummy
\0x01
(6)[2]PL
  (8)[14]ReverseGeocode\0x01
  (7)[11]GPSChipInfo[1]\0x20
  (6)[9]CellTower
    (6)[3]CGI
      (8)[3]MCC\0xB6\0x02         //310
      (7)[3]MNC[3]410             //410
      (8)[3]LAC\0xCF\0x36         //6991
      (8)[2]CI\0xFD\0x01          //259
    \0x00
  \0x00
\0x00
\0x00

그리고..

\0x00\0x00\0x00\0x01\0x00\0x00\0x00
\0x00\0x01
(6)[2]PL
  (6)[8]Locality
    (6)[8]Location
      (7)[3]Lat[9]42.375621
      (7)[4]Long[10]-71.158938
    \0x00
    (7)[6]Radius[9]2000.0000
  \0x00
  \0x42     //"B" ... Has to do with GSM
  (7)[12]LocalityName[9]Watertown
  (7)[22]AdministrativeAreaName[13]Massachusetts
  (7)[16]PostalCodeNumber[5]02472
  (7)[11]CountryName[13]United States
\0x00
\0x00\0x00

내 분석은 몇 가지를 제외하고는 꽤 잘 작동하는 것 같습니다.

  1. 0x01은 나를 혼란스럽게합니다 ... 처음에는 그들이 일종의 기본 레벨 원소 터미네이터라고 생각했지만 확실하지 않습니다.
  2. 7 바이트 헤더가 실제로 7 바이트 헤더인지 잘 모르겠습니다. 아마도 4 바이트이고 나머지 3 개의 0x00이 다른 의미인지 궁금합니다.
  3. 후행 0x00. 요청에 하나만 있지만 응답에 2 개가있는 이유는 무엇입니까?
  4. 위에서 언급 한 유형 8 캐스트 ... 해당 값이 어떻게 인코딩되는지 알 수 없습니다. 나는 그 줄에 댓글을 추가했습니다. ~해야 한다 에 해당.

이 네 가지 요점에 대한 조언은 크게 감사하겠습니다.

그렇습니다.이 패킷은 MA의 Watertown에서 캡처되었습니다. :)

도움이 되었습니까?

해결책

나는 당신의 모든 고장을 읽지 않았지만 당신은 이것 CodeProject는 Google Celltower를 위치 API로 깨뜨린 것으로 보입니다. 라이브 검색 요청에 필요한 것과 같은 구성 요소에 CellTower ID를 뱉어내는 것처럼 보입니다.

어쩌면 그것은 당신에게 약간 도움이 될 것입니다.

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