首页
社区
课程
招聘
[原创]IoT安全:调试环境搭建教程(AArch64篇)
发表于: 2018-7-4 13:54 22527

[原创]IoT安全:调试环境搭建教程(AArch64篇)

2018-7-4 13:54
22527




主机:Ubuntu 16.04 LST(可以是VM里跑的虚拟系统,也可以用真实机器)

虚拟机版本: qemu 2.8.0

Linux内核版本:4.10

BusyBox版本:1.24.2

交叉编译工具链:gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux

gdb版本:7.11.1

根文件系统:aarch64_rootfs.tar


以上工具已经打包好,下载地址如下

链接:https://pan.baidu.com/s/1MVZhhTlhrNQH9KkvqFLSMw 密码:bzmx


先安装这些包

主机安装网络配置工具

在主机中查看/dev/net/tun文件

修改主机/etc/network/interfaces文件

为了方便请参考该文章把ens33网卡名改成eth0

ubuntu修改ens33网卡名为eth0


添加/etc/qemu-ifup

添加/etc/qemu-ifdown

添加可执行权限

重启网卡

运行


设置Vmware虚拟机网络



测试能双向ping通




qemu起来后,ip不一定能分配到,而且这是精简内核,没有interfaces这文件,可以通过这条命令设置一下ip

编译gdb-7.11.1

交叉编译测试例程

编译好的gdbserver与测试例程拷贝到虚拟机共享文件,执行

gdbserver报错,原因是没有编译静态文件

修改gdbserver的Makefile,添加-static参数,再次编译



客户机执行

至此,AArch64调试环境已经搭建好了,不知不觉已经写了这么多。本来打算将AArch32也放一起的,看来只能放在下篇了。

$ sudo apt-get install libcap-dev
$ sudo apt-get install libpixman-1-dev
$ apt-get install libncurses5-dev
$ sudo apt-get install libasound2-dev libasound2
$ sudo apt-get install libglib2.0-dev
$ sudo apt install u-boot-tools

编译qemu
$ tar -xf qemu-2.8.0.tar.xz
$ cd qemu-2.8.0
$ mkdir build
$ cd build
$ ../configure --target-list=arm-softmmu,aarch64-softmmu,mips-softmmu,mipsel-softmmu,i386-softmmu,x86_64-softmmu,arm-linux-user,aarch64-linux-user,i386-linux-user,x86_64-linux-user,mips-linux-user,mipsel-linux-user --audio-drv-list=alsa --enable-virtfs
$ make -j8
$ sudo make install

$ tar -xf qemu-2.8.0.tar.xz
$ cd qemu-2.8.0
$ mkdir build
$ cd build
$ ../configure --target-list=arm-softmmu,aarch64-softmmu,mips-softmmu,mipsel-softmmu,i386-softmmu,x86_64-softmmu,arm-linux-user,aarch64-linux-user,i386-linux-user,x86_64-linux-user,mips-linux-user,mipsel-linux-user --audio-drv-list=alsa --enable-virtfs
$ make -j8
$ sudo make install

配置linux内核选项
$ tar -xf linux-4.10.tar.xz

$ cross_compile=/root/toolchain/gcc/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin/aarch64-linux-gnu-
$ make CROSS_COMPILE=$cross_compile ARCH=arm64 O=./out_aarch64 defconfig
$ sudo gedit .config

# CONFIG 9P
CONFIG_NET_9P=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_NET_9P_DEBUG=y
CONFIG_9P_FS=y
CONFIG_9P_FS_POSIX_ACL=y
CONFIG_PCI=y
CONFIG_VIRTIO_PCI=y

# CONFIG PCI and virtio
CONFIG_PCI=y
CONFIG_VIRTIO_PCI=y
CONFIG_PCI_HOST_GENERIC=y

$ make CROSS_COMPILE=$cross_compile ARCH=arm64 O=./out_aarch64 menuconfig

