除了一些類似字體反爬之類的奇淫技巧,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都是很難的,我們也並不需要很畏懼它,擁有一顆強者的心是很重要的!
