python爬虫--破解js加密:kankan登录破解

这一系列文章旨在解决python 爬虫过程中遇到的各种反爬,从简单到复制,是个进阶的过程。如果对你有帮助,欢迎关注。

今天要破解的网站是天天看看(http://www.kankan.com/)的登录,其中涉及post环节的data加密,以及cookies查找。

可以看到post表单中包含8个参数,p,n,verifycode,这3个是变化的。

搜索参数verifycode,可以定位到生成参数的js文件。

打断点后发现,r就是表单中的p,q就是表单中的n,z就是把表单中的verifycode转化成大写,e.password就是我们的原始密码,

l = 'AQAB'  ,通过查找并未发现q和z的生成位置,通过在网页中查找,发现表单中的q和verifycode 都是从一个url(https://ilogin.kankan.com/check/?u=18811112222&v=100)返回的set_cookies中: 

所以这两个值我们可以通过这个url来获得。

下面创建一个js文件,把我们找到的关键js放进去,构造一个函数,方便我们调用。

这时明显我们缺少了hex2b64这个函数,鼠标放上去后定位到这个函数在rsa.js文件中,一看名字就知道,这个加密用到的文件中的内容,全部复制到我们的js文件中。

最后,我们还缺少了md5函数,查找md5,发现是在md5.js文件中,同样复制到我们的js文件中来。

点击运行js文件后提示缺少window和navigator,构造下就行:

var navigator = navigator||{};

var window = window||{};

到目前为止,我们的js加密环节就算破解完成了,只需要传入q,z,pwd  三个参数就可以获取到最后加密后的r。

而通过url()可以轻松获得q和z,同时获取到cookies,这个cookies需要传到登录环节中,才能完成登录,建议使用session请求,就不用处理cookies问题了。

最后完善下py脚本就可以了。其中调用js的脚本如下:

def get_p(check_n,verifycode,password):

    with open('kankan.js', 'r', encoding='UTF-8') as f:

        js2 = f.read()

        ctx2 = execjs.compile(js2)

        p = ctx2.call("getpwd",check_n,verifycode,password)

        print(p)

    return p

完整脚本:可以点击查看GitHub。

如果对你有所帮助,欢迎点个star支持。

你可能感兴趣的:(python爬虫--破解js加密:kankan登录破解)