PEEL PHP - Tarayıcıda Çalışan Açık Kaynak PHP Deobfuscator
ionCube - SourceGuardian - Zend Guard EKLENİCEK
Ücretsiz · MIT lisanslı · Kurulum yok, hesap yok, kodun bilgisayarından çıkmaz


Merhaba arkadaşlar,

JavaScript sürümünden sonra PEEL'in PHP sürümünü de tamamen açık kaynak olarak yayınladım. PEEL PHP, gizlenmiş (obfuscate ya da encode edilmiş) PHP kodunu okunur hale getiren bir araç. Kodu yapıştırıyorsun, Çöz tuşuna basıyorsun; temiz kodu ve kodun gerçekte ne yaptığını anlatan bir raporu alıyorsun.

Sunucuna yüklenmiş şüpheli bir dosyayı incelemek, satın aldığın bir eklentinin ya da temanın içine gömülmüş arka kapıyı bulmak, bir webshell'in ne yaptığını görmek ya da sadece "bu eval(gzinflate(base64_decode(...))) ne iş yapıyor?" sorusuna cevap bulmak için yaptım.


Önce ve Sonra

YAK Pro ile goto yumağı, kaçışlı dizgeler ve ad gizleme açılarak gizlenmiş bir kod. PEEL bunu tek tıkla geri çeviriyor; goto akışı yeniden foreach ve while oluyor, anlamsız adlar anlamlı adlar alıyor:



Neden farklı?

Çoğu PHP deobfuscator ya sadece kalıp arar (encoder biraz değişince pes eder) ya da dosyayı gerçek bir sunucuda çalıştırmanı ister (tehlikelidir). PEEL üçüncü bir yol izliyor:
  • Kodu gerçek PHP'de, güvenle çalıştırır. PHP 8.3, 7.4 ve 5.2 WebAssembly'ye derlenmiş halde, ayrı bir worker içinde çalışır. Kabuk komutları, ağ bağlantıları, posta ve dosya yazma kaydedilir ama gerçekte yapılmaz. Kod kilitlenirse bekçi motoru yeniden başlatır.
  • Her katmanı yakalar. Her eval, assert, create_function ve preg_replace /e çağrısı kaydedilir; iç içe katmanlar PHP'nin kendisinin çözdüğü haliyle açılır.
  • Kendi yaptığını kontrol eder. Her adımdan sonra kod yeniden çalıştırılır. Çıktı ya da denenen yan etkiler değişirse o adım otomatik geri alınır. Yani "temizledim ama bozdum" durumu yok.
  • Önemli olanı silmez. $_GET, $_POST, çerez ya da istek başlıklarına bağlı kod, sandbox o dala girmedi diye silinmez. Parola korumalı bir webshell'in gizli dalı çıktıda kalır.
  • Kodun ne yaptığını söyler. Tespit edilen encoder ya da webshell ailesi, kanıtlarıyla tehdit puanı, kodun denediği bağlantılar ve komutlar, IOC'ler (URL, IP, e-posta, kripto cüzdanı, Telegram bot token'ı, Discord webhook'u).
  • Hiçbir şey yüklenmez. Sunucu yok, telemetri yok. Durum çubuğu sayfanın yaptığı her dış isteği sayar; kendin kontrol edebilirsin.

Neleri tanıyor ve çözüyor?
  • Encoder ve obfuscator'lar: YAK Pro, FOPO, PHPkoru, PHP Encoder (Free Code Protection Tool), PHPJiaMi, PHPJM, PHP LockIt!, Byterun Protector
  • Katman zincirleri: eval / assert / create_function / preg_replace /e ile base64, gzinflate, gzuncompress, str_rot13, strrev ve benzerlerinin her türlü kombinasyonu
  • goto yumakları: if / else ve while yapısına geri çevrilir
  • Dizge ve ad tabloları: $GLOBALS tabloları, FOPO tarzı $O{4} . $O[9] birleştirmeleri, hesaplanmış fonksiyon adları
  • Webshell'ler: WSO, FilesMan, c99, r57, b374k, IndoXploit, ALFA TEaM, Weevely, P.A.S., China Chopper
  • Ticari encoder'lar: ionCube, SourceGuardian, Zend Guard ve benzerleri yalnızca tanınır, çözülmez. Raporda ürün, sürüm ve gereken loader gösterilir. Bunları kırmak bilinçli olarak kapsam dışı.
10 farklı açık kaynak PHP obfuscator'ından 39 örnekle test ediliyor; 39'u da orijinaliyle aynı davranacak şekilde çözülüyor.


Ekran görüntüleri

Ana ekran: solda gizlenmiş kod, sağda temiz ve doğrulanmış çıktı


Analiz raporu: özet, tespit, tehdit puanı, sandbox davranışı, IOC'ler


Zaman çizelgesi: kodu her adımdan sonra kaydırarak izle


Telefonda da çalışıyor


Nasıl kullanılır?

Node.js 20 veya üstü yeterli:

git clone https://github.com/LLCForge/Peel-PHP.git
cd Peel-PHP
npm install
npm run dev
Sonra tarayıcıda http://localhost:5173 adresini aç, kodu yapıştır ya da .php dosyasını sürükle, Çöz tuşuna bas (Ctrl + Enter). İlk çalıştırmada gereken PHP sürümü (WebAssembly) bir kez indirilir. npm run build ile derlenen sürüm bir kez yüklendikten sonra çevrimdışı da çalışır.

Komut satırından kullanmak istersen:

node bin/peel-php.js gizli.php -o temiz.php --report rapor.json
Bütün bir klasörü (ör. uploads/) tarayıp hepsini çözme ve tehdit düzeyine göre uyarı verme de var:

node bin/peel-php.js uploads/ --out-dir cikti --report cikti/rapor.json --fail-on high
Dürüst olmak gerekirse
  • Katmanlar sandbox'ın gözlemlediği çalıştırmadan açılır. O çalıştırmanın girmediği bir dalın arkasındaki katman olduğu gibi kalır.
  • Doğru parola gelmeden hiçbir şey yapmayan bir webshell daha zayıf bir davranış kontrolünden geçer.
  • Yalnızca PHP 8.3, 7.4 ve 5.2 pakette var; sadece başka bir sürümde çalışan kod uyarı verebilir.
  • Tarayıcıdaki ilk çalıştırma sürüm başına yaklaşık 10-18 MB indirir.
Çözemediği bir örnekle karşılaşırsanız GitHub'da issue açarsanız ya da buraya yazarsanız bakarım. Örneği paylaşırken kişisel bilgileri ve şifreleri çıkarmayı unutmayın.


Bağlantı
github.com/LLCForge/Peel-PHP

PEEL ailesinin diğer üyeleri
JavaScript: github.com/LLCForge/Peel-JS
Python: github.com/LLCForge/Peel-PY
Node.js: github.com/LLCForge/Peel-NODE
Lua ve Luau: github.com/LLCForge/Peel-Lua

Projeyi beğendiyseniz GitHub'da yıldız vermeniz çok yardımcı olur.
Görüş, öneri ve hata bildirimlerinizi bekliyorum.