通过SD卡给某摄像头植入可控程序

0x01. 摄像头卡刷初体验

最近研究了手上一台摄像头的sd卡刷机功能,该摄像头只支持fat32格式的sd卡,所以需要先把sd卡格式化为fat32,另外微软把fat32限制了最大容量32G,所以也只能用不大于32G的sd卡来刷机。

这里使用32G的sd卡来刷

image-20231024165736603

win10格式化sd卡命令,X是sd卡所在磁盘名。

1

format /FS:FAT32 X:

准备就绪,将固件直FIRMWARE.bin放SD卡根目录下, 长按reset键刷机。但是后面发现并未成功,刷完后成砖了,摄像头未能正常启动,此时刷入的还是正常固件,还未做任何篡改,却直接刷成砖,确实有点出师不利,一时间不知哪个环节出了问题。

0x02. 救“砖”行动

摄像头刷机后没能正常启动,考虑接上串口,看看哪里出了问题。

image-20231024170148048

接上串口后,再次上电启动设备,观察到部分串口日志如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

T

IPL xxx

D-15

HW Reset

SPI 54M

IPL_CUST xxxx

MXP found at 0x0000f000

offset:00010000

XZ decomp_size=0x0004a19c

U-Boot 2015.01

WARNING: Caches not enabled

MMC:   MStar SD/MMC: 0

SF: Detected nor0 with total size 8 MiB

gpio debug MHal_GPIO_Pad_Set:603

gpio debug MHal_GPIO_Pad_Set:603

In:    serial

Out:   serial

Err:   serial

Net:   MAC Address E0:EF:02:88:AD:26

Auto-Negotiation...

Link Status Speed:100 Full-duplex:1

sstar_emac

gpio debug MHal_GPIO_Pad_Set:603

ddrsize 64

mtd_num 5, flash_size 0x00800000(8M)

To run up...

Using sstar_emac device

TFTP from server 192.168.1.99; our IP address is 192.168.1.10

Filename 'update.bin'.

Load address: 0x21000000

Loading: T T T T T T T T T T

Retry count exceeded; starting again

Using sstar_emac device

TFTP from server 192.168.1.99; our IP address is 192.168.1.10

Filename 'update.bin'.

Load address: 0x21000000

Loading: T T T T T T T T T T

从日志信息可以看出,摄像头IP地址为192.168.1.10,tftp服务器地址为192.168.1.99,设备尝试从tftp服务器加载名为update.bin的固件失败。说明之前卡刷没有成功的情况下,现在设备上电后会主动尝试利用uboot中的tftp功能从192.168.1.99地址加载固件,但此时并不存在192.168.1.99服务器,所以摄像头上电后一直卡在这里,无法正常启动。

尝试利用tftp刷机拯救摄像头,由于设备启动时并不能成功打断uboot进入shell,所以我们无法直接通过uboot shell去修改默认的tftp服务器ip和其他操作,只能在PC上搭建一个tftp服务器并修改ip为192.168.1.99,将待刷固件命名为update.bin并放到tftp服务器文件目录。

tftp服务器准备就绪,再次上电启动设备,观察到设备成功从192.168.1.99服务器下载到固件,并写入flash,救“砖”成功。

后面再次按照sd卡刷流程尝试刷入正常固件,终于没有再出现成“砖”的状况。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

T

IPL xxx

D-15

HW Reset

SPI 54M

IPL_CUST xxxx

U-Boot 2015.01

WARNING: Caches not enabled

MMC:   MStar SD/MMC: 0

SF: Detected nor0 with total size 8 MiB

gpio debug MHal_GPIO_Pad_Set:603

In:    serial

Out:   serial

Err:   serial

Auto-Negotiation...

sstar_emac

SF: Detected nor0 with total size 8 MiB

Erasing SPI flash..._spi_flash_erase: addr 0x30000, len 0x10000 100%(cost 248 ms)

Writing to SPI flash..._spi_flash_write to 0x30000, len 0x10000 from 0x23b01870 100%(cost 169 ms)

done

ddrsize 64

