首页
社区
课程
招聘
[原创]固件解密
2023-1-6 17:48 12847

[原创]固件解密

2023-1-6 17:48
12847

目录

前言

最近玩固件有点上头,但是遇到了一个固件什么解不出来,属实懵逼,于是百度了下,发现被加密了,于是赶紧学了一手,应该够用了,大概意思是借助中间迭代版本,来找其中解密方法,但是发现该产品好多固件都在用同一个解密程序,对此比较好奇,于是尝试了下该程序能否解密其他固件

了解

《物联网安全漏洞挖掘实战》书里面有一个固件解密例子dir822,我就不再分析了,直接简述吧,在下载DIR822C1_FW315固件时,有一份pdf文件,大致意思是从DIR822C1_FW303进行过渡过来的

 

图片描述

 

如果你直接用binwalk解DIR822C1_FW315,结果如下

 

图片描述

 

使用binwalk解DIR822C1_FW303,解后查看/etc/templates/hnap/StartFirmwareDownload.php文件,第88行开始下载固件,代码我就不分析了,第114行是解密固件,可以看到用的是encimg程序

 

图片描述

 

用find定位了该程序位于/usr/sbin/encimg,在定位签名位于/etc/config/image_sign

 

图片描述

 

查看签名内容为wrgac43s_dlink.2015_dir822c1,最后执行encimg -d -i DIR822C1_FW315WWb02.bin -s wrgac43s_dlink.2015_dir822c1,在使用binwalk解就可以了

 

图片描述

思考

浏览了下最新固件,发现也存在encimg程序,也有签名,此时有一个想法,会不会都用该程序对固件解密,只是签名不一样

 

图片描述

 

于是又找到一个固件中间迭代版本DIR842C1_FW302b03,发现签名变动的位置只是43s和822c1,且字母都是小写

 

图片描述

验证

于是就开始玩了起来,就解了两次密,发现第二次解密,和第一次长度不一样,于是又尝试错误签名解了两次,发现没有变化依旧是6869168,这不妥妥的判断依据

 

图片描述

 

