简单js逆向案例(1)

news2024/11/20 4:54:44

文章目录

  • 声明
  • 模块
  • 分析
  • 完整代码
    • python实现
    • js扣代码实现
  • 结尾

声明

本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

模块

pip install PyExecJS
pip install requests

分析

网址

aHR0cHM6Ly9nZ3p5ZncuZnVqaWFuLmdvdi5jbi9idXNpbmVzcy9saXN0Lw==

目标数据
在这里插入图片描述
F12打开调试面版,在返回的文档搜索数据,随便搜索关键字,如上杭县。发现没有结果。那可能是动态加载,然后渲染。

在这里插入图片描述
点击Fetch\XHR,在清除所有数据后,刷新页面,发现返回了几个数据包,发现返回的json中的data加密了,由于不确定是哪个数据包是我们想要的,我们可以在页面底部点击第二页,多查看几页。
在这里插入图片描述

在这里插入图片描述

找到了我们需要的数据包了,请求参数基本相同,就页数改变了。那们接下来就是开始解密了。
在这里插入图片描述
在这里插入图片描述
我们怎们定位到数据加密的地方呢?今天教大家一个简单的方法。首先我们先将目标网址的路径复制下来,然后再源代码界面,点击XHR提取断点,再点击加号,将路径粘贴进去后回车键,然后刷新页面,就会发现成功断点。
在这里插入图片描述
断住之后点击左下角的框框,格式化代码。
在这里插入图片描述
那接下来呢?我们查看堆栈,直接查看发送的请求,点击r.request。
在这里插入图片描述
直接在n = n.then(t.shift(), t.shift());打上断点,刷新页面。刷新页面之前要把之前的断点取消。
在这里插入图片描述
把鼠标停在t上面,点开第一个构造函数,直接进去。
在这里插入图片描述
进去之后,我们先找一下data,因为加密的就是data,找到之后我们打上断点。刷新页面。发现就是我们要找的加密数据,我们可以在控制台打印一下。
在这里插入图片描述
在这里插入图片描述

点击单步执行,接着往下走。
在这里插入图片描述

很明显,我们已经找到了加密逻辑,aes加密。密钥什么都要有。那接下来就是用代码实现了。
在这里插入图片描述
什么是AES加密?详细请点击。

AES加密算法(Advanced Encryption Standard)是一种对称加密算法,也称为高级加密标准。它是由美国国家标准与技术研究院(NIST)于2001年发布,作为DES加密算法的替代方案。AES加密算法使用128位、192位或256位密钥对数据进行加密和解密,具有高强度、高速度和易于实现等优点。

完整代码

我们可以用纯python实现或者将js代码扣下来,用node.js来执行js代码,然后用PyExecJS库来调用js代码。后者要配置环境比较麻烦,作为初学者的话,建议采用第二种,直接扣代码缺哪补哪。简单粗暴。

python实现

安装模块

 pip install pycrypto
import requests
from Crypto.Cipher import AES
import base64
import json


def decrypt(info):
    key = "EB444973714E4A40876CE66BE45D5930".encode(encoding='utf-8')
    iv = "B5A8904209931867".encode(encoding='utf-8')
    cipher = AES.new(key, AES.MODE_CBC, iv)

    json_str = cipher.decrypt(base64.b64decode(info)).decode()
    return json.loads(str(json_str)[0:str(json_str).rfind('}') + 1])




headers = {
    'Accept': 'application/json, text/plain, */*',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive',
    'Content-Type': 'application/json;charset=UTF-8',
    'Origin': 'https://ggzyfw.fujian.gov.cn',
    'Pragma': 'no-cache',
    'Referer': 'https://ggzyfw.fujian.gov.cn/business/list/',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-origin',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36',
    'portal-sign': '99682751234383b3a3f1715e54753a60',
    'sec-ch-ua': '"Chromium";v="116", "Not)A;Brand";v="24", "Google Chrome";v="116"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
}

json_data = {
    'pageNo': 1,
    'pageSize': 20,
    'total': 4174,
    'AREACODE': '',
    'M_PROJECT_TYPE': '',
    'KIND': 'GCJS',
    'GGTYPE': '1',
    'PROTYPE': '',
    'timeType': '6',
    'BeginTime': '2023-02-25 00:00:00',
    'EndTime': '2023-08-25 23:59:59',
    'createTime': [],
    'ts': 1692955559913,
}

# 接口网址
response = requests.post('接口网址', headers=headers, json=json_data)

print(response.json())
print(decrypt(response.json()['Data']))

js扣代码实现

这里要安装js的解密库crypto-js。
npm install crypto-js

js代码

CryptoJS = require('crypto-js')


