• JS逆向实战9——cookies DES加密混淆


    声明

    本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

    cookie加密 DES 混淆

    目标网站:aHR0cHM6Ly90bGNoZW1zaG9wLnlvdXpoaWNhaS5jb20vbWFpbi90ZW5kP05vdGljZUNhdGVJZD0xJk5vdGljZVR5cGU9MQ==

    需求分析

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

    分析代码

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

    aHR0cHM6Ly93d3cueW91emhpY2FpLmNvbS9uZC9lNzVlNTY1Yi03MWZmLTQ3MzktYTY3Zi0yMGM3YzQzZDI4NmQtMS5odG1s

    我们通过FD抓包
    image.png
    可以发现 返回我们两个请求
    第一个请求:状态码203 内容如右图所示 是一堆JS 并且第一次返回 返回一个set-cookie
    第二个请求:状态码为200,内容为我们想要的详情页。

    js调试

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

    然后我们到最底下把最下面的执行语句封装成一个函数
    image.png
    然后去执行会报一个 window is not defined
    还是那句好 错了就删 再把 window is not defined 删掉,
    然后这里又会报一个CryptoJS is not defined

    这里提供两个解决方案:

    1. npm install 装一个

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

    npm install crypto-js

    然后 require这个库 使用就行了

    1. 直接用这里混淆好的

    首先找到parse
    image.png
    然后我们重新给这个值赋值即可
    注意 这个都在一个自执行函数里面 所以我们赋值也得包在这个函数里才行。
    image.png
    然后再执行我们的代码
    这里又会报一个
    image.png
    这个我们不确定 所以我们拉到浏览器里运行一下看看
    image.png
    可以发现 这个只是个赋值语句不要也罢。重要的是CK

    封装JS

    我们已经调试完了 然后只要封装好函数执行就行了
    image.png
    封装成这个鸟样就行了。

    然后我们发现有两个值是动态变化的,分别是a和b
    image.png
    我们需要正则把这个值提出来 然后赋给执行函数
    最后是这样的
    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的话自己扣吧 非常简单 这里就不贴了,太长了。

  • 相关阅读:
    leetcode 刷题 log day 48(打家劫舍问题
    用于一型糖尿病血糖调节的无模型iPID控制器
    DevOps最佳实践之应用开发和部署
    python+vue+elementui实验室课程在线答疑系统php_java
    Go 学习笔记(86)— Go 方法接受者参数类型选择
    认识端口号(netstat指令查看网络状态)
    IOC操作Bean管理(基于注解方式)
    通过开源如何赚钱生存发展
    【算法】数组常见算法
    【云原生之kubernetes实战】在k8s环境下部署WBO在线协作白板
  • 原文地址:https://www.cnblogs.com/zichliang/p/16932528.html