PDA

Просмотр полной версии : Кодирование php фала


Divan
25.06.2009, 23:10
Привет всем , у меня тако вопрос , я видел очень много тем как раскадировать данный материал <?php // This file is protected by copyright law and provided under license. Reverse engineering of this file is strictly prohibited.
$OOO0O0O00=__FILE__;$O00O00O00=__LINE__;$OO00O0000 =4564;eval((base64_decode('JE8wMDBPME8wMD1mb3Blbig kT09PME8wTzAwLCdyYicpO3doaWxlKC0tJE8wME8wME8wMClmZ 2V0cygkTzAwME8wTzAwLDEwMjQpO2ZnZXRzKCRPMDAwTzBPMDA sNDA5Nik7JE9PMDBPMDBPMD0oYmFzZTY0X2RlY29kZShzdHJ0c ihmcmVhZCgkTzAwME8wTzAwLDM3MiksJ29IK0F0SnJhNU9mZFh RSVAxZXVVRXlHVjhSRjA3Qlo5a3FtM3pMS3hXRGIyaFlsU3Bjb i9pNHdqTU5zZzZUdkM9JywnQUJDREVGR0hJSktMTU5PUFFSU1R VVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0N TY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));return ;?>
OtTPXAHPXAHPXA4L7KyxVjOL7rcq8wEWO4T9ezLXeyT9OnpmOn 5lOtTPU/HPXt6pX+MmOn5hfrOq7wEwQJTzRGQSRrEW7jenBa5WRxOL8G1W Ot6pXAHPXt6pX+pzUi6pXt6pXAopfupx0ik21Vef7Kt4UwRzGJ JOEAJLByyJZEBGIJOrXAB+G3L27Gi/ZzcdZJBt83OWGGcU7rQldwziBwDQUxQxQLew1/ixd+BH1zQteERautLfuicQUzT1EyOUyJyGy4qRGKJm8weLRKBW FGD20r4l0jHc7xQiBVRjZaLsXAtnX/14Q37MIuhSOnzDfuzgRKQh0jQLf+ePXAopU/HPXAoDIwyw8GpWOtTPXAHPXAHPX+zg5rLl8wc4RrEk5xQLBayp dxHW7+5gBVQL7LTh0wBD0mkDI/YL8wqS5+7xIwLl8wc4RrEk5KqL8GeL7mNpFaomI/YL8wqS5+7xIpDp7KLlB+omPrQL0xeL73M6FAXvOrcq0KB0BrLi 0ry9BVHm8GcBP+TWX/MmIpWz734xRVe9BrJm0ry98VOnf+ei8GOhRVQ0BJT47wyn74ih OJTUeyQUuETIGjyDRJih5xRq0ayi8u5DIpWz0GLl8wJ/FrOq0A4xRVe97jL/BKJhf+O47wyn74TYFGN38VQW8KJh5mzg+meYFGN37KOq0A4xRV e97jL/BKJhf+O47wyn74TYFGN37KOq0+5DIpDDRmoWOJTaeye0BVHm8G cBfuHg+KLK5+kzViBJyJYqBaLpRyiTPu5mfuHg5+e9eiyEGwJi ZVHLVUicIjifFG8kf+kzViBJyJYq0GT40xeBPAip5rTn5ryM8w qq0KBL8wJ/F+kzViBJyJYq0GT40xeBd+enGjRq0ayi8yih5xHqZVQN74Tj0V Wmd+OSBV1mfUpz0GLl8wJ/FrOq0+zk8GNz5+e9eiyEGwJiZVHLVUiTXuzkZnozViBJyJYq0G T40xeBPueYFGN38VQW8KJhIjifRGc/RGLK5+kWOJTaeye08G4SBGNiVUpTX+HS7mozViBJyJYq0GT40x eBP+eYFGN

А вот как так же кодировать ??? допустим у меня есть php фалы и мне из также нужно закадировать чтоб некто немог посмотреть оригинальный код ...

Krist_ALL
25.06.2009, 23:19
$O000O0O00=fopen($OOO0O0O00,'rb');while(--$O00O00O00)fgets($O000O0O00,1024);fgets($O000O0O00 ,4096);$OO00O00O0=(base64_decode(strtr(fread($O000 O0O00,372),'oH+AtJra5OfdXQIP1euUEyGV8RF07BZ9kqm3zL KxWDb2hYlSpcn/i4wjMNsg6TvC=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgh ijklmnopqrstuvwxyz0123456789+/')));eval($OO00O00O0);


это можно раскодировать

кодируется так eval(base64_decode(x)); где х это base64_encode(твой код);

чтобы норм зашифровать юзай ZEND OPTIMIZER.

d_x
25.06.2009, 23:26
Я примерно год назад писал расшифровщик для такого, про него забыли)
В этом тексте зашифрован такой кусок:

include "setup.php";user_login();;echo '';include "header.php";;echo '';
print "<center><h3>$lang[title_upbal]</h3>";
$r=get_table_arr($tables[t_users],$_SESSION[uid],"valuta");
$mincashbal=get_sysval("users_mincashbal");
$mincrbal=get_sysval("users_mincrbal");
if ($_GET[upbal]) {
if ($_GET[atype]=="") { $_GET[atype]=1;}
if (($_GET[amount]<=0 or exchangecash($_GET[amount],$r[valuta],"paysys_wmz","out")<$mincashbal) and $_GET[atype]==1) { $_GET[amount]=$mincashbal;}
elseif (($_GET[amount]<=0 or $_GET[amount]<$min


Еще раз мой универсальный расшифровщик для файлов, зашифрованных таким образом:

<?php
$file='lol.php'; //file to decrypt


$f=file_get_contents($file);

preg_match("/base64_decode\('([a-zA-Z0-9\+=\/]+)'\)\)/isU",$f,$m);
if(!isset($m[1]))
die('Couldnot decrypt.');

preg_match('/__LINE__;\$(.+)=(\d+);/isU',$f,$m2);
if(!isset($m2[1]) || !isset($m2[2]))
die('Couldnot decrypt.');

eval('$'.$m2[1].'='.$m2[2].';');


$code1=base64_decode($m[1]);

preg_match("/base64_decode\(strtr\((.+)\);eval/isU",$code1,$m);
if(!isset($m[1]))
die('Couldnot decrypt.');



$code2='base64_decode(strtr('.$m[1];

$code2='$code3='.preg_replace('/fread\(\$(.+),/isU',"fread(\$f,",$code2).';';

$f=fopen($file,'r');
if(!$f)
die('Error opening file');

while(!feof($f))
{
$txt=fgets($f,2);

if($txt=='?')
{
if(fgets($f,2)=='>')
break;
}
}

fgets($f,3);

eval($code2);

$code4=preg_replace('/fread\(\$(.+),/isU',"fread(\$f,",$code3);

preg_match("/base64_decode\(strtr\((.+)\)\);fclose\(/isU",$code4,$m);
if(!isset($m[1]))
die('Couldnot decrypt.');

$code5='$code6=base64_decode(strtr('.$m[1].';';

eval($code5);

fclose($f);

print trim($code6);
?>

Krist_ALL
25.06.2009, 23:29
у ТСа самое простое шифрование)

е ченить по серьезнее штатными средствами?

сморел d_x твой расшифровщик, ну и наворотил ты)) понил на 60% - общий смысл понятен.

d_x
25.06.2009, 23:31
Там не банальное base64+eval, там еще чтение своего же файла, еще несколько base64, наворочено достаточно, не помню уже конкретно.

Krist_ALL
25.06.2009, 23:35
всеравно это легко расшифруемо... я недавно думал как мона зашифровать ченить..разные вещи - шифрование и обфускация. в данном случае больше обфускация $O000O0O00=fopen($OOO0O0O00,'rb');while(--$O00O00O00)fgets($O00.. итд.


думаю может ченить поинтереснее есть...


мона еще pack()

Divan
25.06.2009, 23:58
Спасибо ребята за ответы ! но мне нужно как зашефровать также : )

d_x
26.06.2009, 00:02
А смысл теперь шифровать также, если всё элементарно расшифровывается? Там даже обфускация исходного скрипта не производится.

Divan
26.06.2009, 00:05
xM.... d_x а как получше шефровать ?

d_x
26.06.2009, 00:07
PHP нет смысла шифровать, в любом случае исходный код получить можно. Если только что посложнее, например, Zend, хотя он тоже снимается. Можно обфусцировать код, т.е. сделать его трудночитаемым.

Divan
26.06.2009, 00:10
ну зенд проблемы шифровать нету , и для него на сервере должно стоять програмное обиспичение ... а как обфусцировать код ?

d_x
26.06.2009, 00:21
Я для себя свой обфускатор писал ( http://kaimi.ru/2009/03/php-obfuscator-13-extended/ ), хотя много других есть.

Divan
26.06.2009, 01:38
Спасибо ! но всёже непомогло ((

Pashkela
26.06.2009, 01:55
PHP нет смысла шифровать, в любом случае исходный код получить можно. Если только что посложнее, например, Zend, хотя он тоже снимается. Можно обфусцировать код, т.е. сделать его трудночитаемым.

не совсем согласен, 1,5 года назад купил покер, есть ключ+лицензия - отдельно от кода, не в нём т.е., закинул грину одному - хрен там, никто пока не справился. Вывод - не паблик ключ шифровки, в отдельном файле

ЗЫЖ Сам ключ + лицензия тоже чем-то зашифрованы

Вот пример шифровки, которую вряд ли расшифруешь, если неизвестны параметры расшифровки:


https://forum.antichat.ru/showpost.php?p=1179471&postcount=716

cren
26.06.2009, 02:07
Помоему нет смысла в этом элементарном шифровании, уже развелось много сервисов онлайн которые это расшифровывают

Pashkela
26.06.2009, 02:33
))))

Расшифруй это:


e<co?han'tcaiu t-r zelzzlz!zz!!z!3?'>1;

Gifts
27.06.2009, 13:43
Pashkela Что мешает получить этот самый файл ключа, если он доступен ПХП для чтения?

И второе - ваша шифровка взламывается тривиальным образом при возможности подать произвольный текст на вход кодера. И не слишком тривиальным образом при известном характере закодированной последовательности (например если это код ПХП, текст, и т.д.)

d_x
27.06.2009, 13:51
Pashkela Что мешает получить этот самый файл ключа, если он доступен ПХП для чтения?

Ну если ключ шифрования вроде RSA выдается человеку только при покупке товара, то скрипт уже никак не расшифровать, не купив его.

Gifts
27.06.2009, 14:05
d_x Для хороших систем с открытым ключом - естественно. Для данного конкретного шифра перестановки - все просто.

Плюс - в данном случае имеется ввиду ключ для дешифровки, иначе зачем нам скрипты, которые мы не можем использовать? То опять таки можно декодировать.

З.Ы, Шифрование в пределах ПХП, без учета надстроек типа IonCube и Zend

astrologer
27.06.2009, 16:44
))))

