今日网站
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赋值等式的代码就完成了
结合上下文的代码,其中比较简单的几个未知变量可以直接答案了
   
    - 
     
      
     
     
      
       u # 当前时间,参见 
       14469 行的代码 (
       new Date).getTime()
      
     
- 
     
      
     
     
      
       l # 固定值,一串字符串$d6eb7ff91ee257475%
      
     
- 
     
      
     
     
      
       window.couid # 查询的id
      
     
- 
     
      
     
     
      
       e # 类型,在这个例子中为固定值
       1
      
     
- 
     
      
     
     
      
       c # 是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
      
     
- 
     
      
     
     
      
           }(!
       1, 
       16)
      
     
这个d,拿出来就能用
 
 
 函数s是追进去是下面这个图中的方法
 
 
 往上翻看到下面这个逻辑
 
 
 我盲猜一手 sha256
我们把s()包裹的这串逻辑[u, d, l, window.couid, e, c, h["type" + e]].sort().join("")执行出来的结果拿出来看看
 
 
 再拿到网页加密的网站上测试一下
 
 
 猜对了,这样就完成了这个加密参数的逻辑分析了。
总结
有读者说这个是玄学,我讲讲大致的思路。
看到加密先多刷新几遍,看看加密参数的值,摸清出加密参数的规律,像我们今天分析的这个值,针对不同长度的值产生相同长度的值大概率是哈希类的加密算法,所以想 AES 之类的分组算法就排除了。
再结合分析逻辑,结合你看到的代码,用加密器辅助验证你的猜想(像我上面那样测试)可以解决 80% 的徒劳分析。
   
    - 
     
      
     
     
      
       Love&Share 
      
     
- 
     
      
     
     
      
       [ 完 ]
      
     
- 
     
      
     
     
       
      
     
- 
     
      
     
     
      
       对了,看完记得一键四连,这个对我真的很重要。
      
     
转载:https://blog.csdn.net/weixin_43189702/article/details/112792348
