由于本网站较为特殊 目标网站加密与其他稍有不同

目标网站

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长加密的更多相关文章

  1. JS逆向实战1——某省阳光采购服务平台

    分析 其实这个网站基本没有用到过什么逆向,就是简单的图片base64加密 然后把连接变成2进制存成文件 然后用ocr去识别即可 !! 注意 在获取图片连接 和对列表页发起请求时一定要用一个请求,也就是 ...

  2. JS逆向实战3——AESCBC 模式解密

    爬取某省公共资源交易中心 通过抓包数据可知 这个data是我们所需要的数据,但是已经通过加密隐藏起来了 分析 首先这是个json文件,我们可以用请求参数一个一个搜 但是由于我们已经知道了这是个json ...

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

    cookie加密 DES 混淆 目标网站:aHR0cHM6Ly90bGNoZW1zaG9wLnlvdXpoaWNhaS5jb20vbWFpbi90ZW5kP05vdGljZUNhdGVJZD0xJk5 ...

  4. JS逆向实战8——某网实战(基于golang-colly)

    其实本章算不上逆向教程 只是介绍golang的colly框架而已 列表页分析 根据关键字搜索 通过抓包分析可知 下一页所请求的参数如下 上图标红的代表所需参数 所以其实我们真正需要的也就是Search ...

  5. JS逆向实战7-- 某省在线审批网站params 随机生成

    参数分析 我们首先通过抓包 发现这个就是我们所需要的数据 然后我们通过fidder 发起请求 结果: 通过我们反复测试 发现这个params的参数是每次请求中都会变化的 断点查找 我们通过 这个t参数 ...

  6. JS逆向实战6-- x轴 y轴 过点触验证码

    点触验证码是一种常见的反爬手段 解决方案有两种:一种是直接解决,这需要深度学习机器学习等图像处理技术,以大量的数据训练识别模型,最终达到模型足矣识别图片中的文字提示和应该点击的区域之间的对应关系. 这 ...

  7. JS逆向实战5--JWT TOKEN x_sign参数

    什么是JWT JWT(JSON WEB TOKEN):JSON网络令牌,JWT是一个轻便的安全跨平台传输格式,定义了一个紧凑的自包含的方式在不同实体之间安全传输信息(JSON格式).它是在Web环境下 ...

  8. JS逆向实战4--cookie——__jsl_clearance_s 生成

    分析 网站返回状态码521,从浏览器抓包来看,浏览器一共对此地址请求了三次(中间是设置cookie的过程): 第一次请求:网站返回的响应状态码为 521,响应返回的为经过 混淆的 JS 代码:但是这些 ...

  9. JS逆向实战2--cookie-AcwScV2加密—某招标信息网

    cookies的获取 首先拿到第一次访问原链接 拿到acw_tc的值,然后放到session中去 再用这个session再次访问原链接拿到js加载的加密的真实数据.用了一些反混淆. 最后获取这个数据中 ...

  10. GIF Movie Gear逆向实战+注册代码+补丁

    GIF Movie Gear逆向实战+注册代码+补丁 准备 我是在windows 8.1 x64上进行的操作.有不足之处,还望大虾指出. 获取资源 网站下载:http://www.gamani.com ...

随机推荐

  1. springboot+vue本地部署

    springboot+vue本地部署 最近完成项目,需要部署到本地,期间遇到了一些问题,最后写下流程以作记录. springboot打包 这块的内容较为简单一般为在pom.xml中加入 <bui ...

  2. Coursera Programming Languages, Part C 华盛顿大学 Week 2

    week 2 我们采用一种新的视角来对比 FP 与 OOP,即将问题分解 (decompose) 与实现 (implement) 的方式 OOP Versus Functional Decomposi ...

  3. mysql 设置外键约束SET FOREIGN_KEY_CHECKS=1

    问题描述:Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构 解决方法: 在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导出到sq ...

  4. 【RTOS】《多任务抢占式调度器》笔记

    <多任务抢占式调度器>读书笔记 1.多任务系统 在多任务调度器的作用下,多个任务轮流使用cpu,实现多任务相互独立并发运行的效果,能够充分利用硬件资源,提高cpu效率 2.任务特性 a.动 ...

  5. 【电脑】电脑windows10添加开机启动项

    1.添加开机启动项,首先按组合键"win+R"唤出运行窗口,输入"shell:startup"点击确认,打开启动项文件夹. 2.将需要设置为开机启动的软件快捷方 ...

  6. 【python】绘图,画虚线

    linestyle='--' plot画线时候加linestyle='--'. 参考:python 画图-标注点,画虚线_GXLiu-CSDN博客_python画虚线

  7. CSR生成证书与签发证书

    openSSL生成证书 生成根证书 // Generate CA private key openssl genrsa -out ca.key 2048 // Generate CSR openssl ...

  8. md5加密js内容

    避免以后都得百度,直接留一份存档 /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Diges ...

  9. UI自动化之【chromedriver.exe无法删除问题】

    想删掉chromedriver.exe,结果提示被打开 在任务管理器中,找到Chromedriver.exe,结束进程

  10. LeetCode 之 559. N叉树的最大深度

    原题链接 思路: 递归计算每个子树的深度,返回最大深度即可 python/python3: class Solution(object): def maxDepth(self, root): &quo ...