首先是对路由器文件系统的学习,看了一篇文章,这里直接贴上:路由器文件系统与提取
然后这个CTF题来自BUU:firmware
下载后得到一个bin文件,file一下:
从最上面的文章可以知道这是固件里的bin文件分析。
首先使用binwalk 提取出,得到一个Squashfs 文件系统的文件:
对于Squashfs 文件系统的文件,我们要使用firmware-mod-kit工具来进行解压。fiemware-mod-kit工具的安装
遇到的问题来了。跟着安装前置的文件后,在执行configure文件生成Makefile文件然后make编译生成可执行文件发生了问题:
其实上面的也有很多warning,但都能通过的,找了一篇文章了解原因,C语言中函数不声明也能使用
在函数声明方面C和C++则不同,C++语言中,在被调用之前未声明或定义是不允许的,而C语言是允许的。
然后就是出现error的原因寻找。。
最开始没仔细看出错原因,直接把一大段错误google和百度,但发现大家都没有出现这样的问题。。找了很久。。
然后开始仔细看出错的原因,即上面画红线的语句。最开始对collect2:error:ld return 1 exit status进行了搜索。找到解释:
意思就是:上面的undefined reference to — 导致出错。而undefined reference to — 出错的原因是我们在程序中使用了未定义的函数。
现在error原因清晰多了,google也更目标化了。然后找到了最终原因:
最后找到所有要编译的文件添加上:#include <sys/sysmacros.h>即可。
准备工作完成,开始对Squashfs 文件系统文件解压:
在firmware/firmware-mod-kit目录下,使用./unsquashfs_all.sh 需要解压文件的目录:
最后在解压得到文件目录:squashfs-root/tmp下得到我们想要的backdoor程序。然后脱壳,找string。
本文更多的是对自己解决问题一步一步的记录,也是路由器逆向的简单学习。