mtd_num 5, flash_size 0x00800000(8M)

To run up...

Using sstar_emac device

TFTP from server 192.168.1.99; our IP address is 192.168.1.10

Filename 'update.bin'.

Load address: 0x21000000

Loading: T #################################################################

         #################################################################

         #################################################################

         #################################################################

         #################################################################

         #################################################################

         #################################################################

         ##############################

         237.3 KiB/s

done

Bytes transferred = 7114336 (6c8e60 hex)

head_crc32 9ba634e1 crc32 9ba634e1

MXIC REMS: 0xC2,0x16

SF: Detected nor0 with total size 8 MiB

...

...

SF: 1507328 bytes @ 0x40000 Written: OK

head_crc32 4d5121d7 crc32 4d5121d7

...

...

Erasing SPI flash..._spi_flash_erase: addr 0x30000, len 0x10000 100%(cost 255 ms)

Writing to SPI flash..._spi_flash_write to 0x30000, len 0x10000 from 0x23b018d0 100%(cost 175 ms)

done

resetting ...

##  Booting kernel from Legacy Image at 21000000 ...

   Image Name:   MVX4##I6B0xxxxxxxx

   Image Type:   ARM Linux Kernel Image (lzma compressed)

   Data Size:    1494344 Bytes = 1.4 MiB

   Load Address: 20008000

   Entry Point:  20008000

   Verifying Checksum ... OK

   Uncompressing Kernel Image ...

[XZ] !!!reserved 0x21000000 length=0x 1000000 for xz!!

   XZ: uncompressed size=0x2e2000, ret=7

OK

Starting kernel ...

ox03. 分析卡刷固件校验

正常的sd卡刷流程大致如下,首先断电,将存储固件的sd卡插入摄像头,按住reset键,接通电源,此时摄像头就会加载sd卡固件进行刷机.在刷写固件的过程中,按住reset键的作用是强制摄像头进入IPL模式(Initial Program Loader),也称为恢复模式。这个模式允许设备加载存储在SD卡中的新固件并更新原有的固件。在IPL模式下,设备将不会自动运行已有的固件,而是等待从SD卡加载新的固件进行刷写。因此,按住reset键是为了保证设备能够正确地进入IPL模式,从而完成固件的更新。在这个日志中,可以看到 IPL(Initial Program Loader)已经成功地加载,并且检查通过。

IPL_CUST 固件的作用是启动 U-Boot,然后由 U-Boot 来加载并运行设备的操作系统。在这个过程中,U-Boot 会从 SD 卡上读取固件,然后将它加载到摄像头的内存中,并启动 Linux 内核。因此,加载 sd卡固件的程序在U-Boot中,从上面日志可以看到uboot启动固件时首先对固件做了crc校验,所以篡改固件后需要还需要考虑过crc校验才可能刷写成功。

从uboot固件中也确实搜到上面日志中的crc校验相关字符串。

image-20231025093614883

分析uboot中crc校验逻辑,逆向出修改固件后需要计算的相关字段。

image-20231027100003866

image-20231027093401072

0x04.定制文件系统

知道固件组成结构后,接下来就可以向固件文件系统中植入我们自己的程序,固件修改后,计算并调整固件中相应size和crc字段值,通过sd卡重新刷入设备。

使用buildroot编译一个包含telnet、ftp等功能的busybox,将新编译的busybox移植到摄像头原来的文件系统中。

下载Buildroot ,选择编译配置

1

make menuconfig

image-20231025101604650

image-20231025101618084

接着编译BusyBox,将telnetd编译进去

1

make busybox-menuconfig

image-20231025101638772

以上设置完成后执行make进行编译,编译完成后在当前目录生成output文件夹,生成的telnetd是链接到busybox的,所以这里直接将

生成的busybox移植到摄像头文件系统即可。将编译的busybox复制到固件文件系统/bin目录并命名为busybox_hack。这里解包固件时记得要用root权限,因为摄像头是root用户,busybox_hack拷贝到摄像头文件系统中时也要注意修改文件的所属用户和组和其他文件一致。

