JS逆向实战10——某集团RSA长加密
由于本网站较为特殊 目标网站加密与其他稍有不同
目标网站
68747470733a2f2f65632e6d696e6d6574616c732e636f6d2e636e2f6f70656e2f686f6d652f70757263686173652d696e666f2f3f746162496e6465783d31
需求
爬取所有的列表页 标题 时间 url 以及详情页内容
分析
在爬取列表页时 会发现 有两个请求,说明有两个请求是一起发送的。

第一个请求

可以发现这个请求 直接发起post 请求就可以拿到数据
第二个请求

可以发现请求体是一串代码 估计和第一个参数有关
寻找参数
这个网站是几个月前爬的,目前很多JS以及混淆了,所以本篇文章只记录自己的爬取,不提供代码了
这里提供网站混淆前的JS代码
function hex2b64(d) {
let b;
let e;
let a = '';
const b64map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
const b64pad = '=';
for (b = 0; b + 3 <= d.length; b += 3) {
e = parseInt(d.substring(b, b + 3), 16);
a += b64map.charAt(e >> 6) + b64map.charAt(e & 63);
}
if (b + 1 === d.length) {
e = parseInt(d.substring(b, b + 1), 16);
a += b64map.charAt(e << 2);
} else {
if (b + 2 === d.length) {
e = parseInt(d.substring(b, b + 2), 16);
a += b64map.charAt(e >> 2) + b64map.charAt((e & 3) << 4);
}
}
while ((a.length & 3) > 0) {
a += b64pad;
}
return a;
}
//重新定义分段加密方法(加密参数过长)
JSEncrypt.prototype.encryptLong = function (string) {
const k = this.getKey(),
maxLength = ((k.n.bitLength() + 7) >> 3) - 11;
try {
let lt = '',
ct = '';
if (string.length > maxLength) {
lt = string.match(/.{1,50}/g);
lt.forEach(entry => {
const t1 = k.encrypt(entry);
ct += t1;
});
return hex2b64(ct);
}
const t = k.encrypt(string),
y = hex2b64(t);
return y;
} catch (ex) {
return ex;
}
};
//导出加密方法
function getDataByEncrypted(requestData = {}) {
const rsaInstance = new JSEncrypt();
rsaInstance.setPublicKey("");
const newRequestData = {
...requestData,
sign: md5(JSON.stringify(requestData)),
timeStamp: +new Date(),
};
const encryptionData = JSEncrypt.prototype.encryptLong(JSON.stringify(newRequestData));
return encryptionData;
}
根据代码可知 这串代码是通过JS来进行的加密
公钥就是上文所指的第一个请求请求到的结果
私钥就是第二个请求反加密的值 也就是newRequestData
知道了公钥和私钥,我们可以自己通过代码解出来了。
注意
这里有个小坑 如果用Python 去改写
JSON.stringify (Javascript) 和 json.dumps (Python) 不等价
不同之处在于 json.dumps 默认应用一些小的 pretty-print ,但 JSON.stringify 没有。
要删除所有空格,例如 JSON.stringify,您需要 specify the separators .
json_text = json.dumps(source, separators=(',', ':'))
JS逆向实战10——某集团RSA长加密的更多相关文章
- JS逆向实战1——某省阳光采购服务平台
分析 其实这个网站基本没有用到过什么逆向,就是简单的图片base64加密 然后把连接变成2进制存成文件 然后用ocr去识别即可 !! 注意 在获取图片连接 和对列表页发起请求时一定要用一个请求,也就是 ...
- JS逆向实战3——AESCBC 模式解密
爬取某省公共资源交易中心 通过抓包数据可知 这个data是我们所需要的数据,但是已经通过加密隐藏起来了 分析 首先这是个json文件,我们可以用请求参数一个一个搜 但是由于我们已经知道了这是个json ...
- JS逆向实战9——cookies DES加密混淆
cookie加密 DES 混淆 目标网站:aHR0cHM6Ly90bGNoZW1zaG9wLnlvdXpoaWNhaS5jb20vbWFpbi90ZW5kP05vdGljZUNhdGVJZD0xJk5 ...
- JS逆向实战8——某网实战(基于golang-colly)
其实本章算不上逆向教程 只是介绍golang的colly框架而已 列表页分析 根据关键字搜索 通过抓包分析可知 下一页所请求的参数如下 上图标红的代表所需参数 所以其实我们真正需要的也就是Search ...
- JS逆向实战7-- 某省在线审批网站params 随机生成
参数分析 我们首先通过抓包 发现这个就是我们所需要的数据 然后我们通过fidder 发起请求 结果: 通过我们反复测试 发现这个params的参数是每次请求中都会变化的 断点查找 我们通过 这个t参数 ...
- JS逆向实战6-- x轴 y轴 过点触验证码
点触验证码是一种常见的反爬手段 解决方案有两种:一种是直接解决,这需要深度学习机器学习等图像处理技术,以大量的数据训练识别模型,最终达到模型足矣识别图片中的文字提示和应该点击的区域之间的对应关系. 这 ...
- JS逆向实战5--JWT TOKEN x_sign参数
什么是JWT JWT(JSON WEB TOKEN):JSON网络令牌,JWT是一个轻便的安全跨平台传输格式,定义了一个紧凑的自包含的方式在不同实体之间安全传输信息(JSON格式).它是在Web环境下 ...
- JS逆向实战4--cookie——__jsl_clearance_s 生成
分析 网站返回状态码521,从浏览器抓包来看,浏览器一共对此地址请求了三次(中间是设置cookie的过程): 第一次请求:网站返回的响应状态码为 521,响应返回的为经过 混淆的 JS 代码:但是这些 ...
- JS逆向实战2--cookie-AcwScV2加密—某招标信息网
cookies的获取 首先拿到第一次访问原链接 拿到acw_tc的值,然后放到session中去 再用这个session再次访问原链接拿到js加载的加密的真实数据.用了一些反混淆. 最后获取这个数据中 ...
- GIF Movie Gear逆向实战+注册代码+补丁
GIF Movie Gear逆向实战+注册代码+补丁 准备 我是在windows 8.1 x64上进行的操作.有不足之处,还望大虾指出. 获取资源 网站下载:http://www.gamani.com ...
随机推荐
- pytorch学习笔记(4)--dataloader
batch_size:有多少张 shuffle=True:顺序不打乱 num_workers: 进程数 drop_last:最后不够64张是否舍去 import torchvision from to ...
- 4. python 文件操作
文件打开有3种方式:读模式.写模式.追加模式 f = open('words','r',encoding='utf-8') #打开文件 print(f.read()) #读文件,读取之后文件指针放到最 ...
- 初探AOP
1.背景介绍 1.什么是AOP 1)在OOP(面向对象编程)中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加. 2)AOP则将封装好的对象剖开,找出其中对多个 ...
- Flutter 新建项目
一.打开VSCode,点击侧边栏扩展按钮,搜索flutter,安装Flutter和Dart 二.按command+shift+P,输入flutter,选择Flutter:New project,新建项 ...
- Python openpyxl【包】
介绍 Excel是我们日常工作中经常用到的办公软件,在处理数据和表格方面有着优异的性能,那么能不能用python来操作Excel呢? 答案是肯定的,openpyxl是一个第三方库,可以处理xlsx格式 ...
- delete、truncate、drop的区别
delete:只删除数据,不删除结构.删除的数据存储在系统回滚段中,可以回滚.不会自动提交事务. 在InnoDB中,delete不会真的把数据删除,mysql实际上只是给删除的数据打了个标记为已删除, ...
- Hive+spark工业化项目
DolphinScheduler:国产调度平台 airflow: 调度平台
- 【peewee】Python使用peewee时where中不同类型比较的问题
问题 以学生表为例,TableStudents表中age字段是TextField类型,想要筛选出18岁以上的学生 TableStudents.select().where(TableStudents. ...
- C语言——使用循环和递归计算阶乘
使用循环和递归计算阶乘: /*使用循环和递归计算阶乘*/ #include<stdio.h> double fact(int num);//函数声明,阶乘函数,用于循环时调用 double ...
- 攻防(一)tomcat CVE-2020-1938,ftp 21端口
TOMCAT kali自带POE msf6 > use auxiliary/admin/http/tomcat_ghostcat set RHOST 10.98.xx.xx msf6 auxil ...