小红书app之shield 逆向

本文详细介绍了小红书app的Shield逆向过程,从通过Jni_load找到函数偏移到分析各个函数作用,特别是initializeNative、initialize和intercept函数。重点解析了算法流程,包括对key的AES加密和HMACMD5算法的使用,以及如何根据特定条件选择新版或旧版算法。最后,作者通过C语言还原了部分算法,并为Python提供了接口。

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

1.通过Jni_load 找到函数偏移

​ 定位到jni_load 函数,跟踪函数sub_A654。如图

其中sub_2e1f4 是对app的签名进行验证,直接nop,sub_736B0 是通过jni调用java的okhttp类的一些方法。sub_7306 是动态注册的函数。

找到地址off_8E0D0,各个函数地址如图所示。

2、分析各个函数的作用

2.1 initializeNative函数

initializeNative函数是对jni调用java方法的一些类进行初始化

<think>好的,用户想了解如何用Frida绕过小红书的安全检测。首先,我需要回忆一下Frida的基本原理。Frida是一个动态插桩工具,允许用户注入JavaScript代码到目标进程中,从而监控或修改应用的行为。不过,小红书这类应用通常会有反调试机制,比如检测Frida的存在。 根据用户提供的引用[1],检测Frida的一种方法是通过检查/proc/self/fd和/proc/self/task/pid/fd下的文件,寻找与Frida相关的文件。所以,绕过这种检测可能需要隐藏这些文件痕迹,或者修改Frida的默认配置,比如改变端口号,避免使用默认的27042端口。 接下来,引用[2]提到小红书可能使用了libtiny.so和libxyass.so这样的混淆库来处理一些请求头参数,比如x-mini-sig和shield。这意味着可能需要用Unidbg这样的工具来模拟执行这些so文件,或者通过动态分析来绕过混淆。用户可能需要学习Unidbg来应对控制流混淆的问题。 用户可能需要具体的步骤,比如如何配置Frida避免被检测,如何Hook关键函数来绕过签名验证。例如,Hook与请求头生成相关的函数,替换或绕过shield参数的生成过程。此外,还需要注意时间戳相关的头信息,如x-b3-traceid,可能需要动态生成正确的值。 同时,需要考虑小红书的检测机制是否还有其他层面,如环境检测(root、模拟器)、SSL Pinning等。用户可能需要结合多种工具,比如Xposed模块配合使用,或者使用r2frida进行更底层的分析。 最后,要提醒用户注意法律风险,逆向工程可能违反用户协议,需谨慎操作。需要确保回答中提到的步骤合法,并强调仅供学习研究之用。</think>关于Frida工具在小红书应用中的安全检测绕过方法,需结合应用防护机制及动态调试技术进行分析。以下是关键步骤和注意事项: ### 一、Frida检测规避基础 1. **默认端口修改** 小红书的防护系统会监控默认的Frida服务端口$27042$。建议使用非标准端口启动: ```bash frida-server -l 0.0.0.0:8080 ``` 通过修改`adb forward`转发规则建立连接[^1]。 2. **特征文件隐藏** 使用`readlink`检查文件描述符时需规避特征: ```python Interceptor.attach(Module.findExportByName("libc.so", "readlink"), { onLeave: function(retval) { const path = retval.readCString(); if(path.includes("frida")) { retval.writeUtf8String("/dev/null"); } } }); ``` ### 二、核心防护机制分析 小红书使用的防护体系包含: 1. **动态签名验证** 在`libtiny.so`中实现请求头$x-mini-sig$的动态生成,该库采用控制流平坦化混淆技术。可通过Hook`JNI_OnLoad`函数定位关键算法: ```javascript Java.perform(function() { const System = Java.use('java.lang.System'); System.currentTimeMillis.implementation = function() { return 1234567890; // 固定时间戳绕过时间校验 }; }); ``` 2. **设备指纹绑定** `libxyass.so`负责生成$x-legacy-did$等设备指纹参数。需Hook`__system_property_get`函数修改设备特征值: ```javascript Interceptor.attach(Module.findExportByName("libc.so", "__system_property_get"), { onEnter: function(args) { this.propName = Memory.readCString(args[0]); }, onLeave: function(retval) { if(this.propName === "ro.serialno") { Memory.writeUtf8String(retval, "custom_serial"); } } }); ``` ### 三、高级对抗技术 1. **内存特征擦除** 针对Frida线程特征进行内存扫描防护: ```javascript const pthread_create = Module.findExportByName("libc.so", "pthread_create"); Interceptor.attach(pthread_create, { onEnter: function(args) { const threadName = Memory.readCString(args[3]); if(threadName.indexOf("gum-js-loop") !== -1) { args[3].writeUtf8String("app_worker_thread"); } } }); ``` 2. **SSL Pinning绕过** 结合JustTrustMe模块与自定义证书锁定解除: ```javascript SSL_CTX_set_cert_verify_callback.implementation = function(ctx, callback) { return 1; // 强制返回验证成功 }; ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值