Obfuskace (encoding) Nette

acid303
Člen | 6
+
0
-

Ahoj,
řeším v práci teď takový problém – pro jednoho klienta bychom měli vytvořit verzi našeho systému, která by běžela na jeho lokálním serveru. Běžně se klienti připojují na náš, bohužel v tomto případě to nebylo možné. Zkrátka jsem dostal za úkol náš kód nějak obfuskovat nebo nejlépe úplně zašifrovat, aby klient neměl přístup ke zdrojákům. Mám dostupnou licenci ionCube, kterou jsem chtěl použít. Po dlouhé řadě neúspěchů jsem narazil na článek, který mě trochu posunul, dozvěděl jsem se totiž, že musím vyřadit RobotLoader, protože skenuje zdrojáky a ze zašifrovaného zdroje toho moc nemá, a nechat to jen na composeru (psr-4). Dostal jsem se tak přes hodně chyb a už jsem si myslel, že bude všechno fajn, když mě překvapila chybová hláška z Nette\Utils\Reflection, která ze zašifrovaných zdrojaků nenačte třídy a vyhodí chybu: Undefined index: App\Model\…

{
           static $cache = [];
           if (!isset($cache[$name = $class->getName()])) {
               if ($class->isInternal()) {
                   $cache[$name] = [];
               } else {
                   $code = file_get_contents($class->getFileName());
                   $cache = self::parseUseStatements($code, $name) + $cache;
               }
        }
           return $cache[$name]; // Když si $cache vypíšu, obsahuje jen nezašifrované třídy
       }
  • snippet kódu z chybové hlášky

Ne webu ionCube stálo, že reflection zašifrovaného souboru, musí být volána ze souboru, který je zašifrovaný taky. Zkusil jsem šifrovat jen tu třídu, Utils, i celé Nette, ale přineslo to jen ještě víc zmatku.
Tak bych se chtěl zeptat, jestli někdo nemáte nějaké zkušenosti s něčím podobným a nevěděli byste, jak to rozchodit, nebo zda je to vůbec možné.

PS: Vím, že by se měla vyřídit pořádná licence a nechat zdrojáky napokoji, bohužel však nejsem svůj vlastní šéf :D

Díky moc!

Polki
Člen | 553
+
-7
-

Týjo, docela mazec. Ještě jsem se s ničím takovým nesetkal, ale já bych to asi řešil vytvořením nějakýho klienta a API na Vaší straně, takže jejich část nebude nic než hloupý dotazovač na vaše API. :D

S šifrováním PHP bych si rady asi taky nevěděl. PHP je navrženo tak, že běží někde na serveru, takže k němu přístup nikdo nemá, což postrádá smysl šifrování.

Ještě mě napadlo, můžeš zkusit využít knihovny od Facebooku a to konkrétně hiphop for PHP viz link .
Ten by měl celý PHP kód přeložit a zkompilovat do C++ jazyka a binárku ti málokdo přečte. Ale pak to bude chtít spouštět ten C++ kód jinak, než klasicky PHP :D

A taky nevím, jestli vůbec nette půjde přeložit hiphopem, jelikož hiphop nepodporuje funkce typu eval apod a nevím, jestli je nette někde v sobě má…

Nicméně pokud se nehodí mít appku na vašem serveru, tak proč? Pokud není internetové připojení nebude lepší udělat Desktopovku?