• You MUST read the Babiato Rules before making your first post otherwise you may get permanent warning points or a permanent Ban.

    Our resources on Babiato Forum are CLEAN and SAFE. So you can use them for development and testing purposes. If your are on Windows and have an antivirus that alerts you about a possible infection: Know it's a false positive because all scripts are double checked by our experts. We advise you to add Babiato to trusted sites/sources or disable your antivirus momentarily while downloading a resource. "Enjoy your presence on Babiato"

Decoding Request Decode a PHP and a Simple JS

BaapJaan

In the search for knowledge
Babiato Lover
Trusted Uploader
GiveAway Master
Mar 21, 2020
1,573
4,266
120
Hello Babiatos,
In Js line number 1023 and line number 2866.
and in full PHP file.

The intention of this decoding is to activate features without having a license.

Thanks.
 

Attachments

  • Archive.zip
    58.6 KB · Views: 10
try this !

Code:
namespace XV;
class Vars
{
    protected static $addonId = 'XV';
    protected static $url = "https://xenvn.com";
    protected static $key1 = "xvIsNotice";
    protected static $key2 = "xvIsLicense";
    protected static $query = "/license-check";
    protected static $addonPath = "src/addons/";
    protected static $loaded = false;
    public static function XV($return, $skipSelf = false)
    {
        if (!$skipSelf && !self::$loaded && ($return == 'key1' || $return == 'key2')) {
            self::checkHashes();
            self::$loaded = true;
        }
        $url = self::$url;
        $boardUrl = \XF::options()->boardUrl;
        $domain = @str_ireplace('www.', '', parse_url($boardUrl, PHP_URL_HOST));
        $xenvn = @str_ireplace('www.', '', parse_url($url, PHP_URL_HOST));
        $valid = false;
        $addonUrl = ($valid ? $boardUrl : $url) . self::$query;
        $array = [
            'addonId' => self::$addonId,
            'addonUrl' => $addonUrl,
            'key1' => self::$key1,
            'key2' => self::$key2,
            'valid' => $valid
        ];
        return $array[$return] ?? false;
    }
    protected static function hashTextFile($fileName, $method = 'md5')
    {
        if (file_exists($fileName)) {
            $text = file_get_contents($fileName);
            $contents = str_replace("\r", '', $text);
            return hash($method, $contents);
        }
        return null;
    }
    protected static function checkHashes()
    {
        $addonId = self::$addonId;
        $checkKey = 'xvHashesCheck';
        $time = \XF::$time;
        $checkTime = self::getCache($checkKey);
        if (!$checkTime)
            self::setCache($checkKey, $time);
        else if ($checkTime < $time - 86400) {
            $root = \XF::getRootDirectory() . '/';
            $root = str_replace('\\', '/', $root);
            $path1 = self::$addonPath . $addonId . "/Option/Verify.php";
            $hashFile1 = self::hashTextFile($root . $path1, 'sha256');
            $hash1 = 'fb7c593c90192bfd823cedb832dcabe08bd6d9f6ac914ee20c5509c329451a11';
            $path2 = self::$addonPath . $addonId . "/Service/Health.php";
            $hashFile2 = self::hashTextFile($root . $path2, 'sha256');
            $hash2 = '5e6cf37d6163fef62e0e12e221eb868050577f15df41f50d771f6edc44ee0e68';
            $path3 = self::$addonPath . $addonId . "/_data/options.xml";
            $hashFile3 = self::hashTextFile($root . $path3, 'sha256');
            $hash3 = 'c361b26c3f8998ece615a2c5b18ba22e48930c83cda719948809a62ea7751241';
            if (($hash1 && $hashFile1 && $hashFile1 != $hash1) || ($hash2 && $hashFile2 && $hashFile2 != $hash2) || ($hash3 && $hashFile3 && $hashFile3 != $hash3)) {
                self::setCache(self::$key2, 0);
                $optionRepo = \XF::app()->repository('XF:Option');
                $optionRepo->updateOptionSkipVerify("xv_license", []);
                \XF::app()->error()->logError('Detected problem when verifying XenVn add-on file!');
            }
            self::setCache($checkKey, $time);
        }
    }
    public static function getNotice()
    {
        $addonId = self::$addonId;
        $options = \XF::options();
        $url = self::XV('addonUrl', true);
        return ((self::getCache(self::$key1) || !self::getCache(self::$key2)) ||
            (!isset($options->xv_license['active']) || !$options->xv_license['active']) ||
            (stripos($url, base64_decode('eGVudm4uY29t')) === false) ||
            ($addonId !== base64_decode('WFY=')));
    }
    protected static function getHttp($user, $key)
    {
        $contents = false;
        if (!self::XV('addonUrl', true) || empty($user) || empty($key))
            return false;
        try {
            $response = \XF::app()->http()->client()->get(self::XV('addonUrl', true), ['query' => [
                'url' => urlencode(\XF::options()->boardUrl),
                'user' => $user,
                'key' => $key
            ]]);
            $contents = $response->getBody()->getContents();
            $contents = json_decode($contents, true);
        } catch (\GuzzleHttp\Exception\RequestException $e) {
            if (self::XV('valid', true))
                \XF::logException($e);
            \XF::app()->error()->logError(\XF::phrase('server_did_not_respond_in_time_try_again'));
            return false;
        }
        return $contents;
    }
    public static function getOnline()
    {
        $options = \XF::options();
        $user = $options->xv_license['user'] ?? '';
        $key = $options->xv_license['key'] ?? '';
        $contents = self::getHttp($user, $key);
        $valid1 = $contents[self::$key1] ?? 0;
        $valid2 = $contents[self::$key2] ?? 0;
        self::setCache(self::$key1, $valid1);
        self::setCache(self::$key2, $valid2);
        return $contents;
    }
    public static function getLicense($user, $key)
    {
        $contents = self::getHttp($user, $key);
        if ($contents) {
            $valid1 = $contents[self::$key1] ?? 0;
            $valid2 = $contents[self::$key2] ?? 0;
            self::setCache(self::$key1, $valid1);
            self::setCache(self::$key2, $valid2);
            return ['active' => $valid2, 'valid1' => $valid1, 'valid2' => $valid2];
        }
        return false;
    }
    public static function service($name)
    {
        $addonId = self::$addonId;
        if ($name)
            return \XF::app()->service("$addonId:$name");
        return false;
    }
    public static function repository($name)
    {
        $addonId = self::$addonId;
        if ($name)
            return \XF::app()->repository("$addonId:$name");
        return false;
    }
    public static function setCache($key, $value)
    {
        if (!$key)
            return;
        else if ($key == 'key1')
            $key = self::$key1;
        else if ($key == 'key2')
            $key = self::$key2;
        \XF::app()->simpleCache()->setValue(self::$addonId, $key, $value);
    }
    public static function getCache($key)
    {
        if (!$key)
            return false;
        else if ($key == 'key1')
            $key = self::$key1;
        else if ($key == 'key2')
            $key = self::$key2;
        return \XF::app()->simpleCache()->getValue(self::$addonId, $key);
    }
    public static function deleteCache()
    {
        return \XF::app()->simpleCache()->deleteSet(self::$addonId);
    }
    public static function getCopyright($admin)
    {
        $remove = \XF::options()->xv_mod_view['remove_copyright'] ?? true;
        if ($remove)
            return '';
        $year = date('Y', \XF::$time);
        $output = ($admin ? '<span>Community platform by XenForo<sup>®</sup></span>' : '<span href="https://xenforo.com" class="u-concealed">Community platform by XenForo<sup>®</sup> © 2010-' . $year . ' XenForo Ltd.</span>');
        if (!$admin && self::getNotice())
            $output .= "\r\n" . '<div id="xv-copyright">Developed with <a href="https://xenvn.com" title="XenVn.Com" target="_blank" class="u-concealed" rel="sponsored noopener">XenVn.Com</a> <span class="copyright">© ' . $year . '</span></div>';
        if (self::getCache(self::$key1))
            $output .= "\r\n" . 'XenVn license have an error. Please check it!';
        return $output;
    }
    public static function verifyLicense(array &$value, \XF\Entity\Option $option)
    {
        $addonId = self::$addonId;
        $check1 = self::getCache('key1');
        $check2 = self::getCache('key2');
        $valid1 = $valid2 = 0;
        $valid2_incorrect = \XF::phrase('xv_license_incorrect');
        $valid2_error = \XF::phrase('xv_license_error');
        $not_respond = \XF::phrase('server_did_not_respond_in_time_try_again');
        $isSuperAdmin = \XF::visitor()->is_super_admin ?? false;
        $option_user = $option->option_value['user'] ?? '';
        $option_key = $option->option_value['key'] ?? '';
        $option_user = trim(preg_replace('/[^a-z0-9-_.]/i', '', $option_user));
        $option_key = trim(preg_replace('/[^a-z0-9-_.]/i', '', $option_key));
        $option_active = $option->option_value['active'] ?? 0;
        $option_overlay = $option->option_value['overlay'] ?? 1;
        if (!$isSuperAdmin && $option_user && $option_key) {
            $value['user'] = $option_user;
            $value['key'] = $option_key;
            $value['active'] = $option_active;
            $value['overlay'] = $option_overlay;
            return true;
        }
        $user = $value['user'];
        $key = $value['key'];
        $url = self::XV('addonUrl');
        if (
            $check1 ||
            (stripos($url, base64_decode('eGVudm4uY29t')) === false) || ($addonId !== base64_decode('WFY='))
        ) {
            $option->error($valid2_error, $option->option_id);
            return false;
        }
        if (empty($user) || empty($key)) {
            $option->error($valid2_incorrect, $option->option_id);
            return false;
        }
        if ($option_user == $user && $option_key == $key && !$check1 && $check2) {
            $value['active'] = 1;
            $value['overlay'] = 0;
            return true;
        }
        $contents = Vars::getLicense($user, $key);
        if ($contents) {
            $value['active'] = $contents['active'];
            $valid1 = $contents['valid1'];
            $valid2 = $contents['valid2'];
        } else {
            $option->error($not_respond, $option->option_id);
            return false;
        }
        if (!$option_overlay && ($valid1 || !$valid2)) {
            $value['overlay'] = 1;
            if ($option_user)
                $value['user'] = $option_user;
            if ($option_key)
                $value['key'] = $option_key;
            return true;
        }
        if ($valid1) {
            $option->error($valid2_error, $option->option_id);
            return false;
        } else if (!$valid2) {
            $option->error($valid2_incorrect, $option->option_id);
            return false;
        }
        $value['overlay'] = 0;
        return true;
    }
}
 
