
介绍
本文先分析反调试,抓包以及加密后面再出吧
过程
现象
首先看下启动frida以及注入脚本等,app和frida的现象。
启动frida-server,然后打开App发现frida和app都是正常状态,说明目标应用没有检测server的任何特征

接着启动frida客户端,选择不注入脚本,两者也没有被杀死或者闪退

最后注入js或者空js脚本情况下,frida被杀死

这里就得出了个结论
App 检测的是 Frida 在运行 JS 时暴露的特征,而不是server、或者本身
注入js后流程
PC 端 frida 命令 → 通知手机 frida-serverserver 向 APP 进程 注入 frida-agent.soagent 启动 gum-js 虚拟机Frida 创建工作线程
Frida 在运行 JS 时暴露的最明显特征就是 gum-js-loop 线程 以及内存里面出来的那些字符串: gum frida
方案
隐藏掉线程名、去掉内存里面一些 检测字符串即可

console.log("[*] Starting Frida detection bypass...");var pthread_setname_np = Module.findExportByName("libc.so", "pthread_setname_np");if (pthread_setname_np) { Interceptor.attach(pthread_setname_np, { onEnter: function(args) { var name = args[1].readCString();if (name && name.indexOf("gum") !== -1) { console.log("[!] Blocked thread name: " + name); var fakeName = "JDWP-handler"; args[1] = Memory.allocUtf8String(fakeName); } } });}var strstr = Module.findExportByName(null, "strstr");if (strstr) { Interceptor.attach(strstr, { onEnter: function(args) { var haystack = args[0].readCString(); var needle = args[1].readCString();if (needle && (needle.indexOf("gum") !== -1 || needle.indexOf("frida") !== -1)) { console.log("[!] strstr: " + haystack + " -> " + needle); this.bypass = true; } }, onLeave: function(retval) {if (this.bypass) { retval.replace(ptr(0)); } } });}
广子
❝有需要用于爬虫、逆向、抓包的测试机又不想花时间折腾Root、刷机、环境配置可以来看下下面联系方式,或者B站视频评论区见

