SlickUpload6.1.7破解方法!
最近项目中要用到大文件上传,试了好多方法都不太理想,最后选择了SlickUpload,这款软件免费版并没有功能限制,只不有个未授权标记。所谓破解其实就是让那个标记不显示出来罢了。
关于SlickUpload,我不想多说,自己百度一下就知道了,不过网上的资料大多过时了,比如我找到的讲得最全最细的——周公的”ASP.NET中利用SlickUpload来上传大文件(注意是两篇哦,后面还有篇续)“。因为版本升级改动比较大,所以只能作参考,最好去看官网示例和文档,虽然不是很全,但使用是没问题的。不过,周公是前辈高人,不屑用破解这些歪门邪道的手段,所以只能继续百度,大多都是6以下版本的破解版或方法,我不打算用6以下的版本,万一不兼容某一个新的浏览器就悲剧了。不过还好,找到了这篇文章,破解版本为SlickUpload6.1.1 ,所讲方法也简单,我也照着试过,已经不行了。在这篇文章的留言里,看到有人提出6.1.4用这个方法就失效了。可见,在6.1.1——6.1.4这中间的某个版本开始就已经修复这个漏洞了,而继续百度也没找到6.1.1的下载版。于是试着自己搞定它。
下面正式开始!
1.找到目标
目标的全部代码
<div style="clear: both; background-image: url("http://krystalware.com/brandping?version=6.1.7.16721");"> <a title="Powered By SlickUpload Community Edition" style="text-decoration: none;" onmouseover="this.style.textDecoration='underline'" onmouseout="this.style.textDecoration='none'" href="http://krystalware.com/slickupload" target="_top"> <img width="154" height="28" style="padding-top: 1em; padding-right: 1em; padding-bottom: 1em; padding-left: 1em; border-top-color: currentColor; border-right-color: currentColor; border-bottom-color: currentColor; border-left-color: currentColor; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none;" alt="Powered By SlickUpload Community Edition" src="/WebResource.axd?d=1FiOSlubJtKI_B5kjWbWsBPpZhyp86GvLxG2SiOXu-LQM_PtOevRNn4EBsL2MdkMFNZOLFsHIkj4_DuMysYTpDhtbzkXkN0XYX1wgxzUyIsYZDECcr2Q9fwBFb8MMnR6ygF65rhJMaBeYe9PE7V7UjEjrjnuWE-vIkTp-HKPhToOXErfkWza74hlf48k4weS0&t=634613518440000000"/> </a></div>
2.消灭目标
上面文章在破解6.1.1的时候,用jQuery找到版权链接$('a[href="http://krystalware.com/slickupload"]'),然后上溯至它的父容器,remove掉!
这个可以肯定对6.1.7是没用的啦,因为不知道从6.1.1到6.1.4中间的那个版本开始,目标代码比JQuery的ready还后加载,虽然可以延迟一点时间执行,但那样的话,这个延迟时间怎么定,太早又不起作用,迟了版权连接就会闪一下。这不是好的方法,否决掉。
从目标的Html代码中可以看到,那个版权图片是由一般处理程序生成的,如果让这张图片显示不出来,那外边的A标签因为没有内容,也就没有意义了(可这样<img>的alt属性还是会留下文字的)。
那要怎样才能让这个图片显示不出来呢,当然是半路拦截了。好,有请Fiddler2,得到数据如下(两张图片是一个画面,便于阅读才分开的):
返回的数据全内容全文是
{ isLicensed: false, brandLocation: "inline", version: "6.1.7.16720", brandUrl: "/WebResource.axd?d=xHHmA1NSYZOFq58FW-lTnySvr-5oj2J5NLsHT_JYAN2Gk5g8QIj6w3W1b_zuwFev43lckJbzukbXCyQSsowliSZ6Ewv6HGSsb4BAG5z-CRWRk3LgpbfC-u31tFWVdnMKQEeJaQBd6SyxaM_dz7CFskeIsnvChzcbOw4IAaPRsA4G14-NKhYDsd1vM3gyXxuC0&t=634613518420000000" }
认识英文吗?不认识,我也不认识,不过我会百度啊,第二张图中的意思是什么呢?请求“请求类型:授权,会话Id,随记生成“,回复”授权没:没有,使用版本:inline,版权图片地址“。
现在,我们把返回数据给你替换掉,让它返回已授权的字符串就行了。
那么已授权的字符串是什么呢?我想官网应该用的不是免费版吧?去抓数据得到:
{ isLicensed: true, brandLocation: "inline", version: "6.1.7.20444", brandUrl: "/WebResource.axd?d=atP0PaFrizuwsaharzLJtFZOEOGCcPBP9834EDzyFt0bQxVTVYvKTIp0gRogadokWA4qUFBxWmQ-7GZRALUqSwk26C5qaygdSrjN5hlK2DmdbnbwloCPRkJSx_v5jqQjbNGAzou4bNFL0QUL7FRz6XVkiG2D7tBBq72aRZvjsLZ4gjwjHvQ0UMQE_IR1YV1o0&t=634618777275290000"}
知道怎么做了吧,把返回的数据篡改成上面的这段。
具体怎么做呢?两种方法,一种是用HttpModule,还有一种是利用Global.asax。用HttpModule相对麻烦,我们这里具体就说用Global.asax实现吧。
在网站根目录下添加Global.asax文件,在里面添加一个Application_EndRequest方法,具体代码如下:
protected void Application_EndRequest() { String path = Request.RawUrl; //屏蔽SlickUpload的未授权许可 if (path.StartsWith("/SlickUpload.axd?handlerType=license&uploadSessionId=")) { string licenseStr = "{ isLicensed: true, brandLocation: \"inline\", version: \"6.1.7.20444\"," + " brandUrl: \"/WebResource.axdd=atP0PaFrizuwsaharzLJtFZOEOGCcPBP9834EDzyFt0bQxVTVYvKTIp0gRogadokWA4qUFBxWmQ-" +"7GZRALUqSwk26C5qaygdSrjN5hlK2DmdbnbwloCPRkJSx_v5jqQjbNGAzou4bNFL0QUL7FRz6XVkiG2D7tBBq72aRZvjsLZ4gjwjHvQ0UMQE_IR1YV1o0&t=634618777275290000\"}"; Context.Response.Clear(); Context.Response.Write(licenseStr); } }
注意if语句括号内是“/SlickUpload.axd?handlerType=license&uploadSessionId=”而不是“/SlickUpload.axd?handlerType=license&uploadSessionId=A9A395C6-CB56-4275-A5E7-CCF56A61E6D0”,因为后面的字符串每次请求都是不同的
到此打开页面,那个版权信息就不见了吧,其实我最后试了,改返回值时,不用这么麻烦,取已授权的返回字符串,只需把isLicensed的值改为true,那个版权信息就不见了。