try this !

Code:
namespace XV;
class Vars
{
    protected static $addonId = 'XV';
    protected static $url = "https://xenvn.com";
    protected static $key1 = "xvIsNotice";
    protected static $key2 = "xvIsLicense";
    protected static $query = "/license-check";
    protected static $addonPath = "src/addons/";
    protected static $loaded = false;
    public static function XV($return, $skipSelf = false)
    {
        if (!$skipSelf && !self::$loaded && ($return == 'key1' || $return == 'key2')) {
            self::checkHashes();
            self::$loaded = true;
        }
        $url = self::$url;
        $boardUrl = \XF::options()->boardUrl;
        $domain = @str_ireplace('www.', '', parse_url($boardUrl, PHP_URL_HOST));
        $xenvn = @str_ireplace('www.', '', parse_url($url, PHP_URL_HOST));
        $valid = false;
        $addonUrl = ($valid ? $boardUrl : $url) . self::$query;
        $array = [
            'addonId' => self::$addonId,
            'addonUrl' => $addonUrl,
            'key1' => self::$key1,
            'key2' => self::$key2,
            'valid' => $valid
        ];
        return $array[$return] ?? false;
    }
    protected static function hashTextFile($fileName, $method = 'md5')
    {
        if (file_exists($fileName)) {
            $text = file_get_contents($fileName);
            $contents = str_replace("\r", '', $text);
            return hash($method, $contents);
        }
        return null;
    }
    protected static function checkHashes()
    {
        $addonId = self::$addonId;
        $checkKey = 'xvHashesCheck';
        $time = \XF::$time;
        $checkTime = self::getCache($checkKey);
        if (!$checkTime)
            self::setCache($checkKey, $time);
        else if ($checkTime < $time - 86400) {
            $root = \XF::getRootDirectory() . '/';
            $root = str_replace('\\', '/', $root);
            $path1 = self::$addonPath . $addonId . "/Option/Verify.php";
            $hashFile1 = self::hashTextFile($root . $path1, 'sha256');
            $hash1 = 'fb7c593c90192bfd823cedb832dcabe08bd6d9f6ac914ee20c5509c329451a11';
            $path2 = self::$addonPath . $addonId . "/Service/Health.php";
            $hashFile2 = self::hashTextFile($root . $path2, 'sha256');
            $hash2 = '5e6cf37d6163fef62e0e12e221eb868050577f15df41f50d771f6edc44ee0e68';
            $path3 = self::$addonPath . $addonId . "/_data/options.xml";
            $hashFile3 = self::hashTextFile($root . $path3, 'sha256');
            $hash3 = 'c361b26c3f8998ece615a2c5b18ba22e48930c83cda719948809a62ea7751241';
            if (($hash1 && $hashFile1 && $hashFile1 != $hash1) || ($hash2 && $hashFile2 && $hashFile2 != $hash2) || ($hash3 && $hashFile3 && $hashFile3 != $hash3)) {
                self::setCache(self::$key2, 0);
                $optionRepo = \XF::app()->repository('XF:Option');
                $optionRepo->updateOptionSkipVerify("xv_license", []);
                \XF::app()->error()->logError('Detected problem when verifying XenVn add-on file!');
            }
            self::setCache($checkKey, $time);
        }
    }
    public static function getNotice()
    {
        $addonId = self::$addonId;
        $options = \XF::options();
        $url = self::XV('addonUrl', true);
        return ((self::getCache(self::$key1) || !self::getCache(self::$key2)) ||
            (!isset($options->xv_license['active']) || !$options->xv_license['active']) ||
            (stripos($url, base64_decode('eGVudm4uY29t')) === false) ||
            ($addonId !== base64_decode('WFY=')));
    }
    protected static function getHttp($user, $key)
    {
        $contents = false;
        if (!self::XV('addonUrl', true) || empty($user) || empty($key))
            return false;
        try {
            $response = \XF::app()->http()->client()->get(self::XV('addonUrl', true), ['query' => [
                'url' => urlencode(\XF::options()->boardUrl),
                'user' => $user,
                'key' => $key
            ]]);
            $contents = $response->getBody()->getContents();
            $contents = json_decode($contents, true);
        } catch (\GuzzleHttp\Exception\RequestException $e) {
            if (self::XV('valid', true))
                \XF::logException($e);
            \XF::app()->error()->logError(\XF::phrase('server_did_not_respond_in_time_try_again'));
            return false;
        }
        return $contents;
    }
    public static function getOnline()
    {
        $options = \XF::options();
        $user = $options->xv_license['user'] ?? '';
        $key = $options->xv_license['key'] ?? '';
        $contents = self::getHttp($user, $key);
        $valid1 = $contents[self::$key1] ?? 0;
        $valid2 = $contents[self::$key2] ?? 0;
        self::setCache(self::$key1, $valid1);
        self::setCache(self::$key2, $valid2);
        return $contents;
    }
    public static function getLicense($user, $key)
    {
        $contents = self::getHttp($user, $key);
        if ($contents) {
            $valid1 = $contents[self::$key1] ?? 0;
            $valid2 = $contents[self::$key2] ?? 0;
            self::setCache(self::$key1, $valid1);
            self::setCache(self::$key2, $valid2);
            return ['active' => $valid2, 'valid1' => $valid1, 'valid2' => $valid2];
        }
        return false;
    }
    public static function service($name)
    {
        $addonId = self::$addonId;
        if ($name)
            return \XF::app()->service("$addonId:$name");
        return false;
    }
    public static function repository($name)
    {
        $addonId = self::$addonId;
        if ($name)
            return \XF::app()->repository("$addonId:$name");
        return false;
    }
    public static function setCache($key, $value)
    {
        if (!$key)
            return;
        else if ($key == 'key1')
            $key = self::$key1;
        else if ($key == 'key2')
            $key = self::$key2;
        \XF::app()->simpleCache()->setValue(self::$addonId, $key, $value);
    }
    public static function getCache($key)
    {
        if (!$key)
            return false;
        else if ($key == 'key1')
            $key = self::$key1;
        else if ($key == 'key2')
            $key = self::$key2;
        return \XF::app()->simpleCache()->getValue(self::$addonId, $key);
    }
    public static function deleteCache()
    {
        return \XF::app()->simpleCache()->deleteSet(self::$addonId);
    }
    public static function getCopyright($admin)
    {
        $remove = \XF::options()->xv_mod_view['remove_copyright'] ?? true;
        if ($remove)
            return '';
        $year = date('Y', \XF::$time);
        $output = ($admin ? '<span>Community platform by XenForo<sup>®</sup></span>' : '<span href="https://xenforo.com" class="u-concealed">Community platform by XenForo<sup>®</sup> © 2010-' . $year . ' XenForo Ltd.</span>');
        if (!$admin && self::getNotice())
            $output .= "\r\n" . '<div id="xv-copyright">Developed with <a href="https://xenvn.com" title="XenVn.Com" target="_blank" class="u-concealed" rel="sponsored noopener">XenVn.Com</a> <span class="copyright">© ' . $year . '</span></div>';
        if (self::getCache(self::$key1))
            $output .= "\r\n" . 'XenVn license have an error. Please check it!';
        return $output;
    }
    public static function verifyLicense(array &$value, \XF\Entity\Option $option)
    {
        $addonId = self::$addonId;
        $check1 = self::getCache('key1');
        $check2 = self::getCache('key2');
        $valid1 = $valid2 = 0;
        $valid2_incorrect = \XF::phrase('xv_license_incorrect');
        $valid2_error = \XF::phrase('xv_license_error');
        $not_respond = \XF::phrase('server_did_not_respond_in_time_try_again');
        $isSuperAdmin = \XF::visitor()->is_super_admin ?? false;
        $option_user = $option->option_value['user'] ?? '';
        $option_key = $option->option_value['key'] ?? '';
        $option_user = trim(preg_replace('/[^a-z0-9-_.]/i', '', $option_user));
        $option_key = trim(preg_replace('/[^a-z0-9-_.]/i', '', $option_key));
        $option_active = $option->option_value['active'] ?? 0;
        $option_overlay = $option->option_value['overlay'] ?? 1;
        if (!$isSuperAdmin && $option_user && $option_key) {
            $value['user'] = $option_user;
            $value['key'] = $option_key;
            $value['active'] = $option_active;
            $value['overlay'] = $option_overlay;
            return true;
        }
        $user = $value['user'];
        $key = $value['key'];
        $url = self::XV('addonUrl');
        if (
            $check1 ||
            (stripos($url, base64_decode('eGVudm4uY29t')) === false) || ($addonId !== base64_decode('WFY='))
        ) {
            $option->error($valid2_error, $option->option_id);
            return false;
        }
        if (empty($user) || empty($key)) {
            $option->error($valid2_incorrect, $option->option_id);
            return false;
        }
        if ($option_user == $user && $option_key == $key && !$check1 && $check2) {
            $value['active'] = 1;
            $value['overlay'] = 0;
            return true;
        }
        $contents = Vars::getLicense($user, $key);
        if ($contents) {
            $value['active'] = $contents['active'];
            $valid1 = $contents['valid1'];
            $valid2 = $contents['valid2'];
        } else {
            $option->error($not_respond, $option->option_id);
            return false;
        }
        if (!$option_overlay && ($valid1 || !$valid2)) {
            $value['overlay'] = 1;
            if ($option_user)
                $value['user'] = $option_user;
            if ($option_key)
                $value['key'] = $option_key;
            return true;
        }
        if ($valid1) {
            $option->error($valid2_error, $option->option_id);
            return false;
        } else if (!$valid2) {
            $option->error($valid2_incorrect, $option->option_id);
            return false;
        }
        $value['overlay'] = 0;
        return true;
    }
}
Thanks a lot, Unfortunately, I couldn't bypass all the options that this addon provides.