由于是用qemu进行的系统模拟,所以用sh脚本编写可能方便一点,于是临时在菜鸟教程学了一点语法

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
#!/bin/sh
num=`cat /bin/num`  #从00-100
chr=`cat /bin/chr#从a-z
a="te"
b="st"
 
echo "./usr/sbin/encimg -d -i $1 -s wrgac${a}_dlink.2015_dir$2"
echo "./usr/sbin/encimg -d -i $1 -s wrgac${a}${b}_dlink.2015_dir$2"
 
for i in $num
do
    b=`./usr/sbin/encimg -d -i $1 -s wrgac${i}_dlink.2015_dir$2`
    c=`./usr/sbin/encimg -d -i $1 -s wrgac${i}_dlink.2015_dir$2`
    if [ "$b" != "$c" ];then
        echo $i
        break
    fi
done
 
for i in $num
do
    for j in $chr
    do
            b=`./usr/sbin/encimg -d -i $1 -s wrgac${i}${j}_dlink.2015_dir$2`
            c=`./usr/sbin/encimg -d -i $1 -s wrgac${i}${j}_dlink.2015_dir$2`
            if [ "$b" != "$c" ];then
                echo $i.$j
                break
            fi
    done
done

于是就尝试了一次爆破dir822最新固件,结果失败了,我怀疑是encimg有问题还是固件有问题,于是重新换了encimg,发现结果依旧失败,于是尝试换固件,结果好了,应该是encimg对固件解密次数达到一定次数就被限制了,至于根据什么限制的,得用IDA对encimg反汇编看,这里我就暂时跳过,于是我就把固件放到另一个目录下,每次解密完后,在重新复制固件

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
#!/bin/sh
num=`cat /bin/num` 
chr=`cat /bin/chr`
a="te"
b="st"
 
echo "cp /bin/$1 ./"
echo "./usr/sbin/encimg -d -i $1 -s wrgac${a}_dlink.2015_dir$2"
echo "./usr/sbin/encimg -d -i $1 -s wrgac${a}${b}_dlink.2015_dir$2"
 
for i in $num
do
    `cp /bin/$1 ./`
    b=`./usr/sbin/encimg -d -i $1 -s wrgac${i}_dlink.2015_dir$2`
    c=`./usr/sbin/encimg -d -i $1 -s wrgac${i}_dlink.2015_dir$2`
    if [ "$b" != "$c" ];then
        echo $i
        break
    fi
done
 
for i in $num
do
    for j in $chr
    do
            `cp /bin/$1 ./`
            b=`./usr/sbin/encimg -d -i $1 -s wrgac${i}${j}_dlink.2015_dir$2`
            c=`./usr/sbin/encimg -d -i $1 -s wrgac${i}${j}_dlink.2015_dir$2`
            if [ "$b" != "$c" ];then
                echo $i.$j
                break
            fi
    done
done

可以看出执行结果出现了43.s,在看之前的签名中间确实是43s

 

图片描述

 

脚本搞定后,于是尝试解DIR842C1_FW313,失败了并没有成功,以为是自己脚本问题,于是手工尝试用822的encimg解842的,发现两次相同,我以为固件有问题,于是乎尝试用842中间版本解DIR842C1_FW313,发现两次不同,应该是encimg问题

 

图片描述

总结

随着更新,虽然文件相同,但是实现原理上应该多少有一点差别,才导致了失败。固件解密可以借助中间迭代版本,进行解密,或者不缺钱的话,可以直接买设备,利用uart方式进入固件,对其进行分析


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞3
打赏
分享
最新回复 (13)
雪    币: 7
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_来日方长 2023-1-8 12:35
2
0
师傅你好,在用binwalk解压DIR822C1_FW313WWb01.bin得到一个A25D4.lz4
文件 ,然后用lz4解压发现一直报错ERROR_reservedFlag_set,请问怎么回事?
雪    币: 451
活跃值: (795)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
混子1 2023-1-9 09:59
3
0
兄弟,你先用303固件里的encimg程序对其解密,在对其用binwalk,我在这边尝试是没有问题,你在试下,如果有问题,估计你的环境可能有问题
雪    币: 881
活跃值: (1457)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Y6blNU1L 2023-1-11 21:04
4
0
问下楼主,有《物联网安全漏洞挖掘实战》这本电子书吗
雪    币: 451
活跃值: (795)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
混子1 2023-1-12 11:56
5
0
没有,要不把书出给你
雪    币: 6847
活跃值: (3448)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
romobin 2023-1-12 12:32
6
0
好文,学习了 
雪    币: 881
活跃值: (1457)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Y6blNU1L 2023-1-12 12:39
7
0
混子1 没有,要不把书出给你[em_41]
大佬,有学习iot工控漏洞挖掘的学习路线或者相关书籍视频资料推荐一下的嘛
雪    币: 451
活跃值: (795)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
混子1 2023-1-12 13:15
8
0
这怎么说呢,我以我为例,我是先了解iot的一些漏洞,然后把自己不会的漏洞的原理搞清楚,再去学习固件的提取方法,以及解压模拟之类,接下来就是复现公开的固件漏洞,学习人家的挖漏洞思路,最后就是实战。希望对你有帮助
雪    币: 881
活跃值: (1457)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Y6blNU1L 2023-1-12 20:34
9
0
混子1 这怎么说呢,我以我为例,我是先了解iot的一些漏洞,然后把自己不会的漏洞的原理搞清楚,再去学习固件的提取方法,以及解压模拟之类,接下来就是复现公开的固件漏洞,学习人家的挖漏洞思路,最后就是实战。希望对 ...
好的,谢谢大佬解答
雪    币: 1918
活跃值: (313)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wangez8 2023-1-13 07:59
10
0
学习了
雪    币: 3473
活跃值: (6017)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
e*16 a 2 2023-1-13 09:25
11
0
厉害
雪    币: 451
活跃值: (795)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
混子1 2023-1-13 10:47
12
0
班门弄斧
雪    币: 53
活跃值: (603)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chenai2019 2023-1-13 11:05
13
0
这个固件好像有源码
雪    币: 123
活跃值: (141)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yajunz 2023-1-26 10:44
14
0
好文,学习了
游客
登录 | 注册 方可回帖
返回