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)