ckFinder - это очень хороший файл менеджер, удобный прежде всего тем, что полностью интегрируется с моим любимым wysiwyg редактором ckEditor. Закачать фото, нарезать его, переименовать, удалить и т.д., словом полный комплект из-под коробки. Все в нем отлично, но эта надоедливая надпись This is the DEMO version of CKFinder. Please visit the CKFinder web site to obtain a valid license мешает жить). При этом ckFinder совсем не ограничивает функционал менеджера в демо версии, т.е. единственный минус - эта надпись.

Да, вы правильно поняли. Продукт платный. И стоит он ни много ни мало 59$ для одного сайта. В ранних версиях ckfinder была кнопка закрытия данной надписи, надпись конечно появлялась, но на время работы о ней можно было забыть. В свежей версии, которую я скачал с офсайта, такою кнопку не нашел. Значит пришла пора удалить надоедливую надпись самим.

Для начала я деобфусцировал ckfinder.js файл.  Для этой цели очень удобен http://jsbeautifier.org/ . Код стал более читабельным, но от этого не стал более понятным. После нескольких часов разбора кода я понял, как работает их система защиты. Она многоуровневая. К примеру в тексте фраза  This is the DEMO version of CKFinder лежит в таком виде \x54\x68\x69\163\040\151\163\040\x74\x68\145\x20\104\x45\x4d\x4f\x20\166\x65\x72\x73\151\x6f\x6e\040\x6f\146\040\103\x4b\x46\x69\156\x64\x65\x72\x2e\x20.  Сперва я подумал, что наверняка она зашифрована. Но нет, это простая замена символов их 16-тиричным представлением. Если сделать так 





