ARM64除錯環境

2022-03-09 20:47:24 字數 2234 閱讀 9273

自從上一次zctf做了一道arm64的逆向題目後,我決定記錄下利用qemu搭建arm64的環境的過程,以後肯定會遇到更多arm平台下的reverse和pwn。

我要模擬的是64位的arm環境,所以需要使用的是qemu-system-aarch64。在kali下,使用apt-get install qemu-system-aarch64就可以安裝成功。

ubuntu為使用者已經提供了已經安裝好系統的檔案系統映象。在

裡可以找到各個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分割槽

使其可引導

使檔案系統適應擴充套件後的映象。

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"

arm64入棧出棧 棧 ARM64

棧 棧 是一種具有特殊的訪問方式的儲存空間 後進先出,last in out firt,lifo sp和fp暫存器 sp暫存器在任意時刻會儲存我們棧頂的位址.fp暫存器也稱為x29暫存器屬於通用暫存器,但是在某些時刻我們利用它儲存棧底的位址 注意 arm64開始,取消32位的 ldm,stm,pus...

arm64 頁表對映

armv8最多支援48根位址,4級頁表,這樣最多支援user space和kernnel space 分別是256tb 其中user space佔據低端位址 kernel可以支援48 42 39 根位址 config arm64 va bits 39 is not set config arm64 ...

Arm64彙編 BFXIL指令

下屬專案 測試用例數量 問題背景無0 解決方法無1 總結無0復現一套加密演算法時,遇到了bfxil指令。ida中顯示情況如下 bfxil w9,w16,2 2 ida使用fn f5操作得到偽 如下 v4 v4 v8 0xfc 2 3 其中v4就是w9,v8 0xfc 這個整體就是w16,定義如下 u...