CKFinder3.5.1整合springboot修复bug免费
CKFinder3.5.1整合springboot修復bug免費
- 前言
- 項目本身bug修復
- ■ 流異常
- ■ 整合springboot相關bug
- 免費過程
- ■ 代碼可讀化
- ① 初步整理
- ② 大致過濾
- ③ 大致翻譯
- ④ 將翻譯片替換原文
- ■ 免費限制內容
- ① 大致看下翻譯后的js文件
- ② 免費禁用刪除
- ③ 免費上傳只能10個文件限制
- ④ 免費每隔幾分鐘就會彈窗
- ⑤ 免費板木又文字
- 原文js對應的地方
- ① 直接放出對應位置
- ② 免費禁用刪除
- ③ 免費上傳只能10個文件限制
- ④ 免費每隔幾分鐘就會彈窗
- ⑤ 免費板木又文字
- 最后
前言
僅供學習交流。
項目本身bug修復
■ 流異常
報錯:com.cksource.ckfinder.exception.AccessDeniedException
現象:在Linux后臺表現為大量文件未關閉,在win下表現為一旦圖片進行了操作,刪除就會異常。
原因:異常為拒絕訪問,根據異常找了半天,這個異常沒有價值。實際上是流沒有關閉,又調用了刪除,留下了一個不能訪問的空殼,后續寫入一樣名字的文件無法覆蓋就會報錯。
修復:
① com.cksource.ckfinder.image.Image
反編譯源碼50行處插入
為
public Image(InputStream inputStream) {if (inputStream == null) {throw new NullPointerException("Image input stream cannot be null");} else {try {BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);this.mimeType = URLConnection.guessContentTypeFromStream(bufferedInputStream);this.bufferedImage = ImageIO.read(bufferedInputStream);inputStream.close();} catch (IOException var3) {throw new CKFinderException("Couldn't create image from stream", var3);}if (this.bufferedImage == null) {throw new CKFinderException("Couldn't process image stream - data in stream is not a valid image");}}}② com.cksource.ckfinder.cache.BackendCache
反編譯源碼53行處修改
還有bug的話基本上都是流的問題,無腦關就對了,然后將重新編譯后的class替換jar里的內容,保持項目的干凈。
■ 整合springboot相關bug
報錯:Consider defining a bean of type 'com.cksource.ckfinder.config.Config' in your configuration.
現象:idea里可運行,打成jar包后,啟動報錯。
原因:找不到配置文件,官方demo的讀取配置文件方式有誤。
修復:
ckfinder.yml移到resource下。
然后文件讀取改為讀取流。
example.ckfinder.config.CustomConfigLoader
免費過程
看下官網,打擾了,一年254美刀,且依賴于父項目也就是說需要708美刀,國外的知識付費真高,足夠增購一臺云服務器。
ckfinder3-3.5.1\static\ckfinder\ckfinder.js,找到這個文件。
■ 代碼可讀化
① 初步整理
找一個格式化js的工具,將長長的一行美化,就會發現S()方法出鏡率很高,統計一下
沒錯了,就是它。
搜索
就會看到這個方法
function S(e) {for (var t = "", n = e.charCodeAt(0), i = 1; i < e.length; ++i) t += String.fromCharCode(e.charCodeAt(i) ^ i + n & 127);return t}網上有個逆向算法,得出了加密算法,不過沒有意義,因為加密結果隨機。所以根據提示加密,再從文件中查找告吹。
② 大致過濾
既然無法逆向,那么只能順著它的方法通篇調用一遍,實在太多了,沒法手動調用,遍寫個正則撈出來。
1、撈一份原文放入a.txt、一份帶分隔符的原文。
一段丑陋的代碼,cv拼拼接接沒有好好寫。
S(’’)或者S("")里存在斜桿實在煩,意味著引號雙引號括號都有可能屬于參數中的一員,導致正則很難編寫,水平有限,又不想花時間研究,只能大概搞搞,過濾出大致的內容。
③ 大致翻譯
過濾完了,就是翻譯,由于翻譯出來的內容存在換行,用帶分隔符的那一份,便于分割。
選取一份ckfinder.js文件作修改
通過瀏覽器打開js文件,再打開控制臺輸入——
var script = document.createElement('script'); script.src = "file:///E:/code/.../ckfinder.js"; document.getElementsByTagName('head')[0].appendChild(script);會有報錯,原因是正則沒有完整切割好S()里的內容,留下一些引號斜桿導致js文件不正確,一一剔除,或者好好寫寫正則。
便可看到翻譯結果,該結果從console復制到b.txt。
④ 將翻譯片替換原文
。。。又是一段丑陋的代碼,總之能好好替換就行。
Test public void test4(){File file = new File("E:\\code\\。。。\\b.txt");File file2 = new File("E:\\code\\。。。\\a.txt");File file3 = new File("E:\\code\\。。。\\ck.txt");BufferedReader reader = null;BufferedReader reader2 = null;BufferedReader reader3 = null;StringBuffer sbf = new StringBuffer();StringBuffer sbf3 = new StringBuffer();String[] sbf2 = new String[5935];int j=0;try {reader = new BufferedReader(new FileReader(file));reader2 = new BufferedReader(new FileReader(file2));reader3 = new BufferedReader(new FileReader(file3));String tempStr;String tempStr2;String tempStr3;while ((tempStr = reader.readLine()) != null) {sbf.append(tempStr);}while ((tempStr3 = reader3.readLine()) != null) {sbf3.append(tempStr3+"\n");}while ((tempStr2 = reader2.readLine()) != null) {sbf2[j++] = tempStr2;}reader.close();reader2.close();reader3.close();String s[] = sbf.toString().split("@@@@@");String str = sbf3.toString();for (int n=0; n < s.length; n++) {if(s[n].contains("\"")) {str = str.replace(sbf2[n], "'" + s[n] + "'");} else if(s[n].contains("'")) {str = str.replace(sbf2[n], '"' + s[n] + '"');} else {str = str.replace(sbf2[n], "'" + s[n] + "'");}}sbf3 = new StringBuffer(str);System.err.println(sbf3.toString());} catch (IOException e) {e.printStackTrace();} finally {if (reader != null) {try {reader.close();} catch (IOException e1) {e1.printStackTrace();}}}}替換后的js通過③的方法測試一下,發現仍有十幾來個報錯,這個是因為引號嵌套異常。這幾個沒有有價值的信息,一一替換回原文即可(一般不再報錯行而是往報錯的上面幾行找)。
然后就能得到正確的版本,接著查找限制內容。
■ 免費限制內容
① 大致看下翻譯后的js文件
代碼被混淆的很難閱讀,并且仍然存在不少密文,對于一個前端渣渣來說,極度難受。
第一頁就有這段話
This is a demo version of CKFinder 3 Hello fellow cracker! We are
really sad that you are trying to crack our application - we put lots
of effort to create it. + Would you like to get a free CKFinder
license? Feel free to submit your translation!
百度翻譯一下
這是CKFinder 3的演示版
你好,伙計們!我們真的很難過,你試圖石皮解我們的應用程序-我們付出了很多努力來創建它。
+您想獲得免費的CKFinder許可證嗎?請隨時提交您的翻譯!
呃。。。些許尷尬,慚愧,摸摸頭,繼續。。。
② 免費禁用刪除
被禁用了刪除功能,并且未曾調用任何的刪除接口,說明是前端限制。
全文查找,不存在這行字,說明不在前面翻譯的譯文里,又或者被二次加密了,只能通過查看刪除的elements,大致定位彈窗的代碼。
獲取到關鍵字段DeleteFiles,統計一下,只有6個,方法一一查看,。。。方法雖少,但是代碼艱澀難懂,最后定位到兩個方法,一個n是真正的刪除方法,一個i是動態追加刪除方法。
去除里面的action內容,最后發現n去除了這個刪除沒反應了。
接著瀏覽器打斷點看走向什么時候彈窗,浪費了一段時間無功而返。
接著搜索files:delete,只有7個
一一查看
setTimeout,好家伙,就是它了。刪!!!
③ 免費上傳只能10個文件限制
The number of files per folder after the upload cannot exceed 10 in demo mode.
一回生兩回熟,直接搜索’msg’,只有幾個,一一查看。
一樣,msg后面的內容二次加密,再加上這段代碼里面有10,就該敏感的認為它就是限制,方法內的內容,刪!!!。
④ 免費每隔幾分鐘就會彈窗
舉一反三,剛才搜索’msg’ 的時候其實已經看見了,刪!!!。
⑤ 免費板木又文字
查看elements
顯式style,直接搜margin:-1px auto 0,輕松找到
<%= message %> 修改, 隨便定義一個名字。
完成。
原文js對應的地方
① 直接放出對應位置
省去翻譯,直接放出原文js對應的位置
② 免費禁用刪除
刪!!!
③ 免費上傳只能10個文件限制
刪!!!
④ 免費每隔幾分鐘就會彈窗
刪!!!
⑤ 免費板木又文字
改!!!
改為
template: t._.template('<h2 style="margin:-1px auto 0;"><%= 到此一游 %></h2>')最后
這樣,即免費完成。
總結
以上是生活随笔為你收集整理的CKFinder3.5.1整合springboot修复bug免费的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学Java怎么看API(详细图解)+查看
- 下一篇: lisp语言1y1c,AutoLISP语