个人总结 - JS逆向解析

2023-05-16

目前加密的方式总结有下面几点:

  1. 对称加密(加密解密密钥相同):DES、DES3、AES

  2. 非对称加密(分公钥私钥):RSA

  3. 信息摘要算法/签名算法:MD5、HMAC、SHA

  4. 前端实际使用中MD5、AES、RSA,自定义加密函数使用频率是最高的

  5. 几种加密方式配合次序:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,用签名算法生成非对称加密的摘要

  6. DES、DES3、AES、RSA、MD5、SHA、HMAC传入的消息或者密钥都是bytes数据类型,不是bytes数据类型的需要先转换;密钥一般是8的倍数

  7. Python实现RSA中,在rsa库中带有生成签名和校对签名的方法

  8. 安全性:DES<DES3=AES<RSA,至于MD5、SHA、HMAC不好说了

搜其他关键词如RSA、encrypt,尤其是encrypt

其中this.exponent是RSA加密偏移量 ,数值一般在HTML文件里面,全局搜索,其value值就是

密钥的值一般在网页源码的一个元素值。全局搜索,其value值就是,或者是js中找到


AES:案例ewt360.com 

AES是典型的对称加密,密钥就在前端源码里,相对于非对称的RSA安全性很低

var com_str = {
         _KEY: "20171109124536982017110912453698",//32位
         _IV: "2017110912453698",//16位
         *str:需要加密的字符串
         Encrypt: function (str) {
             var key = CryptoJS.enc.Utf8.parse(this._KEY);
             var iv = CryptoJS.enc.Utf8.parse(this._IV);
             var encrypted = '';
             var srcs = CryptoJS.enc.Utf8.parse(str);
             encrypted = CryptoJS.AES.encrypt(srcs, key, {
                 iv: iv,
                 mode: CryptoJS.mode.CBC,
                 padding: CryptoJS.pad.Pkcs7
             });
             return encrypted.ciphertext.toString();
         },
     }

此处还调用了CryptoJS,它是加密的核心类,但发现没有,其实是藏在另外一个js文件中,找到并复制出来,将两个js合并即可


自定义加密:空中网

这个网站是以get方式登陆的,由一个eval加密的js

function encrypt ()
this.encrypt(pwd, this.j_data["dc"])

加密原理:在打开网站的时候服务器会返回一串字符串,用于加密,加密的js是通过eval方式处理的

js混淆:就是把其中的变量、方法位置顺序打乱,但是又用一些无关的变量或者方法来保证执行顺序

解决方法:复制完整的混淆代码去js混淆还原网站还原。

注意:很多时候,js代码的生成函数都进行了伪装,核心的东西只有一句,但有一堆混淆视听的js,只需要找到核心代码,进行解析就行


eval加密:

eval()方法:js中的eval()方法就是一个js语言的执行器,它能把其中的参数按照JavaScript语法进行解析并执行,简单来说就是把原本的js代码变成了eval的参数,变成参数后代码就成了字符串,其中的一些字符就会被按照特定格式“编码” 。

例如下:

