type
Post
status
Published
date
May 22, 2023
slug
summary
一些简单的普通的已收集的检测环境是否安全的代码技术分享!
tags
安卓
系统调用
Linux
安全
category
技术分享
icon
password
很经典,很简单,很无聊!
ADB检测
系统设置
USB 调试状态采集,通过读取
Settings.Global.ADB_ENABLED / Settings.Global.ADB_WIFI_ENABLED 判断设备是否开启 ADB,作为设备风险指纹之一读取
Settings.Global.DEVELOPMENT_SETTINGS_ENABLED ,开发者选项是否启用,ADB 的前置条件文件系统
ADB 守护进程残留检测,通过校验
/dev/socket/adbd 是否存在判断设备是否运行 ADB 守护进程,命中即视为高危并标记 ADB 环境异常,作为设备运行时调试风险指纹之一。属性
读取
init.svc.adbd(running/stopped)、sys.usb.state、sys.usb.config(是否含 adb)、persist.sys.usb.config、ro.adb.secure —— 通过 __system_property_get 或反射 SystemProperties.get 获取。充电状态
调试器检测
系统属性
调试系统属性采集,通过查询
debug.checkjni / vendor.migl.debug 判断设备是否启用 JNI 检查或厂商调试开关,作为进程调试态识别的关键信号。进程线程
调试线程枚举检测,通过遍历
/proc/self/task/ 下所有线程的 comm 文件,对线程名进行大小写不敏感匹配,识别 JDWP / LLDB / GDB 等调试器注入的工作线程,作为运行时调试附加风险指纹。Java 层调试器连接检测
JDWP 调试器挂载检测,通过 JNI 跨语言调用
android.os.Debug.isDebuggerConnected() 判断当前进程是否有 Java 调试器(JDWP)已连接,作为运行时调试态的直接判定信号。android.os.Debug.isDebuggerConnected() 直接查询 ART 运行时内部的 JDWP 连接状态,无需解析 /proc 或系统属性,命中即代表调试器已实际挂载(而非仅开启了调试开关),为高置信度信号。APK 可调试标志检测
应用可调试性采集,通过 JNI 读取
ApplicationInfo.flags 字段中的 FLAG_DEBUGGABLE 位,判断当前 APK 是否以可调试模式打包,作为应用发布态合规性验证的核心指纹。FLAG_DEBUGGABLE 由 APK 打包时的 AndroidManifest.xml 中 android:debuggable="true" 决定,正式发布包该位必须为 0。命中代表当前运行的是调试版本或被篡改重打包的 APK,与 isDebuggerConnected() 区别在于:前者检测 APK 是否允许调试,后者检测是否已被调试,两者构成互补的双重验证。应用数据目录权限检测
数据目录安全性采集,通过读取
/proc/self/cmdline 获取当前包名,构造 /data/data/{package} 路径后检查其 Unix 权限位,判断应用私有数据目录是否对其他用户可写,作为文件系统层数据泄露风险的识别信号。正常情况下应用数据目录权限应为
0700(仅应用自身 UID 可读写),other-write(o+w)位被置位通常意味着设备已 Root 后权限被误改、或存在提权攻击导致目录被篡改,可能使第三方应用直接读写该应用私有数据。Seccomp 沙箱状态检测
系统调用过滤机制采集,通过读取
/proc/self/status 中的 Seccomp 字段,判断当前进程是否启用了 seccomp 沙箱,未启用时意味着进程可执行任意系统调用,作为内核层攻击面评估的辅助信号。值 | 含义 | 安全性 |
0 | 未启用 seccomp | 进程可调用任意 syscall,无内核级防护 |
1 | strict 模式 | 仅允许 read / write / exit / sigreturn |
2 | filter 模式(BPF) | 按自定义 BPF 规则过滤,Android 默认模式 |
正常 Android 应用进程(API 21+)均应运行在 seccomp-bpf 沙箱中(值为
2),值为 0 通常出现在 Root 环境、定制内核或被强制 ptrace 注入后沙箱被绕过的场景。调试器内存映射与文件描述符检测
调试器运行痕迹采集,通过扫描
/proc/self/maps 内存映射段与 /proc/self/fd 已打开文件描述符,识别 gdb / lldb 系列调试器及其 server 端的注入痕迹,命中即视为致命风险,作为调试器实际附加运行的强证据指纹。模拟器检测
Build 属性特征
各字段命中规则
检测项 | 字段 | 关键词样本 | 对应模拟器 |
emu.hardware_pattern | HARDWARE | vbox86、nox、ttVM_x86 | VirtualBox 系、夜神、天天 |
emu.fingerprint_pattern | FINGERPRINT | generic/sdk/generic、Andy、ttVM_Hdragon、vbox86p | AOSP 模拟器、Andy、天天、VirtualBox |
emu.model_pattern | MODEL | google_sdk、Emulator、Droid4X、Android SDK built for x86 | Android Studio 模拟器、Droid4X |
emu.manufacturer_pattern | MANUFACTURER | Genymotion、Andy、nox、TiantianVM | Genymotion、Andy、夜神、天天 |
emu.product_pattern | PRODUCT | sdk、Andy、Droid4X、nox、vbox86p | 通用 SDK、各类模拟器 |
emu.brand_device_pattern | BRAND/DEVICE | generic、Andy、Droid4X、nox、vbox86p;以及 BRAND 和 DEVICE 同时为 generic 的组合判定 | 通用模拟器双字段交叉验证 |
emu.tags_pattern | TAGS | test-keys | 工程版 / 自编译 ROM 签名 |
