aponkral adlı üyeden alıntı:
PHPkoru Advanced (v1.0.2) Decode Algoritması
Aponkral PHPkoru Advanced / phpkoru.com/advanced — loader tabanlı encoder çıktısını çözme yöntemi
Not: RSA private/public keylerin ortasi ***** ile sansurlenmistir. Kisiyi zor durumda birakmamak icin keyler gizlenmistir. Kanit icin yontem ve cikarma kodu yeterlidir; tam PEM isteyen kendi loader'indan ayni yontemle cikarabilir.
1. Basic ile farki
- Basic: Saf PHP (eval + AES-256-GCM). Extension gerekmez.
- Advanced: Native phpkoru loader (.so) sart. Zephir ile derlenmis extension decrypt eder.
if(!extension_loaded('phpkoru')){ exit('...'); }
\PHPkoru\PHPkoru::exec('BASE64_PAYLOAD...', 'deede9983fb57');- 1. arguman: sifreli payload (base64)
- 2. arguman: version hash (loader ile uyum kontrolu)
coz_advanced(dosya, loader.so):
1. Linux x86_64 + eslesen PHP surumu (ornek 8.3)
2. phpkoru_loader_v1.0.2_lin_X.Y.so yi extension olarak yukle
3. dosyadan payload = exec() 1. argumani
4. Reflection ile private dc(payload) cagir
veya g() ile RSA key alip AES-256-CBC coz
5. donen string = cozulmus kaynak
6. bastaki watermark PHP blogunu temizle
7. __DIR__xxxxxxxx -> __DIR__ duzelt
return kaynakKisaca:
Alıntı
- g($bs, $srt, $os_dc) — gomulu RSA-4096 private key uretir
- dc($data) — decrypt eder, string doner (eval yok)
- exec($data, $ver) — dc + eval
3. Loader indirme
https://cdn.phpkoru.com/loaders/phpkoru_loader_v1.0.2_lin_8.3.soPHP surumune gore 8.3 kismini degistir (7.2 ... 8.5). Mac/Windows loader yok; Linux x86_64 gerekir.
Dokuman: https://phpkoru.com/advanced
4. Key cikarma (g)
$g = new ReflectionMethod('PHPkoru\\PHPkoru', 'g');
$g->setAccessible(true);
$key = $g->invoke(null, 'base64_decode', 'str_rot13', 'openssl_decrypt');
// OpenSSLAsymmetricKey (RSA 4096)
openssl_pkey_export($key, $pem);
echo $pem;Version hash:deede9983fb57 => 1.0.25. RSA Private Key (sansurlu)
Keyler gizlenmistir — kisiyi zor durumda birakmamak icin.
-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDYctJhyeJa8SYz 9QUW2AYHvoUTGgKciF5dAve6jH0bY66A6vtnEcilX51m24MR+uwVoRrwpbmag9q5 ***** ***** ***** Wwee7Ey8yTX0bloSQzgBAoIBAQDwtAyo1Cp/73FSbcfX5jgEH0zfaulpCiEV56f3 ***** ***** ***** Fjtu1047bcINtmvZiLsSKch4AlIa+3Y= -----END PRIVATE KEY-----6. RSA Public Key (sansurlu)
-----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2HLSYcniWvEmM/UFFtgG B76FExoCnIheXQL3uox9G2OugOr7ZxHIpV+dZtuDEfrsFaEa8KW5moPauR3kKqtg ***** ***** ***** 1qWn36LpkvK5LO268Vcowc8CAwEAAQ== -----END PUBLIC KEY-----7. Hazir PHP decoder (Reflection + dc)
Not: phpkoru extension yukluyken calisir (Docker/Linux).
<?php
$src = file_get_contents('encoded.php');
preg_match("/PHPkoru::exec\('([^']+)',\s*'([^']+)'\)/", $src, $m);
$payload = $m[1];
$ref = new ReflectionMethod('PHPkoru\\PHPkoru', 'dc');
$ref->setAccessible(true);
$plain = $ref->invoke(null, $payload);
// Watermark temizle
$plain = preg_replace(
'/^<\?php \/\* [a-f0-9]+ \*\/ \?>/',
'',
$plain
);
// Encoder DIR sabitini duzelt
$plain = preg_replace('/__DIR__[a-f0-9]+/', '__DIR__', $plain);
$plain = preg_replace('/__FILE__[a-f0-9]+/', '__FILE__', $plain);
echo $plain;8. Neden exec yerine dc?exec cozulmus kodu direkt eval eder. Advanced ciktiya watermark ekler:
<?php /* 60cde40ffd84f9...e319 */ ?><?php declare(strict_types=1);Bu yuzden exec sirasinda su hata olusabilir:
strict_types declaration must be the very first statementdc sadece string dondurur; watermark temizlenip kaynak alinir.
9. Docker ile hizli kurulum (PHP 8.3)
docker run --rm --platform linux/amd64 \
-v "$PWD":/work -w /work php:8.3-cli bash -c '
ext=$(php -i | awk -F"=> " "/^extension_dir/ {print \$2; exit}" | tr -d " ")
cp loaders/phpkoru_loader_v1.0.2_lin_8.3.so "$ext/phpkoru.so"
echo "extension=phpkoru.so" > /usr/local/etc/php/conf.d/phpkoru.ini
php decode.php
'10. Basic vs Advanced ozetBasic: PHPkoru_Code blogu -> AES-256-GCM (key/iv/tag + __LINE__) -> ROT13 -> Base64 -> ROT13 -> kaynak Advanced: exec(payload, version_hash) -> phpkoru.so -> g() RSA-4096 private key -> dc() AES-256-CBC (+ RSA unwrap) -> watermarkli kaynak -> temizle -> kaynakOzet:
Alıntı
güzel proje elinize sağlık.