http://www.cnblogs.com/zjyuan/archive/2011/12/14/2287647.html JavaScript不是很给力,想怎么破解就怎么破解!此文章教你的不仅仅是破解方案,还有源码保护意识!
一、原理:
JavaScript是解释性语言,没有悬念,它严重依赖游览器。不管JavaScript如何混淆,最终浏览器都会知道最真实的代码。有朋友提出质疑,混淆方式千千万万,你如果知晓它的混淆方式,并制定出反混淆算法?如果你这么想,那就陷入了泥潭,为何不另辟蹊径呢?首先,作为成熟的JavaScript产品,混淆是必须的。但是,他必须提供给浏览器反混淆算法,因为用户需要运行。而运行这两个字却提供给我无限的契机。我不需要知道反混淆算法,我只要知晓一个接口,有IE9->F12的帮助,一切都变的很简单,因为浏览器内核中有我迫切想要的东西。有朋友提问,我混淆过后,不给你接口或不给浏览器反混淆算法。我给出的答案永远是:运行不起来的代码,统统都是废代码,一无是处,我也懒得去破解。
二、方案:
当你需要学习一款JavaScript产品的源码,却无情遭到混淆,心情恐怕是糟糕的。所以你只能拿到官网例子,然后进一步学习。什么?例子?那就好办了,这不就是我想要的接口么?首先记住,只要JS源码里含有throw,那咱们就成功了一大步。首先找到这个接口,嗯,参数一切正常。正常?可不是咱们想要的,咱真正要做的就是让源代码抛出异常,让Eval Code还原出最真实的代码。我故意改一个错误的参数传进去。好吧,源代码已经展现在我眼前。
三、源码保护解决方案:
①混淆前,让变量、方法名不可读:
阴招啊,绝对的阴招。当人家破解完后你的代码,一眼望去,看一眼都觉得损了阳寿。不过,这样做的话,还有一个麻烦,就是你对外开发人员提供的API必须是有意义的,要不然谁也读不懂,这期间的映射工作,也非常的复杂。
②浏览器厂商配合:
真正的实现JS源码保护,非浏览器厂商参与不可,妄图用JS全程实现源码保护是不现实的。
③杜绝源码里存在throw