之前遇到ARM逆向的入门题,但没有环境只能静态分析,非常慢;而且我觉得边调试边学应该会快一些,于是决定模拟一个ARM环境装linux系统。
首先是QEMU,由于单位电脑系统是RHEL 6,没有qemu-system-arm
,于是我不得不编译了一次。我下的是qemu-2.0.2,运行
$ ./configure --target-list="arm-softmmu arm-linux-user" --enable-sdl --prefix=/usr $ make $ make install
来安装QEMU。
然后创建一个qcow2镜像文件,我分了10G
$ qemu-img create -f qcow2 arm.qcow2 10G
接下来就该在上面装系统了,这里的指示写的很详细,用的是Debian 7。但启动还需要vmlinux
和initrd
,在这里下载。运行:
$ qemu-system-arm -m 1024M -sd arm.qcow2 -M vexpress-a9 -cpu cortex-a9 -kernel ../Downloads/vmlinuz-3.2.0-4-vexpress -initrd ../Downloads/initrd.gz -append "root=/dev/ram" -no-reboot
就进入到安装界面了,稍微有点慢,一个多小时安装完成。
安装结束后,还需要把装上的vmlinuz
和initrd
提取出来,传给QEMU启动。提取时需要挂载我们的qcow2镜像,要加载nbd模块,结果我的RHEL 6又悲剧了……然后比较二的是在虚拟机里的ubuntu 14里完成这些工作,再拷回RHEL。命令如下
$ modprobe nbd max_part=16 $ qemu-nbd -c /dev/nbd0 arm.qcow2 $ mount /dev/nbd0p1 /mnt $ cp /mnt/* ~ $ umount /mnt $ qemu-nbd -d /dev/nbd0
因为安装时分区boot
分在了第一个分区,所以mount
时用nbd0p1
。
有了提取出来的vmlinuz-3.2.0-4-vexpress
和initrd.img-3.2.0-4-vexpress
,终于可以启动了:
$ qemu-system-arm -m 1024M -sd arm.qcow2 -M vexpress-a9 -cpu cortex-a9 -kernel vmlinuz-3.2.0-4-vexpress -initrd initrd.img-3.2.0-4-vexpress -append "root=/dev/mmcblk0p2"
这里用mmcblk0p2
,是还是因为分区时/
分在了第二个分区。
以后还是用ssh连上去,也不需要显示窗口,所以用
$ qemu-system-arm -m 1024M -sd arm.qcow2 -M vexpress-a9 -cpu cortex-a9 -kernel vmlinuz-3.2.0-4-vexpress -initrd initrd.img-3.2.0-4-vexpress -append "root=/dev/mmcblk0p2" -display none -redir tcp:33333::22 &
让本地的33333
端口转到ssh。需要连上去时就用
$ ssh roo@127.0.0.1 -p33333