PHP Keystroke Şifrelemesini Kırmak, Çözmek

Çalıştığım yerde şirketten ayrılan programcı arkadaşım bazı kodlarını şifrelemiş. Bu kısımlarda redeclare hatası meydana gelince kodları çözmek gerekti. Ioncube gibi birşey değil genel olarak wordpress, joomla gibi cms’lerde karşılaşacağımız PHP kodu şifreleme yöntemi kullanılmış.

ŞifrelemeBu şifreleme yöntemi için keystroke şifrelemesi diyebiliriz. Şifreleme için base64_decode kullanılmış. Ayrıca gzdeflate ile sıkıştırılan verilerin çözümü için gzinflate fonksiyonu kullanılmış. Şifrelenmiş veriyi görelim. Kod bölümünü ‘şifreli veriler burada’ şeklinde değiştiriyorum güvenlik için. Siz kendinize göre uyarlayabilir algoritmayı anlayıp farklı tarzda benzer şifreleme yöntemlerini kırabilirsiniz.

[php]
<?php
/* Ne aradıysan yok burda */
$keystroke1 = <a href="http://www.php.net/base64_decode">base64_decode</a>("d2RyMTU5c3E0YXllejd4Y2duZl90djhubHVrNmpoYmlvMzJtcA==");
 
<a href="http://www.php.net/eval">eval</a>(<a href="http://www.php.net/gzinflate">gzinflate</a>(<a href="http://www.php.net/base64_decode">base64_decode</a>(‘hY69DsIgFIVf5QwMENGUuWH0QZTeKrFekgsMxvTdLWlqTBfX8/uNlUOJiSGpEIc0kFa5SOSbVZdnqlwM3lAPesEj1+vifQPoLJzpEUe9KBPx5hjvXasJlSqMcBedZNBtxeCAbbjHDJoy/U/i1PjOK9+ewlns7o/O2N+X+QM=’)));
 
$O0O0O0O0O0O0=$keystroke1[2].$keystroke1[32].$keystroke1[20].$keystroke1[11].$keystroke1[23].$keystroke1[15].$keystroke1[32].$keystroke1[1].$keystroke1[11];
 
$keystroke2 = $O0O0O0O0O0O0("„q>BF€~An†r‡D…pt{slƒE{y‚xCwuov|@?z}", -13);
$OO000OO000OO=$keystroke2[16].$keystroke2[12].$keystroke2[31].$keystroke2[23].$keystroke2[18].$keystroke2[24].$keystroke2[9].$keystroke2[20].$keystroke2[11];
 
$O0000000000O=$keystroke1[30].$keystroke1[9].$keystroke1[6].$keystroke1[11].$keystroke1[27].$keystroke1[8].$keystroke1[19].$keystroke1[1].$keystroke1[11].$keystroke1[15].$keystroke1[32].$keystroke1[1].$keystroke1[11];
<a href="http://www.php.net/eval">eval</a>($OO000OO000OO(<a href="http://www.php.net/base64_decode">base64_decode</a>(‘şifreli veriler burada’)));
?>[/php]

şifreli veriler böyle. Burada keystroke değerlerini çözümledim öncelikle daha rahat olması için. Şöyle ki;

[php]<?php
/* Ne aradıysan yok burda */
$keystroke1 = ‘wdr159sq4ayez7xcgnf_tv8nluk6jhbio32mp’;
 
function rotencode($string,$amount) { $key = <a href="http://www.php.net/substr">substr</a>($string, 0, 1); if(<a href="http://www.php.net/strlen">strlen</a>($string)==1) { return <a href="http://www.php.net/chr">chr</a>(<a href="http://www.php.net/ord">ord</a>($key) + $amount); } else { return <a href="http://www.php.net/chr">chr</a>(<a href="http://www.php.net/ord">ord</a>($key) + $amount) . rotEncode(<a href="http://www.php.net/substr">substr</a>($string, 1, <a href="http://www.php.net/strlen">strlen</a>($string)-1), $amount); }}
 
$O0O0O0O0O0O0=’rotencode’;
$OO000OO000OO=’gzinflate’;
$O0000000000O=’base64_decode’;
 
$x = <a href="http://www.php.net/base64_decode">base64_decode</a>(‘şifreli veriler burada’);
 
$out = <a href="http://www.php.net/gzinflate">gzinflate</a>($x);
 
echo $out.'<hr>’;
 
 
?>
[/php]

Daha sonra birde baktım $out’tan çıkan veride şifrelenmiş şekilde;

[php]
<pre class="php"><a href="http://www.php.net/eval">eval</a>($OO000OO000OO(<a href="http://www.php.net/base64_decode">base64_decode</a>(‘yeni şifreli veriler burada’)));
[/php]

Tekrar tekrar eval yerine print_r yazarak açmaya çalıştım baktım olmuyor en sona bir for döngüsü koydum ve eval olmayan veriye kadar döndürdüm. O son bölümü dikkatli inceleyin. Açılan yeni şifreli veriler içerisinde “eval($OO000OO000OO(base64_decode(” bölümünü kaldırıp kendim bu fonksiyonları manuel uyguladım(eval hariç). dönen değer tekrar tekrar sorgulanıp eval bulunmayan asıl kodlara gelene kadar döndü.

İşte for döngülü son hali;

[php]
<?php
/* Ne aradıysan yok burda */
$keystroke1 = ‘wdr159sq4ayez7xcgnf_tv8nluk6jhbio32mp’;
 
function rotencode($string,$amount) { $key = <a href="http://www.php.net/substr">substr</a>($string, 0, 1); if(<a href="http://www.php.net/strlen">strlen</a>($string)==1) { return <a href="http://www.php.net/chr">chr</a>(<a href="http://www.php.net/ord">ord</a>($key) + $amount); } else { return <a href="http://www.php.net/chr">chr</a>(<a href="http://www.php.net/ord">ord</a>($key) + $amount) . rotEncode(<a href="http://www.php.net/substr">substr</a>($string, 1, <a href="http://www.php.net/strlen">strlen</a>($string)-1), $amount); }}
 
$O0O0O0O0O0O0=’rotencode’;
$OO000OO000OO=’gzinflate’;
$O0000000000O=’base64_decode’;
 
$x = <a href="http://www.php.net/base64_decode">base64_decode</a>(‘şifreli veriler burada’);
 
$out = <a href="http://www.php.net/gzinflate">gzinflate</a>($x);
 
echo $out.'<hr>’;
 
 
for($x=0; $x<=20; $x++)
{
$out = <a href="http://www.php.net/substr">substr</a>($out,34,-5);
$out = <a href="http://www.php.net/gzinflate">gzinflate</a>(<a href="http://www.php.net/base64_decode">base64_decode</a>($out));
<a href="http://www.php.net/print_r">print_r</a>($out);
if(<a href="http://www.php.net/substr">substr</a>($out,0,4) != ‘eval’) <a href="http://www.php.net/exit">exit</a>();
echo ‘<hr>’;
}
 
 
?>[/php]

Nihayetinde kodlar kabak gibi açıldı.

Kötü amaçlarla kullanmayın kul hakkı yemeyin aksi halde sorumlu değilim. Sadece sorun çıktığında müdahale etmek için kullandım bende.

İyi çalışmalar

Furkan Sandal

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.