将busybox_hack添加到启动项中/etc_default/init.d/,并启动telnetd,-l 参数将其链接到/bin/sh,这样直接免密登录。

image-20231027093540652

重新打包文件系统

1

sudo mksquashfs ./squashfs-root/ out.fs -comp xz -b 64K -noappend

其中 ./squashfs-root 是待打包的目录,out.fs 是想要重新打包的文件名。-comp xz 告诉 mksquashfs 使用 xz 压缩算法,-b 64K 告诉 mksquashfs 使用 64K 的块大小。-noappend 告诉 mksquashfs 不要将新文件附加到现有文件中。

将out.fs覆写在原固件文件系统处并调整固件中相应size和crc字段值。

1

dd if=out.fs of=target.bin conv=notrunc bs=1 seek=1494600

1

2

3

4

5

if=out.fs 表示输入文件为 out.fs。

of=target.bin 表示输出文件为 target.bin

conv=notrunc 表示不截断输出文件,即保留输出文件中的原有内容。

bs=1 表示每次读写一个字节。

seek=1494600 表示在输出文件中的偏移 1494600 处开始写入,这就相当于将输入文件拼接到输出文件的偏移 1494600 

最后通过sd卡刷入固件,文件系统成功启动,telnetd也成功启动,通过telnet直接连接到摄像头shell。

image-20231027093655047

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/189637.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker-compose安装es以及ik分词同义词插件

目录 1 前言 2 集成利器Docker 2.1 Docker环境安装 2.1.1 环境检查 2.1.2 在线安装 2.1.3 离线安装 2.2 Docker-Compose的安装 2.2.1 概念简介 2.2.2 安装步骤 2.2.2.1 二进制文件安装 2.2.2.2 离线安装 2.2.2.3 yum安装 3 一键安装ES及Kibana 3.1 yml文件的编写…

【Redis系列】Redis的核心命令(上)

哈喽,大家好,我是小浪。那么上篇博客教会了大家如何在Linux上安装Redis,那么本篇博客就要正式开始学习Redis啦,跟着俺的随笔往下看~ 1、启动Redis 那么如何启动Redis呢?最常用的是以下这个命令: redis-cl…

堆的应用-----Top k 问题

目录 前言 Topk问题 1.问题描述 2.解决方法 3.代码实现(C/C) 前言 在人工智能算法岗位的面试中,TopK是问得最多的几个问题之一: 到底有几种方法? 这些方案里蕴含的优化思路究竟是怎么样的? 为啥T…

如何用Excel软件制作最小二乘法①

一、用自带的选项(不推荐),因为感觉只是近似,虽然结果一样 1.在Excel中输入或打开要进行在excel中输入或打开要进行最小二乘法拟合的数据,如图所示。 2.按住“shift”键的同时,用鼠标左键单击以选择数据&a…

电路综合-基于简化实频的SRFT集总参数切比雪夫低通滤波器设计

电路综合-基于简化实频的SRFT集总参数切比雪夫低通滤波器设计 6、电路综合-基于简化实频的SRFT微带线切比雪夫低通滤波器设计中介绍了使用微带线进行切比雪夫滤波器的设计方法,在此对集总参数的切比雪夫响应进行分析。 SRFT集总参数切比雪夫低通滤波器综合不再需要…

typora保护机制与注册逆向分析

、起因 一直比较喜欢Typora的简洁与美观(尝试过用 vscode 搭配插件编辑 markdown 文件,体验还是要差一些的),突然发现自己windows机器上很久前安装的typora不让用了,提示: 幸好原始安装文件还在&#xf…

