![](/img/trans.png)
[英]Injecting javascript with BHO using C# - how to escape strings properly
[英]How to mangle JavaScript strings using hexadecimal escape?
我需要使用十六進制編碼來處理(混淆)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';
PS我使用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'});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.