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 协议 ,转载请注明出处!