记一次固件解密学习--X软路由

电子说

1.3w人已加入

描述

 

作者:ch0ing

定位加密

官网直接提供这么多格式的系统下载

Linux

直接下载的bin文件binwalk梭哈不开。

下一个ISO回来装成虚拟机,咱还收拾不了你了吗。

用7-zip打开.vmdk文件。

rootfs脱出来解不开。啊这,不按套路出牌啊。

Linux

初步怀疑是grub 或者vmlinuz被厂商进行了修改,加入了解密操作。

grub配置关键代码

 

menuentry "xxxxxi RouterOS" "$ikversion" "$uuid" "$default" {    linux /boot/vmlinuz root=/dev/ram0 crashkernel=128M@64M rootfstype=ext4 rootwait console=tty0 bootguide=hd intel_idle.max_cstate=0 processor.max_cstate=0 ikversion=$2 diskuuid=$3 grub_menu_id=0 grub_default=$4    initrd /boot/rootfs}

 

从磁盘文件中解出grub和vmlinuz看一下

Linux

好吧,看起来就是像大雄同学对内核加了一些逻辑。然后来解密rootfs。

分析加密

分析思路为对着linux的内核代码,看反编译中添加了什么代码逻辑来解密。

常规套路,要想分析,先搞点报错字符串出来。

将vmdk挂载到ubantu,rootfs内容随便改改,然后启动,可以抓到报错关键字.”Invaild rootfs”

有了关键字就好办了。

使用工具:

https://github.com/torvalds/linux/blob/master/scripts/extract-vmlinux

将bzImage提取为vmlinux文件。

然后搜索关键字找到调用点,通过函数中其他得打印字符串定位加密逻辑就在在populate_rootfs函数中

Linux

通过开源代码还原代码中的变量名,变量类型。

https://github.com/torvalds/linux/blob/v3.18/init/initramfs.c

LinuxLinux

可以看到,在do_while循环中通过16位key_16数组生成1024位key_1024数组。

LinuxLinux

然后再for循环中通过key_1024运算解密。

Linux

 

  审核编辑:汤梓红

 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分