Python 爬虫进阶必备 | 关于投诉平台网页参数 signature 加密逻辑分析

举报
xianyuplus 发表于 2021/02/03 15:03:15 2021/02/03
【摘要】 关于这个网站的分析流程这篇讲的很清晰,直接上干货。

今日网站

aHR0cHM6Ly90b3VzdS5zaW5hLmNvbS5jbi9jb21wYW55L3ZpZXcvP2NvdWlkPTYzODQ5MTI0MzE=

很久没有写原创了,其实我私底下囤了不少原创的文章,不过都不是爬虫相关的,发出来阅读不高想想还是不发了。

关于这个网站的分析流程还是老三样,直接开搞

抓包与加密定位

这个网站的下拉翻页是 ajax 加载的,所以可以直接在 xhr 翻页里面找到这个请求

打开请求的参数,可以看到有几个比较明显的加密参数是需要分析的

我们这里主要分析的是第三个参数signature

直接检索下参数,看看相关的结果(因为是 xhr 请求,用 xhr 断点也行,往上翻两个堆栈就能找到)

结果很少,点进这个文件继续在文件中检索

可以看到match到 9 个相关的值,可以逐一分析一下,不会分析也没有关系,每个检索项都打上断点即可

稍微看了下逻辑,这个 js 没有做混淆处理,断点可以直接打在下面这个位置上

主要逻辑是下面这行代码

("&signature=").concat(t)
var t = s([u, d, l, window.couid, e, c, h["type" + e]].sort().join(""))

加密分析

从上一个环节已经得出了 signature 的代码所以接下来只要分析出上面t赋值等式的代码就完成了

结合上下文的代码,其中比较简单的几个未知变量可以直接答案了

# 当前时间,参见 14469 行的代码 (new Date).getTime()
# 固定值,一串字符串$d6eb7ff91ee257475%
window.couid # 查询的id
# 类型,在这个例子中为固定值1
# 是pagesize,即一页有几条
h["type" + e]] # 这个是页数

出去上面的简单的值外,就只剩下d还有s两个未知了

变量 d 是一个函数

d = function(e, t, r{
        var n = ""
          , i = t
          , a = ["0""1""2""3""4""5""6""7""8""9""a""b""c""d""e""f""g""h""i""j""k""l""m""n""o""p""q""r""s""t""u""v""w""x""y""z""A""B""C""D""E""F""G""H""I""J""K""L""M""N""O""P""Q""R""S""T""U""V""W""X""Y""Z"];
        e && (i = Math.round(Math.random() * (r - t)) + t);
        for (var o = 0; o < i; o++) {
            n += a[Math.round(Math.random() * (a.length - 1))]
        }
        return n
    }(!116)

这个d,拿出来就能用

函数s是追进去是下面这个图中的方法

往上翻看到下面这个逻辑

我盲猜一手 sha256

我们把s()包裹的这串逻辑[u, d, l, window.couid, e, c, h["type" + e]].sort().join("")执行出来的结果拿出来看看

再拿到网页加密的网站上测试一下

猜对了,这样就完成了这个加密参数的逻辑分析了。

总结

有读者说这个是玄学,我讲讲大致的思路。

看到加密先多刷新几遍,看看加密参数的值,摸清出加密参数的规律,像我们今天分析的这个值,针对不同长度的值产生相同长度的值大概率是哈希类的加密算法,所以想 AES 之类的分组算法就排除了。

再结合分析逻辑,结合你看到的代码,用加密器辅助验证你的猜想(像我上面那样测试)可以解决 80% 的徒劳分析。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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