概要
提示:仅供学习,不得用做商业交易,如有侵权请及时联系!
逆向:某行易招标网
URL:
aHR0cHM6Ly93d3cuZW5qb3k1MTkxLmNvbS92aWV3cy9wdWJsaWMvdHJhZGUuaHRtbD9vbkk9MCZvbklJPSZvbklJST0=
目的:
数据解密
整体架构分析流程
提示:分析-调试-猜想-实现-执行
- 首先打开网址,进行抓包:
接口: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 在该地方全部打上断点
- 开始分析如何进行解密的。
使用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
- 使用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拉进群