JS逆向實戰9——cookies DES加密混淆

2022-11-28 18:00:34

cookie加密 DES 混淆

目標網站:aHR0cHM6Ly90bGNoZW1zaG9wLnlvdXpoaWNhaS5jb20vbWFpbi90ZW5kP05vdGljZUNhdGVJZD0xJk5vdGljZVR5cGU9MQ==

需求分析

今天在爬取網站的時候發現個很有意思的網站,在列表頁不需要cookie,但是存取詳情頁反而需要cookie

分析程式碼

所以我們存取下這個詳情頁連結

aHR0cHM6Ly93d3cueW91emhpY2FpLmNvbS9uZC9lNzVlNTY1Yi03MWZmLTQ3MzktYTY3Zi0yMGM3YzQzZDI4NmQtMS5odG1s

我們通過FD抓包

可以發現 返回我們兩個請求
第一個請求:狀態碼203 內容如右圖所示 是一堆JS 並且第一次返回 返回一個set-cookie
第二個請求:狀態碼為200,內容為我們想要的詳情頁。

js偵錯

然後我們先格式化好第一個請求的JS程式碼 得到如下檢視

從檔案中我們可以看到 mode padding ECB這種字眼,其實已經可以猜到是DES加密了
至於為啥 可以看我之前的一篇文章:https://www.cnblogs.com/zichliang/p/16857694.html
然後我們把檔案丟到瀏覽器中執行

直接這麼執行就可以了
然後會報兩個錯 如下圖所示

我們把錯誤改好(改錯很簡單,錯誤程式碼刪掉就行)
然後我們執行JS

然後我們到最底下把最下面的執行語句封裝成一個函數

然後去執行會報一個 window is not defined
還是那句好 錯了就刪 再把 window is not defined 刪掉,
然後這裡又會報一個CryptoJS is not defined

這裡提供兩個解決方案:

  1. npm install 裝一個

這個就沒什麼好講的,直接執行命令:

npm install crypto-js

然後 require這個庫 使用就行了

  1. 直接用這裡混淆好的

首先找到parse

然後我們重新給這個值賦值即可
注意 這個都在一個自執行函數裡面 所以我們賦值也得包在這個函數裡才行。

然後再執行我們的程式碼
這裡又會報一個

這個我們不確定 所以我們拉到瀏覽器裡執行一下看看

可以發現 這個只是個賦值語句不要也罷。重要的是CK

封裝JS

我們已經偵錯完了 然後只要封裝好函數執行就行了

封裝成這個鳥樣就行了。

然後我們發現有兩個值是動態變化的,分別是a和b

我們需要正則把這個值提出來 然後賦給執行函數
最後是這樣的

程式碼:

# -*- coding: utf-8 -*-
# @Time    : 2022/11/28 11:13
# @Author  : lzc
# @Email   : [email protected]
# @File    : THYZCBuss.py
# @Software: PyCharm
# @blog    : https://www.cnblogs.com/zichliang
import re

import execjs
import requests

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
}

# 自己解密
url = "aHR0cHM6Ly93d3cueW91emhpY2FpLmNvbS9uZC9lNzVlNTY1Yi03MWZmLTQ3MzktYTY3Zi0yMGM3YzQzZDI4NmQtMS5odG1s"
response = requests.get(url, headers=headers)
cookies = response.cookies.get_dict()
args_list = re.findall("var a= '(.*?)';var b = '(.*?)';", response.text)[0]

args_a = args_list[0]
args_b = args_list[1]
node = execjs.get()
with open('c.js', encoding='utf-8') as f:
    js_code = f.read()

ctx = node.compile(js_code)
data1 = ctx.eval(f'get_ck("{args_a}","{args_b}")')

new_cookies = {
    **cookies,
    "spvrscode": data1
}
response = requests.get(url, headers=headers, cookies=new_cookies)
print(response.text)


js的話自己扣吧 非常簡單 這裡就不貼了,太長了。