alert('\x54\x68\x69\163\040\151\163\040\')

то можно увидеть исходный текст. Однако свое дело это псевдошифрование делает, тупой поиск  по файлу, по сочетанию слов, ничего не даст. Кроме того, где-то в недрах этого файла я встречал проверку на то, содержит ли данная строчка в n-ом символе k-ое значение. Опять же, просто удалить сообщение не получится.

Тогда я решил исследовать серверную часть скриптов. Она написана на php. Начал я с файла config.php. В нем вводится два интересных нам значения





$config['LicenseName'] = $_SERVER['HTTP_HOST'];
$config['LicenseKey'] = '';

LicenseName - это имя домена. Сюда вы сразу можете вписать $_SERVER['HTTP_HOST'];

С LicenseKey посложнее. Он генерируется по определенному алгоритму и напрямую зависит от длины  LicenseName. Заходя вперед скажу, что зависят там всего два символа.

Итак далее. Я воспользовался функцией notepad++ поиска по файлам. Искал я любые упоминания LicenseKey. И я их нашел. Одно из них было в файле ckfinder\core\connector\php\php5\CommandHandler\Init.php





 $_lc = $_config->getLicenseKey() . '                                  ' ;
 if ( 1 == ( strpos( CKFINDER_CHARS, $_lc[0] ) % 5 ) )//CKFINDER_CHARS = 123456789ABCDEFGHJKLMNPQRSTUVWXYZ 
   $_ln = $_config->getLicenseName() ;
 $_oConnInfo->addAttribute("s", $_ln);
 $_oConnInfo->addAttribute("c", trim( $_lc[11] . $_lc[0] . $_lc [8] . $_lc[12] . $_lc[26] . $_lc[2] . $_lc[3] . $_lc[25] . $_lc[1] ));

Как мы можем видеть, здесь присутствует первая проверка на валидность введенного ключа. Его первый символ должен находиться в  CKFINDER_CHARS на позициях, остаток от деления которых на 5 будет равен 1. Т.е. это позиции 1,6,11 и т.д.

Отсюда вытекает первое правило: самый первый символ в ключе должен быть одним из множества [2,7,C,H,N,T,X]. Первый кирпичик будущего кейгена готов.  

Далее мы видим, что из ключа используются лишь 11,0,8,12,26,2,3,25,1 символы. Это значит, что остальные символы могут быть абсолютно любыми. Еще это значит, что всего в ключе должно быть минимум 27 символов, а в хеше 9.  

К большому сожалению дальше след обрывается. И этот хеш ключа отправляется на клиент, где и происходят остальные проверки. Проще говоря мы снова вернулись в ckfinder.js

После 3-х чашек кофе на свет проявились несколько проверочных строчек. Приведу их все.





if (1 == a.bs.indexOf(a.bF.substr(1, 1)) % 5 && window.top[a.hf + "\x63\141\164\151\157\x6e"][a.hg + "\163\164"].toLowerCase().replace(a.jG, '') != a.ed.replace(a.jG, '') || a.bF.substr(3, 1) != a.bs.substr((a.bs.indexOf(a.bF.substr(0, 1)) + a.bs.indexOf(a.bF.substr(2, 1))) * 9 % (a.bs.length - 1), 1)) 


if (!Q && (!p || a.bs.indexOf(p) % 8 < 3)) 

if (a.bF && 1 == a.bs.indexOf(a.bF.substr(1, 1)) % 5 && I.toLowerCase().replace(a.jG, '') != a.ed.replace(a.jG, '') || a.bF && a.bF.substr(3, 1) != a.bs.substr((a.bs.indexOf(a.bF.substr(0, 1)) + a.bs.indexOf(a.bF.substr(2, 1))) * 9 % (a.bs.length - 1), 1)) 

function r(E) {
            return a.bs.substr(E * 9 % (2 << 4), 1);
}; 
var F = [a.bF.substr(6, 1), a.bF.substr(8, 1)];
if (!!a.ed && F[0] != r(a.ed.length + a.bs.indexOf(F[1]))) u(E);  

Больше всего мне запомнилась эта конструкция

 window.top[a.hf + "\x63\141\164\151\157\x6e"][a.hg + "\163\164"].toLowerCase().replace(a.jG, '').

Где-то выше в коде





 a.jG = new window["\122\x65\147\x45\x78\x70"]("\136\167\167\x77\134\x2e");

Вскрытие показало что window.top[a.hf + "\x63\141\164\151\157\x6e"][a.hg + "\163\164"] это window.top.location.host, а  window["\122\x65\147\x45\x78\x70"]("\136\167\167\x77\134\x2e") это RegExp('^www\.');

Просто берется текущий host, у него отрезается www, и значение сравнивается с присланным LicenseName (помните его? ), с которым проделаны те же манипуляции.

Далее я просто подбирал сочетания символов, которые подходили бы под все условия. Благо пересечений условий практически нет.  На результате я построил таблицу зависимостей, в которой лишь 6 и 8 символы зависимы от длины домена.

Версия исследуемого скрипта 2.0.2. Я нисколько не сомневаюсь, что данный алгоритм меняется от версии к версии, и ощутимых потерь это статьей создателям скрипта я не принесу. И даже более того, если вы сами разберете, как функционирует данная защита, то без труда разработаете аналогичную для своей системы. 

Если вы считаете, что данная статья выходит за рамки морали или этики, напишите об этом в комментариях. Посмотрим, что можно сделать. Желаю удачи. 

Вот обещанный  кейген: 

Введите имя вашего домена(без http:// и www.)

 

Куда ввести этот ключ вы надеюсь догадались)

Вообще, ломать программы дело не самое благородное. Тем более, что есть куча бесплатных альтернатив, к примеру kcfinder

UPD:

Кейген обновлен для версии ckFinder v.2.2.1

Оставлять комментарии могут только зарегистрированные пользователи

Комментарии  

Мишка
# Мишка 28.03.2011 08:29
До того как сам попытался убрать эту надпись думал, что в открытом исходном коде все легко можно найти и исправить. Вот же запрятали. Спасибо
JoHn
# JoHn 06.04.2011 20:05
Огрооомнейшее спасибо. Ну просто дико выручил. Но не мог бы ты отправить данный генератор мне на почту ? Очень прошу, что бы постоянно сюда не лезть.
Leroy
# Leroy 06.04.2011 20:49
Дружище, мне то как раз таки выгодно чтобы Вы сюда лазили) Потому и сделал его через AJAX. А вообще там всего 2 символа меняются, можно тупо составить табличку для доменов от 2 до 30.
JoHn
# JoHn 06.04.2011 22:27
Поделись пожалуйста кодом. Сам бы уже всё составил, так времени в обрез. Скинь хоть тайком... :)
Trellvana
# Trellvana 26.07.2014 06:23
пипец у некоторых товарищей наглость зашкаливает
hallboy3
# hallboy3 09.04.2011 02:01
Спасибо :)
Natreex
# Natreex 28.04.2011 06:31
Спасибо огромное!
Daaarked
# Daaarked 28.04.2011 14:16
Так волшебством здесь деляться?
DarkedAngel
# DarkedAngel 28.04.2011 16:20
Тогда я поделюсь))))

ищем строчку:
window.top[a.hf+"\x63\x61\164\151\x6f\156"][a.hg+"\163\x74"].toLowerCase().replace(a.jG,'')