function decrypt(t) {
    var e = CryptoJS.enc.Utf8.parse("EB444973714E4A40876CE66BE45D5930")
        , n = CryptoJS.enc.Utf8.parse("B5A8904209931867")
        , a = CryptoJS.AES.decrypt(t, e, {
        iv: n,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return a.toString(CryptoJS.enc.Utf8)
}

import requests


**python代码**
'''如果报编码错误可以取消注释'''
# import subprocess
# from functools import partial
#
# subprocess.Popen = partial(subprocess.Popen, encoding='utf-8')
import execjs


import requests

headers = {
    'Accept': 'application/json, text/plain, */*',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive',
    'Content-Type': 'application/json;charset=UTF-8',
    'Origin': 'https://ggzyfw.fujian.gov.cn',
    'Pragma': 'no-cache',
    'Referer': 'https://ggzyfw.fujian.gov.cn/business/list/',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-origin',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36',
    'portal-sign': '079ae53ac567a94c2b4185b10ee35175',
    'sec-ch-ua': '"Chromium";v="116", "Not)A;Brand";v="24", "Google Chrome";v="116"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
}

json_data = {
    'pageNo': 1,
    'pageSize': 20,
    'total': 4172,
    'AREACODE': '',
    'M_PROJECT_TYPE': '',
    'KIND': 'GCJS',
    'GGTYPE': '1',
    'PROTYPE': '',
    'timeType': '6',
    'BeginTime': '2023-02-25 00:00:00',
    'EndTime': '2023-08-25 23:59:59',
    'createTime': [],
    'ts': 1692952444392,
}

# 输入加密接口网址
response = requests.post('接口网址', headers=headers, json=json_data)
result = response.json()
with open('js.js', encoding='utf-8', mode='r') as f:
    js_code = f.read()

print(execjs.compile(js_code).call('decrypt', result['Data']))



结尾

如果代码失效了的话可以将用请求头和请求参数重新换一下就行了。后面发现点进详细页的话,发现数据也加密码了,不过是同样的加密了,连密钥都没有换…那我们下次再见。 ————2023.8.25 17:30

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/927649.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Properties 中文配置乱码问题解决

file->setting->editor-> file encoding -> 选择Default encoding for properties files-> ISO-8859-1

springcloud3 GateWay章节-Nacos+gateway动态路由负载均衡4

一 工程结构 1.1 工程 1.2 搭建gatewayapi工程 1.pom文件 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><!--gateway--&g…

HTML的label标签有什么用?

当你想要将表单元素&#xff08;如输入框、复选框、单选按钮等&#xff09;与其描述文本关联起来&#xff0c;以便提供更好的用户界面和可访问性时&#xff0c;就可以使用HTML中的<label>标签。<label>标签用于为表单元素提供标签或标识&#xff0c;使用户能够更清…

ssm端游游戏账号销售管理系统源码和论文

ssm端游游戏账号销售管理系统源码和论文069 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面…

如何更改自己电脑上的microsoft账户?

方法/步骤 1 正常我们在登录时就只有一个本地账户或者是微软账户&#xff0c;没有地方可以输入新的账号。那怎么样才能切换到其他账户或者是使用新的账户呢。 首先我们登录进入系统。然后打开用户账户添加一个新的账户。 在键盘上按winr键打开运行输入&#xff0c;输入netpl…

醇音典范 一脉相承! 第五届中国(北京)国际耳机展,索尼期待与你相遇

2023年8月26日至8月27日&#xff0c;第五届中国&#xff08;北京&#xff09;国际耳机展将在北京亚洲大酒店盛大开启。索尼音频产品秉持"For the Music"品牌理念&#xff0c;借助四十余年浸润音乐领域的技术深耕和产业积累&#xff0c;构筑了从声音的录制、制作、到播…

“好声音”下线了?罪魁祸首纷纷扒出来了

开脑洞&#xff0c;浙江卫视是不是要完蛋了&#xff1f;先是刀郎新歌罗刹海&#xff0c;是一句歌词为转身子先扭定矛头直指好声音。然后所有攻击和侮辱过刀郎的明星均遭到了网友们的强烈讨伐&#xff0c;里边的主力就是好声音当年的评委。 接下来&#xff0c;李玟生前录音曝光&…

多线程MySQL分页查询-性能优化

MySQL分页查询优化 一、背景二、原因三、解决四、原理探究 https://blog.csdn.net/hollis_chuang/article/details/130570281 总结&#xff1a; 一、背景 业务背景&#xff1a;给C端10万级别的用户&#xff0c;同时发送活动消息&#xff0c;活动消息分为6类。数据背景&#…

《华为认证》6to4自动隧道

实验需求&#xff1a; 在NE1和NE3之间使用tunnel 口创建6to4自动隧道&#xff0c;实现PC1和PC2互访。 步骤1:配置ipv4地址&#xff0c;如图所示&#xff1a; 步骤2&#xff1a;配置NE1和NE3的ipv4路由&#xff0c;是两端的ipv4网络能够互访 R1: ip route-static 0.0.0.0 0…

msvcp120.dll文件缺失一键修复方法,靠谱的多种修复msvcp120.dll方案

msvcp120.dll文件的丢失&#xff0c;其实是比较常见的&#xff0c;msvcp120.dll是一个Microsoft Visual C Redistributable的关键文件&#xff0c;它包含了一些用于C编程的标准函数和类的定义。如果msvcp120.dll丢失了&#xff0c;那么你的一些与这个文件相关的程序是打不开的&…

小程序订阅消息

注意&#xff1a;小程序订阅消息和小程序类目挂钩&#xff0c;只有设置对应的类目后才能发送相应的公共模板小程序订阅消息 1、类目 1/1 获取微信所有类目信息 https://api.weixin.qq.com/cgi-bin/wxopen/getallcategories?access_token1/2 获取当前账号配置的类目 https:…

Vue学习之Vue组件的核心概念

组件是什么 vue组件就是一个个独立的小型的ui模块&#xff0c;整个大型的系统就是由一个个小型的UI模块拼接而成的 vue组件就是vue实例&#xff0c;通过new Vue函数来创建的一个vue实例&#xff0c;不同的组件只不过是options的不同&#xff0c;我们基本百分之90的开发工作都…

LeetCode 1448. 统计二叉树中好节点的数目:DFS

【LetMeFly】1448.统计二叉树中好节点的数目 力扣题目链接&#xff1a;https://leetcode.cn/problems/count-good-nodes-in-binary-tree/ 给你一棵根为 root 的二叉树&#xff0c;请你返回二叉树中好节点的数目。 「好节点」X 定义为&#xff1a;从根到该节点 X 所经过的节点…

4 多层感知机

多层感知机是一组前向结构的人工神经网络&#xff0c;映射一组输入向量到一组输出向量。除了输入节点&#xff0c;每一个节点都是一个带有非线性激活函数的神经元。多层感知机在输入层和输出层之间添加了一个或者多个隐藏层&#xff0c;并通过激活函数转换隐藏层输出。以下介绍…

Unity 应用消息中心-MessageCenter

Ps&#xff1a;主要解决耦合问题&#xff0c;把脚本之间的联系通过不同消息类型事件形式进行贯通 1.MessageCenter主脚本 2.DelegateEvent消息类型脚本 3.MC_Default_Data具体接收类脚本 using System; using System.Collections; using System.Collections.Generic; using …

C语言弯道超车必做好题锦集(编程题)

目录 前言&#xff1a; 1.计算日期到天数转换 2.尼科彻斯定理 3.密码检查 4.图片整理 5.寻找数组的中心下标 6.字符个数统计 7.多数元素 前言&#xff1a; 编程想要学的好&#xff0c;刷题少不了&#xff0c;我们不仅要多刷题&#xff0c;还要刷好题&#xff01;为此我…

压力检测器的基本信息是什么

压力检测器利用了传感器技术、电路处理技术、无线传输技术&#xff0c;能够精准测量气体或者液体等介质的压力&#xff0c;并将测得的数据上传至监控平台。 压力检测器能够适用于供水厂、污水处理厂、消防水系统、输油管道、输气管道等相关场景&#xff0c;拥有自动补偿功能、…

你知道开发程序的流程化、模块化、规范化是怎样的?不同厂商一样吗?

Postive&#xff1a; 我在天津的公司 都是netframwork的 .......... 后来 去北京 就找core 的技术 确实感觉不是一个层次的 .......... Postive&#xff1a; 以前 在天津 就是堆业务 部署iis 点点就完事了 用个redis 就牛逼的不行了 干上core的项目才发现 授权是单独…

[C++] STL_vector使用与常用接口的模拟实现

文章目录 1、vector的介绍2、vector的使用2.1 vector的定义2.2 vector迭代器的使用2.3 vector的空间增长问题 3、vector的增删查改3.1 push_back&#xff08;重点&#xff09;3.2 pop_back&#xff08;重点&#xff09;3.3 operator[]&#xff08;重点&#xff09;3.4 insert3.…

腾讯云下一代CDN -- EdgeOne加速MinIO对象存储

省流 使用MinIO作为EdgeOne的源站。 背景介绍 项目中需要一个兼容S3协议的对象存储服务&#xff0c;腾讯云的COS虽然也兼容S3协议&#xff0c;但是也只是支持简单的上传下载&#xff0c;对于上传的时候同时打标签这种需求&#xff0c;就不兼容S3了。所以决定自建一个对象存储…