1.简介

本篇是胖猴小玩闹专题的第十一篇,我们将继续分析海康萤石的智能网关,其思路是先从简单的地方着手,把不需要逆向分析的,可以直接就能观察到的输出和文件都看一看,然后再深入的研究某个细节。

在本专题的上一篇文章中,我们已经获取了电路板上Flash存储的固件内容,同时对MCU的UART引脚进行测试,确认该引脚与软排线接口连通。那么就下来,我们就想办法连上软排线的接口。

2. 网关分析

2.1 串口分析

为了接通软排线,我们需要购买一段20pin的软排线,淘宝可以买到,奇热楼下手机店可能也有。软排线的另一端连接转接板,将0.5mm间距的软排线转接为常见的2.54mm间距的排针。如下图所示:

图2-1 软排线连接转接板

接下来,左侧转接板再通过usb转ttl模块连接电脑。usb转ttl模块的作用是调整电平逻辑,通过该模块,使usb接口的RS232逻辑电平转为MCU的ttl逻辑电平,反之亦然。可以在淘宝买到该模块,截图如下:

图2-2 usb转ttl模块

上图中,左侧有5个引脚,我们需要重点关注其中三个,分别是RXD引脚、TXD引脚和GND引脚。RXD引脚是该模块的输入引脚,要连接MCU的 TXD引脚,就是将MCU的输出作为usb转ttl模块的输入。TXD引脚链接MCU的RXD引脚。最后通过接通MCU的GND引脚和该模块的GND引脚实现共地。连接完成之后,如下图:

图2-3 连接MCU的UART接口

另外,最好给网关单独准备一个带开关的电源插座,以便于我们反复重启网关,否则来回插拔网关容易导致各种问题。我们在实际操作中,软排线和软排线接口的触点位置经常虚接,暂无法确定海康萤石的软排线接口是否需要特殊的软排线才能连接,但这样也勉强能用。

将usb转ttl模块插入电脑之后,在电脑的“设备管理器”选项卡中就会出现一个COM口,并为其分配了一个COM编号,如下图所示:

图2-4 设备管理器选项卡

为了读取此COM口的通信数据,我们还需要一个软件,可以选择Xshell、SecureCRT或者sscom串口调试工具等。我们这里用Xshell作为读取串口的软件,相关配置如下:

图2-5 Xshell配置串口连接

按照图中的方式完成配置,其中Port选择刚刚识别到的COM口编号,其他参数选择默认就好,如有变动,我们会额外指出的。

配置完毕后,连接该串口,给网关上电,如果一切操作都正确无误,那么就可以看到如下的输出内容:

图2-6 串口输出内容

上图中的输出内容显然是网关上电之后的输出日志,待系统启动完成之后,我们可以试着输入一些内容,这时就会出现登陆嵌入式Linux系统的提示字符,看来还能通过COM口登陆呢,但是登陆用户和登陆密码我们暂不知道。好吧,那就重新去翻一翻提取出来的网关固件。

2.2 重打包固件

在本专题的上一篇中,我们已经把完整的网关内容提取出来了,在其中的cpio文件系统中,可以找到/etc/shadow文件,文件内容如下:

图2-7 文件系统中/etc/shadow文件

借助于彩虹表,就可以找到root用户的登陆密码为abc123。使用该用户名,就可以顺利登陆海康萤石的智能网关,并使用串口shell提供的各种功能了。但是上文也提到了,我们的软排线触点可能有点虚接,有时候吹口气就断了,还是想办法弄个更稳定的连接吧。

在海康萤石的网关固件中翻一翻,可以发现在/sbin目录中有telnetd程序,如果我们可以通过telnet连接智能网关,或许会稳定很多,如下图所示:

图2-8 智能网关中/sbin/telnetd程序

注意,该程序是指向busybox的软链接,如果把解压缩出的固件内容拿到windows环境后,可能会导致/sbin目录中是空的。可以使用串口shell登陆设备,然后运行telnetd程序,但这就意味着每次设备重启之后,我们都要使用shell启动telnetd程序,这样操作也很麻烦。

继续翻找,我们在squashfs文件系统中找到initrun.sh脚本,通过名字和内容可以判断该脚本是在网关上电启动后进行初始化操作的。如果我们在该脚本中启动telnetd,然后将固件重新打包烧录回去,应该就不需要软排线了,为此我们给initrun.sh增加telnetd命令,如下图:

