|
菜鸡第一次发帖,本篇主要做个人记录用可能过于啰嗦,如果碰巧同时能对你有启发帮助不胜荣幸
在看到坛友把1.2元的音响玩出花后,也按奈不住一颗躁动的心,把某店铺中所有宝贝全部看了一遍,选了一些用得上感兴趣的下单,然后就翘首以盼等着收快递
网络摄像头外观:
还没拿到快递就在憧憬着这15元包邮的摄像头该有多香:夜视、云台、"又不是不能用的"720P:lol:,结果就emmm....拿快递、开箱、试机、翻车一条龙一气呵成了:cry::cry::cry:,理想美好但翻车猝不及防,通电后只有灯亮,不转、不响、复位键无反应、插网线无反应。群里问了下,只有几个老哥回应大多数都说没救了,摄像头翻车率挺高的。不甘心开始拆机
板子大概长这样,国科微的GK7102主控+通过USB与主控连接的mtk7601的无线模块。有一个SPI flash型号是25q128。喇叭坏没声了?还是电路接触有问题??看到预留了两个串口一样的焊接位置,试着焊上两排排针后分别试了下,似乎并没有神马输出,瞎鼓捣一番也就只能作罢了,再不甘心也只能丢一边吃灰了,基本上每隔几天都能看到群里有和我一样翻车在群里问的,同是天涯沦落人啊。
此后几天每天忙于搬砖也就无暇折腾,某晚(3-8)在群里学习聊天记录时突然看到有大神说
子木这个摄像头要拼手气,能用就赚到了,只有这公司的后台还活着。因为是返修机,好多都是丢固件,电机缺方向,渣图像,网络不通翻车了
脑子里瞬间风暴一番:emmm,丢固件?那能用编程器吗??摄像头的flash是SOP8的还是BGA来着???失忆记不清了诶,折腾了几年路由器,虽然编译还是只会一句make -j8 V=s,硬改只会拔掉焊盘,不过用编程器救砖倒是很熟练,要是SOP8的话没准可以救一手......想了想,然后选择了安详的睡觉:sleepy::sleepy:
第二天(3-9)又是搬砖的一上午,中午突然意识到,诶,好像下午有人强烈求一波DDoS?
给工头请了下午的假,贡献完自己一波算力,emmm
终于有空闲时间了,又到了快乐的聊天吹水学习时间,群里又开始有人问青青子木摄像头。小声哔哔:(长截图估计发出来会很怪异
大神指路,果断开撸,因为第一次焊的排针是直插式太高了,导致后来想装好压箱吃灰时后盖扣不上,就剪断了排针装入箱子了,拿出来再次拆机重焊为弯插式排针后,USB-ttl模块连接电脑,开机打印出来了启动信息,最后停在了kernel panic。主要是rootfs挂载的问题。终于看到希望了,也石锤是固件问题。用的ubifs文件系统,平时mipsel的路由器听说的多是YAFFS2、JFFS2、squash。第一次接触这个文件系统,报错提示如下图,
完整的上电打印输出在这:
https://www.codepile.net/raw/N5X3EeRB.txt
顺便附一下串口接线定义,我用的xshell连接串口,波特率115200 8n1
根据提示和群里前辈的提醒,先试着上电后打断正常启动进uboot使用setenv将bootargs改了,别的参数没动,但无论root=1f03:rootfs还是root=mtd3:rootfs都依旧kernel panic,虽然报错有那么一丢丢不同,如下图
私聊前辈
binwalk解bin这操作只在ctf智能家电攻击比赛的帖子中接触过,不过只用过一两次,我一般只会用binwalk分析隐写,没错我CTF也是菜鸡:mad:。用编程器把flash读取出来另存为bin文件,用binwalk分析是这样
binwalk -e后解压内容如下:
至此,无能为力了,把目前掌握的情况上传至QQ群文件,然后去微信群问问看看能不能找到一份好的bin烧录下对比下,不曾想还闹了乌龙 (长截图的怨念
物归原主了,这感觉就像你在国产区看见了一个视频好兴奋,点进去发现是自己:sad:
本以为就此凉凉,不想晚上时峰回路转。真正的大神终于出手了
由于这摄像头依靠ID区分,因此将聊天记录中ID相关打码,还望理解,后面会解释具体操作。
OK,本菜鸡开始对着前辈的成果慢慢磕,不得不说,真的佩服前辈,发过来的note.txt是笔记,一堆的链接,每个链接打开都有惊喜,我都好奇他是怎么找到这些资源的?他甚至注意到了淘宝有人卖相关SDK包,标价500,而他在github的一个issues中找到了这个SDK包?这怎么搜出来的?第一次觉得自己菜到搜索引擎都不会用了。
OK,终于说到正题了。总结如下:
该摄像头的固件在SOP8封装的25Q128 flash芯片中,部分机型是属于固件损坏的返修品,根文件系统rootfs损坏导致开机无法挂载从而不转不响复位键无反应,可以刷入正常机子上通编程器读取出来的固件来救活,但别人的固件中有9位数字和字母组成的ID。如果不修改别人的固件直接刷入,相当于直接用别人ID,那别人的APP也能看你家的小视频了,毕竟这摄像头目前仍然可以靠ID区分公网访问。因此需要修改ID,并且该产品的读取出来的bin是四位一组倒序存放的
首先、确定自己摄像头的确是固件损坏导致
- 最保险的办法是拆机焊上串口插针,观察上电打印输出信息,看是否错误也是下面这种 (串口在哪 怎么接 在前面有写
- [ 1.640000] VFS: Cannot open root device "ubi0:rootfs" or unknown-block(0,0): error -19
- [ 1.650000] Please append a correct "root=" boot option; here are the available partitions:
- [ 1.660000] 1f00 256 mtdblock0 (driver?)
- [ 1.660000] 1f01 64 mtdblock1 (driver?)
- [ 1.670000] 1f02 2048 mtdblock2 (driver?)
- [ 1.670000] 1f03 14016 mtdblock3 (driver?)
- [ 1.680000] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
复制代码
- 当然你也可以死马当活马医。直接用编程器怼。不过有编程器的坛友应该也有插针和USB-ttl模块吧,不太麻烦的话最好焊串口看一下
然后,拿到一份别人正常机子上读出来的bin文件 这里有两种类型固件,依靠文件大小就能区分
- 第一种固件是用编程器读取出来的原版。大小是16.0 MB / 16384KB / 16777216 字节,包含所有分区数据
- 第二种固件提取自第一种固件,大小是13.6 MB / 14016KB / 14352384 字节 ,只包含其中的rootfs根文件系统分区
这里两种类型固件都给出来一份,ID均是DCBAHGFEI。个人推荐使用第一种包含所有分区16MB的固件
注意:青青子木有好几种方案,我给出的只适用于国科微的GK7102主控+mtk7601无线模组方案的机器,请拆机确定自己是否是这种方案。同时希望坛友能共享下各自固件,记得共享前将读出的固件文件中自己的ID改掉,防止有人直接刷入或别有用心者。
第一种:MX25L12835F_DCBAHGFEI.bin :
链接: https://pan.baidu.com/s/1HkSrxKOGzK2sXYqDyqGtVw 提取码: niuw
第二种:DCBAHGFEI_rootfs.bin :
链接: https://pan.baidu.com/s/1BYSVW2_25lPn9ps8_Ooldw 提取码: 2p6y
无论哪种固件,都必须把固件内ID号修改为自己的ID!都必须把固件内ID号修改为自己的ID!都必须把固件内ID号修改为自己的ID!!
接着,修改固件中ID为自己的摄像头外壳或外包装上的ID
- ID由9位数字和字母组成,假如机子ID的是DCBAHGFEI(用16进制ASCII表示即 0x44 0x43 0x42 0x41 0x48 0x47 0x46 0x45 0x49),在bin中存储时,先给最后一位后面(也就是I后面)补上三个0x00的空位,0x00在ASCII码中不可见字符,为了演示用x代替,变成DCBAHGFEIxxx(用16进制ASCII表示即 0x44 0x43 0x42 0x41 0x48 0x47 0x46 0x45 0x49 0x00 0x00 0x00),长度变为12位。
- 前辈解释:“这主控烧写内容是swap的”,简而言之就是所有内容在flash中都是4位一组倒放的,因此我们将补空后的12位ID 4位为一组,12位ID变成 DCBA HGFE Ixxx ,并每组前后颠倒,变为ABCD EFGH xxxI(用16进制ASCII表示即 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48 0x00 0x00 0x00 0x49),以符合四位一组逆序存放的特性。也就是在正常机子读出来的bin中,形如DCBAHGFEI的ID会被存储为了ABCDEFGHxxxI (提醒下 :x是为了演示用的,它实际代表的是0x00
- 将你摄像头外壳上的ID用上面方式处理了,比如你自己ID是abcdefghi,(貌似ID没有小写字母,只为演示用,请用自己ID替换)大概推算过程类似于下图:
- 用16进制编辑器例如winhex等打开bin文件,以搜索文本方式搜索原ID,即搜索“ABCD”即可,找到原ID并修改,左边是ASCII,右边是字符,怎么改我就不说了吧,修改完再搜索一次,应该有三处ID,全部要修改。
然后,保存文件就可以刷入了 根据上面所选择的固件类型不同,刷入方法不同
- 第一种16MB的全分区数据固件,用编程器再写回flash即可,只要ID修改正确应该都能用了。
- 第二种13.6 MB的固件,因为只包含rootfs分区数据,需要在uboot下刷入,用串口将机器与电脑连接,用网线将机器与电脑连接,电脑本地连接设置为固定IP地址,这里举例设为192.168.50.101,将修改好ID的固件与tftp服务器软件放在同一个目录下,打开tftp.exe,打开串口终端,开机上电的同时狂按enter键打断正常启动进入uboot命令行,在uboot下输入下面命令,我献丑每行写了注释,一句命令输完回车一次
- setenv serverip 192.168.50.101
- #设置服务器(也就是电脑)IP地址
- setenv ipaddr 192.168.50.66
- #设置机器IP地址
- saveenv
- #保存环境变量
- mw.b c1000000 ff db0000
- #用ff填充内存从c1000000地址处开始长度db0000的区域
- tftp 0xc1000000 MX25L12835F_DCBAHGFEI.bin
- #此处MX25L12835F_DCBAHGFEI.bin修改为你预刷入的bin文件名
- #通过tftp从内存c1000000地址处将MX25L12835F_DCBAHGFEI.bin文件写入到内存
- sf probe 0
- #选择flash
- sf erase 250000 db0000
- #清空flash中从250000地址处开始长度db0000的区域
- sf write c1000000 250000 db0000
- #将内存从c1000000的数据写入到flash从250000处,长度总计db0000
复制代码
附两张tftp传输和烧写的图
tftp传输
写入flash
槽点在于:我手上机器如果不能正常开机过一阵会自动重启(不清楚是不是共性),即使是在uboot下都会重启,这一套tftp传输、擦除、写入的操作下来,由于比较耗时还没等执行完机器就会重启,复制粘贴都觉得慢,最后用来xshell的快捷按钮快速输入才刷入了,却还是kernel panic,报错是“ubi read vlime table:the layout volume was not found”,我看到前辈发我的笔记中也有这个错误的链接,不清楚前辈最后是怎么解决的,也不清楚是这种刷写法都会导致这个问题还是说仅仅是我的问题。
总而言之,如果你只是想救活摄像头,不建议用只包含rootfs分区数据的固件,用16M全固件编程器刷入简单粗暴有效。
刷入完成后应该不会kernel panic了,按常规步骤操作,长按重置能听到语音,也能转动,但似乎出不来wifi信号,观察串口打印输出似乎操作无线模块mtk7601发出wifi时有错误,具体的没研究,通过有线连接,电脑或手机处于同一网络中设置下无线密码应该就可以连上无线了。不行的话就拔电多试几次,我试了三次才连接无线成功。
欧克,整完这一套,时间是3月10日凌晨2点,还行,串口登录需要密码。明天再破密码吧,破shell密码比较迷写在二楼了。
放一张效果图,四点醒来截的图,夜视效果还不错
第一次发帖,不知道怎么设置类似html中的锚点可以快速定位到帖子中间,各位坛友可能受累看了一篇又长又水的帖子,无聊且繁琐叙述不清,还望海涵
再次对给予帮助与指导的群友和前辈表示感谢,本文都是前辈的研究成果,我代为整理归纳,感谢微信电子二群@晓光 QQ电子二群@囧·史密斯。
最后附上前辈笔记和binswap.c文件:
补充内容 (2020-3-12 23:10):
免M链接: https://pan.baidu.com/s/16nk9Wyxz9fGMct3HUbcY_w 提取码: 6fb6
next
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|