安卓 (设备id 指纹 运行环境 风控检测) 详细篇

[复制链接]
查看4174 | 回复2 | 2024-12-3 16:23:34 | 显示全部楼层 |阅读模式

立即注册,突破游客限制,与技术大牛交流切磋,畅享海量资源,让你的技术之路不再孤单!

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 洋咩咩 于 2024-12-3 16:36 编辑

设备指纹:SD卡/storage/emulated/0下可用空间大小和总空间大小
基本思路是调用stat函数,去获取/storage/emulated/0目录下的块大小和总数据块数量,还有空闲块的数量。
代码逻辑很明显,通过syscall去调用statfs函数,然后获取stat结构体中的数据。

获取DRM ID
这个是很多大厂很核心的设备指纹,包括某美,某盾的sdk都在收集。
具体是通过dlsym去导入链接上libmediandk.so,然后调用getPropertyByteArray函数去获取。

system prop
这个也不说了,也是必收集的字段,通过system_property_get函数去获取,包括以下字段,其中既有与设备指纹相关的,比如说buildid和fingerprint等等,也有可以用于风控的(sys.usb.state,ro.setupwizard.mode这些)
先看下通用的:
  1. ro.build.version.release
  2. ro.product.model
  3. ro.product.brand
  4. ro.boot.bootloader
  5. ro.build.version.securitypatch
  6. ro.build.version.incremental
  7. gsm.version.baseband
  8. gsm.version.ril-impl
  9. ro.build.fingerprint
  10. ro.build.description
  11. ro.build.product
  12. ro.boot.vbmeta.digest
  13. ro.hardware
  14. ro.product.name
  15. ro.product.board
  16. ro.recovery_id
  17. ro.expect.recovery_id
  18. ro.board.platform
  19. ro.product.manufacturer
  20. ro.product.device
  21. sys.usb.state
  22. ro.setupwizard.mode
  23. ro.build.id
  24. ro.build.tags
  25. ro.build.type
  26. ro.debuggable
复制代码
然后还有一些不常见的,可能是其他厂商的设备中才会有的字段:
  1. persist.sys.meid
  2. vendor.serialno
  3. sys.serialno
  4. persist.sys.wififactorymac
  5. ro.boot.deviceid
  6. ro.rpmb.board
  7. ro.vold.serialno
  8. persist.oppo.wlan.macaddress
  9. persist.sys.oppo.serialno
  10. ril.serialnumber
  11. ro.boot.ap_serial
  12. ro.boot.uniqueno
  13. persist.sys.oppo.opmuuid
  14. persist.sys.oppo.nlp.id
  15. persist.sys.oplus.nlp.id
  16. persist.sys.dcs.hash
  17. ro.ril.oem.sno
  18. ro.ril.oem.psno
  19. persist.vendor.sys.fp.uid
  20. ro.ril.miui.imei0
  21. ro.ril.miui.imei1
  22. ro.ril.oem.imei
  23. ro.ril.oem.meid
  24. persist.radio.imei
  25. persist.radio.imei1
  26. persist.radio.imei2
  27. persist.sys.lite.uid
  28. persist.radio.serialno
  29. vendor.boot.serialno
  30. persist.sys.oneplus.serialno
  31. ro.meizu.hardware.imei1
  32. ro.meizu.hardware.imei2
  33. ro.meizu.hardware.meid
  34. ro.meizu.hardware.psn
  35. ro.meizu.hardware.sn
  36. persist.radio.factory_phone_sn
  37. persist.radio.factory_sn
  38. ro.meizu.serialno
  39. ro.boot.psn
  40. ro.boot.meid
  41. ro.boot.imei1
  42. ro.boot.imei2
  43. ro.wifimac
  44. ro.wifimac_2
  45. ro.vendor.deviceid
  46. ro.isn
  47. ro.vendor.isn
  48. persist.radio.device.imei
  49. persist.radio.device.imei2
  50. persist.radio.device.meid
  51. persist.radio.device.meid2
  52. persist.asus.serialno
  53. sys.wifimac
  54. sys.bt.address
  55. persist.btpw.bredr
  56. persist.radio.imei
  57. persist.radio.imei2
  58. persist.radio.meid
  59. persist.radio.meid2
  60. ro.boot.fpd.uid
  61. ro.vendor.boot.serialno
  62. ro.boot.wifimacaddr
  63. persist.sys.wifi.mac
  64. persist.sys.wifi_mac
  65. sys.prop.writeimei
  66. ril.gm.imei
  67. ril.cdma.meid
  68. ro.boot.em.did
  69. ro.qchip.serialno
  70. ro.ril.oem.btmac
  71. ro.ril.oem.ifimac