图2-9 在initrun.sh中启动telnetd程序

接下来,就要考虑如何将固件重新打包,然后刷回至Flash中了。固件解包时,只要binwalk跑一下就完事了,但是重打包就相对麻烦一些。我们刚刚修改了initrun.sh文件,该文件在squashfs文件系统中,所以就需要重新打包squashfs文件系统,但mksquashfs在打包时,有很多细节的参数和配置,这些参数和配置将直接影响我们重打包的系统是否可以正常运行,此外,还有设备只能识别特定版本的mksquashfs打包出来的固件。

为解决squashfs文件系统打包的问题,我们最好参考一下MT7688AN的官方SDK。假设海康萤石的开发者基于该SDK的进行开发的,那么我们也根据SDK中的固件打包方法进行操作,得到的固件应该就是可运行的。首先在官网上下载MT7688 SDK,链接如下:http://labs.mediatek.com/zh-cn/platform/linkit-smart-7688,如下图:

图2-10 下载MT7688 SDK文件

在下载到的SDK文件中,我们可以在include文件夹中找到image.mk文件,在该文件中可以找到打包squashfs文件系统时的命令和参数,如下图所示:

图2-11 打包squashfs文件系统的命令和参数

同时,在‘staging_dir\host\bin’目录中可以找到图2-11 中的mksquashfs4程序,如下图所示:

图2-12 打包squashfs文件系统需要的程序

我们试着用图2-12中的程序和图2-11中的参数打包一下开启telnetd程序的squashfs文件系统,如下图所示:

图2-12 完成squashfs文件系统打包

上图中,-comp xz是选择xz压缩格式,通过binwalk可以直接查看到原固件中的压缩格式,所以我们也选择该压缩格式。

最后,将打包后的文件系统重新放回固件文件中。我们用了一个颇为简单粗暴的方法,即用UltraEdit直接16进制编辑。上一篇的binwalk分析结果显示从地址0x700000开始的位置是squashfs文件系统的位置,如下图:

图2-13 十六进制编辑固件

我们只需要将重新打包的squashfs文件覆盖到此处即可,需要注意的是固件文件从地址0x900000起始就是另一个squashfs文件系统了,所以,覆盖完成后需要调整两个文件系统之间的填充字节数量以保证另一个squashfs文件系统的起始偏移仍然是0x900000。至此,我们完成了重打包工作。

2.3 固件烧录

固件的烧录和固件的提取是类似的,依旧是把Flash芯片用热风枪吹下来,然后通过编程器以及配套的软件将2.2章中我们获得的固件文件烧录至Flash中,操作过程可以参考本专题第九篇中的提取固件过程,这里就不再赘述了。

烧录完成之后,我们给智能网关上电,可以观测到网关是正常启动了,那么这说明我们重打包的固件是可以运行的。由此,我们获得了固件编辑能力,如果有必要的话,可以随时编辑和调整固件中的各种程序。

3. 小结

在本篇中,我们主要讨论了2件事情,其一是使用usb转ttl模块连接上了海康萤石网关设备的软排线接口,通过UART接口观察到了系统启动时的输出,并登陆了嵌入式Linux系统;其二是我们开启了海康萤石的网关的telnetd程序,并对该固件进行重打包,最后将重打包的固件刷入Flash中,我们的固件是可以顺利执行的。在本专题的后续文章中,我们在此基础上继续分析和研究海康萤石的智能网关,希望各位读者能有所收获。

Yimi Hu & Light @ PwnMonkeyLabs