меняем на
'что-то'.toLowerCase().replace(a.jG,'')


Т.е. меняем проверку с домена на проверку определенной строки. Далее для этого "что-то" получаем ключ, и вписываем в конфиг и радуемся)))

$c] = 'что-то';
$config['LicenseKey'] = 'ключ сверху';
DarkedAngel
# DarkedAngel 28.04.2011 16:35
И еще, чтобы убрать надпись слева внизу:

ищем:
window.top[a.hf+"\143\141\x74\x69\x6f\x6e"][a.hg+"\163\164"].toLowerCase().replace(a.jG,'')


меняем также на
'что-то'.toLowerCase().replace(a.jG,'')

Leroy
# Leroy 28.04.2011 16:40
Темный стал Ангелом) Спасибо у меня ума не хватило найти где и что удалить чтобы заработало. Тока кейген написал
DarkedAngel
# DarkedAngel 28.04.2011 23:38
Дело не в том что что-то удалить или добавить, дело в том, что у меня эта хрень используется в движке для сайтов.

Киген твой супер, в принципе я тоже могу написать такой-же, однако есть три проблемы:
- время;
- при создании каждого нового сайта мне лазить сюда и кигенить ключ - не айс;
- как решить проблему альянсов если domen.ru и домен.рф - один и тот-же сайт, а finder используется в клиентской части.

Есть еще минусы:
- эта статья пока что единственная.
- нет у меня своего блога. Хотя уже пора заводить.
- твой киген не работает для альянсов (можно считать конечно и минусом CKSource).

Ты строка которую ты указал не относится к этой проблеме.
Leroy
# Leroy 29.04.2011 00:53
Так то я посмотрел по логам, какой-то шустрый товарищ просто составил табличку от 3 до 20-ти значного домена. Такой массивчик загнал в функцию вот тебе и кейген.


function getkey($domain){
$a = array(3=>'2V11EFGH1JK11NOPQRSTUVWXY41',
4=>'2U11EFGH1JK11NOPQRSTUVWXY41',
5=>'2T11EFGH1JK11NOPQRSTUVWXY41');
return $a[strlen($domain)];
}
$config['LicenseKey'] = getkey($_SERVER['HTTP_HOST']);


примерно так

DarkerAngel
# DarkerAngel 29.04.2011 02:22
А ларчик просто открывался...
$config['LicenseName'] = $_SERVER['HTTP_HOST'];
$str_dom = strlen($_SERVER['HTTP_HOST']);
$characters = "ZYXWVUTSRQPNMLKJHGFEDCBA987654321";
$config['LicenseKey'] = "2".$characters[$str_dom % 33 + (int)($str_dom / 33)]."11EFGH1JK11NOPQRSTUVWXY41";


Кстати, ты говорил что 2 знака зависят от длины... Я вижу что только один...

