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 kaynakKisaca:
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.