Python爬虫之JS逆向入门篇

我们都知道现在是大数据时代,用爬虫来获取数据的越来越多,与之对应的就是破解反爬的难度也越来越大

比如现在的网站一般都有各种各样的 JS 加密,app有参数加密或者返回的数据给你加密,甚至加壳! 所以如果不懂 JS 逆向和 app 逆向,这样爬虫很难生存

有幸看到群里有朋友推荐一个 JS 逆向入门的网站,没有经验的朋友可以用来入门练手 有经验的朋友可以用来加深自己的实战经验

网站分析

网站地址:http://www.landchina.com/default.aspx?tabid=226

我们的主要目标是需要获取下面的信息

第一步当然是抓包分析返回的数据,如果你不知道网站是否有 JS 加密

最好的办法是直接用 requests 请求,然后查看响应内容与网站源代码是否相同

响应

上面是用代码请求返回的响应 显而易见 html 中嵌入了 JS,而且很可能做了跳转,因为有个 location 的变量

JS破解

下面是通过 Chrome 浏览器抓包的过程,共请求了三次才获取到最终的数据

其中重定向的链接是在第一次请求返回的响应里面,用 JS 生成的

location

SO, 我们将返回的 JS 扣出来,下面是我提取出来的 JS

function stringToHex(str) {
    var val = "";
    for (var i = 0; i < str.length; i++) {
        if (val == "") val = str.charCodeAt(i).toString(16); else val += str.charCodeAt(i).toString(16);
    }
    return val;
}

function YunSuoAutoJump() {
    var width = screen.width;
    var height = screen.height;
    var screendate = width + "," + height;
    var curlocation = window.location.href;
    if (-1 == curlocation.indexOf("security_verify_")) {
        document.cookie = "srcurl=" + stringToHex(window.location.href) + ";path=/;";
    }
    self.location = "/default.aspx?tabid=226&security_verify_data=" + stringToHex(screendate);
}

提取出来之后,我们可以先看下 JS 里面的内容,然后本地进行调试,当然前提是你电脑上安装了 node.js 可以看到 self.location 就是我们所需要的重定向链接

其中 curlocation 这个参数并没有用到,我们可以将相应的代码注释

还有个 screen 的属性,查询下资料可知是获取用户屏幕信息,我们直接改掉即可!

然后将 location 值返回,下面是改正后我们所需要的 JS

改正后的JS

运行这段 JS,直接生成我们所需的参数!

验证

我们也用代码模拟三次请求 其中第一次和第二次都会生成验证的 cookie

代码如下:

def spider():
    response = session.get(url)

    text = response.text

    ctx = execjs.compile(correct_js)  # 改正后的js
    location = ctx.call("YunSuoAutoJump")

    second_url = "http://www.landchina.com" + location

    _ = session.get(second_url)

    res = session.get(url)

    selector = Selector(text=res)

    result = selector.css("#TAB_contentTable tr")[1:]
    td_list = result.css("td")

其中 correct_js 就是上述改正后的 JS。最后我们看下能否提取出数据,结果一目了然!

验证结果

总结

到这里 JS 加密的破解就结束了,可以看到在流程当中比较重要的地方就是: 1.找数据,知道该网站会对哪些数据和请求头进行验证 2.找规律,寻找这些数据的加密规则 3.调试 JS,使用浏览器或者在本地进行调试 4.模拟数据,将这些数据通过代码模拟生成,然后加入到数据当中

本文分享自微信公众号 - Python编程与实战(pthon1024)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

数据库安全能力:安全威胁TOP5

在数据库的安全问题已跃至CSO的工作内容象限榜首的今天,对数据库安全的防御是艰苦的旅程,如何让针对业务安全和数据安全的攻击成为一场废鞋底的马拉松,防止恶意行为者...

6500
来自专栏钻芒博客

[SEO知识讲解] 百度推出惊雷算法SEO大神100条实战经验(二)!(完结)

57、关键字是你的指南针——如果你不了解你的关键词,你不知道你的关键词在网页、锚文本和搜索引擎流量上表现得如何。那么你需要花些时间为你的生意做一些针对的关键词研...

6220
来自专栏达达前端

为什么学习JavaScript设计模式,因为它是核心

那么什么是设计模式呢?当我们在玩游戏的时候,我们会去追求如何最快地通过,去追求获得已什么高效率的操作获得最好的奖品;下班回家,我们打开手机app查询最便捷的路线...

6000
来自专栏钻芒博客

[SEO知识讲解] 百度推出惊雷算法 SEO大神100条实战经验(一)

文章是老的,东西是好(经典)的。做SEO的必读! 这是一篇翻译的文章,原作者是Brian Dean,一个很厉害的SEO工作者。他通过自身5年的SEO工作经验总结...

10930
来自专栏Jerry的SAP技术分享

把Hybris安装时输出的日志重定向到一个本地文件中

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

8730
来自专栏玩转JavaEE

前后端分离开发,RESTful 接口如何设计

本文地址:dzone.com/refcardz/rest-foundations-restful

20100
来自专栏FreeBuf

CheckPoint旗下安全公司ZoneAlarm论坛数据泄露

以色列网络安全公司Check Point旗下的互联网安全软件公司ZoneAlarm遭遇数据泄露,泄露了近4500名论坛用户数据。

6900
来自专栏阿策小和尚

【Flutter 专题】68 图解基本约束 Box (三)

和尚对约束 Box 探索之路还在继续,和尚今天主要学习一下 Overflow 相关 Box;

6820
来自专栏钻芒博客

[SEO经验分享]内链优化之-图片关键词分离

看了一场公开课,课程中有一部分讲了 头部导航栏关键词分离。效果就是把传统的网站首页栏目,让百度的蜘蛛抓取来是自定义的关键词,但是用户访问仍显示为网站首页,实现不...

8320
来自专栏Nodejs技术栈

Node.js 环境性能监控

作者:@LucasTwilight https://juejin.im/post/5c71324b6fb9a049d37fbb7c

18500

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励