Расшифруй это:


e<co?han'tcaiu t-r zelzzlz!zz!!z!3?'>1;
<? echo 'anticat - rullezzzzzzz!!!!1'; ?>

Pashkela
27.06.2009, 17:42
antichat только:))) И без единички

astrologer
27.06.2009, 17:51
antichat только:))) И без единички Можно точные параметры для расшифровки?

Pashkela
27.06.2009, 19:05
к сожалению мусор и блокоделение утеряны, т.к. было сделано на один разочек. Восстановить невозможно

astrologer
27.06.2009, 21:03
к сожалению мусор и блокоделение утеряны, т.к. было сделано на один разочек. Восстановить невозможноДа ну. У этого алгоритма очень небольшое (http://tr.im/pZ5c) множество ключей (8 из которых дают снова исходный текст). Мусор роли практически не играет. После полного перебора (т.е. шифрования теперь уже известного исходного текста со всеми возможными ключами) так и не получился шифр-текст, приведенный Pashkel'ой.

Наверное, автор решил подправить результаты работы алгоритма, чтобы он выглядел надежнее :)

yaws
13.08.2009, 13:00
Здравствуте.
Интересует какая кодировка используется при кодидировании номеров деталей на сайте. http://www.t-parts.ru/trade/search ( незнаю в правилах не прочитал можно ли давать ссылки на сайты)

