Objection 基础入门 APP 逆向系列

本文介绍了objection工具,它将常用功能整合,可在命令行使用,主要支持安卓和IOS平台。objection依托frida,能实现内存搜索、方法hook等功能,有重打包组件、python包和agent.js文件三大组成部分,可完成应用注入和函数hook测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介:

如果说frida提供的各种API基础上可以实现无数的具体功能,那么objection就可以认为是将各种常用功能整合进工具中供我们直接在命令行中使用的利器。

objection集成的功能主要支持安卓和IOS两大移动平台,在对安卓的支持中objection可以实现快速完成内存搜索、类和模块搜索、方法hook以及打印参数、返回值、调用栈等常用功能是一个非常方便的逆向必备工具和内存漫游神器。

据官方wiki描述objection主要有三大组成:

1、objection 重打包的相关组件,objection可以讲frida运行时所需要的frida-gadget.so重打包进APP中,从而实现frida的无root调试。

2、objection 是一个python的pypi包,可以和包含frida-gadget.so 这个so文件的APP进行交互,从而运行frida的hook脚本,并分析hook的脚本。

3、objection 是从typescript项目编译而成的一个agent.js文件,该文件在运行过程中插了Frida运行库,使得objection支持的所有功能为可能。

总而言之 objection 依托frida完成了对应用的注入以及对函数的hook的模版,使用时只需要将具体的类填充进去即可完成相应的hook测试。

