所谓 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
)
依据他,就可对程序做出解析,从而反推出原始代码
他将 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
)
依据他,就可对程序做出解析,从而反推出原始代码
我使用<?php
$source=file_get_contents('s.php');
$tokens = token_get_all ($source );
print_r($tokens);得到的乱码不懂怎么下手,我这只是一个简单的phpinfo,如果是长长的一堆函数,那样不是更没头绪么?
乱步不用去管他,一个符号而已,就当个符号用就是了不过你如果没有能力取做语法分析的话,建议还是放弃为好
不知道我的方式对没?
<?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蜦悼