查看原文
其他

应用root检测通杀篇

菠萝 移动安全星球 2022-07-23


应用root检测通杀篇

平时应用测试过程中经常遇见Root检测,特别是金融类应用在启动时进行Root环境监测,会向用户弹窗提示运行环境存在安全风险不让APP继续运行下一步操作或禁止安装运行(直接闪退)。虽然之前说到magisk配合Shamiko模块可以过掉大部分应用root检测,比较依赖magisk环境,若app对magisk进行检测,此时我们又要对magiak进行隐藏。

这里的思路是-通过自定义su,并去除userdebug编译模式的一些特征!

常规检测手段

root 常规检测手段大致可以分为三类

1.目录特征遍历 我们来看段检测代码,从代码中可以看会去遍历"/sbin/su", "/system/bin/su", "/system/sbin/su", "/system/xbin/su" 等目录其次检测magsik、SuperSU等特征。


2.尝试执行root后的一些操作 对特定目录尝试新建文件例如 /data、/system、/etc 等(只有root后才有权限操作的目录),或者去执行典型的,例如su,还有find、mount等命令。


3.读取手机编译版本、调试状态 例如读取/system/build.prop中 是test-keys(测试版),还是release-keys(发布版),去获取ro.debuggable、ro.secure的值检测是否有调试状态


如何做到通杀呢?

其实我们只要通过定制ROM自定义su,就可以轻松应对1.目录特征遍历和 2.尝试执行root后的一些操作, 当我们把su改成mysu,对应目录也自定义成mysu,提权命令也会变成mysu,当应用执行对/data、/system、/etc 等目录进行文件操作,没有提权命令mysu自然也无法完成这些操作,最后我们把test-keys 以及ro.debuggable等特征都改成正常值,这样基本上可以做到ROOT检测通杀了。


ROM实现

我这里使用的是android-8.1.0_r1


自定义su

/system/extras/su/Android.mk中su修改为mysu


/system/core/libcutils/fs_config.cpp中/system/xbin/su修改为/system/xbin/mysu


/system/sepolicy/private/file_contexts中/system/xbin/su修改为/system/xbin/mysu


更改test-keys

ro.build.tags=test-keys被写入在system/build.prop文件,我们查看这个文件看到autogenerated by buildinfo.sh 是被buildinfo.sh文件写入的,我们找下这个文件   在/build/make/tools/buildinfo.sh ro.build.tags的值是读取BUILD_VERSION_TAGS 而BUILD_VERSION_TAGS 则是/build/core/Makefile 中BUILD_KEYS 给的值,所以我们将 test-keys 改为 release-keys即可


   更改后test-keys均变成了release-keys


更改userdebug

    虽然我们改了test-keys 但是ro.build.type、ro.build.display.id、ro.build.flavor、    ro.build.description、ro.build.fingerprint标签中均有userdebug,发布版值应为user 我们先 看下ro.build.type对应的值是来自TARGET_BUILD_TYPE


TARGET_BUILD_TYPE 的值又是TARGET_BUILD_VARIANT,又索引到其他文件去了,为了减少出错率,我们就在这里直接赋值user


我们再来看下ro.build.flavor 对应TARGET_BUILD_FLAVOR


TARGET_BUILD_FLAVOR := $(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT)我们对比下值就可以判断出 TARGET_BUILD_VARIANT 就是userdebug字符串


我们直接改成

TARGET_BUILD_FLAVOR := $(TARGET_PRODUCT)-user


其他几个地方就可以按照此方式挨个去除即可,只在/build/core/Makefile 中改动即可,由于篇幅原因就不带着大家挨个改了,后面会将改好文件放入星球中大家参考即可。我们来看下改好后的效果:

修改ro.debuggable =

  在/build/core/main.mk可以直接把ro.debuggable指定为0 这样我们就关闭了全局debug模式了,但是平时分析应用需要调试所以我就保留了这个功能,借助mprop帮助我们隐藏ro.debuggable的值,这样既能保留全局debug模式,又隐藏了ro.debuggable的值,缺点就是每次手机重启,需要执行一下命令,才能做到隐藏。


  先push到/data/local/tmp ,然后执行。 

adb push C:\Users\cxf\Downloads\mprop170119\libs\armeabi-v7a\mprop /data/local/tmp/

adb shell

cd /data/local/tmp/
mysu
chmod 777 mprop
./mprop
setprop ro.debuggable 0


修改完成后我们测试一下。我们看到default.prop中还是ro.debuggable 0


不用担心其实app没有su权限读取不到这里。没有su权限的app想要获取 ro.debuggable的值一般只有两种方式

1.getprop ro.debuggable


2.利用反射android.os.SystemProperties来获取,测试后发现值也是0


我们打开AS看到进程还在可以附加,说明debug模式还在。


总结:这个修改ro.debuggable 后续需要优化一下。主要是让其不在依赖外部工具。

最后:已经测试多个金融类应用基本可以做到通杀ROOT检测,其实ROM不仅仅实现了此功能还实现了fart的一些脱壳点,反调试相关,后续在为大家一一介绍。

ROM后续会放入星球,并持续更新大家自取即可食用哦。

Android7.0以上设备Https抓包的姿势

Kali搭建钓鱼WIFI

PJ一个小游戏

magisk安装与配置

Android加固little总结

jnitrace干企业so强混淆

    随手分享、点赞、在看是对我们最大的支持

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存