Merhaba, bugün SourceCop aracı ile şifrelenmiş bir php kodunu çözme durumumu anlatacağım. Bir php dosyasında değişiklik yapmam gerekiyordu ve kod bir şekilde şifrelenmişti, ben de incelemeye başladım. Dosya içerisindeki kodlar aşağıda kabaca görülebilir (dosyanın tam içeriği değil).

<?php if (!function_exists('f66491764'))
{
    function f66491764($fld)
    {
        $fld1 = dirname($fld);
        $fld = $fld1 . '/scopbin';
        clearstatcache();
        if (!is_dir($fld)) return f66491764($fld1);
        else return $fld;
    }
}
require_once (f66491764(__FILE__) . '/90160697.php');
$REXISTHECAT4FBI = 'FE50E574D754E76AC679F242F450F768FB5DCB77F34DE341 660C280D176E374DE7FB3B090A782B6B68DBC97BEAD93B681C452F25BE26';
f66491764g0666f0acdeed38d4cd9084ade1739498(f66491764f0666f0acdeed38d4cd9084ade1739498(__FILE__));
$REXISTHEDOG4FBI = 'REM1MkM0NkRFQiBFMjJDNDhBQkM3RDk4NEFGMD[...redacted...]U5REUzMzA=';
$REXISTHECAT4FBI = '94CD76CD371C5A7BC70C186E779C293B9B49BACA5A781A6';
eval(f66491764y0666f0acdeed38d4cd9084ade1739498('NTlGRTVDQTFFMDYyQTVFMDc0', $REXISTHEDOG4FBI)); ?>

Dosyayı açıp baktığımda ne olduğunu anlamadım önce, fakat incelediğimde durumu anladım ve önce dikkatimi çeken değişken isimleri oldu, “$REXISTHEDOG4FBI” ve “$REXISTHECAT4FBI”. Biraz dikkatimi çekti ve araştırdığımda bu kodun SourceCop denen bir php encryption aracı çıktısı olduğunu gördüm.

İlk bakıldığında bir fonksiyon kontrolü ve tanımı söz konusu, ama php’nin nasıl çalıştığını biliyor isek asıl odaklanmamız gereken kısmın son satırda yer alan eval fonksiyonu biliriz. Asıl kodumuzu içeren kısım “$REXISTHEDOG4FBI” değişkeninde yer alıyor aslında, ve bu bir takım parametrelerle adı zorlaştırılmış bir fonksiyona gönderilerek çıktısı eval fonksiyonuna verilerek işlenmesi sağlanıyor.

Kodu baştan aşağı incelersek o değişken buraya giriyor, çıktısı şuraya giriyor şeklinde adım adım takip edilmesi gerekiyor gibi görünüyor değil mi? Aslında sadece eval fonksiyonunun içindeki datanın eval edilmeden (hesaplanmadan) önceki içeriği lazım bize.

Ne yapacağız?

eval() fonksiyonu yerine o datayı php işlemeden çıktı almamız lazım. echo() fonksiyonunu kullanamıyoruz, direkt yazdırdığı için php işliyor.

Yardımımıza highlight_string() fonksiyonu koşuyor. Bu fonksiyon parametre olarak verilen string halindeki php kodunu renklendirerek şekillendirerek bize sunuyor. Peki biz son satırdaki eval() fonksiyonu yerine bunu kullanırsak ilgili php sayfasını açtığımızda ne olur? Php bize bu kodu işlemek yerine ekrana yazdırır ve kolayca decode etmiş oluruz.

Decode Edilmiş Kod

Böylece söz konusu php dosyasındaki kodun temiz halini görebiliriz, basitçe kodun şifrelenmiş halini silip temizlediğiniz kodu yapıştırdığınızda kodu temizlemiş oluyorsunuz ve istediğiniz değişikliği yapabilir hale geliyorsunuz.

Php, kaynak koduna erişim sahibi kişilerden kodun içeriğini kolayca saklayabildiğimiz bir yapıya sahip değil. Kodu derlenmediği için bu tarz ufak değişikliklerle kolayca kodu açığa çıkarabiliyorsunuz. Bir dünya fonksiyon çalıştırmanız, değişik adlandırmalar kullanmanız ile sadece kod çözülmesi göz korkutucu bir hal almış oluyor, fakat bu yöntemler hiçbir işe yaramıyor.

Güzel günler dilerim.