自从上一次ZCTF做了一道ARM64的逆向题目后,我决定记录下利用qemu搭建ARM64的环境的过程,以后肯定会遇到更多ARM平台下的Reverse和PWN。

一 安装QEMU

我要模拟的是64位的ARM环境,所以需要使用的是qemu-system-aarch64。在kali下,使用apt-get install qemu-system-aarch64就可以安装成功。

二 可以直接使用的QEMU镜像

Ubuntu为用户已经提供了已经安装好系统的文件系统镜像。在

https://cloud-images.ubuntu.com/ 里可以找到各个ubuntu server版本的QEMU镜像,我在这里使用了Ubuntu Server 14.04。后缀是disk1.img就是qemu支持的镜像。

三 对下载的镜像进行扩容

默认情况下,这个文件系统镜像能使用的大小为2G。

我就对这个文件系统进行扩容。

qemu-img resize trusty-server-cloudimg-arm64-disk1.img 20G 将镜像的容量扩展为20G

modprobe nbd max_part=8

qemu-nbd -c /dev/nbd0 trusty-server-cloudimg-arm64-disk1.img 使用qemu-nbd挂载该镜像

fdisk /dev/nbd0 对其进行分区调整

删除/dev/nbd0p1分区

重建/dev/nbd0p1分区

使其可引导

使文件系统适应扩展后的镜像。

四 提取vmlinuz和intrid.img

mkdir mnt

mount /dev/nbd0p1 mnt

ls -lt mnt/

cp mnt/boot/vmlinuz-3.19.0-25-generic .

cp mnt/boot/initrd.img-3.19.0-25-generic .

umount mnt

qemu-nbd -d /dev/nbd0

五 万事俱备 启动系统

Qemu的网络可以有多种方式,我对两种常用的方式进行介绍。

为了QEMU的Guest系统使用网络,QEMU需要为Guest准备虚拟的网络设备(比如网卡),还要为每一个虚拟的网络设备准备一个backend,backend负责与虚拟的网络设备进行交互,比如将Guest系统产生的网络流量从虚拟的网络设备中取出放入Host系统的网络中。每一个backend要和一个虚拟的网络设备进行关联。在系统的启动时,需要指定下面两行参数。

-netdev TYPE,id=NAME,...

-device TYPE,netdev=NAME

第一种使用网络的方式类似于Nat的方式,Guest系统可以进行网络访问,但是Host系统不能直接访问Guest系统。可以使用如下的命令启动:

  第二种方式就是桥接的方式,Guest和Host能相互方便访问,需要Host的root权限。在运行qemu-system-aarch64前需要生成网桥,可使用下面的脚本:

脚本运行之后,运行ifconfig看下

然后使用下面的脚本来启动qemu-system-aarch64

启动后,安装GCC/GDB,开始调试吧!!!

在退出qemu后,运行下面脚本来恢复原有的网络设置

六 其他

我一般会在screen会话里运行qemu,然而退出qemu的快捷键是:Ctrl + a + x。但是这个快捷键的按下会被screen给捕捉到,所以不会到达qemu,那么qemu就不会退出。可以使用下面的命令来退出qemu。其中,arm64是screen的会话名称。

screen -S arm64 -p 0 -X stuff "^ax"

七 参考文献

http://rzycki.blogspot.com/2014/08/using-qemu-to-run-ubuntu-arm-64-bit.html

https://en.wikibooks.org/wiki/QEMU/Networking

http://www.mztn.org/dragon/arm64_01.html

http://www.cnblogs.com/clpszpp/p/linux_bridge.html

https://gist.github.com/larsks/3933980

http://hzqtc.github.io/2012/02/kvm-network-bridging.html

http://suihkulokki.blogspot.my/2014/08/testing-qemu-21-arm64-support.html

https://gist.github.com/philipz/3d278f414f8eadb5afe1

https://en.wikibooks.org/wiki/QEMU/Images

http://askubuntu.com/questions/456491/what-are-the-different-ubuntu-cloud-guest-images-disk1-root-uefi1

https://wiki.ubuntu.com/ARM64/QEMU

http://blog.eciton.net/uefi/qemu-arm-uefi.html

