平时会下载一些开源源码来看,有些朋友”不厚道”的对部分代码进行了Base64加密,甚至多层.今天就和大家分享下,以后碰到就不会怕了.
先看一段经过加密后的源码,你是不是遇到过类似的?
View Code PHP
1 2 3 4 | <?php $_F=__FILE__; $_X = 'PCEtLXN0YXJ0LS0+PGRpdiBjbGFzcz0idDVzdCI+PGhlPkg1bGxvIFdvcmxkPC9oZT48cD5Qb3c1ciBiNiA8YSBocjVmPSInRDpcd2FtcFx3d3dcdGVzdFx4eHgucGhwJyIgdGFyZzV0PSJfYmxhbjQiPkt1c2h1Lm41dDwvYT48cD48L2Rpdj48IS0tNW5kLS0+'; eval(base64_decode("JF9YID0gYmFzZTY0X2RlY29kZSgkX1gpOyRfWCA9IHN0cnRyKCRfWCwgImtleTEyMzQ1NiIsICIxMjM0NTZrZXkiKTskX1I9ZXJlZ19yZXBsYWNlKCJfX0ZJTEVfXyIsICRfRiAsJF9YKTtlY2hvKCRfUik7JF9SID0gMDskX1ggPSAwOw==")); |
很多作者用此类加密来防止使用者修改版权之类的数据,还有的配合加密的js片段来使用.很悲哀,国内版权还不规范.
接下来我们来解密:
View Code PHP
1 | echo base64_decode("JF9YID0gYmFzZTY0X2RlY29kZSgkX1gpOyRfWCA9IHN0cnRyKCRfWCwgImtleTEyMzQ1NiIsICIxMjM0NTZrZXkiKTskX1I9ZXJlZ19yZXBsYWNlKCJfX0ZJTEVfXyIsICRfRiAsJF9YKTtlY2hvKCRfUik7JF9SID0gMDskX1ggPSAwOw=="); |
输出:
View Code PHP
1 | $_X = base64_decode($_X);$_X = strtr($_X, "key123456", "123456key");$_R=ereg_replace("__FILE__", $_F ,$_X);echo($_R);$_R = 0;$_X = 0; |
经过base64_decode解密后你看到的一堆乱码变成了类似php语法的语句.
没错,接着看eval函数的作用,就是解析并输出php代码.
我们在来看下$_X解密后是什么?
同样执行:
View Code PHP
1 | echo base64_decode("PCEtLXN0YXJ0LS0+PGRpdiBjbGFzcz0idDVzdCI+PGhlPkg1bGxvIFdvcmxkPC9oZT48cD5Qb3c1ciBiNiA8YSBocjVmPSInRDpcd2FtcFx3d3dcdGVzdFx4eHgucGhwJyIgdGFyZzV0PSJfYmxhbjQiPkt1c2h1Lm41dDwvYT48cD48L2Rpdj48IS0tNW5kLS0+"); |
View Code PHP
1 | <!--start--><div class="t5st"><he>H5llo World</he><p>Pow5r b6 <a hr5f="'D:\wamp\www\test\xxx.php'" targ5t="_blan4">Kushu.n5t</a><p></div><!--5nd--> |
其中D:\wamp\www\test\xxx.php 即__FILE__输出的结果,按环境不同.
是不是觉得和要的效果代码差不多了.这个时候联系刚才解密的那段php代码.组合一下:
View Code PHP
1 2 3 4 5 6 7 | $_F=__FILE__; $_X = '<!--start--><div class="t5st"><he>H5llo World</he><p>Pow5r b6 <a hr5f="__FILE__" targ5t="_blan4">Kushu.n5t</a><p></div><!--5nd-->'; $_X = strtr($_X, "key123456", "123456key"); // 替换字符 $_R=ereg_replace("__FILE__", $_F ,$_X); // 这个其实未执行,__FILE__在前面已经被解析了.换下其他的看下. echo($_R); $_R = 0; $_X = 0; |
其实真正执行的可以说是这段代码,对于php语句该不陌生了吧.输出看一下.接下来需要改什么,就自己操作了.
那我们反过来看是如何加密的?
View Code PHP
1 2 3 4 5 6 7 | // 先加密 $_X = '<!--start--><div class="test"><h2>Hello World</h2><p>Power by <a href="__FILE__" target="_blank">Kushu.net</a><p></div><!--end-->';//最终在页面显示的代码 $_X = strtr($_X, '123456key', 'key123456'); $_R=ereg_replace('__FILE__',"'".$_F."'",$_X); echo base64_encode($_R); //得到$_X的加密值. echo base64_encode('$_X = base64_decode($_X);$_X = strtr($_X, "key123456", "123456key");$_R=ereg_replace("__FILE__", $_F ,$_X);echo($_R);$_R = 0;$_X = 0;'); //这一段也就是eval函数里执行的加密代码. |
可能写的还不是很完善,希望对学习php的加解密有些帮助.最后希望大家尊重版权,开源分享.


学习下