JavaScript 代码混淆实战(一):字符串字符转Unicode编码
【摘要】
通过操作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的方法:
-
function charToUnicode(srcstr) {
-
let res = "",tmp;
-
for (const val of srcstr)
-
{
-
tmp = val.codePointAt(0).toString(16);
-
while (tmp.length < 4)
-
{
-
tmp = '0' + tmp;
-
}
-
-
res += "\\u" + tmp;
-
}
-
return res;
-
}
上面的方法即可将一个字符串里的字符全部转换为Unicode。
插件源码
-
const strToUnicode = {
-
StringLiteral({node})
-
{
-
let value = node.value;
-
if (node.extra && (/\\[ux]/gi.test(node.extra.raw) == false))
-
{
-
value = charToUnicode(value);
-
node.extra.raw = '"' + value + '"';
-
}
-
},
-
}
按照那篇文章的插件来写,基本没啥难度吧。
至于转变为十六进制的字符串,读者可以自行完成!
由于粗心大意,昨天的文章贴错了代码,发出去之后没检查,今早发现后予以删除,怕误导读者,现重发。
文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq523176585/article/details/109507735
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)