JavaScript 代码混淆实战(一):字符串字符转Unicode编码

举报
悦来客栈的老板 发表于 2020/12/28 23:22:51 2020/12/28
【摘要】 通过操作AST的节点,既可以将混淆的代码变清晰,也可以将清晰的代码变的混淆。说白了,就是通过操作节点来达到目的。 我在之前的文章中介绍了如何处理十六进制、中英文Unicode字符串或数值,也就是将十六进制格式或者Unicode转换为直观的字符串。这篇文章的目的是一个逆过程。 阅读本文章之前,请熟读这篇文章: JavaScript反混淆插件一:处理十六进制、...

通过操作AST的节点,既可以将混淆的代码变清晰,也可以将清晰的代码变的混淆。说白了,就是通过操作节点来达到目的。

我在之前的文章中介绍了如何处理十六进制、中英文Unicode字符串或数值,也就是将十六进制格式或者Unicode转换为直观的字符串。这篇文章的目的是一个逆过程。

阅读本文章之前,请熟读这篇文章: JavaScript反混淆插件一:处理十六进制、中英文Unicode字符串或数值

处理实例

处理前:

var a = "hello,AST!";

  

处理后:

var a = "\u0068\u0065\u006c\u006c\u006f\u002c\u0041\u0053\u0054\u0021";

  

插件思路

与之前的插件处理思路类似,之前是将 node.extra 赋值为 undefined,这次是将 node.extra 赋值为一个复杂的值。使其显示为Unicode.

因此,需要一个将字符串转换为Unicode的方法:


   
  1. function charToUnicode(srcstr) {
  2. let res = "",tmp;
  3. for (const val of srcstr)
  4. {
  5. tmp = val.codePointAt(0).toString(16);
  6. while (tmp.length < 4)
  7. {
  8. tmp = '0' + tmp;
  9. }
  10. res += "\\u" + tmp;
  11. }
  12. return res;
  13. }

上面的方法即可将一个字符串里的字符全部转换为Unicode。

插件源码


   
  1. const strToUnicode = {
  2. StringLiteral({node})
  3. {
  4. let value = node.value;
  5. if (node.extra && (/\\[ux]/gi.test(node.extra.raw) == false))
  6. {
  7. value = charToUnicode(value);
  8. node.extra.raw = '"' + value + '"';
  9. }
  10. },
  11. }

按照那篇文章的插件来写,基本没啥难度吧。

至于转变为十六进制的字符串,读者可以自行完成!

由于粗心大意,昨天的文章贴错了代码,发出去之后没检查,今早发现后予以删除,怕误导读者,现重发。

文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq523176585/article/details/109507735

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。