webpack实战:某网站RSA登录加密逆向分析

news2024/12/28 4:56:34

文章目录

  • 1. 写在前面
  • 2. 抓包分析
  • 3. 定位分析
  • 4. 构建webpack

1. 写在前面

  回过头看,已慢慢将JS爬虫逆向类型的文章从0建设到了1,文章所有案例真实且内容有效,加密类型丰富。收获了很多粉丝的关注与支持,非常感谢大家!

在这里插入图片描述

往后的时间内,将着手准备在空余时间内开始写关于分布式采集平台在开源情报、网络舆情中的建设技术文章,将自己多年的经验与储备分享出来,这也是一直以来想写的文章题材!


分析目标

aHR0cHM6Ly93d3cuZ205OS5jb20v


在这里插入图片描述

2. 抓包分析

  本次目标登录参数加密,老规矩构造用户名密码尝试登录抓包分析一下:

在这里插入图片描述

可以看到提交登陆请求重password是我们需要分析的参数,ckcode是验证码,其他都无关紧要

3. 定位分析

  尝试使用全局搜索看看password可不可追溯一下,发现common.js、home.min.js两个文件可能大概率有加密操作,代码也不多。先翻翻第一个文件,找到了很显眼的函数,如下所示:

在这里插入图片描述

common.js文件中找到关键代码如下所示:

function Rsa(){
    if(typeof JSEncrypt === 'undefined') return;
    this.jsencrypt = new JSEncrypt();

    // 设置公钥
    this.jsencrypt.setPublicKey("-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDq04c6My441Gj0UFKgrqUhAUg+kQZeUeWSPlAU9fr4HBPDldAeqzx1UR92KJHuQh/zs1HOamE2dgX9z/2oXcJaqoRIA/FXysx+z2YlJkSk8XQLcQ8EBOkp//MZrixam7lCYpNOjadQBb2Ot0U/Ky+jF2p+Ie8gSZ7/u+Wnr5grywIDAQAB-----END PUBLIC KEY-----");
}

/**
 * rsa加密
 * @param  {string} [str] [待加密字符串]
 * @return {string} [经过rsa加密的字符串]
 */
Rsa.prototype.encode = function(str,confuse){
    var enStr = confuse ? confuse + "|" + str : str;
    return encodeURIComponent(this.jsencrypt.encrypt(enStr)); // rsa+uri编码
}

var rsa = new Rsa();
// 针对login接口的登录函数(部分官网在调用)
function lessLogin( params ){
    var timestamp = new Date().getTime();
    var uname = params['uname'];
    var password = rsa.encode(params['password'],timestamp);
    var forward = params['forward'];
    var remember = params['remember'];
    $.ajax({
        url : '//passport.gm99.com/login/login',
        type : 'get',
        data:{ 'encrypt':1, 'uname': uname, 'password': password, 'forward': forward, 'remember': remember },
        xhrFields: {
            withCredentials: true
        },
        jsonp: 'callback',
        async : true,
        dataType : 'jsonp',
        success : function(data){
            $('head').append(data);
        }
    });
}

可以看到上面的代码是一个封装了RSA加密函数的函数,RSA()其实是对RSA加密函数进行了再次封装,然后网站调用这个函数来发送登录表单进行验证,它并不是真正的加密函数

home.min.js文件中找到了如下一行代码:

o = a.encode(t.password, s)

断点重新提交登录,可以发现t.password就是我提交的明文密码。o则是加密后的密文

在这里插入图片描述

home.min.js文件的代码一打开就能开到,典型的webpack方式加载模块!

划重点: webpack不是加密代码,而是加载加密模块的方法!结构特征()([])、()({})

结构区别:()([])传递的参数是数组,()({})传递的参数是对象

在这里插入图片描述

4. 构建webpack

  先不用去管加密代码啥的,我们先构建webpack的结构。这里可以直接用它自己的自执行函数:

!function(t) {
	var i = {};
	function e(s) {
	    if (i[s])
	        return i[s].exports;
	    var n = i[s] = {
	        exports: {},
	        id: s,
	        loaded: !1
	    };
	    return t[s].call(n.exports, n, n.exports, e),
	    n.loaded = !0,
	    n.exports
	}
}({/*这里是加载模块*/})

上面的代码我们可以在控制台内测试一下,看看如下是否通过:

在这里插入图片描述

