检测开发实现:

Settings.Global.getInt(getContentResolver(), Settings.Global.ADB_ENABLED, 0);
Settings.Global.getInt(getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0);

定位思路:通过上面的代码获取状态的时候,最终会用到对应的字符串,即adb_enableddevelopment_settings_enabled,通过CE扫描APP进程内存,可以发现这些字符串一直都有,并且地址是不变化,所以对这些地址下读取的硬件断点即可实现定位:

2024-04-10T07:25:35.png

./stackplz --brk 0x70B957E0:r --stack -o tmp.log --showpc

2024-04-10T07:33:11.png

还有一种是获取系统属性,比如persist.sys.usb.config

./stackplz_arm64 -n littlewhitebear.safecheck -w __strlen_aarch64[str.f0] -f w:persist.sys.usb.config --stack

2024-04-10T07:39:01.png

简单来说就是hook一些基础函数,比如strlen、memcpy、__system_property_get,还有GetPropAreaForName、GetPropertyInfoIndexes之类的,不过如果能用frida,那就直接hook java层的函数就能快速定位

为什么图里的栈最后都是bss,经过分析是使用了dcc

2024-04-10T07:46:33.png

2024-04-10T07:48:10.png