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 ...
随机推荐
- 云脉提供表单识别API接口自助接入
如今随着信息化.数字化时代的到来,利用纯人工进行数据录入已经不能满足海量信息数字化的需求.这时候有OCR表单识别技术,一切问题都能够迎刃而解了.云脉表单识别SDK采用成熟的OCR技术,通过创建票据的模 ...
- Spring定时任务的几种实现(转自iteye网gong1208)
原文地址: http://gong1208.iteye.com/blog/1773177 以下为正文: 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整 ...
- Ehcache RIM
Ehcache不仅支持基本的内存缓存,还支持多种方式将本地内存中的缓存同步到其他使用Ehcache的服务器中,形成集群.如下图所示: Ehcache支持多种集群方式,下面以RMI通信方式为例,来具 ...
- [工作问题总结]MyEclipse 注册
------------------------------ASP.Net+Android+IO开发 .Net培训 期待与您交流!------------------------------ 1.本人 ...
- 解决 jsp:include 引用文件时出现乱码的问题
阐述问题前,先来看一下下面这张图片左侧iframe中的乱码页面: 这个就是让我纠结好一阵子的乱码截图: 这个乱码页面中是使用了<jsp:include>引用标签后出现了这个问题: 源码截图 ...
- asp.net 后台对话框,确认跳转
Response.Write("<script>alert('不合法!'); window.location.href='" + ResolveClientUrl(&q ...
- Oracle 查看执行计划
刚刚开始接触Oracle,使用的工具是Sql Developer.在看执行计划的的时候,选中SQL语句,直接F5即可. 但是这里的执行计划不是最终的执行计划,它使用的是 explain for 命令. ...
- Mac系统杂项 (持续更新)
一.调整LaunchPad的图标显示列数和行数 .调整每一列显示图标数量.在我的电脑上(1366 * 768),每列7个个人觉得比较不错 defaults write com.apple.dock s ...
- iOS基本内存管理:autorelease和autoreleasepool
1.autorelease 基本用法 对象执行autorelease方法时会将对象添加到自动释放池中 当自动释放池销毁时自动释放池中所有对象作release操作 对象执行autorelease方法后自 ...
- iOS 使用NJKWebViewProgress做webview进度条
NJKWebViewProgress地址:https://github.com/ninjinkun/NJKWebViewProgress 导入头文件 #import "NJKWebViewP ...