美文网首页
python爬虫_从零开始破解js加密(一)

python爬虫_从零开始破解js加密(一)

作者: Q_12138 | 来源:发表于2018-11-11 02:06 被阅读0次

    除了一些类似字体反爬之类的奇淫技巧,js加密应该是反爬相当常见的一部分了,这也是一个分水岭,我能解决基本js加密的才能算入阶。

    最近正好遇到一个比较简单的js,跟大家分享一下迅雷网盘搜索_838888
    输入关键字,url变了https://838888.net/search/e8bf9be587bbe79a84e5b7a8e4baba-1-id-s.htm

    直接搜索
    咦~这key有点不对啊,很明显这不是常见的urlEncode编码,这里我也验证一下
    In [1]: from urllib import parse
    
    In [2]: parse.quote('进击的巨人',encoding='utf-8')
    Out[2]: '%E8%BF%9B%E5%87%BB%E7%9A%84%E5%B7%A8%E4%BA%BA'
    
    In [3]: parse.quote('进击的巨人',encoding='gbk')
    Out[3]: '%BD%F8%BB%F7%B5%C4%BE%DE%C8%CB'
    

    果然,猜测是某个js动态生成的。选择js,多刷几遍看看:


    urlEncode

    咦~这个base64有点可疑啊,直接将关键字base64一下


    在线base64

    果然没这么简单,点开看下,,我发现了什么?这个url不就是我们搜索的url吗?


    image.png

    那么这个value也应该是这一串乱七八糟的字符咯,看这个value的生成,拿到id为'search'的值再 utf16to8() 再str2hex() 一哈。
    OK,我们也不用很清楚这个utf16to8() 和 str2hex()主要是怎么运行的(当然想试下的可以看前面代码),可以按照它的方法调用然后生成这个url就好,have a try:)
    先用js写个生成url的function

    function change_url(str){
        value = str2hex(utf16to8(str))
        return value
    }
    

    然后用pyhton来调用

    import execjs
    file = 'base64.js'
    def get_js():
        f = open(file, 'r', encoding='UTF-8')
        line = f.readline()
        htmlstr = ''
        while line:
            htmlstr = htmlstr + line
            line = f.readline()
        return htmlstr
    
    def get_key(key):
        jsstr = Handler.get_js()
        ctx = execjs.compile(jsstr)
        return ctx.call('change_url',key)
    

    这里用到了execjs这个包来调用js,测一下'进击的巨人',嗯,果然是这一串字符。
    破解js是一条艰辛的道路,这篇文章并没有很多高超的技巧,我只是想通过这次实践说明并不是所有的js都是很难的,我们也并不需要很畏惧它,拥有一颗强者的心是很重要的!

    相关文章

      网友评论

          本文标题:python爬虫_从零开始破解js加密(一)

          本文链接:https://www.haomeiwen.com/subject/cowrxqtx.html