关于JavaScript 十六进制代码输出

本人JS是新手,有个问题不解。
我看到有些人会加密JS代码,里面有很多诸如下面这样的加密代码:


var _defc33 = ["x61x48x52x30x63x44x6fx76x4cx33x64x33x64x79x35x77x64x58x4ax7ax5ax58x5ax68x62x47x78x6cx65x53x35x6ax62x69x38x3d", "x68x6Fx73x74x6Ex61x6Dx65", "x6Cx6Fx63x61x74x69x6Fx6E", "x69x6Ex64x65x78x4Fx66", "x64x65x63x6Fx64x65", "x73x72x63", "x69x6Dx67", "x67x65x74x45x6Cx65x6Dx65x6Ex74x73x42x79x54x61x67x4Ex61x6Dx65", "x68x74x74x70x3ax2fx2fx6ax73x68x2ex70x75x72x73x65x76x61x6cx6cx65x79x2ex63x6ex2fx73x6cx69x64x65x2ex70x68x70x3fx72x6ex64x3dx31x26x69x6dx67x3d", "x55x52x4C"];
var s = _defc33[0];

我发现这些十六进制代码不仅可以正常解析,还可以直接使用


for(i=0;i<_defc33.length;i++){

document.write(i+"="+_defc33[i]+"");

}

输出值到HTML页面上。

我试着用console.log()也能正常输出。我想请教一下JS是不是可以自动转换十六进制代码。

阅读 8.5k
2 个回答

这些代码表示什么,你又怎么用?本质上来说它们都是字符串,写在哪里都是可以的,随便一串字符串都可以输出到页面上,问题是,它承载着什么样的信息。

我把第一个数组元素转码之后得到 aHR0cDovL3d3dy5wdXJzZXZhbGxleS5jbi8=,这看起来像是 base64 编码,那么,如你所想的使用这些十六进制代码正确吗?

新手上路,请多包涵
var _defc33 = ["x61x48x52x30x63x44x6fx76x4cx33x64x33x64x79x35x77x64x58x4ax7ax5ax58x5ax68x62x47x78x6cx65x53x35x6ax62x69x38x3d", "x68x6Fx73x74x6Ex61x6Dx65", "x6Cx6Fx63x61x74x69x6Fx6E", "x69x6Ex64x65x78x4Fx66", "x64x65x63x6Fx64x65", "x73x72x63", "x69x6Dx67", "x67x65x74x45x6Cx65x6Dx65x6Ex74x73x42x79x54x61x67x4Ex61x6Dx65", "x68x74x74x70x3ax2fx2fx6ax73x68x2ex70x75x72x73x65x76x61x6cx6cx65x79x2ex63x6ex2fx73x6cx69x64x65x2ex70x68x70x3fx72x6ex64x3dx31x26x69x6dx67x3d", "x55x52x4C"];

 // strHex2Int("65") => 101 (0x65)
 function strHex2Int(s) {
    var num = 0;
    for (var i = 0; i < s.length; i++) {
        num = 16 * num + (s.charCodeAt(i) - 48);
    }
    return num;
 }

var a = _defc33.map(function(s) {
    var hex = s.replace(/x[0-9a-fA-F]{2}/g, function(c) {
        var dd = c.substr(1);
        return String.fromCharCode( strHex2Int(dd) );
    });
    return hex;
});

a.forEach(function(s) {
    console.log(s);
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题