[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
毫无疑问,从混淆的角度来说,这种技巧可以比较有效地保护相对简短的代码,因为这个方法增加了代码的长度和复杂度。当然,增加长度这一点是比较让人无奈的。如果原始的代码本来就长,混淆以后也许就会长得让人无法容忍了。
6.对原代码进行加密,同时附上解密的代码
运行时先解密,然后通过document.write()或eval()或innerHTML把代码释放出来执行。
像这种类型的,通常加密解密过程可能搞得比较复杂,还加了混淆,但是这一切就像《红楼梦》的判词里唱的那样纯属“枉然”:因为这把代码释放出来执行的最后一步通常就是明码,而且还不加混淆。这就让人不禁想起了那个老生常谈的“木桶原理”,木板箍成的水桶的盛水能力取决于它最短的那片木板,代码加密的保护强度取决于最薄弱的那个环节。
破解时只要把最后这一步的代码改掉就行了,谁会在意他中间过程有多高明、多复杂?
下面演示了一例:
在这里,我在网页里随便添加了一个textarea,名为kc,把document.write(xxx)改成了kc.value=xxx。于是,在代码经解密最后释放出来时没有被执行,而是直接扔进了textarea里。