Here's what I did:


PHP:
<?php
namespace XV;
class Vars
{
    protected static $addonId = 'XV';
    protected static $url = "https://xenvn.com";
    protected static $key1 = "xvIsNotice";
    protected static $key2 = "xvIsLicense";
    protected static $query = "/license-check";
    protected static $addonPath = "src/addons/";
    protected static $loaded = false;
    
    public static function XV($return, $skipSelf = false)
    {
        if (!$skipSelf && !self::$loaded && ($return == 'key1' || $return == 'key2')) {
            self::checkHashes();
            self::$loaded = true;
        }
        $url = self::$url;
        $boardUrl = \XF::options()->boardUrl;
        $addonUrl = $boardUrl . self::$query;
        $array = [
            'addonId' => self::$addonId,
            'addonUrl' => $addonUrl,
            'key1' => self::$key1,
            'key2' => self::$key2,
            'valid' => true
        ];
        return $array[$return] ?? false;
    }
    
    protected static function hashTextFile($fileName, $method = 'md5')
    {
        if (file_exists($fileName)) {
            $text = file_get_contents($fileName);
            $contents = str_replace("\r", '', $text);
            return hash($method, $contents);
        }
        return null;
    }
    
    protected static function checkHashes()
    {
        $addonId = self::$addonId;
        $root = \XF::getRootDirectory() . '/';
        $root = str_replace('\\', '/', $root);
        $path1 = self::$addonPath . $addonId . "/Option/Verify.php";
        $hashFile1 = self::hashTextFile($root . $path1, 'sha256');
        $hash1 = 'fb7c593c90192bfd823cedb832dcabe08bd6d9f6ac914ee20c5509c329451a11';
        $path2 = self::$addonPath . $addonId . "/Service/Health.php";
        $hashFile2 = self::hashTextFile($root . $path2, 'sha256');
        $hash2 = '5e6cf37d6163fef62e0e12e221eb868050577f15df41f50d771f6edc44ee0e68';
        $path3 = self::$addonPath . $addonId . "/_data/options.xml";
        $hashFile3 = self::hashTextFile($root . $path3, 'sha256');
        $hash3 = 'c361b26c3f8998ece615a2c5b18ba22e48930c83cda719948809a62ea7751241';
        if (($hash1 && $hashFile1 && $hashFile1 != $hash1) || ($hash2 && $hashFile2 && $hashFile2 != $hash2) || ($hash3 && $hashFile3 && $hashFile3 != $hash3)) {
            self::setCache(self::$key2, 0);
            $optionRepo = \XF::app()->repository('XF:Option');
            $optionRepo->updateOptionSkipVerify("xv_license", []);
            \XF::app()->error()->logError('Detected problem when verifying XenVn add-on file!');
        }
    }
    
