事情是这样的,为了记录自己的生活,也是出于对视频编辑的兴趣,买了一台 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