记一次前端CryptoJS AES解密
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解密的更多相关文章
- [转帖]前端 crypto-js aes 加解密
前端 crypto-js aes 加解密 2018.04.13 11:37:21字数 891阅读 59767 https://www.jianshu.com/p/a47477e8126a 原来前端也有 ...
- 前端 crypto-js aes 加解密
下载:npm install crypto-js --save 需要定义两个方法 ,分别是用于加密和解密,这里我将它放在了 utils 文件夹下,命名为 secret.js ,其具体代码如下: con ...
- 前端AES解密
使用插件Crypto.JS 安装 npm install --save_dev crypto-js // 导入 crypto-js 包 import CryptoJS from 'crypto-js/ ...
- 前端加密传输 crypto-js AES 加密和解密
配置: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- cryptoJS AES 加解密简单使用
简单记录一下,前端利用 cryptoJS 如何加解密的.主要是关于 AES 加解密. 需求描述:需要对 url 中的参数进行 AES 解密,然后再把该参数进行 MD5 加密通过接口传递. AES AE ...
- 前端aes解密实战小结
很多人对于AES加密并不是很了解,导致互相之间进行加密解密困难. 本文用简单的方式来介绍AES在使用上需要的知识,而不涉及内部算法.最后给出例子来帮助理解AES加密解密的使用方法. AES的麻烦 相比 ...
- 前端JS AES加密 后端PHP AES加解密
<!DOCTYPEhtml> <html> <head> <title>aes demo</title> </head> < ...
- crypto-js aes加密解密
安装 npm install crypto-js --save unit.js import CryptoJS from "crypto-js"; //秘钥 const CRYPT ...
- javascript AES加密 C#AES解密实现
首先需要引入js类库 crypto-js(开源),地址:http://code.google.com/p/crypto-js 现在很多人无法打开这个地址不要紧,下面我们会将全部代码贴出来 需要引入 a ...
随机推荐
- java中为什么把Checked Exception翻译成受检的异常?
6.Checked Exception(受检的异常) 马克-to-win:为什么我大胆的把Checked Exception翻译成受检的异常?因为这类异常,编译器检查发现到它后会强令你catch它或t ...
- PAT B1066图像过滤
输入样例: 3 5 100 150 0 3 189 254 101 119 150 233 151 99 100 88 123 149 0 255 输出样例: 003 189 254 000 00 ...
- ccf201912-1 报数 C++代码实现
代码实现: #include<iostream> using namespace std; /*题目限制为三位数*/ /*思路: 1.用一个长度为4的数组(初值为0)保存每个人分别跳过了几 ...
- DB2表数据导出、导入及常用sql使用总结
一.DB2数据的导出: export to [path(例:D:"TABLE1.ixf)]of ixf select [字段(例: * or col1,col2,col3)] from ...
- jsp基础、el技术、jstl标签、javaEE的开发模式
一.jsp技术基础 1.jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%=java变量或表达式> ...
- css3种不知道宽高的情况下水平垂直居中的方法
第一种:display:table-cell 组合使用display:table-cell和vertical-align.text-align,使父元素内的所有行内元素水平垂直居中(内部div设置di ...
- maven导入依赖了提示can't resolved
maven导入依赖显红报错 网上有很多解决方案,我试过几个但是都不是很好用,推荐一个我自己一直在用的解决方案 在终端执行命令 mvn idea:idea 无法解析的原因基本上是因为包没下载完整,执行这 ...
- Redis快速入门到精通
Redis Redis是一个开源的使用ANSI C语言编写.支持网络. 可基于内存亦可持久化的日志型.Key-Value型 NoSQL数据库,并提供多种语言的API.从2010年3 月15日起,Red ...
- python---二分查找的实现
from cal_time import get_running_time @get_running_time def bin_search(li, val): """ ...
- hyperledger 儿童车级开发项目实战----投票系统(1)
今天根据hyperledger 企业级开发项目实战视频,自己做了一个投票demo.在这做个记录 首先编写智能合约 在$GOPATH的的src路径下创建项目的名称,我的是mkdir vote 然后创建c ...