Кстати, почему уведомления не приходят на почту?
Leroy
# Leroy 29.04.2011 02:26
потому что двиг самописный =) и много чего еще не дописано)
да чето сам посмотрел тоже один знак тока зависит.
DarkerAngel
# DarkerAngel 29.04.2011 02:23
P.S. Можешь снести последний пост)))
иван
# иван 07.05.2011 18:55
привет, а каким образом можно найти и изменить нижню строчку СКЕДИТОРА (которая статусная - в которой пишется просто название файла, размер и дата?



хочу изменить ету вещь на путь до файла на сервере чтобы было http://www.server.ru/ckeditor/files/и тут уже что-то



спасибо
Leroy
# Leroy 10.05.2011 17:29
какие файлы в ckeditor'e?
иван
# иван 11.05.2011 02:13
я нашел строчку в файле ckfinder.js

выглядит вот так

-----------------------------------------------------------------------

function q(s){return ''+s.name+' ('+s.size+'KB, '+s.dateF+')';}

-----------------------------------------------------------------------

вот в етой строчке перед s.name я хочу попытаться прописать путь до файла

не знаю как это сделать :(



то есть если файл лежит на /home/.....public_html/файл

то я хочу в строчке видеть http://www.site.com/файл
Leroy
# Leroy 11.05.2011 04:58
путь до файла содержится в куках. Поэтому можно попробовать заменить найденную вами функцию на
 function q(s) {
var path = a.basePath+decodeURIComponent(i.getCookie('CKFinder_Path')).split(':').slice(0,-1).join('');
return '' + path+s.name + ' (' + s.size + 'KB, ' + s.dateF + ')';
};


я проверил все ок работает, однако не тестил на больших путях.

Ко тому же способ все таки ламерский, брать путь из куков не правильно. Путь лежит где-то наверху, и достает его метод объекта Folder - getPath(), однако там черт ногу сломает, и я так и не понял как его нормально вызвать.
Leroy
# Leroy 11.05.2011 05:22
однако можно сохранить путь куда-нибудь еще просто во временную переменную находим строчку

 this.oW('beforeSelectFolder', D, function J(F, G) {


и после нее делаем что-то вроде этого

a.myCurrentFolder = G.folder.type+G.folder.getPath()


а уже наша q(s) будет выглядеть так

function q(s) { 
var path =a.basePath + a.myCurrentFolder;
return '' + path+s.name + ' (' + s.size + 'KB, ' + s.dateF + ')';
};


хотя готов поспорить что объект folder и так виден через какую-то глобалку
прохожий
# прохожий 16.06.2011 00:00
А еще есть http://elrte.org/ru/elfinder/demo - бесплатен и легко интегрируется с ckeditor
dani_jug
# dani_jug 25.08.2011 22:07
нет коннектора для asp.net и нет описания форматов сообщение коннектора что-б самому его реализовать. Ставить тесты что-б узнать что реализовывать - просто лениво. Раньше юзал и редактор elrte и файлбраузер их, но при переходе на asp.net уже не оно.
dani_jug
# dani_jug 25.08.2011 22:04
Благодарочка, часа два пытался выпилить эту надпись сам(казалось что проще будет просто стилями ее закрасить, но таймауты и асинхронность не давали толком отловить появление елемента). В итоге случайно наткнулся на вашу статью и это решило проблему. И DarkerAngel тоже спасибо т.к. мне также для цмс.
Levgenij
# Levgenij 17.09.2011 20:03
Автор монстр! Спасибо большое за то, что поделился и так подробно! Сохранил людям не один час жизни! Еще раз спасибо!!
Михаил
# Михаил 20.09.2011 18:11
На этом сайте я ввожу fsi-zn.ru выдает ключ: 2S11EFGH1JK11NOPQRSTUVWXY41 после ввожу xdan.ru и тоже выдает ключ: 2Q11EFGH1JK11NOPQRSTUVWXY41 НЕ РАБОТАЕТ ЧТО ЛИ?
Михаил
# Михаил 20.09.2011 18:13
Прошу прощения. Это я не внимателен. Все у Вас генерирует. Но почему то у меня выдает сообщение в менеджере: This is the DEMO version of CKFinder. Please visit the CKFinder web site to obtain a valid license. Скорей всего алгоритм поменялся генерации кода?
Alexander
# Alexander 23.09.2011 06:48
А что делать если после взлома появляется строка: "Product license has expired. Please visit the CKFinder web site to obtain a valid license." Версия: 2.1 Они по ходу ещё и на дату проверяют как-то.
Alexey
# Alexey 08.12.2011 18:36
После ввода сгенерированного ключа, появилась какая же табличка.



Нашел вот такие строчки в js файле




H = "\120\154\145\141\163\145\x20\x76\x69\x73\x69\164\x20\x74\150\145\040\074\141\x20\150\x72\145\146\x3d\x27\150\x74\164\160\x3a\x2f\x2f\x63\x6b\x66\151\156\x64\x65\x72\056\143\x6f\x6d\047\x20\x74\x61\x72\x67\x65\164\075\047\x5f\142\154\141\156\x6b\x27\x3e\103\113\106\x69\156\x64\145\162\x20\x77\x65\142\x20\163\151\x74\x65\074\057\141\076\x20\x74\x6f\040\157\142\164\x61\151\156\x20\x61\040\x76\141\154\x69\144\x20\154\x69\143\145\156\x73\x65\056",
I = "\124\x68\151\x73\x20\x69\163\040\164\x68\145\040\104\x45\x4d\x4f\x20\166\145\x72\163\151\157\x6e\x20\157\146\040\x43\x4b\x46\151\156\144\145\162\056\040" + H,
//J = "\x50\x72\157\x64\x75\143\164\040\x6c\151\143\145\156\163\145\x20\150\141\x73\x20\x65\x78\160\x69\162\145\144\056\040" + H;




Переменной J надо присвоить пустое значение. Только J!!! Тк функция возвращает I для последующей проверки.
Игорь
# Игорь 27.09.2011 17:33
Да тоже самое появляется. Как решить эту задачу? Спаисбо за внимание! =)
Алексей
# Алексей 29.09.2011 18:36
А у меня это не сработало((( у меня более новая версия, подскажите что сделать
Алексей
# Алексей 29.09.2011 19:50
Слева внизу ушла надпись а вверху осталась
Oleg
# Oleg 05.10.2011 22:27
visibility:hidden; v CSS ;)
Александр
# Александр 06.10.2011 16:54
Помогите разобраться. ничего не работает из этих способов. последня версия с сайта
Алексей
# Алексей 08.10.2011 13:10
не помогло visibility:hidden;
Александр
# Александр 08.10.2011 13:11
Статья устарела. используй другой менеджер. он даже лучше платного на много
FreeStyler
# FreeStyler 18.10.2011 21:44
Will there be a new/updated hack for CKFinder version 2.1?
Ifgeny
# Ifgeny 19.10.2011 01:17
Добрый вечер.

Решим проблему с ненавистной надписью, решил порыться в инете и напоролся на этот топик.

По делу. Мне удалось решить проблему немного проще. В файле "ckfinder.js" нашел текст "sidebar_wrapper", собсно это то самое поле с папками слева. Не важно. И после этого вставил неразрывный пробел чтобы убрать блок с надписью. А точнее, заменил

'+u.html+'


на

'+u.html+' 


Ненавистная надпись больше не появляется. Почему после этого не появляется надпись, я думаю все поняли ;)

Спасибо за внимание.
Ifgeny
# Ifgeny 19.10.2011 01:20
В предыдущем посте наблюдается проблема со скобками. Попытаюсь провести альтернативу:

(div id="sidebar_wrapper" class="wrapper")'+u.html+'%nbsp;(/div)

P.S.Круглые скобки заменить на угольные, процент заменить на амперсанд.
atmta
# atmta 19.10.2011 14:12
Ifgeny, Молодец!

Осталось убрать надпись из основного окна.
Ifgeny
# Ifgeny 19.10.2011 14:21
atmta, для знающих CSS это не составит труда.

Смотрим тот же "ckfinder.js". Наше ненавистное сообщение выводится в теге H4. Помденяю стиль тега:

(h4 class='message_content' style='display:none;')(/h4)
atmta
# atmta 19.10.2011 14:38
Надо взять на заметку перед тем как писать, проверять, не ответили ли мне :)

И html-строчка ещё съелась (см мой коммент ниже).

В любом случае, спасибо.

Странно, что они не проверяют контрольную сумму js-файла.
atmta
# atmta 19.10.2011 14:35
По идее можно так сделать:

В этом же файле есть



Добавляем style='display:none'

Непонятно только, единственная ли эта надпись появляется в этом элементе или есть какие-то полезные.
Ifgeny
# Ifgeny 21.10.2011 18:42
Пользуюсь CKeditor+CKFinder уже больше года, прилепил к четырем сайтам. При разработке первых трех заказчик оплачивал лицензию фреймворков. На четвертом стоит ломанный CKFinder. За год работы с фреймворком дополнительных окошек, как полезных так и ненужных, моей командой не обнаружено.
Денис
# Денис 06.12.2011 03:21
Проще даже в kama.css добавить display:none (вместо block) для message_content
TVOJUMAT
# TVOJUMAT 21.12.2011 00:28
проблема решается проще - в строке 5972 (примерно) есть такая конструкция



p = a.bF.substr(7, 1);



она проверяет (после всех трансформаций) 25-й символ, а он в приведенном сверху варианте кейгена равен 4-м.



в строке 6166 (примерно идет проверка на срок лицензии)



if (!S && (!p || a.bs.indexOf(p) % 8 < 4)) {



в кейгене надо 4-ре поменять на что-нить поболее - типа так



$config['LicenseKey'] = "2".$characters[$str_dom % 33 + (int)($str_dom / 33)]."11EFGH1JK11NOPQRSTUVWXY51"; - 5-ку все увидели предпоследнюю? вот и все решение.
DaySiS
# DaySiS 31.12.2011 21:04
Народ!

А не проще ли найти тот DIV в котором выводится эта злобная надпись и просто поставить ему style display:none ???
aryo
# aryo 17.01.2012 15:00
TVOJUMAT,DarkerAngel,Leroy спасибище вам огромное! труд огромный!
vovaccc
# vovaccc 28.01.2012 23:39
$config['LicenseName'] = $_SERVER['HTTP_HOST'];

$str_dom = strlen($_SERVER['HTTP_HOST']);

$characters = "ZYXWVUTSRQPNMLKJHGFEDCBA987654321";

$config['LicenseKey'] = "2".$characters[$str_dom % 33 + (int)($str_dom /

33)]."11EFGH1JK11NOPQRSTUVWXY61";
grain
# grain 04.02.2012 20:02
спасибо
valxo
# valxo 10.02.2012 04:31
Спасобо, vovaccc!
Глеб
# Глеб 29.02.2012 00:57
Огромное спасибо!
Azad
# Azad 17.06.2012 08:15
Здрасте!

на новый версии "CKEditor 3.6.3, released on 17 April 2012"

я нижний DEMO слова смог убрать вот его строка



\124\x68\x69\163\x20\x69\x73\x20\x74\x68\145\x20\104\105\x4d\x4f\x20\x76\145\x72\163\151\157\156\040\x6f\x66\x20\x43\x4b\106\151\156\x64\145\x72\x2e\x20\x50\x6c\145\141\x73\x65\040\x76\151\x73\151\x74\040\164\x68\x65\x20\x3c\141\040\150\162\145\146\x3d\047\x68\x74\x74\x70\x3a\057\x2f\x63\153\146\151\x6e\x64\145\162\056\143\157\155\x27\040\x74\x61\162\x67\x65\164\075\x27\137\x62\154\141\156\x6b\047\x3e\103\x4b\x46\x69\156\x64\x65\162\x20\x77\x65\x62\x20\163\x69\x74\145\074\x2f\141\x3e\040\164\x6f\040\157\x62\x74\141\151\156\x20\x61\040\166\141\154\x69\144\x20\x6c\151\143\x65\x6e\163\145\x2e"+q,s=p+"\103\113\106\x69\156\x64\145\x72\x20\x44\x65\166\x65\154\x6f\x70\145\162\x20\x4c\151\x63\145\x6e\x73\145\074\142\x72\x2f\076\x4c\x69\x63\145\x6e\x73\145\144\040\x74\x6f\072\040



а верхний не как не смог убрать оттуда! покажите пожалуйста где это строка
kandiral
# kandiral 02.07.2012 16:21

if(isset($_REQUEST['host'])){
$ed=trim($_REQUEST['host']);
define('CKFINDER_CHARS', '123456789ABCDEFGHJKLMNPQRSTUVWXYZ');
$bs=explode(' ','1 2 3 4 5 6 7 8 9 A B C D E F G H J K L M N P Q R S T U V W X Y Z');
mt_srand(time()+(double)microtime()*1000000);
$ak0_1=explode(' ','2 7 C H N T Y');
$k0_1=$ak0_1[mt_rand(0,count($ak0_1)-1)];
$pos = 35;
while($pos>(strlen(CKFINDER_CHARS)-1)){
$k11_0=$bs[mt_rand(0,count($bs)-1)];
$k8_2=$bs[mt_rand(0,count($bs)-1)];
$pos = (strpos( CKFINDER_CHARS, $k11_0 )+strpos( CKFINDER_CHARS, $k8_2 ))*9%(strlen(CKFINDER_CHARS)-1);
}
$k12_3=$bs[$pos];
$pos = 35;
while($pos>(strlen(CKFINDER_CHARS)-1)){
$k1_8=$bs[mt_rand(0,count($bs)-1)];
$pos=(strpos( CKFINDER_CHARS, $k1_8 )+strlen($ed))*9%(2<<4);
}
$k3_6=$bs[$pos];
$ak0_1=explode(' ','6 7 8 E F G N P Q W X Y');
$k25_7=$ak0_1[mt_rand(0,count($ak0_1)-1)];
$key=$k0_1.$k1_8.'0'.$k3_6.'0000'.$k8_2.'00'.$k11_0.$k12_3.'000000000000'.$k25_7.'0';
echo "key: $key";
}
Leroy
# Leroy 02.07.2012 17:40
Отлично! Работает! Спасибо! Обновил кейген
Евгений
# Евгений 17.10.2012 03:33
у меня никак не убирается эта строчка

This is the DEMO version of CKFinder. Please visit the CKFinder web site to obtain a valid license.
Leroy
# Leroy 17.10.2012 12:58
может какие-нибудь подробности?!
Дмитрий
# Дмитрий 10.12.2012 18:14
Если можно, сделай что-бы кейген отдавал результат не в алерт, жутко не удобно. Выведи например в текстовое поле или в консоль. Спасибо.
Роман
# Роман 07.03.2013 08:47
На сколько я понял нужно вписать ключ[$config['LicenseName'] = $_SERVER['HTTP_HOST'];

$config['LicenseKey'] = 'сюда';] и не чего удалять больше не надо?
dmsh
# dmsh 12.06.2013 19:31
Странно. Еще в феврале мне удалось получить "заветную фразу". Все работало нормально.

А вот сейчас - надо было поставить еще один сайт. Все сделал как раньше, но теперь ckfinder работает очень странно. Через раз. Именно так. Нажимаешь на одну и ту-же папку - первое нажатие - сообщение о демо-режиме выскакивает, второе нажатие на ту-же папку - не выскакивает. Третье нажатие - опять сообщение! И т.д. - строго через раз.

Очевидно, что-то изменилось за это время в генераторе, потому как попытка получить код на уже работающий домен выдала код, отличающийся от того, который был получен для этого-же домена в феврале.

Подскажите, что делать?
Leroy
# Leroy 12.06.2013 21:56
с февраля ничего не менял, очевидно дело в файндере
Almina
# Almina 22.10.2013 02:46
Выводит надпись

This is the DEMO version of CKFinder. Please visit the CKFinder web site to obtain a valid license.



а значит в ckfinder.js

меняем



на





Вот как-то так ...)... не особо мудрствуя над кодом.
Vensdale
# Vensdale 01.02.2014 07:09
Almina

А где сам код?

Так и я могу написать)
Dragomri
# Dragomri 03.03.2014 16:47
Обновите статью для версии 2.4.1 пожалуйста :)
Dragomri
# Dragomri 03.03.2014 17:10
$config['LicenseKey'] = "2".$characters[$str_dom % 33 + (int)($str_dom/33)]."11EFGH1JK11NOPQRSTUVWXY81";

Поменял в конце на 81 и перестала ошибка об Expired появляться.
nikolas
# nikolas 16.03.2014 02:05
this worked for the current latest version of ckfinder 2.4



$config['LicenseName'] = $_SERVER['HTTP_HOST'];

$str_dom = strlen($_SERVER['HTTP_HOST']);

$characters = "ZYXWVUTSRQPNMLKJHGFEDCBA987654321";

$config['LicenseKey'] = "2".$characters[$str_dom % 33 + (int)($str_dom/33)]."11EFGH1JK11NOPQRSTUVWXY81";
Rubaka88
# Rubaka88 19.03.2014 03:22
rebjata, a etat ckfinder v tihorja njeotprovlajet kakiji ta zaprosi na ihnej server? toestj, eslji u menja etat redaktor budet rabotatj v CMS (publichna nedostupen) .. idut li kakiji ta request-i kuda to ..



prosta bajusj sto ani menja patom zasudjat, sto vot izpoljzuju nelegaljno ..



mozet kto-to sto-to videl!?



spasibo
Leroy
# Leroy 19.03.2014 17:37
в коде ничего такого не видел. по идее это было бы зловредным кодом. Весь код открыт, никаких левых обращений через js не происходит. php тоже никуда не лазит. А в свою ксм можно встроить бесплатный аналог
thecatontheflat
# thecatontheflat 19.03.2014 19:45
Спасибо!
Sasha
# Sasha 15.06.2014 00:39
Respect!



Хорошее расследование. Потратил чашку кофе на чтение)))
Дмитрий
# Дмитрий 28.07.2014 00:13
Товарищи, для тех, кто нуждается в ответе на данный вопрос:



Для актуальной на момент написания комментария версии CKFinder 2.4.1



Чтобы убрать надпись из левой колонки внизу, в файле config.php ставим текущие параметры:


$config['LicenseName'] = $_SERVER['HTTP_HOST'];
$str_dom = strlen($_SERVER['HTTP_HOST']);
$characters = "ZYXWVUTSRQPNMLKJHGFEDCBA987654321";
$config['LicenseKey'] = "2".$characters[$str_dom % 33 + (int)($str_dom /
33)]."11EFGH1JK11NOPQRSTUVWXY61";



А чтобы убрать после этого надпись в правой колонке сверху, заходим в: ckfinder/skins/kama/app.css и находим следующий класс:


#files_view.files_message .message_content

И вместо display:block; что стоит там, ставим свой display:none; Выглядеть это будет так:


#files_view.files_message .message_content{display:none;}



Надеюсь, это поможет кому-то :)

Отдельное спасибо автору статьи :)
SerLee
# SerLee 04.09.2014 02:49
Спасибо, все сработало!
Cywiluga
# Cywiluga 02.08.2014 12:09
how to crack ckfinder 2.4.1, i do steps above but it is working
Валера
# Валера 15.01.2015 12:20
Кейген перестал работать. TypeError: $(...) is null Kak-ubrat-nadpis-Demo-v-ckFinder.html:377:30
xDan xdanru
# xDan xdanru 15.01.2015 13:45
Цитирую Валера:
Кейген перестал работать. TypeError: $(...) is null Kak-ubrat-nadpis-Demo-v-ckFinder.html:377:30

