吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 17625|回复: 159

[调试逆向] PHP解密:zym加密 带乱码调试过程

    [复制链接]
发表于 2018-1-31 14:30 | 显示全部楼层
本帖最后由 Ganlv 于 2018-7-27 15:25 编辑

欢迎阅读我的另一篇文章:PHP解密:魔方1代 PHP加密中的VMProtect分析,文中对 本贴 73# 层 提供的文件进行了分析

案例 1

实验样本

http://www.phpjiami.com/

加密网站首页.jpg

据说“加密效果同行最高”?

http://www.phpjiami.com/phpjiami.html 随意上传一个 php 文件,然后下载加密后的文件,这就是我们要解密的文件。

加密网站.jpg

后来我发现这个“找源码加密”和“PHP加密”的加密算法是完全完全一样的 http://www.zhaoyuanma.com/phpencode.html,文中的解码程序对两个网站的免费加密通杀。

ZYM加密网站.jpg

“保证运行状态下使程序不可读,难以被还原。找源码所加密的程序,找源码网站也不能破解,切记保留备份。”

这给你牛的...你自己破解不了,我可以帮你破解。

简单分析一下

先看看加密后的文件

加密后的文件.jpg

可以看出这是一个正常的 php 文件,只不过所有的变量名都是乱码,还真亏了 php 引擎支持任意字符集的变量名,这个加密后的文件变量名的字节部都在 ASCII 范围以外,全是 0x80 以上的字符。

我们看到中间有一个 php 代码段结束标签 ?>,而他的前面还有一个 return $xxx; 来结束脚本运行,这说明结束标签后面的数据都不会被正常输出,后面极可能是源文件加密后的数据,而前面的 php 代码只是用来解密的。

调试之前的准备

这里使用的 IDE 是 VSCode(最开始我使用的是 PHPStorm,后来我发现 VSCode 的效果更好)。

首先,安装 PHP Debug 插件。

PHP_Debug_插件.jpg

然后,按照 https://xdebug.org/docs/install 的说明安装 XDebug 插件。

注意:运行未知的 php 代码还是很危险的,最好能在虚拟机上运行,真机上一定要保证你的 XDebugPHP Debug 调试插件可以正常下断点。断开网络。最好同时打开任务管理器,一旦发生未知现象(比如 CPU 占用率或磁盘占用率),或者调试断点没断下来,或者出现某些问题,立刻结束 php 进程。

代码格式化

这个代码太乱了,我们需要格式化一下代码。

最开始我用的是 PHPStorm 自带的代码格式化,格式化之后数据变了,PHPStorm 对未知字符集的支持还是比较差的。

然后我就想对 php 文件的 ASTAbstract Syntax Tree 抽象语法树)进行分析,看能不能顺便把变量名都改成可显示字符。后来想想似乎不行,因为这种代码肯定是带 eval 的,改了变量名之后,eval 的字符串中的变量名就对应不上了。

我找到了这个工具:https://github.com/nikic/PHP-Parser

首先 composer require nikic/php-parser

然后将下列代码保存到一个文件中(比如 format.php),读取下载下来的 1.php,把格式化之后的代码写入 2.php

<?php
use PhpParser\Error;
use PhpParser\ParserFactory;
use PhpParser\PrettyPrinter;
require 'vendor/autoload.php';
$code = file_get_contents('1.php');
$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
try {
    $ast = $parser->parse($code);
} catch (Error $error) {
    echo "Parse error: {$error->getMessage()}\n";
    return;
}
$prettyPrinter = new PrettyPrinter\Standard;
$prettyCode = $prettyPrinter->prettyPrintFile($ast);
file_put_contents('2.php', $prettyCode);

然后,执行 php format.php

使用这个方法格式化的 php 文件内容并没有被损坏,我们可以继续分析了。

格式化之后的代码.jpg

如果,还不行,那就只能用十六进制编辑器查找 ;} 手动替换了,添加 \r\n 了。

调试

最前面这两行我们得先注释掉,不然出了什么错误的话会莫名其妙的。

error_reporting(0);
ini_set("display_errors", 0);

保存。然后完蛋了,代码又乱了。

我们需要一个支持非可显示字符的编辑器,或者...更改显示编码,选择一个不是多字节的字符集,比如 Western (ISO 8859-1)

更改编码.jpg

现在,开始我们的调试。

在第一行下断点。执行 php 2.php 运行程序。然后单步调试,一边执行,一边注意变量的值,分析函数的执行流程。

开始调试.jpg

使用 VSCode 的调试功能,我们可以方便的查看变量的具体内容。

调试01.jpg

单步调试到这一行,似乎有些不对劲。

调试02.jpg

php_sapi_name() == 'cli' ? die() : '';

我们用命令行运行的,所以执行完这一句,肯定程序就结束了。

那就让他结束吧,我们把这一行注释掉,在他下面下断点。重新运行程序。

下面这行是就是读取当前文件,这句话没有什么问题。

$f = file_get_contents(constant('rnfzwpch'));

然后就又是验证运行环境。

if (!isset($_SERVER['HTTP_HOST']) && !isset($_SERVER['SERVER_ADDR']) && !isset($_SERVER['REMOTE_ADDR'])) {
    die();
}

注释掉,保存,重新运行。

当然,也可以通过调试控制台,执行类似 $_SERVER['HTTP_HOST'] = '127.0.0.1'; 这类指令,来让验证通过。

调试03.jpg

再看下面的代码,我想到 exe 反调试了,不得不佩服想这个方法的人。防止下断点调试的,如果下断点调试,这里就超过 100 毫秒了。

$t = microtime(true) * 1000;
eval("");
if (microtime(true) * 1000 - $t > 100) {
    die();
}

我们直接在这条语句之后下断点,让他们一连串执行完,这样就不会超过 100 毫秒了。当然,直接注释掉是最粗暴的方法。

下面的 eval 我们需要通过“单步进入”来研究,不过结果是对我们的影响不大,当然注释掉也没问题。

调试04.jpg

接下来这个就是校验数据完整性的了

!strpos(decode_func(substr($f, -45, -1)), md5(substr($f, 0, -46))) ? $undefined1() : $undefined2;

这里的 $undefined1$undefined2 都没有定义。如果验证失败,就会调用 $undefined1 会直接 Error 退出程序。而如果验证成功,虽然 $undefined2 变量不存在,但是只是一个 Warning,并没有太大问题。

decode_func 就是文件中最后一个函数,专门负责字符串解码的。

这个验证方法就是把文件尾部分解密和前面的文件主体部分的 md5 对比,这次执行肯定又不能通过。

退出程序,注释掉,再重新运行。

$decrypted = str_rot13(@gzuncompress(decode_func(substr($f, -2358, -46))));

我们找到了这个解码的关键语句了,可以看到解密之后的代码已经出来了。

调试05.jpg

到了代码的最后,终于要执行脚本了。

$f_varname = '_f_';
$decrypted = check_and_decrypt(${$f_varname});
set_include_path(dirname(${$f_varname}));
$base64_encoded_decrypted = base64_encode($decrypted);
$eval_string = 'eval(base64_decode($base64_encoded_decrypted));';
$result = eval($eval_string);
set_include_path(dirname(${$f_varname}));
return $result;

折腾了半天,还是 eval 语句。

如何把内容输出呢。直接在 $decrypted 后面加上一行 file_put_contents 就可以了。

调试06.jpg

成果

成果.jpg

通用解密程序

我们可以继续分析一下他的解密算法

解密01.jpg

算法是固定的,只是其中内联了一个秘钥,我们只要通过字符串函数截取出这个秘钥就可以了。

解密02.jpg

最后的解码程序如下。

<?php

function decrypt($data, $key)
{
    $data_1 = '';
    for ($i = 0; $i < strlen($data); $i++) {
        $ch = ord($data[$i]);
        if ($ch < 245) {
            if ($ch > 136) {
                $data_1 .= chr($ch / 2);
            } else {
                $data_1 .= $data[$i];
            }
        }
    }
    $data_1 = base64_decode($data_1);
    $key = md5($key);
    $j = $ctrmax = 32;
    $data_2 = '';
    for ($i = 0; $i < strlen($data_1); $i++) {
        if ($j <= 0) {
            $j = $ctrmax;
        }
        $j--;
        $data_2 .=  $data_1[$i] ^ $key[$j];
    }
    return $data_2;
}

function find_data($code)
{
    $code_end = strrpos($code, '?>');
    if (!$code_end) {
        return "";
    }
    $data_start = $code_end + 2;
    $data = substr($code, $data_start, -46);
    return $data;
}

function find_key($code)
{
    // $v1 = $v2('bWQ1');
    // $key1 = $v1('??????');
    $pos1 = strpos($code, "('" . preg_quote(base64_encode('md5')) . "');");
    $pos2 = strrpos(substr($code, 0, $pos1), '$');
    $pos3 = strrpos(substr($code, 0, $pos2), '$');
    $var_name = substr($code, $pos3, $pos2 - $pos3 - 1);
    $pos4 = strpos($code, $var_name, $pos1);
    $pos5 = strpos($code, "('", $pos4);
    $pos6 = strpos($code, "')", $pos4);
    $key = substr($code, $pos5 + 2, $pos6 - $pos5 - 2);
    return $key;
}

$input_file = $argv[1];
$output_file = $argv[1] . '.decrypted.php';

$code = file_get_contents($input_file);

$data = find_data($code);
if (!$code) {
    echo '未找到加密数据', PHP_EOL;
    exit;
}

$key = find_key($code);
if (!$key) {
    echo '未找到秘钥', PHP_EOL;
    exit;
}

$decrypted = decrypt($data, $key);
$uncompressed = gzuncompress($decrypted);
// 由于可以不勾选代码压缩的选项,所以这里判断一下是否解压成功,解压失败就是没压缩
if ($uncompressed) {
    $decrypted = str_rot13($uncompressed);
} else {
    $decrypted = str_rot13($decrypted);
}
file_put_contents($output_file, $decrypted);
echo '解密后文件已写入到 ', $output_file, PHP_EOL;

这个程序可以解密此网站全部免费加密的代码。

使用方法:php decrypt.php 1.php

案例 2

附件的 examples/2.php,此附件由本帖 70# 层 提供,原楼层附件中文件名为 01.php

使用 php decrypt.php examples/2.php 直接解密

案例 3

附件的 examples/3.php,此附件由本帖 70# 层 提供,原楼层附件中文件名为 02.php

使用 php decrypt.php examples/3.php 可以解密,不过解密之后得到的 3.php.decrypted.php 仍然是加密的内容。

案例3一次解密结果.jpg

好了,我们开始我们的调试。

和上面相同,去掉所有的环境监测、调试检测、文件完整性监测,最后我们来到了同样的位置,

$base64_encoded_decrypted = base64_encode($decrypted);
$eval_string = 'eval(base64_decode($base64_encoded_decrypted));';
$result = eval($eval_string);

这里的 $decrypted 就是我们上面看到的一次解密结果。

我们还需要继续跟踪二次解密。

我们观察一下 3.php.decrypted.php 的内容,对比一下调试中的变量值,这里 eval 的内容是 assert(base64_decode('......'));

案例3调试01.jpg

asserteval 差不多,都是执行一个语句,这里我们不能让他执行,我们直接把解密的内容输出出来。

$GLOBALS['???']($GLOBALS['???']('......')); 改成

file_put_contents(__DIR__ . '/3.php.decrypted.2.php', "<?php\n". base64_decode('......'));

然后保存到 3.php.decrypted.1.php,然后执行他,可以输出解密后的内容到 3.php.decrypted.2.php

案例3调试02.jpg

我们打开 3.php.decrypted.2.php,又看到了同样的场景,所以还是用和上面的同样的方法,分析得到代码为 eval(gzuncompress(base64_decode('......')));,然后改成

file_put_contents(__DIR__ . '/3.php.decrypted.4.php', "<?php\n". gzuncompress(base64_decode('......')));

保存到 3.php.decrypted.3.php 然后执行这个文件,得到 3.php.decrypted.4.php

我真是x了狗了,同一个东西玩一回就得了,还没完没了了,又是 assert(base64_decode('......'));

然后又是 eval(gzuncompress(base64_decode('......')));

案例3调试03.jpg

终于 TM 见到代码了,这也太 TM 刺激了。

格式化一下代码 php format.php 3.php.decrypted.8.php,得到了 3.php.decrypted.8.php.formatted.php

现在我们可以终止刚才的调试器了,我们修改一下原来的代码。

3.formatted.php 最后 eval 部分,改为 include '3.php.decrypted.8.php.formatted.php';

案例3调试04.jpg

再次开启调试器,单步调试。

案例3调试05.jpg

这里正好他要引入一个 config.php,这个文件本来不存在,那么就新建一个留空就行。

我正好利用了这个文件,把变量输出保存到文件里,想办法把加密后的文件中那一堆 $GLOBALS 替换去掉。

导出全局变量脚本

<?php

/** @link http://php.net/manual/zh/function.var-export.php#100302 */
function globalvars()
{
    $result = array();
    $skip = array('GLOBALS', '_ENV', 'HTTP_ENV_VARS', '_POST', 'HTTP_POST_VARS', '_GET', 'HTTP_GET_VARS', '_COOKIE', 'HTTP_COOKIE_VARS', '_SERVER', 'HTTP_SERVER_VARS', '_FILES', 'HTTP_POST_FILES', '_REQUEST', 'HTTP_SESSION_VARS', '_SESSION');
    foreach ($GLOBALS as $k => $v) {
        if (!in_array($k, $skip)) {
            $result[$k] = $v;
        }
    }
    return $result;
}
file_put_contents(__DIR__ . '/3.php.globalvars.php', "<?php\nreturn " . var_export(globalvars(), true) . ';');