复制代码
还有一部分用于设备识别和风控的,我会在后面放出来。

设备标识
这个就很多了,比如说IMEI、androidID都可以作为设备标识,这里还是把它收集的设备标识列出来。
大概就是这些:
  1. uuid
  2. ad_aaid
  3. ReaperAssignedDeviceId
  4. IMEI
  5. mdm_uuid
  6. ps_imei
  7. op_security_uuid
  8. ai_stored_imei
  9. device_serial
复制代码


通过stat获取文件的最近访问时间、最近修改时间、最近改变时间,Innode编号
这个也有很多大厂用了,主要针对以下一些文件和文件目录,读取文件结构体,然后上传修改时间等信息。
  1. /sdcard/Android/data/.nomedia
  2. /sdcard/Android/data/com.google.android.gms
  3. /sdcard/
  4. /storage/emulated/0
复制代码


硬件相关
这个很常见,一般主要有:
cpu核心数以及最大频率
CPU型号
内存(RAM)可用空间和总空间
cpu支持的系统架构
屏幕亮度、屏幕尺寸和屏幕超时时间
传感器生产厂家和类型(重要)
显示设备厂商名称(GL_VENDOR)和渲染器名称(GL_RENDERER)(重要)
内部存储(EMMC或UFS闪存)的序列号:/sys/block/mmcblk0/device/serial  (核心)
显示设备序列号:/sys/devices/soc0/serial_number  (核心)
内部存储SD卡的CID:/sys/block/mmcblk0/device/cid(核心)
电池相关,例如电压、电池容量、电池温度、电池健康百分比、充电状态等
input设备相关,读取/proc/bus/input/devices,获取注册的input设备信息,比如Name和Sysfs。

网络相关
比较常见的就是局域网接口ip、mac、子网掩码、dns服务器列表了,这个就不说了,基本上就是SVC获取网卡的信息。

文件哈希
由于部分文件从系统安装后基本上不会有变化,因此很多大厂用了某些路径下的文件,通过一定的策略,比如说stat选择谋个目录下修改时间最早的(一般是1970年几月几日),然后将这个文件算个hash,或者直接调用getdents64函数,去获取某一目录下的文件和文件夹,按照修改时间从小到大排列起来,然后将排列起来的文件名算个hash,亦或者获取文件名+文件inode号(st_ino)+文件结构体长度(d_reclen),然后计算哈希。
总之策略有很多种,效果如何需要运营验证。
一般来说有几个重要的文件目录,大厂的处理方法具有相似性。
1、/data/system
2、/vendor/firmware
3、/system/bin
4、/vendor/lib
5、/system/framework
6、/system/fonts

boot id
cat命令读取/proc/sys/kernel/random/boot_id,这个也是大厂必用的一个关键的设备指纹字段。

apk路径
读取设备上的应用安装列表以及apk路径,然后选择部分包名的路径作为设备指纹。
比如微信的随机路径 ,作为核心的唯一设备指纹,只要你不卸载重装微信,这个随机的路径就不会有变化

输入法列表
有些SDK会收集设备上安装的输入法列表,一般来说国内的HMOV手机预装的是定制搜狗输入法,谷歌pixel是谷歌原生输入法。
获取输入法列表的方法:
  1. ArrayList arrayList = new ArrayList();
  2. InputMethodManager inputMethodManager = (InputMethodManager)context.getSystemService("input_method");            
  3. List list = inputMethodManager.getInputMethodList();
  4. Iterator iterator = list.iterator();
  5. while(true) {
  6.     if(!iterator.hasNext()) {
  7.         return arrayList;
  8.     }
  9. Object object = iterator.next();
  10. arrayList.add(((InputMethodInfo)object).toString());
  11. }
