首页 > 其他分享 >JS逆向实战10——某集团RSA长加密

JS逆向实战10——某集团RSA长加密

时间:2023-01-04 15:47:33浏览次数:32  
标签:10 stringify 加密 请求 RSA JS return const

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

目标网站: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=(',', ':'))

标签:10,stringify,加密,请求,RSA,JS,return,const
From: https://www.cnblogs.com/zichliang/p/17025025.html

相关文章

  • JS 七彩文字
    背景:作者身为一个经历过杀马特时代的90后,怎么能拒绝七彩梦幻灯光呢,手撸一个七彩文字控制器 效果:(文字颜色是会不停变化的)代码: <!DOCTYPEhtml><htmllang="en......
  • 「诗人艺术家ll著名诗人」胭脂茉莉十四行诗10首
    【诗人艺术家ll著名诗人】胭脂茉莉十四行10首胭脂茉莉诗人简介:胭脂茉莉,女,江苏人,年少习诗,作家、诗人。评论及随笔见诸媒体及报刊,诗歌被选编入海内外多种选本及刊物,其主要代表......
  • 2023年实时最新中国省市区县街道级geoJSON格式地图数据Echarts地图数据联动数据下载
    发现个可以免费下载全国 geojson 数据的网站,推荐一下。支持全国、省级、市级、区/县级、街道/乡镇级以及各级的联动数据geojson数据下载地址:https://geojson.hxkj.vip......
  • CP1042 阶乘的尾数
    本想做个小题,没想到牵扯出了大数阶乘(悲本质上还是极限俺的做法:#include<stdio.h>intchange(intm);intmain(){ inta[20001]; intm,u; inttemp,digit,n,i,j=......
  • 用100W+行代码贡献经验,带你了解如何参与OpenHarmony开源
    摘要:截至2022年11月,深开鸿共计参与共建OpenAtomOpenHarmony(以下简称OpenHarmony)社区16个SIG,其中4个为深开鸿主导,并累计贡献代码量超过百万行。本文分享自华为云社区《用1......
  • elementplus中tabs标签切换导致echarts宽高变为100px问题
    问题基本上就是tabs标签切换的时候导致echarts宽高变为100px是因为tabs标签初始化的时候会把所有的子页面都加载出来,导致切换的时候echarts图表宽高变化解决问题就是想办......
  • 23.0104 winter training 3
    B-Editor题意给定长度为n的字符串,每个字符代表一个操作,'L','R'分别代表位置左移和右移,其余字符代表修改当前位置为s[i]输出每次操作后打印出的字符串是否是合法的括号......
  • Json-Tutorial03 字符串解析
    前言学习了Json字面量解析和数值解析后,本节我们将完成Json的单个字符串解析。Json中的字符串是以""修饰的。代码设计1.编写lept_get_boolean()等访问函数的单元测试,......
  • 集合10 - Exception
    Collection-Exceptionpublicclass_Exception{publicstaticvoidmain(String[]args){//TODOCollectionException//TODOArrayListlist......
  • centos.7.6.1810
    最近在玩国产化系统,采用华为国产服务器,但是系统依旧采用centos,费劲找了很多网址都没有想用的版本我这里是用centos7.6.1810版本,提供下载地址,可以参考下:https://archive.k......