ARM64调试环境的更多相关文章

  1. arm64 调试环境搭建及 ROP 实战

    前言 比赛的一个 arm 64 位的 pwn 题,通过这个题实践了 arm 64 下的 rop 以及调试环境搭建的方式. 题目文件 https://gitee.com/hac425/blog_data ...

  2. 微信公众号开发系列教程一(调试环境部署续:vs远程调试)

    http://www.cnblogs.com/zskbll/p/4080328.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ...

  3. 在Mac系统上配置Android真机调试环境

    在Mac系统上配置Android真机调试环境 mac上配置安卓环境还说挺方便的,真机调试也比win上要好一些.win上被各种软件强行安装了xxx助手. 在mac上就了一个干净的感觉. 下载Androi ...

  4. PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )

    1 软件准 WampServer 下载地址:http://www.wampserver.com/en/#download-wrapper    我下的是 里面包含了搭建PHP必须的4个软件:   1. ...

  5. golang在Windows下Sublime Text开发调试环境的配置

    一.前言 近期本人有工作调动,进入了一个全新的领域[golang]服务端开发.在此写下本文,希望给那些没接触过golang开发调试环境及还在犹豫选择那家golang IDE而纠结的朋友们一点点帮助,如 ...

  6. windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境

    windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境   http://rongmayisheng.com/post/windows%E4%B8%8B%E7%94%A ...

  7. 配置Windows 2008 R2 64位 Odoo 8.0 源码PyCharm开发调试环境

    安装过程中,需要互联网连接下载python依赖库: 1.安装: Windows Server 2008 R2 x64标准版 2.安装: Python 2.7.10 amd64 到C:\Python27 ...

  8. 在cocos code ide的基础上构建自己的lua开发调试环境

    对于一种语言,其所谓开发调试环境, 大体有以下两方面的内容: 1.开发, 即代码编写, 主要是代码提示.补齐, 更高级一点的如变量名颜色等. 2.调试, 主要是运行状态下断点.查看变量.堆栈等. 现在 ...

  9. 史上最佳 Mac+PhpStorm+XAMPP+Xdebug 集成开发和断点调试环境的配置

    在上一篇 PHP 系列的文章<PHP 集成开发环境比较>中,我根据自己的亲身体验,非常简略的介绍和对比了几款常用的集成开发环境,就我个人而言,比较推崇 Zend Studio 和 PhpS ...

随机推荐

  1. 上传form表单

    <form name="theForm" method="post" action="index.php?m=back&c=Goods& ...

  2. pom.xml详解(转)

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  3. iOS学习之iOS沙盒(sandbox)机制和文件操作(一)

    1.iOS沙盒机制 iOS应用程序仅仅能在为该改程序创建的文件系统中读取文件,不能够去其他地方訪问,此区域被成为沙盒,所以全部的非代码文件都要保存在此,比如图像,图标,声音,映像,属性列表,文本文件等 ...

  4. hive优化之自己主动合并输出的小文件

    1.先在hive-site.xml中设置小文件的标准. <property> <name>hive.merge.smallfiles.avgsize</name> ...

  5. Android应用程序窗口(Activity)的测量(Measure)、布局(Layout)和绘制(Draw)过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8372924 在前面一篇文章中,我们分析了And ...

  6. 有关docker新版的icc、iptables的一个巨坑

    之前玩过docker的icc=false.iptables=true 按照这两个参数配置之后,想指定两个特定的容器通讯,直接用--link即可. 但最近我在下载了1.12新版的docker,这个不奏效 ...

  7. Unity IOC注入详细配置(MVC,WebApi)

    一直想写一篇关于unity 详细的配置信息的文章,也算是自我总结吧 先介绍了unity , Unity是微软官方推荐使用的轻型的IOC框架,支持各种方式的注入 ,使用来解耦的利器. 获取unity 的 ...

  8. javascript this关键字

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. win10下安装通过Hyper-v安装Ubuntu

    一直也来在做C#的开发,Winform及Web都有所涉及,想在闲暇之余学习下Python,拓展一下自己的知识.既然决定学习Python那么就直接在Linux下进行吧,由于Ubuntu最近很火而且也有方 ...

  10. canvas入门

    <html> <head> <script> window.onload=function(){ var canvas=document.getElementByI ...