复制代码


环境检测:
一、HOOK环境
在libNetHTProtect.so中主要检测了crc校验,还有frida和Xposed的一些特征:
1、检测frida的特征:
进程/proc/self/fd/目录,寻找是否存在关键字 linjector
/data/local/tmp/下是否存在re.frida.server
2、检测Xposed特征:
方法1:检测下列文件或文件路径是否存在:
  1. /sbin/.magisk/modules/riru_lsposed
  2. /data/adb/lspd
  3. /sbin/.magisk/modules/zygisk_lsposed
  4. /sbin/.magisk/modules/riru_edxposed
  5. /data/misc/riru/modules/edxp
  6. /data/adb/riru/modules/edxp.prop
  7. /sbin/.magisk/modules/taichi
  8. /data/misc/taichi
  9. /sbin/.magisk/modules/dreamland
  10. /data/misc/riru/modules/dreamland
  11. /data/adb/riru/modules/dreamland
  12. /system/bin/app_process.orig
  13. /system/xposed.prop
  14. /system/framework/XposedBridge.jar
  15. /system/lib/
  16. libxposed_art.so
  17. /system/lib/
  18. libxposed_art.so
  19. .no_orig
  20. /system/lib64/
  21. libxposed_art.so
  22. /system/lib64/
  23. libxposed_art.so
  24. .no_orig
  25. /system/bin/app_process_zposed
  26. /system/framework/ZposedBridge.jar
  27. /system/lib/
  28. libzposed_art.so
复制代码
方法2:Hook loadClass加载类,检查程序加载的Class中是否包含名为de.robv.android.xposed.XposedBridge的类名路径。
方法3:遍历/data/data/目录,寻找有无以下包名:
  1. de.robv.android.xposed.installer #Xposed框架
  2. org.meowcat.edxposed.manager #EdXposed框架
  3. com.tsng.hidemyapplist #隐藏应用列表
  4. com.tsng.hidemyroot #隐藏Root
  5. org.lsposed.manager #LSPosed框架
  6. me.weishu.exp #VirtualXposed 太极
  7. top.canyie.dreamland.manager #VirtualXposed 夢境
  8. io.va.exposed #VirtualXposed 夢境
  9. io.va.exposed64 #VirtualXposed 夢境
  10. io.virtualapp #VirtualApp
  11. io.virtualapp.sandvxposed64 #VirtualApp
复制代码
3、libc的CRC校验
拿到proc/self/maps中libc.so的基地址,并计算ELF文件中.text+.rodata+.eh_frame+.eh_frame_hdr 段的CRC校验值。


二、机型和系统判定
1、检测是否是lineageOS系统,这个sdk主要的检测方法是:
  1. 1、查找是否存在特征文件:
  2. /system/framework/org.lineageos.platform.jar
  3. /system/framework/org.lineageos.hardware.jar
  4. 2、检测systemprop中是否存在:ro.lineage.build.version
复制代码
2、检测是否是OpenHarmony系统,检测方法是:
  1. 检测systemprop中是否存在:ro.build.ohos.devicetype
复制代码
3、检测品牌机系统和设备能否对应,检测方法是:
  1. 遍历/system/framework/下所有以.jar结尾的文件名称,与机型字符串进行比较(strcasestr比较,不区分大小写)
复制代码
例如在vivo手机内,/system/framework/下存在以下文件,文件名中包含vivo:
截图202412031631377557.png

三、Bootloader解锁状态
检测bootloader是否已解锁。
方法1:检测props,主要检测项:
  1. 1、检测ro.boot.verifiedbootstate的值是否是orange
  2. 2、检测ro.secureboot.lockstate的值是否是unlocked
  3. 3、检测vendor.boot.vbmeta.device_state的值是否是unlocked
  4. 4、检测vendor.boot.verifiedbootstate的值是否是orange
  5. 5、检测ro.boot.vbmeta.device_state的值是否是unlocked
  6. 6、检测ro.boot.flash.locked的值是否是unlocked
复制代码
方法2:获取sys.oem_unlock_allowed的值

