热搜词
发表于 2019-10-25 13:46:08 | 显示全部楼层 |阅读模式
江湖装企营销系统ZQV1.2.20141122中使用zend加密的php文件解密方法

江湖装企营销系统ZQV1.2.20141122中部分php文件使用Zend Optimizer3.X 加密的,需要在安装了 Zend Optimizer3.X(适用PHP5.2)+ MySQL 5.0 环境下才使用。
环境配置要求:
PHP需要支持的组件 GD(图形处理)、Zend Optimizer(php 5.2优化器)、Curl(网络通讯);

共有14个zend加密的php文件,文件目录如下:
\install\index.php
\system\home\controller.php
\system\home\index.php
\system\admin\controler.php
\system\admin\index.php
\system\framework\database.php
\system\framework\exception.php
\system\framework\factory.php
\system\framework\import.php
\system\framework\kernel.php
\system\framework\magic.php
\system\framework\model.php
\system\framework\plugin.php
\system\framework\table.php

通过 http://dezend.qiling.org/free.html   在线解密后,经测试,其中以下几个文件解密后不正常。
\system\admin\index.php   第41行出错
\system\admin\controler.php  第15行出错
\system\home\index.php      第28行出错
\system\home\controller.php  第15行出错
\system\framework\kernel.php  第115行出错
\system\framework\exception.php  第17行、22行出错
\system\framework\table.php              第28行、904行出错

通用错误:
大量解密后文件中有如下类似错误代码:
$FN_-2147483644( );
$FN_-2147483646( );
$FN_-2147483644( );
$FN_-2147483646( );

解决方法为查找以上代码,全部替换为如下代码:
parent::__construct($system);                 // 执行父类的构造方法

另有一部分解密文件中含有类似 “ &$this ” 样式的代码,解决方法为把  &$this  替换为  $this 即可,即去掉代码中的&符号。




全部评论4
灰儿 发表于 2019-10-25 16:03:50 | 显示全部楼层
解密后出错文件之网站后台展示页相关文件修正方法(index.php和controller.php共2个文件)

system\admin\index.php   第41行出错解决方法:


把第41行如下代码
            array_unshift(&$this->request['args'], $this->request['act']);
改为
            array_unshift(&$this->request['args'], $this->request['act']);

再把
    {
        $guest_allow = array("index:login", "index:verify", "index:loginout");
        if (($OATOKEN = trim($_POST['OATOKEN'])) && ($a = $this->load_model("secure/crypt")->hexarr($OATOKEN)) && $a['ATOKEN'] && $a['AGENT']) {
            $GLOBALS['_SERVER']['HTTP_USER_AGENT'] = $a['AGENT'];
            $GLOBALS['_COOKIE'][__CFG::C_PREFIX . "ATOKEN"] = $a['ATOKEN'];
        }
        parent::_init();
        require __APP_DIR . "controller.php";
        $act = $this->request['ctl'] . ":" . $this->request['act'];
        $this->admin = K::m("admin/auth");
        if (!$this->admin->token() || !in_array($act, $guest_allow)) {
            header("Location:?index-login");
            exit;
        }
        $this->admin_id = $this->admin->admin_id;
        $this->admin_name = $this->admin->admin_name;
    }

改为
{
                $guest_allow = array('index:login', 'index:verify', 'index:loginout');

                if ($OATOKEN = trim($_POST['OATOKEN'])) {
                        if ($a = $this->load_model('secure/crypt')->hexarr($OATOKEN)) {
                                if ($a['ATOKEN'] && $a['AGENT']) {
                                        $_SERVER['HTTP_USER_AGENT'] = $a['AGENT'];
                                        $_COOKIE[__CFG::C_PREFIX . 'ATOKEN'] = $a['ATOKEN'];
                                }
                        }
                }

                define('CITY_ID', $this->admin->admin['city_id']);
                parent::_init();
                require __APP_DIR . 'controller.php';
                $act = $this->request['ctl'] . ':' . $this->request['act'];
                $this->admin = K::M('admin/auth');

                if (!$this->admin->token()) {
                        if (!in_array($act, $guest_allow)) {
                                header('Location:?index-login');
                                exit();
                        }
                }

                $this->admin_id = $this->admin->admin_id;
                $this->admin_name = $this->admin->admin_name;
        }
