一招破解混淆后的JavaScript代码

一招破解混淆后的JavaScript代码

作者:admin |  时间:2014-02-05 |  浏览:816 |  0 条评论
例子:找到规律,对替换后的变量抛出异常,就可以拿到混淆后的代码
<script>
try{
/*!@#$%^&*()_+_)(*&^%$*/
a = eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);throw p;return p;}('2 4=e.g.f.h;2 3=$.c.6("3");2 8=$.c.6("8");j((4.a("o.m.5")>-1||4.a("b://n.i.5")>-1)&&3>0&&8==""){$.6("b://p.w.5/x/z.y?3="+3,r(9){2 d=q.v(9);2 7=d.t.u.s[0].7;e.g.f.h=7;l k})}',36,36,'||var|id|url|com|get|click_url|ali_trackid|jsonStr|indexOf|http|query|json|top|location|window|href|tmall|if|true|return|taobao|detail|item|www|JSON|function|taobaoke_item_detail|taobaoke_items_detail_get_response|taobaoke_item_details|parse|comments8|taoke|php|convert'.split('|'),0,{}))
} catch(e) {
    console.log(e);
}
</script>

输出结果:

var url=top.window.location.href;var id=$.query.get("id");var ali_trackid=$.query.get("ali_trackid");if((url.indexOf("item.taobao.com")>-1||url.indexOf("http://detail.tmall.com")>-1)&&id>0&&ali_trackid==""){$.get("http://www.comments8.com/taoke/convert.php?id="+id,function(jsonStr){var json=JSON.parse(jsonStr);var click_url=json.taobaoke_items_detail_get_response.taobaoke_item_details.taobaoke_item_detail[0].click_url;top.window.location.href=click_url;return true})}

JavaScript不是很给力,想怎么破解就怎么破解!此文章教你的不仅仅是破解方案,还有源码保护意识!

一、原理:

JavaScript是解释性语言,没有悬念,它严重依赖游览器。

不管JavaScript如何混淆,最终浏览器都会知道最真实的代码。

有朋友提出质疑,混淆方式千千万万,你如果知晓它的混淆方式,并制定出反混淆算法?

如果你这么想,那就陷入了泥潭,为何不另辟蹊径呢?

首先,作为成熟的JavaScript产品,混淆是必须的。但是,他必须提供给浏览器反混淆算法,因为用户需要运行。

而运行这两个字却提供给我无限的契机。我不需要知道反混淆算法,我只要知晓一个接口,

有IE9->F12的帮助,一切都变的很简单,因为浏览器内核中有我迫切想要的东西。

有朋友提问,我混淆过后,不给你接口或不给浏览器反混淆算法。

在我眼里,运行不起来的代码,统统都是废代码,一无是处,我也懒得去破解。

二、方案:

当你需要学习一款JavaScript产品的源码,却无情遭到混淆,心情恐怕是糟糕的。

所以你只能拿到官网例子,然后进一步学习。

什么?例子?那就好办了,这不就是我想要的接口么?首先记住,只要JS源码里含有throw,那咱们就成功了一大步。

首先找到这个接口,嗯,参数一切正常。正常?可不是咱们想要的,

咱真正要做的就是让源代码抛出异常,让Eval Code还原出最真实的代码。

我故意改一个错误的参数传进去。好吧,源代码已经展现在我眼前。

三、源码保护解决方案:

1.混淆前,让变量、方法名不可读:

阴招啊,绝对的阴招。当人家破解完后你的代码,一眼望去,看一眼都觉得损了阳寿。

不过,这样做的话,还有一个麻烦,就是你对外开发人员提供的API必须是有意义的,

要不然谁也读不懂,这期间的映射工作,也非常的复杂。

2.浏览器厂商配合:

真正的实现JS源码保护,非浏览器厂商参与不可,妄图用JS全程实现源码保护是不现实的。

3.杜绝把源码里存在throw

如果诸位用JQuery或ExtJS,那么尽量throw错误给这些类库,避免让浏览器从源码文件抛出异常。

本文标签:

相关推荐

ajax跨域情况下jsonp的使用
Posted on 02月22日
MySQL添加字段和删除字段
Posted on 02月17日
PHP对象的在函数间传递
Posted on 02月26日
HTML使table折行问题总结
Posted on 02月20日

发表评论

电子邮件地址不会被公开。

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>