江湖装企营销系统ZQV1.2中使用zend加密的php文件解密方法
江湖装企营销系统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 即可,即去掉代码中的&符号。
解密后出错文件之网站后台展示页相关文件修正方法(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'] = $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 = $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"
) );
}
解密后出错文件之网站前台展示页相关文件修正方法(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();
}
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版同名文件替换。
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;
}
}
}
}
页:
[1]