javascript代码混淆的原理

如何对JavaScript进行保护

代码压缩:

  • 去除空格
  • 换行等

代码加密:

  • eval

    • eval可以将其中的参数按照JavaScript的的语法进行解析并执行,其实就是将JavaScript的代码变成了eval的参数其中的一些字符会被按照特定的编码
    • 可以使用eval加密的网站进行加密
    http://www.jqueryfuns.com/tools/jsencode
    加密前:console.log("hello")
    加密后:eval(function(p,a,c,k,e,r){e=String;if('0'.replace(0,e)==0){while(c--)r[e(c)]=k[c];k=[function(e){return r[e]||e}];e=function(){return'^$'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('console.log("hello")',[],1,''.split('|'),0,{}))
    
    • 因为可以将加密后的代码直接输出到控制台,所以这种加密方法是非常弱的
  • Emscripten

    • Emscripten是一个用于编译的工具链asm.js公司使用LLVM构建的WebAssembly可以让你在没有插件的情况下,在网络上运行C和C++。
    • 核心:C/C++
    • 编译:Emscripten
    • 结果:asm.js
  • 调用:JavaScript

    • 就是一些核心的功能可以使用c或者c++来实现,然后通过Emscripten编译器来生成asm.js文件,然后就可以在浏览器里调用,就可以实现它的执行了,所以可以起到保护核心逻辑的功能了。
  • WebAssembly等

    • 核心:C/C++
    • 结果:wasm文件(字节码文件)运行速度会更快,体积会更小
    • 调用:JavaScript

代码混淆:

  • 变量混淆(将变量名变成一些无意义的可以来较乱的字符串(16进制)降低代码的可读性)
  • 字符串混淆(进行加密或者是编码,目的:确保代码里面,不可以使用搜索的方式来查到原始的字符串)
  • 属性加密(JavaScript里面有一些Object,可能是一些键值对,所以可以把对象进行加密的转换,就是把key-value的映射关系混淆掉)
  • 控制流扁平化(打乱原有的代码的执行流程)
  • 僵尸代码注入(将一些无用的代码注入到我们的代码中,实现扰乱)
  • 代码压缩(去除空格回车调试语句等等)
  • 反调试 (无限debug、定时debug、debugger关键字)
  • 多态变异(JavaScript一旦被调用,代码就变成和原来完全不同的代码,但是保证功能完全不变,避免代码被动态的分析调试)
  • 锁定域名
  • 反格式化
  • 特殊编码

你可能感兴趣的:(js逆向,笔记)