安卓逆向,阻止app對root權限的檢測


我的CSDN地址:https://blog.csdn.net/zenglintao/article/details/106029499

一、smali基本語法

本次實戰需要用到smali語言的知識,下面講一下smali語言的基本語法吧

.field private isFlag:z  定義變量

.method  方法

.parameter  方法參數

.prologue  方法開始

.line 12  此方法位於第12行

invoke-super  調用父函數

const/high16 v0, 0x7fo3  把0x7fo3賦值給v0

invoke-direct  調用函數

return-void  函數返回void

.end method  函數結束

new-instance  創建實例

iput-object  對象賦值

iget-object  調用對象

invoke-static  調用靜態函數

條件跳轉分支:

"if-eq vA, vB, :cond_" 如果vA等於vB則跳轉到:cond_
"if-ne vA, vB, :cond_" 如果vA不等於vB則跳轉到:cond_
"if-lt vA, vB, :cond_" 如果vA小於vB則跳轉到:cond_
"if-ge vA, vB, :cond_" 如果vA大於等於vB則跳轉到:cond_
"if-gt vA, vB, :cond_" 如果vA大於vB則跳轉到:cond_
"if-le vA, vB, :cond_" 如果vA小於等於vB則跳轉到:cond_
"if-eqz vA, :cond_" 如果vA等於0則跳轉到:cond_
"if-nez vA, :cond_" 如果vA不等於0則跳轉到:cond_
"if-ltz vA, :cond_" 如果vA小於0則跳轉到:cond_
"if-gez vA, :cond_" 如果vA大於等於0則跳轉到:cond_
"if-gtz vA, :cond_" 如果vA大於0則跳轉到:cond_
"if-lez vA, :cond_" 如果vA小於等於0則跳轉到:cond_

二、root檢測分析

app檢測root無非就以下幾種方式

1.檢測系統版本是否為開發版

2.檢測手機上是否安裝了root管理器(Magisk,supersu,superuser等)

3.檢測手機上是否安裝了需要root的軟件(xposed,lucky patcher等)

4.檢測手機是否存在二進制su文件

5.檢測手機是否存在busybox

三、實戰開始

本次實戰就用手機端的MT管理器,用apktool的話感覺有點大材小用了

實戰對象是某公司的金融類app

img

首先打開app會發現無法使用,因為手機已經被root了

然后我們進行第一步修改,查找root工具的包名

img

我的手機是使用magisk管理root的,所以我就直接搜索magisk

img

通過查找找到了一個有很多包名的類,可以看出這是一個用來保存字符串變量的類

img

將里面的包名全部替換掉,隨便替換成什么字符串都行,目的就是讓它不能匹配

然后還要替換里面的路徑,路徑不能隨便替換,不然會導致應用無法打開的

我是用的root管理工具是magisk,magisk會在你的手機根目錄創建一個名為sbin的文件夾

里面存放着su和busybox,所以我只要替換掉sbin這個文件夾就可以了

替換掉之后就保存編譯

img

再次運行錯誤代碼變成了R008

使用R008繼續查找dex文件

img

然后找到了錯誤碼所在的類

這條語句是一個Lambda表達式,寫成java就是bVar.f() ? "R008"

就是說當bVar.f()是真的時候就顯示R008

我查了一下,這個bVar是b類new的一個對象,而這個b類是在com.scottyab.rootbeer.b這個包下面

我打開了這個包下面的b類,找到 f 方法,發現這里是執行了su命令以及which命令,於是我把這兩條命令也替換了,再次保存編譯。

img

最后打開app查看結果

img

完美解決root手機不能使用的問題


免責聲明!

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



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