September 1st, 2010

教你如何进行PHP的base64加解密

PHP, by hyperblue.

平时会下载一些开源源码来看,有些朋友”不厚道”的对部分代码进行了Base64加密,甚至多层.今天就和大家分享下,以后碰到就不会怕了.

先看一段经过加密后的源码,你是不是遇到过类似的?

1
2
3
4
<?php 
$_F=__FILE__;
$_X = 'PCEtLXN0YXJ0LS0+PGRpdiBjbGFzcz0idDVzdCI+PGhlPkg1bGxvIFdvcmxkPC9oZT48cD5Qb3c1ciBiNiA8YSBocjVmPSInRDpcd2FtcFx3d3dcdGVzdFx4eHgucGhwJyIgdGFyZzV0PSJfYmxhbjQiPkt1c2h1Lm41dDwvYT48cD48L2Rpdj48IS0tNW5kLS0+';
eval(base64_decode("JF9YID0gYmFzZTY0X2RlY29kZSgkX1gpOyRfWCA9IHN0cnRyKCRfWCwgImtleTEyMzQ1NiIsICIxMjM0NTZrZXkiKTskX1I9ZXJlZ19yZXBsYWNlKCJfX0ZJTEVfXyIsICRfRiAsJF9YKTtlY2hvKCRfUik7JF9SID0gMDskX1ggPSAwOw=="));

输出:

很多作者用此类加密来防止使用者修改版权之类的数据,还有的配合加密的js片段来使用.很悲哀,国内版权还不规范.

接下来我们来解密:

1
echo base64_decode("JF9YID0gYmFzZTY0X2RlY29kZSgkX1gpOyRfWCA9IHN0cnRyKCRfWCwgImtleTEyMzQ1NiIsICIxMjM0NTZrZXkiKTskX1I9ZXJlZ19yZXBsYWNlKCJfX0ZJTEVfXyIsICRfRiAsJF9YKTtlY2hvKCRfUik7JF9SID0gMDskX1ggPSAwOw==");

输出:

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解密后是什么?
同样执行:

1
echo base64_decode("PCEtLXN0YXJ0LS0+PGRpdiBjbGFzcz0idDVzdCI+PGhlPkg1bGxvIFdvcmxkPC9oZT48cD5Qb3c1ciBiNiA8YSBocjVmPSInRDpcd2FtcFx3d3dcdGVzdFx4eHgucGhwJyIgdGFyZzV0PSJfYmxhbjQiPkt1c2h1Lm41dDwvYT48cD48L2Rpdj48IS0tNW5kLS0+");

输出效果:

查看页面源代码如下:

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代码.组合一下:

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语句该不陌生了吧.输出看一下.接下来需要改什么,就自己操作了.

那我们反过来看是如何加密的?

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的加解密有些帮助.最后希望大家尊重版权,开源分享.

Back Top

Responses to “教你如何进行PHP的base64加解密”

发表我的评论



Back Top