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


    除了一些类似字体反爬之类的奇淫技巧,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吗?

    那么这个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都是很难的,我们也并不需要很畏惧它,拥有一颗强者的心是很重要的!

  • 相关阅读:
    简单的逻辑学 笔记
    中国古代文化常识 笔记
    Docker 使用官方镜像
    Docker 入门 之基本命令
    Windows.form增删改查
    自定义控件
    LISTVIEW
    窗体布局
    计算器
    登录
  • 原文地址:https://www.cnblogs.com/presleyren/p/11648980.html
Copyright © 2020-2023  润新知