Pashkela
13.08.2009, 13:50
Да ну. У этого алгоритма очень небольшое (http://tr.im/pZ5c) множество ключей (8 из которых дают снова исходный текст). Мусор роли практически не играет. После полного перебора (т.е. шифрования теперь уже известного исходного текста со всеми возможными ключами) так и не получился шифр-текст, приведенный Pashkel'ой.

Наверное, автор решил подправить результаты работы алгоритма, чтобы он выглядел надежнее :)

Ну ок:)) Вот сейчас сохранил все ключи и мусор, расшифруй:


rge ixfwici crarkee ngw eentranio


причем выбран далеко не самый сложный метод шифровки.

Велемир
13.08.2009, 14:15
Э,а как расшифровывать вообще )

Pashkela
13.08.2009, 14:23
немного изменил алгоритм дешифровки, чтобы работал более корректно практически во всех случаях (вроде бы). Вот пример скрипта, где сразу и шифровка и дешифровка:


<pre>
<?php
$slov = 'корректно работает со словами по отдельности и текстом в частности'; // Слово для шифрования (или текст)
$bl = 8; // Длина блока, на которые делим слово
$ran = 'бямпуент'; // Мусор, который добавляем, если при делении слова получился кусок меньше длины блока
$key = '38247165'; // Ключ перестановки (в пределах длины блока)
$shifr_slov = encode($slov,$bl,$ran,$key);
echo "Пример шифрования\n";
echo "Слово < $slov >\n";
echo "Зашифрованное слово < $shifr_slov >\n";

