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

embedded/2025/2/7 0:14:56/

文章目录

  • 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.ppmy.cn/embedded/160153.html

相关文章

2502vim,vim文本对象中文文档

介绍 文本块用户(textobj-user)是一个可帮助你毫不费力地创建自己的文本对象的Vim插件. 因为有许多陷阱需要处理,很难创建文本对象.此插件隐藏了此类细节,并提供了声明式定义文本对象的方法. 你可用正则式来定义简单的文本对象,或使用函数来定义复杂的文本对象.如… 文本对…

【数据结构】树哈希

目录 一、树的同构1. 定义2. 具体理解(1) 结点对应(2) 孩子相同(3) 递归性质 3. 示例 二、树哈希1.定义2.哈希过程(1)叶节点哈希(2)非叶节点哈希(3)组合哈希值 3.性质(1) 唯一性 \re…

实施工程师:面试基础宝典

一.运维工程师和实施工程师的区别:工作内容不同、职能不同、工作形式不同 1.工作内容不同: 运维工程师要对公司硬件和软件进行维护。 硬件包括:机房、机柜、网线光纤、PDU、服 务器、网络设备、安全设备等。 实施工程师包括常用操作系统、应…

【含开题报告+文档+PPT+源码】基于Spring Boot的剧院购票平台的设计与实现

开题报告 本文聚焦于基于Springboot框架的剧院购票平台的设计与开发。该平台旨在为用户提供便捷、高效的在线购票服务,满足剧院演出票务管理的需求。通过Springboot框架的灵活性和扩展性,系统实现了用户管理、演出信息管理、座位管理、订单处理、支付集…

MongoDB学习笔记-解析jsonCommand内容

如果需要屏蔽其他项目对MongoDB的直接访问操作&#xff0c;统一由一个入口访问操作MongoDB&#xff0c;可以考虑直接传入jsonCommand语句解析执行。 相关依赖包 <!-- SpringBootDataMongodb依赖包 --> <dependency><groupId>org.springframework.boot</…

在Debian 12上安装VNC服务器

不知道什么标题 可以看到这个文章是通过豆包从国外网站copy的&#xff0c;先这样写着好了&#xff0c;具体的我有时间再补充&#xff0c;基本内容都在这里了。 在Debian 12上安装VNC服务器 简介 VNC&#xff08;Virtual Network Computing&#xff0c;虚拟网络计算&#xf…

Unity开发游戏使用XLua的基础

Unity使用Xlua的常用编码方式&#xff0c;做一下记录 1、C#调用lua 1、Lua解析器 private LuaEnv env new LuaEnv();//保持它的唯一性void Start(){env.DoString("print(你好lua)");//env.DoString("require(Main)"); 默认在resources文件夹下面//帮助…

Ubuntu部署Deepseek-R1模型(8b)

安装ubuntu系统 本机电脑系统ubuntu-20.04 #升级软件 sudo apt-get update#安装curl sudo apt-get install curl通过以上两条指令&#xff0c;完成了curl命令的安装。 安装ollama 打开Ollama官网 选择Linux&#xff0c; 给出如上图方框所示的一条指令 curl -fsSL https:…