数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 8039|回复: 83

[影音] 青青子木N5063-720p摄像头修复+固件研究及菜鸡的自我救赎~感谢前辈指路

    [复制链接]
发表于 2020-3-10 18:19:02 | 显示全部楼层 |阅读模式

马上注册,认识更多玩家好友,查阅更多资源,享有更多功能

您需要 登录 才可以下载或查看,没有帐号?立即注册 微信登录

x
菜鸡第一次发帖,本篇主要做个人记录用可能过于啰嗦,如果碰巧同时能对你有启发帮助不胜荣幸

在看到坛友把1.2元的音响玩出花后,也按奈不住一颗躁动的心,把某店铺中所有宝贝全部看了一遍,选了一些用得上感兴趣的下单,然后就翘首以盼等着收快递

订单

订单


网络摄像头外观:
O1CN016VAFnQ1IeUAWE3uky_!!1799820918.jpg
O1CN01wY7MOm1IeUAYnpgIK_!!1799820918.jpg

还没拿到快递就在憧憬着这15元包邮的摄像头该有多香:夜视、云台、"又不是不能用的"720P,结果就emmm....拿快递、开箱、试机、翻车一条龙一气呵成了,理想美好但翻车猝不及防,通电后只有灯亮,不转、不响、复位键无反应、插网线无反应。群里问了下,只有几个老哥回应大多数都说没救了,摄像头翻车率挺高的。不甘心开始拆机

-4b727e09f32bb94.jpg
板子大概长这样,国科微的GK7102主控+通过USB与主控连接的mtk7601的无线模块。有一个SPI flash型号是25q128。喇叭坏没声了?还是电路接触有问题??看到预留了两个串口一样的焊接位置,试着焊上两排排针后分别试了下,似乎并没有神马输出,瞎鼓捣一番也就只能作罢了,再不甘心也只能丢一边吃灰了,基本上每隔几天都能看到群里有和我一样翻车在群里问的,同是天涯沦落人啊。




此后几天每天忙于搬砖也就无暇折腾,某晚(3-8)在群里学习聊天记录时突然看到有大神说
子木这个摄像头要拼手气,能用就赚到了,只有这公司的后台还活着。因为是返修机,好多都是丢固件,电机缺方向,渣图像,网络不通翻车了

脑子里瞬间风暴一番:emmm,丢固件?那能用编程器吗??摄像头的flash是SOP8的还是BGA来着???失忆记不清了诶,折腾了几年路由器,虽然编译还是只会一句make -j8 V=s,硬改只会拔掉焊盘,不过用编程器救砖倒是很熟练,要是SOP8的话没准可以救一手......想了想,然后选择了安详的睡觉

第二天(3-9)又是搬砖的一上午,中午突然意识到,诶,好像下午有人强烈求一波DDoS?

我从来没见过这么奇怪的要求

我从来没见过这么奇怪的要求

给工头请了下午的假,贡献完自己一波算力,emmm

很惭愧,就做了一点微小的工作

很惭愧,就做了一点微小的工作

