首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于VxWorks的TP-Link路由器固件的通用解压与修复思路

0x00 固件来源 0x01 固件提取 binwalk分析 提取uBoot 提取主程序 确定主程序入口 0x02 符号修复 外部符号文件 脚本提取修复 0x03 后话 0x00 固件来源 宿舍有台自用的...先去官网下个最新版固件: 下完解压会得到类似这样一个bin文件: 0x01 固件提取 binwalk分析 直接binwalk跑一下会得到类似以下结果: ➜ TL-WDR7660 binwalk...一般不对其做进一步分析,只演示如何提取 uBoot通常由uImage header和紧随其后的一块LZMA compressed data组成,先要将他们提取出来: skip为起始位置,count为大小...匹配到二进制文件 ./15CBBA 尝试16进制下打开这个文件观察结构 前面是一堆8字节的符号信息: 后面是符号对应的字符串: 脚本提取修复 网上找到了现成的脚本(python2的,可以考虑移植一下...,效果还不错,注意修改以下几个变量: symfile_path: 刚刚搜索到的符号文件的路径 symbols_table_start : 符号表起始偏移,从16进制编辑器看出来是8(前8字节作用不清楚,

3.7K10

IoT漏洞研究(一)固件基础

1.2.2 RTOS 很多IOT设备都采用RTOS(实时操作系统)架构,固件本身就是一个可执行文件,不存在文件系统,启动后直接加在运行。...固件一般会分成许多section,为了方便解析,每个section会有指示头,头中可能会存放标志、大小和crc校验等信息,这些信息都为解打包提供依据。...比如可以先获取固件大小(十六进制),根据固件大小端拆分字节,一般是4字节,然后在固件头上寻找类似字节(固件头上的指示长度会减去头长度),接着从指示大小字节往后分析就可以澄清格式,和分析网络协议的过程很像...ARM固件为例,解开固件得到rootfs,下面是利用qemu模拟执行busybox: iot@attifyos ~/Document> cp (which qemu-arm-static) ....模拟系统 qemu的功能很强大,可以像在vmware、virtualbox中一样安装系统: $ qemu-img create -f qcow2 arm.qcow2 10G $ qemu-system-arm

2.4K10
您找到你想要的搜索结果了吗?
是的
没有找到

Vivotek 摄像头远程栈溢出漏洞分析及利用

我们发现,漏洞被曝出之后,在官网固件下载页面中的大多数固件均早于漏洞曝出时间,我们下载了几款摄像头的最新固件进行验证,发现漏洞依然存在,这意味着截止漏洞被曝出,Vivotek 官方对该漏洞的修复并不彻底...调试环境搭建 固件下载 由于手头上并没有 Vivotek 的摄像头,我们在官网下载其中一款摄像头固件,使用 `qemu` 模拟运行。...(注:官方在陆续发布各个版本的固件更新,可根据固件发布时间判断官方是否已经修复漏洞) 首先下载摄像头固件:http://download.vivotek.com/downloadfile/downloads...dest 缓冲区起始地址距离栈底 0x38 字节,栈上依次为 LR、R11-R4。Content-Length 长度超过 0x38 - 4 字节就会覆盖函数的返回地址 LR。...从前面的分析来看,只要我们构造 0x38 - 4 字节以上的数据,栈底的函数返回地址就会被我们劫持。

1.3K90

如何分析和解密已加密的路由器固件

现在,查看你的路由器品牌及型号信息,然后去对应厂商的官方网站下载你路由器对应的固件。下载完成之后,把固件文件丢到binwalk里,这样我们就可以在QEMU中模拟路由固件了。...它们是由随机十六进制字节组成的同质块吗?如果有的话,很有可能固件源码已经被带有静态密钥的简单异或域取代了。你可以看看,是否有一个十六进制字节比其他字节出现得更加频繁呢?...接下来,使用binwalk从v1.04B02固件中提取文件系统: 提取成功之后,我们就可以开始分析固件的更新过程了,并确定解密固件的方法。...幸运的是,我们可以使用QEMU执行跨架构chroot。...首先,我们需要将qemu-mipsel-static代码拷贝到固件root文件系统中的/usr/bin/目录,然后将加密固件拷贝到未加密固件的文件系统中。

1.7K41

加密固件之依据老固件进行解密

,这个时候可以尝试对直接使用qemu模拟解密程序跑起来,直接对固件进行解密。...最好保持解密可执行文件在老版本固件文件系统的位置不变,因为不确定是否使用相对或者绝对路径引用了什么文件,例如解密公私钥。 先查看可执行文件的运行架构,然后选择对应qemu进行模拟。...data2_len = htonl(IN_MEM[1]); // 从加密固件的1756地址起,计算data1_len个字节的SHA512,也就是解密后固件大小的消息摘要...156地址起,64个字节大小,和hash_buf中的值进行比较,也就是和加密固件头中预保存的真实加密固件大小的消息摘要比较 if ( !...先直接给出加密固件文件结构的结论,只展现出重要的Header内容,大小1756字节,其后全部是真正的被加密固件数据。

1.4K30

重现 TP-Link SR20 本地网络远程代码执行漏洞

漏洞环境搭建 以下所有操作都在 Ubuntu LTS 18.04 系统下进行 源码编译 QEMU Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机...deps.sh安装依赖的时 cramfstools 编译出错导致安装失败,如果你也遇到这个问题,不必理会,因为针对本文讲述的漏洞,这个包并不需要安装 从固件提取文件系统 从 TP-Link SR20 设备官网下载固件...squashfs-root 目录就是我们需要的固件文件系统 ?...此时 QEMU 虚拟机可以与宿主机进行网络通信 现在需要把从固件中提取出的文件系统打包后上传到 QEMU 虚拟机中 压缩固件文件系统目录下的整个文件 $ tar -cjpf squashfs-root.tar.bz2...使用 chroot 切换根目录固件文件系统 $ mount -o bind /dev ./squashfs-root/dev/ $ mount -t proc /proc/ .

1.6K30

物联网设备的几种固件仿真方式

一、固件仿真工具 - QEMU QEMU是比较老的开源固件仿真工具,现如今的很多仿真工具大多都是在此框架的基础上进行修改或是优化。...系统模式就是QEMU模拟一个完整的计算机系统,包括外围设备。 使用系统态仿真会比用户态慢很多,因为系统态仿真的开销是用户态的数倍。主要是因为内存地址转换、动态代码翻译、系统调用模拟这三个方面消耗较大。...下面是一个具体的示例来说明使用QEMU系统态模拟mips架构的Huawei HG532路由器固件,进而分析漏洞CVE-2017-17215。...系统态仿真首先要根据要仿真的路由器固件的CPU架构来确定下载的镜像,Huawei HG532这个路由器固件是mips架构的,可以下载QEMU需要的 Debian mips系统的两个文件镜像下载(https...主要包含执行固件指令而修改的内核、用户空间NVRAM库,用于仿真硬件NVRAM外设、用于从固件中提取文件系统和内核的解压器、小型控制台用来调试、超过42个供应商的固件支持这几个组件,作者还编写了可访问的网页

4.2K20

四个字节的安全 :一次固件加密算法的逆向分析

每个加密块的结构如下,其中有两个字段比较关键,一个是加密块的大小和加密后的数据。...然后程序会读取加密块的大小,并检查大小是否大于0x30000,同时检查数据块大小是否是0x40的倍数。...通过逆向分析,我们发现程序调用了下面这样一段代码: [1502762097860_2515_1502762098163.png] 从代码上看,0xF002C000这个地址已经超过当前固件的地址范围了...我们选择的模拟执行环境是Unicorn,一个基于qemu修改的CPU模拟器,支持各种语言的开发,下面是我们用python编写的模拟执行的代码。...最后我们发现整个设备固件的安全体系只依赖于四个字节的数据,在了解了相关的算法后,这种加密保护方式很容易被攻破。

5.6K30

TP Link SR20 ACE漏洞分析

将两个版本的固件都下下来,后续还会使用bindiff对二者进行比对,来看是如何修复该漏洞的。 接着是环境搭建,最主要的是qemu和binwalk的安装。...环境搭建的过程可以参考之前的文章,同时一键安装iot环境的脚本,也可以用用,虽然不全,但是也包含了一些,还需要手动操作的就是以系统模式运行qemu的时候还需要配置下网卡。...固件和环境都配好了以后,接下来就是解压固件,使用以下命令将漏洞版本的文件系统提取出来: binwalk -Me sr20.bin 然后查看文件类型: $ file ....接着使用qemu系统模式运行起来一个arm虚拟机,虚拟机的下载地址为https://people.debian.org/~aurel32/qemu/armhf/,运行命令为(需配置好网络,可参考文章):...chroot 切换根目录固件文件系统

1.4K20

Mysql 数据类型(整数、浮点数、定点数、字符串)【类型取值范围】

范围(-8388608~8388607) int(m) 4个字节  范围(-2147483648~2147483647) bigint(m) 8个字节  范围(+-9.22*10的18次方) 1:...)     m个数,d小数位 double(m,d) 双精度浮点型    16位精度(8字节)    m个数,d小数位 decimal 压缩的“严格”定点数 m+2个字节  设一个字段定义为float...decimal(m,d) 参数m<65 是个数,d<30且 d<m 是小数位。...个字符 text 可变长度,最多65535个字符 mediumtext 可变长度,最多2的24次方-1个字符 longtext 可变长度,最多2的32次方-1个字符 json JSON文本的最大长度取决有系统常量...该值仅在服务器进行存储的时候进行限制,在内存中进行计算的时候是允许超过该值的 希望能对大家有所帮助。

1.2K20

x86虚拟内存和qemu内存虚拟化

smaller than the amount of RAM addressed”,说是alias类型MemoryRegion适用于这种场景,大概意思就是qemu给guest提供的物理内存超过了guest...个人理解外设内存分为配置,BAR和其它内存,配置内存是PCI规范指定的,配置内存中指定BAR空间开始地址和长度,BAR空间中指定其它内存如常说的显卡显存大小。...设备写固件时在配置内存中指定BAR开始物理地址和长度,开机时bios遍历PCI总线发现PCI设备和内存,bios拼凑出物理地址空间,拼凑完有可能改变一个设备BAR的开始物理地址,把改变后的值重新写入配置内存中...32位CPU可以访问的物理内存最大是4G,但有了PAE就不一样了,一个CPU的虚拟地址空间还是4G,只是这4G不再局限于映射到物理低4G上了,可以访问的最大物理空间总和一定不会超过4G,的几级页结构换算出来的值一定是...guest和host是独立的系统,两者都有自己的虚拟地址和物理地址,唯一的关系就是把guest的物理地址映射到host的虚拟地址,也就是qemu进程的虚拟地址。

1.4K10

Ceph RBD和QEMU块设备qos测试

通过精确地配置 QoS 参数,管理员可以为不同的虚拟机、容器或应用分配适当的存储资源,确保系统的整体性能和响应性。...查看当前镜像的qos配置 rbd -p libvirt-pool config image ls scan.img|grep qos 查看存储池的qos配置,存储池的qos限制的是所有镜像的qos不超过设置的值...bps:每秒读取的字节数 write bps:每秒写入的字节数 使用fio进行读取写入测试 fio 是一个灵活的 I/O 性能测试工具,广泛用于评估磁盘和文件系统的性能。...--bs=4k: 块大小设置为 4KB。 --direct=1: 使用直接 I/O,绕过缓存。 --size=1G: 每个 job 测试文件的大小。...当然也可以使用qemu在块设备上做虚拟机磁盘的io限制,使用qemu做qos的优点是本地硬盘也可以进行限速,而ceph rbd的qos对象只是ceph集群中的rbd镜像。

42600

Ceph RBD和QEMU块设备qos测试

通过精确地配置 QoS 参数,管理员可以为不同的虚拟机、容器或应用分配适当的存储资源,确保系统的整体性能和响应性。...查看当前镜像的qos配置 rbd -p libvirt-pool config image ls scan.img|grep qos 查看存储池的qos配置,存储池的qos限制的是所有镜像的qos不超过设置的值...bps:每秒读取的字节数 write bps:每秒写入的字节数 使用fio进行读取写入测试 fio 是一个灵活的 I/O 性能测试工具,广泛用于评估磁盘和文件系统的性能。...--bs=4k: 块大小设置为 4KB。 --direct=1: 使用直接 I/O,绕过缓存。 --size=1G: 每个 job 测试文件的大小。...当然也可以使用qemu在块设备上做虚拟机磁盘的io限制,使用qemu做qos的优点是本地硬盘也可以进行限速,而ceph rbd的qos对象只是ceph集群中的rbd镜像。

38100
领券