成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

爬蟲篇之JS逆向破解

開發 前端
這篇文章并不是非常專業的JS解密,因為JS的解密涉及很多種,多種行為的解密,本文只是對其中一種情況進行簡單的介紹。

爬蟲中很重要的一個點就是JS的逆向破解加密,今天我們來淺析一下。

背景

先簡單介紹一下為什么要有JS解密,目前大部分網頁都是采用的前后端分離的方式,所以呢,爬蟲的一般破解之道都是從后端接口來做文章,進行突破。

不過道高一尺,魔高一丈,網頁開發會對API接口請求參數進行加密,來增加爬蟲抓取的門檻。為此可以通過js逆向來分析破解加密方式,模擬瀏覽器發送請求獲取接口數據。

當然,先說明,這篇文章并不是非常專業的JS解密,因為JS的解密涉及很多種,多種行為的解密,本文只是對其中一種情況進行簡單的介紹。

來吧,讓我們一起簡單學習一下。

圖片

上面這個圖是請求翻譯的全過程。

圖片

我們能清晰的看到這是直接以表單的形式提交的數據到后端API層,然后API來執行翻譯的作用。

接下來我們用python模擬以下這個過程。

圖片

一定要注意的是,請求頭寫全,包括cookie和user-agent這些,還有下面的params一定要按照網頁中的來。

代碼給到大家。

import requests
#請求頭
headers = {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
"Connection": "keep-alive",
"Content-Length": "255",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Cookie": "OUTFOX_SEARCH_USER_ID_NCOO=1992896419.125546; OUTFOX_SEARCH_USER_ID=1708647615@10.108.162.133; fanyi-ad-id=306808; fanyi-ad-closed=1; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; JSESSIONID=abcJJxrChyTjz_26EmBgy; ___rl__test__cookies=1656205889631",
"Host": "fanyi.youdao.com",
"Origin": "http://fanyi.youdao.com",
"Referer": "http://fanyi.youdao.com/",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
}
#提交參數
params = {
"i": "love you , my baby",
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
"salt": "16562058896377",
"sign": "f85458213e7db4207f135599c7ddfac7",
"lts": "1656205889637",
"bv": "bdc0570a34c12469d01bfac66273680d",
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_REALTlME",
}
url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
#發起POST請求
response = requests.post(url=url,headers=headers,data=params).json()
print(response)

一部分是header信息,一部分是params信息

我們可以看到,參數params中除了我們要傳遞的參數翻譯內容之外,還有好多我們不認識的參數,如果這里錯了會怎么樣呢,隨便改一下其中的一個參數,我們看看效果。

圖片

可以看到,直接返回錯誤了,很明顯被禁止了,或者說是校驗沒通過,屬于非法請求。

我們再來看一下,只改變翻譯的內容,靠這些鹽和簽名是不是能夠成功翻譯呢?

圖片

結果發現,我們只改變了要翻譯的內容,結果還是不行,很明顯生成這些校驗參數的過程是和要翻譯的內容是相關的。

搜索不同的關鍵詞,請求body參數如下,分析發現除了我們要傳遞的翻譯內容外還有4個參數是變量:

"salt": "16562058896377",
"sign": "f85458213e7db4207f135599c7ddfac7",
"lts": "1656205889637",
"bv": "bdc0570a34c12469d01bfac66273680d",

這些就是屬于請求鹽和校驗參數,有對應的加密格式,接下來我們圍繞這四個參數來進行破解。

接下來我們打開控制臺,打開我們要分析的JS程序,直接ctrl+f全局搜索salt關鍵字。

圖片

找到我們要分析的地方,然后在打上斷點,重新請求一遍。

F10往下一步一步的執行。

圖片

當執行到如圖所示的位置的時候,我們把鼠標移動到r這個對象的位置上去,為什么要看這個對象呢,因為你看下面的salt、sign、lts、bv這些參數都是屬于r這個對象的屬性。

我們能夠看到此時r對象的這幾個屬性已經被賦予了值了。

圖片

接著看看這個r到底是什么。

圖片

var r = function(e) {
var t = n.md5(navigator.appVersion)
, r = "" + (new Date).getTime()
, i = r + parseInt(10 * Math.random(), 10);
return {
ts: r,
bv: t,
salt: i,
sign: n.md5("fanyideskweb" + e + i + "Ygy_4c=r#e#4EX^NUGUc5")
}
};