-------------------------------------------------------------------------------
system\admin\controler.php  第15行出错解决方法:

把如下13-22行代码

    public function __construct( &$system )
    {
        $FN_-2147483646( $system );
        $this->cookie = $system->cookie;
        $this->InitializeApp( );
        register_shutdown_function( array(
            $this,
            "shutdown"
        ) );
    }

改为
    public function __construct( &$system )
    {
        parent::__construct($system);
        $this->cookie = $system->cookie;
        $this->InitializeApp( );
        register_shutdown_function( array(
            $this,
            "shutdown"
        ) );
    }

回复

使用道具 举报

灰儿 发表于 2019-10-25 16:46:34 | 显示全部楼层
解密后出错文件之网站前台展示页相关文件修正方法(index.php和controller.php共2个文件)

system\home\index.php 第28行出错解决方法:
其中25-29行代码如下:
    public function __construct( $uri = NULL )
    {
        $this->_cust_uri = $uri;
        $FN_-2147483644( );
    }

改为:
        public function __construct($uri = NULL)
        {
                $this->_cust_uri = $uri;
                parent::__construct();
        }

---------------------------------------------------------------------------------------------------
system\home\controller.php  第15行出错
解决方法:

其中13-18行代码如下:

    public function __construct( &$system )
    {
        $FN_-2147483646( $system );
        $this->cookie = $system->cookie;
        $this->InitializeApp( );
    }
改为:
                public function __construct(&$system)
        {
                parent::__construct($system);
                $this->cookie = $system->cookie;
                $this->InitializeApp();
        }
回复

使用道具 举报

灰儿 发表于 2019-10-26 10:16:38 | 显示全部楼层
system\framework\kernel.php  第115行出错解决方法:
把115行   list ) = explode( "/", trim( $cfg['path'], "/" ) );代码改为           list () = explode( "/", trim( $cfg['path'], "/" ) );如果安装在php 7.0版上会出错,可以用江湖家居6.0版同名文件替换。
----------------------------------------------------------------------------------------------------
system\framework\exception.php  第17行、22行出错解决方法:

把如下代码:
    public function __construct( $msg = "", $code = 0, $previous = NULL )
    {
        if ( version_compare( PHP_VERSION, "5.3.0", "<" ) )
        {
            $FN_-2147483637( $msg, ( integer )$code );
            $this->_previous = $previous;
        }
        else
        {
            $FN_-2147483628( $msg, ( integer )$code, $previous );
        }
    }

改为:
        public function __construct($msg = '', $code = 0, Exception $previous = NULL)
        {
                if (version_compare(PHP_VERSION, '5.3.0', '<')) {
                        parent::__construct($msg, (int) $code);
                        $this->_previous = $previous;
                }
                else {
                        parent::__construct($msg, (int) $code, $previous);
                }

                register_shutdown_function(array(&$this, 'ping'));
        }

---------------------------------------------------------------------------------
system\framework\table.php  第28行、904行出错解决方法:

把26-37行代码,如下:

   public function __construct( &$system )
    {
        $FN_-2147483646( $system );
        if ( self :: $_tablepre === NULL )
        {
            self :: $_tablepre = $system->_tablepre;
        }
        if ( $this->_allowmem )
        {
            $this->mcache = K::m( "cache/mcache" );
        }
    }

改为
        public function __construct(&$system)
        {
                parent::__construct($system);

                if (self :: $_tablepre === NULL) {
                        self :: $_tablepre = $system->_tablepre;
                }

                if ($this->_allowmem) {
                        $this->mcache = K::M('cache/mcache');
                }
        }

另外    protected function _check_schema( $data, $pk = NULL )  这段代码有错
可以用江湖家居6.0版同名文件替换。
回复

使用道具 举报

