KİŞİNİN AÇIK İZNİ ÜZERİNE ALGORİTMA KIRILMIŞ ŞİFRELEME ÇÖZÜLMÜŞTÜR @anka
aponkral adlı üyeden alıntı:
Güvenlik testi için bir talebimiz yok. İsterseniz kendiniz güvenlik testlerini yapabilirsiniz. Sonuçlarını burada paylaşabilirsiniz.


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.
Dosya ornegi:

if(!extension_loaded('phpkoru')){ exit('...'); }
\PHPkoru\PHPkoru::exec('BASE64_PAYLOAD...', 'deede9983fb57');
  • 1. arguman: sifreli payload (base64)
  • 2. arguman: version hash (loader ile uyum kontrolu)
2. Genel cozum fonksiyonu

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 kaynak
Kisaca:
Alıntı
Loader yukle -> g() RSA key / dc(payload) -> watermark temizle -> orijinal PHP
Loader icinde:
  • g($bs, $srt, $os_dc) — gomulu RSA-4096 private key uretir
  • dc($data) — decrypt eder, string doner (eval yok)
  • exec($data, $ver) — dc + eval
Kriptografi: AES-256-CBC + openssl_private_decrypt (RSA key wrap). Yardimci: base64_decode, str_rot13, convert_uudecode.

3. Loader indirme

https://cdn.phpkoru.com/loaders/phpkoru_loader_v1.0.2_lin_8.3.so
PHP 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.2
5. 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 statement
dc 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 ozet

Basic:
  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
  -> kaynak
Ozet:
Alıntı
Advanced key loader .so icinde (RSA-4096). Extension yukle, g() veya dc() ile coz. Bu postta keylerin ortasi ***** ile sansurludur; kisiyi zor durumda birakmamak icin keyler gizlenmistir.