gpt4 book ai didi

javascript - 如何使用十六进制转义来处理 JavaScript 字符串?

转载 作者:行者123 更新时间:2023-12-02 14:48:49 28 4
gpt4 key购买 nike

我需要使用十六进制编码来破坏(混淆)JavaScript 字符串。

源代码:

var a = 'a';

损坏的代码:

var a = '\x61';

将字符串转换为十六进制值很容易:

var map = {
'\b': '\\b',
'\f': '\\f',
'\n': '\\n',
'\r': '\\r',
'\t': '\\t',
};

var hex = function (str) {
var result = '';
for (var i = 0, l = str.length; i < l; i++) {
var char = str[i];
if (map[char]) {
result += map[char];
} else if ('\\' == char) {
result += '\\' + str[++i];
} else {
result += '\\x' + str.charCodeAt(i).toString(16);
}
}
return result;
};

但是当我将此字符串添加到输出文件时,我得到:

var a = '\\x61';

附注我使用 esprima/escodegen/estraverse 来处理 AST。

最佳答案

以下是基于 Качалов Тимофей 的实现草案解决办法:

var esprima = require('esprima');
var estraverse = require('estraverse');
var escodegen = require('escodegen');

function stringToUnicode(string) {
return '"' + string.replace(/[\s\S]/g, function (escape) {
return '\\u' + ('0000' + escape.charCodeAt().toString(16)).slice(-4);
}) + '"';
}

var tree = esprima.parse(code);
//...
estraverse.replace(tree, {
leave: function(node){
if (node.type === 'Literal' && (node.raw[0] === '"' || node.raw[0] === '\'' )){
node['x-verbatim-property'] = {
content : stringToUnicode(node.value),
precedence: escodegen.Precedence.Primary
};
}
}
});
//...
var result = escodegen.generate(tree, {verbatim: 'x-verbatim-property'});

关于javascript - 如何使用十六进制转义来处理 JavaScript 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36357038/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com