逆向工程windows移动实时搜索CellID位置感知协议(yikes)

时间:2009-03-19 14:41:13

标签: http windows-mobile reverse-engineering cellular-network

我不知道如何形成这个问题所以如果标题有误导性我会道歉。此外,你可能想喝点咖啡,为这个喝一杯......这很长。

基本上,我正在尝试对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 - string
    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. 0x01s让我感到困惑...... 起初我以为他们是一些人 一种基本级别的元素 终结者,但我不确定。
  2. 我不确定7字节的标头是, 实际上是一个七字节的标题。一世 想知道它是否可能是4个字节 三个剩余的0x00是 其他一些意义。
  3. 尾随0x00。为什么会这样 请求中只有一个但是 两个回应?
  4. 上面提到的8型演员...... 我似乎无法弄清楚那些是怎样的 值正在编码。我补充道 对这些行的评论 值对应。
  5. 对这四点的任何建议都将不胜感激。

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

1 个答案:

答案 0 :(得分:0)

我还没有看到您的所有细分,但您可能希望查看this代码项目,该项目似乎已将谷歌小区功能破坏为位置API。看起来它正在将Celltower ID分散到它的组件中,就像实时搜索请求所需要的那样。

也许这会对你有所帮助。