欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 某音小程序反编译签名加密静态分析

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

2025/4/23 12:21:18 来源:https://blog.csdn.net/qiulin_wu/article/details/145155473  浏览:    关键词:某音小程序反编译签名加密静态分析

文章目录

  • 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代码而直接使用第三发的加密模块来实现的话就会很简单了,加密算法实现如下所示:

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

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词