下屬專案
測試用例數量
問題背景無0
解決方法無1
總結無0復現一套加密演算法時,遇到了bfxil指令。
ida中顯示情況如下:
bfxil w9, w16, #2
, #2
ida使用fn+f5操作得到偽**如下:
v4 = v4 |
((v8 &
0xfc
)>>2)&3;
其中v4就是w9,(v8 & 0xfc)這個整體就是w16,定義如下:
unsigned
int v4;
// w9
因為不太了解這條指令,所以也不知道解析的偽**是不是正確的。
ida這樣解析出來的偽**是錯誤的。
先在armdeveloper搜尋這條指令,知道了這是無符號位域提取指令。
有2種語法:
bfxil wd, wn, #lsb, #width ;
32-bit
bfxil xd, xn, #lsb, #width ;
64-bit
意思是:從wn暫存器的第lsb位開始,提取width位,替換wd暫存器的最低width位,剩餘高位不改變。下面分析我們的**:
bfxil w9, w16, #2
, #2
可以知道是從w16暫存器的第2位開始,提取2位,替換w14暫存器的最低2位,然後w14暫存器剩餘高位不改變。這不就是先把w16暫存器先整體右移2位,然後w16&3從而保留最低2位,然後再用w14和前面「w16&3」的結果進行「|」操作嗎?因此在ida解析出來的如下結果:
v4 = v4 |
((v8 &
0xfc
)>>2)&3;
做進一步修正得到以下結果:
v4 = v4 |((
(v8 &
0xfc
)>>2)
&3);
測試後修正**是能正確工作的!可以知道ida在有些**的解析還是會出錯。
arm64彙編——bfxil指令的意思是從wn暫存器的第lsb位開始,提取width位,替換wd暫存器的最低width位,剩餘高位不改變。在逆向過程中遇到這種指令,在armdeveloper**搜尋指令了解意思後,即可復現。
如果本文對你有幫助,不如請我一罐可樂吧 ?
問題背景
解決方法
總結
arm64記憶體訪問指令小結
如下指令,用在32bit arm處理器上面是沒有問題的,但是用在arm64時,就會出現下面這個data abort exception 對比手冊發現實際上64bit的str指令,當使用wt暫存器時,是按照64bit來訪問的,故將彙編 更改為如下,ok,成功點亮led led on mov x7,0x...
arm64入棧出棧 棧 ARM64
棧 棧 是一種具有特殊的訪問方式的儲存空間 後進先出,last in out firt,lifo sp和fp暫存器 sp暫存器在任意時刻會儲存我們棧頂的位址.fp暫存器也稱為x29暫存器屬於通用暫存器,但是在某些時刻我們利用它儲存棧底的位址 注意 arm64開始,取消32位的 ldm,stm,pus...
ARM64除錯環境
自從上一次zctf做了一道arm64的逆向題目後,我決定記錄下利用qemu搭建arm64的環境的過程,以後肯定會遇到更多arm平台下的reverse和pwn。我要模擬的是64位的arm環境,所以需要使用的是qemu system aarch64。在kali下,使用apt get install qe...