四、SIM卡
这个可以检测SIM卡是否存在,获取SIM卡的网络类型,SIM卡的ICCID等。
1.检测SIM卡是否存在,这个一般是读取props,获取gsm.sim.state这个的属性
2.获取SIM卡的网络运营商,通过系统服务TELEPHONY_SERVICE,然后调用getSubscriberId获取IMSIString,然后判断前5位:
地区的运营商以及对应的号段见下表:
  1. 移动 :46000,46002,46004,46007,46008
  2. 联通 :46001,46006,46009,46010
  3. 电信 :46003,46005,46011,46012
  4. 广电 :46015
  5. 港澳地区:
  6. 移动(hk) :45412,45413,45430
  7. 电信(hk) :45407
  8. 电信(澳门) :45502,45507
复制代码

五、截图工具和模拟点击工具
1.检测运行的服务中是否存在minicap、minitouch、stfservice、minitouchagent、stfagent、testminicap关键字。
2.检查/data/local/tmp/有无以下文件或文件目录:
  1. minicap.so
  2. minicap
  3. minitouch
  4. mini
  5. mini/minicap
  6. oat/arm64/scrcpy-server.odex
  7. vysor.pwd
  8. mobile_info.properties
  9. tc/mobileagent
  10. tc/input3.sh
  11. tc/mainputjar7
  12. com.cyjh.mobileanjian.id
  13. com.cyjh.mobileanjianen.id
  14. juejinAzykb/
  15. minicap.so
  16. juejinAzykb/TouchService.jar
  17. mqc-scrcpy.jar
  18. uiautomator-stub.jar
  19. cloudtestig/cloudscreen
  20. cloudtesting/touchserver
  21. txysvr.apk
  22. yijianwanservice.apk
  23. screen-shread10x64.so
  24. screen-shread5x32.so
  25. maxpresent.jar
  26. libtxysvr.so
复制代码
3.检查应用安装列表
检查有没有安装下列模拟点击的应用:
  1. com.cygery.repetitouch.pro
  2. com.cyjh.mobileanjian
  3. com.touchsprite.android
  4. com.cjzs123.zhushou
  5. com.touchspriteent.android
  6. com.zidongdianji
  7. org.autojs.autojspro
  8. org.autojs.autojs
  9. com.zdanjian.zdanjian
  10. com.zdnewproject
  11. com.ifengwoo.zyjdkj
  12. com.angel.nrzs
  13. com.cyjh.mobileanjian.vip
  14. com.shumai.shudaxia
  15. fun.tooling.clicker.cn
  16. com.dianjiqi
  17. com.miaodong.autoactionssss
  18. com.mxz.wxautojiafujinderen
  19. com.touchelf.app
  20. com.stardust.scriptdroid
  21. com.adinall.autoclick
  22. com.i_cool.auto_clicker
  23. com.kongshan.aidianji
  24. com.xptech.catclicker
  25. com.tingniu.autoclick
  26. com.yicu.yichujifa
  27. com.smallyin.autoclick
  28. com.ksxkq.autoclick
  29. com.x2.clicker
  30. com.scott.autoclickhelper
  31. com.auyou.auyouwzs
复制代码
检查有没有安装下列截图应用:
  1. com.github.uiautomator
  2. com.github.uiautomator2
  3. com.sigma_rt.totalcontrol
  4. com.genymobile.scrcpy
复制代码

