IDA調試修改內存數據

一: 修改寄存器的值

以圖所示的BLX R3這個函數爲例,執行完畢後,他的返回值在右面的R0寄存器,對它進行修改。安全

image.png

1.將鼠標移到R0寄存器,右鍵,選擇「Modify value」選項,能夠修改成任意值,以下圖所示。ide

image.png

2.除了選擇「Modify value」選項外,還能夠選擇「Zero value」選項,直接置零,以下圖所示。函數

image.png

須要相關資料的朋友,能夠【加入此處便可打包獲取】blog

二:篡改內存數據

在函數頭打斷點,點擊F9,程序成功在函數頭斷下,緊接着F8往下走,當走到「ADD R2, PC, R2」這條指令時,該指令使用的是相對尋址方式,PC寄存器的值加上R2寄存器的值獲得的是一個地址,該地址存放的是一個字符串,即Activity,以下圖所示。內存

image.png

1.點開十六進制窗口,同步R2寄存器,以下圖所示。字符串

image.png

2.同步後的值,以下圖所示。get

image.png

3.直接F2進行修改,以下圖所示。同步

image.png

4.「31」表明的是「1」,以下圖所示。it

image.png

5.完成上述流程,提交後的效果,以下圖所示。class

image.png

三:NOP函數或代碼

以BL zhengchu函數爲例。

當程序執行到這裏,若是繼續往下單步,會執行下面這個函數,以下圖所示。

image.png

若不想執行此函數,則進行下面的操做流程:

1.進入十六進制窗口,點擊鼠標右鍵,選擇Synchronize with再選擇IDA View PC同步PC寄存器,以下圖所示。

image.png

2.同步後的效果以下圖所示。

image.png

3.PC寄存器的值永遠指向當前指令,因此此刻同步當前PC寄存器的值就是即將要執行的函數BL的值。直接右鍵選擇edit或者直接快捷鍵F2,以下圖所示。

image.png

4.將其所有修改成零,以下圖所示。

image.png

5.修改後,繼續右鍵,F2提交,以下圖所示。

image.png

6.完成上述流程,查看原函數,已變成一條無效的指令,以下圖所示。

image.png

7.直接單步往下走,不會再進入該函數,而是執行下一條指令,以下圖所示。

image.png

執行到這裏,已將函數成功NOP掉,變爲一條無效的空指令。

小結

​咱們知道如何修改對應寄存器的值:鼠標右鍵,選擇「Modify value」選項,能夠改成任意值,或者選擇「Zero value」選項,直接置零,同時修改寄存器的值能夠實現篡改內存數據,這裏須要注意的是NOP函數或代碼實現不跳轉或者不執行。

**感興趣的小夥伴能夠關注公衆號「宸道移動安全團隊」。

相關文章
相關標籤/搜索