文章目录
- 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