记一次前端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中抛出throw关键字是怎么用的? 举例?
5.抛出throw关键字 马克-to-win:我们先说5/0的原理,当程序运行到5/0的时候,java系统JVM会在后台new出一个除0异常实例,之后把这个实例传入catch块儿供开发者使用.马克-t ...
- HTTP长连接和短连接及应用情景
HTTP短连接 HTTP/1.0中默认使用短连接, 客户端和服务器进行一次HTTP操作, 就需要建立一次连接, 任务结束连接也关闭. 当客户端浏览器访问的web网页中包含其他的web资源时, 每遇到一 ...
- python中其他数据类型内置方法
补充字符串数据类型内置方法 1.移除字符串首尾的指定字符可以选择方向1: s1 = '$$$jason$$$' print(s1.strip('$')) # jason print(s1.lstrip ...
- MySQL入门学习day3随笔3
JDBC 数据库驱动 我们的程序会通过数据库驱动和数据库打交道 JDBC Sun公司简化开发人员的操作,提供的规范 第一个JDBC项目 创建一个Java项目 导入jar包 编写测试代码 1 creat ...
- gin框架使用【3.路由参数】
GET url: http://127.0.0.1:8080/users/{id} http://127.0.0.1:8080/users/1 对于id值的获取 package main impo ...
- Java指令重排序在多线程环境下的应对策略
一.序言 指令重排在单线程环境下有利于提高程序的执行效率,不会对程序产生负面影响:在多线程环境下,指令重排会给程序带来意想不到的错误. 本文对多线程指令重排问题进行复原,并针对指令重排给出相应的解决方 ...
- 二次封装这几个 element-ui 组件后,大大减少了我 CRUD 的时间
element-ui 因其组件丰富.可拓展性强.文档详细等优点成为 Vue 最火的第三方 UI 框架.element-ui 其本身就针对后台系统设计了很多实用的组件,基本上满足了平时的开发需求. 既然 ...
- XCTF练习题---MISC---intoU
XCTF练习题---MISC---intoU flag:RCTF{bmp_file_in_wav} 解题步骤: 1.观察题目,下载附件 2.解压以后是一个音频文件,听一听,挺嗨的,一边听一边想到音频分 ...
- 【mq】从零开始实现 mq-03-引入 broker 中间人
前景回顾 [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]从零开始实现 mq-02-如何实现生产者调用消费者? [mq]从零开始实现 mq-03-引入 broker 中间人 上一节我们学 ...
- 【Java分享客栈】SpringBoot线程池参数搜一堆资料还是不会配,我花一天测试换你此生明白。
一.前言 首先说一句,如果比较忙顺路点进来的,可以先收藏,有时间或用到了再看也行: 我相信很多人会有一个困惑,这个困惑和我之前一样,就是线程池这个玩意儿,感觉很高大上,用起来很fashion, ...