Šifrování PHP skriptů

http://mozektevidi.net/up/php-logo.jpg

Jednoduchý tip pro zabránění lehkého čtení zdrojového kódu php scriptu. Fce eval, base32, base64_encode, base64_decode, gzdeflate, gzinflate. Bezpečnost php kódu na prvním místě.
Celý článek je zveřejněn na mozektevidi.net/clanek/sifrovani-php-skriptu

#1 BST webblog.vyvojar.cz/bst

Nevím, nakolik pomůže k utajení předat čtenáři šifrový text včetně přesného návodu k dešifrování. :-D

date 2.2.2007 Pá 13:21
#2 MzK webmozektevidi.net emailmozek007©seznam.cz

TO BST: Důležitý je ten závěr. Třeba když si někdo zobrazí tvůj php soubor kde bude eval('bW96ZWt0ZXZpZGkubmV0') a v tom je právě heslo k DB nebo nastavení db. Lepší než aby byl pouze v plain textu.

date 2.2.2007 Pá 14:35
#3 SpeedyGT webspeedygt.ic.cz

To mnoho násobný zakodování různejma šiframa vypada bezpečně, utočník těžko bude po večerech testovat v čem to vlastně je:-D

date 3.2.2007 So 12:57
#4 MzK webmozektevidi.net emailmozek007©seznam.cz

TO SpeedyGT: Přesně tak. A nejlepší je, že se zašifruje i fce gzdeflate. Takže prakticky ve zdrojáku vidíš eval(bW96ZWt0ZXZpZGkubmV0). A v tom balastu může být zašifrováno třeba desetkrát gzdeflate. Nevíš kolikrát, nedá se svítit. Jediná valná nevýhoda je, že to solidně zatěžuje php servery. U mě na localhostu to není znát, savana se trochu zapotí a IC.CZ spadne :-D

date 3.2.2007 So 14:53
#5 SpeedyGT webspeedygt.ic.cz/

TO MzK: omg:-D. Prakticky by šel udělat programek kterej by hledal kombinace rozšifrování určitýho hesla, vypsalo by to vysledky a ten nejpravděpodobnější (ne haldu znaku) by to vyplivlo8-)

date 3.2.2007 So 15:02
#6 MzK webmozektevidi.net emailmozek007©seznam.cz

TO SpeedyGT: Napíšu možná někdy časem. Teď není čas a až bude tak bude dělat ten script na přihlašování a odhlašování do naší školy abychom se umístili do top žebříčku SMIL

date 3.2.2007 So 16:31
#7 etrix

Vždyť "bW96ZWt0ZXZpZGkubmV0" není php kód, tak jak ho má eval() spustit?

date 19.4.2007 Čt 01:03
#8 MzK webmozektevidi.net emailmozek007©seznam.cz

TO etrix: Věř mi, že to funguje. Sám to používám. Skript se pouští takto: eval(gzinflate(base64_decode($kode)));

date 19.4.2007 Čt 08:18
#9 etrix

TO MzK: Můžeš mi sem dát funkční příklad, ve kterém se zkódují i ty funkce? Ať zkouším co zkouším, tak to nedělá co bych čekal.

date 19.4.2007 Čt 12:40
#10 Nobelicek

Nebylo by jednodusi php zkompilovat a spoustet jako binarku? To ti pak nikdo php neprecte ani kdyby se tisickrat dostal na server :) Natoz aby z toho dostan nejake hesla pro mysql.

date 19.4.2007 Čt 12:48
#11 Nobelicek

Nehlede na to je to jeste rychlejsi nez pouzivat php s interpretem

date 19.4.2007 Čt 12:48
#12 MzK webmozektevidi.net emailmozek007©seznam.cz

TO etrix: Dobře, zde je moje připojení (databaze.php) na localhost:
<?
eval(gzinflate(base64_decode('
DdLbcqIwAADQX+lb734DSFSDGdlOBENAQLlZ4GUHJMQLBEMQhK/ffsGDSG/
/fL//zkraceno!!
')));
?>
TO Nobelicek: I ze zkompilovaného PHP jde dostat část původního. Nemá to jenom výhody.

date 19.4.2007 Čt 13:12
#13 Nobelicek

Samozrejmne. Nejvetsi nevyhoda kompilovaneho php je ze kompiler je placeny :) nasel jsem i nejake free ale ty jsou celokem o nicem :) Ale kdyz uz chceme mit web jako binarku tak uz byh radsi pouzil c++ nebo perl.

date 19.4.2007 Čt 13:14
#14 Nobelicek

To MzK tvoje sifra je velmi rozumna, protoze sofrovani ktere si pouzil je sofrovany pomoci jedinecneho klice serveru :) Takze kdyz si to bude nekdo chtit rozsifrovat na jinem serveru dostane holy nesmysl :)