<think>我们正在处理一个关于绕过小红书安全机制的问题,特别是关于Frida Hook的检测。根据引用内容,我们可以总结出几种常见的Frida检测方法和绕过技术: 1. **检测Frida服务器进程**:如frida-server(引用[1])。 2. **检测Frida插件注入的迹象**:如Hook方法(引用[1])。 3. **反调试技术**(引用[1])。 4. **在Java层检测Xposed和Frida**(引用[2])。 5. **在Native层(so文件)中检测Frida**(引用[3])。 针对这些检测,我们可以考虑以下绕过方法: ### 1. 隐藏Frida进程 - 修改Frida-server的名称,避免被检测到(例如,将`frida-server`重命名为其他名称)。 - 使用`frida-gadget`代替`frida-server`(引用[2]中提到的方法)。`frida-gadget`可以以库的形式注入到目标应用中,从而避免独立的frida-server进程。 ### 2. 隐藏Frida特征 - Frida会在内存中留下一些特征,如特定的字符串、端口等。我们可以通过修改Frida的源码来改变这些特征(例如,修改默认端口27042,修改字符串等)。 - 使用第三方工具,如`frida-hidden`(一个用于隐藏Frida的工具)。 ### 3. 反反调试技术 - 针对反调试,我们可以使用Frida来Hook反调试函数,使其失效。例如,Hook `ptrace`函数,使其返回0(表示没有被调试)。 - 对于`/proc/self/status`中`TracerPid`的检测,我们可以通过Frida修改读取该文件的内容,将`TracerPid`改为0。 ### 4. 使用持久化的Frida注入 - 如引用[2]中提到的,使用`Riru-ModuleFridaGadget`(一个Magisk模块)将`gadget.so`注入到目标应用中,实现无root(或root环境下更隐蔽)的Frida注入。 ### 5. 检测并绕过Native层的Frida检测 - 如引用[3]所示,我们可以使用Frida Hook `dlopen`函数(或`android_dlopen_ext`)来监控so文件的加载,从而找到检测Frida的so文件。然后,我们可以分析该so文件中的检测函数,并使用Frida Hook这些函数,使其返回假的结果。 ### 具体步骤(以小红书为例) #### 步骤1: 尝试使用frida-gadget 1. 下载`frida-gadget`的so文件(从Frida的release页面下载对应架构的so文件)。 2. 将so文件注入到目标APK中。可以使用工具如`objection`或手动修改APK的smali代码,在应用启动时加载`gadget.so`。 3. 或者使用Magisk模块`Riru-ModuleFridaGadget`(需要root和Magisk环境)。 #### 步骤2: 修改Frida特征 如果应用仍然检测到Frida,我们可能需要修改Frida的特征: 1. 修改Frida的默认端口:在启动frida-server时使用`-l 0.0.0.0:任意端口`参数。 2. 修改Frida的字符串特征:通过修改Frida源码并重新编译。例如,修改`frida-core`中的字符串。 #### 步骤3: Hook反调试和检测函数 1. 使用Frida脚本Hook常见的检测函数,例如: - 检测Frida相关文件的函数(如`/data/local/tmp/frida-server`等)。 - 检测端口(如27042)的函数。 - 检测线程名的函数(Frida会创建一些特定线程)。 2. 在Java层,Hook检测Xposed和Frida的方法(如引用[2]中提到的类和方法)。 #### 步骤4: 绕过Native层检测 1. 使用Frida Hook `dlopen`和`dlsym`等函数,监控so的加载和符号解析。 2. 定位到检测函数后,编写Frida脚本Hook这些函数,使其返回假值。 ### 示例脚本 以下是一个示例脚本,用于Hook `dlopen`函数以监控so加载(如引用[3]所示): ```javascript function hook_dlopen() { // Android 8.0以上使用android_dlopen_ext var android_dlopen_ext = Module.findExportByName(null, "android_dlopen_ext"); if (android_dlopen_ext) { Interceptor.attach(android_dlopen_ext, { onEnter: function(args) { var path = args[0].readCString(); console.log("Loading: " + path); // 如果发现是检测库,可以进一步分析 } }); } else { var dlopen = Module.findExportByName(null, "dlopen"); Interceptor.attach(dlopen, { onEnter: function(args) { var path = args[0].readCString(); console.log("Loading: " + path); } }); } } hook_dlopen(); ``` ### 注意事项 - 绕过安全检测可能涉及法律和道德问题,请确保在合法授权的范围内进行。 - 不同版本的小红书可能采用不同的检测机制,需要具体分析。 ### 相关问题 1. 如何检测Frida的存在? 2. 除了Frida,还有哪些动态分析工具可用于Android应用? 3. 如何修改Frida源码以隐藏其特征? 4. 如何将frida-gadget注入到Android应用中? 5. 如何Hook Android的Native函数以实现反反调试? 希望这些信息能帮助你绕过小红书的安全检测。请注意,具体实现可能需要根据实际情况调整。</think>### 小红书 Frida Hook 绕过安全检测方法 根据逆向工程经验和小红书的安全机制特点,绕过其 Frida 检测的核心思路如下: #### 1. **隐藏 Frida 进程特征**(关键步骤) - 修改 `frida-server` 文件名和进程特征: ```bash # 重命名 frida-server 二进制文件 mv frida-server xiaozhushou # 启动时隐藏进程特征 ./xiaozhushou -l 0.0.0.0:8080 ``` - Hook 进程枚举函数防止检测: ```javascript // Frida 脚本:隐藏 frida 相关进程 const openPtr = Module.getExportByName(null, "open"); Interceptor.replace(openPtr, new NativeCallback((pathname, flags) => { const path = pathname.readCString(); if (path.includes("frida") || path.includes("gadget")) return -1; // 阻止访问关键文件 return this.invoke(pathname, flags); }, 'int', ['pointer', 'int'])); ``` 此方法通过拦截文件系统调用,阻止 App 检测 Frida 相关文件[^1][^2]。 #### 2. **绕过端口检测** - 修改 Frida 默认端口(27042)并禁用 TCP: ```javascript // 使用 Unix Socket 替代 TCP Java.perform(() => { const System = Java.use('java.lang.System'); System.getenv.overload('java.lang.String').implementation = (key) => { if (key === "FRIDA_SERVER") return "unix:/data/local/tmp/xiaozhushou.sock"; } }); ``` 小红书通常会扫描默认端口,修改端口协议可有效规避[^1][^3]。 #### 3. **对抗 Native 层检测** - Hook `dlopen` 监控 so 加载: ```javascript // 检测加载的 so 文件 const android_dlopen_ext = Module.findExportByName(null, "android_dlopen_ext"); Interceptor.attach(android_dlopen_ext, { onEnter: function(args) { const soName = args[0].readCString(); if (soName.includes("security")) console.log(`检测到安全模块: ${soName}`); } }); ``` 定位到安全模块后,可 Hook 其检测函数并返回 false[^3]。 #### 4. **内存特征擦除** - 修改 Frida 内存字符串特征: ```javascript // 擦除内存中的 "frida" 特征 const memscan = (pattern) => { return Memory.scanSync(Module.baseAddress, Module.size, pattern) .forEach(offset => Memory.protect(offset, 6, 'rwx')); }; memscan("66 72 69 64 61"); // "frida" 的十六进制 ``` 小红书常通过内存扫描检测 Frida 特征字符串[^2]。 #### 5. **使用 Gadget 注入模式** - 通过 `frida-gadget.so` 免 root 注入: ```bash # 将 gadget.so 注入 APK apktool d app.apk cp frida-gadget.so app/lib/armeabi-v7a/ # 修改 AndroidManifest.xml 添加 android:extractNativeLibs="true" ``` 此方法避免 `frida-server` 进程暴露(需配合 Magisk 模块)[^2]。 #### 6. **反调试绕过** - Hook 关键反调试函数: ```javascript // 绕过 ptrace 反调试 const ptracePtr = Module.findExportByName(null, "ptrace"); Interceptor.replace(ptracePtr, new NativeCallback(() => { return 0; // 始终返回成功 }, 'int', ['int', 'int', 'int', 'int'])); ``` ### 注意事项 1. **动态对抗**:小红书会频繁更新检测机制,需定期更新绕过方案 2. **环境伪装**:配合 Magisk Hide 隐藏 root 状态 3. **流量保护**:禁用 SSL pinning(使用 Objection 或 JustTrustMe) 4. **行为模拟**:避免高频调用敏感 API 触发行为检测 > 测试建议:先通过 Hook `java.io.File` 的 `exists()` 方法,监控 App 扫描的关键文件路径(如 `/proc/self/maps`),针对性设计绕过方案[^1][^2]。 --- ### 相关问题 1. 如何检测小红书使用的具体反调试技术? 2. Frida Gadget 注入与常规 Frida-server 有何性能差异? 3. 如何自动化更新 Frida 绕过方案应对安全机制升级? 4. 非 root 环境下如何实现持久化 Frida Hook? 5. 小红书的数据包加密协议如何逆向分析? [^1]: Frida Hook 入门(5)| 绕过 Frida 检测与反调试技术 [^2]: 逆向分析某AppFrida、Xposed、Root检测及protobuf数据解析 [^3]: 某瓣APP Frida反调试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值