前言:
??????個人簡介:以山河作禮。
??????:Python領(lǐng)域新星創(chuàng)作者,CSDN實力新星認(rèn)證,阿里云社區(qū)專家博主
?????第一篇文章《1.認(rèn)識網(wǎng)絡(luò)爬蟲》獲得全站熱榜第一,python領(lǐng)域熱榜第一
。
?? ??第四篇文章《4.網(wǎng)絡(luò)爬蟲—Post請求(實戰(zhàn)演示)》全站熱榜第八
。
?? ??第八篇文章《8.網(wǎng)絡(luò)爬蟲—正則表達(dá)式RE實戰(zhàn)》全站熱榜第十二
。
?? ??第十篇文章《10.網(wǎng)絡(luò)爬蟲—MongoDB詳講與實戰(zhàn)》全站熱榜第八領(lǐng)域熱榜第二
?? ??第十三篇文章《13.網(wǎng)絡(luò)爬蟲—多進程詳講(實戰(zhàn)演示)》全站熱榜第十二
。
?? ??第十四篇文章《14.網(wǎng)絡(luò)爬蟲—selenium詳講》測試領(lǐng)域熱榜第二十
。
?? ??第十六篇文章《16.網(wǎng)絡(luò)爬蟲—字體反爬(實戰(zhàn)演示)》全站熱榜第二十五
。
?? ??第十九篇文章《19.網(wǎng)絡(luò)爬蟲—照片管道》全站綜合熱榜第十二。
?? ??第二十篇文章《20.網(wǎng)絡(luò)爬蟲—Scrapy-Redis分布式爬蟲》全站綜合熱榜第二十五名,大數(shù)據(jù)領(lǐng)域第六名
。
????《Python網(wǎng)絡(luò)爬蟲》專欄累計發(fā)表二十篇文章,上榜九篇。歡迎免費訂閱!歡迎大家一起學(xué)習(xí),一起成長??!
????悲索之人烈焰加身,墮落者不可饒恕。永恒燃燒的羽翼,帶我脫離凡間的沉淪。
????:文章末尾掃描二維碼可以加入粉絲交流群。
js逆向
?? ??在這個大數(shù)據(jù)時代,我們眼睛所看到的百分之九十的數(shù)據(jù)都是通過頁面呈現(xiàn)出現(xiàn)的,不論是PC端、網(wǎng)頁端還是移動端,數(shù)據(jù)渲染還是基于html/h5+javascript進行的,而大多數(shù)的數(shù)據(jù)都是通過請求后臺接口動態(tài)渲染的。而想成功的請求成功互聯(lián)網(wǎng)上的開放/公開接口,必須知道它的URL、Headers、Params、Body等數(shù)據(jù)是如何生成的。
JavaScript逆向的詳細(xì)講解
?? ??JavaScript逆向工程是指通過分析JavaScript代碼和運行行為來理解程序的內(nèi)部機制。這種技術(shù)可以用于破解JavaScript程序的加密和混淆,以及獲取程序的邏輯和數(shù)據(jù)等信息。
以下是JavaScript逆向的詳細(xì)講解:
1. JavaScript逆向工程的基本原理
?? ??JavaScript逆向工程的基本原理是通過分析JavaScript代碼和運行行為來理解程序的內(nèi)部機制。這種技術(shù)可以用于破解JavaScript程序的加密和混淆,以及獲取程序的邏輯和數(shù)據(jù)等信息。
JavaScript逆向工程通常包括以下步驟:
1)獲取JavaScript代碼
:
可以使用瀏覽器的開發(fā)人員工具或其他工具來獲取JavaScript代碼。
2)分析JavaScript代碼
:
可以使用代碼編輯器或其他工具來分析JavaScript代碼,包括查找函數(shù)、變量、常量和操作符等。
3)調(diào)試JavaScript代碼
:
可以使用瀏覽器的開發(fā)人員工具或其他工具來調(diào)試JavaScript代碼,包括斷點調(diào)試、單步調(diào)試和變量監(jiān)視等。
4)破解JavaScript代碼
:
可以使用反混淆和反編譯工具來破解JavaScript代碼,以獲取程序的邏輯和數(shù)據(jù)等信息。
2. JavaScript逆向工程的應(yīng)用場景
JavaScript逆向工程可以應(yīng)用于以下場景:
1)破解加密和混淆的JavaScript程序
:JavaScript逆向工程可以破解加密和混淆的JavaScript程序,以獲取程序的邏輯和數(shù)據(jù)等信息。
2)調(diào)試和測試JavaScript程序
:JavaScript逆向工程可以幫助開發(fā)人員調(diào)試和測試JavaScript程序,以發(fā)現(xiàn)程序中的錯誤和問題。
3)優(yōu)化JavaScript程序的性能和安全性
:JavaScript逆向工程可以幫助開發(fā)人員優(yōu)化JavaScript程序的性能和安全性,以提高程序的質(zhì)量和可靠性。
4)研究JavaScript程序的內(nèi)部機制
:JavaScript逆向工程可以幫助研究人員研究JavaScript程序的內(nèi)部機制,以發(fā)現(xiàn)其中的漏洞和安全問題。
3. JavaScript逆向工程的注意事項
在進行JavaScript逆向工程時,需要注意以下事項:
1)遵守法律法規(guī)
:
JavaScript逆向工程可能涉及版權(quán)、知識產(chǎn)權(quán)和隱私等問題,需要遵守相關(guān)的法律法規(guī)。
2)保護個人隱私
:
在分析JavaScript程序時,需要遵守個人隱私的原則,不得獲取個人信息和敏感信息。
3)避免濫用JavaScript逆向技術(shù)
:
JavaScript逆向技術(shù)可以用于破解和攻擊,需要避免濫用。
4)保護JavaScript程序的安全性
:
在進行JavaScript逆向工程時,需要保護JavaScript程序的安全性,不得泄露JavaScript程序的機密信息和漏洞。
5)學(xué)習(xí)和研究JavaScript逆向技術(shù)
:
JavaScript逆向技術(shù)是一種有用的技術(shù),需要學(xué)習(xí)和研究,以提高自己的技能和知識水平。
實戰(zhàn)是學(xué)習(xí)知識最快的途徑,下面進行實戰(zhàn)演示幫助理解學(xué)習(xí)。
實戰(zhàn)演示
有道翻譯
有道翻譯
瀏覽器:谷歌瀏覽器
右鍵檢查,輸入需要翻譯的內(nèi)容,然后開始抓包
??點擊翻譯,我們得到兩個數(shù)據(jù),一個是key,請求方式是post,狀態(tài)是200
載荷是西瓜,預(yù)覽里面出現(xiàn)success,表示翻譯成功。
??還有一個文件是webtranslate,請求方法同樣是post,狀態(tài)是200,載荷里面有西瓜兩個字和一些參數(shù),預(yù)覽和響應(yīng)里面是一串加密的數(shù)據(jù)。
??接下來敲代碼來獲取文件,然后來破解數(shù)據(jù)
# coding = utf-8
import crawles
url = 'https://dict.youdao.com/webtranslate'
cookies = {
'OUTFOX_SEARCH_USER_ID': '-312652410@10.108.162.134',
'OUTFOX_SEARCH_USER_ID_NCOO': '42958927.495580636',
}
headers = {
'Accept': 'application/json, text/plain, */*',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'Content-Type': 'application/x-www-form-urlencoded',
'Origin': 'https://fanyi.youdao.com',
'Pragma': 'no-cache',
'Referer': 'https://fanyi.youdao.com/',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-site',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
'sec-ch-ua': '\"Google Chrome\";v=\"113\", \"Chromium\";v=\"113\", \"Not-A.Brand\";v=\"24\"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '\"Windows\"',
}
data = {
'i': '西瓜',
'from': 'auto',
'to': '',
'domain': '0',
'dictResult': 'true',
'keyid': 'webfanyi',
'sign': 'f522e5818a8497d9a329a93a522eaa2e',
'client': 'fanyideskweb',
'product': 'webfanyi',
'appVersion': '1.0.0',
'vendor': 'web',
'pointParam': 'client,mysticTime,product',
'mysticTime': '1683270687293',
'keyfrom': 'fanyi.web',
}
response = crawles.post(url, headers=headers, data=data, cookies=cookies)
print(response.text)
運行結(jié)果:
??接下來我們可以通過多次發(fā)多次請求來觀察哪些是變的,哪些是不變的數(shù)據(jù):
??經(jīng)過對比,我們發(fā)現(xiàn),sign
,mysticTime
這兩個字段的參數(shù)是動態(tài)變化的。
??參數(shù)大概分析之后,我們就找出對應(yīng)的js文件,來分析一下js是如何處理的參數(shù)
選擇文件,點擊啟動器,然后可以隨便點擊一個文件,然后點擊它。
??輸入sign后,如果出現(xiàn)多個,我們需要逐個觀察,看哪一個符合要求
??我們在sign這里打上斷點,然后點擊翻譯,進行抓包處理,得到e和t的值
e: "fsdsogkndfokasodnaso"
t: 1683272866426
??然后我們點擊其他參數(shù),獲取數(shù)據(jù)
??接下來我們寫代碼,來得到sign的值
import time
t = 'fsdsogkndfokasodnaso'
e = time.time()
e = 1682603344052
d = 'fanyideskweb'
u = 'webfanyi'
data = f'client={d}&mysticTime={e}&product={u}&key={t}'
from hashlib import md5
m = md5()
m.update(data.encode('utf-8'))
nonce = m.hexdigest()
print(nonce)
??接下來對字符串進行解密,將解密后的字節(jié)碼轉(zhuǎn)換為utf-8編碼的文本字符串。
import hashlib
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import base64
# 導(dǎo)入必要的模塊和庫
# pip install pycryptodome
# 將存放模塊的文件(Crypto)改成大寫開頭(Crypto)
def decrypt( decrypt_str):
key = "ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl"
iv = "ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4"
key_md5 = hashlib.md5((key).encode('utf-8')).digest()
iv_md5 = hashlib.md5((iv).encode('utf-8')).digest()
print('key_md5:', key_md5)
print('iv_md5:', iv_md5)
print()
aes = AES.new(key=key_md5, mode=AES.MODE_CBC, iv=iv_md5)
code = aes.decrypt(base64.urlsafe_b64decode(decrypt_str))
return unpad(code, AES.block_size).decode('utf8')
print(decrypt(response.text))
設(shè)置密鑰和初始向量
key = "ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl"
iv = "ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4"
這里定義了兩個變量key和iv,分別表示密鑰和初始向量。注意到這兩個字符串已經(jīng)被加密處理,因此在使用之前需要將它們進行解密。
對密鑰和初始向量進行哈希處理
key_md5 = hashlib.md5((key).encode('utf-8')).digest()
iv_md5 = hashlib.md5((iv).encode('utf-8')).digest()
使用了哈希函數(shù)md5對密鑰和初始向量進行處理。在處理之前,需要將密鑰和初始向量從字符串類型轉(zhuǎn)換為字節(jié)類型,并在處理后獲取到它們的哈希值。
創(chuàng)建AES對象并解密消息
aes = AES.new(key=key_md5, mode=AES.MODE_CBC, iv=iv_md5)
code = aes.decrypt(base64.urlsafe_b64decode(decrypt_str))
創(chuàng)建了一個AES對象,使用了上一步中得到的哈希值作為密鑰和初始向量的值,并使用CBC模式進行加密解密操作。然后,我們對傳入的待解密字符串進行base64解碼,再使用解密過程對其進行解密操作。
移除padding并返回結(jié)果
return unpad(code, AES.block_size).decode('utf8')
通過
Crypto.Util.Padding.unpad
函數(shù)移除了解密后的字節(jié)碼中的padding
,并通過.decode('utf8')
將其轉(zhuǎn)換為文本字符串類型。最終,我們從decrypt
函數(shù)中返回了解密后的明文字符串。
??這段代碼主要實現(xiàn)了一個AES-CBC加密算法的解密過程,使用了哈希函數(shù)增強了密鑰和初始向量的安全性,并通過base64編解碼和padding移除等操作對加密消息進行了處理。文章來源:http://www.zghlxwxcb.cn/news/detail-434781.html
運行結(jié)果如下:
??后續(xù)可以對數(shù)據(jù)進行解析,提取出我們想要的數(shù)據(jù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-434781.html
到了這里,關(guān)于21.網(wǎng)絡(luò)爬蟲—js逆向詳講與實戰(zhàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!