Android系统root破解原理分析
上一篇文章
Android adb 源碼分析
理論基礎
root破解過程的終極目標是替換掉系統中的su程序。但是要想替換掉系統中su程序本身就是需要root權限的,怎樣在root破解過程中獲得root權限,成為我們研究的重點了。下面我們先清點一下我們需要破解系統情況,假設需要破解的Android系統具備如下條件:?
辦法
1、可以通過adb連接到設備,一般意味著驅動程序已經安裝。?
2、但是adb獲得用戶權限是shell用戶,而不是root。(漏洞)?
想理解root破解過程我們首先需要了解一下adb工具,SDK中包含adb工具,設備端有adbd服務程序后臺運行,為開發機的adb程序提供服務,adbd的權限,決定了adb的權限。具體用戶可查看/system/core/adb下的源碼,查看Android.mk你將會發現adb和adbd其實是一份代碼,然后通過宏來編譯。?
查看adb.c的adb_main函數你將會發現adbd中有如下代碼:?
? 從中我們可以看到adbd會檢測系統的ro.secure屬性,如果該屬性為1則將會把自己的用戶權限降級成shell用戶。一般設備出廠的時候在/default.prop文件中都會有:?
ro.secure=1?
這樣將會使adbd啟動的時候自動降級成shell用戶。?
然后我們再介紹一下adbd在什么時候啟動的呢?答案是在init.rc中配置的系統服務,由init進程啟動。我們查看init.rc中有如下內容:?
對Android屬性系統少有了解的朋友將會知道,在init.rc中配置的系統服務啟動的時候都是root權限(因為init進行是root權限,其子程序也是root)。由此我們可以知道在adbd程序在執行:?
代碼之前都是root權限,只有執行這兩句之后才變成shell權限的。?
這樣我們就可以引出root破解過程中獲得root權限的方法了,那就是讓以上面setgid和setuid函數執行失敗,也就是降級失敗,那就繼續在root權限下面運行了。?
這其實利用了一個RageAgainstTheCage漏洞,具體分析請參考《Android adb setuid提權漏洞的分析》和《RageAgainstTheCage》?
通過上面的介紹我們發現利用RageAgainstTheCage漏洞,可以使adbd獲得root權限,也就是adb獲得了root權限。拿到root權限剩下的問題就好辦了,復制破解之后的su程序到系統中?
總結
以上是生活随笔為你收集整理的Android系统root破解原理分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年的工作日记模板准备好了
- 下一篇: arm服务器虚拟x86,云服务器arm6