终于有空闲时间了,又到了快乐的聊天吹水学习时间,群里又开始有人问青青子木摄像头。小声哔哔:(长截图估计发出来会很怪异 1583808455433.jpeg
大神指路,果断开撸,因为第一次焊的排针是直插式太高了,导致后来想装好压箱吃灰时后盖扣不上,就剪断了排针装入箱子了,拿出来再次拆机重焊为弯插式排针后,USB-ttl模块连接电脑,开机打印出来了启动信息,最后停在了kernel panic。主要是rootfs挂载的问题。终于看到希望了,也石锤是固件问题。用的ubifs文件系统,平时mipsel的路由器听说的多是YAFFS2、JFFS2、squash。第一次接触这个文件系统,报错提示如下图,
-485374d1eef96245.png

完整的上电打印输出在这: N5X3EeRB.rar (4.64 KB, 下载次数: 7)

打赏

参与人数 16M币 +339 收起 理由
llcc + 20
wys111 + 20 優秀文章
28674500 + 10 原創內容
xiaoxuanfeng + 20 謝謝分享
tjjtds1 + 21 謝謝分享
zdfcg + 20 優秀文章
Meise + 50 優秀文章
fzguo + 20 優秀文章
pleianth + 18 感谢分享,以资鼓励!
cushion + 20 原創內容

查看全部打赏

 楼主| 发表于 2020-3-10 18:21:38 | 显示全部楼层
续上文,摄像头正常工作后,发现通过串口终端登录还需要密码。能用是能用拿不到shell总感觉缺点什么,而且昨天前辈给的binswap.c 代码倒是勉强能看懂,是在四位为一组逆序,但在整个救机过程中并没有太大用,由此还有两个问题没解决:这binswap到底咋用的?  怎么破密码?

先整密码破解,先礼后兵,先试试能不能温柔的解决密码问题,再次翻出昨天前辈通过QQ甩给我的第一个链接https://paper.seebug.org/649/,再次进入uboot,按照教程setenv 将sfboot 中 init 字段的值改为 /bin/sh,saveenv并重启,然而并没有出现期待的的能编辑 /etc/shadow 文件的shell,而是正常开机了,依旧需要密码。看来这条路暂时行不通。


回想起昨天前辈晒得截图中有几个bin文件文件名有nopasswd字样,难道他把固件改为不用密码了?看了看note.txt,有一段这样的命令

image.png

了然,大概理解就是将bin中的文件系统挂载到电脑上改完再保存为bin文件,问题又来了?怎么从编程器读出来16M的bin中提取出来rootfs部分?前辈给我的时候就是两种bin,一种16M全分区,一种13.6M单rootfs分区,他是怎么提取出来的?我将16M的bin用binwalk之前也试过了也解不开啊,百度了一下并没有啥实质性进展,又回去翻聊天记录,看着看着有点怀疑,索性是骡子是马拉出来遛遛,试试不就知道了,右键打开cmd 启动wsl的bash,gcc把binswap.c编译一次,运行加上16M的bin文件文件名
image.png

出来了一份out.bin,用hexcmp 16进制与原文件对比,发现全部四位为一组逆序了,半信半疑把这份逆序后的bin文件用binwalk分析,露出尾巴了
image.png

果断binwalk加文件名 -e全部解压出来
image.png

文件都是以地址值命名,最后一个250000.ubi就是ubifs格式的rootfs,将250000.ubi拷贝出来,为了验证提取到的是rootfs,因为之前将整个16M固件逆序后得到这个250000.ubi,将250000.ubi再逆序一次逆回去,再与前辈发我的单rootfs固件进行hexcmp,除过ID部分外完全一致,证实的确是这样提取出来的rootfs。也就是:先将整个16M的bin四位一组逆序,然后binwalk才能识别,用binwalk解压再逆序回去就能得到rootfs。
image.png

拿到rootfs了。准备挂载到电脑,然后修改/etc/shadow 文件,将前辈笔记中的命令一条条粘贴执行
  1. sudo apt-get install mtd-utils
  2. #kali自带了
  3. sudo modprobe mtdblock

  4. sudo modprobe mtdram total_size=14336 erase_size=64

  5. sudo dd if=ABCDEFGHI_rootfs.bin of=/dev/mtdblock0
  6. #ABCDEFGHI_rootfs.bin为rootfs文件名
  7. sudo modprobe ubi

  8. mount -t ubifs /dev/ubi0_0 /mnt/rootfs/
  9. mount -t ubifs ubi0_0 /mnt
复制代码

image.png

执行到mount时出错了,提示mount: /mnt/rootfs: unknown filesystem type 'ubifs'.   网上继续百度谷歌,一如既往的依旧没解决问题,我快要对我自己的搜索能力失望了,然后把笔记中给的几个链接翻看了下,发现执行 ls -la /dev/ubi*  后并没有ubi0_0设备,mtd0是有的,怀疑是 modprobe ubi 语句,看了看参考链接,输入据说作用相同的一句命令   ubiattach /dev/ubi_ctrl -m 0 后再mount终于成功了。成功挂载到mnt下的文件夹中
QQ截图20200310130652.png

打开/etc/shadow一看,傻眼了,不懂得怎么改,百度一番似乎我这个shadow文件中密文已经被清空了?太菜以至于都没接触过shadow文件,百度找了几个据说能解密shadow的程序,例如这个https://www.linuxidc.com/Linux/2011-09/42617.htm,下载回来编译运行没啥用,试着让它解密kali系统的shadow也没啥用。emmm。
image.png

进一步在百度入门,了解到这似乎远不是改个文件那么简单,说的好像也对,看来这条路只能作罢。
正在一筹莫展之际,开始一步步回想自己哪里没做对,为什么前辈就能nopasswd,我就整不出来,返回头去看之前在uboot中setenv 修改sfboot试图拿shell的部分,去看为啥修改了sfboot还能正常启动,sfboot修改没生效?然后翻完了也没找见sfboot在哪传递了只看到bootargs。恶从心头起胆向两边生。 直接改bootargs如何?把bootargs参数复制一份留存,把其中init=/linuxrc改为init=/bin/sh,saveenv,拔电重启,这下居然真拿到shell了,万万没想到,柳暗花明又一村。
拿到shell也就不执著shadow文件了,教程说这样的shell不完整,管他完整不完整,不试试怎么知道,直接执行passwd root,嘿,能用!!
QQ图片20200310184829.png

也就是:进入uboot,setenv将bootargs语句中init=/linuxrc改为init=/bin/sh,saveenv,拔电重启,即可在shell中passwd root修改密码,当然,改完要记得再进uboot把bootargs改回来让正常开机
重启 登录一气呵成,就是不停的打印输出有点烦,终端都乱了

top看一下
image.png

netstat 看一下端口
image.png

这些端口有啥用还没研究,毕竟今天还是要搬砖的

至此,整个青青子木N5063敞开了心扉,所有相关的代码都在/qqzm文件夹下,/root/.ash_history 还能翻到公司开发人员输的命令。作为一个入门的菜鸡,一路追随着前辈的步伐走的磕磕绊绊,但我觉得,这一套uboot、rootfs、ubi文件系统及在Linux上的挂载、bootargs知识的学费只收费15块,绝对是赚了,这年头,找到一地15块钱能学这么多东西挺好的。

下一步有空看看能不能解开通讯协议。看能不能搞清楚通讯视频是哪个端口?登录认证怎么做?云台转向又是怎么传输的?如果有幸能搞懂,可以自己做一个安卓客户端或WEB页面。将L1.zmvideo.net等官方域名在路由器上屏蔽,自己做内网穿透,就能避开官方停止维护和一些隐私隐患。
再次感谢前辈,当然,也感谢青青子木。

next

打赏

参与人数 2M币 +12 收起 理由
qlkf + 8 牛B
xiaoqi233 + 4

查看全部打赏

回复 支持 4 反对 0

使用道具 举报

发表于 2020-3-12 22:16:33 | 显示全部楼层
帅,玩得够硬核。我也撸了5个,一个翻车,四个能用。很佩服你这种探索精神。
回复 支持 反对

使用道具 举报

发表于 2020-3-12 23:33:21 | 显示全部楼层
本帖最后由 fpl681010 于 2020-3-12 23:35 编辑

牛!
学到了binwalk,解固件密码。
推而广之 估计一堆Iot设备都通用
等有时间找个别的摄像头试一下。我这里之前拿到过几个找不到app的摄像头。等着研究一番。
我Linux能力太差是硬伤。顶多会个ls cp shell pm install 其他的现用现查。 Ttl破解电视盒子学到的。
刷路由太偷懒了。直接傻瓜包,或者编程器刷入。难得用这些命令。平时捣鼓Windows较多 对linux近乎白痴。
回复 支持 反对

使用道具 举报

发表于 2020-3-12 23:38:01 | 显示全部楼层
这种硬件设备最大的作用就是交流学习。那个店主做了一个大好事,办了一个物联网交流沙龙。让感兴趣的人拿到共同的硬件,一起交流学习。
回复 支持 反对

使用道具 举报

发表于 2020-3-12 23:51:57 | 显示全部楼层
楼主引用的物联网破解的文章太好了。在本站好长时间没看到这么有意义的文章了。所谓的破解盒子,路由器刷机全是烂大街的东西。好歹有点新技术可以折腾
回复 支持 3 反对 0

使用道具 举报

发表于 2020-3-12 23:59:59 | 显示全部楼层
能拿到原始密码,甚至密码算法最好。这样就能通杀全网的摄像头了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 00:54:19 来自手机浏览器 | 显示全部楼层
fpl681010 发表于 2020-3-12 23:59
能拿到原始密码,甚至密码算法最好。这样就能通杀全网的摄像头了

你是说终端密码?那个是Linux的,网上搜有相关分析,Linux遍布全世界嵌入式智能设备很多地方都在用。那个要是能被轻易破解,就有点恐怖了。
回复 支持 反对

使用道具 举报

发表于 2020-3-13 13:09:13 | 显示全部楼层
大哥 突然想进微信群 交个朋友? 固件逆向让我这个人心驰神往,我最多玩个杂项
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 13:34:42 | 显示全部楼层
说下目前尝试,用于抛砖引玉,可以有供有想法的大神们参考。

安卓手机上抓取客户端的数据包,使用的是HttpCanary,目前看来没有什么有用的信息,客户端会向服务端提交一个TCP包包含一段基础信息包括手机型号、app版本和一些类似id的数据。随后几个UDP包select dev +摄像头id,几次select dev后服务端会返回一个数据包,这个数据包有点东西。顺带使用dig/nslookup看了下域名解析,能解析成功的话试图ping一次,为了防止服务器禁止ping导致的ping失败,因此无论ping是否成功继续使用nmap扫描了下端口是否开放,本来可以用nmap一步到位太慢了,整个数据包及对应扫描结果如下
  • 包含客户端和摄像头nat穿透后的ip+端口
  • 一个形如"DCBAHGFEI.zmvideo.net"这样由摄像头id+子木域名组成的二级域名   
    DNS解析失败没有A记录
  • 两个看起来像是自建的DNS服务器形如ns1.zmdnserver.net:53                          
    DNS解析失败没有A记录

    image.png

    对于这个DNS有点迷茫没看懂,猜测是自建用于将第2中的"由摄像头id+子木域名组成的二级域名"临时解析的?也不知道这样判断DNS服务器的DNS没有A记录就是失败的标准对不对,平时DNS服务器都直接是IP地址,一个DNS服务器给了域名形式所以用之前还得先DNS查询一次??只有一个DNS的时候那不套娃死锁了吗?
  • 两个形如l1.zmdvideo.net:6100 暂不清楚是用于nat握手还是视频中转的域名      
    DNS解析成功  ping超时  UDP扫描结果:   均为open|filtered  TCP扫描结果 l1.zmdvideo.net:6100为 open ,l2.zmdvideo.net:6100为 filtered


    image.png

大概这个数据包就是外网访问的关键?个人猜测参考之前用过frp和zerotier等内网穿透软件,整个外网流程应该是:利用nat打洞,如果nat打洞失败/或者有公网IP不用打洞??,使用自建DNS服务器zmdnserver.net 解析由摄像头id+子木域名组成的二级域名,如果都失败,转为由l1.zmdvideo.net:6100和l2.zmdvideo.net:6100进行转发??




在电脑客户端的设置-高级设置选项卡中,有stun server服务器选择框,这个之前略有耳闻,就是用来帮助nat双方打洞的

QQ截图20200311090955.png

然而个人尝试无论选择哪个,IbStaust都提示"STUN:unknownerro(1)  Route:Unkonw(2)",然而使用NatTypeTester软件测试我当前nat类型时,使用相同的stun服务器却可以正常解析。不清楚是超时还是别的原因。

QQ截图20200311090656.png


顺带在电脑端软件中发现有默认端口的定义和设置选项,似乎可以有web端口??还可以自定义端口,在我本地播放摄像头图像时的确是连接摄像头9300端口。

image.png




把固件里的qqzm下的app文件夹里的可执行程序复制一份,丢进IDA里F5看看伪代码,单看名字最有价值的应该是main,可惜F5不出来,后续再研究,倒是有一个exec_shell,F5后粗略看了下,在9400端口开本地socket,select监听,recv()收到的内容用system执行,满头黑线中,这么玩??确定不会被别人利用???上次netstat -ant时就注意到有一个9400端口从这出来的。

main文件用IDA F5
image.png

exec_shell
image.png


APP文件夹打包一份,有需要的可以研究下: app.zip (3.99 MB, 下载次数: 1)
回复 支持 反对

使用道具 举报

发表于 2020-3-13 17:00:19 | 显示全部楼层
本帖最后由 fpl681010 于 2020-3-13 17:02 编辑
muzhi 发表于 2020-3-13 00:54
你是说终端密码?那个是Linux的,网上搜有相关分析,Linux遍布全世界嵌入式智能设备很多地方都在用。那个 ...

网上的分析都是关于ssh,telnet弱密码的。就那么几种弱密码。还有几种已知漏洞。被用于botnet。
回复 支持 反对

使用道具 举报

发表于 2020-3-13 17:32:57 | 显示全部楼层
muzhi 发表于 2020-3-10 18:21
续上文,摄像头正常工作后,发现通过串口终端登录还需要密码。能用是能用拿不到shell总感觉缺点什么,而且 ...

这是向着顶级骇客攀登的节奏啊。佩服楼主不屈不挠的精神。
回复 支持 反对

使用道具 举报

发表于 2020-3-13 18:30:21 | 显示全部楼层
大佬 群号发一下呗  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 19:25:04 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 19:29:12 | 显示全部楼层
9400端口随便写个TCP socket连上去,没任何验证,在这边输指令那边就会执行,暂时发现输的指令不能有空格,每句指令以分号结尾,这算什么?远程调试工具还是后门?
9400.gif
回复 支持 反对

使用道具 举报

发表于 2020-3-13 20:37:28 | 显示全部楼层
膝盖献上,高手。
回复 支持 反对

使用道具 举报

发表于 2020-3-13 20:39:16 | 显示全部楼层
muzhi 发表于 2020-3-13 19:25
可以看一下这几个讨论?看来我误打误撞找的的方法也是别人常用的

https://blog.csdn.net/coderwuqiang/a ...

谢谢,不错的参考资料
回复 支持 反对

使用道具 举报

发表于 2020-3-13 20:40:28 | 显示全部楼层
muzhi 发表于 2020-3-13 19:29
9400端口随便写个TCP socket连上去,没任何验证,在这边输指令那边就会执行,暂时发现输的指令不能有空格, ...

嘘……低调。最好隐去一些东西。具体方法自己摸索。否则一大堆人沦为黑客盘中餐了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-14 15:05:28 | 显示全部楼层
雅哲 发表于 2020-3-13 18:30
大佬 群号发一下呗

群号?QQ群和微信群都是老王店铺的粉丝群  不清楚论坛是否允许放群号,如果不允许还请管理改正,电子爱好者交流群②群 376292003  微信群邀请容易失效就不放了  在QQ群里让群友邀一下就行
回复 支持 反对

使用道具 举报

发表于 2020-3-14 19:23:05 | 显示全部楼层
这种摄像头你找我啊,我送你玩,我还有好几个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

Archiver|手机版|小黑屋|关于我们|联系我们|网站条款|数码之家 ( 闽ICP备05031405号 )

GMT+8, 2020-6-4 16:27 , Processed in 0.187200 second(s), 17 queries , Redis On.

Powered by Discuz!

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表