847095356 / meituanmaicai_jsguard_deobfuscation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

混淆思路主要采用了两种方式,第一种是用数组下标代替步骤流程,第二种是利用数组下标代替字符串

混淆

  1. 在第二行的e数组控制整块代码for switch case
  2. 第三行的c数组控制整块代码的字符串,用n(1)、n(2)代替
  3. 对着第二行的e用"Find Usages",发现在各个for switch case里都引用了进行迭代,控制着循环流程
    1. 其中在循环过程中,通过i或者t数组将需要调用的函数存进去,不断的pop、push来增加无用的干扰代码,最后用Function.prototype.call调用关键步骤

反混淆

这里有顺序要求,因为当自执行的函数的实参也是一个自执行的函数的时候,一旦解开,两个函数之间存在的同一命名的变量定义域就会增大,重合混淆在一起

  1. 先将逗号表达式解开成以分号结尾的完整表达式
  2. 在解开自执行的函数之前,先对变量改个独一无二的命名
  3. 还原自执行的函数的实参
  4. 还原没有实参的自执行函数
  5. 还原定义的字面量
  6. 合并定义在object对象外面的key、value
  7. 全局函数计算值替换
  8. 三目运算符拆分为if语句
  9. a[length]转换为a.length
  10. 函数调用出自动替换计算值(关键,解决混淆2的重点一步)
  11. 最后才是去控制流
  12. 再删除一些无用代码
    1. 删除未被调用的变量
    2. 删除未被使用的变量
    3. 删除未被使用的函数参数
    4. 删除多余的空行和空语句

About


Languages

Language:JavaScript 100.0%