Obfuskace (encoding) Nette
- acid303
- Člen | 6
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
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?