用root设备进入app会提示下图
这个软件的提示词过于简单了,没有进行加密什么的
直接在dex里搜关键词即可
我们进入判断具体分析一下
一共三个函数
每个函数判断不同
第一个函数是通过判断是获取的手机信息(System/build.prop文件)
一般root后的设备其他root特征便是ro.system.build.tags=text-keys
第二个函数是通过判断文件是否存在
其中判断的文件都有:
/system/app/Superuser.apk,/sbin/su,/system/bin/su,/system/xbin/su,/data/local/xbin/su,/data/local/bin/su,/system/sd/xbin/su,/system/bin/failsafe/su,/data/local/su,/su/bin/su这些文件
如果设备进行Root,会存在
第三个函数则是通过执行shell命令
检查设备上是否存在 su可执行文件,判断是否是Root设备
那么知道这些了我们很好去隐藏,但是也可以进行hook处理
我们先hook第一个函数的检测他是获取的Build.TAGS
通过查看android.os.Build类TAGS字段是通过
public static final String TAGS = getString("ro.build.tags");
那么去只要去hookgetString即可正常的TAGS是release-keys所以我们可以这样hook(mumu模拟器和我自己的root设备都是release-keys无法进行测试,请各位佬自行测试)
XposedHelpers.findAndHookMethod(Build.class, "getString", String.class, new XC_MethodHook() {
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
String str=(String) param.args[0];
XposedBridge.log("输出str:"+str);
if (str.equals("ro.build.tags")){
XposedBridge.log("输出key:"+param.getResult());
param.setResult("release-keys");
}
}
});
第二个函数,我们可以去hookFile构造类当传入的路径是上面那些文件路径,则替换成一个不存在的文件路径即可或者是hook exists函数,那么怎么判断当前传入的路径我们可以查看File类代码,通过构造参数看出 这个类的path字段储存的路径所以我们可以直接获取exists函数当前实例的path然后判断是否是想hook的实例,然后返回一个false,不存在文件
XposedHelpers.findAndHookMethod(File.class, "exists", new XC_MethodHook() {
@Override
protectedvoidafterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
String path=(String) XposedHelpers.getObjectField(param.thisObject,"path");
if (path.equals("/system/app/Superuser.apk")||path.equals("/sbin/su")||path.equals("/system/bin/su")||path.equals("/system/xbin/su")||path.equals("/data/local/xbin/su")||path.equals("/data/local/bin/su")||path.equals("/system/sd/xbin/su")||path.equals("/system/bin/failsafe/su")||path.equals("/data/local/su")||path.equals("/su/bin/su")) {
param.setResult(false);
}
}
});
下面看第三个函数我们要怎么hook呢直接hook Runtime类的exec函数
XposedHelpers.findAndHookMethod(Runtime.class, "exec", String[].class, new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
String[] str=(String[]) param.args[0];
if (Arrays.asList(str).contains("su")){
param.args[0]=new String[]{"echo", "-n"};
}
}
});
替换他的执行命令,新的指令返回的InputStream是空的然后我们在打开软件发现root提示已经没有了
· 今 日 推 荐 ·
听歌有惊喜,欢迎私聊,vx:ivu123ivu
将下面地址复制到浏览器即可欣赏
http://163cn.tv/DdLCYjl
(来自@网易云音乐)
本文内容来自网络,如有侵权请联系删除
原文始发于微信公众号(逆向有你):安卓逆向 -- 过某app环境检测
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论