有些厂商安全人员会对app进行反调试限制,检测是否使用frida进行hook,这种情况下需要绕过反调试
绕过反调试方法:
- 找到反调试so文件进行删除(当so文件中包含业务代码是不能使用该方法)
.... 后续补充
原理:
当app启动时会加载so文件到内存,进行frida检测,这时候需要hook安卓底层so文件,当加载到某一个so文件app闪退或者是其他无法运行的情况时,说明最后一个so文件就是对frida进行了检测
1. hook加载so文件
import frida
import sys
rdev = frida.get_remote_device()
pid = rdev.spawn(["com.xx.yy"]) # hook app包名
session = rdev.attach(pid)
# 固定写法,hook 安卓底层
scr = """
Java.perform(function () {
var dlopen = Module.findExportByName(null, "dlopen");
var android_dlopen_ext = Module.findExportByName(null, "android_dlopen_ext");
Interceptor.attach(dlopen, {
onEnter: function (args) {
var path_ptr = args[0];
var path = ptr(path_ptr).readCString();
console.log("[dlopen:]", path); // 打印so文件
},
onLeave: function (retval) {
}
});
Interceptor.attach(android_dlopen_ext, {
onEnter: function (args) {
var path_ptr = args[0];
var path = ptr(path_ptr).readCString();
console.log("[dlopen_ext:]", path); // 打印so文件
},
onLeave: function (retval) {
}
});
});
"""
script = session.create_script(scr)
def on_message(message, data):
print(message, data)
script.on("message", on_message)
script.load()
rdev.resume(pid)
sys.stdin.read()
2. hook so文件记录
最后一个so文件为反调试so文件
hook打印.png
3. 删除so文件
# 进入到手机内部,删除这个so文件
adb shell
# 这个路径就是最后一个so文件的路径
cd /data/app/~~Vyyyw==/xx_vA==/lib/arm64
rm -rf libmsaoaidsec.so # 删除
4. 重启app
重新启动app,看使用frida调试看是否还会闪退,如没有闪退表示绕过反调试成功,如还是闪退则该方法不可行,需要使用其他方法