使用 stackplz 过anti-frida
一般检测frida 比较常用的一个函数是 strstr. 这个函数类似于 isSubString. 判断子串
我们使用 stackplz hook strstr 看看是谁在调用strstr
1 | ./stackplz -n tv.danmaku.bili -l /apex/com.android.runtime/lib64/bionic/libc.so -w strstr --stack |
执行结果如下
看看strstr的参数, 到底是不是针对一些环境的检测
1 | /stackplz -n tv.danmaku.bili -l /apex/com.android.runtime/lib64/bionic/libc.so -w strstr[str:x0,str:x1] -o tmp.log |
结果如下
google 一搜
大概率就是 libmxxxoxxdsec.so 在检测frida
从hook strstr的调用堆栈里我们可以看到是从 thread_start 开始的。 所以我们hook thread_create 看看, 创建线程比较早,所以先关掉app, 执行命令后再打开app
1 | ./stackplz -n tv.danmaku.bili -l /apex/com.android.runtime/lib64/bionic/libc.so -w pthread_create --stack -o tmp.log |
可以看到结果, 有13处
ida打开 看看 0x1d304
F5 看看
这里很像是在创建线程。 我们试试patch, 强行让它不创建。 把 BLR X19 指令改为 nop. 在此之前还有一个问题, patch后会不会崩溃?
arm64 函数调用约定 返回值给x0, 我们看看后续有没有用到x0. 如果没用到我们可以这么改, 用到了程序可能就会崩溃
看汇编
发现并没有用到返回值。 所以我们打开 https://armconverter.com/
看看nop 对应的机器码
用 010editor 把 BL X19 对应的机器码全部改为 1F2003D5