    public static function getOnline()
    {
        return ['xvIsNotice' => 0, 'xvIsLicense' => 1];
    }
    
    public static function getLicense($user, $key)
    {
        return ['active' => 1, 'valid1' => 1, 'valid2' => 1];
    }

    public static function getNotice()
    {
        return false;
    }
    
    public static function service($name)
    {
        $addonId = self::$addonId;
        if ($name)
            return \XF::app()->service("$addonId:$name");
        return false;
    }
    
    public static function repository($name)
    {
        $addonId = self::$addonId;
        if ($name)
            return \XF::app()->repository("$addonId:$name");
        return false;
    }
    
    public static function setCache($key, $value)
    {
        if (!$key)
            return;
        else if ($key == 'key1')
            $key = self::$key1;
        else if ($key == 'key2')
            $key = self::$key2;
        \XF::app()->simpleCache()->setValue(self::$addonId, $key, $value);
    }
    
    public static function getCache($key)
    {
        if (!$key)
            return false;
        else if ($key == 'key1')
            $key = self::$key1;
        else if ($key == 'key2')
            $key = self::$key2;
        return \XF::app()->simpleCache()->getValue(self::$addonId, $key);
    }
    
    public static function deleteCache()
    {
        return \XF::app()->simpleCache()->deleteSet(self::$addonId);
    }
    