date 19.4.2007 Čt 13:15
#15 MzK webmozektevidi.net emailmozek007©seznam.cz

TO Nobelicek: Použil bych Javu. V tom je třeba abclinuxu.
TO Nobelicek2: Tím si nejsem jistý. Ten skript funguje na minimálně na 2 serverech. U mně doma na localhostu i na savaně. Normálně celý text převedu do base32 (to není šifra, jen nahrazení znaků!. Pak se to zagzipuje. a nakonec přes eval spustí.

date 19.4.2007 Čt 13:41
#16 Nobelicek

Mas pravdu sem se spletl :) Zamenil sem si to s funkci crypt.

date 19.4.2007 Čt 13:44
#17 Nobelicek

Jinak java c++ c cokoli je pouzitelne. Javu neumim tak bych ji nepouzil :)

date 19.4.2007 Čt 13:45
#18 etrix

TO MzK: No to jsi mi moc nepomohl, když je to zkráceno, tak to fungovat nebude. Prosimtě zkus to ještě jednou a pak už dám pokoj :-)
Kompletní zdroják (včetně zakódování a dekódování), kde bude zakódováno třeba echo "ahoj";, nebo cokoli jinýho.

date 19.4.2007 Čt 13:47
#19 MzK webmozektevidi.net emailmozek007©seznam.cz

TO etrix: OK. Mohl bych být za to placenej, ne? :-D
$kod = "echo \"ahoj\";"; // co zakódujem (echo "ahoj";)
$sifra = gzdeflate($kod, 9); // kodování
$rozkodujem = gzinflate($sifra); // rozkoduji
eval($rozkodujem); //spustím napiše ahoj

date 19.4.2007 Čt 13:52
#20 Nobelicek

Jeste tajkova pozznamecka gzdeflate neni kodovani ani sifrovani ale komprimace gzipem :) A gzinflate je opet dekomprimace :) Tim padem mu to nemusi fungovat ze pokud na serveru na kterem to skousi spustit neni naisntalovany knihovny gzipu. At se podiva do phpinfo.

date 19.4.2007 Čt 14:02
#21 MzK webmozektevidi.net emailmozek007©seznam.cz

TO Nobelicek: Jj, výše jsem psal: Pak se to zagzipuje. a nakonec přes eval spustí.: Vím že to není kódování v tom php komentáři se mi to vecpalo ani nevám jak.

date 19.4.2007 Čt 14:12
#22 etrix

TO MzK: Jenže v tomhle nekóduješ tu funkci gzdeflate. Myslel jsem si, že se zakóduje i ona a eval tu rozkódovanou funkci hned spustí. Myslel jsem to nějak takhle, jenže to nevypíše vůbec nic:

<?
$x = base64_encode('echo "ahoj";');
echo $x;
echo '<br>';
echo base64_decode($x);
echo '<br><br>';

$x = base64_encode('base64_decode("ZWNobyAiYWhvaiI7");');
echo $x;
echo '<br>';
echo base64_decode($x);
echo '<br><br>';

echo "<br>";
eval(base64_decode($x));
?>

Pokud do eval dosadím místo base64_decode($x) jen výstup z base64_decode($x), tak to funguje.

date 19.4.2007 Čt 14:48
#23 etrix

Každopádně to je stejně jen ochráněný proti přímýmu přečtení, jinak si to může rozkódovat kdo chce kdy chce.

date 20.4.2007 Pá 12:37
#24 MzK webmozektevidi.net emailmozek007©seznam.cz

TO etrix: Přesně. Ale tento trik není moc rozšířený, takže ho málokdo zná. Je to vhodně, třeba kdyby si někdo pujčil můj notebook a myslel si, že si přečte heslo v plaintextu LOL

date 20.4.2007 Pá 17:17

© 2008 Oldřich Šálek Zásady ochrany osobních údajů