六、模拟器
扫描常见的模拟器特征,主要检测的方法是:
1、是否存在以下文件目录:
  1. /system/bin/ldinit
  2. /system/bin/ldmountsf
  3. /system/lib/libldutils.so
  4. /system/bin/microvirt-prop
  5. /system/lib/libdroid4x.so
  6. /system/bin/windroyed
  7. /system/lib/libnemuVMprop.so
  8. /system/bin/microvirtd
  9. /system/bin/nox-prop
  10. /system/lib/libnoxspeedup.so
  11. /data/property/persist.nox.simulator_version
  12. /data/misc/profiles/ref/com.bignox.google.installer
  13. /data/misc/profiles/ref/com.bignox.app.store.hd
  14. /system/bin/ttVM-prop
  15. /system/bin/droid4x-prop
  16. /system/bin/duosconfig
  17. /system/etc/xxzs_prop.sh
  18. /system/etc/mumu-configs/device-prop-configs/mumu.config
  19. /boot/bstsetup.env
  20. /boot/bstmods
  21. /system/xbin/bstk
  22. /data/bluestacks.prop
  23. /data/data/com.anrovmconfig
  24. /data/data/com.bluestacks.appmart
  25. /data/data/com.bluestacks.home
  26. /data/data/com.microvirt.market
  27. /dev/nemuguest
  28. /data/data/com.microvirt.toolst
  29. /data/data/com.mumu.launcher
  30. /data/data/com.mumu.store
  31. /data/data/com.netease.mumu.cloner
  32. /system/bin/bstshutdown
  33. /sys/module/bstinput
  34. /sys/class/misc/bstXqpb
  35. /system/phoenixos
  36. /xbin/phoenix_compat
  37. /init.dundi.rc
  38. /system/etc/init.dundi.sh
  39. /data/data/com.ddmnq.dundidevhelper
  40. /init.andy.cloud.rc
  41. /system/bin/xiaopiVM-prop
  42. /system/bin/XCPlayer-prop
  43. /system/lib/liblybox_prop.so
  44. /system/bin/tencent_virtual_input
  45. /vendor/bin/init.tencent.sh
  46. /data/youwave_id
  47. /dev/vboxguest
  48. /dev/vboxuser
  49. /sys/bus/pci/drivers/vboxguest
  50. /sys/class/bdi/vboxsf-c
  51. /sys/class/misc/vboxguest
  52. /sys/class/misc/vboxuser
  53. /sys/devices/virtual/bdi/vboxsf-c
  54. /sys/devices/virtual/misc/vboxguest
  55. /sys/devices/virtual/misc/vboxuser
  56. /sys/module/vboxguest
  57. /sys/module/vboxsf
  58. /sys/module/vboxvideo
  59. /system/bin/androVM-vbox-sf
  60. /system/bin/androVM_setprop
  61. /system/bin/get_androVM_host
  62. /system/bin/mount.vboxsf
  63. /system/etc/init.androVM.sh
  64. /system/etc/init.buildroid.sh
  65. /system/lib/vboxguest.ko
  66. /system/lib/vboxsf.ko
  67. /system/lib/vboxvideo.ko
  68. /system/xbin/mount.vboxsf
  69. /dev/goldfish_pipe
  70. /sys/devices/virtual/misc/goldfish_pipe
  71. /sys/module/goldfish_audio
  72. /sys/module/goldfish_battery
  73. /sys/module/kvm_intel/
  74. /sys/module/kvm_amd/
  75. /init.android_x86_64.rc
  76. /init.android_x86.rc
  77. /init.androidVM_x86.rc
  78. /init.intel.rc
  79. /init.vbox2345_x86.rc
复制代码
2、system.prop下是否存在以下字段特征:
  1. init.svc.microvirtd
  2. bst.version
  3. ro.phoenix.version.code
  4. ro.phoenix.version.codename
  5. init.svc.droid4x
  6. microvirt.memu_version
  7. microvirt.imsi
  8. microvirt.simserial
  9. ro.px.version.build
  10. ro.phoenix.os.branch
  11. init.svc.su_kpbs_daemon
  12. init.svc.noxd
  13. init.svc.ttVM_x86-setup
  14. init.svc.xxkmsg
  15. ro.bild.remixos.version
  16. microvirt.mut
  17. init.svc.ldinit
  18. sys.tencent.os_version
  19. sys.tencent.android_id
  20. ro.genymotion.version
  21. init.svc.pkVM_x86-setup
  22. ro.andy.version
  23. ro.build.version.release
  24. ro.product.model
  25. ro.product.brand
  26. ro.boot.bootloader
  27. ro.build.version.securitypatch
  28. ro.build.version.incremental
  29. gsm.version.baseband
  30. gsm.version.ril-impl
  31. ro.build.fingerprint
  32. ro.build.description
  33. ro.build.product
  34. ro.boot.vbmeta.digest
  35. ro.hardware
  36. ro.product.name
  37. ro.product.board
  38. ro.recovery_id
  39. ro.expect.recovery_id
  40. ro.board.platform
  41. ro.product.manufacturer
  42. ro.product.device
  43. sys.usb.state
  44. ro.setupwizard.mode
  45. ro.build.id
  46. ro.build.tags
  47. ro.build.type
  48. ro.debuggable