然后我们就把全局变量用字符串替换的方法替换掉。

$code = file_get_contents(__DIR__ . '/examples/3.php.decrypted.8.php.formatted.php');
$globalvars = include __DIR__ . '/examples/3.php.globalvars.php';
foreach ($globalvars as $key => &$value) {
    if (is_string($value)) {
        $code = str_replace('$GLOBALS[\'' . $key . '\']', $value, $code);
    }
}

另外,有的需要解密的地方用解密函数解密出来的值替换掉,这里给出通用的复原代码。使用方法 php restore.php 3.php.decrypted.8.php.formatted.php 3.php,第一个参数是需要还原的文件(那个折腾我们好几次最后得到的文件),第二个参数是原始文件。

<?php

$input_file_1 = $argv[1];
$input_file_2 = $argv[2];
$output_file = $argv[1] . '.restore.php';

$code = file_get_contents($input_file_1);
$code2 = file_get_contents($input_file_2);
$key = find_key($code2);

// 替换函数名
$code = replace_globals_var($code, $code2, $key);

// 解析字符串
$decrypt_func_name = find_decrypt_func_name($code2);
$code = decrypt_decrypt_func($code, $decrypt_func_name, $key);

file_put_contents($output_file, $code);
echo '复原后文件已写入到 ', $output_file, PHP_EOL;

function get_globals_var($code, $var_name, $key) {
    $pos1 = strpos($code, $var_name);
    $pos2 = strpos($code, "'", $pos1) + 1;
    $pos3 = strpos($code, "'", $pos2);
    $arg1 = substr($code, $pos2, $pos3 - $pos2);
    $value = decrypt($arg1, $key);
    return $value;
}

function replace_globals_var($code, $code2, $key)
{
    $result = '';
    $pos1 = 0;
    while (false !== ($pos2 = strpos($code, '$GLOBALS', $pos1))) {
        $pos3 = strpos($code, "'", $pos2) + 1;
        $pos4 = strpos($code, "'", $pos3);
        $pos5 = strpos($code, ']', $pos4);
        $var_name = substr($code, $pos3, $pos4 - $pos3);
        $value = get_globals_var($code2, $var_name, $key);
        $search = substr($code, $pos2, $pos5 + 1 - $pos2);
        $code = str_replace($search, $value, $code);
        $pos1 = $pos2;
    }
    return $code;
}

function decrypt($data, $key)
{
    $data_1 = '';
    for ($i = 0; $i < strlen($data); $i++) {
        $ch = ord($data[$i]);
        if ($ch < 245) {
            if ($ch > 136) {
                $data_1 .= chr($ch / 2);
            } else {
                $data_1 .= $data[$i];
            }
        }
    }
    $data_1 = base64_decode($data_1);
    $key = md5($key);
    $j = $ctrmax = 32;
    $data_2 = '';
    for ($i = 0; $i < strlen($data_1); $i++) {
        if ($j <= 0) {
            $j = $ctrmax;
        }
        $j--;
        $data_2 .=  $data_1[$i] ^ $key[$j];
    }
    return $data_2;
}

function find_key($code)
{
    // $v1 = $v2('bWQ1');
    // $key1 = $v1('??????');
    $pos1 = strpos($code, "('" . preg_quote(base64_encode('md5')) . "');");
    $pos2 = strrpos(substr($code, 0, $pos1), '$');
    $pos3 = strrpos(substr($code, 0, $pos2), '$');
    $var_name = substr($code, $pos3, $pos2 - $pos3 - 1);
    $pos4 = strpos($code, $var_name, $pos1);
    $pos5 = strpos($code, "('", $pos4);
    $pos6 = strpos($code, "')", $pos4);
    $key = substr($code, $pos5 + 2, $pos6 - $pos5 - 2);
    return $key;
}

function find_decrypt_func_name($code)
{
    // function decrypt_func($arg1, $arg2 = '')
    // ...
    // $v1 = $v2('bWQ1');
    $pos1 = strpos($code, "('" . preg_quote(base64_encode('md5')) . "');");
    $pos2 = strrpos(substr($code, 0, $pos1), 'function ');
    $pos2 = $pos2 + strlen('function ');
    $pos3 = strpos($code, '(', $pos2);
    $decrypt_func_name = substr($code, $pos2, $pos3 - $pos2);
    return trim($decrypt_func_name);
}

function decrypt_decrypt_func($code, $decrypt_func_name, $key)
{
    $result = '';
    $pos1 = 0;
    while (false !== ($pos2 = strpos($code, $decrypt_func_name, $pos1))) {
        $pos3 = strpos($code, "'", $pos2) + 1;
        $pos4 = strpos($code, "'", $pos3);
        $pos5 = strpos($code, ")", $pos4);
        $arg1 = substr($code, $pos3, $pos4 - $pos3);
        $value = decrypt($arg1, $key);
        $search = substr($code, $pos2, $pos5 + 1 - $pos2);
        $code = str_replace($search, var_export($value, true), $code);
        $pos1 = $pos2;
    }
    return $code;
}

成果

案例3成果.jpg

所以说 VIP 的加密的确比免费加密要强。不过这种加密纯属恶心人的,没什么用。

恢复这个文件就比较麻烦了,先使用 decrypt.php 解密,然后手动不断地一层一层剥皮(其实也可以用脚本做),最后用 restore.php 还原函数名和字符串。

eval 劫持

参考 php 官网上的 Hook 函数的过程:http://php.net/manual/de/function.override-function.php#50821

我们知道这类加解密肯定要经过 eval 这一步的,我们 Hook 掉原始的 eval 函数,然后把参数提取出来就可以了。

此方法并不安全,因为并不清楚 eval 的内容

想到 eval 劫持之后,我才知道这句话是为了防止 eval 劫持的。

$t = microtime(true) * 1000;
eval("");
if (microtime(true) * 1000 - $t > 100) {
    die();
}

新建一个文件,写入以下内容。(这个需要安装 APD 插件,不过并没有现成的 Windows 版的,我只是在纸上谈兵罢了。)

<?php
/** @link http://php.net/manual/de/function.override-function.php#50821 */
rename_function('eval', 'original_eval');
function override_eval($code_str){
    if ($code_str) {
        /** @link http://www.php.net/manual/en/features.commandline.php#94924 */
        echo 'Hook eval', PHP_EOL;
        echo '函数调用栈:', PHP_EOL;
        debug_print_backtrace();
        echo '执行代码', PHP_EOL;
        echo $code_str, PHP_EOL;
        // 调用系统函数暂停
        passthru('pause');
    }
    return original_eval($code_str);  
}
override_function('eval', '$code_str', 'return override_eval($code_str);');

// 同理我们 Hook 掉 php_sapi_name();
rename_function('php_sapi_name', 'original_php_sapi_name');
override_function('php_sapi_name', '', 'return "cgi-fcgi";');

include '1.php';

有个类似的 runkit 插件,最高支持 php 5.6。懒得装了,也就没试。

总结

  • php 这种动态解释语言还想加密?做梦去吧。不过混淆还是有可能的。
  • 这个代码中的暗桩挺有意思,算是学到了点知识。
  • php 这种东西为什么要加密?php 的开源社区多么庞大。

附录

代码赏析

<?php

// 先把这两行去掉,防止出现什么问题,我们还什么都不知道。
// error_reporting(0);
// ini_set("display_errors", 0);

if (!defined('msvigqgq')) {
    define('msvigqgq', __FILE__);

    if (function_exists('func2') == false) {
        // 第一个函数返回 'base64_decode' ,这个函数不依赖其他任何函数,单纯地返回一个字符串 'base64_decode'。
        function func1()
        {
            $v1 = '6f6e66723634';
            $v2 = 'pa';
            $v3 = '7374725f';
            $v4 = 'H' . '*';
            $v2 .= 'ck'; // $v2 = 'pack';
            $v1 .= '5f717270627172'; // $v1 = '6f6e667236345f717270627172';
            $v3 .= '726f743133'; // $v3 = '7374725f726f743133';
            // $v5 = $v2($v4, $v3);
            $v5 = pack('H*', '7374725f726f743133');
            // $v5 = 'str_rot13';
            // $v6 = $v5($v2($v4, $v1));
            $v6 = str_rot13(pack('H*', '6f6e667236345f717270627172'));
            // $v6 = 'base64_decode';
            return $v6;
        }

        // 第二个函数接受两个参数,要注意第一个参数还是一个引用参数。
        function func2(&$arg1, $arg2)
        {
            // 第一句是令一堆变量等于 func4
            // $v1 - $v5 都使用 func4 解码一个字符串,结果如下
            $v1 = 'str_rot13';
            $v2 = 'strrev';
            $v3 = 'gzuncompress';
            $v4 = 'stripslashes';
            $v5 = 'explode';
            // $v6 = $v1($v2($v3($v4(func4('??????')))));
            // $v6 = str_rot13(strrev(gzuncompress(stripslashes(func4('??????')))));
            $v6 = ',chr,addslashes,rand,gzuncompress,assert_options,assert,file_get_contents,substr,unpack,constant,strpos,create_function,str_rot13,md5,set_include_path,dirname,preg_replace,base64_encode,base64_decode,';
            // $v7 = $v5($v6);
            // $v7 = explode($v6);
            $v7 = array(
                0 => "",
                1 => "chr",
                2 => "addslashes",
                3 => "rand",
                4 => "gzuncompress",
                5 => "assert_options",
                6 => "assert",
                7 => "file_get_contents",
                8 => "substr",
                9 => "unpack",
                10 => "constant",
                11 => "strpos",
                12 => "create_function",
                13 => "str_rot13",
                14 => "md5",
                15 => "set_include_path",
                16 => "dirname",
                17 => "preg_replace",
                18 => "base64_encode",
                19 => "base64_decode",
                20 => "",
            );
            $arg1 = $v7[$arg2];
            // 看到这里知道了,这个函数就是用来需要用的提取函数名的
        }

        // 第三个函数被主程序调用了
        // 不过分析之后发现这个 $arg1 参数并没有用到
        // 这个函数的前半部分是防止调试
        // 后半部分是提取后面加密的代码
        function func3($arg1)
        {
            global $_v1, // $_v1 = 'file_get_contents';
            $_v3, // $_v3 = 'substr';
            $_v4, // $_v4 = 'assert';
            $_v5, // $_v5 = 'assert_options';
            $_v6, // $_v6 = 'unpack';
            $_v7, // $_v7 = 'constant';
            $_v8, // $_v8 = 'preg_replace';
            $_v9, // $_v9 = 'base64_encode';
            $_v10, // $_v10 = 'gzuncompress';
            $_v11, // $_v11 = 'create_function';
            $_v12, // $_v12 = 'strpos';
            $_v13, // $_v13 = 'addslashes';
            $_v14, // $_v14 = 'str_rot13';
            $_v15, // $_v15 = 'md5';
            $_v16, // $_v16 = 'set_include_path';
            $_v17; // $_v17 = 'dirname';
            // 这里有一堆变量等于 func4,然后用他们解码得到 $v1 - $v5
            $v1 = 'php_sapi_name';
            $v2 = 'die';
            $v3 = 'cli';
            $v4 = 'microtime';
            $v5 = '1000';
            // $v1() == $v3 ? $v2() : '';
            // 这句话在调试的时候需要注释掉
            php_sapi_name() == 'cli' ? die() : '';
            // file_get_contents(constant(func4('??????')));
            $v7 = file_get_contents(__FILE__);
            // $v8 = $v4(true) * $v5;
            $v8 = microtime(true) * 1000;
            eval("");
            // if ($v4(true) * $v5 - $v8 > 100) {
            // 这里是防止下断点调试的,下断点调试,这里就超过 100 毫秒了,直接注释掉
            if (microtime(true) * 1000 - $v8 > 100) {
                // $v2();
                die();
            }
            // eval(func4('??????'));
            eval('if(strpos(__FILE__, msvigqgq) !== 0){$exitfunc();}');
            // $_v12(func4($_v3($v7, func4('??????'), func4('??????'))), $_v15($_v3($v7, func4('??????'), func4('??????')))) ? $v9() : $v10;
            // 这里的 $v9 和 $v10 都没有定义,如果验证失败,就会调用 $v9 会直接出错退出程序
            // 而如果验证成功 $v10 变量不存在则没问题
            // 验证方法就是把文件尾部分解密和前面的文件主体部分的md5对比,直接注释掉
            !strpos(func4(substr($v7, -45, -1)), md5(substr($v7, 0, -46))) ? $v9() : $v10;
            // 这两个数值是通过 func4 解码得到的
            $v11 = '-2586';
            $v12 = '-46';
            // $v12 = $_v14(@$_v10(func4(substr($v7, $v11, $v12))));
            $v12 = str_rot13(@gzuncompress(func4(substr($v7, $v11, $v12))));
            return $v12;
        }

        // 第四个函数有点复杂,这是一个解码函数,用的是异或算法解密,所有调用 func4 的位置都没有提供 $arg2
        function func4($arg1, $arg2 = '')
        {
            $v1 = 'base64_decode';
            // $v2 - $v4 通过 base64_decode 解码得到
            $v2 = 'ord';
            $v3 = 'strlen';
            $v4 = 'chr';
            // $arg2 = !$arg2 ? $v2('?') : $arg2;
            // $arg2 = !$arg2 ? 136 : $arg2;
            $arg2 = 136;
            // 这里 $v5 不存在,所以 $v6 = null;
            $v6 = $v5;
            // for (; $v6 < $v3($arg1); $v6++) {
            for (; $v6 < strlen($arg1); $v6++) {
                // $v7 .= $v2($arg1[$v6]) < $v2('?') ? $v2($arg1[$v6]) > $arg2 && $v2($arg1[$v6]) < 245 ? $v4($v2($arg1[$v6]) / 2) : $arg1[$v6] : '';
                $v7 .= ord($arg1[$v6]) < 245 ? ord($arg1[$v6]) > $arg2 && ord($arg1[$v6]) < 245 ? chr(ord($arg1[$v6]) / 2) : $arg1[$v6] : '';
            }
            // $v8 = $v1($v7);
            $v8 = base64_decode($v7);
            $v9 = 'md5'; // $v9 通过 base64_decode 解码得到
            $v6 = $v5;
            // $arg2 = $v9('8_Q.L2');
            // $arg2 = md5('8_Q.L2');
            $arg2 = 'fac02565267d815643cecee75a16c7bd';
            // $v10 = $ctrmax = $v3($arg2);
            // $v10 = $ctrmax = strlen($arg2);
            $v10 = $ctrmax = 32;
            // for (; $v6 < $v3($v8); $v6++) {
            for (; $v6 < strlen($v8); $v6++) {
                $v10 = $v10 ? $v10 : $ctrmax;
                $v10--;
                $v11 .= $v8[$v6] ^ $arg2[$v10];
            }
            return $v11;
        }
    }
}

global $_v1, // $_v1 = 'file_get_contents';
$_v2, // $_v2 = 'chr';
$_v3, // $_v3 = 'substr';
$_v4, // $_v4 = 'assert';
$_v5, // $_v5 = 'assert_options';
$_v6, // $_v6 = 'unpack';
$_v7, // $_v7 = 'constant';
$_v8, // $_v8 = 'preg_replace';
$_v9, // $_v9 = 'base64_encode';
$_v10, // $_v10 = 'gzuncompress';
$_v11, // $_v11 = 'create_function';
$_v12, // $_v12 = 'strpos';
$_v13, // $_v13 = 'addslashes';
$_v14, // $_v14 = 'str_rot13';
$_v15, // $_v15 = 'md5';
$_v16, // $_v16 = 'set_include_path';
$_v17; // $_v17 = 'dirname';
// 然后一堆变量等于 func2
if (!$_v1) {
    // 使用 func2 用传递引用变量的方法赋值,简化之后如下
    $_v1 = 'file_get_contents';
    $_v3 = 'substr';
    $_v6 = 'unpack';
    $_v10 = 'gzuncompress';
    $_v11 = 'create_function';
    $_v12 = 'strpos';
    $_v13 = 'addslashes';
    $_v14 = 'str_rot13';
    $_v15 = 'md5';
    $_v16 = 'set_include_path';
    $_v17 = 'dirname';
    $_v8 = 'preg_replace';
    $_v9 = 'base64_encode';
    $_v7 = 'constant';
    $_v5 = 'assert_options';
    $_v4 = 'assert';
    $_v2 = 'chr';
    $v1 = 'rand';
}
// 一堆变量等于 func4,然后用 func4 解码
$v2 = '_f_';
$v3 = func3(${$v2});
// $_v16($_v17(${$v2}));
set_include_path(dirname(${$v2}));
// $v4 = $_v9($v3);
$v4 = base64_encode($v3);
// $v5 = func4('??????');
// 解密之后的原文不是 $v4,这里是翻译之后的
$v5 = 'eval(base64_decode($v4));';
// $v5 = $_v8(func4('??????'), $v5, func4('??????'));
// mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
// PCRE 修饰符 e (PREG_REPLACE_EVAL)
// Warning: This feature was DEPRECATED in PHP 5.5.0, and REMOVED as of PHP 7.0.0.
// If this deprecated modifier is set, preg_replace() does normal substitution of backreferences in the replacement string, evaluates it as PHP code, and uses the result for replacing the search string. Single quotes, double quotes, backslashes (\) and NULL chars will be escaped by backslashes in substituted backreferences.
// 换句话说 preg_replace 如果带 e 的话,第一步,正常地进行正则表达式替换(反向引用也会被正常替换,就是完全正常的正则替换),第二步,把结果 eval 作为最终结果
// 简而言之 $v5 = eval($v5);
$v5 = preg_replace('/0dcaf9/e', $v5, '0dcaf9');
// 把上述几步统一一下 $v5 = eval(func3($_f_));
// $_v16($_v17(${$v2}));
set_include_path(dirname(${$v2}));
// 把解码之后的文件运行结果返回
return $v5;

关于 Zend 加密

有回帖提到 Zend 加密,我简单的看了一下 Zend 的官网,发现了这样一篇官方的声明:http://forums.zend.com/viewtopic.php?f=57&t=2242

官方也声明,代码逻辑仍是完整的,只是变量名、类名等经过了混淆,只是更加难以理解了。

英文原文 中文翻译(我自己翻译的)
Zend Guard and "decoding tools" Zend Guard和“解码工具”
Post by kentatzend on Thu Sep 03, 2009 6:04 pm 由 kentatzend 发布于 2009年9月3日星期四下午6:04
People are often concerned about various technologies that exist that claim to reverse the protection provided by Zend Guard. We thought it was important to address it here. 人们经常关心那些宣称能够逆向 Zend Guard提供的保护的各种技术。我们认为必须在此声明。
Zend Guard provides some of the best technology available to protect applications from reverse engineering but Zend has never claimed that Zend Guard is impervious to reverse engineering. Given enough time and a determined hacker, any obfuscation technology can be broken. This has been true since the first hacker decompiled binary machine code. Zend Guard 提供了一些可用于保护应用程序免受逆向工程的最佳技术,但是 Zend 从未声称 Zend Guard 对不会受逆向影响。给定足够的时间和一个坚定的黑客,任何混淆技术都可以被打破。自从第一个黑客反编译二进制机器码以来,情况就是如此。
The first level of protection is encoding. During encoding the PHP source code is converted to a binary format that is used at runtime by the PHP engine in conjunction with Zend Optimizer. Only the encoded files are deployed and your original source code remains secured which prevents your application from being read by the casual observer. Unfortunately technologies do exist that will allow encoded files to be decoded. Due to the open source nature of PHP there is virtually no way to prevent a person from hacking at the PHP engine code to intercept the bytecode after it has been decoded for execution. 第一级保护是编码。在编码过程中,PHP 源代码被转换成 PHP 引擎和 Zend  优化器一起使用的二进制格式。只有编码的文件被部署(到服务器上),并且原始的源代码保持安全,这阻止了偶然的观察者读取你的应用程序。不幸的是技术确实存在,将允许编码的文件被解码。由于 PHP 的开源特性,实际上没有办法阻止一个人在 PHP 引擎代码中窃取字节码,并在解码后执行。
The second level of protection is obfuscation. During obfuscation the encoded files are further processed to obscure the names of classes, methods, variables and other items in the code. Obfuscation of names cannot be automatically reversed without a key that only exists on your system. However, it is still possible from someone willing to spend enough time to figure out what is going. It's a lot harder with variable names like XsddR2245as and class names like wwEgg33k55jsc but it is not impossible. 第二级保护是混淆。在混淆处理过程中,编码文件被进一步处理,以隐藏代码中类,方法,变量和其他项的名称。如果没有只存在于您的系统上的密钥,混淆名称将无法自动逆转。然而,对于那些愿意花费足够的时间来弄清楚(代码)做了什么的人仍然是可能的。有像 XsddR2245as 这样的变量名和像 wwEgg33k55jsc 这样的类名是更困难的,但这不是不可能的。
So while Zend Guard can make the job of someone wanting to steal your code/IP harder, ultimately your protection has to be provided by your end user license agreement (EULA) and whatever remedies it provides for you and your customers in the event of a legal dispute. 所以,尽管 Zend Guard 可以让想要盗取代码 / IP 的人的工作变得更加困难,但是最终您的保护必须由您的最终用户许可协议(EULA)提供,并且必须由您提供给您和您的客户的任何补救措施法律纠纷。
Kent Mitchell Kent Mitchell
Director, Product Management 总监,产品管理
kentatzend kentatzend
Posts: 1778 发布帖子:1778
Joined: Thu Dec 11, 2008 1:08 pm 加入时间:星期四2008年12月11日下午1:08



破解用到的代码.zip (271.46 KB, 下载次数: 201)

点评

phpjm免费版的加密虽然网上有免费的破解工具但是还要点个赞  发表于 2018-2-1 13:46

免费评分

参与人数 92吾爱币 +96 热心值 +90 收起 理由
Cions + 1 + 1 我很赞同!
设为主页 + 1 + 1 谢谢@Thanks!
古曼童丶 + 1 + 1 想学习PHP破解源码-,
willydong + 1 + 1 学习了,写的很受用。
ohto + 1 + 1 我很赞同!
ningzhonghui + 1 + 1 谢谢@Thanks!
yunniang1973 + 1 + 1 谢谢@Thanks!
Akesudia + 1 + 1 用心讨论,共获提升!
半世流离 + 1 + 1 我很赞同!
静叶流云 + 1 + 1 用心讨论,共获提升!
Intro + 1 + 1 用心讨论,共获提升!
daydream + 1 + 1 我很赞同!
iamcjsyr + 1 + 1 谢谢@Thanks!
人生海海 + 1 + 1 用心讨论,共获提升!
?﹏從此沉默 + 1 我很赞同!
flyk + 1 + 1 楼主有空可以分析下微擎的混淆加密
fgpgy + 1 + 1 我很赞同!
530393321 + 1 + 1 谢谢@Thanks!
黑腩子 + 1 + 1 用心讨论,共获提升!
ptlantu + 1 + 1 谢谢@Thanks!
王娜娜 + 1 + 1 谢谢@Thanks!
loooooooong + 1 + 1 用心讨论,共获提升!
绿色吧资源 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
UserXCH + 1 + 1 我很赞同!
cqc520 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
badboysky + 1 + 1 热心回复!
oldman + 1 膜拜大佬,感谢分享
gm188 + 1 + 1 虽然看不懂,但还是很欣赏也很享受这样的过程。感谢分享!!!
malno + 1 + 1 谢谢@Thanks!
1208977152 + 1 + 1 我很赞同!
泡泡ooO + 1 + 1 鼓励转贴优秀软件安全工具和文档!
xiaopangpang + 1 + 1 分析很到位 厉害 !!!!
52小星星 + 1 + 1 热心回复!
ak7777 + 1 + 1 谢谢@Thanks!
hellopojie + 1 + 1 我很赞同!牛逼
xyuetao + 1 + 1 用心讨论,共获提升!
gibtoyea + 1 + 1 我很赞同!
f4cku + 1 + 1 大佬加油,hello world
hellofuture + 1 + 1 我很赞同!
msnmajia + 1 + 1 谢谢@Thanks!
Ginkgogogo + 1 + 1 鼓励转贴优秀软件安全工具和文档!
吾爱丶筱豪 + 1 + 1 谢谢@Thanks!
yangkaixin + 1 + 1 如果我有 你厉害就好了
DevinCc + 1 + 1 热心回复!
孟坤软件 + 2 + 1 什么时候才能像你一样优秀~
森林生灵 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
流水 + 1 + 1 分析的很好,对别人的提问回答也很积极
vippp + 1 + 1 这种php解密的资料似乎很少呀,谢谢
兔子爱吃香蕉皮 + 1 + 1 我很赞同!
phper + 1 + 1 谢谢@Thanks!
tomcath + 1 + 1 学习了
Mrshenl + 1 + 1 谢谢@Thanks!
一零八八 + 1 + 1 热心回复!
来一发呗 + 1 + 1 谢谢@Thanks!
金黄的香蕉丶 + 1 + 1 老哥你让人家钱都没得赚了,差评! 滑稽
Allen7 + 1 + 1 用心讨论,共获提升!
qq20036 + 3 + 1 学习了!
loveying520 + 1 + 1 谢谢@Thanks!
qzr + 1 + 1 用心讨论,共获提升!
statue + 1 + 1 谢谢@Thanks!
fqfawsy + 1 + 1 厉害!
redapple2015 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
洛克公园 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
dongxie + 1 + 1 我很赞同!
heihei1314 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
denymz + 1 + 1 谢谢@Thanks!
liuman02 + 1 + 1 感谢分享。
mmji + 2 + 1 楼主好顶赞!学习了~求脸熟~
斯杰 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
鸡儿在学习 + 1 + 1 谢谢@Thanks!
1094196719 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
雾落尘 + 1 + 1 谢谢@Thanks!
zy1234 + 1 + 1 谢谢@Thanks!
黑的思想 + 2 + 1 用心讨论,共获提升!
kk1212 + 1 分析的非常的细,精彩!
luogan129 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wanghai + 1 + 1 我很赞同!
wtm370 + 1 + 1 谢谢@Thanks!
一杯柠檬苏打 + 1 + 1 谢谢@Thanks!
ripples + 1 + 1 谢谢@Thanks!
sunbeat + 2 + 1 上次研究个php混淆的代码,一直没啥思路,看到这个,受益匪浅。perl的我研.
yifsky + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lonehsigle + 1 + 1 神一般的大佬
塞北的雪 + 1 + 1 VSC的调试功能看起来比phpstorm好多了
610100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
iteamo + 1 + 1 热心回复!
索马里的海贼 + 1 + 1 造福人类!
june_fj + 1 + 1 谢谢@Thanks!
ding80759 + 1 + 1 谢谢@Thanks!
moda + 1 + 1 牛的一批,所有币都给你
kon88 + 1 厉害了我的哥!
ruhui + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-2-1 16:56 | 显示全部楼层
Ganlv 发表于 2018-2-1 15:37
你用附件传,帖子直接贴代码显示全是乱码。

楼主你好
非常感谢回复
附件是原版的文件
用你的解密文件无法直接解密
提示gzuncompress data error

其中01.php
我把 return str_rot13(gzuncompress($data_2));改成return str_rot13($data_2);
解密成功

02.php
这么操作后,文件是另一种加密状态
?><?php $GLOBALS['垾ッ闹斆置謹嬛斨廉謰缷哪掷編']($GLOBALS['芝龐弥谬嬛斄翑脣芝廄巿ゥ妹']('这里是base64加密省略.....

1.rar

62.93 KB, 下载次数: 21, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Ganlv + 1 + 1 已经处理,感谢您的支持!

查看全部评分

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-2-3 13:16 | 显示全部楼层
楼主能解了这个文件就可以当神仙了
后缀改php
123.txt (384.47 KB, 下载次数: 28)

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Ganlv + 1 + 1 结尾有一篇关于 Zend Guard 的文章,这个并不是没办法破解,只是让破解的人.

查看全部评分

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

 楼主| 发表于 2018-2-1 16:52 | 显示全部楼层
流水 发表于 2018-2-1 16:23
接下来这个就是校验数据完整性的了
!strpos(decode_func(substr($f, -45, -1)), md ...

调用未定义变量的函数会触发错误,

Uncaught Error: Function name must be a string

如果error_reporting(0);就悄无声息地退出了。

你可以你可以试试以下代码,

[PHP] 纯文本查看 复制代码
<?php
error_reporting(0);
2 > 1 ? $undefined1() : $undefined2;
echo 'foo';


会不会输出 foo 。

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
jane35622 + 1 + 1 123.txt好像被解密网站识别为魔方加密
流水 + 1 + 1 热心回复!

查看全部评分

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-2-1 13:03 | 显示全部楼层
本帖最后由 msnmajia 于 2018-2-1 13:15 编辑
Ganlv 发表于 2018-2-1 10:56
如果只是为了解密php脚本就没必要学这个了,这个大概是进阶的php调试,我自己开发php的时候都用不到。

...

楼主你好
请问,出现以下提示怎么处理?

Warning: gzuncompress(): data error in D:\phpStudy\WWW\decrypt.php on line 73
解密后文件已写入到 000.decrypted.php

000.decrypted.php 是空文件

line73是
$decrypted = str_rot13(gzuncompress(decrypt($data, $key)));

==================
补充:用楼主提供的测试文件1.php能顺利解密
但是对以下这个文件不行
[PHP] 纯文本查看 复制代码
<?php /*  PHP Encode by  http://Www.PHPcaiji.Com/ */error_reporting(0);ini_set("display_errors", 0);if(!defined('nfepezjj')){define('nfepezjj',__FILE__);if(!function_exists("溍陳嵷?)){function 溍陳嵷?&$栶懀浺鬁,$娻短櫹?{$箿&#63733;&#59265;柳諢=$綐鞜ㄑ?$炞抻浳?$喤园砗惍?$畴咅鋲='浦鄼満';$&#59292;房蛎罘拍=$箿&#63733;&#59265;柳諢('S諶L腢芆R1MK');$緵榭颞=$綐鞜ㄑ?'S諶LQFAX');$溇娳&#59297;駨?$炞抻浳?'X粥MXFYOX蠮LXEBF');$戇悺$邏虫?$喤园砗惍?'S諶LW0USX頝KUVZF');$撍威ウ=$喤园砗惍?'XE蠮X剞FV?=');$栟勴囤??$&#59292;房蛎罘拍($緵榭颞($戇悺$邏虫?$畴咅鋲('FUJIUEUTQ?ND0FQCF蠵Q秩VQQMRPQVURAQNXB谼E?AU0鑈滦VBB1轛QU領V蝂GR痂EBQ0B男BHC朽DVE?BE鑇FQ菶G?RCF5RU糌SBFY耉豈UBBJQC諹9EVR腝钇TFVZ腢VAGVU5蔠F1RAFYBQB郟QQ預A1豋U頤FXF1XT蜼蔝U鑆VANDPV5LR2諹T蠽DG谾WBBUJQ?EG餠AGVYHEV9WV?TAFEUX剜R翾FSEVZQWR0EBRBUAU預E1J萖BZPSFFXV鹬HQR忍V0郠F0YNHFNCQU4='))));$纪楔駟&#59487;鸂?$撍威ウ(',',$栟勴囤??;$栶懀浺鬁=$纪楔駟&#59487;鸂鸞$娻短櫹縘;}function ヤ佲($渝低倜?{global$唉剣鋼?$愱玻綊?$灒吪帤儶,$肖啅嚬淊,$艍寿垼,$潼耩,$鲜撉汨,$&#59335;郸乏径?$澇苒罘,$铂軕*袘,$株倸螏顣?$孤凳馋〔?$皰螕淃?$己箦┸茬,$&#59329;勤&#59347;,$涵恙貛?$箿&#63733;&#59265;柳諢=$綐鞜ㄑ?$炞抻浳?$喤园砗惍?$畴咅鋲=$&#59398;吋軔?$笓?漠冰?$纫熛侩畤晁?$嚙Ⅸ伵?$近埡鏁害=$案蒎鞖&#59289;??$⑵底撹?$と械伤皯帯?$壟&#63733;途シ=$够匕髫愍弋?'浦鄼満';$帽耙煕?$箿&#63733;&#59265;柳諢('SV蠮腢YAQ铊赩1J腁?=');$靹奚甩?$箿&#63733;&#59265;柳諢('XV仄');$埉撒迷?$箿&#63733;&#59265;柳諢('W仞Q');$入┑疥镗囏?$箿&#63733;&#59265;柳諢('VF芈QF轛W??);$罉髻龔?$箿&#63733;&#59265;柳諢('CAAJA?=');$珘棧枛&#63733;殳陯=$箿&#63733;&#59265;柳諢('WEJ蔝Q==');$樆鳒蓼?$箿&#63733;&#59265;柳諢('WEJ蔙A==');$洸廂敿泐?$箿&#63733;&#59265;柳諢('芖R鑉谵嗵DF?);$空松皰桔?$箿&#63733;&#59265;柳諢('萝V鋃HA裟CN9蘔E=');$剷徸荟拡?$箿&#63733;&#59265;柳諢('?V0蘔E帜CN9蘔E=');$帽耙煕?)==$埉撒迷?$靹奚甩?):'';$ぱ脥埇辏?$唉剣鋼?$潼耩($箿&#63733;&#59265;柳諢('V1Z芉谹腤Q?')));if(!isset($_SERVER[$洸廂敿泐骫)&&!isset($_SERVER[$空松皰桔籡)&&!isset($_SERVER[$剷徸荟拡刔)){$靹奚甩?);};$珘棧枛&#63733;殳陯=$入┑疥镗囏?true)*$罉髻龔?eval("");if(($入┑疥镗囏?true)*$罉髻龔?$珘棧枛&#63733;殳陯)>100){$靹奚甩?);}eval($箿&#63733;&#59265;柳諢('UFYRQUETQ?KEW疣IH4烊W剞HUINBFQSU鹞JWR頡Q14EEA帜T諺WG谺NVUMIVE鎆DU?'));!$株倸螏顣?$够匕髫愍弋?$愱玻綊?$ぱ脥埇辏?$綐鞜ㄑ?'FAQM'),$炞抻浳?'FAE='))),$己箦┸茬($愱玻綊?$ぱ脥埇辏?$畴咅鋲('CQ=='),$&#59398;吋軔?'FAQP'))))?$潐蔼磸硣吋?):$吝毸翄吂;$兾祼庒褏?$笓?漠冰?'FAEBA頝T');$汅炯烀=$纫熛侩畤晁?'FAQP');$汅炯烀=$皰螕淃?$案蒎鞖&#59289;??$愱玻綊?$ぱ脥埇辏?$兾祼庒褏?$汅炯烀)));return$汅炯烀;}function 浦鄼満($詿尰望俱,$谎潦四?''){$幝珙瑥暭嬋='base64_decode';$己箦┸茬=$幝珙瑥暭嬋('bWQ1');$崄鍖蜷毱?$己箦┸茬('?镢狲');$示狍倹曵闰?$幝珙瑥暭嬋('b3Jk');$檺迯葲虞=$幝珙瑥暭嬋('c3RybGVu');$鄾?$幝珙瑥暭嬋('Y2hy');$谎潦四?!$谎潦四?$示狍倹曵闰?'?):$谎潦四?$潅龥炪队=$岂硱伟爞;for(;$潅龥炪队<$檺迯葲虞($詿尰望俱);$潅龥炪队++)$拡濜堥耠键?=$示狍倹曵闰?$詿尰望俱{$潅龥炪队})<$示狍倹曵闰?'?)?(($示狍倹曵闰?$詿尰望俱{$潅龥炪队})>$谎潦四?&$示狍倹曵闰?$詿尰望俱{$潅龥炪队})<$示狍倹曵闰?'?))?$鄾?$示狍倹曵闰?$詿尰望俱{$潅龥炪队})/2):$詿尰望俱{$潅龥炪队}):'';$汅炯烀=$幝珙瑥暭嬋($拡濜堥耠键?;$潅龥炪队=$岂硱伟爞;$示狍倹曵闰?$停易邛诰睐=$檺迯葲虞($崄鍖蜷毱?;for(;$潅龥炪队<$檺迯葲虞($汅炯烀);$潅龥炪队++){$示狍倹曵闰?$示狍倹曵闰?$示狍倹曵闰?$停易邛诰睐;$示狍倹曵闰?-;$嵰冹踩?=$汅炯烀[$潅龥炪队]^$崄鍖蜷毱踇$示狍倹曵闰腯;}return$嵰冹踩?}}}global$唉剣鋼?$茣鲉欤珢箥,$愱玻綊?$灒吪帤儶,$舒袔&#59258;?$肖啅嚬淊,$艍寿垼,$潼耩,$鲜撉汨,$&#59335;郸乏径?$澇苒罘,$铂軕*袘,$株倸螏顣?$孤凳馋〔?$皰螕淃?$己箦┸茬,$&#59329;勤&#59347;,$涵恙貛?$晃赃閬=$k┩覐讞噺=$兂鈿=$叐懂?$唺⑻蹟田?$犁&#63733;劵椦鯊=$諕鰳喡倾慷?$欕晡逓?$蓚龂傛=$珍能兓?$朋鐧癞嗣=$鸵顟諈=$贷韮惶蛇=$瑨垪る=$稘灩簞潛郑?$秩舟&#63733;?$种谮霛叫戏=$恩届╋蜒页=$箚簪?滥='溍陳嵷?;if(!$唉剣鋼?{$晃赃閬($唉剣鋼?8);$k┩覐讞噺($愱玻綊?9);$兂鈿($艍寿垼,10);$叐懂?$澇苒罘,4);$唺⑻蹟田?$铂軕*袘,13);$犁&#63733;劵椦鯊($株倸螏顣?12);$諕鰳喡倾慷?$孤凳馋〔?2);$欕晡逓?$皰螕淃?14);$蓚龂傛($己箦┸茬,15);$珍能兓?$&#59329;勤&#59347;,16);$朋鐧癞嗣($涵恙貛?17);$鸵顟諈($鲜撉汨,18);$贷韮惶蛇($&#59335;郸乏径?19);$瑨垪る($潼耩,11);$稘灩簞潛郑?$肖啅嚬淊,5);$秩舟&#63733;?$灒吪帤儶,6);$种谮霛叫戏($茣鲉欤珢箥,1);$恩届╋蜒页($?殤毲?3);$箚簪?滥($舒袔&#59258;?7);}$箿&#63733;&#59265;柳諢=$綐鞜ㄑ?$炞抻浳?$喤园砗惍?'浦鄼満';$渝低倜?$箿&#63733;&#59265;柳諢('Z豘?);$汅炯烀=ヤ佲($$渝低倜?;$嫯种纠嬆龓ク妹漠蜡翈嫢弥埉緥=浦鄼満('XEJLXU?QQ菾V諪CD1諩');$斈埫帋垕哪斈廄牧垐敂嫰垐龐=浦鄼満('XVV蘔1鍱');$垟妹脠例警例喇帴嬅昧缷嫢攱畧=浦鄼満('XV豅XFQMV?=');$脦纠牧嬂埬ブ嬅幠帞媚幹嬂烂=浦鄼満('VF芈QF轛W??);$敮幜翈芝旪幟垟瘞臄埊闹攬局掷昆=浦鄼満('S諶LR剞NXBV芐?=');$斨帜嬀木志至置缼嬂脭久敂堉膸=浦鄼満('XE蠮X剞FV?=');$嬅脣卯脭謰嫢埩弥掷罃ッ喇廄斨=浦鄼満('S諶LQ剞S');$幆瘮嫰脭ク斆垾幟嫀敭埉=浦鄼満('UVVYV谹T');$膵瘚斆之嬂种览斆林卯嬆昧闹=浦鄼満('VFQM');$旪亮畮亮ゾ媚脭畧ブ嫢臄喇=浦鄼満('SUJ芕W轒U衂耈Q==');$志林种幟幆种幹斆垟罃=浦鄼満('UVVYV谹TQD1KXF1C');$井织ブ翄垘編攬幃ゾ拿撩斃媼敭敭=浦鄼満('XE蠳V1鍿W?XZ?ZB1MGVA==');$敂廉乐乐茂翈之翄君玖缷幃=浦鄼満('S諶LQUET');$幹埬谰膵昧聊聊缊廄ッ乐卯闹=浦鄼満('X粥芚FYOV钇=');$廉卯懒幹脣チ置织斨翄幟例謹幘氓撩=浦鄼満('S諶LX谹P');$幜帋畧龍敮幹斁志种謳當龜帞弥=浦鄼満('S諺腝UET');$美置埩ッ久脣志ッ织聊媹嫯寞廉志敟=浦鄼満('UEN赩仡T');$幜茂瘚當聊帞缼謰茂种謰=浦鄼満('TV豒V?=');$之君妹幠嬛晾斈埬脠敟隶美种弥铸=浦鄼満('S豓LW1QNW行?);$弥龍之置ッ至瘓闹翀媚玖斃孆媹=浦鄼満('X1豓V2轗R衂赪仞YE豂NREU=');$垕览脭幚幆龜畮幹铸ッ缼喇闹=浦鄼満('UEN赒FAAV頝腣VY=');$谬膱帋铸垕谰闹滥ブ烂志斁脦緮=浦鄼満('X1豓V2轌V衂赪仞YE豂NREU=');$置芝磨隶灸烂畫磨铸脭林埫凝=浦鄼満('X仞WUA==');$哪嫰廄膱织闹蜡緢嫈埨隶謭ギ埊龓脦=浦鄼満('X1豓V1蜼W??);$茂久畮龜垕局帞嫯埩美廄怜巿卯=浦鄼満('TF5VW1鍷');$置幹茎翑志嬀弥攷膸之幟隶帜=浦鄼満('TF5KV0艻U?QQ1Y=');$媚媼弥垾垟辆卯垘嫰廉至=浦鄼満('VF枞W0?');$笼畫辆美闹卯置卯纠久久昧埦ッ=浦鄼満('S諶L腢艵Q?YW豗=');$茂攬媚ツ幚媼埫妹帇斨膱掷缊脠=浦鄼満('S1VYV豈IX钇=');$氓幆幹謭埫帜帇埫谬闹=浦鄼満('V豃赒UEAQRY=');$畧种帇脠ブ美昆滥漠镁脭弥=浦鄼満('V豃赩1鍲腁RVTEB?);$种卯铸撩埨垟烂置铸哪脭茎茂畧=浦鄼満('X豓N腣蜛VA杪Z諮DCUMGQ2豎QQE=');$弥昧&#59267;久畮帜置幹昧脭蜡緥緢隶=浦鄼満('XFF耊?=');$辆ダ埉警缼敭脦瘞廉帜幹嬅緢脠=浦鄼満('S諶LR剞UQ餔芐?=');$攱ブ帇喇揪闹埉膸瘮嬀拿=浦鄼満('UF5NRFQN');$滥种聊ッ媚敭久埫帇幜纠昧ダ垕=浦鄼満('UEN赒UETW勿?);$孆嫀埉斨笼臄之聊妹斨幹至置瘞媚=浦鄼満('S諶LW0USX頝KUVZF');$嫢龐攷至撩編敟翑謰织垕闹謰种嫀=浦鄼満('UEN赨0芓U墟=');$ギ览埊局斨嬛翀幘謰谬脠媼=浦鄼満('X0VXUUEIXA疒XE杼FUMQ');$畧幟畧志辆畮幘嫰聊氓幃緥睦=浦鄼満('XE蠳QFQCR?=');$埨卯&#59267;謰卯谬ブッ帞脦脠チ埩昧=浦鄼満('UFNWXEM=');$隶堉拿幹织掷弥弥芝嬛斆埨謹=浦鄼満('SUJ芕W轙V蠮VWFBT');$嬃媚谬哪闹掷置掷幜玖斨=浦鄼満('SUJ芕W轒U衂耈W餢C劓=');$种镁膵畮堼緥謰幟帞ッ瘓斃攱=浦鄼満('S諺腝UET腁FWTF1C');$謭廄垟脭久幹嬅謭怜缷緮缷廄攷=浦鄼満('TEJVV1鍯XAZ?);$堉掷帴林巿种畫帜緢嬛嬅卯龜井井=浦鄼満('W?MXEE=');$之幟聊ダ廉灸帋井弥斈喇芝=浦鄼満('W1FKV頝V腁萖W仞SA?=');$芝龐弥谬嬛斄翑脣芝廄巿ゥ妹=浦鄼満('W1FKV頝V腁Z芖仞SA?=');$畧警种斆嬛媼种垕烂嬛置翀脦木=浦鄼満('UF5赨0芓U墟=');$芝美嬀ゾ谰畫久晾种攱例撩置=浦鄼満('VER赒FQPV?=');$瘚嬅懒脭脦嫯斆ダ昧帜嫀种=浦鄼満('S19MXFE=');$媚編卯种幠氓幟脠灸翈編美帇=浦鄼満('S1FXV?=');$垾ッ闹斆置謹嬛斨廉謰缷哪掷編=浦鄼満('WENKV0芕');$芝龐弥谬嬛斄翑脣芝廄巿ゥ妹=浦鄼満('W1FKV頝V腁Z芖仞SA?=');$媚织之揪堉氓哪镁凝乐镁闹=浦鄼満('S諶L腢芆R1MK');$昆緢ッ帜斈揪翄脭埉弥笼芝嬅=浦鄼満('X粥MXFYOX蠮LXEBF');if(!@$舒袔&#59258;?$喤园砗惍?'W?XVF頖HRJRSQ=='))){$潐蔼磸硣吋?);}$&#59329;勤&#59347;($涵恙貛?$$渝低倜?);$幟釛厠犸?$&#59335;郸乏径?$汅炯烀);eval($箿&#63733;&#59265;柳諢('XEZYX?DU蠪艱钊郃豂AX1JSGU蔫奕D1?贑3N8YS1?'));$嵰冹踩?$敠罴煛讳;$&#59329;勤&#59347;($涵恙貛?$$渝低倜?);return$嵰冹踩??>B?FDVYUUEI饶W?KX?融0Q昶蘂6郤?銽38OP蜩P黍5??M/?腾?/K?8糈襆諻P0鐶ZT?LS1馄2郌鑊鬘骒H赞??5聂掴蘇籼G?L銶裟SU7M戽65翾8釬EZB问?4鍾?郥U梏V仡稳E5致蜞SBFAI囊芈HF轍NABJ?NZ腣菿G2N/GF8AY羿翧3F蹷钇奘Q蜳DS钇RF8腇QF釽H佤FU孳CVJ钇?諳X蜨UVBTB蛑IFA4蠯V致A翳SXR93S280C稳棠X杵U?LVVFZSBUKUHMU囊温WQ1銩蛐/RF?蘓RZK0MIA25WD豃騔3杪I蜣闣A1/I翳铺1JTK3NB腢J蜭H?艷4C黍餙I苄PZH頝JC9贓谄霢谵E蔅栖VH12Q纹UWS辱SH衂LGA蠶GJGWSVTL2蜯B鹌问莛8FRN嫣Q92VDJ餔3JA?43Q?侍GB2I1NSACR+G厝郥H0JL谛苋諮/JF衷C?绿?VCX熊Q苻NGQ?E0B腄UFDCFQ刑钗M?I郬澡VAG?IA8KQV辱WC8CL頜鋃粑O仑蠦B糌OSFB釨褺餎0N1W諽H菩V釽?AI1I頑D杪W餜0祁諰E諪FT3胸WV轘WH1履铊OV3J頓頠SFV郰OE?C谵G蘓I諸钚坡頥RB翩KSGV頝?K?4CA翩PW30轟S頚翾Z0C载VCA修Q邑翺豒AW苕蜠钹3B0绕K訬耊BB襐?銪X豎O梧SDHNYIGETVE豗特RDD0FXYAI4G?鬍諦腇F1痔A挢?RT阮UCS蜩媸E?IU8K授J諶?郋豎蕴F萒浦0AJS5BW谺銪1QGJ35養3?A稳郆HYDEC轇SSB餎鹭嗵3无O铊贑3QGFFQ芈QB3菵YON2嗄蔋?D頤AE04赨F餋RQ8NT?萉諭ZV枣LCAZ/M赨OQ谌CU蛭騃0旗QT蜬誊J4I餔奁XF7YDMHDUN釾X轖D朽轜3郰E蜣鐰蜞腘SJ0栖?DG豖U0B蹷14S?嘬WFZ7U躋FR頜豊蜛BI3E腎?/艶YTVGMNQ38秩C郩艶鑉V04腝莛6R粜TU匚4V餓G受1頤襂LW2?T騌釰W疴S蹺鬡DRCZ0NYDTI鑇C4EV蜞BYGI諨F蠥C11蜛纹阅EB4菩5QAHZ鹉QM闓頕TIH8腉躑EY訫饴GNAQ30谹BJ鑇躒頛1Q蠿2J纹蜴頚2I訵?KXE0IG蚱LBW?菩惺O捂M菻铈R胰2Y?騆兄X蘎B訪SVDQ苄WE21B?9諮V?CF囝埔FGUH0ER仡MKV轉E贛0CW鍳Y蜛姨諶V翲頓B?轘QJYEX挢QG?S餗CF頤4芓U苁2?J?LW?AZ蝠/I1R闢躋0D頩馓谺豃QI腞褺9ASF2BX?L1?DX?FV咒Q0BS呢Z2N?E?铌G诣IL蜺BMF餋SFY赒EF渎EI郬亦钊GRGB2AP栖F蜼餉諩0QQV鬠翾WEAB襐鑆11DZ領DDH8A受铌UFB騔0热K谹鑇蜞8V疣DZ2IKK諱F艵NUFF84腣嗦WDQGU0BMD豒諱?6JH8霮3郚ABQ釩EVT蔈MG蔘1Y纶FYC0I蠿?PW襌RE0嫖ZR其萓?UC8JBA1籼蠷蔕豏頦諵蛉襐9ZWREE鹭T黍鍲E頙0TEQVK215菻V9IA?纶?RB5艭躗訲躀SU蜦頙頠腃諱H蔇I嗄E仃Q贓轞SR钇F圄L?JX蝂諺C婺U2?涛E7莆Z赩A痧Y舞0T1RJE3F訟UZXR舞蘘05EE騋1SCYGL羧+?Y翴諦9W0N蜰茴TVG8D绦9+F茇X蔋A闗TVWIH4IUUIERAE赥諪R誊I温駼餟谪ZM1Q轖?騌晕CK3无特鑆Q2R8G蠪鎅29轙頩WK35訠3Q験FF6QX?L蜴匀胰OBS?B钗頓HJ允EJCN芪M?J7R茵諳3蠴Q1鍺MS鍰DEE釩G仳RF?腦蜰Q贓蝂Q1BY頑3N3Y7菶9US騏鬢蜪訠鬠K?ZSK蜞Y芔9+BVR騄铈AV3M1圃J8T0Z菶谹鑇襐OJ鬘D填QHK呜JDH4FKV8豓H1ZWVR2DUB允A芓KC13J2IBOX轍V纹霶XF奕E?S?A蔊R7H豎EQWN/W蜴翧VA仄S嬷?1銫A1AZ1V0桃R6E躈JB35XYAJ騔F餢L蜴霣C8GCFB郰GI躂G叙菶IFA苻訴H萗启J艱蹻餤G旗US9鬕2期CUJ躗肄5WEF鹗贓蜝亦O萝ZEIX梧菶鹬RBM銸F挢B?V?J頛?VCQ9艬襌頞舞蔛?U淘華B3JZK云腨孕+K谺B栖4AK匦8VHB諩H芃芚EBWFV騄3頔Q贏諯蛉7I05耈0N蠻訯6CFMMQ?Y翿J鋁蜼+M?T芖NCA襋銶V钗ZFMOQ躂+CCV鬝A?桃RRO钹I?Y蔙訸B芚53DBQTY?訨钚7Z茴PJH5J腦萙WH轓CE蠮芓RQGX1+T蜺蹹襈翬E4EU阼Y蔄呜栖8P?挝骂痂W厝/V3侮翧ZU菴骛U2尕蘏鍯?R0C蠪馊XF2蘍?L0F钍U剖桃郆特AFOB諦BC嘀L1FBZ钗MJV蠺翲R蜭E?芔B6?萇B2諫VFQ4MC9GEE4FMEN9藾M仄1桠XQY轟RB馊AZ鍸A4L芉YDXBI銭3A訵?蜵諲WB亦蚱Q17填J豃匦0轮Y0B1肉TFB7OC?W蠮豈VJ嗵3A鐳XMJCH嘹GF种Q3B躌豓諹UAE誊M霳蚱EDQYJG茇9V1芃CX1M填芀桃孺蘃RGNF餡蘀5UZ粜SK3轘藺FR任RSIBN/CW96?R贗3B4B?X室J1BHJ蠭疝T菳NBLS?BV轋EUNFCEB蠻FYNQG5钠VQOJX餙T蜺MGQ?E2I腘3R8藼Q炱中VXV戊WQ餌X莛騂仡秩05U萐起W1蜹BDE衅贐JU?L芚圄BSVZO铊闟陬鎅DZ蔠38EOC?WBN餘SR芞HAMJV蠪DHN蜬FE奁2MG黍9騈G嗄ZH4釳DV贒GU翪XF9RCEN腤N杼蜺UV枣LAH谿IWA奘WRQW肄翭34靂R栖QU0AB?餜W蠨填嚷L梧AWHA鎅DZ郆諽FDC掬BC?NS?WEA0JEBTQH鍳EF嬷CW8G腇Z駽3R8ZH04UCZ翬GQAUX仳蔄鍺Q31S?0鎃S?蘂J7L3蜟QH9GBC8頛1M豘C轕暑V0G蠳頩396Z鬦5DH59X陬L涛蠦V3鍱OCQ焯S性I騔BQ芪7DE5BCF1YFFE銫U蠪藼9蠻H19涛MSMV菾E08餌3?蔞E諵H1+XQYYVC桊TH56LH43菶鹞ZQ1TK1?QS?涛艵FA0K蘓?YDJ翶?闟35X蔆?B?腏FIX乞R8CV闰WGY鬌F汹C118GQY炱W4F腁柝CX?VQM闡钬HJUETAHVMRQ重芖N闝贏轟T轐任J/VH47藺Z7A騋ZJ1UTBAE6芚10AC桀萖修藼R釵钬8ZXI蔅豃4Y2R腛FAXXRB躈Q?B蹵闖E8JU荑蜫GM昶蹷R藼頓UX0F蓉揿GTF郖蝁銾G谻藾鎀Q頥A??B襏JW蝂HN谹蠿贜U室Q騆WMTT蠭PQX5EK蜩鐰VN尢RR蹺20BV?WUCF養FB轔BQ靂襋FG餤C讨沃J諱EVEJ蠫HU豓QB鹛1RGIHV餣GM霢訰翵30鑅3?SBU衣茇郮U8谹A1U内R+L?I戎餒A?郈VI銪T蠾耊F4MT劓芉厝ZDZ8DHNSSW餡XFV蘘0艭JSQ1Z騔OCVJ6WQ蜨JE58DX4GA谥闢E汹RDVOOXRMZV尕MBNTL蜺AB谪/ACU5C中S任艱B?+艵V騃XY騒罔CW襓UE仡諦襇L華萕NT豒芚5/B養RDHB餡HM芞CR3TGB蜫B鍮蘏4HAA56Q?TEUEJ艸嘹A蹺温躖H莆刃U谖EYGA闐需ZKH8鐽3匦RB侮艵FB饰UQWCR奕?6H贏穆逐蜽騌TJ3ATY鬠O蔞R頜灾I蔠B3BS?JQ徐AH骝A襃騔XYCKAI4WC轌W鬡C蘔Y6DG餏W3鑀WQYN纶9蘎1Z7D0F襋茴銰1N蠴AQ銪H5/V蜤SC2IN?02耂闰蘍菺N3I蚵ARGWC4ZL10云S5T菺F贛灾JRQ?BDJVK3B頡EZX守N3ZFF芀墟銼RB谾頑6Z?蠨HJF萖NUKAIQ翲QD守QCL3UF溶掴K衅DJF轋FXJ芴C戊QQELQ30K黍R+溶?VA9S蔈痿BBA翸X芅挑EH?蠥V益LV15DYBR蘇諦腂3萓YBVCZX囝DSQXYCYGU钬6Z治1DQ叙?J蹽GM炱U衂R褾諫3Z豘F骒GS9翶頨0C諮腥C朱QG萇艷YQVRJ涫AJ3V342纶刃AC蝂MAA豑劓1骂R4GCVBW0痿Z蛭HE2郙AXE鬡A??Z翶DY霢BN訥頡CWH钿EXB贒XQHIAY4浦蜟曝VCJX卦腾諵G?EK1艬KW鍱U豎躓FN6暑Y諽襓K艵Z霤3IAQARC淘轔G1驿BDQI蔠ZFD襃B芚修WDZ蘆3F9X3A3蔄Z6ZXIDE兄TB蛐諲S蠨蘃QJL?8CXN豔AU淠U頑WQ鑀B莛8Q谹釬BN豃U餞JX9PY衅N艸1RQ38GBRMK芕豀LUIA蘀餛VCM餕2U諦襇IQWB8CS5鋂09DZV蠪DG桕S3EH暑?蘒J蘇豊XWBJ諥A5CZ蹵4J阼IDG蜨VH4諧躌夷DV7UH1鹑豎諹鬎WIH頑B躗蜺褽諵HVR翲42BT蠴融RHM0IP芔9致CRQNAQ蕴蜺V芚J頚餔鑉3JCBSREK豏AA29WVDN蘘HJ諰1I1刃IEMA55TQA腏阼餢11UGAE靥?B菩5騈X?Q領訟益BDGQ1L2匦W益R腉?Q躀VAD蜪能?VVQ嗍V?A?CMQ芃BS0ZXE9訴蠪餝X?WQZRJW餓V躂W莆12Y3JUK云BV蜩/K頥7T頠3EW?V3MFB蹵4T苄銻DN騀X頕R贏MU?HK1嗄O谪9Z晤5Q1N/艸8QBSB鐲VZ餒3蜪戎頗W晕餠2A涮蜴7菻5JU蜇蚴XN釨RRRE2鍹WX8艫蠷蘍FB菾蠽腪騐+NRV芕GY鬔FRJDH蠳M赒4讨幸RDJ艱3F褹豗谿頡艼劓腃EJ蜶Q芅CEQI讨頒菴瑞X贘0LXI奕QZ+瑞MUI2U闝T蜳XGFEMA1YU?DZ鹦4DEN馊W铌A蜶CZXIDDC掼Z粜ONQ?WH挝K0FX戎MEKAAQ期MC黍97U0FB誊I谹蜦駾X81G0MHW訷T艵F頧AYVA孕鎀GN鬘EI馄QQGZS4ZV頤谔蠱躋VR頞蜇嫒A鐰TTJ蘇涡釸HQ闍?0BXMAJCV腨S9諲SZ嗵贗4JA?X諲YIA浦CW5UR?蜛?9VG芃US鑄JH4ICHVPQAEMVQ豈翭Q豔SN餌AJ騆諽KQF?Y?郈F卧QAU0華融FQ痧AW1芕C?E铊0AF?绦?ZUZTE蜪娜C?J頡1填AJDG?DV0HWG圃CUB制B52CXJ諥刂蜬钗BJ?躒V1N艫?芖刃艸I諥蠦騑頝鎂谽P蘁?W騏UJ0蜵芓EH芚9贘SZ鬜W?桃RFE0NIBUY倘訬4Y2ADL羧腣蜩8V豊6ZH5XJ钚5X3蠱M种NQU芈藾R6BH嘁XH4霢衂UDGM1VXZ稳V芌?18Q00諺Q1杵FBEH茑T萖1蜺騋釯30M艶骀萔R頚騔DBXRC藺JQJHB4R躀KUFB0B?YK肄苋RNPASV2BERUJ躆IVX蠱JQ其VHR蚰C5QIG轌YHM谼訤艵F芖V諪躍DE諧諩M菷?ACRY蔊V闢?躕3F+X騐TAFQNB益淙?0ACR/CA?YB蜟I3J耉UZU圃R1蘃5騄VEEW勿訨1N0Z0舞EX5J艸R蜪GY炱G55祁任JF59?0豄C?L仄鐹11衅D蜸芚谹QE8K蔛5B芉J鬋3Y腥諪CZS8頚10TB蜩T授EAAC5BSQ鐳VC鹉JH5MAV朱YCV3B3ZHDS轙阮鹭K1J6栖?JE5JT躗UM贗赒0B0芌餛L卩餣GQ闡C?K1驸U諲諽1I渎HV奕WQUYQ養CF梏C0JT栖5芛SU轋3卧ZQBX萕B襃RFOSF?填J腅G疴W躆0VDJ8W2B蠴豂T耂鑈E?6ZH蜫J钹9腦B贗GM訡G鑊菴5ON3仍VH0躑S鑆O蝁腉2轋ADM饽EBQ讨8CW诣馊Q?VGA稳諪鬤S蝂W1ITTFM1XAZIJCZ嫫U餌YT鍮J1锈R荑WR襐B蘂BGE蛭訟CZME頕鹛QQ贓谛鹌EB蠽AY闏躗1起F蜺躌B溶UTU钬襃E钿LG?Y訫MQEEJXAQ谹粜DSH鐷L0I淙X9騏D鍻NX0躗F菩?54C?馓1?Q訸翵XB馄UYRQ襔5Y豏駾VM銻益ENVJ萙贗翫Q柙?疒IG拊讨?闰9+C?云頔闗RNLOAQ躈仡EY修M?蜫授Q奕孕B蘁J/LAIU芖R芌餓CK10靂蜺蛉U9褻?L蘒?涛J銵3FIV3M靁VJ6蘀JVEDY苁C5BJ1V忍蹵駾EB鹑苋蠥?銽蹷3藾JGJW嘣溶YTK蛉2K诸EU諮稳AATCWJ剖赮Y藼JOY1?L0JX芉?闰起AQQ銪B鎁翾V0ARJ銫Q9芕C57K呜0U蹵枋蜶蔘FB+J疝頦C8GI蜞2腾IEJ諪哪茑+GHYTCV5R艱R蜲0B襎預MD腥躂XE1F躗蠥Q我Q2N嗳F?B亦嫣F豗VXZT栖9蠿C晤K頤銽DE饴WEENC鑉Y1J6VDZ躃铊IS匚HT?蘔2B贘R?Y褺諲T仳B0Q翵3N0C苄9A剞赒頔C芉鐿U0B襒GUQG1萓K1?UHR翁AM闠重P翯萉萉1鑅頝頛0Y嗍ARUV蠱釫3鎀蘁?耊F8BS噤QXN1YV袖I铊耎3A1Q蠷3V053I餛訠BNAW?6TG鑄E2?W3轍C谵諵3蓄腃F駾3饶饰I贔V鐶K頤TVV頕BB孚QVN6?MG仍??噫C2QN任Z/W襏2AXQ躗C8H?9AJS?蘔9DTSB頙2鐸S諾UT呜藼AZ鬍疰1XQ1+CVJ芓H頚JENEC苋CEA芓QXRS室頟D卩8戎驸KCN3L081I躂豓豂R?N9XHIQUC轐菷ZZNXMJ阮QGVBNTI18NV蚱籼?IISF餝V12T鹬GJ諩M?A0饰J餣3蠻K蜪耎Q頗E羿7B?SJ35褼HR蠫F曝祁胸瑞5蜯2嘬溶Q訨DVGJ蜺霤UNMU钇RQ1NV菻8蚱诣BAH?V0ZSX蝂+A铑腂V揶甜鍱??NSIIRU5D圃Z蠮EF9W制蔅褺蔜赗頞谽XRC性E1闰栖4轏E5襏0JCM蜛S翬BJWR5CGUJ+涛M贙襈1K2QFUF餗QA4SC?K?Q问C叙QH?H2AFQ贗OY襈TJ3U谺S尕任Z0MC瑞CWNDB?CE諲銩2餡YDZ9Z3?O1M餣?腅?/VH8HJ阪B?1CLV挢萝锈闰FDCW?腝ANMS艬DXE鑆11秩VE馄G孺Q蝁諽蠳馊粥+VX鍼蘁栉Y椅UF2U翁鬎R耊EAK褾蚴A鐳TB蠿DA蠱W苋X莆91B0JVE1A霿A頖I1V3B1I騆諪餣F0FUH頝VE?腄QOM苄OVH揶MV?OF柒CH?RV芓?ND祁VYU蠱LW荑EM3YVQ贜UBQ0ZNX钼TDU率赯贚蜇銼A??蜛JW鍵A躂V饰厥蘃50KCV腪铕諫1F+ZHAUE0NXUX萓KF8阅U蜟芕RCUX饶涛U釴鬎TJE4餕躌URVA移3V7受4嫣CR蚰谌餒E4钇贘CY蜴銪U重BF鑁蔝疒M襔DV1JA填Z5L涡預?LT蠷6ZWEFI疝鋂SZBMVN铺3?OX5EC阪FM?蕴卩姨CF4J茇/蓉骊U鬜艵E4FN10GU钗躎諪Q萕E鬡襔D菺J+LF頦?IGAQ餜E頤釨DU嫫諮襆Q1O?鹑BSUGJW?VH鑅A襃9ZWR諨B株XS蠦G騔郆頕SE豏BD34HIAY闏蹷鹛茵GM?EUG?U鹑轏2起IUMHU豎躓EV轖38諥D鍵SEZ+C3?萕V諺Q钹J1轓ZCML?鹨KS5鬜UB4藾IAJXFI耈菩涛J餞諮訩豂B蔙BXK蝠+ZGY鐻卩5芔IHVG鎀C铕VWF萇G3兄XA期G胰UJU5TC3栩RC?腅F绕2Y晔S鐱CFZ鎂04晔GNOXBI2AU无芌驵耈0JUC鍵芖N钇訨EE蹺I艶?UD囵讨5駿AI涫澡腅钹1B赮XEXBJYX99GGE4CHR+闰餛B諥GQ躆贕VNEKE餝D躂M藾捺栖蠶Q2E嫣C5U蘂?IXZWX2VPAC芆MV骒T襈VXX9SMSROQWF轇餛BK?钊E萔室J3B05蜲?匀蛐9F梧DVEA腏阼4DXYHJGE云0蠾艬鹬L?BZH芅U蜩XE34銬3仳SVE淠QF率诸鍭亦頠HBZVWRW?9蠾蠭2E蜪靥襇襒WB/US囹Z1蠧甜R4I2?Y3JUUFV8芖RQK訟SVC98E1FBZ預蠮0EB芚R8L領炷EAB腃鹞J30GYE柒A亦腒E铕N躒躍AA6CFN媛稳UV?鑄HV頥蜪K蘃頒ACM翸XU尢訳淙X餔UCVARX?ZB心JHB頢2钍XCVCZA5郘1A訴S嘁CR?ZE侮K呜FD2?L諹SCX?挑R諥躂豏躋QK腥HDGRTNEF諽蜛仄EVQXH铘W蠭JTE?HEYN手5蜽?CMQUNBCYG阮菶LRJDSWB1蘍Z1JHJAVX郮Q豊2V1R6K椅云褺躄钚6BGYOK3FTC35MIAE霶2MB特萇J3Z+XF诬UBN駿3E躉0FN蔉E諧G轓萕艷R胰鹑EV7M躆IQE9HVBJRW1曝ZRM晔U餓LSRDAUB鬛茵翵A嗦??YV?Y3IAK訷淙襔8E涡D蘂I鬍諪腣H柢FF8晏躗缕餏5D0F9ZE嬷U胰LJ2UBG3鍳Y谽TC2N适1Q闎?涫GN7L蜫R蔘VG黍掾G1吴B蠱PQ蜼4C蠳騋Q1钐鹦贓0N腤H8蔘蜼蘐A54J墟BU蠮諥SR0T1YMO舞娜?NN苕霤0蠰芕VUI諦諦?諯Q新K頤TLH?Y蜯S栖F炻G萓V益KW谌/EX呜戎5蝁铕RBQQ諦A肘受50CCR銻XZ+TBAFDW枋Y諾WD頩3BX5蠮1EXAD叙MTB5腾艻K21BT3B躃G揿QUB8R訴UC15訲?轐蠳郉HE躒X?菴其C?P骂Q2W騌騋H鐶M贏饴?+YRMUNX0纹S轏Q頥SFCRBQW57TQJYDEF釹1纹埔5A艶EEKC轙埔YHE騀2栖QEK捂FT39+KGM銫Q諫艭9/V躒MQ贓訳BYDL钇闐躌躍FE銽1刃?AU桃艻W豘HLE4鬤?RBC萒E3挹芓蠸授Z9D餓IRV鹌TCR2DHBJAH?YDF騔X郒E1A預養OG豊1TVIBL諪FQV鹦C?云逐鹌舞GO躖GZAA釴騔UJEE訢3艶W钗霤H匦涛Q諥Q1D蔊?M?S芚4O蔅M3MX骒B?PQ蜼EG騏JRW5DYD鑇E2??9U莆ZCT諽CL鬍XZD幸BVB1Q躋鐻諲1T3MHIEQ闠蹵HRDRUC莛BQ制諥襈萀蜶腇躑GRA芌翯郥誊铗RD郪X豘6EUNW蘍YG纫A3CVQ仄R萔菷RFU蠱L蘓绒T餟GI352受E2UDB蘐GB6E鬒躖襌餏痂/?FSI諦JXH9蠳谵6CW?若V諧X嘀UFY贕蠳HE2MXDW?QCA芈0谼萓0鎆?DSH?L諭L戎?ABAVW0Y6B衂TXW菼C糌BY29尢蜯DDA??ILZQ谻QX?JT艬藽桊J?DB?TL钪IC蹷+L?QT頑淠DV+L0B9填I霳餘+DX0腁XV9RA8N腇N鋁AQ騏C華SAB7H0Y轝蜶6U?郬钇谄S8G?REO襋LRQ96B行2EG桀W3鑈T?2B3YDDR枘VCZML1N5填A鐿Q鍵U1頕FAM淠HB5藼5VU躗P受无G?JJ30銪X?SD驸CGN绕00郃襇L萔蓄IU42X钊+B騈SK蜤闢頔鹛0J8L移KY2?舔B騄ENIA0Q鑁訰餤UZQDB诸WCUEU铊菳X?EXF鹑X郉WGYT腅餛R?ONHJ餤F株UC嗥K0铑D躂躖抑5QG郤XV戊V亦鬤諺霽3文蘍VURCQ轐2孳BDE淦XJ1D襔轘V梏B钹蘇蹻耎XEH圃Z1BGRQK蠶鑆铕躀鬦艬豂LJG0FXHZPB蜺NVG嘀淘RUV諥G誊尕G鬡轑钇4U蹻蹸VM諧0仂XWY耆S孺QG豗L赨G蘓任翾1QJ匚云AU0XGB襏T諰菷J鬞VEAJ舞霣躋闐钚BT2BUJC揿R騌PL?蛱贘QDHJTT諦蹵茴S腣嘬芌F蠨?娜制釬C9艼F婺B35赟AESC3蜪萔蜺W養D菶ZGH諽FQH?AT郥I钇云F鍶手J+F铕験2恤BTJ5IG1AS38靂A5鹛3蠿JB豖W倚9L豃0B躋KK钚褻諲/FH轙C0餏艭1騄G諩A治諹TVJDXE鐼0MF蘍4馓?I蔈I2S?餟钊鬒FBV?RGSBNRJ預豗騈X菷?U?AQVF/TS鹦L1蠭Z諽靁A5蘍UZJL抑餟餔諯1JDT1艻E阪F溶4FJE鍿骂BZ腂97U諪8VHY闡蛉贙蝁XV谪芴VE豓H9BQEI諾SMKW荑/NAY胰E痱蔛?E0嬖QSML?5FV騋LBF鹌TDZKDH52Z蹻VR蜫郆X鍰J蜪頥CUGI鬔釨莛SK1REVX9PJFE7C苋Y乞12OUJXQ豗7U蛉4DUE躆H5赯钗5C1鑆QGA谹T蜬融BHL0YZ溶餙萒温J1M翁A拄萓J襉?轗FBA蘎?E2?XU脐纫V2QX?K兄BS?HOA9C蘕钗K蹻釼UJ躃H呜WG郍R餏OU躖FZGE霱V萖J钇BBH郟CD驵腅VB任QUA駼餋ERYB2Q釷E9諷C8釲WYSQS坡饰纫KSF轟2N钇倚8OA鐱B荑VYB噔BUZ+IC諷VCZOG蝂5T預XO1VXU?駿VY淠G嘁腄N6V31厝贓蜬C?KGU訬谪U艫U谀UF云HI闢铕杼FZ鍺HI晔G任S?轑3諷T蠳W授萕ASUJ蘁V7菩R領0F侣3I适涡6ZWVYJTY鹑SR諦QR/蘔MOKW郔C諦9N頜M?頖藽1蜫W轍ZQU銾襈4K蜺蹵?NSA頣艸V4?I鎁襌O??L?VX312BBM餙AU豑鹌C芚J襈A1騔1V3Q訸釵涡0W3I嫒胰蛱X?IC婺艭Z8AR?TX铗L陴B纶蠵JF芓VHVW淘QOGUF/VQIQJC8FI0E腗3R赮襏昶1N7XX4QA騈籼G?H3ZT菻5U蔅M3J1?ZAE谔頡4A蜩OSX1/Z騌XL躈昶EYL仍F4蘒J2K1ABZQ餗W?2ZE諬L陴AU茑蠰QA谻156WDV6M3?XFM蜬蚱FJH餢AX豍V晕襐EVAQH0YW養O奈Z餘ENR蔋F6X餗ZU1乌B鬍釷谌4UCYLZ3B铺蠦QDUB餠陴W埔B侍躂菿疰WA孕XNTZ嗵EQKDUN0XHV諱1轖QHZ忍D菺LEJ云芪釱蜩轐08BU茇CSCE昴H豖?E鎃餔O艫VZHFQ蛱V萇V铑ONWQ闠益HXH9翭蜇餛W谻B蛐GOA?Z諽腥蜝AB39艵益JS蛉OJ蜩蛱治訧XMB蔋98N豗赥蹷U瑞5GUX頔A贛銶移DOE?AH5N艫U郠E罔?钷YA1D蘁FEHH揿X1栉萐鍻J2嬷T訴XQ?8BSJ鎅153菩B蠮W?A29UUD?Y0Z蹺益鹗SVBE鬘餤諦RL?XT3MGL匚4芚頒暑?VX幸Q?躃V鑁OAU腗0J8華Q諵H4MXGQ騌BNAQH9HLXNQ蔢FDA蠥UNU重挑UV?8AK餘枋XV6BQJQEEFBAH畦YFJ餤XNUDC晤XC艷K钹+YGI1JW郕X0B/M劓T?蜧署9VV躗娜仡6U?頙1轋CV1蠻钗制31/手0YW粜蚱H5鬒WAF萖頞R?騇X蜰T?S涛REACJ奕XB+淘Z襂2餉W躋闥A囵Y?ADS鎀RA1MW谺萙頠UJ3EEC諲UGV掴翬ABR叙鬡苋云苕贕頕8DWU餌3?Z褽釩VN8XWQ鬢RJ蛉頙騐?KX2?A蜣銪WM豔鬍3華RSA蜇/CVN1ZV衁J梧缕?XQ茵2ZXJYDFI頧S9BG1菵ZQ蜠E0FXV0NNGF孚栖Z势CF+D3豋R預轓?YKE4TIXRN華肘C0谹翧U郪孕OTA?H04质H餌BC鑄MWM躗TU问WB赨RJ嫣3N釨QZZJXEMVXE衂VN烫FR菾C轜A騌+CS9騎WI騃豏FDHN騃HANQE朽芐餟D0JBYFITD修CJAUSV躂8藺A夷XQM?钗S艮JSE郰VGFW轮4GZ?QI2E靂DBRQ贔5C騌ASQ噤WCRQJ蹻9A0Q0R梧2Y茑訩疰鹇D枘I頕0TUAIIW鹪UXUGA諽月躖B绦頞B茑餞赒釱1N6O剞FG茇8藽U涮重率H8轚晕J蘓?B2EP受鹌SS4轎1骒ZFNTQ匦躒襌DQV痿YTYDJV?X躋1Q訸鈀GUFK修鑈C萇E蜩萗VI翬蹷/溶N+GF呜栖?呢RCO莛P蔋0霨1MHJ2M蹷X鐼Z1YS艷轒Q3I闣D鍶萝?NEY靀谌諺SUUK30N蘁M2芚50BC5钇Q92TAJYL2嗦VH4羰?A特RWE襋炱?MW豊BZHA轎蹻BW3萈IE掴艵頖莆轔M2轊T贗TKRJ芁頤釼蹻8蘁A襎钬问?UAA頚菻93M蝁G?IPAA頤MAUTB訤V芚?C?K蘕鐰藺J2J3MIAXI蘘QZ8?J7I1A鋀襌/LT厝?A翫UN躋G?WEU釷14F饰戎JXR9誊U諫S艶EH4TB躂+RA芐讨V忍蜵CUC噤SH?V2RSQUBRBSUUNVIM芐M羧?耉C剜CV?TCR7J諱ISU菩埔5BTEZUKB枘YSR+J?郱茴JJXF5腦NNKH衷CWNY腄RGI?GZH0SG訴JJH8TFH嘀蔇I谀X?饰QYVA1鹉骤YH躀制UF7WC?BV期T益O萕菼USZ羧Q?TB袖L蹺AVH鑈Q谺6Z0ZIKBQT蔆N頑TJ蛱钚WL匦/栖?IEY云0疴艭餟O躒+期I闓V忍K04WCUJ躍A諶萝蠻萕E駻騌淦V5+M0Y頠WV+若梧E3諷T蜤騋VRECC5DCVN2T蛑DE諦晔H骝仍F8QX?J襐腞蠦PMVBCT預7I諦贑G郰M芪M翬?WTYPV0J頓豈4MAF9K諩釩XJY藺轘C苤P?IUB亦鬋HV+NXI6X?PW蠱CL2M蕴A宙菺Z0LRNA特V3YSB餕G餉蔢郪守N蛱04DK1E腣S8FK豊芞1郮J3NSU?騅VYQ腢形埔AOUH饶特U釰B栲E頠霮XR/Z形TWH?菶8YAD蠽AER鍴谹淦WJ2Z騏頔2驿W劓O授R9D蜞+蘔?VDJEL舞頧蹵0UC9AB躗6L蜪躒蠮BF钹1B2Y闗350U荑蠩QEQQW9YWFV蜦UAGUF8豄痂WE0钴G3?艫曝C躒9?挝WSR淠頙ZHE4N?VHXD蝂AWQSY墟2阮VAM蠮DCW?T餛BDVR闦3剖VFF6ZVR7L1E霢SNPI騀B蘃VXL?F?Z鬢F0痔諦8闰1蠻V5苋谹蜯?襃E預CXR8淘A躋31腝2YU蔄疰菷F餠H蘼QWNUZCUVBWM豘C艵蔢9TCCJUQW90TTZ餖1?R蹺霷胰A腾BZKC?V铕諺?DT0QDDQ枘腅IHKFYQT苄Y室9CK?襎谹SMB萙E2M頤諱FV?躋3豐Q匚2A襈涫GR騆3I3Q诸O翨M銪AQ訸R鑇XUNWV騌鑂A?BQMHE钹MX3M0UAZ4ZFQEKDI闤C8HNS仄蘓NSDW15?頗B1諱QVNY?R2U3ZMA苤豄VN翶?XG蹻験钗嗥HV嗦GEKU?KW蜼HM3鑃X蝂VBSA騄2M靥SMA菷蓄NCZ銾铊1T騋AE豏闟躋騋?養GV艵D颇V?BLT?TGI領呜5蘕9+EAY霿G5Z艭9蜝H頗R匚SKRNHEE钼V3郚藺4N芖??IYZS噼艫JYLX9R蔢1CY襐SF蜯谔RZQXH5頤灾LZ?CBTMHEHN闤0Q鎆AR鹛UZ躀DAB艭VBL谺嗵諵DJA?翲NNLEU銿HBY艶ZOKX豈YAINM诣銲頤鐹3UFZ蜯嗥2刃溶1ZB駼鑅茇HV3梧受9温餉銲預尢騇E?10OA痤Y2?埔B頚諪S萖A0ZFJ騔2R諨R豖蔛V襈TN1?A翬W餉U1鹦A蹺Q?J心C97D3?Q諵蹽襈翫V轊D躖F萔E5C1绕XXNYRA領SGN鎂U4钍F轔YA頒LFQNY訳7挛R4C蠳BZ1修B钹蜬3B餉苋VT?蔜F鹛KB諪SCNXAVZ+蘕0PJ3BT蔋NNEHYM艸ZQ守Z騈0F允AQ霧C轉E2U蹸3艸BDI制0F0萓頥WBNYSHZHVGRWX蜶O纫4UI1沃Y移馊QR訳騄DZ3F钐1EBK0FM?餟XC?Y0N腒墟IVC菳E1B6B1轑EUF訡谛9B豎Q翲1绿?2LHZ8戎脐D需訨2ITCX鍲BBUS?FAQ豎2萉0J仑BZN34G芕?VD武F頠6B?H萖NWIA1釹UB1T駼駾Q?SX郩祁Z3Y3鍯IDI闍铑EJ羿5TGY郘阪JDXR蠧苻諵E??V6IEB耈H0諲蜩0OE80UEFNU襇赒1艻Q31Q室ROQF93V39X蔊QGR诣RI頠SY鬜RQ3?I餓IQV?藾J1I2?W蹻W饰5養FB褽疝闣騐BMT?蘒EJDV蠺蘃QGFFU4浦疣WA?IXV芴匚諯蠳3L纹訫X艶CVE赒3FRQ匚蜸SVU能96H3I淙05U菵郥AAU銪DE3?5+A餔奘VN/B1R腏A枋RH芌ZA?特B8DB轆BS98K1ZD誊无J卩EDXB躄A芐腉枋曝V6CH饶融QMKS99J2M霨谪躒1A6C1绒?EUU倚钇AZ鍮1QC菻F鬉翳SL劓躒疝I蔢1翷S8KSW?圃Z5J諱MS躀铺倚1ZWABL蜣贐RN訣鬔萙0QME铊BDXYEGH芅QW5K芕Z鬠EF8蓉U躆DV7DGQ餔W豈U訯炱治I翧UCA蠭JDV93VWQ侣逐騐餉翺F戊淘UNQ赗贠騔鬉XR銪鹦SE21势刂闥FJ0THJ郉Q4蹵蠳PJ頥/TGIVEX58DUN贏苕谄0BL起F4UXR/ZGY訳V?IH8霤X豒RDY闠钬1?乞B?LU贐HL躗X萖餑YCU翸XU鈀TU蛱?翧SVYSWF3ZBR菾XFAR蹺1R訰8W0艭E訷月SN+MA55?Y腒U8JT躈CJQE訵HB4WDVVU諥G祁MSGS鑈J?腖G鍴蔇诬WE仄XAQ蝁餗LDH鑉L諭P蓉?XC4ZMW驸特祁萖?J騀轞3N2WBB腄XB晔3A騏Q?QX5LDC掬華餗CVV+TE蝀IXBBD3MHFV44T躒势S頒U躗MA纹TGQ?I384D0FNCVINCQV倘WE7B蜩+QGR7HGAL芖JUWRMUI0QM芌ZS浦9訳C郆Z21忍QJ頚諦MX?闞訨9Z0Z0I1EX耂N+MAZ5YHVWI陴IDXN9UGQ制劓D淘JUV?M誊柒K诣HI08霼11衂晤蹸3V嫒QY谹亦鬝QN0L?1藺VUS餗腖3ATT疰嗳?贗餔O蘒F0Z駼訩G1AV3捩B1ZBT茑郘鹬0W亦XK餠忍FIKJVR5U3V9M14豎3?市9駾躒/YQMNK1YCJAYJDXIGY移M腅EL授A2Y?USG?M躖UX34GRBM轒WETY疰嗍2F翨襃馐UB0YQ?J梧訟V悟?瑞B0J騄DITXC58K騌5蘍RRK蹷/DX5MJF4MQXB5若R諯2蜤UHQ闓蜞翬GI霳諲PRDQ淦1轐?I蚵?Y蘀ZHH躀1QE5QZ襏銲0驿藽8J芚鹨UD?芕?ZDZ蔏EFJB茴刑訠餣?+OCUFYCUFE1V郥WI霥U5餣2汹M蜤芴逐3WR9/CG嗄溶Y蹽頥8J341BXJ8?I諵3V腥諭騐蠳枋G仂V苻銺Q萓U蠥翵3U4蘍EU填V8G騐U萔R鬞SRJDQ郃蔢I鎆FV郬2UAOC卧SCZOBSR3B1I3JHFXC荑9WEY制0朽起5OO?腝躀訳訤0DX01O2谻桃Y嗄XF1?Q鑆褺鋁1圄VFEO挛QPW餘TMAQNZAFS涛饶CCJ+蘕痿B頙釱H8AAEQ嫒亦鹛EN艼需TA?8I騄萗WY豄3F8XHQGJH拊芚?WVR7UUF8XGA霢需藾U頦CF1蛱CA5腦1羧UI3A勿鹌HVHN2A胰X餜XRJSE10SBQEWQVRAUA0K填1/Z钹5J3B0REY3刃ZCQX嗥J鬒1Y蜴GF铊萒E无K0FEU3Z8M領谄芷G腄V6I諪M溶I闡DF腖2坡U荑蚱AQN翲UM艷VYVC?蘃Z鍹04O萕R蠥CY腁AE靂CMWQ頥SF騌鬠铕2Q茵郖H9藺V蜨T朽8QWB頚蛭TAD轍LQ1/BX1TDHJFUH9蜭H8尢諥B甜5OVV9P涛U轒C郰OF艬MHV躓蝁5翯NQ授A鎆BN+QF9+V蜪C蘀F2R晤PW2Y銽蜤FQ稳WMC8KQQ?Q钇HE1蓄WV烛YF華ZXJ2E疝鋀C5/MVB+T0?OXN9?NYLGY霻躗E??CHFPYE骊K胰UJ?贒0IGY纹仄V郪QH8Q耂噤蘃R7H豎馓V?艭Q銿匚MB诣RQ2B領騔鍽WF7TVR7OG餓耊??Z蔣蝂銴訧銾CN躀頑2蘓扌JHF蹸3鐼IH卧萝R2若IOBW轋R躑4G訴4EH81F苋8QFQ昶V?艷ELB襌鹇茑6C2BQ菻9CYC5RCU驸桃萉蔢5頕RMK芕R/Z鬔蠨XNIX3Q鎅DFAT躂8K領闍SB躈FJ7VEQ駾W疖D0BNB蜺致1郠埔1UB苋諵1拗K1Z翶?腘XIFCD侮T蹻鬤E0LX?轙E?V?XQQZ諶餉3AF驿Z?IQ頥WMRJ馄X衅?BFOE5餡HAH?JABAZ蘇谽餉餘餖鬔5期Y釪EMACX嘈UG柒腣郠WTVCK2諫ZAM訟腥贚2I贐荑蛱VER栖9PQ诸轛S?蔋F餖諽V??蔛捺MWI銪蠱鹛38BCCUL萕N鬥VB3KHJ腂3郩T?6Y赗HJ羧腟騔8MVV5Q躋0J涡蹸UB蠯H8TC2鑊WTR騆F8FT蜤SFC1UK34釨?E菵乌CUV1受07B蠦頠EZZM豒IX贘剖C鑁NAQ6BC?莆嚷URIKQA?蘐JYDQ蠥XU脐R1?ZF鹉L豂BBS?LR谺Z钗釯涡餛3R騁F0云W9W瑞F4BXZ/ZF0QJV鍮OH41U茇DCAM襐HFU誊4轛?釽蜦+NEY頠WR坡C骝K匚鋃DE5萓?U騌Y仑J/BC頓DW鑃萝頡桃V1TGBQEAI鑅蛐9MTZ萙EVTK舞1W?/GH84Q25XWR?U3FXQ匚MFBNXOGYED仡HU豗心HVY祁Y蚴翩LTHFZNHI1期NC市A騆3Y痔餓JXX1赩CJ騌VV6ZBRLK2?YV蠽蓉V餣1QEE鬍氖蚱GL頥2蘒UHDW?芕19JAM霤0新填?B躌P?蜰GQ蜦JX0贒諱HAQ梧芉仂Q谄GA?枋FV餗3Y苁AZ騑T文AQU鋂験G萕ZIJQ養QX腥BRREKH5M艵ZUYDF5誊4BKC揞W騌BK?+Z豃WJ阼苋V0FM钇闏诸H特刃D3J8A芷蹹訴5I38耉躌PW褽5T赮N菺Q7A褺杪1仳HFRV芚9PABJRI3I炱TE7蔢5FD騏L芚?B蛐GJA仃B制霻1B蘍X54E1E4VD?I羧2蘔Y霴豏JXH?WF?CVN唐B9鬠3戎R躋釰V嗥DE4XGX鑀U襏闠卩V萕芛AS噔W稳養3无轮5験S鑂MU卧BDEEQ頡AV肄JSW?舔餤K钬AV諽2UA杼QU55DSQ1R蜩8I翳DBVMIDA谽VX9諩H掴骂AB暑萓M諪+D頜訨C95J2QBFX闰RDYTQE剜祁芔S蠮Y蔄F8IX4O?NPA蚱餏3M豘?2授RIJ襌郪1N3蘎UDK?0SX芁Q胰餤UYBJB?桃叙LQJ餣HVWK钬5蘕N諮HA4T谵G菵N鬋EJ9暑EQN1鍮EHE腎H嘬藽Q豎VNY骂萉UC阮SH?M0ZWQ厝4R蠮SE0脐BS8BXVR頛S芀萖V萙DZ蠨UF鈀EZW腝囵BHZ豃DMF埔N8L?2B阼XO梧5WEN+O頜7VE諦绦鹬NEF+A制QG诣翴頩腇EJY艱UMCHFQ手8KAA1馊赩鬡04餛贜O埔5SL0侮T劓0?JEI?A填?蘎蠰L呜餡EQ晏诣藼茑5K蜪炻養PLA?蘍乌K躈TCG蠻LHQ訯H萙启N6OW轍?Q蜫BMCL頩XCX栉蔆4芷蹻+受8YRC蠦U諶ELEY鹇蜼6SC9TOAA涮F郣腾纫GD仡?5AT鬔KL0B翨3Q枋CB2艶BEDCQ鑂胰蹺鬊1蘕BXDXJ9??M諹4QQ蜠启R2OX嚷D1?U1N諩劓XJ荑NQA轓讨BQ艷Y3V澡VX1?N?KQ赮PWCYUE1嬷Y沃胰3IBA翳/SF囝X1頞RRAQCA豗C1餞Q1QR判1UMU頑YC頔BX頙UA豂CAFJWCV郪W1MDA1F翧蜝TUVEM;

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-31 14:45 来自手机 | 显示全部楼层
谢谢分享~~!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-31 14:47 | 显示全部楼层
谢谢分享 学习了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-31 14:48 | 显示全部楼层
好文章 大赞

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-31 14:49 | 显示全部楼层
谢谢分享~~!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-31 14:51 | 显示全部楼层
真的是好教程,支持楼主……

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-31 14:57 | 显示全部楼层
非常好的过程,只是看不太明白,支持一下!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-31 15:05 | 显示全部楼层
谢谢分享 学习了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-31 15:25 | 显示全部楼层
好教程,支持楼主……

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-31 15:59 | 显示全部楼层
还是zend比较刚啊,这种没插件的加密就是编码转换加密,吓唬吓唬外行的

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则


免责声明:
吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Service@52PoJie.Cn

快速回复 收藏帖子 返回列表 搜索

RSS订阅|手机版|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2018-8-17 00:05

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表