Python 爬虫进阶必备 | 某财经资讯网站的签名加密逻辑分析(旧站更新)

举报
xianyuplus 发表于 2021/03/20 00:29:12 2021/03/20
【摘要】 今日网站aHR0cHMlM0EvL3d3dy5jbHMuY24vdGVsZWdyYXBo这个网站是 Js 逆向学员群里由学员提出的,这个网站的加解密之前已经写过案例了,听学员说加密已经更改了,所以抽个时间写一篇解析一下。(上面那串密文用 Base64 解码就行了)抓包与加密定位打开网站,同时打开抓包,所有的 XHR 请求里都带着 sign 加密参数搜索参数的结果非常多,所以我们直接打 XHR...

今日网站

aHR0cHMlM0EvL3d3dy5jbHMuY24vdGVsZWdyYXBo

这个网站是 Js 逆向学员群里由学员提出的,这个网站的加解密之前已经写过案例了,听学员说加密已经更改了,所以抽个时间写一篇解析一下。

(上面那串密文用 Base64 解码就行了)

抓包与加密定位

打开网站,同时打开抓包,所有的 XHR 请求里都带着 sign 加密参数

搜索参数的结果非常多,所以我们直接打 XHR 断点,就像下面这个样子

过一小会儿就自动断上了

网站断点断上的时候,这个参数如果已经生成了,那应该是去找堆栈,在堆栈里向上寻找。

所以不要乱了步骤

我这里就不纠结怎么找到这个参数的位置了,调试几遍就能看到,在下面图里标注的地方就是 sign 生成的地方

参数加密分析

这里的 p 的逻辑看着有点复杂

p = r ? l({}, b(l({}, r)), {sign: g(l({}, r))}) : {sign: g("")}

其实就是一个三元表达式,如果你看不明白这个逻辑是怎么执行的,可以看下之前推荐过的一些 Js 教程,这里不纠结这个。

可以看到这里主要的逻辑就是下面这段

sign: g(l({}, r))

所以我们找找这些方法都是些什么?

先进来的逻辑好像也有一些复杂的样子,不过我们不要担心这个,只要把注意力关注在 t 这个值的变化上

我们逐步执行到下面这行代码的时候,

我们看下t的值,我们通过console观察

可以看到这里中间的操作就是将参数拼接起来了

def params_format(params):
    url = ''
    if params:
        if not isinstance(params, dict):
            raise Exception('params必须是字典')  # 不是字典格式抛出异常
        url +'&'.join(
            [str(key) + '=' + str(valuefor key, value in params.items()])
        strSplit = url.split('&')
        strSorted = sorted(strSplit)
        strConvert = '&'.join(strSorted)
        return strConvert

写了一个大概意思的 Python 代码

我们现在已经琢磨好了大部分的代码,但是好像还没有加密的操作,所以我们继续执行

可以看到接下来执行的这一步就是一个加密了

完成加密结果是一串密文

我们追进去是下面这样的代码

到这里我直接用网站测试一下,看看能不能撞到

测试结果和上面打印出来是一样的,就是 sha1

直接分析下一步的t = a(t)

再次追进去,看到下面这样的代码

其实标志也很清楚,再测试下和 MD5 的结果一样一样的。

我也测试了一下这个网站的其他sign都是这个加密的逻辑,有些之所以会变是因为其中带入了时间戳,也是一个近乎没有难度的网站。

以上就是今天的全部内容了,咱们下次再会~

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。