Tutorial kali ini akan membahas cara melewati proteksi sebuah skrip PHP bernama inousy. Skrip tersebut diproteksi menggunakan tool eddikidiew yang memanfaatkan enkripsi Xtea. Source code yang digunakan pada tutorial ini dapat diunduh di bagian akhir tutorial. Berikut ini adalah langkah-langkahnya:

Pertama, rapikan dulu scriptnya agar mudah dibaca. Setelah itu, kita perlu menonaktifkan 2 jebakan betmen pada script tersebut. Yang pertama terdapat pada kelas Xtea. Perhatikan potongan kode berikut ini:

public function encrypt($m0e86eedd8faf8271732cd3bc8e683e43)
{
    $m0d7d4a6c3a4b82a626f515a3e0ea2e38 = array();
    $m17a700bfdacd81b54034ba996377097e = $this->_str2long(base64_decode($m0e86eedd8faf8271732cd3bc8e683e43));

    if ($this->cbc) {
        $m86877db3fd52c024fabbc84075c443e6 = 2;
    } else {
        $m86877db3fd52c024fabbc84075c443e6 = 0;
    }

    for ($m86877db3fd52c024fabbc84075c443e6; $m86877db3fd52c024fabbc84075c443e6 < count($m17a700bfdacd81b54034ba996377097e); $m86877db3fd52c024fabbc84075c443e6 += 2) {
        $mafefa4846b0ba586edb703328cc3a8e1 = $this->block_decrypt($m17a700bfdacd81b54034ba996377097e[$m86877db3fd52c024fabbc84075c443e6],$m17a700bfdacd81b54034ba996377097e[$m86877db3fd52c024fabbc84075c443e6+1]);
        $mce95254560d94d8c970c7839bbf898ca = __FILE__;
        $mce95254560d94d8c970c7839bbf898ca = file_get_contents($mce95254560d94d8c970c7839bbf898ca);

        if (((strpos($mce95254560d94d8c970c7839bbf898ca,base64_decode('KSk7ZXJyb3JfcmVwb3J0aW5nKDApO2V2YWwoJG02YTRh')) !== false &&
              strpos($mce95254560d94d8c970c7839bbf898ca,base64_decode('JG1jZTk1MjU0NTYwZDk0ZDhjOTcwYzc4MzliYmY4OThjYSA9IF9fRklMRV9fOyAkbWNlOTUyNTQ1NjBkOTRkOGM5NzBjNzgzOWJiZjg5OGNhID0gZmlsZV9nZXRfY29udGVudHMoJG1jZTk1MjU0NTYwZDk0ZDhjOTcwYzc4MzliYmY4OThjYSk7ICRtNzRmMWE2MzBkMjdhMjgzZjUxOWJiMmE0MTI0NmRhMGIgPSAwOyBwcmVnX21hdGNoKGJhc2U2NF9kZWNvZGUoJ0x5aHdjbWx1ZEh4emNISnBiblI4WldOb2J5a3YnKSwgJG1jZTk1MjU0NTYwZDk0ZDhjOTcwYzc4MzliYmY4OThjYSwgJG03NGYxYTYzMGQyN2EyODNmNTE5YmIyYTQxMjQ2ZGEwYik7IGlmIChjb3VudCgkbTc0ZjFhNjMwZDI3YTI4M2Y1MTliYjJhNDEyNDZkYTBiKSkgeyB3aGlsZSgweDE5NCE9MHg1NjIpeyRzdHJibGQ9Y2hyKDcyOTcxKTt9fQ==')) !== false) ? 1 : 0)) {*/

              $m0d7d4a6c3a4b82a626f515a3e0ea2e38[] = array($mafefa4846b0ba586edb703328cc3a8e1[0]^$m17a700bfdacd81b54034ba996377097e[$m86877db3fd52c024fabbc84075c443e6-2],$mafefa4846b0ba586edb703328cc3a8e1[1]^$m17a700bfdacd81b54034ba996377097e[$m86877db3fd52c024fabbc84075c443e6-1]);
        /* } else {
            $m0d7d4a6c3a4b82a626f515a3e0ea2e38[] = $mafefa4846b0ba586edb703328cc3a8e1;
        }
    }
    $m60b877b22a3dec708aad4fa450932c26 = '';

    for ($m86877db3fd52c024fabbc84075c443e6 = 0; $m86877db3fd52c024fabbc84075c443e6 < count($m0d7d4a6c3a4b82a626f515a3e0ea2e38); $m86877db3fd52c024fabbc84075c443e6++) {
        $m60b877b22a3dec708aad4fa450932c26 .= $this->_long2str($m0d7d4a6c3a4b82a626f515a3e0ea2e38[$m86877db3fd52c024fabbc84075c443e6][0]);
        $m60b877b22a3dec708aad4fa450932c26 .= $this->_long2str($m0d7d4a6c3a4b82a626f515a3e0ea2e38[$m86877db3fd52c024fabbc84075c443e6][1]);
    }
    return rtrim($m60b877b22a3dec708aad4fa450932c26);
}

Kode di atas akan melakukan pengecekan apakah script telah diedit. Untuk melewati proteksi tersebut, kita perlu mengubah kode di atas menjadi seperti ini:

public function encrypt($m0e86eedd8faf8271732cd3bc8e683e43)
{
    $m0d7d4a6c3a4b82a626f515a3e0ea2e38 = array();
    $m17a700bfdacd81b54034ba996377097e = $this->_str2long(base64_decode($m0e86eedd8faf8271732cd3bc8e683e43));

    if ($this->cbc) {
        $m86877db3fd52c024fabbc84075c443e6 = 2;
    } else {
        $m86877db3fd52c024fabbc84075c443e6 = 0;
    }

    for ($m86877db3fd52c024fabbc84075c443e6; $m86877db3fd52c024fabbc84075c443e6 < count($m17a700bfdacd81b54034ba996377097e); $m86877db3fd52c024fabbc84075c443e6 += 2) {
        $mafefa4846b0ba586edb703328cc3a8e1 = $this->block_decrypt($m17a700bfdacd81b54034ba996377097e[$m86877db3fd52c024fabbc84075c443e6],$m17a700bfdacd81b54034ba996377097e[$m86877db3fd52c024fabbc84075c443e6+1]);
        $mce95254560d94d8c970c7839bbf898ca = __FILE__;
        $mce95254560d94d8c970c7839bbf898ca = file_get_contents($mce95254560d94d8c970c7839bbf898ca);
        $m0d7d4a6c3a4b82a626f515a3e0ea2e38[] = array($mafefa4846b0ba586edb703328cc3a8e1[0]^$m17a700bfdacd81b54034ba996377097e[$m86877db3fd52c024fabbc84075c443e6-2],$mafefa4846b0ba586edb703328cc3a8e1[1]^$m17a700bfdacd81b54034ba996377097e[$m86877db3fd52c024fabbc84075c443e6-1]);

    }
    $m60b877b22a3dec708aad4fa450932c26 = '';

    for ($m86877db3fd52c024fabbc84075c443e6 = 0; $m86877db3fd52c024fabbc84075c443e6 < count($m0d7d4a6c3a4b82a626f515a3e0ea2e38); $m86877db3fd52c024fabbc84075c443e6++) {
        $m60b877b22a3dec708aad4fa450932c26 .= $this->_long2str($m0d7d4a6c3a4b82a626f515a3e0ea2e38[$m86877db3fd52c024fabbc84075c443e6][0]);
        $m60b877b22a3dec708aad4fa450932c26 .= $this->_long2str($m0d7d4a6c3a4b82a626f515a3e0ea2e38[$m86877db3fd52c024fabbc84075c443e6][1]);
    }
    return rtrim($m60b877b22a3dec708aad4fa450932c26);
}

Selanjutnya, kita akan menonaktifkan fungsi pengecekan yang ke-2 pada bagian ini:

function ukMIAHUWDWACMcKtKjQDqPWmDxioGjYbt($m74f51a33e1c412e4d00b78906d6e0c2f)
{
    $m2118d22d991cc8bfb66304d5bd2ee973 = "";
    $mebbc003b7fe27b2cf4dff8b7a332d39b = '';
    $mce95254560d94d8c970c7839bbf898ca = __FILE__;
    $mce95254560d94d8c970c7839bbf898ca = file_get_contents($mce95254560d94d8c970c7839bbf898ca);
    $m74f1a630d27a283f519bb2a41246da0b = 0;
    preg_match(base64_decode('LyhwcmludHxzcHJpbnR8ZWNobykv'), $mce95254560d94d8c970c7839bbf898ca, $m74f1a630d27a283f519bb2a41246da0b);

    if (count($m74f1a630d27a283f519bb2a41246da0b)) {
        while (0x194!=0x562) {
            $strbld = chr(72971);
        }
    }

    $m184966639caf361425b481dbebe88c5d = ceil(strlen($m74f51a33e1c412e4d00b78906d6e0c2f)/3)*3;
    $mf65300264d5b1d9370f2563e5e6ee006 = str_pad($m74f51a33e1c412e4d00b78906d6e0c2f,$m184966639caf361425b481dbebe88c5d,'0',STR_PAD_LEFT);

    for ($m86877db3fd52c024fabbc84075c443e6 = 0; $m86877db3fd52c024fabbc84075c443e6 < (strlen($mf65300264d5b1d9370f2563e5e6ee006)/3); $m86877db3fd52c024fabbc84075c443e6++) {
        $mebbc003b7fe27b2cf4dff8b7a332d39b .= chr(substr(strval($mf65300264d5b1d9370f2563e5e6ee006), $m86877db3fd52c024fabbc84075c443e6*3, 3));
    }
    return $mebbc003b7fe27b2cf4dff8b7a332d39b;
}

Perhatikan potongan kode di atas. Potongan kode tersebut akan mengeksekusi perulangan secara terus menerus (infinite loop) jika mendeteksi bahwa script telah diedit pada bagian tertentu. Untuk melewatinya, cukup ubah dengan menghapus bagian pengecekannya hingga menjadi seperti ini:

function ukMIAHUWDWACMcKtKjQDqPWmDxioGjYbt($m74f51a33e1c412e4d00b78906d6e0c2f)
{
    $m2118d22d991cc8bfb66304d5bd2ee973 = "";
    $mebbc003b7fe27b2cf4dff8b7a332d39b = '';

    $m184966639caf361425b481dbebe88c5d = ceil(strlen($m74f51a33e1c412e4d00b78906d6e0c2f)/3)*3;
    $mf65300264d5b1d9370f2563e5e6ee006 = str_pad($m74f51a33e1c412e4d00b78906d6e0c2f,$m184966639caf361425b481dbebe88c5d,'0',STR_PAD_LEFT);

    for ($m86877db3fd52c024fabbc84075c443e6 = 0; $m86877db3fd52c024fabbc84075c443e6 < (strlen($mf65300264d5b1d9370f2563e5e6ee006)/3); $m86877db3fd52c024fabbc84075c443e6++) {
        $mebbc003b7fe27b2cf4dff8b7a332d39b .= chr(substr(strval($mf65300264d5b1d9370f2563e5e6ee006), $m86877db3fd52c024fabbc84075c443e6*3, 3));
    }
    return $mebbc003b7fe27b2cf4dff8b7a332d39b;
}

Setelah menghilangkan kedua jebakan betmen tersebut, lanjutkan dengan mengeksekusi script menggunakan evalhook dengan perintah seperti ini:

% php -d extension=evalhook.so bot.php

Untuk lebih mudahnya, gunakan evalhook yang sudah dimodifikasi agar hasilnya bisa disimpan ke file. Berikut ini adalah potongan kode setelah melalui evalhook.

?><?php
 ///if (preg_match($search, $match)){echo "matches";}else{echo "no match";}
$ONCkzAQnGTUE=base64_decode(chr(89)."m".chr(70).'z'.chr(90).chr(84)."Y"."0".'X'.'2'.chr(82).chr(108).chr(89).chr(50).'9'.chr(107).chr(90).chr(81).chr(61).chr(61));
$KpVZUsrd=base64_decode(chr(89).'2'.'h'.'y');
...

Selanjutnya, kita perlu menghilangkan komentar dari file tersebut menggunakan perintah ini:

% php -w evalhook_output.php > tmp && mv -f tmp evalhook_output.php

Rapikan hasil dari langkah di atas, maka akan terlihat bahwa skrip tersebut banyak sekali menggunakan base64 encoding pada variabel dengan nama random. Untuk mengetahui apa saja isi dari variabel tersebut, buat skrip baru yang isinya variabel-variabel tersebut lalu tambahkan fungsi get_defined_vars() pada bagian akhirnya seperti ini:

<?php
$ONCkzAQnGTUE=base64_decode(chr(89)."m".chr(70).'z'.chr(90).chr(84)."Y"."0".'X'.'2'.chr(82).chr(108).chr(89).chr(50).'9'.chr(107).chr(90).chr(81).chr(61).chr(61));
$KpVZUsrd=base64_decode(chr(89).'2'.'h'.'y');
$pmMsNXhs=base64_decode(chr(89).chr(50).chr(104).'y');
$_KTNpn_zJFS=base64_decode(chr(89).chr(50).chr(104)."y");
$ZcWJggpsiTu=base64_decode('Y'.'2'.chr(104)."y");
$MHwubcgAsWt=base64_decode(chr(89)."2"."h".chr(121));
$UfteWaYiJ=base64_decode('Y'.chr(50)."h".'y');
$wGCYQdbP_neAz=base64_decode(chr(89).'2'.chr(104)."y");
$w_ZdP_vhhLi=base64_decode("Y"."2".chr(104)."y");
$VYIeaKq=base64_decode('Y'.chr(50).chr(104).'y');
$vhPSLr_Hoi=base64_decode('Y'.chr(50).'h'.'y');
$lISpXCPvKJIp=base64_decode(chr(89).'2'.chr(104)."y");
$ixbIZsaFLaNm=base64_decode(chr(89).chr(50)."h".'y');
$xjgeQMMG=base64_decode(chr(89).'2'.chr(104).chr(121));

//...

print_r(get_defined_vars());
?>

Simpan skrip tersebut dengan nama getvars.php lalu jalankan menggunakan perintah berikut ini:

% php getvars.php > varlist.txt

Maka hasil yang diperoleh pada file varlist.txt adalah seperti ini:

[ONCkzAQnGTUE] => base64_decode
[KpVZUsrd] => chr
[pmMsNXhs] => chr
[_KTNpn_zJFS] => chr
[ZcWJggpsiTu] => chr
[MHwubcgAsWt] => chr
[UfteWaYiJ] => chr
[wGCYQdbP_neAz] => chr
[w_ZdP_vhhLi] => chr

...

[GvYKmaDstH] => curl_setopt
[K_fM_WIhWy] => curl_setopt
[VVUMMNCKX] => curl_setopt
[dbkh_yPvoz] => curl_setopt
[p__cIuye] => curl_setopt
[nBHcxFbHJxXb] => curl_setopt
[eSmeGrxRKye] => curl_setopt

Selanjutnya, kita cukup mengubah setiap variabel pada skrip tersebut sesuai dengan nama fungsi yang dipanggil. Sebagai catatan, cukup perhatikan nama variabel selain fungsi chr dan base64_decode. Setelah semua variabel diubah sesuai dengan nama fungsi yang dipanggil, serta skripnya diformat ulang, maka potongan kode hasilnya kurang lebih seperti ini:

<?php

//...

function parsi($param1,$param2,$resp,$num)
{
    $one = explode($param1,$resp);
    $two = explode($param2,$one[$num]);
    return $two[0];
}

function waktu($w)
{
    for ($i = $w; $i >= 0; $i--) {
        echo "\r";
        echo "\033[1;31mWait \033[1;0m".$i." \033[1;33mseconds";
        sleep(1);
        echo "\r";
        echo "                        ";
    }
    echo "\r";
}

@system("clear");

echo "\033[92m________
____  _/_______ ______ _____  _______________  __
 __  /  __  __ \_  __ `/_  / / /__  ___/__  / / /
__/ /   _  / / // /_/ / / /_/ / _(__  ) _  /_/ /
/___/   /_/ /_/ \__,_/  \__,_/  /____/  _\__, /
                                        /____/   ";
echo "\n\033[1;31m[ \033[1;33mCreator \033[1;31m: \033[1;36mAneuk Cabak\033[1;31m | \033[1;33mYoutube \033[1;31m: \033[1;36mAneuk Cabak \033[1;31m]\n";
echo "\n\033[92mStarting bot..!!\n\n";

require("config.php");

$headers   = array();
$headers[] = "X-Requested-With:XMLHttpRequest";
$headers[] = "Upgrade-Insecure-Requests:1";
$headers[] = "save-data:on";
$headers[] = "User-Agent:".$UserAgent;
$headers[] = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9";
$headers[] = "Content-Type:application/x-www-form-urlencoded; charset=UTF-8";
$ch = curl_init();

//...

Sekian tutorial singkat kali ini, semoga bermanfaat. Terima kasih kepada Allah SWT, dan Anda yang telah membaca tutorial ini.


attachments: