0

我不确定如何提出问题,所以如果标题具有误导性,我深表歉意。此外,您可能想喝杯咖啡并为此坐下……它很长。

基本上,我正在尝试对 Windows Mobile Live Search 应用程序使用的协议进行逆向工程,以根据 cellID 获取位置。在继续之前,我知道其他开源服务(例如 OpenCellID),但这更多是为了教育和冗余。

根据我捕获的数据包,发出 POST 请求以...

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

...带有一些特定的标头(代理、内容长度等)并且没有正文。一旦完成,服务器会发回 100-Continue 响应。此时,应用程序提交了这个数据(我剪掉了数据包头):

                  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. 0x06 - 父元素(后续值为子元素,以 0x00 结束)
    2. 0x07 - 字符串
    3. 0x08 - 整数?

基于这些确定,以下是请求和响应以更易读的方式呈现的样子(括号括起来的值表示长度,括号括起来的值表示强制转换):

\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 个字节,剩下的三个 0x00 是否具有其他意义。
  3. 尾随 0x00s。为什么请求中只有一个,响应中只有两个?
  4. 上面提到的类型 8 转换......我似乎无法弄清楚这些值是如何编码的。我在这些行中添加了值应该对应的注释。

任何关于这四点的建议将不胜感激。

是的,这些数据包是在马萨诸塞州沃特敦捕获的。:)

4

1 回答 1

0

我还没有阅读您的所有故障,但您可能想查看这个似乎已经破坏了 google celltower to location API 的代码项目。看起来它正在将 celltower ID 吐出到它的组件中,就像实时搜索请求所需的一样。

也许这会对你有所帮助。

于 2009-03-29T18:30:36.833 回答