function encode($slovo,$blog,$rand,$alg) {
$res2 = str_split($alg);
for ($i=0;$i<count($res2);$i++) $res2[$i]--;
$res = str_split($slovo,$blog);
for ($i=0;$i<count($res);$i++) {
if (strlen($res[$i])<$blog) $res[$i] = $res[$i].$rand;
}
for ($i=0;$i<count($res);$i++) $res1[] = str_split($res[$i]);
for ($i=0;$i<count($res1);$i++) {
for ($j=0;$j<count($res1[0]);$j++) {
$b = $res2[$j];
$hash.=$res1[$i][$b];
}
}
return $hash;
}


###########################################
echo "\n\n\n\n\n";
echo "Пример декодирования\n";

$slov = $shifr_slov; // Слово для расшифровки (или текст)
//$bl = 4; // Длина блока, на которые делим слово
//$ran = 'ос'; // Мусор, который добавляем, если при делении слова получился кусок меньше длины блока
//$key = '3124'; // Ключ перестановки (в пределах длины блока)

echo "Зашифрованное слово < $slov >\n";
echo "Расшифрованное слово < ".decode($slov,$bl,$ran,$key) . " >\n";


function decode($slovo,$blog,$rand,$alg) {
$buff = '';
$res2 = str_split($alg);
for ($i=0;$i<count($res2);$i++) $res2[$i]--;
for ($i=0;$i<count($res2);$i++) {
$c = $res2[$i];
$res3[$c] =$i;
}
$res = str_split($slovo,$blog);
for ($i=0;$i<count($res);$i++) $res1[] = str_split($res[$i]);
for ($i=0;$i<count($res1);$i++) {
for ($j=0;$j<count($res1[0]);$j++) {
$b = $res3[$j];
$hash.=$res1[$i][$b];
}
}
$hash = str_replace($rand,'',$hash);
for ($i=strlen($rand);$i>0;$i--) {
$buff=substr($rand,0,$i);
if (strpos($hash,$buff)) {
$hash = str_replace($buff,'',$hash);
$buff = '';
$i=0;
}
}
return $hash;
}
?>
</pre>


