Javascript-加密-混淆
本文最后更新于:2021年3月9日 上午
为什么要进行JavaScript加密/混淆
- JavaScript 代码运行于客户端
不安全,存在被篡改,窃取的可能 - JavaScript 代码是公开的
如何对JavaScript进行保护
- 代码压缩:去除空格、换行等
- 代码加密:eval、emscripten、WebAssembly等
- 代码混淆:变量混淆、常理混淆、控制流平坦化、调试保护等
JavaScript加密实现
eval 加密
看似复杂,实际上,只要把参数内容输入到控制台就能得到结果Emscripten
将C
/C++
代码通过Emscripten
编译成asm.js
代码,JavaScript
调用此代码即实现加密asm.js
为文本格式WebAssembly
和Emscripten
类似,但结果是wasm文件
,运行更快,所需空间更小wasm文件
为二进制文件
JavaScript混淆
变量混淆
将一些变量名、函数名、之类的变成一些奇怪的字符,让你看着难顶字符串混淆
通过对字符串进行Base64
,MD5
等转换为一些其它字符,使得你无法直接通过全局搜索关键字找到目标属性加密
很多代码里面都用了很多Object
,里面包含了很多的key-value
,他可以混淆key-value
关系,使得你更难以寻找里面的逻辑控制流平坦化
打乱原本代码的运行流程与调用关系,让你更加难度僵尸代码注入
注入无用的代码,让你看起来更难顶代码压缩
去除空格,回车等,代码变为一行,让你更难读反调试
基于浏览器特性,循环debug
或定时debug
多态变异
代码一旦被调用,原代码就会变成与原来完全不同的代码,但功能保持不变,避免代码被动态分析,调试锁定域名
Javascript必须运行在指定域名的条件下反格式化
在你格式化以后,会有机制使得你运行的时候无法正确运行特殊编码
将Javascript编码成难读的代码
JavaScript混淆 开源项目
开源项目 | 地址 |
---|---|
UglifyJS | https://github.com/mishoo/UglifyJS |
terser | https://github.com/terser/terser |
javascript-obfuscator | https://github.com/javascript-obfuscator/javascript-obfuscator |
jsfuck | https://github.com/aemkei/jsfuck |
AAencode | https://github.com/bprayudha/jquery.aaencode |
JJEncrypt | https://github.com/ay86/jEncrypt |
JavaScript混淆 商业项目
https://www.javascriptobfuscator.com/
https://jscrambler.com/
http://stunnix.com/
处理
加密分析流程
- 查看关键包 分析参数
- 参数
- 搜索参数
(参数名=)(参数名 =)(参数名:)(参数名 :)(参数名) - 查看网络面板Initiator
- xhr断点调试
- hook相关逻辑
- 搜索参数
- 分析加密
- 补全加密逻辑
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!