V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yakczh
V2EX  ›  问与答

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

  •  
  •   yakczh · 2014-12-15 13:13:51 +08:00 · 3947 次点击
    这是一个创建于 3635 天前的主题,其中的信息可能已经有所发展或是发生改变。
    4 条回复    2014-12-15 20:46:53 +08:00
    feiyuanqiu
        1
    feiyuanqiu  
       2014-12-15 14:55:29 +08:00
    很蛋疼地试了一下。。。

    原代码:
    <?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  
       2014-12-15 14:58:20 +08:00
    不替换变量名的混淆都是蛋疼的混淆,但是PHP这种动态语言又不太好替换变量名
    kmvan
        3
    kmvan  
       2014-12-15 16:04:33 +08:00 via Android
    效率不要太高!!
    yakczh
        4
    yakczh  
    OP
       2014-12-15 20:46:53 +08:00
    是用什么方法把 return empty($b) ? base64_decode($a) : func_1(strtr($a, $b, strrev($b))); 里面的函数也替换掉的?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5967 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:47 · PVG 10:47 · LAX 18:47 · JFK 21:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.