文章目录
- x01. 前言
- x02. 分析
【🏠作者主页】:吴秋霖
【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作!
【🌟作者推荐】:对爬虫领域以及JS逆向分析感兴趣的朋友可以关注《爬虫JS逆向实战》《深耕爬虫领域》
未来作者会持续更新所用到、学到、看到的技术知识!包括但不限于:各类验证码突防、爬虫APP与JS逆向分析、RPA自动化、分布式爬虫、Python领域等相关文章
作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!
x01. 前言
本次案例为非公开站点分析,源于协助某省公安厅开展的一次黑产打击溯源取证行动。近年来,境内外黑产活动猖獗,涉及领域广泛
在本次行动中,通过对目标团队某成员设备中获取的提权信息进行短时间内的分析与还原,成功抽取到了一批有价值的数据,一般后台普通的网站防护都是较低的(但是它的后台很硬!防护很高)
此类黑产平台也许时常会顾虑到被滲透的风险,所以在里面加固了一套JS层面防护较高的整套产品,因为加上日志登录记录就算短时被黑掉只要能够发现就会被阻断(想要收集数据还需要花费时间逆向所有的加密跟数据解密)
这里作者据回忆复盘画了一下它后台防护的概览图,如下所示:
本案例中所需解决的防护措施主要集中在加密与逆向分析(验签、解密)由于需要快速获取 member的信息身份、手机号、银行卡等,破解加密防护后还需面对验证检测机制(U盾触发)这一环节是较为棘手的。触发风控机制将直接导致操作被阻断
在有限的时间内,需要尽可能完成分析与信息收集,因为系统会实时记录登录活动
据说此类防护流程在此类黑产平台应用广泛,价值高达数百万一套!并且会配备几名专业开发人员升级、开发、维护
再说个题外话,member的数量如果我没记错的话高达近10W,涉及的资金流水规模庞大~可见其黑产运作的复杂性和广泛性
x02. 分析
后台页面呈现的数据来源于多个独立接口,其中较为敏感和有价值的信息姓名、手机号、银行卡…这些字段的明文信息经过了两层解密,如下所示:
点击页面上红色形状的锁将弹出第一层(U盾验证码)进行数据解密,如下所示:
查看网络发包,可以看到所有的API接口地址都是经过动态加密处理的,如下所示:
接口请求参数跟响应数据同样全部也是经过加密处理的,如下所示:
通过对堆栈调用和 JS 代码的静态分析,发现了相关的加密特征。起初猜测目标可能采用了第三方 WAF(Web 应用防火墙)服务,但进一步分析发现其加密核心算法基于 WebAssembly(WASM)。加密逻辑可能由 C/C++ 编写后转换为 WASM 文件,并通过 JS 调用,具体如下图所示:
WASM 的引入在一定程度上提高了对 JS 逆向分析的防护能力,有效阻断了常规的 XHR 断点调试方式。对此,采用堆栈调用静态分析法,定位 API 接口加密前的明文数据及请求参数成为主要破解手段。好在目标常规的JS代码并未进行混淆或VMP
直接快速打日志点找到明文的接口发包以及头部所有参数的加密流程梳理快速进行验签还原,如下所示:
首先分析头部里面的第一个参数XXXXX1,对JS算法中生成的字符进行替换与反转最后再拼接,这里可以直接将一些无关的依赖函数去掉,使用任意语言可实现,如下所示:
def generate_result(self):
def r(p):
h = p.replace("&", "8").replace("*", "c").replace("%", "a")
return h[::-1]
def d(p, h, m):
return ''.join([p, h, m][::-1])
h = "" # 动态字符
m = "" # 动态字符
E = "" # 动态字符
return d(r(h), r(m), r(E))
请求头内的第二个XXXXX2参数的话通过分析JS发现是固定的,如下所示:
如上可看到它会对wasm处理后的API、参数都会进行二次校验,接下来分析头部的(3、4、5)三个参数,都是动态更新通过两层AES解密得到,第一层的话它将密文放在了localStorage中,通过对应的Key获取经过第一层AES解密后将得到新的密文(一串JSON),新的密文则放在JSON中某个Key下面,获取后再次经过AES解密即可得到最终参数的正确值如下所示:
所有加密相关的参数都处理完之后,拿到的都是密文数据,如下所示:
在上图的基础之上需要再次经过两层数据解密才能拿到完整的明文数据!第一层的话就是上面提到的U盾,这一步就省略不细说,直接看第二层的解密方法,所有字段的密文都交由一个独立的接口去进行解密,接受三个参数,如下所示:
_encryptedString(密文)、_signature(密钥)、_fingerprint(指纹)
这里逆向分析完数据的解密流程及算法后开始编写程序进行快速验证,明文数据如下所示: