这篇文章上次修改于 225 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
检测开发实现:
Settings.Global.getInt(getContentResolver(), Settings.Global.ADB_ENABLED, 0);
Settings.Global.getInt(getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0);
定位思路:通过上面的代码获取状态的时候,最终会用到对应的字符串,即adb_enabled
和development_settings_enabled
,通过CE扫描APP进程内存,可以发现这些字符串一直都有,并且地址是不变化,所以对这些地址下读取的硬件断点即可实现定位:
./stackplz --brk 0x70B957E0:r --stack -o tmp.log --showpc
还有一种是获取系统属性,比如persist.sys.usb.config
./stackplz_arm64 -n littlewhitebear.safecheck -w __strlen_aarch64[str.f0] -f w:persist.sys.usb.config --stack
简单来说就是hook一些基础函数,比如strlen、memcpy、__system_property_get,还有GetPropAreaForName、GetPropertyInfoIndexes之类的,不过如果能用frida,那就直接hook java层的函数就能快速定位
为什么图里的栈最后都是bss,经过分析是使用了dcc
没有评论