eval(function(p,a,c,k,e,d){e=function(c)
{return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?
String.fromCharCode(c+29):c.toString(36))};
if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return 
d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new 
RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('5 4="粘贴要加密/解密的3代码到这里";2(0==0){  
1(4);}',62,6,'1|alert|if|javascript|showmsg|var'.split('|'),0,{}))

解决方法:将代码字符串放入javascript Eval官网解密

再看eval解密后的js文件尾部,有下面一个函数

function encryptString(str, e, m) {
    var key = RSAUtils.getKeyPair(e, '', m);
    return RSAUtils.encryptedString(key, str)
}

发现是RSA加密方式,那现在从RSA加密逆向搜索encryptString关键词 ,找到下面

var timesign = (new Date).getTime() + timespan;
     $("#p1User").val(encryptString(timesign + encodeURIComponent($("#passwordUser").val()), $("#rsaExponent").val(), $("#rsaModulus").val()));
     $("#password_value").val($("#passwordUser").val());
     $("#btnSubmitUser").val("登录中...");
     $("#usernameUser").addClass("fontcolor_cccUser").attr("readonly", "readonly");
     $("#passwordUser").val("").addClass("fontcolor_cccUser").attr("readonly", "readonly");

筛选核心代码

encryptString(timesign + encodeURIComponent($("#passwordUser").val()),$("#rsaExponent").val(), $("#rsaModulus").val());

("#passwordUser").val(),rsaExponent").val(), $("#rsaModulus").val()

这三个参数分别是从页面获取id,去html搜索这三个关键词

rsaExponent 看到value为01001,故此RSA加密偏移量为01001

rsaModulus 也是看到value为一群乱码,它是RSA密钥


用户认证的话会涉及到cookie

解决方法:查看cookie数据,找到经过例如:fingerprint进行URL解码,对比请求参数fingerprint修改


那么,逆向解密解决思路呢?

逆向解密解决思路:

(1)是根据加密参数,如“x-uab”关键字在所有关键中查找

  1. 打开chrome浏览器 按F12

  2. 找到点击source中 按ctrl + shift + F快捷键 ,输入x-uab找到js代码

  3. 接下来,打个断点调试一下:在数字那里点一下,数字位置出现蓝点,表示添加断点成功

  4. 然后刷新获取店铺列表的页面,程序会在断点处停下,在控制台调试o.getUA()函数,看一下输出

  5. 继续向下查看这个关键词参数 js 生成函数的引用,一步步往回推,找到最原始的 js 生成方法

  6. 找到以后,把这个function 方法全部代码取出来,另存为一个js文件。

(2)怎么用python执行js脚本?

方法一:

​ 自己搞懂生成的过程,是md5还是AES加密,找到key值,时间戳其余参数啥的也可以生成,做过后台开发的会比较清楚其生成原理,因为需要对接前后端接口

方法二:execjs

因为在上面复制出来的脚本中,只单单定义了一个方法,并没有调用这个方法,所以,要在js文件的末尾添加一些代码来调用

function getParam() {
 var a;
 var param = e(2,a);
 return param
};

然后,开始撸Python代码吧

原理:将execjs的引擎换成PhantomJS这个无头浏览器,换句话说就是用PhantomJS来执行js脚本,PhantomJS是一个浏览器,自然就会创建window对象。

import execjs
  
import os
os.environ["EXECJS_RUNTIME"] = "PhantomJS"
node = execjs.get()
file = 'eleme.js'
ctx = node.compile(open(file).read())
js_encode = 'getParam()'
params = ctx.eval(js_encode)
print(params)

不用PhantomJS方法

import execjs
  
node = execjs.get()
file = 'eleme.js'
ctx = node.compile(open(file).read())
js_encode = 'getParam()'
params = ctx.eval(js_encode)
print(params)

可能会报错:execjs._exceptions.ProgramError: TypeError: 'window' 未定义
原因:window对象估计是浏览器打开是创建的,蕴含浏览器的信息,所以用Python来执行这段代码时,没有这个对象

方法三:

思路和方案二类似,不过更加粗暴一些。因为没在浏览器执行,那就模拟浏览器来执行。

在执行之前,同样要修改js脚本,在js文件末尾调用e方法,添加如下代码,例:

var a;
var param = e(2,a);
return param;

注意:调用方法不要放在任何函数里面,我之前就是因为将这段代码放在函数里头强制执行,导致的结果就是在浏览器里可以获取加密字符串,但是在Python中获取到的却是None

模拟浏览器用的selenium和chrome的webDriver,代码如下:

from selenium import webdriver
  
browser = webdriver.Chrome(executable_path='chromedriver.exe')
with open('eleme.js', 'r') as f:
     js = f.read()
print(browser.execute_script(js))

最终获得加密之后的字符串

最后,有必要说一下,如果需要获取大量的x-uab,采用方案三效率会高一下,因为采用方案二的话,可以自打开一个浏览器(都调用一个webdriver对象),然后快速执行js,返回加密字符串。

               


文章有点乱,是之前自己做过的一些笔记,主要用来记录自己的一些理解

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

个人总结 - JS逆向解析 的相关文章

  • Fast-lio个人总结

    Lidar第一帧作为基坐标 1 lidar原始数据预处理默认不提取特征 xff0c 对原始数据间隔式 xff08 间隔3个点 xff09 降采样提取 2 imu初始化 惯性解算 误差分析 状态 协方差预测 3 Lidar与imu时间状态对齐
  • 个人总结:板球控制系统之串级PID整定方法,速度环与位置环,40S任务10S完成

    其实单环我们先出了所有题目 xff0c 但是效果显然没有串级PID的效果好 xff0c 有人需要的话可以把程序包发出来 xff0c 板球运行视屏也有 另外 xff1a 天下舵机参差不齐 xff08 哪怕型号相同 xff09 xff0c 想要
  • JAVA怎么替换html标签呢???

    之前遇见个需求 让我在下载文件时 把content里面的富文本存储的内容下载下来 但是又不能有html标签 那个我们怎们处理呢 废话不多说 上代码 StringBuffer stringBuffer new StringBuffer Str
  • DFS时,出现内存超限 Memory Limit Exceeded

    DFS时 出现内存超限 Memory Limit Exceeded 很大可能由于dfs死循环 比如 vis 数组一定优先赋值再dfs
  • QT 信号和槽的使用笔记

    目录 信号和槽介绍 回调机制 信号槽机制 信号 槽 信号槽和直接调用效率问题 信号和槽的使用对比 QT5 写法 QT4 写法 总结 信号和槽介绍 信号与插槽机制 提供对象间的通信机制 可以取代原始的回调和消息映射机制 信号与槽是迅速的 类型
  • 基于unity+高通AR项目的一些总结

    今天 公司做的第一款AR项目终于在苹果appstore上架了 将近三个多月的踩坑和摸索也终于告一段落了 接下来就是不断的进行版本优化和更新 这将是一个漫长的过程 在此 对自己三个多月的开发做一个阶段性的总结 也希望能够帮到一些正在用unit
  • uni-app使用总结

    我在uni app遇到的问题 样式问题 1 组件和调用此组件的页面样式最好不要重名 不然会有样式覆盖问题 2 数据绑定变量的时候不能识别upx 可以转化 官网最新更正单位为rpx computed halfWidth return uni
  • nuxt.js服务端渲染使用flexible.js和postcss-px2rem实现移动端自适应—淘宝弹性布局方案(750px设计稿)

    在用vue做服务端渲染的时候需要对移动端做适配所以要用到postcss 2rem插件 第一步 首先下载flexible js 可加载阿里的cdn文件 http g tbcdn cn mtb lib flexible 0 3 4 flexib
  • 自定义注册、登录的校验规则(自定义validate校验规则)

    在做项目时 有一个校验用户信息的步骤 分为前端校验和后台校验 前端校验已经存在了许多插件方便了我们的使用 如validate 然而有些时候我们要用的校验规则插件中并没有 这就需要我们自定义校验规则了 接下来讲述一下validate的使用和自
  • Redis初级命令

    一 常用key命令 查看所有key keys 查看key的类型 type key 返回状态1 0 True False 当传入多个key时返回or的结果 即只要有一个存在就返回True exists key key 将key从当前db移动到
  • 支付宝小程序中网络请求 my.request({}) 的用法

    支付宝小程序网络请求官方文档 https docs alipay com mini api network Page data name 支付宝小程序 onLoad query 页面加载 在这里请求接口 console info Page
  • 解决VS安装无法联网下载问题

    离线安装VC 14 0 build tools的解决方案 在能正常通过visualcppbuildtools full exe 联网获取安装文件的电脑上 在系统自带的cmd exe中在对应目录下执行 visualcppbuildtools
  • angular-cli中引入ng-zorro-antd(蚂蚁框架)

    首先你要确保angular cli环境搭建成功 第一步 进入项目文件夹 执行以下命令后将自动完成 ng zorro antd 的初始化配置 包括引入国际化文件 导入模块 引入样式文件等工作 ng add ng zorro antd 安装完成
  • 第三节课总结之关于this指向,变量提升以及跨域的解决方案

    this 变量提升 关于继承 跨域解决方法 gt gt this指向 Js是静态作用域 是在定义阶段就决定好了的 而不是在执行阶段才决定的 参考资料 https developer mozilla org en US docs Web Ja
  • 《代码走查》杂记

    代码走查 一 定义 1 代码走查 code walkthrough 是一个开发人员与架构师集中与讨论代码的过程 代码走查的目的交换有关代码是如何书写的思路 并建立一个对代码的标准集体阐述 在代码走查的过程中 开发人员都应该有机会向其他人来阐
  • linux入门学习(3权限管理)

    权限管理 一 文件或目录的权限查看 1 文件权限的查看 两种查看文件详细信息的方法 ls l file 查看file文件的详细信息 如果是目录 则是查看该目录下的所有子文件的详细信息 ls ld dir 查看dir目录的详细信息 2 文件权
  • win10 的图标丢失了怎么办?

    情况说明 几分钟前 自己手贱 居然一不小心把那D盘的分区表给删了 虽然说是借助DiskGenius即使找了回来 但是一个尴尬的情况出现了 原来装在D盘的程序虽然可以用 但是图标却没了 这对于有强迫症的我来说 让我浑身不舒服 解决方案 首先
  • python-算法时间复杂度和空间复杂度

    大O表示法 O 名称 举例 1 常量时间 一次赋值 logn 对数时间 折半查找 n 线性时间 线性查找 nlogn 对数线性时间 快速排序 n 2 平方 两重循环 n 3 立方 三重循环 2 n 指数 递归求斐波那契数列 n 阶乘 旅行商
  • PuTTY 通过 SSH 访问出现错误:"expected key exchange group packet from server"。

    使用 PuTTY 通过 SSH 访问出现错误 expected key exchange group packet from server 解决 在 PuTTY 的左侧窗格中 导航到 连接 gt SSH gt Kex 在算法选择策略下 选择
  • 数仓面试总结

    2021年5月开始找工作 面试了若干个数仓的岗位 面的差不多也就2个 总结下大致的面试内容 一 字节视频面 上海的一个部门 视频面挂 小伙伴内推的 这个5月份面的 大概视频面试了一个小时 主要面试内容 1 问了mapreduce的具体执行过

随机推荐

  • springboot中controller层接收参数,servers层调用mapper层,一条sql搞定排序

    前言 很多小伙伴们在公司不管是测试C端产品还是B端产品 xff0c 都会测到排序的业务需求 xff1b 那么我们就会好奇排序是如何实现的呢 xff1f 下面我们开始介绍代码的实现 数据库建表 我们需要创建一个书籍book表结构 xff0c
  • SpringBoot+HttpClient+JsonPath提取A接口返回值作为参数调用B接口

    前言 在做java接口自动化中 xff0c 我们常常需要依赖多个接口 xff0c A接口依赖B xff0c C xff0c D接口的响应作为请求参数 xff1b 或者URL中的参数是从其他接口中提取返回值作获取参数这是必不可少的 那么怎么实
  • SpringBoot开发——热更新JRebel安装、激活及使用

    在开发项目时 xff0c 本地调试项目经常会因为某处修改而需要重新启动项目 xff0c 虽然可以在Edit Configuretions里面将Runing Application Update Policies里的选项设置成 Update
  • windows10环境下的RabbitMQ安装步骤(图文)

    记录下本人在win10环境下安装RabbitMQ的步骤 xff0c 以作备忘 第一步 xff1a 下载并安装erlang 原因 xff1a RabbitMQ服务端代码是使用并发式语言Erlang编写的 xff0c 安装Rabbit MQ的前
  • 用Postman生成测试报告

    newman newman是一款基于nodejs开发的可以运行postman脚本的工具 xff0c 使用Newman xff0c 可以直接从命令运行和测试postman集合 安装nodejs 下载地址 xff1a https nodejs
  • 关于uni app提示【打包时未添加push模块】的问题解决

    问题 临时拿到一个前端项目 xff0c 被要求将此项目通过android studio完成离线打包 xff0c 毕竟Hbuilder的在线打包看运气 xff0c 运气不好的要等好几十分钟 xff0c 非常不方便 然后就按照官方文档一个个进行
  • 同步异步&同步互斥&几种锁

    文章目录 同步异步同步 xff1a 异步 xff1a 同步互斥临界资源 xff1a 临界区 xff1a 同步 xff1a 互斥 xff1a 几种锁自旋锁spinlock互斥锁mutex读写锁rwlockRCU锁可重入锁和不可重入锁条件变量c
  • Ubuntu 开发环境搭建之samba共享配置(免密登录)

    作者 xff1a Ligo 20200508 1 安装samba xff1a sudo apt get install samba 安装smbclient xff1a sudo apt get install smbclient 2 新建共
  • 从 GitHub 上手动安装python包教程

    基本流程 第一步 xff0c 下载 xff08 https pypi org 自己输入要下载的库名称 xff09 第二步 xff0c 解压 xff0c 打开到出现 setup py 的文件目录 第三步 xff1b 打开 Windows Po
  • 记:解决ADB Interface 找不到驱动程序方法

    前言 由于之前一直在自己笔记本上跑数据 xff0c 公司台式机上一直没安装sdk xff0c 终于有时间了 xff0c 以为很快安装好 xff0c 没想到台式机碰到一堆坑 最后终于解决 xff0c 特此记录 xff0c 希望给有同样问题的小
  • os.system执行.py文件

    import os os system r 39 E start py 39 错误写法 xff0c 没声明文件类型 xff0c 默认按你系统文件原始格式打开 os system r 39 python E start py 39 正确写法
  • python图像识别 - paddleocr (小白安利款)

    前言 之前我有记载过 xff0c 关于Python的图像识别的文章 xff0c 但是识别率不高且不够灵活 xff0c 实用性不强 xff0c 所以不怎么推荐 最近发现一个新的Python写好的的轮子 paddleocr xff0c 本人也安
  • 【QtScrcpy】开源的投屏控制软件 - 安利

    前言 因为本人有在做群控项目 xff0c 有很多手机设备的开发和研究 xff0c 这里给大家介绍安利一个好用的安卓 电脑的投屏控制软件 xff0c 简洁好用 xff0c 不仅可以投屏 xff0c 还能反向批量控制 xff0c 并且它是免费的
  • 【解决】:error:Microsoft Visual C++ 14.0 is required.报错

    前言 有时候在新电脑上要安装个Python包 xff0c 会出现这个问题 xff0c 所以专门写篇文章做个记录 xff0c 方便以后好找 问题表现 xff1a 从上图中可以看到错误 error Microsoft Visual C 43 4
  • 逆向分析:还原 App protobuf 协议加密

    前言 之前有记录js逆向 安卓逆向等 xff0c 今天这里记录下一些协议逆向 xff0c 这种一般出现在websocket 协议 protobuf 协议等 xff0c 某音 xff0c B站 APP等都有用到这些协议加密 xff0c 而我们
  • 【解决】常见反爬总结之SVG映射

    前言 记得好早之前 xff0c 我做过关于外卖平台字体加密反爬的总结笔记 xff0c 今天给大家记录另外一种常见的反爬 SVG 映射 什么是SVG呢 xff1f SVG 全称为 Scalable Vector Graphics xff0c
  • Django实现用户注册登录

    学习Django中 xff1a 写一个用户注册登录系统 xff0c 开始搞事情 61 61 61 61 61 O O 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 6
  • 详谈PC端软件 - 加壳与脱壳

    加壳一般是指保护程序资源的方法 xff0c 在二进制的程序中植入一段代码 xff0c 在运行的时候优先取得程序的控制权 xff0c 属于软件加密 脱壳一般是指除掉程序的保护 用来修改程序资源 壳的概念 软件的壳分为加密壳 压缩壳 伪装壳 多
  • 机器学习专业名词中英文对照

    activation 激活值 activation function 激活函数 additive noise 加性噪声 autoencoder 自编码器 Autoencoders 自编码算法 average firing rate 平均激活
  • 个人总结 - JS逆向解析

    目前加密的方式总结有下面几点 xff1a 对称加密 xff08 加密解密密钥相同 xff09 xff1a DES DES3 AES 非对称加密 xff08 分公钥私钥 xff09 xff1a RSA 信息摘要算法 签名算法 xff1a MD