事情是这样的,为了记录自己的生活,也是出于对视频编辑的兴趣,买了一台 SONY 的 AS100V 运动摄像机

公司到货,回家路上拍了一段,回家兴冲冲的连上电脑,想看看 GPS 数据,发现是 SONY 的私有各式,于是从网上找相关资料,想转成 Google Earth 的 KML 各式,中文搜,英文搜,找到那天凌晨三点多也没找到。。。

第二天睡醒,仔细看了一下这个文本数据,才发现 SONY 使用的是相对位置的 GPS 位置记录(熬夜都懵了),从 GPS 定位的那一刻开始,记录为原点(0,0),后面的位置是根据这个点在取偏移,没有最开始那个点的坐标,根本就不知道准确的坐标,坑吧。当然,可以通过自己定位初始坐标的方式获得误差不是很大的坐标,但是这样很不爽不是么。

根据程序员的第六感,AS100V 应该有工程模式/调试模式。以此为前提,想到了一个曲折的方案,这个模式下记录的 GPS 位置肯定是绝对位置,因为只有这样程序员才知道自己记录的位置到底对不对。激活这种模式的方式应该是存储卡里放入一个特殊的文件。但是是什么特殊的文件只有逆向 AS100V 的固件才知道。想知道如何进入调试模式需要得到固件 -> 解压固件 -> 逆向程序 -> 获得进入调试模式的方式 -> 进入调试模式 -> 获得绝对 GPS 位置。

首先是获得固件,这个简单,官方刚好在六月份提供了一个2.0版本的固件。把这个下载下来。是一个自解压缩文件,解压之后会有刷机程序和固件。开始以为刷机程序会先解压\解密固件再写入机器中,不是解压\解密到文件系统,是在内存中解压\解密再传输。但是逆了一下刷机程序发现不是这样的。刷机程序里只有写入、读取数据和获得机器信息的一些操作,看来是把加密的固件直接传输到设备中了。

只能想办法得到固件的格式,自己解析固件,最开始的想法是自己硬上,用编辑器看了一下 HEX 的格式,看了半天没看出门道,这时想到 SONY 应该不会针对每一个固件都设计一个新的固件格式。大部分摄像类固件应该是一样或者类似的格式,按着这个想法找了其他 SONY 录像产品的固件,解压缩一看,连刷固件的程序都是一摸一样的,不错。再看一下 HEX,确实有部分类似的地方,棒极了。

根据这种情况判断,应该已经有前辈研究过 SONY 的固件格式。按着这个想法搜了一下解压 SONY 固件的程序,果然搜到了。是一个解压 NEX 相机固件的程序,这个相机的固件格式和 AS100V 是一样的,所以试了一下,结果不行。不死心找了一下这个工具的源代码,还真找到了,用源代码一步一步的调试,跟踪到了一个分支,作者写了注释,这是第三代固件加密方式,更新日志里详细的写了没有解密的希望。(原文:fixed crashes with 3. generation -no decryption possible-)

事情就到此为止了,用了上个周末的两天时间,想获取 GPS 绝对坐标的希望基本破灭了。。。

不过我还没死心,打算给 SONY 写封邮件,说明一下情况,希望 SONY 能解决这个问题。。。否则。。。 SONY 你妹啊!!坑爹呢这是!!!

 

 

附:GPS文件样例

@Sonygps/ver5.0/wgs-84/20140711133516.000/d/
@Sonygpsoption/0/20140711133519.000/20140711133519.347/
#SGA,133519.347,0.0000,N,0.0000,E,1,0,,,M,,M,,*4D
#SMC,133519.347,A,0.0000,N,0.0000,E,1.69,,110714,,,A*56
#SGA,133520.340,0.0012,S,0.0013,W,1,0,,,M,,M,,*4E
#SMC,133520.340,A,0.0012,S,0.0013,W,1.67,,110714,,,A*5B
#SGA,133521.337,0.0026,S,0.0032,W,1,0,,,M,,M,,*4B
#SMC,133521.337,A,0.0026,S,0.0032,W,1.64,,110714,,,A*5D
#SGA,133522.326,0.0041,S,0.0081,W,1,0,,,M,,M,,*41
#SMC,133522.326,A,0.0041,S,0.0081,W,1.63,,110714,,,A*50
#SGA,133523.321,0.0026,S,0.0086,W,1,0,,,M,,M,,*41
#SMC,133523.321,A,0.0026,S,0.0086,W,1.57,,110714,,,A*57
#SGA,133524.324,0.0024,S,0.0069,W,1,0,,,M,,M,,*40
#SMC,133524.324,A,0.0024,S,0.0069,W,1.42,,110714,,,A*52
#SGA,133525.326,0.0020,S,0.0060,W,1,0,,,M,,M,,*4E
#SMC,133525.326,A,0.0020,S,0.0060,W,1.29,,110714,,,A*51
#SGA,133526.327,0.0021,S,0.0046,W,1,0,,,M,,M,,*49
#SMC,133526.327,A,0.0021,S,0.0046,W,1.57,,110714,,,A*5F
#SGA,133527.329,0.0021,S,0.0026,W,1,0,,,M,,M,,*40
#SMC,133527.329,A,0.0021,S,0.0026,W,1.74,,110714,,,A*57

