Ida動態修改android程序的內存數據和寄存器數值,繞過so文件的判斷語句


我們繼續分析自毀程序密碼這個app,我們發現該程序會用fopen ()打開/proc/[pid]/status這個文件,隨后會用fgets()和strstr()來獲取,於是我們在strstr()處下個斷點,然后讓hex view的數據與R0同步。每次點擊繼續,我們都會看到strstr傳入的參數。當傳入的參數變為TracerPid:XXXX的時候我們停一下。因為在正常情況下,TracerPid的值應該是0。但是當被調試的時候就會變成調試器的pid。

enter image description here

enter image description here

為了防止程序發現我們在調試,在這里我們需要把值改回0。我們在hex view的2那里點擊右鍵,然后選擇edit。隨后我們輸入30和00,再點擊”apply changes”。就可以把TracerPid改為0了。然后就可以bypass這一次的反調試的檢測。

enter image description here

但這個程序檢測TracerPid的次數非常頻繁,我們要不斷的修改TracerPid的值才行,這種方法實在有點治標不治本,所以我們會在下一節介紹patch so文件的方法來解決這個問題。

另外在ida動態調試過程中,除了內存中的數據可以修改,寄存器的數據也是可以動態修改的。比如說程序執行到CMP R6, #0。本來R6的值是0,經過比較后,程序會跳轉到4082A3FC這個地址。

enter image description here

但是如果我們在PC執行到4082A1F8這條語句的時候,將R6的值動態修改為0。程序就不會進行跳轉了。

enter image description here

enter image description here

你甚至可以修改PC寄存器的值來控制程序跳轉到任何想要跳轉到的位置,簡直和ROP的原理一樣。但記得要注意棧平衡等問題。

enter image description here

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM