quickui-free_4.0.6 去水印js

本文介绍如何在QuickUI框架中去除烦人的水印。通过分析框架的授权验证机制,作者详细解释了水印的生成原理,并提供了一种简单的方法来移除水印。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载地址

本人使用quickui-free_4.0.6版本 下载地址如下点击打开链接

开发背景

最近在看前端框架,偶然发现quick ui 框架不错,虽然渲染不如bootstrap, 但是对ie的兼容性不错。话不多说,根据文档 访问框架首页发现有个讨厌的水印:  

调试发现有个未知的代码块如下:


查询了整个工程也没找到id 为这个的代码,经过一系列跟踪发现他与cn.js这个有关,查询官网发现这是他们的授权文件,(都免费版干嘛要授权,吐槽一下),废话不多说,经过调试发现代码是这里生成的:


我解析了一下这三个eval 大概如下:


   
  1. var quiLangage = {
  2. quiGrid: {
  3. errorMessage: “发生错误”,
  4. pageStatMessage: “显示从{from}到{to},总 {total} 条 。每页显示:{pagesize}”,
  5. pageTextMessage: “Page”,
  6. loadingMessage: “加载中…”,
  7. findTextMessage: “查找”,
  8. noRecordMessage: “没有符合条件的记录存在”,
  9. isContinueByDataChanged: “数据已经改变,如果继续将丢失数据,是否继续?”,
  10. saveMessage: “保存”,
  11. applyMessage: “应用”,
  12. cancelMessage: “取消”,
  13. draggingMessage: “{count}行”,
  14. editorPromptMessage: “请选择”
  15. },
  16. select: {
  17. promptMessage: “请选择”,
  18. noItemMessage: “无内容”,
  19. loadingMessage: “数据加载中…”,
  20. paramErrorMessage: “单选下拉框参数格式有误!(提示:json数据的属性和名称必须以双引号包围)”,
  21. dataErrorMessage: “单选下拉框data属性设置的数据格式有误!(提示:放在标签中的json数据的属性和名称必须以双引号包围)”,
  22. urlErrorMessage: “单选下拉框数据源出错,请检查url路径”,
  23. ldError: “无内容”
  24. }
  25. };
  26. $(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) </span>{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="27"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> qflag();</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="28"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> });</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="29"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">qflag</span>(<span class="hljs-params"></span>) </span>{</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="30"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">var</span> a = <span class="hljs-number">0</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="31"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">var</span> b = <span class="hljs-number">0</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="32"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">var</span> now = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>();</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="33"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">var</span> year = now.getFullYear();</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="34"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">var</span> month = now.getMonth() + <span class="hljs-number">1</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="35"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">var</span> day = now.getDate();</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="36"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">var</span> beginTime = year + <span class="hljs-string">"-"</span> + month + <span class="hljs-string">"-"</span> + day;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="37"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">var</span> endTime = <span class="hljs-string">"2017-5-1"</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="38"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">var</span> deadTime = <span class="hljs-string">"2019-5-1"</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="39"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">var</span> beginTimes = beginTime.substring(<span class="hljs-number">0</span>, <span class="hljs-number">10</span>).split(<span class="hljs-string">"-"</span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="40"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">var</span> endTimes = endTime.substring(<span class="hljs-number">0</span>, <span class="hljs-number">10</span>).split(<span class="hljs-string">"-"</span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="41"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">var</span> deadTimes = deadTime.substring(<span class="hljs-number">0</span>, <span class="hljs-number">10</span>).split(<span class="hljs-string">"-"</span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="42"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> beginTime = beginTimes[<span class="hljs-number">1</span>] + <span class="hljs-string">"/"</span> + beginTimes[<span class="hljs-number">2</span>] + <span class="hljs-string">"/"</span> + beginTimes[<span class="hljs-number">0</span>] + <span class="hljs-string">" "</span> + beginTime.substring(<span class="hljs-number">10</span>, <span class="hljs-number">19</span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="43"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> endTime = endTimes[<span class="hljs-number">1</span>] + <span class="hljs-string">"/"</span> + endTimes[<span class="hljs-number">2</span>] + <span class="hljs-string">"/"</span> + endTimes[<span class="hljs-number">0</span>] + <span class="hljs-string">" "</span> + endTime.substring(<span class="hljs-number">10</span>, <span class="hljs-number">19</span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="44"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> deadTime = deadTimes[<span class="hljs-number">1</span>] + <span class="hljs-string">"/"</span> + deadTimes[<span class="hljs-number">2</span>] + <span class="hljs-string">"/"</span> + deadTimes[<span class="hljs-number">0</span>] + <span class="hljs-string">" "</span> + deadTime.substring(<span class="hljs-number">10</span>, <span class="hljs-number">19</span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="45"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> a = (<span class="hljs-built_in">Date</span>.parse(endTime) - <span class="hljs-built_in">Date</span>.parse(beginTime)) / <span class="hljs-number">3600</span> / <span class="hljs-number">1000</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="46"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> b = (<span class="hljs-built_in">Date</span>.parse(deadTime) - <span class="hljs-built_in">Date</span>.parse(beginTime)) / <span class="hljs-number">3600</span> / <span class="hljs-number">1000</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="47"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> (a &gt; <span class="hljs-number">0</span> || a == <span class="hljs-number">0</span>) {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="48"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="49"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (a &lt; <span class="hljs-number">0</span> &amp;&amp; b &gt; <span class="hljs-number">0</span>) {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="50"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> (top.document.getElementById(<span class="hljs-string">"copyrightinfo"</span>)) {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="51"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> $(top.document.getElementById(<span class="hljs-string">"copyrightinfo"</span>)).remove();</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="52"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> $(top.document.body).append(<span class="hljs-string">'&lt;div style="position:absolute;bottom:0px;right:20px;font-size:12px;z-index:700;color:#cccccc;" id="copyrightinfo"&gt;免费版&lt;/div&gt;'</span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="53"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> } <span class="hljs-keyword">else</span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="54"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> $(top.document.body).append( ‘<div style=”position:absolute;bottom:0px;right:20px;font-size:12px;z-index:700;color:#cccccc;” id=”copyrightinfo”>免费版</div>’);
  27. }
  28. return true;
  29. } else if (b < 0 || b == 0) {
  30. alert( “授权过期,请联系QUICK UI官方获取新版”);
  31. return false;
  32. }
  33. }
  34. function getTypeFlage() {
  35. return “%u02D5%C8%D0%D9%D3%CB%C3%CF%D0%C7%D3”;
  36. };


   
  1. O= function(m){
  2. return String.fromCharCode( Math.floor(m/ 10000)/ 99);
  3. }


   
  1. var l= function (x){
  2. return String.fromCharCode(x)
  3. }

这样就很清楚他们是怎么控制授权和制作水印的了,ok 原理明白直接重写第三个eval的qflag 方法。

大功告成完美无水印:



重写的cn.js 文件下载地址如下 点击打开链接



            </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值