逆向目标:aHR0cHM6Ly9mdXd1Lm5oc2EuZ292LmNuL25hdGlvbmFsSGFsbFN0LyMvc2VydmljZS1jYXRhbG9n
若有侵权,联系删除,本文档只是交流学习,任何问题与作者无关!
1.目标数据
国密算法是我国自主研发的算法,先简单介绍一下
事实上从 2010 年开始,我国国家密码管理局就已经开始陆续发布了一系列国产加密算法,这其中就包括
SM1、SM2、SM3 、SM4、SM7、SM9、ZUC
(祖冲之加密算法)等,SM
代表商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术。SM1
和SM7
的算法不公开,其余算法都已成为ISO/IEC
国际标准。在这些国产加密算法中,
SM2、SM3、SM4
三种加密算法是比较常见的,在爬取部分网站时,也可能会遇到这些算法,所以作为爬虫工程师是有必要了解一下这些算法的
本次逆向的网站就使用了SM2加密
2.抓包分析
发现响应数据是加密的,加密方式也写的很清楚,国密SM加密
发现载荷部分,也进行了加密,也是SM算法
请求头部分:
也进行了加密,这个网站可谓是多重加密,好,我们现在来看看逆向部分
3.逆向开始
对于请求头的逆向我们可以直接搜索关键词,也可以进行hook,但是这个网站直接搜关键词方便一些
断点,直接就能断住
请求头的逆向还是比较简单的
s是一个魔改的时间戳,直接扣下来就可以了
看看h,h是一个函数生成的结果,但是没传入任何值,所以是个随机的,扣下来即可
到现在nonce和timestamp已经完成逆向了,再看看signature,他是一个sha256对s+h+s加密的结果
直接调用标准库即可
请求头就只剩下一个X-Tingyun,直接全局搜索
也是直接扣下来即可
到现在,我们就可以用JS复现请求头的加密
生成结果如下:
3.载荷部分
载荷部分加密就在请求头加密的下面
t传入了一个object对象,但加密的只是t.data的部分
当中有m p v 三个函数,作用是对数据序列化和拼接,直接扣下来就行了
在加密部分,有个d
这可能是加密的key,我们现在看看是怎么生成的
往上看看
发现d是一个明文数据,那么怎么转变到的加密数据的呢?
往下执行下一步函数试试
发现是在这里变成加密数据的
看看这个e.form是什么
发现这个e是一个自执行函数,e是传递的参数
很明显,这是一个webpack,找到加载器n
找到加载器之后,使用加载器调用b639这个函数就可以了
这个加密函数o也是一个加载器加载的函数,但是也是标准算法,可以直接调用JS的加密算法
也可以直接把webpack扣下来
有一点需要注意,在加载器中加载代码,可能有一些页面逻辑或者环境检测
例如:
需要删除
最后几行看到有个函数运行是加载器或者内部调了加载器,就把他删掉不然影响我们逆向
解密函数同理,调用webpack的sm或者标准库的sm解密都可以实现
4.逆向完成,发送请求
请求成功,完结撒花
5.作者
如果有问题或者需要爬虫需求,都可以联系作者,欢迎咨询