灰儿 发表于 2019-10-27 17:14:12 | 显示全部楼层
system\framework\table.php 文件第 763-908行代码有误,相关错误代码如下:

        {
            $check = K::m( "verify/check" );
            foreach ( $schemas as $k => $v )
            {
                if ( $pk )
                {{
                    if ( empty( $v['edit'] ) )
                    {
                        unset( $data[$k] );
                    }
                    else if ( empty( $v['empty'] ) && isset( $data[$k] ) )
                    {
                        if ( $data[$k] === "" )
                        {
                            $this->err->add( $v['label']."不能为空", 451 );
                            return FALSE;
                        }
                    }
                    else if ( $v['empty'] && $v['label']."不能为空" )
                    {
                        if ( $pk )
                        {
                            break;
                        }
                    }
                }
                else if ( $v['type'] == "clientip" )
                {
                    $data[$k] = __IP;
                }
                else
                {
                    if ( $v['type'] == "dateline" )
                    {
                        $data[$k] = __CFG::TIME;
                    }
                    else if ( empty( $v['add'] ) )
                    {
                        unset( $data[$k] );
                    }
                    else
                    {
                        if ( empty( $v['empty'] ) )
                        {
                            if ( !isset( $data[$k] ) && $data[$k] === "" )
                            {
                                break;
                            }
                            else
                            {
                                $this->err->add( $v['label']."不能为空", 452 );
                                return FALSE;
                            }
                        }
                        else
                        {
                            do
                            {
                            } while ( 0 );
                        }
                    }
                }
                if ( $v['empty'] && isset( $data[$k], $data[$k] ) || !isset( $data[$k] ) )
                {
                    switch ( strtolower( $v['type'] ) )
                    {
                    case "int" :
                    case "member" :
                    case "desginer" :
                    case "home" :
                    case "shop" :
                    case "company" :
                        $data[$k] = ( integer )$data[$k];
                        break;
                    case "number" :
                        $data[$k] = ( double )$data[$k];
                        break;
                    case "boolean" :
                    case "audit" :
                    case "closed" :
                        $data[$k] = $data[$k] ? 1 : 0;
                        break;
                    case "mail" :
                        if ( $check->mail( $data[$k] ) )
                        {
                            break;
                        }
                        $this->err->add( $v['label']."必须为Email格式", 453 );
                        return FALSE;
                    case "phone" :
                        if ( $check->phone( $data[$k] ) )
                        {
                            break;
                        }
                        $this->err->add( $v['label']."必须为电话", 454 );
                        return FALSE;
                    case "mobile" :
                        if ( !$check->phone( $data[$k] ) )
                        {
                            if ( $check->mobile( $data[$k] ) )
                            {
                                break;
                            }
                            $this->err->add( $v['label']."必须为电话/手机号格式", 454 );
                            return FALSE;
                        }
                    case "qq" :
                        if ( $check->qq( $data[$k] ) )
                        {
                            break;
                        }
                        $this->err->add( $v['label']."必须为QQ格式,多个用\",\"分隔", 455 );
                        return FALSE;
                    case "unixtime" :
                        $data[$k] = $data[$k] ? strtotime( $data[$k] ) : 0;
                        break;
                    case "date" :
                        $data[$k] = preg_match( "/^[\\d]{4}-[\\d]{1,2}-[\\d]{1,2}\$/", $data[$k] ) ? $data[$k] : "0";
                    case "checkbox" :
                        if ( !is_array( $data[$k] ) )
                        {
                            break;
                        }
                        else
                        {
                            if ( !( $ids = $check->ids( $data[$k] ) ) )
                            {
                                break;
                            }
                            $data[$k] = $ids;
                        }
                        break;
                    case "text" :
                    case "textarea" :
                    case "editor" :
                    } while ( 0 );
                    do
                    {
                        if ( $v['html'] )
                        {
                            break;
                        }
                        $data[$k] = K::m( "content/html" )->encode( $data[$k] );
                    }
                }
            }
        }
解决方法为把上面这段代码替换为如下代码:
                {
                        $check = K::M('verify/check');

                        foreach ($schemas as $k => $v) {
                                if ($pk) {
                                        if (empty($v['edit'])) {
                                                unset($data[$k]);
                                                continue;
                                        }
                                        else {
                                                if (empty($v['empty']) && isset($data[$k])) {
                                                        if ($data[$k] === '') {
                                                                $this->err->add($v['label'] . '不能为空', 451);
                                                                return false;
                                                        }
                                                }
                                                else {
                                                        if ($v['empty'] && isset($data[$k]) && empty($data[$k])) {
                                                                continue;
                                                        }
                                                }
                                        }
                                }
                                else if ($v['type'] == 'clientip') {
                                        $data[$k] = __IP;
                                }
                                else if ($v['type'] == 'dateline') {
                                        $data[$k] = __CFG::TIME;
                                }
                                else if (empty($v['add'])) {
                                        unset($data[$k]);
                                        continue;
                                }
                                else if (empty($v['empty'])) {
                                        if (!isset($data[$k]) || ($data[$k] === '')) {
                                                $this->err->add($v['label'] . '不能为空', 452);
                                                return false;
                                        }
                                }
                                else {
                                        if ($v['empty'] && isset($data[$k]) && empty($data[$k])) {
                                                continue;
                                        }
                                }

                                if (isset($data[$k])) {
                                        switch (strtolower($v['type'])) {
                                        case 'int':
                                        case 'member':
                                        case 'company':
                                        case 'shop':
                                        case 'designer':
                                        case 'mechanic':
                                        case 'home':
                                        case 'case':
                                                $data[$k] = (int) $data[$k];
                                                break;

                                        case 'number':
                                                $data[$k] = (double) $data[$k];
                                                break;

                                        case 'boolean':
                                        case 'audit':
                                        case 'closed':
                                                $data[$k] = $data[$k] ? 1 : 0;
                                                break;

                                        case 'mail':
                                                if (!$check->mail($data[$k])) {
                                                        $this->err->add($v['label'] . '必须为Email格式', 453);
                                                        return false;
                                                }

                                                break;

                                        case 'phone':
                                                if (!$check->phone($data[$k])) {
                                                        if (!$check->mobile($data[$k])) {
                                                                $this->err->add($v['label'] . '必须为电话/手机号格式', 454);
                                                                return false;
                                                        }
                                                }

                                                break;

                                        case 'mobile':
                                                if (!$check->mobile($data[$k])) {
                                                        $this->err->add($v['label'] . '必须为手机号格式', 454);
                                                        return false;
                                                }

                                                break;

                                        case 'qq':
                                                if (!$check->qq($data[$k])) {
                                                        $this->err->add($v['label'] . '必须为QQ格式,多个用","分隔', 455);
                                                        return false;
                                                }

                                                break;

                                        case 'unixtime':
                                                if (!is_numeric($data[$k])) {
                                                        $data[$k] = $data[$k] ? strtotime($data[$k]) : 0;
                                                }

                                                break;

                                        case 'date':
                                                if (!preg_match('/^[\\d]{4}-[\\d]{1,2}-[\\d]{1,2}$/', $data[$k])) {
                                                        if (!is_numeric($data[$k])) {
                                                                $data[$k] = 0;
                                                        }
                                                }

                                                break;

                                        case 'checkbox':
                                                if (is_array($data[$k])) {
                                                        if ($ids = $check->ids($data[$k])) {
                                                                $data[$k] = $ids;
                                                        }

                                                        break;
                                                }
                                        case 'html':
                                                $data[$k] = K::M('content/html')->filter($data[$k]);
                                                break;

                                        case 'text':
                                        case 'textarea':
                                        case 'editor':
                                        default:
                                                if (!$v['html']) {
                                                        $data[$k] = K::M('content/html')->encode($data[$k]);
                                                }

                                                break;
                                        }
                                }
                        }
                }



回复

使用道具 举报

回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|管理员之家 ( 苏ICP备2023053177号-2 )

GMT+8, 2024-11-24 21:08 , Processed in 0.179682 second(s), 22 queries .

Powered by Discuz! X3.5

Cpoyright © 2001-2024 Discuz! Team