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

今日网站

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(value) for key, value in params.items()])
        strSplit = url.split('&')
        strSorted = sorted(strSplit)
        strConvert = '&'.join(strSorted)
        return strConvert

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

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

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

完成加密结果是一串密文

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

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

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

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

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

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

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

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

Love&Share 
[ 完 ]

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值