坑爹的 SONY AS100V GPS的更多相关文章

  1. [BZOJ3538]坑爹的GPS

    题目描述 Description 有一天,\(FJ\) 买了一辆车,但是,他一手下载了两个\(GPS\) 系统.好了现在麻烦的事情来了,\(GPS\) 有一个功能大概大家也知道,如果\(FJ\) 没有 ...

  2. Android GPS应用开发

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5715879.html GPS定位系统由三部分组成,即由GPS卫星组成的空间部分,若干地面组成的控制部分和普通 ...

  3. android GPS定位源码 地图显示位置源码 有用到的小伙伴自提取

    package com.jasgroup.cn.amhdeam; import java.io.IOException; import java.util.Iterator; import andro ...

  4. MTK MT33xx型GPS的NMEA协议解析实例

    1)解析实现 gps_main.c #include <nmea/nmea.h> #include <string.h> #include <stdio.h> #i ...

  5. Qt - 读取GPS数据

    1.GPS型号为ublox(EVK-M8L),配有USB接口,Qt版本5.7 2.实现步骤: (1)实现串口通信 采用Qt5.7 内置的串口操作类QSerialPort和QSerialPortInfo ...

  6. GPS 气压计高度测量

    气压计测某个点的高度是不准的,因为天气.温度等原因会导致不同时刻同一地点气压不同,所以气压计测量不准.但气压计测量相对高度是很准的.GPS测相对高度不准,但测定点高度比较准.

  7. 趣味GPS

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 简介 GPS的全称是全球定位系统(the Global Positioning S ...

  8. Elasticsearch 的坑爹事——记录一次mapping field修改过程

    Elasticsearch 的坑爹事 本文记录一次Elasticsearch mapping field修改过程 团队使用Elasticsearch做日志的分类检索分析服务,使用了类似如下的_mapp ...

  9. GPS各种地图坐标系转换(转载)

    http://my.oschina.net/fankun2013/blog/338100 地图供应商比较多,产生了许多地图坐标.地图坐标正确转换是个问题.在之前开发地图应用的时候发现从WGS84坐标系 ...

随机推荐

  1. JavaScript电子时钟+倒计时

    JavaScript时间类      获取时分秒:          getHours()          getMinutes();          getSeconds();       获取 ...

  2. 20145205 《Java程序设计》第8周学习总结

    教材学习内容总结 第十五章 通用API 15.1 日志 日志API简介 java.util.logging包提供了日志功能相关类与接口,不必额外配置日志组件,就可在标准Java平台使用是其好处.使用日 ...

  3. XSS漏洞

    跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取信息 坚决不要相信任何用户输入并过滤所有特殊字符.这样既可消灭绝大部分的XSS攻击.另一个建议是输出页面时将 < 和 > 变换成 ...

  4. Java简单类——多对多映射

    class Admin { private String aid ; private String password ; private Role role ; public Admin(String ...

  5. escape,encodeURI,encodeURIComponent的区别

    escape是对字符串进行编码而另外两种是对URL. encodeURI方法不会对下列字符编码 ASCII字母 数字 ~!@#$&*()=:/,;?+'encodeURIComponent方法 ...

  6. C#多线程环境下调用 HttpWebRequest 并发连接限制

    C#多线程环境下调用 HttpWebRequest 并发连接限制 .net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 win ...

  7. 关于IIF多个条件的用法

    IIF(yyzt = 0, '生产', IIF(yyzt = 10,'入库',IIF(yyzt=20,'销售经理',IIF(yyzt=30,'用户','其他'))))

  8. HTTPS 协议和原理

    1 HTTPS 协议概述 HTTPS 可以认为是 HTTP + TLS.HTTP 协议大家耳熟能详了,目前大部分 WEB 应用和网站都是使用 HTTP 协议传输的. TLS 是传输层加密协议,它的前身 ...

  9. avalon的表单验证

    表单验证 avalon内置了强大的表单验证功能,它需要结合ms-duplex, ms-validate, ms-rules这个三个指令一起使用. ms-duplex负责监控每个表单元素的输入. ms- ...

  10. insert into linksvr or insert into from linksvr

    通过链接服务器将实例A上的数据写入实例B,通常有以下两种方式--方案1:在实例A上执行insert into LinkForB.B..TableB select * from TableA--方案2: ...