老规矩,先分析代码。代码的一开始就定义了一个_kstr2的函数,这个函数就是将传入的字符串,转换成明码字符串;从上图中也可以看出,代码中大量调用了这个函数,我们需要找出这些函数调用,并经过_kstr2函数运算后得出的明码替换在原来的位置就好差不多了;我们可以用正则匹配,执行_kstr2函数后,再替换到相应的位置;或者也可以用PHP-Parser遍历ast节点,找出相应节点,并替换成明码字符;正则替换比较容易,写个正则表达式,循环替换就ok,不过可能会有些意外情况,需要多调试几次;用 PHP-Parser 遍历ast节点就相对容易一些,下面给出部分代码:
class ConstGlobalNodeVisitor extends NodeVisitorAbstract{
public $constVars,$globalVars;
public function leaveNode(Node $node){
//删除_kstr2函数定义代码
if ($node instanceof PhpParser\Node\Stmt\If_
&& $node->cond instanceof PhpParser\Node\Expr\BooleanNot
&& $node->cond->expr instance