CKFinder3 破解与防破解 (转)

本贴最后更新于 2361 天前,其中的信息可能已经时异事殊

CKFinder3 破解与防破解

转自:http://www.petershi.net/ckfinder3-cracking-of

背景:后台开发时候频繁遇到图片选择组件,要求该组件可以选择服务器上已有的图片或者新上传一张图片,选择之后还要编辑裁切图片。

试用了下 CKFinder 功能不错,就是多个站点得 500 刀确实贵了点,试试看能不能绕过授权试试看。

下载然后本地服务器配置好之后,深深地感受到了试用版真的是很 Demo,网上流传有不少破解方法。然而这些方法对于最新版并没有什么用,因为,最新版的 js 代码已经加密。里面的 if 判断基本全是加密后的字符串。

本来事情就结束了,可是心中不服。

首先格式化 js 代码(工具),找到 function S(e){ }; 加密后的内容都是在调用这个方法解密字符串。这样子的话,貌似能试试看咯。即便是搞不定也能学个算法。

首先来个测试页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <script>
        /*
         * 原解密函数
         */
        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;
        }

        // 先试两个数据找下节奏
        log_info('&N[mOFC"');
        log_info(';tXRS/');


        /*记录测试数据*/
        function log_info(words) {
            console.log('----------------');
            var s = S(words);
            console.log("words: ", words, words.length);
            console.log("After S(e): ", s, s.length);
        }
    </script>
</body>

</html>

控制台输出:

words 是解密后的字符串,After S(e)是用 S 方法解密后的数据

里面有一个细节是加密后的字符串比原字符串多了一位,尝试分别删除前后一个字符看看结果:

推测除了第一位数据后面的字母是一对一的关系,删除第一位之后后面数据全乱掉,说明,第一位应该是“标志位”。

先明确下我们的目的:找到程序中判断是否购买的的判断模块,或者是判断软件是适用版本的代码,提示信息等

现在代码被加密了,Demo 版本的提示信息显然是被加密了,要顺藤摸瓜,想想办法把提示信息找出来。代码已经写死,加密后的提示信息 通过 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;

};

for 循环里面分别对每一个字符串进行操作,确实要解密的字符串第一个字符并没有进行转换操作,这正好解释了为什么前面发现长度差 1 位的原因

// 先拎出来第一个循环


// 涉及的变量

t=""

n=e[0];  // 标志位n : 字符串第一个字符的ASCII码对应值

i  =  1;

算法公式(A):


t  =  fromCharCode(e[i]  ^  i  +  n  &  127);

为了有效防止蒙圈,根据运算符优先级,用括号框起来便于理解


t  =  fromCharCode(e[i]  ^  (  i  +  (  n  &  127  )  )  );

拆解:
(n & 127) 目的是保证字符在 ASCII 之内,暂时忽略细节不考虑溢出,简化成 n;
e[i] 看作是密文
c = String.chaCodeAt(t);

那么 c 可看作原文得到:

c = e[i] ^ ( i + n );

用人话说就是
原文 = 密文 ^ (i + “标志位”);

根据异或的特性 IF a ^ b = c THEN a ^ c = b

密文 = 原文 ^ (i + “标志位”);

进一步分析:i 在密文和原文之间,存在一对一的偏移关系,举例说:i=3, 密文[3] => 明文[3] ,因此暂且认为 (i+ “标志位”) 是个定值。
从源代码中找了两段字符,测试了下输出结果,参照下图,注意看 offset,和 offset+i,

加密字符串为 &N[mOFC" 开头字母 & 的 ASCII 值就是 38,原文就是异或了这个 offseti 的值得出 c1,原文的 ASCII 值 比如 N(78) 偏移 (39) 得到 i(105) 。

那么到此我们是有望推导出加密算法的。

显然第一个“标志位”是随机的,那么就意味着我们加密后的结果也是会非常多的。

当然好消息是要破解这个加密,找到我们想找的加密信息,不用算法也可以,因为我们已经确认了密文的结构。

比如说:密文是:This(ASCII 值:84,104,105,115)。甭管标志位怎么随机,把密文每个字符转成 ASCII 值[x1,x2,x3,x4,x5]。总有:x3-x2=104-84+1=21; x4-x3=105-104+1=2。

写个脚本穷举一下就出来了。


但是,但是,我想要加密算法。

那么就接着推吧

首先要来一个“标志位”。
ASCII 中有不少控制字符是显示不出来的,还有双引号什么的,所以不要直接和 ASCII 码死磕,把他们先撇过去,挑一些正常的。

var  charset  =  [

"!",  "#",  "$",  "%",  "&",  "'",  "(",  ")",  "*",  "+",  ",",  "-",

".",  "/",  "0",  "1",  "2",  "3",  "4",  "5",  "6",  "7",  "8",  "9",

":",  ";",  "<",  "=",  ">",  "?",  "@",  "A",  "B",  "C",  "D",  "E",

"F",  "G",  "H",  "I",  "J",  "K",  "L",  "M",  "N",  "O",  "P",  "Q",

"R",  "S",  "T",  "U",  "V",  "W",  "X",  "Y",  "Z",  "[",  "\\",  "]",

"^",  "_",  "`",  "a",  "b",  "c",  "d",  "e",  "f",  "g",  "h",  "i",

"j",  "k",  "l",  "m",  "n",  "o",  "p",  "q",  "r",  "s",  "t",  "u",

"v",  "w",  "x",  "y",  "z",  "{",  "|",  "}",  "~",

];

// 第一步先随机一个字符串

var  rand  =  Math.ceil(Math.random()  *  (0  -  charset.length  +  1)  +  charset.length  -  1);

// 接下来逆推公式

var  t  =  charset[rand];

var  n  =  t.charCodeAt(0);

for  (var  i  =  0;  i  <  e.length;  ++i)  {

var  a1  =  e.charCodeAt(i);  //把字母拿出来

var  a2  =  (i  +  1)  +  n  &  127;  // 偏移量加 1

var  b1  =  a1  ^  a2;  // a^b=c => a=b^c;

t  +=  String.fromCharCode(b1);

}

return  t;

找几个数据试试看:


        log_info_all("Hello World!");

        log_info_all("This is a demo");

结果:

然后就看到了这两句话:

好的吧。

那我就不搞了。

  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖 • 1 关注
  • CKFinder
    1 引用
  • 破解
    21 引用 • 41 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 55 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 684 关注
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 692 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 230 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 7 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 45 关注
  • 反馈

    Communication channel for makers and users.

    123 引用 • 906 回帖 • 193 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    4 引用 • 55 回帖 • 12 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 593 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 40 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 595 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 3 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 7 关注
  • 996
    13 引用 • 200 回帖 • 2 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖 • 1 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 427 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 426 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    5 引用 • 15 回帖 • 217 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    103 引用 • 294 回帖
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    148 引用 • 257 回帖
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    123 引用 • 168 回帖
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 43 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    21 引用 • 58 回帖
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    91 引用 • 751 回帖