    public static function getCopyright($admin)
    {
        $remove = \XF::options()->xv_mod_view['remove_copyright'] ?? true;
        if ($remove)
            return '';
        $year = date('Y', \XF::$time);
        $output = ($admin ? '<span>Community platform by XenForo<sup>®</sup></span>' : '<span href="https://xenforo.com" class="u-concealed">Community platform by XenForo<sup>®</sup> © 2010-' . $year . ' XenForo Ltd.</span>');
        if (!$admin && self::getNotice())
            $output .= "\r\n" . '<div id="xv-copyright">Developed with <a href="https://xenvn.com" title="XenVn.Com" target="_blank" class="u-concealed" rel="sponsored noopener">XenVn.Com</a> <span class="copyright">© ' . $year . '</span></div>';
        if (self::getCache(self::$key1))
            $output .= "\r\n" . 'XenVn license have an error. Please check it!';
        return $output;
    }
    
    public static function verifyLicense(array &$value, \XF\Entity\Option $option)
    {
        return true;
    }
}
 
AdBlock Detected

We get it, advertisements are annoying!

However in order to keep our huge array of resources free of charge we need to generate income from ads so to use the site you will need to turn off your adblocker.

If you'd like to have an ad free experience you can become a Babiato Lover by donating as little as $5 per month. Click on the Donate menu tab for more info.

I've Disabled AdBlock