某音小程序反编译签名加密静态分析

news/2025/2/5 22:16:18 标签: python, 算法, 小程序

文章目录

  • 1. 写在前面
  • 2. 抓包分析
  • 3. 逆向分析

【🏠作者主页】:吴秋霖
【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作!
【🌟作者推荐】:对爬虫领域以及JS逆向分析感兴趣的朋友可以关注《爬虫JS逆向实战》《深耕爬虫领域》
未来作者会持续更新所用到、学到、看到的技术知识!包括但不限于:各类验证码突防、爬虫APP与JS逆向分析、RPA自动化、分布式爬虫、Python领域等相关文章

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!

1. 写在前面

  春节假期在不知不觉中进入了倒计时,很多小伙伴都已经或即将开工,作者还有两天也要出去务工了!抽时间将节前的一篇文章补一下,可能很多小伙伴们都分析过微信端的小程序,跟Web逆向是一样的。现在像支付宝、云闪付、某音这些APP都会有自己的生态,也支持一些三方小程序的接入。而且某些场景下我们可能还不得不去分析这些渠道特有的小程序业务(因为某些小程序只在某些特定的渠道上架


分析目标

6Ieq5bex6ZqP5L6/5oqW6Z+z5pCc57Si5p+Q5Lqb572R5paH5bCP6K+057G75bCP56iL5bqP5a6e5pON

2. 抓包分析

在此之前作者曾尝试过某团队开发的一款Mac/Ios端的暴力抓包工具,但是对于某音来说还是有些不是太理想。虽然数据流肯定都是有的,但未经过解密对于逆向分析人员来说几乎提供不了太大的帮助,如下所示:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这里小程序跟APP上面的特征没有太大的关联,都是独立的。需要逆向分析的也就是一个请求头的签名参数,然后还有一个Token的时效性问题,在采集的过程中需要动态定期向服务端发送请求以获取最新的授权信息来避免掉线,如下所示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 逆向分析

这个场景不同于微信端的小程序可以直接通过借助工具启用控制台调试的方式去协助分析。所以这个场景下如果确实有某些数据抓取的需求,如果只是一次性或者紧急的情况下使用自动化加Hook拦截的方式也是可以的,作者的话这里还是采用的反编译小程序的方式通过去静态分析代码的途径来复现出签名的逻辑,因为从多个维度去推测的话一般的小程序就普通的一个签名难度是不大的。静态分析的手段就算很难或不能逆向出加密算法,也能够提供很多有效的信息,如下所示:

在这里插入图片描述

如上,在解压某音小程序的包之前我们需要拿到pkg的文件资源,这个的话直接在资源文件存储中等小程序加载刷完找到即可!然后最关键的就是sttpkg.js文件,这样才能反编译出小程序项目的完整源码。其具有特定的文件结构,是一个资源整合包。这个里面其实包含了很多个文件,每一个文件都有自己的元数据(如文件名、偏移量和数据大小),最终要解压也是从.js文件内找到所有数据把文件跟文件对于的内容抽出来,如下所示:

在这里插入图片描述

其实这里我们也可以自己尝试根据进制分析工具来编写解包的程序,其核心就是对二进制的数据进行处理,然后从文件中读取并解析出对应的值(版本、文件名、偏移量...)通过官方小程序开发者中心的部分资料可以知道其采用的流加载方案,反过来我们是可以通过模拟这种加载机制从文件流中逐步提取出每个文件的数据

在这里插入图片描述

最终解压出完成的小程序源码我们就可以开始分析对JS进行静态分析了,对于上面头部请求签名的参数进行一个全局搜索,很快就能够定位到!如下所示:

在这里插入图片描述

然后我们直接跳转到Pe的这个方法处,可以看到这里有排序的操作,同时又调用了T方法,那么这里继续跳到该方法处查看即可,如下所示:

在这里插入图片描述
在这里插入图片描述

由于我们是反编译解压出来的的源码进行分析,一般像其中签名涉及到的加密算法中用了加密Key,如果这个Key不是服务端接口或者在源码定义的话就需要动态调试分析查找了(稍微麻烦些),如下所示:

在这里插入图片描述

综上如果不去扣JS代码而直接使用第三发的加密模块来实现的话就会很简单了,加密算法实现如下所示:

python">import hashlib
def get_sign(e, t): 
    sorted_keys = sorted(e.keys())
    n = ""
    for key in sorted_keys:
        if e[key]:
            n += f"&{key}={e[key]}"
    n = n[1:]
    signature = hmac.new(t.encode('utf-8'), n.encode('utf-8'), hashlib.md5).hexdigest()
    return signature

在这里插入图片描述


http://www.niftyadmin.cn/n/5842433.html

相关文章

Python基础-使用list和tuple

目录 list tuple 练习 小结 list Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。 比如,列出班里所有同学的名字,就可以用一个list表示: >>> classmates …

【Java实战】高并发场景下账户金额操作的解决方案

文章目录 前言:金融系统中的并发危机一、并发问题现场还原1.1 问题代码示例1.2 并发测试暴露问题1.3 问题根源分析二、五大解决方案深度剖析2.1 synchronized同步锁2.2 ReentrantLock显式锁2.3 CAS无锁编程(Atomic原子类)2.4 数据库乐观锁2.5 分布式锁(Redis实现)三、方案…

http请求中的headers和body内容设置

1.headers 1.1 内容相关 headers {Content-Type: application/json, # 或 application/x-www-form-urlencoded, multipart/form-dataContent-Length: 1234, # 内容长度Accept: application/json, # 期望的返回格式Accept-Encoding: gzip, deflate, # 支持的压缩方式Acce…

mybatis plus 持久化使用技巧及场景

mybatis plus提供了很多强大的持久化工具,新手容易对这些工具使用困难,下面我总结了一下mybatis plus持久化的使用技巧及使用场景。 一、持久化 官方文档:https://baomidou.com/guides/data-interface/ (一)通过ser…

C++滑动窗口技术深度解析:核心原理、高效实现与高阶应用实践

目录 一、滑动窗口的核心原理 二、滑动窗口的两种类型 1. 固定大小的窗口 2. 可变大小的窗口 三、实现细节与关键点 1. 窗口的初始化 2. 窗口的移动策略 3. 结果的更新时机 四、经典问题与代码示例 示例 1:和 ≥ target 的最短子数组(可变窗口…

kamailio-Core 说明书 版本:Kamailio SIP Server v6.0.x(稳定版)

Core 说明书 版本:Kamailio SIP Server v6.0.x(稳定版) 概述 本教程收集了 Kamailio 导出的函数和参数 core 添加到配置文件中。 注意:此页面上的参数不按字母顺序排列。 结构 kamailio.cfg 的结构可以看作是三个部分&#xff…

【01-Qt-C++-android】

基于Qt的C实现安卓APP 网盘资料 qt 点击下载:5.14.2版本 通过网盘分享的文件:5.14.2 链接: https://pan.baidu.com/s/1VGY1Ija5U4mm4n4qiR-XDw?pwdjpjw 提取码: jpjwandroid 点击下载: sdk,ndk,jdk sdk,ndk,jdk下…

密码学的数学基础1-素数和RSA加密

数学公式推导是密码学的基础, 故开一个新的课题 – 密码学的数学基础系列 素数 / 质数 质数又称素数。 一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数&#xff0…