1.背景

业务需求,需要联动多个平台,涉及到各平台的模拟登录。

已知加密前明文且正常登录。(无验证码要求)

某平台验证验证方式为.\login接口POST一串json字符串

{
"account": "********",
"password": "uR+dmpMdF9MRXfkBG3wQ+w=="
}

  

其中account为用户名,是明文,而password是加密后的密文

2.准备工作

ctrl+F5,未发现XHR请求,推测是前端本地加密.

F12 Network中选取JS项目。

显而易见,vue框架,方法应该就是在app.7d23ae43.js中

ctrl+F 键入encrypt

用过CryptoJS看得出,显而易见是CryptoJS的AES加密,模式为ECB,

但是并没有明文密钥,密钥是一个o(t)方法根据t参数动态改变的。

前面测试过,每次登录加密密文不变,所以肯定不是时间加密,那t应该是一个固定的值。

3.借尸/还魂

这里我用了借尸还魂的方法

正巧本地有nginx,把该网页另存为下来,准备借尸

尸体借来了,准备还魂

3.1修改html

如此多的<link/> 改了一遍目录,并在nginx中建立相同目录,

3.2还魂手术

打开app.723ae43.js

虽然都是参数化的

来一手console.log()

我贴上cryptojs的与之对应的使用方法

function encrypt() {

  var $key = "自定义密钥";
var $pwd = "123.com" var key = CryptoJS.enc.Utf8.parse($key);
var pwd = CryptoJS.enc.Utf8.parse($pwd); var encrypted = CryptoJS.AES.encrypt(pwd, key, {
iv: "",
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
var encryptedPwd = encrypted.toString();
return encryptedPwd
}

可以看出

参数n代表CryptoJS.enc.Utf8.parse()后的pwd(格式化后的密码)

参数i代表CryptoJS.enc.Utf8.parse()后的key(格式化后的密钥)

参数e代表原始pwd(原始密码)

参数a代表原始key(原始密钥)

且并没有添加iv偏移,其实加了也能console出

console后,清楚看到各类参数

这个o(t)应该就是t参数后面加8个0

根据AES密钥写一个方法测试一下

4.总结

前端加密并不靠谱,在我看来,破解只是时间问题。

在我看来这种借尸还魂方法屡试不爽,堪称外科界的体外循环,不需要理解前端的底层,不需要借助什么工具,只需要在本地电脑上加个console跑一遍就行了。(console总得会吧)

无论你采用什么HTTPS还是MD5还是AES种种加密方式,

只要在本地,逆向确实是时间问题。

记一次前端CryptoJS AES解密的更多相关文章

  1. [转帖]前端 crypto-js aes 加解密

    前端 crypto-js aes 加解密 2018.04.13 11:37:21字数 891阅读 59767 https://www.jianshu.com/p/a47477e8126a 原来前端也有 ...

  2. 前端 crypto-js aes 加解密

    下载:npm install crypto-js --save 需要定义两个方法 ,分别是用于加密和解密,这里我将它放在了 utils 文件夹下,命名为 secret.js ,其具体代码如下: con ...

  3. 前端AES解密

    使用插件Crypto.JS 安装 npm install --save_dev crypto-js // 导入 crypto-js 包 import CryptoJS from 'crypto-js/ ...

  4. 前端加密传输 crypto-js AES 加密和解密

    配置: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  5. cryptoJS AES 加解密简单使用

    简单记录一下,前端利用 cryptoJS 如何加解密的.主要是关于 AES 加解密. 需求描述:需要对 url 中的参数进行 AES 解密,然后再把该参数进行 MD5 加密通过接口传递. AES AE ...

  6. 前端aes解密实战小结

    很多人对于AES加密并不是很了解,导致互相之间进行加密解密困难. 本文用简单的方式来介绍AES在使用上需要的知识,而不涉及内部算法.最后给出例子来帮助理解AES加密解密的使用方法. AES的麻烦 相比 ...

  7. 前端JS AES加密 后端PHP AES加解密

    <!DOCTYPEhtml> <html> <head> <title>aes demo</title> </head> < ...

  8. crypto-js aes加密解密

    安装 npm install crypto-js --save unit.js import CryptoJS from "crypto-js"; //秘钥 const CRYPT ...

  9. javascript AES加密 C#AES解密实现

    首先需要引入js类库 crypto-js(开源),地址:http://code.google.com/p/crypto-js 现在很多人无法打开这个地址不要紧,下面我们会将全部代码贴出来 需要引入 a ...

随机推荐

  1. java中接口和抽象类有什么区别,举例!

    2)接口和抽象类有什么区别?答:马克-to-win:抽象类里可以有实现的方法,接口里不能有,所以相对来讲各方面实现都简单(尤其动态方法调度).另外:类可以实现多个接口.反过来说,也正是抽象类一个致命伤 ...

  2. 主线程中的Looper.loop()为什么不会造成ANR

    引子: 正如我们所知,在android中如果主线程中进行耗时操作会引发ANR(Application Not Responding)异常. 造成ANR的原因一般有两种: 当前的事件没有机会得到处理(即 ...

  3. 集合框架基础三——Map

    Map接口  * 将键映射到值的对象  * 一个映射不能包含重复的键  * 每个键最多只能映射到一个值 Map接口和Collection接口的不同 * Map是双列的,Collection是单列的 * ...

  4. 微信小程序常用表单校验方法(手机号校验、身份证号(严格和非严格校验、验证码六位数字校验))

    util.js function isPhone(value) { if (!/^1(3|4|5|7|8)\d{9}$/.test(value)) { return false } else { re ...

  5. JavaSSM-总结

    Spring框架技术 SSM(Spring+SpringMVC+Mybatis)阶段的学习,也算是成功出了Java新手村. 前面我们已经学习过Mybatis了. 从这里开始,很多的概念理解起来就稍微有 ...

  6. C/C++在Win32控制台播放Bad Apple

    ##前言 这里首先你需要准备一些文件,将一个Bad Apple的视频分别转换成txt和mp3格式(mp3用来作为背景音乐) 我将txt文件放到exe文件目录下的子目录files里了 转换方法可以用Ad ...

  7. Java语言学习day01--6月28日

    Java语言学习day01一:Java概述 1.Java语言发展史 任职于太阳微系统的 詹姆斯·高斯林 等人于1990年代初开发Java语言的雏形,最初被命名为 Oak ,目标设置在 家用电器等小型系 ...

  8. Java语言学习day11--7月10日

    今日内容介绍1.自定义类型的定义及使用2.自定义类的内存图3.ArrayList集合的基本功能4.随机点名器案例及库存案例代码优化 ###01引用数据类型_类 * A: 数据类型 * a: java中 ...

  9. 基于Vue的v-charts导出图片并下载

    依赖 npm install file-saver 页面 <ve-chart ref="chart"></ve-chart> <el-button t ...

  10. 读完学会shell语法,shell脚本80%已经学会

    第3章 shell语法讲解 3.1 shell运算讲解 3.1.1 运算符的讲解 3.1.2 shell运算方式的讲解 3.1.2.1 $(())运算 [root@m01 test_init] # a ...