корректно работает со словами по отдельности и текстом в частности (правда при достаточной длине мусора, чтобы было как можно меньше совпадений в мусоре (в слогах) и кодируемом/декодируемом тексте)

т.е. имеет смысл при длине блока и мусора от 4-х единиц

ЗЫЖ Пост подправил, привел более интересный пример, включая совпадения букв мусора с буквами с кодируемом тексте

т.е. то, что выше, превращает

"корректно работает со словами по отдельности и текстом в частности"

в


"рнортккера атооб лтссе оаовмпо итнодь леттси ои свкт емоасчсо нтбеияутпм"


и обратно.

На основе этого можно написать нехилый такой icq-клиент, для шифрованной переписки, что и было у меня в планах, но пока руки не доходят:)

altblitz
13.08.2009, 17:52
Pashkela,
> $hash.=$res1[$i][$b];
> $res2 = str_split($alg);

[$b] - переменная?
($alg) - алго шифрования(скорее нет ..)?

PS: мне проще под GCC отладить пока )

astrologer
13.08.2009, 19:05
Ну ок:)) Вот сейчас сохранил все ключи и мусор, расшифруй:


rge ixfwici crarkee ngw eentranio


причем выбран далеко не самый сложный метод шифровки.Три ключа дают правильный ответ, что ещё раз показывает ненадёжность алгоритма:
ключ исходный текст
312 gerix wifi cracker new generation
312645 gerix wifi cracker new generation
312645978 gerix wifi cracker new generation

Pashkela
13.08.2009, 19:16
класс!!!!! Умница. Твой алгоритм расшифровки даже спрашивать не буду.

Если расшифруешь это - сам признаю, что метод - фекалька:)


оарсжодтлоезрнат чеыпй ец рн-т ооеэ осрпаивом


тут посильнее постарался зашифровать:))

Gifts
13.08.2009, 19:30
Pashkela Тут даже проще чем в прошлом примере, потому что есть больше информации для атаки по исходному тексту

714295836 = астролоджер зачотный перец - это неоспоримо

Pashkela
13.08.2009, 19:36
ыыыыыыы)))) Всё, сдаюсь. Расшифровка выше всё сказала

Но это у вас есть функция дешифровки перед глазами, это имеет решающее значение, нет?:)

Gifts
13.08.2009, 19:48
Pashkela Ни один алгоритм, секретность которого зависит от секретности самого алгоритма не является надежным. (с)

Плюс твой алгоритм блочный и простой перестановки - так что не суть важно как именно перемешивается текст, главное знать приблизительную длину ключа и исходный текст (если быть точным - часть сообщения и/или язык написания)

Pashkela
13.08.2009, 19:50
Хорошо. Ушел долго думать. Возможно на днях выдам еще что-нибудь обратимое, но функцию декодирования показывать не буду, согласны на такой эксперимент?

2 Gifts & 2 astrologer

astrologer
13.08.2009, 19:55
ыыыыыыы)))) Всё, сдаюсь. Расшифровка выше всё сказала

Но это у вас есть функция дешифровки перед глазами, это имеет решающее значение, нет?:)Нет.
Во-первых, безопасность системы не должна основываться на неизвестности алгоритма - это security through obscurity. Напротив, нужно предполагать, что потенциальному взломщику известно всё, кроме ключа.
Во-вторых, тот факт, что в шифр-тексте сохранена частота букв языка исходного текста, позволяет сделать предположения об используемом алгоритме.

Метод расшифровки очевидный - расшифровка всеми возможными ключами и проверка на осмысленность.

главное знать приблизительную длину ключаbtw, длина шифра кратна длине ключа