接下来要做的就是找到加载模块,回到之前t.password那里。一共就两个JS文件,这个地方更像是加密的位置,所以我们分析断点。鼠标查看发现a.encode,直接点击跳转

在这里插入图片描述

定位到了如下代码块:

在这里插入图片描述

从上述代码分析可以提炼出两个关键点:

加密函数实例化:new r.JSEncrypt
公钥:setPublicKey

至于this.jsencrypt.encrypt(i)不像是实现加密的代码,看起来像是封装加密函数的模块

直接在这一行下断点再次登录,鼠标找到encrypt点击跳转

在这里插入图片描述

跳转到如下代码块:

在这里插入图片描述

上图所示的代码所在位置在4: function这个加载模块内:

在这里插入图片描述

var r = i(4)中的i函数对应加载器函数里面的t[s].call(n.exports, n, n.exports, e)的参数i,即i 等于e,而e就是加载器函数,所以4: function这个加载模块正是加密代码!

最终完整可用的webpack结构加密代码结构如下:

var _Encryp;
var navigator = {};
var window = this;
!function(t) {
    var i = {};
    function e(s) {
        if (i[s])
            return i[s].exports;
        var n = i[s] = {
            exports: {},
            id: s,
            loaded: !1
        };
        return t[s].call(n.exports, n, n.exports, e),
        n.loaded = !0,
        n.exports
    }
    _Encryp = e;
}({3: function模块, 4: function加密模块})

3: function模块, 4: function加密模块的代码自己扣一下填入上面即可!不会扣的有需要测试学习的也可以私我!

因为代码多达近3000行比较庞大!这里我就不再贴出来了,最终加密需要的参数上面断点信息也可以看到分别是密码、时间戳!如下所示为控制台测试效果:

在这里插入图片描述

  好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1004414.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

奥康的高尔夫鞋,圈不住投资者的心

文 | 螳螂观察 作者 | 青月 鞋服行业终于熬过了“寒冬”,2023年行业景气度开始逐步回暖。 东方财富Choice数据显示,截至8月17日,已有28家鞋帽服装类上市公司发布了2023年中期业绩预告或快报,其中,9家预增&#xff0…

TCP的滑动窗口与拥塞控制

客户端每发送的一个包,服务器端都应该有个回复,如果服务器端超过一定的时间没有回复,客户端就会重新发送这个包,直到有回复。 为了保证顺序性,每一个包都有一个 ID。在建立连接的时候,会商定起始的 ID 是什…

Python 数据库——链表

基本概念 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。链表在逻辑上是连续的,但是在物理空间上可能是不连续的,因为链表的内存都是临时申请的,不一定会申请到连续的…

作物模型与遥感反演值同化建模的程序化实现

目录 专题一 遥感基础理论知识 专题二 作物长势监测与产量估算国内外研究进展 专题三 Fortran编程语言 专题四 作物参数遥感反演基本原理 专题五 PROSAIL模型 专题六 参数敏感性分析 专题七 遥感反演过程中的代价函数求解问题 专题八 基于查找表方法PROSAIL模型的作物参…

antd react 文件上传只允许上传一个文件且上传后隐藏上传按钮

antd react 文件上传只允许上传一个文件且上传后隐藏上传按钮 效果图代码解析 效果图 代码解析 import { Form, Upload, message } from antd; import { PlusOutlined } from ant-design/icons; import { useState, useEffect } from react; import { BASE_URL } from /utils/…

IOMesh 为 KubeVirt 提供高效稳定的持久化存储支持(附用户实践)

7 月 11 日,KubeVirt 社区正式宣布发布 Kubernetes 原生虚拟机管理插件 KubeVirt v1.0。这一版本发布不仅标志着 KubeVirt 已进化为生产就绪的虚拟机管理解决方案,也为正在使用虚拟化环境的用户提供了更多元的云化转型路线:搭配 Kubernetes 持…

vue3的params传参失效的解决方案state

