2026/4/17 15:27:28
网站建设
项目流程
企业网站建设公司 末路,网店美工是做什么的,个人域名注册入口,wordpress 模板 html5#x1f513; 前言#xff1a;什么是 Hook#xff1f;
想象你在寄快递。
正常流程#xff1a;你把东西装箱 - 快递员打包封箱 - 发货。Hook (钩子)#xff1a;你买通了快递员。当你把东西给他时#xff0c;他先打开箱子拍张照#xff08;获取明文#xff09; 前言什么是 Hook想象你在寄快递。正常流程你把东西装箱 - 快递员打包封箱 - 发货。Hook (钩子)你买通了快递员。当你把东西给他时他先打开箱子拍张照获取明文甚至偷偷换掉里面的东西篡改数据然后再打包发货。在 Android 逆向中Frida 就是那个“被买通的快递员”。它能动态拦截 Java/Native 层的方法调用。️ 一、 核心原理动态插桩Frida 是一款基于 Python 和 JavaScript 的 Hook 框架。PC 端运行 Python 脚本发送指令。手机端运行frida-server它像一个寄生虫一样注入到目标 App 的进程中。JS 脚本我们在脚本里写好要拦截哪个类、哪个方法Frida 会在内存中把该方法的实现“偷梁换柱”。Frida 工作流程图 (Mermaid):目标 App 进程1. 注入 JS 脚本2. 动态修改内存3. 拦截调用4. 打印明文参数 (data)5. 返回加密结果攻击者 (PC端)frida-server (手机端)原始加密函数: encrypt(data)Frida Hook 逻辑️ 二、 环境准备已 Root 的安卓手机或模拟器如 Genymotion。PC 环境pipinstallfrida-tools手机环境去 GitHub 下载对应架构的frida-server。推送到手机并启动adb push frida-server /data/local/tmp/ adb shellchmod x /data/local/tmp/frida-serveradb shell/data/local/tmp/frida-server 三、 第一步定位嫌疑人 (Jadx 反编译)在 Hook 之前我们得知道 Hook 谁。假设我们抓包看到一个参数sign我们使用Jadx打开 APK 文件搜索关键词sign或encrypt。经过一番查找我们发现了一个可疑类com.example.demo.utils.SecurityUtil里面有一个静态方法md5Encode// 反编译出的 Java 代码片段packagecom.example.demo.utils;publicclassSecurityUtil{// 这就是我们要找的加密函数publicstaticStringmd5Encode(Stringstr,Stringsalt){// ... 复杂的混淆代码 ...returnresult;}}代码被混淆了看不懂没关系有了 Frida我们根本不需要读懂它内部在算什么我们只需要守在它的门口看它进去了什么参数。 四、 第二步编写 Frida 脚本 (JavaScript)新建一个文件hook_script.js。这是 Frida 的灵魂。// 当 Java 虚拟机加载完成后执行Java.perform(function(){console.log([*] 正在注入脚本等待目标函数触发...);// 1. 定位目标类// 注意如果是混淆代码可能是 a.b.c.d 这种名字varSecurityUtilJava.use(com.example.demo.utils.SecurityUtil);// 2. Hook 目标方法 (md5Encode)// overload 用于解决重载问题这里假设参数是两个 StringSecurityUtil.md5Encode.overload(java.lang.String,java.lang.String).implementationfunction(inputStr,saltKey){// --- 核心操作截获数据 ---console.log(\n);console.log([] 发现加密调用);console.log([] 明文参数 (str): inputStr);console.log([] 隐藏密钥 (salt): saltKey);// 3. 必须执行原始方法否则 App 会崩或逻辑中断varresultthis.md5Encode(inputStr,saltKey);console.log([] 计算结果 (sign): result);console.log(\n);returnresult;};}); 五、 第三步运行与收网确保手机上 App 正在运行。在 PC 终端执行命令(假设 App 包名是 com.example.demo)frida -U -f com.example.demo -l hook_script.js --no-pause触发逻辑在手机 App 上点击登录或刷新列表。见证奇迹你的 PC 终端会瞬间疯狂吐出日志[*] 正在注入脚本等待目标函数触发... [] 发现加密调用 [] 明文参数 (str): user_id10086timestamp1678888888 [] 隐藏密钥 (salt): Ai_Is_The_Future_2025 [] 计算结果 (sign): e10adc3949ba59abbe56e057f20f883e Bingo我们不需要分析几千行混淆代码直接拿到了核心明文数据它是怎么拼接入参的。隐藏密钥Ai_Is_The_Future_2025。有了这个盐值Salt你自己用 Python 写个 MD5 脚本就能模拟出合法的签名的请求了️ 总结与思考Frida 的强大在于它无视混淆直接从内存层面进行拦截。对于开发者来说这也敲响了警钟不要把密钥硬编码在 App 里在 Frida 面前App 就像是在“裸奔”。常见的 Hook 场景抓包解密拦截 SSL Pinning 或加密函数的入参。自动化测试Hook UI 点击事件。会员破解HookisVip()方法强行返回true。Next Step:尝试找一个简单的 Demo App比如 CTF 练习题自己动手写一个 Hook 脚本你会发现逆向世界的大门才刚刚打开。