2017 yılında bunun için şöyle bir şey düşünmüşüm..
Diyelim ki projenin en kafa sınıf dosyası var.
Örneğin bir haber çekme botu yapmışım..
Kodların başlama şekli bu şekilde;




Daha sonra bunları şifreleyebilecek bir PHP fonksiyonu düşünmüşüm..
Bu fonksiyon ile kodları aşağıdaki hale getirmişim, bu şekilde bir kaç kişiye verdiğimi hatırlıyorum;


Şifreleme fonksiyonumda şunlar;
<?php
// Belirli uzunlukta rastgele bir dize oluşturan fonksiyon
function generateRandomString($length = 10, $type = false)
{
    if ($type)
        $salt = "0123456789";
    else
           $salt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        
    $len = strlen($salt);
    $makepass = '';
    mt_srand(10000000*(double)microtime());
    for ($i = 0; $i < $length; $i++) {
        $makepass .= $salt[mt_rand(0, $len - 1)];
    }

    return $makepass;
}

// Dosyadaki fonksiyonları değiştiren ve yeniden adlandıran ana işlev
$file = file_get_contents('newsBot.php');

$fnc = array();
preg_match_all("/function\s(.+?)\((.*?)\)/i", $file, $matches);
foreach ($matches[1] as $key) {
    $file = str_replace('function ' . $key . '(', 'function ' . md5($key) . '(', $file);
    $file = str_replace('$this->' . $key . '(', '$this->' . md5($key) . '(', $file);
    $fnc[md5($key)] = $key;
}

// "$this->" ile başlayan anahtarları değiştiren ana işlev
preg_match_all("/\\\$this->([A-Z0-9][A-Z0-9_]+)\s=/i", $file, $matches);

$keys = array();
foreach ($matches[1] as $key) {
    $to = generateRandomString(3) . generateRandomString(3, true) . generateRandomString(10);
    if (isset($keys[$key]))
        $to = $keys[$key];
    else
        $keys[$key] = $to;
    $file = str_replace('$this->' . $key . ',', '$this->' . $to . ',', $file);
    // Diğer değişiklikler benzer şekilde yapılır...
}

// "$" ile başlayan anahtarları değiştiren işlev
preg_match_all("/\\$([A-Z0-9][A-Z0-9_]+)\s=/i", $file, $matches);

foreach ($matches[1] as $key) {
    $to = generateRandomString(3) . generateRandomString(3, true) . generateRandomString(10);
    if (isset($keys[$key]))
        $to = $keys[$key];
    else
        $keys[$key] = $to;
    // Değişiklikler benzer şekilde yapılır...
}

// Array anahtarlarını değiştiren işlev
preg_match_all("/\\['(.*)'\\]\s/i", $file, $matches2);

$keys = array();
$allowed_keys = array('Site', 'title', 'meta_keywords', 'meta_description', 'short_content', 'site', 'content', 'image', 'id', 'lastId', 'username', 'password', 'link', 'Session');
foreach ($matches2[1] as $key) {
    if (!in_array($key, $keys))
        $keys[] = $key;
}
foreach ($allowed_keys as $key) {
    $str = '';
    for ($i=0; $i<=strlen($key); $i++) {
        if ($i)
            $str .= ". /* " . generateRandomString() . " */\n\r";
        $str .= "'" . substr($key, $i, 1) . "'";
    }
    $file = str_replace("'{$key}'", $str, $file);
}

// Fonksiyon isimlerini geri değiştirme
foreach ($fnc as $k => $v) {
    $file = str_replace('function ' . $k . '(', 'function ' . $v . '(', $file);
    $file = str_replace('$this->' . $k . '(', '$this->' . $v . '(', $file);
}

$file = str_replace("\t", "", $file);

// İşlenmiş kodu bir dosyaya yazma
file_put_contents('newsBot.min.php', $file);
?>
Umarım fikir verir..