关于前端动态调试解密签名校验的分享

2023-11-04

首先我们先来看一下,下面这张图是笔者近期测试遇到的问题,那就是程序每次生成请求都会生成signature的验签,该验签生成方式暂不可知,唯一知道的就是用一次就失效,这对测试的成本造成了很不好的影响,那么我们想要突破防护,最起码也要知道,这个signature是怎么生成的,他的算法是什么?
在这里插入图片描述
暂且忽略加密,因为实际上网站后面的内容加密部分并不多,我们主要是突破requestid、signature即可;想要知道requestid的生成、signature的生成,我们就需要对程序进行动态调试,动态调试我们建议使用google浏览器,火狐浏览器会出现卡顿…
首先F12打开调试器,然后全局搜索signature即可
在这里插入图片描述
双击选中的结果,然后代码格式化一下
在这里插入图片描述
CTRL + F 在当前app.xxx.js文件内再次搜索signature关键字,寻找我们觉得像的
在这里插入图片描述
此时,我们发现有个东西很像了

e.headers.signature = Object(u["a"])(encodeURIComponent(c.join(";"))),

我们直接在这里打断点看看
在这里插入图片描述
我们暂时无视上面的值,我们直接定位到这个代码的位置,该代码由多个函数组成,我们可以在控制台看一下他们是干什么的
首先看一下e里的内容
在这里插入图片描述
可以看到,e.headers里是没有signature的,说明此时signatuer还没来得及生成
在这里插入图片描述
在这里插入图片描述
继续程序(F10),观察signature
在这里插入图片描述
在这里插入图片描述
此时signature生成,说明我们的断点没问题;
此时回顾一下整个函数内容
在这里插入图片描述
我们拆分一下函数内容,首先是c c现在是一个数组类型,暂时里面包含了两个内容,一个是URL一个是Requestid;这两个是怎么来的我们稍后看;
c.join(“;”) 是将两个字符串拼接,用分号分割
encodeURIComponent(c.join(";")) 其实就是将特殊符号抓换成url编码,这样json类型就变成了字符串类型了
最后一步,u["a"](encodeURIComponent(c.join(";"))) u[“a”]()是关键函数,这个函数将收到的两个字符串合并在一起进行加密,最后生出了signature这个东西,但是我们并不知道里面的算法是什么
但是看他的位数,我们可以猜测大致的算法,这里推荐大家可以去调试,也可以猜解
随便打开一个在线的sha1加密,将我们拿到的字符串放进去,发现生出来的值与调试器里的验签值是一样的,那么我们可以确定,程序是sha1加密的

在这里插入图片描述
获取到了算法,我们接下来就需要知道,c的值是怎么来的(就是URL/Request),因为该程序会根据不同的场景,即登陆前、登录后(登陆后产生token)、有body和无doby
因为我们知道,关键的参数其实就是c,恰巧我们看到了程序上面有很多的c.push 看字面也能才出来这是再往里面加参数,所以这里可以将所有的c.push打断点
在这里插入图片描述
此时重新走一遍,这一次我们将分为3个场景对程序进行调试
登陆前
登录后
存在token且有body参数
登陆前的调试,我们需要确定requsetid、url怎么来的
在这里插入图片描述
第一步,程序首先生成了一个l ,这个l 其实就是数据包请求中的requestid;大家可以跟进这个d[“w”]()函数,核心代码如下,大家如果不知道是干啥的也不要紧,现在chatgpt这么现金,大家可以直接把代码粘进去生成一个python代码就行,这个代码其实就是生成requestid的,在python中有一个标准的库,uuid库
在这里插入图片描述
此时第一个被压入的就是l 也就是我们随机生成的requestid
在这里插入图片描述
在这里插入图片描述
我们步过后,此时程序进入下一步