進一步分析發現:

  • r:當前的時間戳。
  • i:當前的時間戳+(0到10的隨機數)。
  • salt:salt=i。
  • e:搜索關鍵字。
  • sign:md5("fanyideskweb" + e + i + "Ygy_4c=r#e#4EX^NUGUc5")。

至此完成簽名算法的實現,接下來可以通過python來實現。

圖片

代碼如下:

import requests
from hashlib import md5
import time
import random
#請求地址
url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
appVersion = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"
headers = {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
"Connection": "keep-alive",
"Content-Length": "244",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Cookie": "OUTFOX_SEARCH_USER_ID=-1506602845@10.169.0.82; JSESSIONID=aaaUggpd8kfhja1AIJYpx; OUTFOX_SEARCH_USER_ID_NCOO=108436537.92676207; ___rl__test__cookies=1597502296408",
"Host": "fanyi.youdao.com",
"Origin": "http://fanyi.youdao.com",
"Referer": "http://fanyi.youdao.com/",
"user-agent": appVersion,
"X-Requested-With": "XMLHttpRequest",
}
def r(e):
# bv
t = md5(appVersion.encode()).hexdigest()
# lts
r = str(int(time.time() * 1000))
# i
i = r + str(random.randint(0,9))
return {
"ts": r,
"bv": t,
"salt": i,
"sign": md5(("fanyideskweb" + e + i + "Ygy_4c=r#e#4EX^NUGUc5").encode()).hexdigest()
}
def fanyi(word):
data = r(word)
params = {
"i": word,
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
"salt": data["salt"],
"sign": data["sign"],
"lts": data["ts"],
"bv": data["bv"],
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_REALTlME",
}
response = requests.post(url=url,headers=headers,data=params)
#返回json數據
return response.json()
if __name__ == "__main__":
while True:
word = input("請輸入要翻譯的語句:")
result = fanyi(word)
#對返回的json數據進行提取,提取出我們需要的數據
r_data = result["translateResult"][0]
print(r_data[0]["src"])
print(r_data[0]["tgt"])
責任編輯:姜華 來源: 左耳君
相關推薦

2022-01-27 10:26:07

Python

2022-05-26 12:26:27

CSSJS逆向

2019-01-10 05:53:57

2014-02-28 16:32:15

2021-10-15 11:37:44

反爬蟲破解

2016-01-05 15:20:02

Reverse逆向工具逆向工程

2022-05-13 09:04:20

Python網絡爬蟲JS逆向問題

2025-02-28 09:09:44

2021-06-28 18:57:15

CSS網頁爬蟲

2021-06-09 18:22:11

反爬蟲破解

2020-02-06 10:20:19

硬件黑客技術

2018-02-06 10:46:53

2017-03-01 11:52:30

2021-01-05 05:24:47

Python

2017-06-14 15:20:43

Python爬蟲BeautifulSo

2017-09-08 10:45:52

Linux排錯方案root口令

2011-03-07 16:52:29

2022-09-26 00:00:01

java代碼開發

2011-09-19 14:40:43

破解網通封路由器MAC地址克隆路由器

2011-03-07 16:46:29

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品啪啪 | 日韩精品在线看 | 欧美日一区二区 | 免费一级大片 | japanhdxxxx裸体 | 伊人精品一区二区三区 | 91麻豆产精品久久久久久 | 日韩电影一区 | 欧美精品啪啪 | 成人精品国产免费网站 | 午夜小视频免费观看 | 国产高清无av久久 | 欧美成人h版在线观看 | 欧美xxxx性| 久久国产精品-国产精品 | 久久精品久久久久久 | 成人免费视频网站在线观看 | 国产精品成人久久久久 | 四虎永久影院 | 亚洲成人av一区二区 | 成人精品视频在线 | 精品国产91乱码一区二区三区 | 亚洲一区二区精品视频在线观看 | 精品国产一区二区三区性色 | 日韩在线观看一区 | 亚洲视频一区在线观看 | 日韩一区二区在线视频 | 亚洲欧美激情精品一区二区 | 久久av一区二区三区 | 毛片入口 | 日韩精品视频在线 | 精品网| 亚洲狠狠爱| a在线观看| 欧美日韩国产精品一区二区 | 精品国产乱码久久久久久果冻传媒 | 中文字幕91| 亚洲欧美另类在线 | 丁香婷婷综合激情五月色 | 黄a免费网络 | 看真人视频一级毛片 |