悦来客栈的老板 发表于 2020-10-14 21:31:21

JavaScript反混淆通用插件一:处理十六进制、Unicode字符串或数值

插件功能
处理人难以阅读的字符串或者数值。简单来说就是将不直观的字符串或者数值变的直观。





处理实例
处理前:
var a = 0x25,b = 0b10001001,c = 0o123456,
d = "\x68\x65\x6c\x6c\x6f\x2c\x41\x53\x54",
e = "\u0068\u0065\u006c\u006c\u006f\u002c\u0041\u0053\u0054";



处理后:
var a = 37,b = 137,c = 42798,d = "hello,AST",e = "hello,AST";


插件来源
官方插件 plugin-transform-literals,略有修改,地址:
https://babeljs.io/docs/en/babel-plugin-transform-literals




插件源码const transform_literal = {
  NumericLiteral({node}) {
    if (node.extra && /^0/i.test(node.extra.raw)) {
      node.extra = undefined;
    }
  },
  StringLiteral({node}) 
  {
    if (node.extra && /\\/gi.test(node.extra.raw)) {
      node.extra = undefined;
    }
  },
}


插件原理
官网手册查询得知,NumericLiteral、StringLiteral类型的extra节点并非必需,这样在将其删除时,不会影响原节点。




在对照在线网站进行解析时,其value节点是可阅读的字符串,难以识别的字符串放在了extra节点里,所以直接进行删除即可。








注意事项
此插件无法处理非ASCII码的字符,而对于我们来说也不需要处理,如果需要处理中文Unicode,请参考这篇文章。
https://mp.weixin.qq.com/s/6CtRR3hx-73f2wi-33Tyzw



如果想学习更多AST相关的知识或者插件,可以加本人微信,共同交流。








页: [1]
查看完整版本: JavaScript反混淆通用插件一:处理十六进制、Unicode字符串或数值