首页技术php解密 PHP文件如何解密

php解密 PHP文件如何解密

编程之家2023-11-01121次浏览

大家好,今天我将向大家分享有关php解密和PHP文件如何解密的一些独特见解,希望能够为你们带来新的思考和启示。

php解密 PHP文件如何解密

php加密和解密的代码

php提供的加密函数不只是有MD5,虽然MD5是用得最多的,因为其安全性相对较好。但是现在也有网站通过提供庞大的数据库来对其进行破解(比如www.cmd5.com)。

除了MD5外,php还支持base64加密,这个函数可以进行解密,但是这种方式加密的结果并不是很安全,当然,如果要求不是很高的话,可以使用。进行base64加密的函数是:base64_encode($str);相反,对加密后的结果进行解密的函数是:base64_decode($str)。如:

<?php

$a="admin";

$b=base64_encode($a);

$c=base64_decode($b);

php解密 PHP文件如何解密

echo"加密前:\$a=",$a,"<br/>";

echo"加密后:\$b=",$b,"<br/>";

echo"解密后:\$c=",$c,"<br/>";

?>

如果对这种方式得到的加密结果不满意,你可以对加密后或者加密前的字符串进行可逆处理(可逆是为了方便解密),然后在进行加密或者相关处理就可以了。

余下的自己搞定吧

php解密 PHP文件如何解密

PHP文件如何解密

所谓的PHP文件加密,一般有两种方式,一是ZEND编译,二是BASE64等编码,理论上都不是加密,下面分别说说如何还原。

对于ZEND编译过的代码,用记事本打开是完全是乱码,除了前面的很小的头部,后面不是可见ASCII字符,有点像打开一个EXE文件的效果,是无法阅读的。这类处理的文件一般认为是无法还原的,网上有DEZEND工具,你可以下载来试试看,能还原早期ZEND版本编译后的代码。

对于使用BASE64等编码后的PHP文件,可以用记事本打开查看,所有字符都是可见ASCII字符,一般使用两种方法加大阅读难度:一是使用$ll111、$ooo000这样的变量,字母L的小写与1混在一起、字母O的小写与数字0混在一起,不容易分辨变量名称。二是使用BASE64编码对原始代码进行转换,最后使用eval进行处理。往往两种方式结合在一起。

第二种方式处理后的代码是很容易还原的,方法就是把eval换为exit,在CLI(命令提示符)下执行就会显示出eval那个语句对应的等效代码,替换原始语句即可。有时候还原一次后还是eval语句,那需要按照同样的方法反复处理。

php脚本加密,求解密方法,或者帮我解一下,

首先调整格式,方便查看:

<?php// Internet Copyright(C) 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=196900;

$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';

echo(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAwMDAwezE3fS4kT09PMDAwMDAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMTgyKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDY5MiksJzFBNDBDbHZVTXBzNkhLekxYVlJjdG0vT2phaWczZjlaR3lFeEprQlRvUHIrTkZuMkllcWRRWWJ3N2hEdVM4VzU9JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));

return;

?>

我们注意到,关键是echo后面的那个变量,先输出看看:

<?php// Internet Copyright(C) 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=196900;

$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';

exit($$O0O0000O0);//这里的$$O0O0000O0,就是下一行中的变量

echo(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAwMDAwezE3fS4kT09PMDAwMDAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMTgyKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDY5MiksJzFBNDBDbHZVTXBzNkhLekxYVlJjdG0vT2phaWczZjlaR3lFeEprQlRvUHIrTkZuMkllcWRRWWJ3N2hEdVM4VzU9JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));

return;

?>

得到结果:base64_decode

所以,我们判断,下面的这一段代码是在解码一段base64编码的字符,我们再来看看解码之后是什么东东。去掉前面的exit,并且将现在的echo直接改成exit:

<?php// Internet Copyright(C) 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=196900;

$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';

