所谓 zend 加密,其实是预编译
他将 php 代码翻译成了一种虚拟机器的指令集合(php 运行时也是这样,但指令集不同)
所以 zend 解密,实际是反编译
由于涉及到 php 内核机制,故不在本讨论范围之内凡是比依赖加密环境的加密,实际都是扰码——程序依据自身包含的算法将自身还原成初始的代码
这种程序最终执行的是还原后的代码
所以你完全有可能在他运行期间,拦截到包含 还原后代码 的字符串由于扰码的程序,本身是可执行的,所以还可以从语法分析入手
php 提供 token_get_all 函数,用于对 php 代码串做词法分析
可得到类似这样的数组    [32] => Array
        (
            [0] => T_STRING
            [1] => T挝CB蜦RW仄JW豎IDFZZD蜺FBAADVAVQU頤HCF頕V厝VN游煁啙
            [2] => 2
        )    [33] => Array
        (
            [0] => symbol
            [1] => ;
            [2] => 2
        )    [34] => Array
        (
            [0] => T_STRING
            [1] => T沃FBAEBAFAIBAQIA?腄AAHU領ABF萉A1FVB仡FB頔A庮葴
            [2] => 2
        )
依据他,就可对程序做出解析,从而反推出原始代码

解决方案 »

  1.   


    我使用<?php
    $source=file_get_contents('s.php');
    $tokens  =  token_get_all ($source ); 
    print_r($tokens);得到的乱码不懂怎么下手,我这只是一个简单的phpinfo,如果是长长的一堆函数,那样不是更没头绪么?
      

  2.   

    token_name 可知符号的含义,从而可知个语法成分
    乱步不用去管他,一个符号而已,就当个符号用就是了不过你如果没有能力取做语法分析的话,建议还是放弃为好
      

  3.   

    而且加密后的php文件不能修改,一修改就出错,应该是加有md5文件检验
      

  4.   


    不知道我的方式对没?
    <?php
    $source=file_get_contents('s.php');
    $tokens  =  token_get_all ($source ); 
    foreach ($tokens as $key => $token) {
    @$tokens[$key][0] = token_name($token[0]);
    }
    print_r($tokens);
    s.php是那个加密的文件,结果:
    [code=php]Array ( [0] => Array ( [0] => T_OPEN_TAG [1] => 1 ) [1] => Array ( [0] => T_WHITESPACE [1] => [2] => 1 ) [2] => Array ( [0] => T_COMMENT [1] => /* 梑埭鎢PHP樓躇 http://www.zhaoyuanma.com/phpencode.html */ [2] => 2 ) [3] => Array ( [0] => T_STRING [1] => error_reporting [2] => 2 ) [4] => [5] => Array ( [0] => T_LNUMBER [1] => 0 [2] => 2 ) [6] => [7] => [8] => Array ( [0] => T_STRING [1] => ini_set [2] => 2 ) [9] => [10] => Array ( [0] => T_CONSTANT_ENCAPSED_STRING [1] => "display_errors" [2] => 2 ) [11] => [12] => Array ( [0] => T_WHITESPACE [1] => [2] => 2 ) [13] => Array ( [0] => T_LNUMBER [1] => 0 [2] => 2 ) [14] => [15] => [16] => Array ( [0] => T_IF [1] => if [2] => 2 ) [17] => [18] => [19] => Array ( [0] => T_STRING [1] => defined [2] => 2 ) [20] => [21] => Array ( [0] => T_CONSTANT_ENCAPSED_STRING [1] => 'hyvluffw' [2] => 2 ) [22] => [23] => [24] => [25] => Array ( [0] => T_STRING [1] => define [2] => 2 ) [26] => [27] => Array ( [0] => T_CONSTANT_ENCAPSED_STRING [1] => 'hyvluffw' [2] => 2 ) [28] => [29] => Array ( [0] => T_FILE [1] => __FILE__ [2] => 2 ) [30] => [31] => [32] => Array ( [0] => T_STRING [1] => TQ澖B媃AAA5欖薁HU醙SU薍TUA�D11МQBXAA鄫U1YA劻�翾岺樲曩歔 [2] => 2 ) [33] => [34] => Array ( [0] => T_STRING [1] => TQICVFN阠1RbW傎FU傎NXQVUV�1в咶FUVEBB垝UV1EB蜦悼