如何从zImage中提取程序

在分析智能硬件的固件时,时常会面对一些搭载了文件系统的。假设我们获得了Linux kernel ARM boot executable (little-endian)格式的zImage,怎样提取出待分析的主程序呢?

第一类:

除有zImage外,还获得了ext2/ext3文件系统,且用010editor在ex2/ext3文件可以搜索到相关的关键字。可运行Explore2fs提取ext2/ext2文件系统中的文件。

:Explore2fs无法在win7、win10运行。可以考虑运行在win XP。

第二类:

仅有zImage文件,此时可用binwalk提取程序。

binwalk -Me zImage


题外话

当初从网上看到了此篇文章,演示怎样解压linux内核

https://acassis.wordpress.com/2015/06/04/how-to-recover-and-decompress-a-linux-kernel-dumped-mtd-partition/

按照该方法操作了,仍然找不到主程序。

root@ubuntu:~/ctf/hw2#arm-linux-gnueabi-objdump-EL -b binary -D -m armv5t zImage | grep 8b1f   //搜索gzip头部

    462c:      00088b1f     andeq    r8, r8, pc, lsl fp

    59d8:      b548b1fc     strblt      fp, [r8, #-508] ; 0xfffffe04

   13078:      fce28b1f      stc2l 11, cr8, [r2], #124  ; 0x7c

   14b1c:      8b1f7159     blhi 0x7f1088

   15aac:      ae08b1f1     mcrge    1, 0, fp, cr8, cr1, {7}

   34d9c:      138b1f85     orrne      r1, fp, #532    ; 0x214

   43b3c:      72ef8b1f      rscvc      r8, pc, #31744       ; 0x7c00

   4dfa0:       23db8b1f     bicscs     r8, fp, #31744 ; 0x7c00

   5cf34:       788b1fa8     stmvc     fp, {r3, r5, r7, r8, r9, sl, fp, ip}

。。。。。。

root@ubuntu:~/ctf/hw2# dd if=zImage

of=out.gz bs=1 skip=17964     // 0x462c = 17964     

4131028+0 records in

4131028+0 records out

4131028 bytes (4.1 MB, 3.9 MiB) copied, 6.07096 s, 680 kB/s

root@ubuntu:~/ctf/hw2# ls

out.gz  to_attacker  versatile-pb.dtb  zImage

root@ubuntu:~/ctf/hw2#file out.gz

out.gz: gzip compressed data, max compression, from Unix

root@ubuntu:~/ctf/hw2#gunzip out.gz

gzip: out.gz: decompression OK, trailing garbage ignored

后来联系上下文和相关背景知识,明白了上述操作仅从zImage中获取了解压后的内核,还需继续提取才能获得主程序。

你可能感兴趣的:(如何从zImage中提取程序)