ARM64调试环境
自从上一次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
https://wiki.ubuntu.com/ARM64/QEMU
http://blog.eciton.net/uefi/qemu-arm-uefi.html
ARM64调试环境的更多相关文章
- arm64 调试环境搭建及 ROP 实战
前言 比赛的一个 arm 64 位的 pwn 题,通过这个题实践了 arm 64 下的 rop 以及调试环境搭建的方式. 题目文件 https://gitee.com/hac425/blog_data ...
- 微信公众号开发系列教程一(调试环境部署续:vs远程调试)
http://www.cnblogs.com/zskbll/p/4080328.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ...
- 在Mac系统上配置Android真机调试环境
在Mac系统上配置Android真机调试环境 mac上配置安卓环境还说挺方便的,真机调试也比win上要好一些.win上被各种软件强行安装了xxx助手. 在mac上就了一个干净的感觉. 下载Androi ...
- PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )
1 软件准 WampServer 下载地址:http://www.wampserver.com/en/#download-wrapper 我下的是 里面包含了搭建PHP必须的4个软件: 1. ...
- golang在Windows下Sublime Text开发调试环境的配置
一.前言 近期本人有工作调动,进入了一个全新的领域[golang]服务端开发.在此写下本文,希望给那些没接触过golang开发调试环境及还在犹豫选择那家golang IDE而纠结的朋友们一点点帮助,如 ...
- windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境
windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境 http://rongmayisheng.com/post/windows%E4%B8%8B%E7%94%A ...
- 配置Windows 2008 R2 64位 Odoo 8.0 源码PyCharm开发调试环境
安装过程中,需要互联网连接下载python依赖库: 1.安装: Windows Server 2008 R2 x64标准版 2.安装: Python 2.7.10 amd64 到C:\Python27 ...
- 在cocos code ide的基础上构建自己的lua开发调试环境
对于一种语言,其所谓开发调试环境, 大体有以下两方面的内容: 1.开发, 即代码编写, 主要是代码提示.补齐, 更高级一点的如变量名颜色等. 2.调试, 主要是运行状态下断点.查看变量.堆栈等. 现在 ...
- 史上最佳 Mac+PhpStorm+XAMPP+Xdebug 集成开发和断点调试环境的配置
在上一篇 PHP 系列的文章<PHP 集成开发环境比较>中,我根据自己的亲身体验,非常简略的介绍和对比了几款常用的集成开发环境,就我个人而言,比较推崇 Zend Studio 和 PhpS ...
随机推荐
- ios7 UITableView底线右移
在ios7上UITableView底线右移了,我们可以通过添加代码来让它铺满整个屏幕的宽,在使用前要加上判断是否有这个方法 if ([_tableView respondsToSelector:@se ...
- telnet查看memcached运行参数说明
在Linux/Windows系统中启动memcached的命令请查看http://weilingfeng98.iteye.com/admin/blogs/1741179 启动完memcached服务器 ...
- 出现security ioError 安全沙箱问题
client安全沙箱 通配策略 crossdomain <?xml version="1.0" encoding="UTF-8"?> <!DO ...
- 【Android】使用FrameLayout布局实现霓虹灯效果
FrameLayout是五大布局中最简单的一个布局. 在这个布局中,整个界面被当成一块空白备用区域,所有的子元素都不能被指定放置的位置. 它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的 ...
- Android Project from Existing Code 生成 R 文件错误、失败等问题解决办法 - 持续更新
Android Project from Existing Code 生成 R 文件错误.失败等问题解决办法 - 持续更新 git 上的项目,pull下来之后用Android Project fro ...
- JAXB
注解
JAXB(Java API for XML Binding),它提供了一个便捷的方式高速Java对象XML转变.于JAX-WS(Java的WebService规范之中的一个)中,JDK1.6 自带的版 ...
- Unity 3D 调用摄像头捕获照片 录像
1,要想调用摄像头首先要打开摄像头驱动,如果用户允许则可以使用. 2,定义WebCamTexture的变量用于捕获单张照片. 3,连续捕获须启用线程. 实现代码: using UnityEngine; ...
- CSS清除浮动的方法
CSS清除浮动的方法有哪些呢?经常性地会使用到float,很多邪门的事儿都有可能是浮动在作怪,清除浮动是必须要做的,而且随时性地对父级元素清除浮动的做法也被认为是书写CSS的良好习惯之一.下面看今天的 ...
- JS获取request字符串
function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...
- sql一些命令
1.创建表 create table tSId ( tSid int identity(1,1) primary key, tSName varchar(10) check(len(tSName)&g ...