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..