ASP.NETWeb开发(C#版)-day1-C#基础+实操

目录 .NET实操:创建项目执行 C#基础语法数据类型变量实操001_变量如何在一个解决方案 中创建另一个项目实操002结构实操003-if else实操004-多分支多行注释按钮实操:循环 面向对象基础如何在同一个项目下创建新的.cs文件实操-类的定义与访问实操-练习实操…

55基于matlab的1.高斯噪声2.瑞利噪声3.伽马噪声4.均匀分布噪声5.脉冲(椒盐)噪声

基于matlab的1.高斯噪声2.瑞利噪声3.伽马噪声4.均匀分布噪声5.脉冲(椒盐)噪声五组噪声模型,程序已调通,可直接运行。 55高斯噪声、瑞利噪声 (xiaohongshu.com)

深度解剖Linux权限的概念

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:牢记Linux权限的概念。 > 毒鸡汤:你…

短视频矩阵seo系统源码搭建----技术定制化开发

一、需要遵循一下技术开发步骤: 1. 确定需求和功能:明确系统的主要目标和需要实现的功能,包括关键词研究、短视频制作、外链建设、数据分析、账号设置优化等方面。 2. 设计系统架构:根据需求和功能确定系统的架构,包…

windows上 Nexus 批量上传 maven依赖npm依赖

windows上 Nexus 批量上传 maven依赖/npm依赖 前言:windows系统上要有git环境,不然sh文件执行不了 1.批量上传maven依赖 设置脚本,把脚本放在依赖包的根目录执行,脚本名为upload.sh #!/bin/bash# 定义变量 while getopts &quo…

小程序中如何设置门店信息

小程序是商家转型升级的利器,小程序中门店信息的准确性和完整性对于用户的体验和信任度都有很大的影响。下面具体介绍门店信息怎么在小程序中进行设置。 在小程序管理员后台->门店设置处,可以门店设置相关。主要分为2个模块,一个是门店级…

智能一体化管网水位监测仪怎么样?

城市排水管网是城市正常运行的关键环节,这是地上和地下通道的连接点,一旦出现问题便会影响城市生命线建设的工程进展。在复杂的地下管道内想要了解水位数据,对于政府部门来讲是一个管理难题。如果可以采取智能产品在其中发挥作用,…

Java Web——前端HTML入门

目录 HTML&CSS3&JavaScript简述 1. HTML概念 2. 超文本 3. 标记语言 4. HTML基础结构 5. HTML基础词汇 6. HTML语法规则 7. VS Code 推荐使用的插件 8. 在线帮助文档 HTML&CSS3&JavaScript简述 HTML 主要用于网页主体结构的搭建,像一个毛坯…

低价寄快递寄件微信小程序 实际商用版 寄快递 低价寄快递小程序(源代码+截图)前后台源码

盈利模式 快递代下CPS就是用户通过线上的渠道(快递小程序),线上下单寄快递来赚取差价,例如你的成本价是5元,你在后台比例设置里面设置 首重利润是1元,续重0.5元,用户下1kg的单页面显示的就是6元…

Go 14岁了

今天我们庆祝Go开源十四周年!Go度过了美好的一年,发布了两个功能齐全的版本和其他重要的里程碑。 我们在2月份发布了Go 1.20,在8月份发布了Go 1.21,更多地关注实现改进而不是新的语言更改。 在Go 1.20中,我们预览了配置…

【论文精读】DMVSNet

今天读的是一篇发表在ICCV 2023上的文章,作者来自华中科技大学。 文章地址:点击前往 项目地址:Github 文章目录 Abstract1 Introduction2 Relative Work3 Motivation3.1 Estimated bias and interpolated bias3.2 One-sided V.S. Saddle-shap…

Android修行手册-POI操作Excel实现超链接并且变为蓝色

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&…

黑洞路由的几种应用场景

第一种在内网中产生环路: 这种核心交换机上肯定写一条默认路由 0.0.0.0 0 10.0.0.1 出口路由要写一条192.168.0.0 16 10.0.0.2 如果出口路由访问一条不存在的内网网段,又或者访问的那台终端停机了,那就会产生三层环路,数据包在…

如何导出PPT画的图为高清图片?插入到world后不压缩图像的设置方法?

期刊投稿的时候,需要图片保持一定的清晰度数,那么我们怎么才能从PPT中导出符合要求的图片呢? 对于矢量图绘图软件所画的图,直接导出即可。 而PPT导出的图片清晰度在60pi,就很模糊。 整体思路: PPT绘图——…