复制代码
3.检查挂载点,是否存在以下目录:
  1. /mnt/shared/Sharefolder
  2. /tiantian.conf
  3. /data/share1
  4. /hardware_device.conf
  5. /mnt/shared/products
  6. /mumu_hardware.conf
  7. /Andy.conf
  8. /mnt/windows/BstSharedFolder
  9. /bst.conf
  10. /mnt/shared/Applications
  11. /ld.conf
复制代码
检查挂载点,检查/proc/mounts中是否存在vboxsf字段.
4.检查是否安装了虚拟机软件:
  1. 1.VMOS虚拟机
  2. 方法1:运行服务查找:tomq_MANAGER_SERVICE
  3. 方法2:ROOT_DIR查找VMOS_SYS_NUM
  4. 方法3:/proc/self/root/data/data/查找包名:“com.vmos.app”、“com.vmos.pro”、“com.vmos.ggp”
  5. 方法4:props查找:vmprop.androidid、vmprop.dev_ashmem、vmprop.ip、ro.vmos.simplest.rom
  6. 2.X8沙箱
  7. 方法1:props查找:ro.x8.version、ro.x8.uuid
  8. 方法2:查找文件目录:/x8/config/root.pkg.blacklist、/x8/config/full_vm是否存在
  9. 3.51虚拟机
  10. /proc/self/root/data/data/查找包名:“com.f1player”、“com.f1player.play”
  11. 4.虚拟精灵和虚拟大师
  12. /proc/self/root/data/data/查找包名:com.pspace.vandroid、com.yiqiang.xmaster
复制代码

七、改机软件
1.检测是否安装了改机软件:
  1. 检查包名是否存在:
  2. com.yztc.studio.plugin
  3. com.soft.apk008v
  4. com.uwish.app
  5. zpp.wjy.xxsq
  6. com.bigsing.changer
  7. zap.fh.wipe
  8. com.sollyu.xposed.hook.model
  9. com.soft.apk008Tool
  10. com.doubee.ig
  11. com.variable.apkhook
  12. com.addeasy.fastest
  13. com.xenice.mask
  14. com.shyl.artifact
  15. com.android1500.androidfaker
复制代码
2.检查/dev/wgzs目录下的内容是否存在,若存在则获取值:
  1. wg.cust.config.phone.id
  2. wg.cust.s_android_id
  3. wg.cust.sys.prop.filter
  4. wg.cust.config.phone.imeimackey
  5. wg.cust.config.phone.imei
  6. wg.cust.config.pkg.name
  7. wg.cust.destUids
复制代码

八、Root和Root工具1.包名检测,遍历/data/data/目录,寻找有无以下包名:
  1. com.topjohnwu.magisk
  2. eu.chainfire.supersu
  3. com.noshufou.android.su
  4. com.noshufou.android.su.elite
  5. com.koushikdutta.superuser
  6. com.thirdparty.superuser
  7. com.yellowes.su
  8. com.fox2code.mmm
  9. io.github.vvb2060.magisk
  10. com.kingroot.kinguser
  11. com.kingo.root
  12. com.smedialink.oneclickroot
  13. com.zhiqupk.root.global
  14. com.alephzain.framaroot
  15. io.github.huskydg.magisk
  16. me.weishu.kernelsu
