Skip to content

thouger/meituanmaicai_jsguard_deobfuscation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

混淆

  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

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published