cookie加密 DES 混淆

目标网站:aHR0cHM6Ly90bGNoZW1zaG9wLnlvdXpoaWNhaS5jb20vbWFpbi90ZW5kP05vdGljZUNhdGVJZD0xJk5vdGljZVR5cGU9MQ==

需求分析

今天在爬取网站的时候发现个很有意思的网站,在列表页不需要cookie,但是访问详情页反而需要cookie

分析代码

所以我们访问下这个详情页链接

aHR0cHM6Ly93d3cueW91emhpY2FpLmNvbS9uZC9lNzVlNTY1Yi03MWZmLTQ3MzktYTY3Zi0yMGM3YzQzZDI4NmQtMS5odG1s

我们通过FD抓包
JS逆向实战9——cookies DES加密混淆-小白菜博客
可以发现 返回我们两个请求
第一个请求:状态码203 内容如右图所示 是一堆JS 并且第一次返回 返回一个set-cookie
第二个请求:状态码为200,内容为我们想要的详情页。

js调试

然后我们先格式化好第一个请求的JS代码 得到如下视图
JS逆向实战9——cookies DES加密混淆-小白菜博客
从文件中我们可以看到 mode padding ECB这种字眼,其实已经可以猜到是DES加密了
至于为啥 可以看我之前的一篇文章:https://www.cnblogs.com/zichliang/p/16857694.html
然后我们把文件丢到浏览器中执行
JS逆向实战9——cookies DES加密混淆-小白菜博客
直接这么执行就可以了
然后会报两个错 如下图所示
JS逆向实战9——cookies DES加密混淆-小白菜博客
我们把错误改好(改错很简单,错误代码删掉就行)
然后我们执行JS

然后我们到最底下把最下面的执行语句封装成一个函数
JS逆向实战9——cookies DES加密混淆-小白菜博客
然后去执行会报一个 window is not defined
还是那句好 错了就删 再把 window is not defined 删掉,
然后这里又会报一个CryptoJS is not defined

这里提供两个解决方案:

  1. npm install 装一个

这个就没什么好讲的,直接执行命令:

npm install crypto-js

然后 require这个库 使用就行了

  1. 直接用这里混淆好的

首先找到parse
JS逆向实战9——cookies DES加密混淆-小白菜博客
然后我们重新给这个值赋值即可
注意 这个都在一个自执行函数里面 所以我们赋值也得包在这个函数里才行。
JS逆向实战9——cookies DES加密混淆-小白菜博客
然后再执行我们的代码
这里又会报一个
JS逆向实战9——cookies DES加密混淆-小白菜博客
这个我们不确定 所以我们拉到浏览器里运行一下看看
JS逆向实战9——cookies DES加密混淆-小白菜博客
可以发现 这个只是个赋值语句不要也罢。重要的是CK

封装JS

我们已经调试完了 然后只要封装好函数执行就行了
JS逆向实战9——cookies DES加密混淆-小白菜博客
封装成这个鸟样就行了。

然后我们发现有两个值是动态变化的,分别是a和b
JS逆向实战9——cookies DES加密混淆-小白菜博客
我们需要正则把这个值提出来 然后赋给执行函数
最后是这样的
image.png

代码:

# -*- coding: utf-8 -*-
# @Time    : 2022/11/28 11:13
# @Author  : lzc
# @Email   : hybpjx@163.com
# @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的话自己扣吧 非常简单 这里就不贴了,太长了。