一些app会检测是否有frida注入它, 如果注入了,通常采取的措施包含了app进程退出,app进程重启…
在检测frida方面,有很多方法
这些方法实际上是以 编程策略+检测函数 一起配合使用的
常见的编程策略,包含了多线程轮询检测…
检测函数当然很多
- 子线程 status文件检测
- maps文件检测
- 内存特征检测…
- frida端口检测
- 不限于此…
检测函数一般不会单独的使用,配合编程策略
编程策略本身不带有攻击性或者检测性, 要配合检测函数共同发挥作用
如果 编程策略和检测函数失效一个,那么大概就会检测失败,
而bypass编程策略是一个比较好的入口点
我们以 libmsaoaidsec.so
为例
libmsaoaidsec.so 部分检测手段
- 检测机制在native层实现
- 一般在elf的init_proc()函数中触发
- 会 pthread_create 创建2个检测线程
- eg:
bilibil1 - v7.26.1
版本中, 在got表导入了pthread_create- 如何绕过: nop pthread_create 的调用
- eg:
bilibil1 - v7.76.0
,xiaohongsu -v8.31.0
版本中, app通过dlsym动态获取了pthread_create- 绕过: 替换dlsym(xx, "pthread_create ")的返回地址,指向空函数
- eg:
- 找到init_proc()中的检测函数,暴力置空
- eg:
xiaohongsu-v8.31.0
- eg:
aiqiy1-v15.2.5
- eg: