实战案例浅析JS加密 - RSA与XXTEA
这次要研究的网站采用的是rsa加密以及xxtea。
这里先复习下上一篇讲过的调试流程基础版:
- 如果网页有跳转,必须勾选 preservelog 防止丢包
- 看一下有没有框架 右键查看框架源代码(弹出式登陆界面)
- 登陆尽量使用错误密码 防止跳转
- 查看关键登陆包 分析哪些参数是加密的
- 使用别的浏览器分析哪些参数是固定的值
- 初步猜测加密方法
- 搜索
- 直接搜索参数
- pwd=
- pwd =
- pwd:
- pwd :
- 密码框地方右键 检查 查看 id name type
- 找到加密的地方(重点)
- 调试
- 找出所有的加密代码
- 从最后一步开始写起,缺啥找啥
- 如果找的是函数的话 search 要带上 function xxx
- 如果看到加密的地方有个类,并且之后是用 prototype 把方法加在原生对象上的话,要把 所有加在原生对象上的方法都找出来
- 函数找多了没关系,只要不报错不会影响结果,但是不能找少了
以上就是上篇文章调试的核心流程,接下来我们继续用实战案例练习一下。
RSA
先看下要解析的加密参数,记住流程的前几点:
接下来搜索参数,分析可能存在加密代码的js文件:
尝试了上面流程里面列举的可能的参数名,并没有发现有用的信息,所以试了下直接搜索password
关键字,找到一个可能和登陆相关的文件,搜索发现疑似的加密代码:
先测试打个断点试试:
成功进入断点接下来,就是缺啥找啥补齐就可以了,强烈建议大家下载一个webstorm
,方便调试。
我们先把代码里面的值填写一下,运行看看报错是什么:
根据报错我们找找这里的RSAKey在哪里,不知道如何查找可以将鼠标悬停在对应位置即可根据提示找到对应的代码。
反复操作即可,缺啥找啥直至js文件无报错即可。
小结
咸鱼找了一些简单网站,查看了对应的RSA加密的方法,总结了以下套路:
- 一般的rsa加密通常会先声明一个rsa对象
- 本地使用公钥加密即public key
- 通常有Encrypt关键字
- 加密后字符长度为128位或256位 结合以上套路可以帮助我们快速判断加密方式如何,便于我们理清解密思路。
XXTEA
“微型加密算法(TEA)及其相关变种(XTEA,Block TEA,XXTEA)都是分组加密算法,它们很容易被描述,实现也很简单(典型的几行代码)。 XXTEA是其最新的变种,于1998年提出。目前还没有人找到对其进行攻击的方法,是对前面一些变种的改进。XXTEA 算法很安全,而且非常快速,非常适合应用于 Web 开发中。 以上引用自https://my.oschina.net/mickelfeng/blog/109388
介绍完 XXTEA 我们先看看加密案例网站是什么样子的:
可以看到传输的参数都是加密后的密文,像这类加密我们可以参考提交表单中的id,class等,查看密码框的id后,全局搜索pass
:
找到疑似代码的位置,不确定可以打上断点测试一下,通过断点发确认加密位置:
接下来就是缺啥补啥的过程,经过解密发现这个网站加密过程是一个xxtea.base64的加密。
对比上一篇文章的base64的加密其实区别不大,但是在解密过程中需要思路的转变。
以上就是咸鱼对js解密的案例练习,希望对你有所帮助。
- WCF系列教程之WCF服务宿主与WCF服务部署
- Hello World · GitHub 指南
- React Native的Navigator详解
- WCF系列教程之WCF服务配置工具
- iOS使用自签名证书实现HTTPS请求
- 敲开 GitHub 的大门 · 注册账号
- 机器学习
- GitHub 主页介绍及修改个人信息
- React Native如何消除启动时白屏
- Observer观察者设计模式
- 创建 GitHub 仓库的步骤及方法
- React Native和原生app通信机制详解
- Python高效编程技巧
- 模块和处理程序之通过HttpModule和HttpHandler拦截入站HTTP请求执行指定托管代码模块
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CUDA编程之线程模型
- CMake入门实战——单个源文件
- [Go] GO语言实战-实现标题闪烁
- Windows平台安装Oracle11.2.0.4客户端报错INS-30131
- 实战丨如何制作一个完整的外卖微信小程序开发项目(已开源)
- CMake入门实战——多个源文件
- CMake入门实战——自定义编译选项
- CMake入门实战——其他
- git报错,远程克隆和更新不下来解决方法
- CMake入门实战——生成安装包
- PyTorch 60分钟入门系列之PyTorch简介
- 解决Nginx转发http后不走https的问题 后端tomcat
- PyTorch 60分钟入门系列之自动求导
- Roslyn 打包 NuGet 包添加改动日志
- PyTorch 60分钟入门系列之神经网络