转载请注明
作者:张英锋
原文网址:http://zhangyingfeng.com.cn/2007/12/14/joomsef-adv-decode/
本文的目的只是为了说明JoomSEF编码加密的原理,不提供破解的方法和工具,任何破解 JoomSEF的行为都是违反本人初衷的,其责任和后果都与本人无关,请大家购买去广告版的Artio JoomSEF。
Artio JoomSEF是一个很棒的SEF(Search Engine Friendly)工具,更难得的是可以免费使用。安装完毕之后,它会在网页的最下面加上赞助商的广告。因为JoomSEF对广告的内容作了简单的Base64编码,所以很难找到存放广告内容的位置。其实广告内容就存放在/administrator/components/com_sef/signature.b64文件里。打开以后就可以看到编码后的内容。我们可以借助于下面的程序进行Base64解码。
<?php
echo base64_decode(’需要解码的内容’);
?>
解码后的内容就是广告的内容。其实Base64不是一种加密算法,他只是一种编码方法,应用非常广泛,例如我们平时写的邮件所加的附件都是采用Base64进行编码的。所以JoomSEF这样做只是防止你轻易的找到广告内容,其实并没有加密。
另外JoomSEF为了防止你删除或修改文件的内容,还利用了MD5算法对文件进行完整性检验。MD5算法的作用就是防止你纂改文件内容,他会根据文件的内容生成一套指纹编码,文件内容一旦改变,指纹编码就会和原来的不一致。MD5指纹编码的内容就在/administrator/components/com_sef/checksum.md5文件里。所以你修改了signature.b64文件,JoomSEF就会失效。
现在就让我们看看JoomSEF在哪里加入这段程序判断。为了防止你轻易的找到这段程序,JoomSEF也对这段程序进行base64编码。打开/administrator/components/com_sef/sef.class.php文件,可以在第415行找到这段加密的代码。(针对JoomSEF v2.2.2版本)
eval(base64_decode(’JHNlZk……’));
同样你可以用上一个程序进行解码,解码后得到的内容如下。我在程序后增加了中文注释。
$sefDirAdmin = $GLOBALS['mosConfig_absolute_path'].’/administrator/components/com_sef/’;//获得绝对路径
// load checksums
$license = trim(@file_get_contents($sefDirAdmin.’signature.b64′));//读取广告内容文件
$checksum = trim(@file_get_contents($sefDirAdmin.’checksum.md5′));//读取MD5编码文件
$checkstr = ”;
global $sefCheckA;
$sefCheckA[3] = $sefCheckA[2] = $sefCheckA[1] = $sefCheckA[0] = ”;
$sefCheckA = explode(’-', $license);
foreach ($sefCheckA as $id => $checkpart) {
$sefCheckA[$id] = base64_decode($checkpart);//解码广告内容
$checkstr .= $sefCheckA[$id];
}//验证MD5编码是否一致,如果一致说明就是完整的,JoomSEF可以正常工作,否则禁用。
$this->enabled &= ($checksum == md5($checkstr));function xmlParsing($path, $base, $index, $option)
{
global $_VERSION, $sefCheckA;
if (($path == $base)
|| ($path == ($base.$index))
|| (@$option == ‘com_frontpage’)) {
// frontpage code
$_VERSION->URL .= $sefCheckA[0];
$_VERSION->COPYRIGHT .= $sefCheckA[1];
}
else {
// other page code
$_VERSION->URL .= $sefCheckA[2];
$_VERSION->COPYRIGHT .= $sefCheckA[3];
}
}
function includeSef($once = false)
{
global $mosConfig_absolute_path, $sefCheckA;
static $first = true;
if( $once && !$first ) return;
$txt = file_get_contents($mosConfig_absolute_path.’/components/com_sef/sef_ext.php’);
if(substr($txt, 0, 5) != ‘<?php’) {
$txt = base64_encode($txt);
$txt = $sefCheckA[4].$txt;
$detxt = base64_decode($txt);
$detxt = substr($detxt, 2, -2);
eval($detxt);
} else {
if( $once ) {
include_once($mosConfig_absolute_path.’/components/com_sef/sef_ext.php’);
} else {
include($mosConfig_absolute_path.’/components/com_sef/sef_ext.php’);
}
}
$first = false;
}
以上就是JoomSEF验证编码的原理,以后大家可以在自己的软件设计中借鉴。
再次重申,请不要破解JoomSEF,如果你不想看到广告,完全可以将广告文字的颜色改为和背景色一样,效果是相同的。
最新评论