General setup  --->
    [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

Device Drivers  --->
    [*] Block devices  --->
        <*>   RAM block device support
        (65536) Default RAM disk size (kbytes)

$ tar -xf linux-4.10.tar.xz

$ cross_compile=/root/toolchain/gcc/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin/aarch64-linux-gnu-
$ make CROSS_COMPILE=$cross_compile ARCH=arm64 O=./out_aarch64 defconfig
$ sudo gedit .config

# CONFIG 9P
CONFIG_NET_9P=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_NET_9P_DEBUG=y
CONFIG_9P_FS=y
CONFIG_9P_FS_POSIX_ACL=y
CONFIG_PCI=y
CONFIG_VIRTIO_PCI=y

# CONFIG PCI and virtio
CONFIG_PCI=y
CONFIG_VIRTIO_PCI=y
CONFIG_PCI_HOST_GENERIC=y

$ make CROSS_COMPILE=$cross_compile ARCH=arm64 O=./out_aarch64 menuconfig

General setup  --->
    [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

Device Drivers  --->
    [*] Block devices  --->
        <*>   RAM block device support
        (65536) Default RAM disk size (kbytes)




编译

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 8
支持
分享
打赏 + 5.00雪花
打赏次数 1 雪花 + 5.00
 
赞赏  junkboy   +5.00 2018/07/04
最新回复 (16)
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢分享
2018-7-4 15:00
0
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
3
请教师傅   直接用IoT设备的固件提取出来的文件系统可以仿真吗?
也是这样需要打包成tar.gz吗?
2018-7-4 15:02
0
雪    币: 265
活跃值: (72)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
可以的,需要指定根文件系统为从固件提取出来的squashfs文件系统
2018-7-4 15:22
0
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
5
wooyoung 可以的,需要指定根文件系统为从固件提取出来的squashfs文件系统
师傅 求私信指点  我本地试了很多方法  可能是中间哪里出了问题  导致最后一直跑不起来
2018-7-4 16:21
0
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
6
我本地用了两种思路,都是网上博客看来的,第一种:
1.qemu-img create new.img
2.挂载new.img并写入root目录文件系统
3.使用网上下载的linux mipseb内核运行  
指令如下:
qemu-system-mips -m 256 -M malta \
-kernel vmlinux.mipseb \
-drive if=ide,format=raw,file=./new.img \
-append "root=/dev/mapper/loop1p1 console=ttyS0 nandsim.parts=64,64,64,64,64,64,64,64,64,64 debug ignore_loglevel print-fatal-signals=1 user_debug=31" \
-net nic, -net tap \
-nographic
报错是:VFS: Unable to mount root fs on unknown-block(0,0)
第二种尝试了您的步骤:
1.创建ramdisk,
2.挂载并格式化文件系统,写入根目录,
3.打包成gz并使用mkimage生成img,使用网上下载的mipseb内核运行
执行指令如下:
qemu-system-mips -m 512 \
-append "root=/dev/ram0 rw rootfstype=ext2 console=tty0" \
-initrd ramdisk.img \
-net nic,vlan=0 -net tap \
-kernel ../qemu-test/vmlinux.mipseb \
-nographic
因为没看明白您的步骤里面-kernel ./Image文件是什么所以我就用之前下载的内核运行了,然后内存越界了。。。
最后于 2018-7-4 16:30 被伤字号编辑 ,原因: 修改执行的指令以便于阅读
2018-7-4 16:29
0
雪    币: 265
活跃值: (72)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
伤字号 我本地用了两种思路,都是网上博客看来的,第一种:1.qemu-img&nbsp;create&nbsp;new.img2.挂载new.img并写入root目录文件系统3.使用网上下载的 ...
可以看这篇https://bbs.pediy.com/thread-229583.htm,直接下载编译好的内核镜像和根文件磁盘就好了。 -kernel ./Image这个是我编译的linux-4.10的内核。
最后于 2018-7-4 17:02 被m0nshaw编辑 ,原因:
2018-7-4 17:00
0
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
8
wooyoung 伤字号 我本地用了两种思路,都是网上博客看来的,第一种:1.qemu-img&amp;nbsp;create&amp;nbsp;new.img ...
然后直接往编译好的文件磁盘里面写入根文件系统就好了嘛?
2018-7-4 17:03
0
雪    币: 265
活跃值: (72)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
伤字号 然后直接往编译好的文件磁盘里面写入根文件系统就好了嘛?
-kernel 是指定内核,-initrd是指定需要挂载的文件系统,只是打包不需要编译的。还有其他命令也能指定挂载文件,比如-sd、-hda
2018-7-4 17:08
0
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
10
师傅我好像没找到openwrt的镜像下载地址。。
后来我用debian的mips内核,-initrd指定路由器的固件文件系统,也不行
是我文件系统的格式不对还是啥,内核和文件系统不兼容?
师傅要不我把固件发给你你试试。。。
2018-7-5 10:33
0
雪    币: 265
活跃值: (72)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
伤字号 师傅我好像没找到openwrt的镜像下载地址。。 后来我用debian的mips内核,-initrd指定路由器的固件文件系统,也不行 是我文件系统的格式不对还是啥,内核和文件系统不兼容? 师傅要 ...
在这里下https://archive.openwrt.org/snapshots/trunk/malta/generic/
2018-7-5 23:11
0
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
12
wooyoung 在这里下https://archive.openwrt.org/snapshots/trunk/malta/generic/
多谢师傅多谢师傅
2018-7-9 09:45
0
雪    币: 416
活跃值: (162)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
13
配置内核的时候出了这么个错:“make: *** No rule to make target 'defconfig'。 停止。在网上找了一波没找到解决方案,还请师傅指导一波
2018-7-31 21:09
0
雪    币: 19
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
make CROSS_COMPILE=$cross_compile ARCH=arm64 O=./out_aarch64 Image -j4
老师,执行这步的时候老是报错,提示、root/toolchain/gcc/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin/aarch64-linux-gnu-gcc: not found,我尝试把解压的文件夹放到/root/toolchain/gcc下面,但是还是提示找不到
2019-8-26 14:24
0
雪    币: 373
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
伤字号 我本地用了两种思路,都是网上博客看来的,第一种:1.qemu-img&nbsp;create&nbsp;new.img2.挂载new.img并写入root目录文件系统3.使用网上下载的 ...
大佬,问题解决了吗,我仿真同样碰到了 报错是:VFS: Unable to mount root fs on unknown-block(0,0)
的问题
2023-3-20 15:29
0
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
16
这个是rootfs指定错误的问题,师傅可以检查一下qemu启动参数里面rootfs是否正确的分出来了
PS:居然过了这么多年了。。
2023-4-10 10:21
0
雪    币: 131
活跃值: (415)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
17

这个是rootfs指定错误的问题,师傅可以检查一下qemu启动参数里面rootfs是否正确的分出来了@燕乘风
PS:居然过了这么多年了。

最后于 2023-4-10 10:24 被伤字号编辑 ,原因: 回复bug
2023-4-10 10:23
0
游客
登录 | 注册 方可回帖
返回
//