yakczh
V2EX  ›  问与答

http://www.phpjm.net 这种混淆的原理是什么

  •  
  •   yakczh · Dec 15, 2014 · 4330 views
    This topic created in 4192 days ago, the information mentioned may be changed or developed.
    4 replies    2014-12-15 20:46:53 +08:00
    feiyuanqiu
        1
    feiyuanqiu  
       Dec 15, 2014
    很蛋疼地试了一下。。。

    原代码:
    <?php
    class Test
    {
    public function main()
    {
    echo 'hello';
    }
    }
    $obj = new Test;
    $obj->main();
    ?>

    加密后代码:

    ...太长就不发上来了,简单说下我的理解吧:

    1、它用这个函数混乱以下变量:

    function func_1($a, $b)
    {
    return empty($b) ? base64_decode($a) : func_1(strtr($a, $b, strrev($b)));
    }

    $n=func_1("c3RycmV2‰"); // strrev
    $o=func_1("c3RydHI=œ"); // strtr
    $e=func_1("K3p1bmNvb€QByKQNz‚","ZMQPXHK"); // base64_decode(strtr('K3p1bmNvb€QByKQNz‚', 'ZMQPXHK', strrev('ZMQPXHK'))); => gzuncompress
    $g=func_1("DmFLkTD0X2RlD29šZkQ==","YkLIzZD"); // base64_decode
    $h=func_1("ezgxNDdlMDM1M“GViZDU1ZjQ1MG–RkZTZkMzUxM2Eœ0MzEye2U=„","LDsSje"); // /8167e2350ebf55d450dde6d3513a4312/e
    $i=func_1("oXohbA==‡","ZByFo"); // eval
    $j=func_1("EHJlZ19yZX—BsYWNl‹","cdTeE"); // preg_replace


    2、它将原代码 base64_encode 之后,又使用 gzcompress 压缩,执行的时候先 base64_decode,再 gzuncompress,再 eval,这里它使用了 preg_replace,我记得好像 调用preg_replace的修饰符e 是可以执行代码的,这里就完成了原代码的执行
    tabris17
        2
    tabris17  
       Dec 15, 2014
    不替换变量名的混淆都是蛋疼的混淆,但是PHP这种动态语言又不太好替换变量名
    kmvan
        3
    kmvan  
       Dec 15, 2014 via Android
    效率不要太高!!
    yakczh
        4
    yakczh  
    OP
       Dec 15, 2014
    是用什么方法把 return empty($b) ? base64_decode($a) : func_1(strtr($a, $b, strrev($b))); 里面的函数也替换掉的?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1101 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 23:24 · PVG 07:24 · LAX 16:24 · JFK 19:24
    ♥ Do have faith in what you're doing.