vue3使用vue-router4.0,但是使用router.push的params传参,一直拿不到参数 查阅资料如下: —————————————————————————————————————————— state方案如下: 要传参的组件 import { u…

【C++模拟实现】手撕红黑树(含图解)

【C模拟实现】手撕红黑树(含图解) 目录 【C模拟实现】手撕红黑树(含图解)红黑树的介绍(百度百科)简介特征(十分重要,红黑树的基础) 红黑树的实现代码(insert部…

运营商大数据合作方合作流程和具体服务流程是什么?

运营商大数据合作方合作的流程分为好几个阶段。首先是要进行合作咨询,咨询完成了以后,再直接对相关的数据进行相应的评估。接着再把资源整合起来,然后再对数据进行清洗,接着直接将产品进行包装,然后给数据定价&#xf…

Linux时区配置

Linux时区配置 timedatectl设置时区和时间启用自动同步NTP时间设置UTC或RTC时间查看UTC时间 查看所有可用时区查看当前时区设置系统时区启用夏令时timedatectl修改当前日期时间 通用设置时区方法使用tzselect设置时区 timedatectl设置时区和时间 timedatectl是一个系统工具&am…

解决微信小程序报错:“SyntaxError:Unexpected end of JSON input”

1. 报错原因: 如果对象的参数或数组的元素中遇到地址,地址中包括?、&这些特殊符号时,对象/数组先要通过JSON.stringify转化为字符串再通过encodeURIComponent编码;接收时,先通过decodeURIComponent解码再通过JSON…

成集云 | 聚水潭对接金蝶云星空接口 | 解决方案

源系统成集云目标系统 方案介绍 聚水潭是一款以SaaS ERP为核心,集多种商家服务为一体的SaaS协同平台,为全国35万多家电商企业提供全面的信息化解决方案。聚水潭已在全国设立了超过60个线下服务网点,服务范围覆盖超过300个城市,为…

05目标检测-区域推荐(Anchor机制详解)

目录 一、问题的引入 二、解决方案-设定的anchor boxes 1.高宽比(aspect ratio)的确定 2.尺度(scale)的确定 3.anchor boxes数量的确定 三、Anchor 的在目标检测中是怎么用的 1、anchor boxes对真值bounding box编码的步骤 2、为什么要回归偏移量…

Linux安装jdk11

官网下载链接 https://www.oracle.com/java/technologies/downloads/#java11 下载解压并更改环境变量 export JAVA_HOME/home/jenkins/jdk-11.0.20 PATH"$HOME/.local/bin:$HOME/bin:$JAVA_HOME/bin:$PATH"

5G网络优化工程师如何挑选最合适的电脑?

最近很多要来学习5G网络优化的小伙伴都在问小编什么样的电脑会比较合适,开学季嘛电子产品都比较的优惠,想要下手一台性价比较高的笔记本 ,希望小编能够给点建议,于是小编马不停蹄的联系了老师以及就业的学员详细的了解之后&#x…

Error: That port is already in use.

刚开始看后端的内容 经常遇到的问题就是Error: That port is already in use. 解决方法 有两个方法可以解决(假设8000端口被占用): 1. 使用python manage.py runserver 8001 开一个新的端口。 2. kill掉原来的端口(在root条件下)。 在终端输入lsof -i:8000&am…

3dmax 基础操作

基础快捷键 1.放大视图 Altw 2.缩放 滑动滚轮 3.移动物体 按w 移动画布 ctrlp/鼠标中键 4.旋转视图 alt鼠标中键 5.复制 shift移动 6.视图切换 P透视 T顶视图 F前视图 L左视图 7.线框模型显示 f4 8. 只显示线框不显示模型 f3…

多场景PAI-Diffusion中文模型家族大升级,12个模型、2个工具全部开源

作者: 段忠杰、刘冰雁、汪诚愚、邹心怡、黄俊 概述 在过去几年中,随着AI生成内容(AI Generated Content,AIGC)的快速发展,Stable Diffusion模型在该领域崭露头角。阿里云机器学习PAI团队为推动这一领域的…

三、日志编写 —— TinyWebServer

日志编写 —— TinyWebServer 一、 前言 上期已经写完lock类的编写。这期是日志的编写。 对于日志需要弄懂几个基本概念才可以更好的理解和编写日志。 什么是日志?常用的日志级别有哪些?日志的基本格式是什么?异步日志类刷新缓冲区的作用同…

爱尔眼科周进院长出席CCOS 2023并担任学术讲者及培训导师

星城长沙,大咖云集,护航光明,共创未来!9月6日—10日,国内眼科学界最盛大的学术会议——中华医学会第二十七次全国眼科学术大会(CCOS 2023)在湖南长沙隆重举办!逾万名国内外眼科专家、学者代表参加盛会,聚焦眼科发展的新…