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/

处理

加密分析流程

  1. 查看关键包 分析参数
  2. 参数
    • 搜索参数
      (参数名=)(参数名 =)(参数名:)(参数名 :)(参数名)
    • 查看网络面板Initiator
    • xhr断点调试
    • hook相关逻辑
  3. 分析加密
  4. 补全加密逻辑