Исправил, спасибо
Sur
# Sur 21.03.2015 10:28
поставил для версии 2.2.2.
работает ))
респект автору
======
у меня тож в движке, и надо штук 20 ключей даж ща
но до того обленился, писать,
что лучше закладку поставлю на эту страничку
и буду по надобности сюда заходить.
Sur
# Sur 22.03.2015 19:52
эх Б
надпись та убралась, а вот платные функции не стали доступны (
Lexx
# Lexx 17.07.2015 19:52
Пора обновить кейген. Вышел CKFinder 3 :)
Vaflan
# Vaflan 11.08.2015 14:15
Для версии 2.5 этот кейген подходит, только нужно указать первую букву A и предпоследнюю G 8)
Luis
# Luis 25.11.2015 16:56
Thanks this works to version 2.5.1 too. I hope you get this to version 3.
Eyal
# Eyal 16.10.2015 05:02
What about ckfinder 3 ?
Erhan
# Erhan 05.11.2015 00:09
Hello. ckeditor + ckfinder good work thanks for lisans key. live demo test editor
http://internetevreni.com/proje/konuac.php?fid=1&did=1

if need keygen file my mail for help.
vkj
# vkj 19.02.2016 20:17
Привет ты попытаться декодировать CKFINDER версии 3 ?
sghr
# sghr 15.03.2016 18:11
ckfinder 3.3 out today.... how to crack it ?
Nate
# Nate 03.04.2016 23:08
Version 3 is now released and there's not much for PHP init file.