复制代码
2.检查su文件是否存在

  1. /su/bin/su
  2. /sbin/su
  3. /data/local/xbin/su
  4. /data/local/bin/su
  5. /data/local/su
  6. /system/xbin/su
  7. /system/bin/su
  8. /system/sd/xbin/su
  9. /system/bin/failsafe/su
  10. /system/bin/.ext/.su
  11. /system/etc/.installed_su_daemon
  12. /system/etc/.has_su_daemon
  13. /system/xbin/sugote
  14. /system/xbin/sugote-mksh
  15. /system/xbin/supolicy
  16. /system/etc/init.d/99SuperSUDaemon
  17. /system/.supersu
  18. /product/bin/su
  19. /apex/com.android.runtime/bin/su
  20. /apex/com.android.art/bin/su
  21. /system_ext/bin/su
  22. /system/xbin/bstk/su
  23. /system/app/SuperUser/SuperUser.apk
  24. /system/app/Superuser.apk
  25. /system/xbin/mu_bak
  26. /odm/bin/su
  27. /vendor/bin/su
  28. /vendor/xbin/su
  29. /system/bin/.ext/su
  30. /system/usr/we-need-root/su
  31. /cache/su
  32. /data/su
  33. /dev/su
  34. /system/bin/cph_su
  35. /dev/com.koushikdutta.superuser.daemon
  36. /system/xbin/daemonsu
  37. /sbin/.mianju
  38. /sbin/nvsu
  39. /system/bin/.hid/su
  40. /system/addon.d/99-magisk.sh
复制代码
3.检查magisk相关文件是否存在

  1. /cache/.disable_magisk
  2. /dev/magisk/img
  3. /sbin/.magisk
  4. /cache/magisk.log
  5. /data/adb/magisk
  6. /system/etc/init/magisk
  7. /system/etc/init/magisk.rc
  8. /data/magisk.apk
复制代码
4.检测Android PATH环境变量,检测path路径下是否存在“/su”
5.检测 /proc/self/maps中的内容
  1. 1、检测 /proc/self/maps 是否存在名为“/memfd:/jit-cache”的段(加载zygisk模块时(也就是liblspd.so)的时候会讲其名称设置为jit-cache,这样的话so的内存段在maps中就是/memfd:/jit-cache)
  2. 2、通过检测map表是否存在匿名的并且具有可执行属性的内存判断是否存在lsposed
  3. 3、检测栈空间[stack]的权限是否为“rw-p”
复制代码
6.检测ro.build.tags的值,读取 /system/build.prop并检测ro.build.tags的值是否为“test-keys”
7.检测seLinux安全上下文,cat /proc/%d/attr/prev检测app进程的selinux安全上下文是否为“u:r:zygote:s0”
8.检查/data/local/tmp/有无以下文件
  1. shizuku
  2. shizuku_starter
复制代码

九、ebpf检测
  1. 1、系统调用 prctl(PR_GET_SECCOMP)用来获取seccomp的状态,返回值为0时代表进程没有被施加seccomp,否则代表进程被施加seccomp。
  2. 2、系统调用 prctl(PR_GET_NO_NEW_PRIVS)获取线程的no_new_prives属性,值为0表示常规,值为1代表在特权中操作。
复制代码
其他的都是比较常规的环境检测,比如VPN和代理,USB调试和开发者状态,是否开启了无障碍服务,以及调试TracerPid等,太多了就不一一列举了。

除了上面比较普通的环境检测之外,该大厂还引入了AI 检测模拟点击。

看了下代码,我觉得原理就是adb shell -> getevent,当在手机屏幕点击某个指定的X,Y坐标位置后,在命令行窗口可见监听到很多event。
截图202412031630501932.png
然后它将event的 [type] [code] [value] 全部上传了,去做后端的AI检测。
一种可能的判断策略猜测:
作弊和工作站的批量模拟点击,其获取的X,Y坐标位置等数据每次都相同,而真人使用设备的滑动点击操作,一定是随机的屏幕轨迹,不可能每次都是同样的X,Y坐标值。
这个SDK的AI模拟点击检测,可能就是将某一场景的触发屏幕操作的数据,上传到后台,后台通过上述策略完成判断,这样就可以检测工作室的批量模拟点击了。


评分

参与人数 1贡献 +1 收起 理由
K4NG + 1 大佬操作,秀我一脸

查看全部评分

这个人还没有签名
logic | 2024-12-3 16:38:28 | 显示全部楼层
总结的很全面,大厂级别的风控
这个人还没有签名
dali7478 | 2024-12-24 18:45:49 来自手机 | 显示全部楼层
学习到了
这个人还没有签名
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则