文章总结: 本文主要介绍了针对某旅行平台App的反调试绕过技术。通过分析发现,该应用检测的是Frida运行JavaScript时暴露的特征,如特定的线程名和内存字符串。为此,作者提供了一段Frida脚本,通过拦截系统函数来隐藏gum-js-loop线程名,并过滤掉包含gum和frida的字符串,从而实现绕过检测的目的。
综合评分: 85
文章分类: 安卓逆向,渗透测试,二进制安全,爬虫,WEB安全
【安卓逆向】某旅行平台反调试绕过
原创
可乐还是百事好 可乐还是百事好
爬虫逆向小林哥
2026年3月31日 09:01 江苏
介绍
本文先分析反调试,抓包以及加密后面再出吧
过程
现象
首先看下启动frida以及注入脚本等,app和frida的现象。
启动frida-server,然后打开App发现frida和app都是正常状态,说明目标应用没有检测server的任何特征
接着启动frida客户端,选择不注入脚本,两者也没有被杀死或者闪退
最后注入js或者空js脚本情况下,frida被杀死
这里就得出了个结论
App 检测的是 Frida 在运行 JS 时暴露的特征,而不是server、或者本身
注入js后流程
PC 端 frida 命令 → 通知手机 frida-server
server 向 APP 进程 注入 frida-agent.so
agent 启动 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站视频评论区见
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:爬虫逆向小林哥 可乐还是百事好 可乐还是百事好《【安卓逆向】某旅行平台反调试绕过》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论