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吗?


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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,080评论 19 139
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,682评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,159评论 1 32
  • 简书,我回来了! 说声感谢,道声想念。我查了下日志,距离上次起笔差不多有4个月没有留下些许文字,如果简叔偶尔念及我...
    临江先生阅读 576评论 3 2
  • 必须用海绵一样的眼神 去触碰殷红的呼吸 不要惊动空气 或许遗忘,或不想谈起 荒岛上长出的影子 像黄金般沉默 从枪口...
    萧竺阅读 193评论 0 1