智能门锁与网关:海康萤石智能门锁的网关分析(二)相关推荐

  1. 海康智能分析服务器设置,【胖猴小玩闹】智能门锁与网关: 海康萤石智能门锁的网关分析(三)...

    1.简介 本篇是关于海康萤石智能网关分析的第3篇,在中,我们完成了固件编辑和重打包工作.在我们自己修改的固件中,海康萤石的智能网关上电启动之后会运行telnetd,此后我们只要通过telnet远程连接 ...

  2. 从海康萤石看企业经营之不易

    作者6年多业内知名半导体工作经验,目前在国内某BAT企业做产品. 欢迎关注公众号交流物联网技术和物联网产品. 原文链接 https://mp.weixin.qq.com/s?__biz=MzI3NDE ...

  3. Emgucv不完整图像分割试验(十八)——Emgucv或opencv连接海康/萤石网络4G摄像头

    项目需要远程连摄像头,之前也一直觉得这事挺简单的,opencv有教程也平时很多地方见过这样的操作,没想到实践起来蛮多坑的. 1.首先确定摄像头支不支持4G或WIFI,尽量选海康萤石这种大厂,资料较多. ...

  4. 微信小程序中播放海康萤石云HLS '.m3u8'视频 video标签

    微信小程序中播放海康萤石云HLS '.m3u8'视频 video标签 前言 萤石云开放平台 微信开发者工具 前言 因为项目需要在微信小程序上展示实时视频流信息,以下内容是我将萤石云平台官方文档和自己实 ...

  5. 海康萤石摄像头本地局域网拉流保存

    海康萤石的视频cp1型号,获取局域网的视频流:rtsp 拉流方法 首先需要在软件中打开rtsp开关,然后使用nmap工具测试下摄像头开放的端口号,一定会有一个554端口开放 $ nmap 192.16 ...

  6. 适用OpenCV读取网络摄像头(海康萤石 CS-C3S-52WEFR 1080P)的视频流

    目录标题 本文小结 1.设备连接(很重要) 2.更改电脑ipv4的地址为路由器ip的网段 3.下载Wireshark来抓包 4.找到摄像头ip地址 5.找到对应的RTSP地址 (1)**海康实时流** ...

  7. 海康萤石的本地在线码流

    测试设备为: 海康的萤石C6C(标准版) 视频流格式: rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_ ...

  8. 海康萤石云的使用方法

    http://download.hikvision.com/UploadFile/Soft/%E6%B5%B7%E5%BA%B7%E5%A8%81%E8%A7%86DVR%20NVR%E5%8D%87 ...

  9. 海康萤石摄像机远程监控机制分析

    背景介绍 有一个远程监控的需求,正常情况下采用服务器转发视频流对服务器要求很高,所以p2p看似是一个比较好的方案,但是p2p打洞却不是一件容易的事情,所以打算分析下海康萤石摄像机远程监控的机制,是否采 ...

  10. 海康萤石摄像头SDK Java(一)java本地调用摄像头

    本文仅仅实现java 本地调用海康摄像头,后续的视频码解析正在研究. 默认环境: 1.从官网下载好对应OS的SDK. 2.连通摄像头. 3.搭建Java项目,集成sdk中的java demo. 先看效 ...

最新文章

  1. Tensorflow-gpu 在Anaconda中使用出现问题的解决方式
  2. excel如何做单元格下拉和根据文字自动变色
  3. VTK:可视化之Lorenz
  4. no module named 'social_core'
  5. linux卡死在选择内核界面,求助:am3352 linux内核启动时卡在 Starting kernel ...
  6. java语言执行过程_Java程序的运行过程(执行流程)分析
  7. 只读数据文件损坏恢复
  8. js的函数抖动和函数节流原理
  9. php移动文件的函数 move_uploaded_file()和copy
  10. Listary -- 高效率办公软件
  11. Linux vi命令详解与使用教程
  12. 计算机视觉入门到实战教程
  13. 宽带伤不起:大学教授称内地宽带费为香港400倍
  14. cissp怎么维持?cissp维持费用多少?
  15. cmd中start 命令用法
  16. Datawhale组队学习周报(第045周)
  17. 学计算机白头,关于「一夜白头」的科学解释!90%的人不知道!
  18. canal.admin、adapter和deployer的区别
  19. java中char数据类型的使用
  20. Metal每日分享,图像阀值素描滤镜效果

热门文章

  1. 近期14个“AI产品经理”职位JD推荐(覆盖北京、上海、深圳、成都、重庆、杭州)
  2. 使用百度地图生成器制作疫情小区地图
  3. iOS开发直播app-美颜滤镜GPUImageBeautifyFilter
  4. 核心指导网络由任务编码器_如何在现实世界中与实际用户一起指导您的编码和编码生涯...
  5. 115套精品简历.zip
  6. 极大似然估计法(Maximum likelihood estimation, MLE)
  7. 矩阵按键值在8位数码管流动显示
  8. Ubuntu安装兄弟打印机驱动
  9. 二、vue组件化开发(轻松入门vue)
  10. 下载mysql那个版本好_Mysql各个版本区别及官网下载