if (c.push(Object(d["i"])()),
e.data && c.push(JSON.stringify(e.data))

不知道这个程序是干啥的,那么就直接放到控制台里
我们可以看出来,此时d[“i”]() 函数返回空,因为token现在是没有的
e.data() 其实就是我们的登录请求数据包体,JSON.string其实就是将数据包转换成了字符串类型
接下来进入到下一步

t.queryVal(f)
t.queryVal(a)

这两步应该是判断,url参数后边有没有东西,比如说 xxx/login?id=1
有的话就会给过滤掉,t.queryVal(a) 就是拿到url
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们现在查看一下c的内容
此时c里有3条,分别是requestid、body、url
在这里插入图片描述
c.sort() 其实就是将c重新排序
在这里插入图片描述
在这里插入图片描述
我们发现此时的顺序是

url  +  requestid  +  body

对应程序的就是

t.queryVal(a)   + d[“w”]()  +e.body && JSON.stringify(e.data)

最后回到

e.headers.signature = Object(u["a"])(encodeURIComponent(c.join(";")))

在这里插入图片描述
在这里插入图片描述
我们可以看出来,正如我们所想的那样,那么这个时候我们就可以看到,signature生成规则如下
在这里插入图片描述

这里面没有看到token,不过不要紧,我们现将登录请求通过,然后再看看登录后的请求
登录后生成token后,我们直接略过前面的调试过程

c.push(l)

Object(d["i"])() 获取token
在这里插入图片描述
在这里插入图片描述

c.push(JSON.stringify(e.data)

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

c.push(t.queryVal(a))

在这里插入图片描述
一直走到e.headers.signature
在这里插入图片描述

c.sort()

在这里插入图片描述

e.headers.signature = Object(u["a"])(encodeURIComponent(c.join(";")))

在这里插入图片描述
在这里插入图片描述
至此,全部捋顺

sha1(URL + token + requestid + body)

在这里插入图片描述
在这里插入图片描述
带token、带body
在这里插入图片描述
在这里插入图片描述
写在末尾:
致谢:AirSky
感谢来自实验室的好兄弟的指点
本文由AirSky 、Vlan911联合输出

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

关于前端动态调试解密签名校验的分享 的相关文章

  • 正负压产生电路(9V,12V)

    正负压输出电路 开关电源知识储备 xl6007 电荷泵 原理图和PCB 开关电源知识储备 在dc dc拓扑中有着buck 降压 boost 升压 buck boost 升降压 其原理简单总结是 利用储能元件 如电容电感 对电流的释放进行控制
  • vue3.0--使用element-plus的$message

    前题已经按如上步骤安装了按需加载的element plus 项目中使用this message 使用成功了 import ElMessage from element plus components ElMessage ElMessage
  • Error setting null for parameter #2 with JdbcType OTHER

    mybatis执行时报错内容如下 Error setting null for parameter 2 with JdbcType OTHER Try setting a different JdbcType for this parame

随机推荐

  • atcoder ABC 128

    目录 B guidebook c switches D equeue B guidebook B Guidebook atcoder jp 多关键字排序 按主要关键字 次要关键字排序 用结构体存储主次要关键字 用sort排序 sort可以对
  • squid 高匿配置 用户名密码配置

    1 安装squidyum install squid2 修改配置文件 在 http access deny all 上面加上如下权限配置 注意 一定要在这句上面 用户名密码配置 auth param basic program usr li
  • openGL之API学习(五)光照

    基本的光照模型主要包括 环境光 漫反射 镜面反射 环境光是在晴天室外到处看到的光的类型 环境光也就被建模为一个没有光源 没有方向并且对场景中的所有物体产生相同的点亮效果的一种光 环境光在很多情况下会被尽量的避免去考虑 因为它看上去有点太人工
  • PlacingObjectsontheGlobe_译

    PlacingObjectsontheGlobe 译 已经创建了一个关卡并且输入一些像CesiumWorldTerrain或者一个城市的摄影测量模型真实世界资产 接下来你可能想要从标准UnrealEngine工具箱添加一些对象 格网 植物
  • 对Spring loC DI的理解

    文章转自https www cnblogs com Mr Rocker p 7721824 html 仅供个人学习所用 好东西当然要多多学习啊 学习过Spring框架的人一定都会听过Spring的IoC 控制反转 DI 依赖注入 这两个概念
  • 如何编写一个可变参数函数?如何让所有单片机的所有串口实现printf函数?

    前言 1 由于真的复习不下去 就想着写一篇博客拉回自己的心思 于是想到了长期有疑惑 但是一直没有进行深入了解的C语言可变参数函数 2 本人查阅了一些网上的资料 以及自己的理解写出来了这一片博客 首先再次感谢肯哥的答疑 3 借鉴文章 C51单
  • [Android] 通过Menu实现图片怀旧、浮雕、模糊、光照和素描效果

    由于随手拍项目想做成类似于美图秀秀那种底部有一排Menu实现不同效果的功能 这里先简单介绍如何通过Menu实现打开相册中的图片 怀旧效果 浮雕效果 光照效果和素描效果 后面可能会讲述如何通过PopupWindow实现自定义的Menu效果 希
  • 关于startup启动找不到相应文件问题-ORA-01078: failure in processing system parameters

    Oracle启动的三种方式 startup nomount 非安装启动 读取init org 主要用于检查实例 startup mount 安装启动 startup open 打开 依次顺序为 open gt mount gt nomoun
  • Jaspersoft 报表:PDF中文不显示问题

    问题概述 PDF中文不显示问题主要是Jasperreports提供的font包不提供中文格式支持 所以我们需要自定义一个font包 用于支持 第一步 在Jaspersoft Studio中添加中文字体 1 下载微软雅黑字体文件 ttf 字体
  • 【论文精读】Vis-MVSNet: Visibility-aware Multi-view Stereo Network

    今天属于是重读经典了 这是一篇发表在BMVC2020上的文章 试图解决MVS中可见性的问题 该文章最近在拓展之后被发表在了IJCV上 本文的解读是基于扩展之后的IJCV版本 期刊的版本内容更加详细一点 文章链接 BMVC2020版本和IJC
  • Unity-点击和拖拽手势总结

    using System Collections using System Collections Generic using UnityEngine using UnityEngine EventSystems using UnityEn
  • PID理解

    这里要理解的是PID的值 也就是通过以上公式计算出来的值 和我们控制系统的输入有什么关系 公式大致的解释就是 误差值 比例 当误差小时 慢慢接近目标 当误差大时快速的接近目标 对误差值的积分 消除稳态误差 对误差值的微分 增加阻尼 使系统更
  • 软件项目成本估算的基本方法

    一 传统的估算方法 1 至下而上的估算 对工作组成部分进行估算的一种方法 先把工作分解为更细节的部分 再对低层次上每个细节部分所需的投入进行估算 最后汇总得到整个工作所需的总投入 该估算方法的准确性取决于较低层次上的工作的规模和复杂程度 2
  • 初学者必备的3种Python爬虫库

    用Python进行网站数据抓取是我们获取数据的一个重要手段 而在Python中网站抓取有大量的库可以使用 如何选择合适的库用于自己的项目呢 先不直接给出答案 下文所列举的是我认为较为通用的3个Python库 将通过对它们的优劣评估来回答那些
  • 安装tensorflow,非常适用于同时安装了两个python2.x和python3.x两个版本号的(纯干货)

    安装步骤 首先安装anaconda 并且下载好对应的python版本 对于Anaconda中安装一个内置的python版本解析器 其实就是python的版本 根据对应的python版本使用这条命令conda create name tens
  • 【华为OD机试真题】AI处理器组合(java)100%通过率 超详细代码注释 代码深度解读

    华为OD机试真题 2022 2023 真题目录 点这里 华为OD机试真题 信号发射和接收 试读 点这里 华为OD机试真题 租车骑绿道 试读 点这里 AI处理器组合 知识点数组 时间限制 1s空间限制 256MB限定语言 不限 题目描述 某公
  • 数据结构与算法 基础概述 入门必备!

    一 数据的逻辑结构 1 集合结构 结构中的数据元素之间除了同属于一个集合的关系外 再无任何其它关系 2 线性结构 结构中的数据元素之间存在着一对一的线性关系 3 树形结构 结构中的数据元素之间存在着一对多的层次关系 4 图状结构 结构中的数
  • 使用Microsoft Visual Studio提供的DumpBin.exe工具查看DLL导出段

    以VS2008为例说明如何使用DumpBin exe工具 其他版本的使用方式应该一样 可能只是存放位置不同 o o Step1 打开Tools Visual Studio 2008 Command Prompt 打开命令行窗口 Step2
  • 论文阅读-位姿估计-SE3-Nets Learning Rigid Body Motion using Deep Neural Networks

    SE3 Nets Learning Rigid Body Motion using Deep Neural Networks 1 输入 三维点 系统输入 如推力 输出 三维点 该论文只针对三维点云输入 RGBD等 来求解每帧中目标物体的刚体
  • 关于前端动态调试解密签名校验的分享

    首先我们先来看一下 下面这张图是笔者近期测试遇到的问题 那就是程序每次生成请求都会生成signature的验签 该验签生成方式暂不可知 唯一知道的就是用一次就失效 这对测试的成本造成了很不好的影响 那么我们想要突破防护 最起码也要知道 这个