首页
社区
课程
招聘
[原创]应用root检测通杀篇
2022-6-29 13:55 24334

[原创]应用root检测通杀篇

2022-6-29 13:55
24334

应用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/

1
2
3
4
5
6
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后续会放入星球,并持续更新大家自取即可食用哦。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2023-3-9 10:14 被爱玩逆向编辑 ,原因: 修改内容
收藏
点赞12
打赏
分享
最新回复 (18)
雪    币: 2096
活跃值: (5607)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
微启宇 2022-6-29 18:59
2
0

_

最后于 2022-6-29 19:01 被微启宇编辑 ,原因:
雪    币: 27
活跃值: (801)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
amwpecel 2022-6-30 14:20
3
0
什么手机rom
雪    币: 261
活跃值: (560)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tmi 2022-7-1 09:33
4
0
定制magisk通杀市面手机ROOT检测,还不用买谷歌手机,不用编译系统
雪    币: 528
活跃值: (851)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
寻梦之璐 2022-7-19 16:33
5
0
师傅,你这样做在data/data/下面获取不了最高权限
雪    币: 2
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
alwinwd 2022-7-20 08:09
6
0
mark
雪    币: 220
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
sekiro 2022-8-20 09:29
7
0
tmi 定制magisk通杀市面手机ROOT检测,还不用买谷歌手机,不用编译系统
定制magisk通杀root有哪些教程吗?能推荐一下吗?
雪    币: 261
活跃值: (560)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tmi 2022-8-22 09:21
8
0
sekiro 定制magisk通杀root有哪些教程吗?能推荐一下吗?
没有教程,只能去看源码
雪    币: 25
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_瑞彪 2022-8-22 19:54
9
0
师傅,你这样做在data/data/下面获取不了最高权限
雪    币: 0
活跃值: (353)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Erlösung 2022-8-31 16:14
10
0
你这样做,源码还是没有root 权限吧,只是让他无法检测,但是root 权限怎么获取呢?
雪    币: 0
活跃值: (353)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Erlösung 2022-8-31 18:18
11
0
现在很多在/data/ system 检测是否有写特征?这个你好像没有解决
雪    币: 1179
活跃值: (2604)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iyue_t 2022-9-6 00:32
12
0
需要修改构建su的 mk 否则不会构建su 也不会构建修改的
雪    币: 56
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
爱玩逆向 2022-9-9 16:40
13
0
Erlösung 你这样做,源码还是没有root 权限吧,只是让他无法检测,但是root 权限怎么获取呢?
提权命令已经被定义mysu 才能获取root
雪    币: 850
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
MichleMin 2022-12-12 12:21
14
0
tmi 没有教程,只能去看源码
能推荐一下源码吗
雪    币: 5
活跃值: (985)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
恋一世的爱 2022-12-16 00:22
15
0
打工人何苦为难打工人
雪    币: 21
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
MaouAce 2023-3-20 15:46
16
0
mprop 写了啥
雪    币: 2265
活跃值: (4319)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
Dyingchen 2023-4-10 11:22
17
0
设置自定义su名称后 在/data以及子目录下没有权限 
雪    币: 52
活跃值: (495)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-4-10 18:08
18
0
支持一下
雪    币: 140
活跃值: (358)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
龙之叶 2023-9-12 14:05
19
0
感谢楼主的无私分享
游客
登录 | 注册 方可回帖
返回