I think every code is now in ckfinder.js

Before, I use alert() to see the code.

But, this version seems even harder.

Anyone got any idea?
Dragomir
# Dragomir 01.07.2016 17:08
$config['LicenseName'] = '';
$config['LicenseKey'] = '';
$config['LicenseName'] = $_SERVER['HTTP_HOST'];
$str_dom = strlen($_SERVER['HTTP_HOST']);
$characters = "ZYXWVUTSRQPNMLKJHGFEDCBA987654321";
$config['LicenseKey'] = "2".$characters[$str_dom % 33 + (int)($str_dom/33)]."11EFGH1JK11NOPQRSTUVWXY81";

still works for latest 2.x
spasibo avtoru :)
Lexx
# Lexx 16.07.2016 00:43
Есть решение на websnegovik.com/ сайте: websnegovik.com
a-l-e-x
# a-l-e-x 11.10.2016 10:07
Спасибо. Хорошая статья, помогла в написание кейгена для версии 3.1
veoricco
# veoricco 19.11.2016 15:25
Поделитесь, пожалуйста, для 3.1!
kaokao
# kaokao 07.07.2022 16:04
Pg slot สล็อต เว็บตรง เว็บสล็อตออนไลน์ แตกง่ายจ่ายจริง แจกหนัก แตกหนัง กับ เว็บ pg-slot.game ของเรา ที่กำลังมาแรง แซงเว็บเกมอันดับต้น ๆ ไปหมดแล้ว สมัครสมาชิกได้แล้ววันนี้
prakman777
# prakman777 22.08.2022 06:14
สล็อตเว็บตรงที่ดีที่สุด แตกหนัก จ่ายจริงไม่มีโกง เราเป็นผู้นำด้านเกมเดิมพันออนไลน์ที่มีผู้เล่นมากที ่สุด มีระบบหลังบ้านบริการตลอด 24 ชั่วโมง อีกทั้งยังจ่ายเงินให้กับผู้เล่นมาแล้วกว่า 100000 ยูส มาสนุกกับเราและลุ้นเงินรางวัลจากการเดิมพันไปพร้อมๆ กันกับ pg
https://xopgth.com/
prakman777
# prakman777 10.09.2022 08:19
ทดลองเล่นเกมสล็อตก่อนใครที่ สล็อตเว็บตรงที่ดีที่สุด ทดลองเล่นสล็อต
prakman777
# prakman777 10.09.2022 08:20
สล็อตเว็บตรงที่ดีที่สุด แตกหนัก slotxo
prakman777
# prakman777 10.09.2022 08:21
เกมเดิมพันออนไลน์ที่มีผู้เล่นมากที่สุด มีระบบหลังบ้านบริการตลอด 24 ชั่วโมง megagame
prakman777
# prakman777 10.09.2022 08:24
มาสนุกกับเราและลุ้นเงินรางวัลจากการเดิมพันไปพร้อมๆ กันกับ megagame