exit(($$O0O0000O0('JE9PME9PMDAwMD0kT09PMDAwMDAwezE3fS4kT09PMDAwMDAwezEyfS4kT09PMDAwMDAwezE4fS4kT09PMDAwMDAwezV9LiRPT08wMDAwMDB7MTl9O2lmKCEwKSRPMDAwTzBPMDA9JE9PME9PMDAwMCgkT09PME8wTzAwLCdyYicpOyRPTzBPTzAwME89JE9PTzAwMDAwMHsxN30uJE9PTzAwMDAwMHsyMH0uJE9PTzAwMDAwMHs1fS4kT09PMDAwMDAwezl9LiRPT08wMDAwMDB7MTZ9OyRPTzBPTzAwTzA9JE9PTzAwMDAwMHsxNH0uJE9PTzAwMDAwMHswfS4kT09PMDAwMDAwezIwfS4kT09PMDAwMDAwezB9LiRPT08wMDAwMDB7MjB9OyRPTzBPTzAwME8oJE8wMDBPME8wMCwxMTgyKTskT08wME8wME8wPSgkT09PMDAwME8wKCRPTzBPTzAwTzAoJE9PME9PMDAwTygkTzAwME8wTzAwLDY5MiksJzFBNDBDbHZVTXBzNkhLekxYVlJjdG0vT2phaWczZjlaR3lFeEprQlRvUHIrTkZuMkllcWRRWWJ3N2hEdVM4VzU9JywnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycpKSk7ZXZhbCgkT08wME8wME8wKTs=')));

return;

?>

得到输出:

$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,1182);$OO00O00O0=($OOO0000O0($OO0OO00O0($OO0OO000O($O000O0O00,692),'1A40ClvUMps6HKzLXVRctm/Ojaig3f9ZGyExJkBToPr+NFn2IeqdQYbw7hDuS8W5=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')));eval($OO00O00O0);

好的,我们看出,这个又是一段加密的代码。是由原来的echo来的,那么我们就用这段代码替换原来的echo那部分代码:

<?php// Internet Copyright(C) 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=196900;

$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';

$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,1182);

$OO00O00O0=($OOO0000O0($OO0OO00O0($OO0OO000O($O000O0O00,692),'1A40ClvUMps6HKzLXVRctm/Ojaig3f9ZGyExJkBToPr+NFn2IeqdQYbw7hDuS8W5=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')));

eval($OO00O00O0);

return;

?>

好了,接近结果已经很近了!我们再看这段代码,注意最后,有个eval函数,eval函数能将普通的字符串当做是PHP代码进行执行,那么可以断定,在eval函数中,是一段真正执行的字符串型的PHP代码。而eval函数中的变量就是它上面的那一行的变量,,我们查看上面那个是什么,分别用exit输出上面那个变量等号右边的各个变量,得到:

<?php// Internet Copyright(C) 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=196900;

$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';

$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,1182);

$OO00O00O0=(base64_decode(strtr(fread($O000O0O00,692),'1A40ClvUMps6HKzLXVRctm/Ojaig3f9ZGyExJkBToPr+NFn2IeqdQYbw7hDuS8W5=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')));

eval($OO00O00O0);

return;

?>

还存在一个变量我们没直接替换,因为我们在用exit时,它输出的是一个资源句柄,那么我们继续向上找,找它的定义语句(利用编辑器的Ctrl+F查找,得到它是在if(!0)后面的那句,现在再exit后面的那个语句中的变量)得到:

if(!0)$O000O0O00=fopen($OOO0O0O00,'rb');

这当中右边的变量定义,同样在第一行找到了:

$OOO0O0O00=__FILE__;

好了,现在基本上我们已经找到了相关的所有的代码了,精简一下:

<?php// Internet Copyright(C) All rights reserved.

$OOO0O0O00=__FILE__;

if(!0)$O000O0O00=fopen($OOO0O0O00,'rb');

$OO00O00O0=(base64_decode(strtr(fread($O000O0O00,692),'1A40ClvUMps6HKzLXVRctm/Ojaig3f9ZGyExJkBToPr+NFn2IeqdQYbw7hDuS8W5=','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')));

eval($OO00O00O0);

return;

?>

接下来就是继续将eval换成exit,再替换,最后不再出现eval就对了

我测试了一下你这个页面,貌似没有什么结果,以前我解码过别人的一个Discuz插件,就是这样弄的!简单总结:加密时,利用数字0,字母O的大写,字母o的小写这三个字符的相似性来命名变量,再通过多次的base64编码和字符截取来实现加密;而解密就是利用程序自己阅读自己的程序输出结果,再截取字符串,将字符串base64解码,最后利用eval函数执行字符串完成。人工解码的主要工作就是不断的用exit替换eval,再覆盖源码,直到不再有eval为止。最后打印的结果就是程序明文源码。

网上有很详细的教程,你百度试试。我以前也是在网上看见的。

关于php解密和PHP文件如何解密的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

无忧建站网,请问建一个网站很难吗网站制作软件,谁能推荐比较简单的网页制作软件