对抗js前端加密的万能方法

2023-11-06

1、前言

现在越来越多的网站采用全报文加密,测试的时候需要逆向提取加密算法以及密钥,过程十分繁琐和复杂。本文提供一种更为简单快捷的方法来解决此问题。

原理大致如下:使用浏览器的Override Hook加密前的数据,配置代理地址发送给中转服务器,中转服务器将修改后的内容传给Hook函数,最后再传给后端。

2、环境

Echo Server:Python3实现的一个中转服务器

Chrome:Sources->Overrides Hook线上js

BurpSuite:HTTP抓包工具

目标地址:id.oppo.com

3、调试

首先要找到加密前数据位置。打开的Chrome的XMLHTTPRequest的日志记录,并对后端发起请求。

post body数据被加密了。
https://id.oppo.com/apis/login/validate-password

下面来定位加密前数据位置,找到刚刚那个请求的调用栈
在这里插入图片描述
然后使用XHR断点来查看输入的数据。

在这里插入图片描述
然后点击登录
在这里插入图片描述

跟到w.post,很明显是一个封装的后的post请求函数。
在这里插入图片描述
将整个js保存到Overrides窗口下。
右键点击js文件,保存并覆盖。
(https://id.oppo.com/new/js/vendors_business~9326b498.1c00dd58484efe3187d8.js)
在这里插入图片描述

从上述代码得知,url的值为t,data值为e。调用js方法打印t的看看。(修改完需ctri+s保存并刷新网页才能生效)
console.log(“调试打印数据”,e)
在这里插入图片描述

再次点击密码登录查看刚刚hook效果。
在这里插入图片描述

如上图,明文内容已经被我们hook到。

但是现在只是能获取到明文内容,如果需要动态修改内容就需要与抓包工具交互。用一个中转服务器(Echo Server)将post body的内容作为响应内容返回给hook函数即可。

4、数据发送与修改

通过javascript将明文内容经过抓包工具发送给Echo Server。查看以下代码示例:

 W.post = function(t, e, n) {
        console.log("调试打印数据",e)
        // 构造发包
       	var xhr = new XMLHttpRequest();
        // 同步
        xhr.open('post', 'http://127.0.0.1:27001/oppo/req', false);
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhr.send(JSON.stringify(e));
        // 获取到修改后的数据传给原来流程
        //  转回对象
        let modifyData = JSON.parse(xhr.responseText);
        // 重新赋值
        e = modifyData;
        return W(Object.assign({
        url: t,
        data: e,
        method: "post"
            }, n))
        }

在这里插入图片描述
burp配置

监听端口27001,js发送请求会经过burp代理
在这里插入图片描述
将流量重定向至Echo Server

在这里插入图片描述
Echo Server代码:


from http.server import HTTPServer, BaseHTTPRequestHandler


class RequestHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        print('Recving request connction...')
        request_headers = self.headers
        content_length = request_headers.get('content-length')
        length = int(content_length[0]) if content_length else 0

        print(self.headers)
        self.send_response(200)
        self.end_headers()
        self._send_cors_headers()
        self.wfile.write(self.rfile.read(length))

    def do_POST(self):
        print('Recving request connction...')
        req_datas = self.rfile.read(int(self.headers['content-length']))
        # print(self.headers)
        # print(req_datas)

        self.send_response(200)
        self._send_cors_headers()
        self.end_headers()
        self.wfile.write(req_datas)

    def _send_cors_headers(self):
        self.send_header('Content-type', 'application/json')
        self.send_header("Access-Control-Allow-Origin", "*")
        self.send_header("Access-Control-Allow-Methods", "*")
        self.send_header("Access-Control-Allow-Headers", "Authorization, Content-Type")

    def do_OPTIONS(self):
        self.send_response(200)
        self._send_cors_headers()
        self.end_headers()


def main(ECHO_PORT):
    print('Listening on localhost: %d' % ECHO_PORT)
    server = HTTPServer(('127.0.0.1', ECHO_PORT), RequestHandler)
    server.serve_forever()


if __name__ == '__main__':
    main(27002)

效果如下:

在这里插入图片描述
在这里插入图片描述

5、引用

基于浏览器Override对抗前端加密
由于这篇文章写的和网站有实际出入,所以我复现完才出了一篇文章

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对抗js前端加密的万能方法 的相关文章

  • createHTMLNotification() 替换

    我创建了一个 Chrome 扩展程序 其中使用createHTMLNotification 在所有内容之上显示一个窗口 然而 从 Chrome 28 开始 谷歌决定放弃createHTMLNotification 完全 为什么 谷歌 为什么
  • Jquery 悬停卡

    我在用着http designwithpc com Plugins Hovercard http designwithpc com Plugins Hovercard 但我不知道如何在悬停卡上声明 var 每个工作描述都有自己的 ID 当悬
  • Vue 3 Composition API 提供/注入在单文件组件中不起作用

    我正在使用 Composition API 在 VueJS 3 中创建一个库 我实现了提供 注入 如中所述docs https v3 vuejs org guide composition api provide inject html i
  • 如何正确清理来自 AngularJS 控制器的无效输入的表单?

    我有一个 AngularJS 表单 其中包含 除其他字段之外 类型之一url 后者很重要 因为这会强制相应的输入成为有效的 URL 在某些条件下 例如 要关闭具有此类表单的模式对话框 我想以编程方式清除该表单 为此 我实现了方法reset基
  • Angular.js:如何从无序列表中获取 orderBy 或过滤器来工作?

    尝试根据价格和评级 在返回的对象中 进行排序 我宁愿用 ng click 和 li 来代替使用选择菜单 有没有办法做到这一点 我环顾四周 这是我能想到的最接近的 ul class restaurant filter li i class i
  • 为什么 window 与 Internet Explorer 中的 window.self 不同?

    关于我如何遇到这个问题有一个复杂的背景故事 但为什么self属性不完全等于窗口本身 在 Safari 和 Firefox 及其朋友中 结果如我所料 gt window window self true gt window window se
  • 如何在React Native Android中获取响应头?

    您好 我想在获取 POST 请求后获取响应标头 我尝试调试看看里面有什么response with console log response 我可以从以下位置获取响应机构responseData但我不知道如何获取标题 我想同时获得标题和正文
  • JavaScript 验证和 PHP 验证?

    我正在使用 jquery 验证插件来验证空表单 我还应该在 PHP 中检查一下以确保 100 正确吗 或者用 javascript 验证就可以了 谢谢 您应该始终在服务器上进行验证 如果用户以某种方式不使用 Javascript 提交表单
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • ReactTransitionGroup 不适用于 React-redux 连接组件

    我正在开发一个更大的项目 但我创建了这个简短的示例来说明问题 如果我使用Box组件 它的工作原理 它在控制台中输出componentWillEnter and componentWillLeave当我们点击按钮时 如果我使用BoxConta
  • React autoFocus 将光标设置为输入值的开头

    我有一个受控输入 最初显示一个值 我已将该输入设置为自动聚焦 但当我希望它出现在末尾时 光标出现在输入的开头 我知道这可能是因为自动对焦是在值之前添加的 但我不能 100 确定 在输入字段末尾完成光标初始化的最佳方法是什么 var Test
  • React Router v4 不渲染组件

    React Router v4 渲染组件存在问题 在应用程序初始加载时 它将呈现与 URL 相对应的正确组件 但是 任何后续的组件Link单击不会呈现所需的组件 图书馆 反应路由器 4 2 2 https reacttraining com
  • IE 中的 XPath 查询使用从零开始的索引,但 W3C 规范是从一开始的。我应该如何处理差异?

    问题 我正在转换目前仅适用于 Internet Explorer 的相对较大的 Javascript 代码 以便使其也适用于其他浏览器 由于代码广泛使用 XPath 我们做了一些兼容性功能以使事情变得更容易 function selectN
  • 如何在另一个自定义 Hook 中使用返回值的自定义 Hook?

    我正在使用 React native 其中有一个名为的自定义 HookuseUser使用以下方法从 AWS Amplify 获取用户信息Auth getUserInfro方法 然后获取返回对象的一部分并用它设置一个状态变量 我还有另一个名为
  • 改变 JavaScript 中的顶部填充

    以下是我在 css 中设置顶部填充的方法 body font size font size px margin 0 padding 100px 0 20px 0 width 100 important 如何使用最简单的 javascript
  • 使用 Google 日历源时如何禁用 FullCalendar 中的活动链接?

    我正在使用 FullCalendar 库从 Google 日历加载日历中的事件 不幸的是 事件添加到日历后 它们是可点击的 当您点击该活动时 您会自动重定向到 Google 日历页面以查看该特定活动 或者如果您有足够的访问权限 则可以直接对
  • 使用 Jade 评估自定义 javascript 方法 (CircularJSON)

    我想通过 Jade 将一个对象解析为客户端 JavaScript 通常这会起作用 script var object JSON parse JSON stringify object but my object is circular ht
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对

随机推荐

  • 想学软件开发做程序员,学习Python必备的Python从入门到精通约650GB全面学习资料

    先简单介绍一下Python的情况 后面文章最后附有零基础自学Python从入门到精通学习Python的视频文档源码低阶到高阶等全面学习资料约650GB 1 什么是PythonPython 是一个有条理的和强大的面向对象的程序设计语言 类似于
  • 使用 Selenium 和 Python 爬取股票网站历史资金数据的简易教程

    一 需求及技术介绍 在金融投资领域 了解股票市场的历史资金数据对于制定投资策略和做出明智的决策至关重要 这些数据包含着股票的交易量 资金流向 持股比例等关键指标 能够为投资者提供有价值的参考和分析依据 通过利用 Selenium 模拟浏览器
  • Debug-CDK编译

    问题描述 make No rule to make target xxx c needed by Obj xxx o Stop 解决方法 删掉obj文件夹 重新编译
  • 【网络基础】通俗易懂的了解HTTPS的整体过程

    文章目录 前言 HTTP 各个版本 结构 请求 请求行 请求头 请求体 响应 响应行 响应头 响应体 HTTPS 对称加密 非对称加密 对称和非对称结合加密 CA证书中级大发 证书 对称和非对称结合加密 证书关系链 拓展知识 证书的合法性验
  • STM32的常规芯片容量大小以及 大、小容量STM32芯片之间的差别?

    本文主要讨论STM32的常规芯片容量大小以及 STM32芯片大 小容量之间的差别 STM32大容量芯片是包括高达512K字节的闪存和64K字节的SRAM的芯片为大容量 STM32小容量芯片具体容量见下表 STM32F103xC STM32F
  • nginx+tomcat集群+https

    nginx tomcat集群 一 nginx安装 1 安装nginx需要的依赖包 yum y install gcc zlib zlib devel pcre devel openssl openssl devel 2 下载nginx安装包
  • (附源码)ssm考试题库管理系统 毕业设计 069043

    SSM考试题库管理系统 摘 要 随着计算机办公自动化程度的不断提高 开发各种数据库管理应用软件用于各种工作中能有效地提高工作效率 节省时间 能使学校的教学工作上一个新的台阶 传统的人工命题形成试卷 往往会出现大量的重复劳动 并且形成的试卷因
  • FTP局域网内文件共享

    FTP局域网内文件共享 由于最近公司电脑主机不让插U盘拷贝数据 所以导致在打包软件进行上机测试的时候需要使用聊天软件来进行传输 相对比较麻烦 所以决定使用FTP在局域网内来进行文件的共享 记录一下 一起学习吧 操作步骤目录 共享文件夹设置
  • c++ 内存管理一:初识内存分配工具

    文章目录 前言 1 new 和 delete 2 new 和delete 3 operator new 4 placement new 5 malloc和free 6 allocator 前言 侯捷 c 内存管理学习总结笔记 在C 中 有几
  • win服务器文件复制命令,用命令形式从Windows系统拷贝文件到Linux

    1 将本机文件复制到远程服务器上 scp home administrator news txt root 192 168 6 129 etc squid home administrator 本地文件的绝对路径 news txt 要复制到
  • 452. 用最少数量的箭引爆气球

    452 用最少数量的箭引爆气球 在二维空间中有许多球形的气球 对于每个气球 提供的输入是水平方向上 气球直径的开始和结束坐标 由于它是水平的 所以纵坐标并不重要 因此只要知道开始和结束的横坐标就足够了 开始坐标总是小于结束坐标 一支弓箭可以
  • 自动控制原理实验二 二阶系统阶跃响应

    实验源码已经上传CSDN了 需要的可直接下载 链接 https download csdn net download weixin 53129688 87694703 实验内容 其中 z 和wn对系统的动态品质有决定的影响 z为阻尼比 由于
  • 电子书 杜春雷 ARM体系结构与编程

    https pan baidu com s 1AYpTxklTRXCpqGV6hD3UzQ 提取码 j7ku
  • IO流概念与open函数操作

    IO流 input output stream 存储设备 磁盘 rom 能永久保存 读取写入速度慢 内存 ram 读取速度快 不能永久保存 断电就没了 贵 狭义 CPU运算 暂时写入内存 没读满就不存进去 见file 再存入磁盘保存 广义
  • STM32的RTC使用

    STM32的RTC使用 初始化RTC 设置时间保存时间 获取实时时间 RTC后备区另类使用 初始化RTC define RTC SET CONFIG FLAG 0x6066 lt RTC设置完成标志 判断是否第一次配置 if HAL RTC
  • 自动化运维工具Ansible基础部署与使用

    目录 一 安装部署 二 配置 Ansible最基础的模块为ping模块 主要用于判断远程客户端是否在线 用于ping本身服务器 返回值为changed ping 三 ansible批量管理 shell模块 copy模块 yum模块 file
  • MATLAB中peaks函数的用法

    MATLAB中peaks函数感觉比较有意思 是两个变量的样本函数 用法主要为 z peaks 返回一个49 49的矩阵 z peaks n 返回一个n n的矩阵 peaks n 没有输出参数时 这个函数直接使用surf来绘制peaks 默认
  • sklearn之feature_importance_参数的学习

    一 随机森林 原文链接 https blog csdn net zjuPeco article details 77371645 随机森林的算法可以用如下几个步骤概括 用有抽样放回的方法 bootstrap 从样本集中选取n个样本作为一个训
  • PBR 与 OpenGL ES 2.0 中的LOD纹理:Mipmap (关于Lod和Bias)

    MipMap 当使用Mipmap的时候可能会用到xxxLod 和 xxxBias 这几种纹理采样函数 在片段着色器中 vec4 texture2D sampler2D sampler vec2 coord vec4 textureCube
  • 对抗js前端加密的万能方法

    1 前言 现在越来越多的网站采用全报文加密 测试的时候需要逆向提取加密算法以及密钥 过程十分繁琐和复杂 本文提供一种更为简单快捷的方法来解决此问题 原理大致如下 使用浏览器的Override Hook加密前的数据 配置代理地址发送给中转服务