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都是很難的,我們也並不需要很畏懼它,擁有一顆強者的心是很重要的!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM