今天给你分享一下篇反反爬的实例。

一个思路,也许给你带来些许启发..

也许你会遇到这样的情况:

打开某个网站,可以看到页面是正常显示的,但是当你通过 Python 去请求的时候,你会得到一堆无厘头的 JS..

像这样的操作,应该怎么玩呢?

接下来由我给大家演示一下。


很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取****,电子书籍,以及课程的源代码!
QQ群:1156465813

当你使用 requests 请求某网站的时候,得到的是这样的:

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

这时候就要看看是不是用啥了,是不是协议头问题呢?

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

通过不断的测试 最终确定是 cookie 中 acwsc_v2 的问题。

那不就好办了,我们使用一个hook:

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

这段 hook 有俩种使用方式:一是油猴、二是fd插件。看各位的喜好啦!

打上 hook,打开 F12 调试器,刷新网页,先是遇到了我们熟悉的无限 debugger:

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

常规的做法是在 debugger 一行左边右键选择 never pause here:

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

接着 F8 放行断点就行了

如果没有断下来,先清除cookie在刷新网页:

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

很快就能看到 cookie 被 hook 下来了。

接着在 call stack 往上找:

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

到 reload 这里看到 x 是我们需要的值:

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

接着可以观察到原来是在 settimeout 里面做了操作:

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

所以我们所需要分析的逻辑就变为了:

var _0x23a392 = arg1[_0x55f3('0x19', '\x50\x67\x35\x34')]();

 

arg2 = _0x23a392[_0x55f3('0x1b', '\x7a\x35\x4f\x26')](_0x5e8b26);

不懂的人会看不懂这种混淆代码,其实这是一种 ob 混淆,可以看到很多函数名变量名基本被混淆了的。

但是不用慌 我们可以通过 AST 的方法或者硬刚的方法来解决:

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

可以看到只需要把解密函数的代码圈起来就能拿到解密后的值,我们就可以按照这个来分析改写了。

这里使用了arg1:

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

arg1就在页面上层能找到:

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

然后整个圈起来:

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

扣和改就行了,工作量不会很大:

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

还原改写后运行试试看,会看到报一个错,缺少提示的变量,那我们就去 js 里面找这个值:

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

找到这一段值补上即可,通过几次刷新尝试,发现这段值是固定的,所以可以写死。

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

补完后运行:

 

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

发现和网页计算的一模一样,那我们这个值就正确啦。

 

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

最后我们用python实现:

 

当你通过 Python 请求网站得到一堆无厘头的 JS 时...

 

完美!

在这里还是要推荐下我自己建的Python开发学习群:1156465813,群里都是学Python开发的,如果你正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2020最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴!
 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-24
  • 2021-08-25
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-03-05
猜你喜欢
  • 2021-09-08
  • 2021-12-14
  • 2021-08-08
  • 2021-07-29
  • 2022-12-23
  • 2022-12-23
  • 2021-09-19
相关资源
相似解决方案