在分析智能硬件的固件時(shí),時(shí)常會(huì)面對(duì)一些搭載了文件系統(tǒng)的。假設(shè)我們獲得了Linux kernel ARM boot executable?(little-endian)格式的zImage,怎樣提取出待分析的主程序呢?
第一類:
除有zImage外,還獲得了ext2/ext3文件系統(tǒng),且用010editor在ex2/ext3文件可以搜索到相關(guān)的關(guān)鍵字??蛇\(yùn)行Explore2fs提取ext2/ext2文件系統(tǒng)中的文件。
注:Explore2fs無(wú)法在win7、win10運(yùn)行。可以考慮運(yùn)行在win XP。

第二類:
僅有zImage文件,此時(shí)可用binwalk提取程序。
binwalk -Me zImage
題外話
當(dāng)初從網(wǎng)上看到了此篇文章,演示怎樣解壓linux內(nèi)核
按照該方法操作了,仍然找不到主程序。
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
后來(lái)聯(lián)系上下文和相關(guān)背景知識(shí),明白了上述操作僅從zImage中獲取了解壓后的內(nèi)核,還需繼續(xù)提取才能獲得主程序。