python爬虫之逆向破解_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 扣出来,下面是我提取出来的 JSfunction 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.模拟数据,将这些数据通过代码模拟生成,然后加入到数据当中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值