JS逆向入门案例-某行易招标网数据解密-02

概要

提示:仅供学习,不得用做商业交易,如有侵权请及时联系!

逆向:某行易招标网

URL:

aHR0cHM6Ly93d3cuZW5qb3k1MTkxLmNvbS92aWV3cy9wdWJsaWMvdHJhZGUuaHRtbD9vbkk9MCZvbklJPSZvbklJST0=

目的:

数据解密

在这里插入图片描述

整体架构分析流程

提示:分析-调试-猜想-实现-执行

  1. 首先打开网址,进行抓包:

接口:DQpodHRwczovL3d3dy5lbmpveTUxOTEuY29tL2FwaS9TZWFyY2hIYW5kbGVyLmFzaHg=

分析参数:
在这里插入图片描述
2.调试,应该怎样进行调试最快呢,我们想到加密数据是一堆字符串和符号组成,而数据是一条一条的,那么js肯定会将数据解密成一个json序列化格式的数据。或者我们可以想想,一般加密解密使用的单词是什么,不就是encrypt和decrypt嘛,那么我们可以猜想,然后去全局搜索进行js的断点。

Hook js:什么是hook机制,简单来说就是为了方便定位,重写浏览器v8的bom(重写方法),进行debugger断点,定位到加密位置或者参数位置。

	var parses = JSON.parse;
	JSON.parse = function(k){
	    debugger;
	    return parses(k);
	}

在这里插入图片描述

全局搜索:decrypt 在该地方全部打上断点

在这里插入图片描述

  1. 开始分析如何进行解密的。
    在这里插入图片描述
    使用node环境去验证一下猜想:

KEY: X9avr@CtRmcNgVkrVC9eKqemBZqzuPBf

	const CryptoJS = require('crypto-js');

	function decryptData(str) {
		    var key = CryptoJS.enc.Utf8.parse("X9avr@CtRmcNgVkrVC9eKqemBZqzuPBf"); // 密钥
	    var decryptedBytes = CryptoJS.AES.decrypt({
	        ciphertext: CryptoJS.enc.Base64.parse(str)
	    }, key, {
	        mode: CryptoJS.mode.ECB,
	        padding: CryptoJS.pad.Pkcs7
	    });
	    return decryptedBytes.toString(CryptoJS.enc.Utf8);
	}
	str = 'xxxxx'
	console.log(decryptData(str))

在这里插入图片描述

简简单单搞定,crypto-js是需要node进行下载的,朋友们!
npm install crypto-js

  1. 使用python进行实现调用:直接复制curl到爬虫网生成代码

网址:https://spidertools.cn/#/curl2Request

在这里插入图片描述
8. python实现效果以及代码:

	import requests
	import time
	import datetime
	import execjs
	import sys
	import json
	
	jsCode = execjs.compile(open(r'demo.js').read()).call
	
	def searchHandler(pageindex):
	    url = "https://www.脱密处理"
	    ieTime = time.time() * 1e3
	    params = {
	        # 请求时间戳
	        "ieTime": f"{int(ieTime)}",
	        "AREA_CODE": "",
	        "BIG_TYPE": "",
	        "TYPE": "",
	        "IS_ALL_FLOW": "",
	        "NEW_STATUS": "",
	        "method": "Web.GetJiaoYiList",
	        "PUBLISHED_TIME_START": "2024-02-20",
	        # 数据最新更新时间 xxxx-xx-xx
	        "PUBLISHED_TIME_END": f"{str(datetime.datetime.today()).split(' ')[0]}",
	        "NAME": "",
	        "allVisible": "false",
	        # 页数
	        "pageindex": f"{pageindex}",
	        "pagesize": "15",
	        "SITES": "1"
	    }
	    encryptData = requests.get(url, headers=headers, params=params).text
	    
	    data = jsCode('decryptData',encryptData)
	    data = json.loads(data)
	    # sys.exit(0)
	    for items in data['data']:
	        # 排名
	        rank = items['RN']
	        # 项目名称
	        name = items['NAME']
	        # 项目网址
	        urlc = items['URL']
	        # 发布时间
	        published_time = items['PUBLISHED_TIME']
	        # 地址
	        address = items['SEN'] + '-' + items['AREANAME']  
	        # 招标类型
	        type = items['BIG_TYPE_TEXT']
	        # 招标状态
	        status = items['STATUS_TXT']
	        # 公司名称
	        tenderer_name = items['TENDERER_NAME']
	        # 预算价格
	        price = items['CONTROL_PRICE']
	        # 截至时间
	        times = items['OPEN_TIME'].split(' ')[0]
	
	        print('-------------------------------------------------')
	        print('排名:',rank)
	        print('项目名称:',name)
	        print('项目网址:',urlc)
	        print('发布时间:',published_time)
	        print('地址:',address)
	        print('招标类型:',type)
	        print('招标状态:',status)
	        print('公司名称:',tenderer_name)
	        print('预算价格:',price)
	        print('截至时间:',times)
	        print('-------------------------------------------------')
	
	
	if __name__ == '__main__':
	    headers = {
	        "authority": "www.脱密处理.com",
	        "accept": "text/plain, */*; q=0.01",
	        "accept-language": "zh-CN,zh;q=0.9",
	        "referer": "https://www.脱密处理",
	        "user-agent": "xxx",
	        "x-requested-with": "XMLHttpRequest"
	    }
	    
	    pageindex = 1
	    searchHandler(pageindex)

在这里插入图片描述

技术细节

提示:快速定位方式,猜想是何加密,验证猜想

例如:

  • 看到解密数据,想到JSON.parse和decrypt。
  • 或者可以驱动器找到Ajax,当Ajax请求成功时,断点后端传回来的数据,进行往后跟栈。

小结

提示:招标网-AES-ECB加密
学习交流群:v:wzwzwz0613拉进群

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值