您现在的位置是:首页 > 其他

李清波 2017-03-24 其他 3539 复制当前网址

PHP免扩展加密(混淆加密)的基本原理(二)数据混淆


我们直接看代码吧

<?php
function phpencode($code) {
$code = str_replace(array('<?php','?>','<?PHP'),array('','',''),$code);
$encode = base64_encode(gzdeflate($code));// 开始编码
$encode = '<?php'."\neval(gzinflate(base64_decode("."'".$encode."'".")));\n?>";
return $encode;
}
function phpdecode($code) {
$code = str_replace(array('<!?php','<?PHP',"eval(gzinflate(base64_decode('","')));",'?>'),array('','','','','',''),$code);
$decode = base64_decode($code);
$decode = @gzinflate($decode);
return $decode;
}
?>
</span></p><form method="post">
<textarea name="source" cols="55" rows="8">
<?php
if(!empty($_POST['source'])) {
if($_POST['button']=='加密') {
echo htmlspecialchars(phpencode(stripcslashes($_POST['source'])));
}
if($_POST['button']=='解密') {
echo htmlspecialchars(phpdecode(stripcslashes($_POST['source'])));
}
}
?>
</textarea>
<?php
if(!empty($_POST['source']))
{
if($_POST['button']=='加密') 
{
echo '加密成功.';
}
if($_POST['button']=='解密') {
echo '解密成功.';
}
}else{
echo '操作失败';
}
?>
<input type="submit" name="button" value="加密">
<input type="submit" name="button" value="解密">
</form>


这里对刚才的加密来说,对代码进行了压缩,再base64 相比较之前的较为安全. 下面是微盾的加密代码,相比上面的加密,增加了混淆操作.


示例1

<?php // This file is protected by copyright law & provided under license. Copyright(C) 2005-2009 www.vidun.com, All rights reserved.
$OOO0O0O00=__FILE__;$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');$OO00O0000=244;$OOO0000O0=$OOO000000{4}.$OOO000000{9}.$OOO000000{3}.$OOO000000{5};$OOO0000O0.=$OOO000000{2}.$OOO000000{10}.$OOO000000{13}.$OOO000000{16};$OOO0000O0.=$OOO0000O0{3}.$OOO000000{11}.$OOO000000{12}.$OOO0000O0{7}.$OOO000000{5};$O0O0000O0='OOO0000O0';eval(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAwMDAwezE3fS4kT09PMDAwMDAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMjYwKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDM4MCksJ0VudGVyeW91d2toUkhZS05XT1VUQWFCYkNjRGRGZkdnSWlKakxsTW1QcFFxU3NWdlh4WnowMTIzNDU2Nzg5Ky89JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));return;?>


示例2

kr9NHenNHenNHe1zfukgFMaXdoyjcUImb19oUAxyb18mRtwmwJ4LT09NHr8XTzEXRJwmwJXPkr9NTzEXHenNHtILT08XT08XHr8XhtONTznNTzEXHr8Pkr8XHenNHr8XHtXLT08XHr8XHeEXhUXmOB50cbk5d3a3D2iUUylRTlfNaaOnCAkJW2YrcrcMO2fkDApQToxYdanXAbyTF1c2BuiDGjExHjH0YTC3KeLqRz0mRtfnWLYrOAcuUrlhU0xYTL9WAakTayaBa1icBMyJC2OlcMfPDBpqdo1Vd3nxFmY0fbc3Gul6HerZHzW1YjF4KUSvkZLphUL7cMYSd3YlhtONHeEXTznNHeEpK2a2CBXPkr9NHenNHenNHtL7eWplC2ivwtk0DolzwuOlF3WIcBYPdZExHjHibo4JKX0hcBYPdZEJfoipFZn0cbY0woajDo8IYeA2waxVwjSYtJOiNUwxHjHxHjHJKX0hDBCPkoriNUwJhbSYtMajDo8IwmOPDbHIfoazftnpcJEibo4JKX0hgW0hCBwPhTSYtMc1dMY0DB9VwoyJhtLYtmSYtMajDo8Ihtk0DolzwolzwuOlF3WIcmaVC3Opd24iwJL7eWp9eWP=


其中示例1部份为混淆的程序,下面示例2部份为数据. 这样加密比较难处理. 有兴趣的,可以自己去下载微盾.

下面附上运行的流程代码:



这里为当前PHP文件 ,下面为编码的数据



$OOO0O0O00=__FILE__;
$OOO000000=urldecode('%74%68%36%73%62%65%68%71%6c%61%34%63%6f%5f%73%61%64%66%70%6e%72');

解码后为:th6sbehqla4co_sadfpnr


下面就是用混淆的O(欧)0(零)要人不易读.

//************* 2 
$OO0OO0000=$OOO000000{17}.$OOO000000{12}.$OOO000000{18}.$OOO000000{5}.$OOO000000{19};
if(!0)$O000O0O00=$OO0OO0000($OOO0O0O00,'rb');$OO0OO000O=$OOO000000{17}.$OOO000000{20}.$OOO000000{5}.$OOO000000{9}.$OOO000000{16};
$OO0OO00O0=$OOO000000{14}.$OOO000000{0}.$OOO000000{20}.$OOO000000{0}.$OOO000000{20};$OO0OO000O($O000O0O00,1260);
$OO00O00O0=($OOO0000O0($OO0OO00O0($OO0OO000O($O000O0O00,380),'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgIiJjLlMmPpQqSsVvXxZz0123456789+/=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')));
eval($OO00O00O0);


//************* 1
$OO00O00O0=str_replace('__FILE__',"'".$OOO0O0O00."'",($OOO0000O0($OO0OO00O0($OO0OO000O($O000O0O00,$OO00O0000),'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgIiJjLlMmPpQqSsVvXxZz0123456789+/=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'))));fclose($O000O0O00);eval($OO00O00O0);

//************* 1 在这里得到最终的代码了.

echo "this test echo 123!\n";
echo "this test echo 456!\n";
$a="123123";
if($a!=""){
echo "this test if !\n";
}
ab();
function ab()
{
echo ("this is test function!");
}



最在结束的最后,后期出现的期他的加密神盾,威盾等等.采用了ascii码 129-255的乱码混淆来实现变量名,造成不易读.这样可以更好的保护代码的执行.但也存在致命的问题.就是无论怎么加密.最终都要还原成明文.这个就是破解的关键所在.在下次,读读这个加密的缺点,还有这个加密壳的资料.


文章来源:http://liqingbo.com/blog-1324.html

评论