Unidbg调用so学习

当我们使用抖音时,每一个操作都会通过HTTP请求与服务器进行交互,从而获取或者发送数据。这些HTTP请求包含了很多信息,这些信息就保存在请求头中。在这篇文章中,我们将一探请求头中的加密参数。

注意:本文的目的仅为了进行技术研究和分享,不提倡或支持任何形式的非法行为。

1. 什么是"六神"参数?

"六神"参数是抖音请求头中的六个核心参数,它们是:X-LadonX-KhronosX-ArgusX-GorgonX-HeliosX-Medusa。这些参数对于识别用户设备以及获取用户相关的数据非常重要。

测试过程中发现一些特定的接口会对这6个参数进行验证,如何构造这些加密参数呢?

2. 如何生成这些参数?

这些参数的生成通常依赖于设备的一些硬件信息如IMEI、MAC地址等,以及软件信息如应用的安装时间、更新时间等。具体的生成算法可能会依赖于抖音的内部逻辑,可能涉及到一些复杂的哈希函数和加密算法。

分析了下,后发现关键算法在libmetasec_ml.so中,还原算法有一定难度,在这里,可以采用主动调用加密参数生成函数的办法,省时省力省心。

主动调用so中加密函数生成有好几种办法,frida-rpc、lsposed、自写代码加载so进行调用等等。

这里推荐使用unidbg框架,模拟Java虚拟机加载生成算法的so,并调用相关位置生成加密参数。

3. unidbg主动调用so中函数

 创建模拟器实例,模拟32位或者64位

emulator = AndroidEmulatorBuilder.for64Bit().setProcessName("com.ss.android.ugc.aweme").build(); 

系统类库解析

final Memory memory = emulator.getMemory(); 
memory.setLibraryResolver(new AndroidResolver(29));

创建虚拟机

vm = emulator.createDalvikVM();

加载加载libttEncrypt.so到unicorn虚拟内存

DalvikModule dm = vm.loadLibrary(TempFileUtils.getTempFile("libmetasec_ml-23.9.0.so"), true);

手动执行JNI_OnLoad函c数

dm.callJNI_OnLoad(emulator);

初始化差不多就这样,接下来就是补环境,加载so后运行会提示找不到的方法签名,自行加上就行了。

 public DvmObject<?> callStaticObjectMethodV(BaseVM vm, DvmClass dvmClass, String signature, VaList vaList) {
        //省略
        return super.callStaticObjectMethodV(vm, dvmClass, signature, vaList);
    }

 public DvmObject<?> callObjectMethodV(BaseVM vm, DvmObject<?> dvmObject, String signature, VaList vaList) {
        //省略
        return super.callObjectMethodV(vm, dvmObject, signature, vaList);
    }

传入url和请求头,得到结果:

{"X-Ladon":"J6k8auF3LGw8gWhB6j2IAxFAS0GhPIFZ5GppELphx7nmIra6","X-Khronos":"1694251445","X-Argus":"qfXImGca75htu1c89fDAl+qZ/JLW2EhxGLvZnYDV+qlNPxmdc5lOwrQ2LC69uJUy/mb5evybJt6dCUn0u2kqg2EZ4kw8pLBUC9TIu4uEflkmeT6ULrMGZ7FItqRgNrSLPkO89Sc8kPYG6UR+pVeLRYKlI2ZwqTKKWT9Dbrfj3jI+vJh/YABDswJdVqk2NrCF0r8Xnr9SE6uK0sM2VCIF3DwDJDDjw7IyM9Ou5WCSe7fhQQ==","X-Gorgon":"840420f80000a85d3aaceedfbc768d3377c115c79fd782790d56","X-Helios":"YihYG23nqP0LdwRe42czwue5hX4CYAfxfUKXWcLDBAVMrqKe","X-Medusa":"tzn8ZINVaQiAS6b/Ue3hAX2BhUInFCE50FFmX4nhBm2n1IGgK3RW1L85wUZhQkuEwUJVxr5C4sUcrjJzD6o4WuaxpSAVCmUTiq/y+AkTXaTAQIfjqsrLBEs47NzzFaC0W7+0/VrAX5/3yAPIT90vmsJzO/BLENnOznJXA+U7LKy2I5WOEEn8OKGdQQnj00brMcpKPB2baPTjC0GVLSP1YegmHQlNx5fFzd+dfstzsO/Y6KJ6LrmjJ13FqAFwr2QAGWJ4NrlMMAmGUr/XNiwLx4t2JUbRt2Q6IRV400XEtjzGm15TrM13xPJoY+OnuozE5rTns1+fe+wxlETM5vnP23fxIM5dRQ=="}

注意:尽管我们可以理解这些参数的作用和生成方式,但是我们不应该尝试去伪造这些参数。这样做可能会违反抖音的使用协议,甚至可能触犯法律。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值